diff options
Diffstat (limited to 'core/fxcodec/codec/ccodec_bmpmodule.cpp')
-rw-r--r-- | core/fxcodec/codec/ccodec_bmpmodule.cpp | 59 |
1 files changed, 11 insertions, 48 deletions
diff --git a/core/fxcodec/codec/ccodec_bmpmodule.cpp b/core/fxcodec/codec/ccodec_bmpmodule.cpp index 15394f1356..9186553c7b 100644 --- a/core/fxcodec/codec/ccodec_bmpmodule.cpp +++ b/core/fxcodec/codec/ccodec_bmpmodule.cpp @@ -13,42 +13,7 @@ #include "core/fxge/fx_dib.h" #include "third_party/base/ptr_util.h" -class CBmpContext : public CCodec_BmpModule::Context { - public: - CBmpContext(bmp_decompress_struct_p pBmp, - CCodec_BmpModule* pModule, - CCodec_BmpModule::Delegate* pDelegate); - ~CBmpContext() override; - - bmp_decompress_struct_p m_pBmp; - CFX_UnownedPtr<CCodec_BmpModule> const m_pModule; - CFX_UnownedPtr<CCodec_BmpModule::Delegate> const m_pDelegate; - char m_szLastError[256]; -}; - -extern "C" { - -static void bmp_error_data(bmp_decompress_struct_p pBmp, const char* err_msg) { - strncpy(pBmp->err_ptr, err_msg, BMP_MAX_ERROR_SIZE - 1); - longjmp(pBmp->jmpbuf, 1); -} - -static void bmp_read_scanline(bmp_decompress_struct_p pBmp, - int32_t row_num, - uint8_t* row_buf) { - auto* p = reinterpret_cast<CBmpContext*>(pBmp->context_ptr); - p->m_pDelegate->BmpReadScanline(row_num, row_buf); -} - -static bool bmp_get_data_position(bmp_decompress_struct_p pBmp, - uint32_t rcd_pos) { - auto* p = reinterpret_cast<CBmpContext*>(pBmp->context_ptr); - return p->m_pDelegate->BmpInputImagePositionBuf(rcd_pos); -} - -} // extern "C" - -CBmpContext::CBmpContext(bmp_decompress_struct_p pBmp, +CBmpContext::CBmpContext(BMPDecompressor* pBmp, CCodec_BmpModule* pModule, CCodec_BmpModule::Delegate* pDelegate) : m_pBmp(pBmp), m_pModule(pModule), m_pDelegate(pDelegate) { @@ -65,16 +30,13 @@ CCodec_BmpModule::~CCodec_BmpModule() {} std::unique_ptr<CCodec_BmpModule::Context> CCodec_BmpModule::Start( Delegate* pDelegate) { - bmp_decompress_struct_p pBmp = bmp_create_decompress(); + BMPDecompressor* pBmp = bmp_create_decompress(); if (!pBmp) return nullptr; auto p = pdfium::MakeUnique<CBmpContext>(pBmp, this, pDelegate); p->m_pBmp->context_ptr = p.get(); p->m_pBmp->err_ptr = p->m_szLastError; - p->m_pBmp->bmp_error_fn = bmp_error_data; - p->m_pBmp->bmp_get_row_fn = bmp_read_scanline; - p->m_pBmp->bmp_get_data_position_fn = bmp_get_data_position; return p; } @@ -87,13 +49,13 @@ int32_t CCodec_BmpModule::ReadHeader(Context* pContext, uint32_t** pal_pp, CFX_DIBAttribute* pAttribute) { auto* ctx = static_cast<CBmpContext*>(pContext); - if (setjmp(ctx->m_pBmp->jmpbuf)) { + if (setjmp(ctx->m_pBmp->jmpbuf)) return 0; - } - int32_t ret = bmp_read_header(ctx->m_pBmp); - if (ret != 1) { + + int32_t ret = ctx->m_pBmp->ReadHeader(); + if (ret != 1) return ret; - } + *width = ctx->m_pBmp->width; *height = ctx->m_pBmp->height; *tb_flag = ctx->m_pBmp->imgTB_flag; @@ -113,18 +75,19 @@ int32_t CCodec_BmpModule::LoadImage(Context* pContext) { auto* ctx = static_cast<CBmpContext*>(pContext); if (setjmp(ctx->m_pBmp->jmpbuf)) return 0; - return bmp_decode_image(ctx->m_pBmp); + + return ctx->m_pBmp->DecodeImage(); } uint32_t CCodec_BmpModule::GetAvailInput(Context* pContext, uint8_t** avail_buf_ptr) { auto* ctx = static_cast<CBmpContext*>(pContext); - return bmp_get_avail_input(ctx->m_pBmp, avail_buf_ptr); + return ctx->m_pBmp->GetAvailInput(avail_buf_ptr); } void CCodec_BmpModule::Input(Context* pContext, const uint8_t* src_buf, uint32_t src_size) { auto* ctx = static_cast<CBmpContext*>(pContext); - bmp_input_buffer(ctx->m_pBmp, (uint8_t*)src_buf, src_size); + ctx->m_pBmp->SetInputBuffer(const_cast<uint8_t*>(src_buf), src_size); } |