14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved.
24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file.
44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
75ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann#include "core/fxcodec/codec/ccodec_gifmodule.h"
85ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann
94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcodec/codec/codec_int.h"
104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcodec/fx_codec.h"
114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcodec/lgif/fx_gif.h"
124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxge/fx_dib.h"
135ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann
144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannstruct FXGIF_Context {
154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  gif_decompress_struct_p gif_ptr;
164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void* parent_ptr;
174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void* (*m_AllocFunc)(unsigned int);
194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void (*m_FreeFunc)(void*);
204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann};
215ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann
224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannextern "C" {
234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannstatic void* gif_alloc_func(unsigned int size) {
244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return FX_Alloc(char, size);
254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannstatic void gif_free_func(void* p) {
274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_Free(p);
284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann};
305ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann
314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannstatic void gif_error_data(gif_decompress_struct_p gif_ptr,
324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                           const FX_CHAR* err_msg) {
334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FXSYS_strncpy((char*)gif_ptr->err_ptr, err_msg, GIF_MAX_ERROR_SIZE - 1);
344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  longjmp(gif_ptr->jmpbuf, 1);
354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
365ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann
374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannstatic uint8_t* gif_ask_buf_for_pal(gif_decompress_struct_p gif_ptr,
384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    int32_t pal_size) {
394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FXGIF_Context* p = (FXGIF_Context*)gif_ptr->context_ptr;
404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CCodec_GifModule* pModule = (CCodec_GifModule*)p->parent_ptr;
415ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  return pModule->GetDelegate()->GifAskLocalPaletteBuf(
425ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann      gif_get_frame_num(gif_ptr), pal_size);
434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
445ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann
454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannstatic void gif_record_current_position(gif_decompress_struct_p gif_ptr,
464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                        uint32_t* cur_pos_ptr) {
474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FXGIF_Context* p = (FXGIF_Context*)gif_ptr->context_ptr;
484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CCodec_GifModule* pModule = (CCodec_GifModule*)p->parent_ptr;
495ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  pModule->GetDelegate()->GifRecordCurrentPosition(*cur_pos_ptr);
504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
515ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann
524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannstatic void gif_read_scanline(gif_decompress_struct_p gif_ptr,
534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              int32_t row_num,
544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              uint8_t* row_buf) {
554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FXGIF_Context* p = (FXGIF_Context*)gif_ptr->context_ptr;
564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CCodec_GifModule* pModule = (CCodec_GifModule*)p->parent_ptr;
575ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  pModule->GetDelegate()->GifReadScanline(row_num, row_buf);
584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
595ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann
604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannstatic bool gif_get_record_position(gif_decompress_struct_p gif_ptr,
614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    uint32_t cur_pos,
624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    int32_t left,
634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    int32_t top,
644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    int32_t width,
654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    int32_t height,
664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    int32_t pal_num,
674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    void* pal_ptr,
684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    int32_t delay_time,
694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    bool user_input,
704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    int32_t trans_index,
714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    int32_t disposal_method,
724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    bool interlace) {
734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FXGIF_Context* p = (FXGIF_Context*)gif_ptr->context_ptr;
744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CCodec_GifModule* pModule = (CCodec_GifModule*)p->parent_ptr;
755ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  return pModule->GetDelegate()->GifInputRecordPositionBuf(
765ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann      cur_pos, FX_RECT(left, top, left + width, top + height), pal_num, pal_ptr,
775ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann      delay_time, user_input, trans_index, disposal_method, interlace);
784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
805ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. MoltmannCCodec_GifModule::CCodec_GifModule() {
815ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann  memset(m_szLastError, 0, sizeof(m_szLastError));
825ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann}
835ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann
845ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. MoltmannCCodec_GifModule::~CCodec_GifModule() {}
855ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann
865ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. MoltmannFXGIF_Context* CCodec_GifModule::Start() {
874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FXGIF_Context* p = FX_Alloc(FXGIF_Context, 1);
884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!p)
894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return nullptr;
904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FXSYS_memset(p, 0, sizeof(FXGIF_Context));
924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  p->m_AllocFunc = gif_alloc_func;
934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  p->m_FreeFunc = gif_free_func;
944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  p->gif_ptr = nullptr;
954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  p->parent_ptr = (void*)this;
964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  p->gif_ptr = gif_create_decompress();
974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!p->gif_ptr) {
984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FX_Free(p);
994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return nullptr;
1004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  p->gif_ptr->context_ptr = (void*)p;
1024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  p->gif_ptr->err_ptr = m_szLastError;
1034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  p->gif_ptr->gif_error_fn = gif_error_data;
1044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  p->gif_ptr->gif_ask_buf_for_pal_fn = gif_ask_buf_for_pal;
1054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  p->gif_ptr->gif_record_current_position_fn = gif_record_current_position;
1064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  p->gif_ptr->gif_get_row_fn = gif_read_scanline;
1074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  p->gif_ptr->gif_get_record_position_fn = gif_get_record_position;
1084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return p;
1094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CCodec_GifModule::Finish(FXGIF_Context* ctx) {
1124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (ctx) {
1134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    gif_destroy_decompress(&ctx->gif_ptr);
1144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ctx->m_FreeFunc(ctx);
1154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CCodec_GifModule::ReadHeader(FXGIF_Context* ctx,
1194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                     int* width,
1204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                     int* height,
1214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                     int* pal_num,
1224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                     void** pal_pp,
1234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                     int* bg_index,
1244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                     CFX_DIBAttribute* pAttribute) {
1254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (setjmp(ctx->gif_ptr->jmpbuf))
1264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return 0;
1274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t ret = gif_read_header(ctx->gif_ptr);
1294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (ret != 1)
1304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return ret;
1314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  *width = ctx->gif_ptr->width;
1334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  *height = ctx->gif_ptr->height;
1344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  *pal_num = ctx->gif_ptr->global_pal_num;
1354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  *pal_pp = ctx->gif_ptr->global_pal_ptr;
1364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  *bg_index = ctx->gif_ptr->bc_index;
1374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return 1;
1384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CCodec_GifModule::LoadFrameInfo(FXGIF_Context* ctx, int* frame_num) {
1414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (setjmp(ctx->gif_ptr->jmpbuf))
1424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return 0;
1434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t ret = gif_get_frame(ctx->gif_ptr);
1454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (ret != 1)
1464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return ret;
1474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  *frame_num = gif_get_frame_num(ctx->gif_ptr);
1494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return 1;
1504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CCodec_GifModule::LoadFrame(FXGIF_Context* ctx,
1534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    int frame_num,
1544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    CFX_DIBAttribute* pAttribute) {
1554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (setjmp(ctx->gif_ptr->jmpbuf))
1564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return 0;
1574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t ret = gif_load_frame(ctx->gif_ptr, frame_num);
1594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (ret == 1) {
1604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pAttribute) {
1614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pAttribute->m_nGifLeft =
1624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          (*ctx->gif_ptr->img_ptr_arr_ptr)[frame_num]->image_info_ptr->left;
1634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pAttribute->m_nGifTop =
1644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          (*ctx->gif_ptr->img_ptr_arr_ptr)[frame_num]->image_info_ptr->top;
1654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pAttribute->m_fAspectRatio = ctx->gif_ptr->pixel_aspect;
1664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (ctx->gif_ptr->cmt_data_ptr) {
1674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        const uint8_t* buf =
1684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            (const uint8_t*)ctx->gif_ptr->cmt_data_ptr->GetBuffer(0);
1694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        uint32_t len = ctx->gif_ptr->cmt_data_ptr->GetLength();
1704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        if (len > 21) {
1714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          uint8_t size = *buf++;
1724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          if (size) {
1734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            pAttribute->m_strAuthor = CFX_ByteString(buf, size);
1744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          } else {
1754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            pAttribute->m_strAuthor.clear();
1764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          }
1774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          buf += size;
1784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          size = *buf++;
1794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          if (size == 20) {
1804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann            FXSYS_memcpy(pAttribute->m_strTime, buf, size);
1814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          }
1824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        }
1834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
1844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
1854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return ret;
1874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannuint32_t CCodec_GifModule::GetAvailInput(FXGIF_Context* ctx,
1904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                         uint8_t** avail_buf_ptr) {
1914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return gif_get_avail_input(ctx->gif_ptr, avail_buf_ptr);
1924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CCodec_GifModule::Input(FXGIF_Context* ctx,
1954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                             const uint8_t* src_buf,
1964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                             uint32_t src_size) {
1974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  gif_input_buffer(ctx->gif_ptr, (uint8_t*)src_buf, src_size);
1984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
199