#include <unique_ptr.h>
#include <gif_lib.h>
+#include <FBaseBoolean.h>
+#include <FBaseInteger.h>
#include <FBaseLong.h>
#include <FMediaImageTypes.h>
#include <FBaseSysLog.h>
__pDec = null;
__bpp = 2;
__transparent = false;
+ __chromaKey = BGRA8888(0xff, 0x00, 0xff, 0x00);
__transColor = 0;
__pixelFormat = MEDIA_PIXEL_FORMAT_RGB565LE;
__firstFramePos = 0;
// Need to perform 4 passes on the images:
if (__bpp == 2)
{
+ if (__transparent)
+ {
+ __chromaKey = ((unsigned int*) pPalette)[__transColor];
+ }
+
for (count = 0, loopIndex = 0; loopIndex < 4; loopIndex++)
{
for (j = row + _INTERLACED_OFFSET[loopIndex]; j < row + height; j += _INTERLACED_JUMPS[loopIndex])
r = DGifGetLine(__pDec, pLine.get(), width);
SysTryReturn(NID_MEDIA, r != GIF_ERROR, E_INVALID_DATA, E_INVALID_DATA,
"[E_INVALID_DATA] DGifGetLineByte failed with code %x", GifLastError());
- if (__transparent)
- {
- for (k = 0; k < width; k++)
- {
- pBuf[k] = (pLine[k] == __transColor) ? pBuf[k] : ((unsigned short*) pPalette)[pLine[k]];
- }
- }
- else
+
{
for (k = 0; k < width; k++)
{
}
else if (__bpp == 4)
{
+ if (__transparent)
+ {
+ __chromaKey = ((unsigned int*) pPalette)[__transColor];
+ }
+
for (count = 0, loopIndex = 0; loopIndex < 4; loopIndex++)
{
for (j = row + _INTERLACED_OFFSET[loopIndex]; j < row + height; j += _INTERLACED_JUMPS[loopIndex])
{
for (k = 0; k < width; k++)
{
- pBuf[k] = (pLine[k] == __transColor) ? BGRA8888(0, 0, 0, 0) : ((unsigned int*) pPalette)[pLine[k]];
+ pBuf[k] = ((unsigned int*) pPalette)[pLine[k]];
+ if (pLine[k] == __transColor)
+ {
+ pBuf[k] &= 0x00ffffff;
+ }
}
}
else
{
if (__bpp == 2)
{
+ if (__transparent)
+ {
+ __chromaKey = ((unsigned short*) pPalette)[__transColor];
+ }
+
for (loopIndex = 0; loopIndex < height; loopIndex++)
{
unsigned short* pBuf = (unsigned short*) pDstBuffer + __pDec->SWidth * (row + loopIndex) + col;
r = DGifGetLine(__pDec, pLine.get(), width);
SysTryReturn(NID_MEDIA, r != GIF_ERROR, E_INVALID_DATA, E_INVALID_DATA,
"[E_INVALID_DATA] DGifGetLineByte failed with code %x", GifLastError());
- if (__transparent)
- {
- for (k = 0; k < width; k++)
- {
- pBuf[k] = (pLine[k] == __transColor) ? pBuf[k] : ((unsigned short*) pPalette)[pLine[k]];
- }
- }
- else
+ for (k = 0; k < width; k++)
{
- for (k = 0; k < width; k++)
- {
- pBuf[k] = ((unsigned short*) pPalette)[pLine[k]];
- }
+ pBuf[k] = ((unsigned short*) pPalette)[pLine[k]];
}
}
}
else if (__bpp == 4)
{
+ if (__transparent)
+ {
+ __chromaKey = ((unsigned int*)pPalette)[__transColor];
+ }
+
for (loopIndex = 0; loopIndex < height; loopIndex++)
{
unsigned int* pBuf = (unsigned int*) pDstBuffer + __pDec->SWidth * (row + loopIndex) + col;
{
for (k = 0; k < width; k++)
{
- pBuf[k] = (pLine[k] == __transColor) ? BGRA8888(0, 0, 0, 0) : ((unsigned int*) pPalette)[pLine[k]];
+ pBuf[k] = ((unsigned int*) pPalette)[pLine[k]];
+ if (pLine[k] == __transColor)
+ {
+ pBuf[k] &= 0x00ffffff;
+ }
}
}
else
return __pixelFormat; // MEDIA_PIXEL_FORMAT_RGB565LE;
}
-int
-_GifDecoder::GetDuration(void)
+result
+_GifDecoder::GetValue(const Tizen::Base::String& key, Tizen::Base::Object &value)
{
- return __duration;
+ result r = E_SUCCESS;
+ if (key.Equals(L"duration", false))
+ {
+ Long *pLong = null;
+ pLong = dynamic_cast<Long*>(&value);
+
+ SysTryCatch(NID_MEDIA, pLong, r = E_INVALID_ARG, E_INVALID_ARG,
+ "value is not a Long");
+ pLong->value = __duration;
+ }
+ else if (key.Equals(L"transparency", false))
+ {
+ Boolean *pTransparent = null;
+ pTransparent = dynamic_cast<Boolean*>(&value);
+
+ SysTryCatch(NID_MEDIA, pTransparent, r = E_INVALID_ARG, E_INVALID_ARG,
+ "value is not a Boolean");
+
+ pTransparent->value = __transparent;
+ }
+ else if (key.Equals(L"chromaKey", false))
+ {
+ Integer *pChromaKey = null;
+
+ pChromaKey = dynamic_cast<Integer*>(&value);
+
+ SysTryCatch(NID_MEDIA, pChromaKey, r = E_INVALID_ARG, E_INVALID_ARG,
+ "value is not an Integer");
+
+ pChromaKey->value = __chromaKey;
+ }
+ else
+ {
+ r = E_OBJ_NOT_FOUND;
+ }
+
+CATCH:
+ return r;
}
+
}} // Tizen::Media