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
#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"
// 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
#include <setjmp.h>
#include <jpeglib.h>
#include <stdlib.h>
-#include <FMediaTypes.h>
+#include <FMediaImageTypes.h>
#include <FBaseSysLog.h>
#include "FMedia_JpegDecoder.h"
return r;
}
-result
-_JpegDecoder::DecodeN(byte*& outBuf, int& length)
+byte*
+_JpegDecoder::DecodeN(int& length)
{
int buffSize = 0;
int planarSize = 0;
byte* pReturnBuf = null;
int outY = 0;
int outX = 0;
-
+ byte* outBuf = null;
result r = E_SUCCESS;
// Set decoding option
}
pReturnBuf = null;
-
+ SetLastResult(E_SUCCESS);
CATCH:
- return r;
+ return outBuf;
}
result
* @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