From 6a0f1f5b678485f3752fff32cc8ad1a0cd16db35 Mon Sep 17 00:00:00 2001 From: JungYumin Date: Fri, 12 Apr 2013 12:43:35 +0900 Subject: [PATCH] Added bypass routine(JpegDecoder) when failed to get subsampling in JpegTurboDecoder Change-Id: Ifa95feb3fd501774d763a1220a8c8dcd9bf56c34 Signed-off-by: JungYumin --- CMakeLists.txt | 1 + src/FMedia_ImageDecoder.cpp | 12 ++++++++++++ src/FMedia_JpegDecoder.cpp | 12 ++++++------ src/FMedia_JpegDecoder.h | 2 +- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5abb7b6..79f5199 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,6 +27,7 @@ SET (${this_target}_SOURCE_FILES src/FMedia_BmpDecoder.cpp src/FMedia_PngDecoder.cpp src/FMedia_GifDecoder.cpp + src/FMedia_JpegDecoder.cpp src/FMedia_JpegTurboDecoder.cpp src/FMedia_TiffDecoder.cpp src/FMedia_WbmpDecoder.cpp diff --git a/src/FMedia_ImageDecoder.cpp b/src/FMedia_ImageDecoder.cpp index 7b8b6d4..fd976e4 100644 --- a/src/FMedia_ImageDecoder.cpp +++ b/src/FMedia_ImageDecoder.cpp @@ -31,6 +31,7 @@ #include "FMedia_ColorConverter.h" #include "FMedia_ImageDecoder.h" #include "FMedia_PngDecoder.h" +#include "FMedia_JpegDecoder.h" #include "FMedia_JpegTurboDecoder.h" #include "FMedia_GifDecoder.h" #include "FMedia_BmpDecoder.h" @@ -346,6 +347,17 @@ _ImageDecoder::Construct(const Tizen::Base::ByteBuffer& srcBuf, // Decoder construction r = __pDec->Construct((byte*) __pSrcBuf->GetPointer(), __pSrcBuf->GetCapacity(), pixelFormat); + // TODO: enhance me. turbo jpeg construction failed. + if (IsFailed(r) && __imgFormat == IMG_FORMAT_JPG) + { + __pDec.reset(new (std::nothrow) _JpegDecoder()); + SysTryCatch(NID_MEDIA, __pDec.get() != null, r = GetLastResult(), r, + "[%s] Could not create decoder for image format %d.", + GetErrorMessage(r), __imgFormat); + + // Decoder construction + r = __pDec->Construct((byte*) __pSrcBuf->GetPointer(), __pSrcBuf->GetCapacity(), pixelFormat); + } SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagated.", GetErrorMessage(r)); // Get original dimension diff --git a/src/FMedia_JpegDecoder.cpp b/src/FMedia_JpegDecoder.cpp index fa9da1f..6474f19 100644 --- a/src/FMedia_JpegDecoder.cpp +++ b/src/FMedia_JpegDecoder.cpp @@ -23,7 +23,7 @@ #include #include #include -#include +#include #include #include "FMedia_JpegDecoder.h" @@ -147,8 +147,8 @@ CATCH: return r; } -result -_JpegDecoder::DecodeN(byte*& outBuf, int& length) +byte* +_JpegDecoder::DecodeN(int& length) { int buffSize = 0; int planarSize = 0; @@ -156,7 +156,7 @@ _JpegDecoder::DecodeN(byte*& outBuf, int& length) byte* pReturnBuf = null; int outY = 0; int outX = 0; - + byte* outBuf = null; result r = E_SUCCESS; // Set decoding option @@ -312,9 +312,9 @@ _JpegDecoder::DecodeN(byte*& outBuf, int& length) } pReturnBuf = null; - + SetLastResult(E_SUCCESS); CATCH: - return r; + return outBuf; } result diff --git a/src/FMedia_JpegDecoder.h b/src/FMedia_JpegDecoder.h index 45cf227..78945db 100644 --- a/src/FMedia_JpegDecoder.h +++ b/src/FMedia_JpegDecoder.h @@ -71,7 +71,7 @@ public: * @exception E_OUT_OF_MEMORY Memory is insufficient. * @exception E_INVALID_DATA The data is invalid. */ - virtual result DecodeN(byte*& outBuf, int& length); + virtual byte* DecodeN(int& length); /** * Sets the decoding region. @n -- 2.7.4