#include "plugin_tile_interface.h" #include "ttile.h" int tile_interface_get_raw_address_unsafe(toonz_tile_handle_t handle, void **address) { if (!handle || !address) return -1; // inval TTile *tile = reinterpret_cast(handle); tile->getRaster()->lock(); *address = tile->getRaster()->getRawData(); return 0; } int tile_interface_safen(toonz_tile_handle_t handle) { if (!handle) { return -1; // inval } TTile *tile = reinterpret_cast(handle); tile->getRaster()->unlock(); return 0; } int tile_interface_get_raw_stride(toonz_tile_handle_t handle, int *stride) { if (!handle || !stride) return -1; // inval TTile *tile = reinterpret_cast(handle); // return stride in byte, not in pixel *stride = tile->getRaster()->getWrap() * tile->getRaster()->getPixelSize(); return 0; } int tile_interface_get_element_type(toonz_tile_handle_t handle, int *element) { if (!handle || !element) return -1; // inval TTile *tile = reinterpret_cast(handle); TRasterP raster = tile->getRaster(); if (false) ; else if (TRaster32P(raster)) *element = TOONZ_TILE_TYPE_32P; else if (TRaster64P(raster)) *element = TOONZ_TILE_TYPE_64P; else if (TRasterGR8P(raster)) *element = TOONZ_TILE_TYPE_GR8P; else if (TRasterGR16P(raster)) *element = TOONZ_TILE_TYPE_GR16P; else if (TRasterGRDP(raster)) *element = TOONZ_TILE_TYPE_GRDP; else if (TRasterYUV422P(raster)) *element = TOONZ_TILE_TYPE_YUV422P; else { *element = TOONZ_TILE_TYPE_NONE; return -1; } return 0; } int tile_interface_copy_rect(toonz_tile_handle_t handle, int left, int top, int width, int height, void *dst, int dststride) { if (!handle || !dst || !dststride) return -1; // inval if (!width || !height) return 0; // do nothing TTile *tile = reinterpret_cast(handle); TRasterP raster = tile->getRaster(); if (!(0 <= left && left + width <= raster->getLx() && 0 <= top && top + height <= raster->getLy())) { return -1; } for (int y = 0; y < height; y++) { memcpy((UCHAR *)dst + y * dststride, raster->getRawData(left, top + y), width * raster->getPixelSize()); } return 0; } int tile_interface_create_from(toonz_tile_handle_t handle, toonz_tile_handle_t *newhandle) { if (!handle || !newhandle) return -1; // inval TTile *tile = reinterpret_cast(handle); TTile *newtile = new TTile(tile->getRaster()); *newhandle = reinterpret_cast(newtile); return 0; } int tile_interface_create(toonz_tile_handle_t *newhandle) { if (!newhandle) return -1; // inval *newhandle = reinterpret_cast(new TTile()); return 0; } int tile_interface_destroy(toonz_tile_handle_t handle) { if (!handle) return -1; // inval TTile *tile = reinterpret_cast(handle); delete tile; return 0; } int tile_interface_get_rectangle(toonz_tile_handle_t handle, toonz_rect_t *rect) { if (!handle || !rect) { return -1; // inval } TTile *tile = reinterpret_cast(handle); rect->x0 = tile->m_pos.x; rect->y0 = tile->m_pos.y; rect->x1 = tile->m_pos.x + tile->getRaster()->getLx(); rect->y1 = tile->m_pos.y + tile->getRaster()->getLy(); return 0; }