| #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; |
| TTile *tile = reinterpret_cast<TTile *>(handle); |
| |
| tile->getRaster()->lock(); |
| *address = tile->getRaster()->getRawData(); |
| |
| return 0; |
| } |
| |
| int tile_interface_safen(toonz_tile_handle_t handle) |
| { |
| if (!handle) { |
| return -1; |
| } |
| |
| TTile *tile = reinterpret_cast<TTile *>(handle); |
| tile->getRaster()->unlock(); |
| |
| return 0; |
| } |
| |
| int tile_interface_get_raw_stride(toonz_tile_handle_t handle, int *stride) |
| { |
| if (!handle || !stride) |
| return -1; |
| TTile *tile = reinterpret_cast<TTile *>(handle); |
| |
| |
| *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; |
| TTile *tile = reinterpret_cast<TTile *>(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; |
| if (!width || !height) |
| return 0; |
| |
| TTile *tile = reinterpret_cast<TTile *>(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; |
| TTile *tile = reinterpret_cast<TTile *>(handle); |
| TTile *newtile = new TTile(tile->getRaster()); |
| *newhandle = reinterpret_cast<toonz_tile_handle_t *>(newtile); |
| |
| return 0; |
| } |
| |
| int tile_interface_create(toonz_tile_handle_t *newhandle) |
| { |
| if (!newhandle) |
| return -1; |
| *newhandle = reinterpret_cast<toonz_tile_handle_t *>(new TTile()); |
| |
| return 0; |
| } |
| |
| int tile_interface_destroy(toonz_tile_handle_t handle) |
| { |
| if (!handle) |
| return -1; |
| TTile *tile = reinterpret_cast<TTile *>(handle); |
| |
| delete tile; |
| |
| return 0; |
| } |
| |
| int tile_interface_get_rectangle(toonz_tile_handle_t handle, toonz_rect_t *rect) |
| { |
| if (!handle || !rect) { |
| return -1; |
| } |
| |
| TTile *tile = reinterpret_cast<TTile *>(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; |
| } |