summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
c1729c2)
1.
When trying to save an Image using
NativeImageSource::EncodeToFile( )
it was found that the JPEG and PNG code for saving a file had a bug
resulting in zero byte files being created.
Cause of the problem was due to code using Vector::Reserve
then a memcpy to copy image data into a vector. The vector
was then passed to function to save. As Vector::Reserve
doesn't adjust the size of the vector, Vector::Count()
was returning zero, so zero bytes were being written.
2.
When converting pixel data from TBM_FORMAT_RGB888 and
TBM_FORMAT_RGBA8888 to Dali::Pixel::RGB888 and Pixel::RGB8888
the Red component of a pixel was never being set
( except with an incorrect value for the first pixel of every line).
This resulted in captured images being green/blue.
Cherry picked from Tizen_3.0 branch where the patch has been tested
https://review.tizen.org/gerrit/#/c/129061/
Change-Id: Ie24d50a5f25449a78623a9b91eb68a52843a179b
{
cOffset = c*3;
offset = cOffset + r*stride;
{
cOffset = c*3;
offset = cOffset + r*stride;
- *(bufptr) = ptr[offset+2];
+ *(bufptr+cOffset) = ptr[offset+2];
*(bufptr+cOffset+1) = ptr[offset+1];
*(bufptr+cOffset+2) = ptr[offset];
}
*(bufptr+cOffset+1) = ptr[offset+1];
*(bufptr+cOffset+2) = ptr[offset];
}
{
cOffset = c*4;
offset = cOffset + r*stride;
{
cOffset = c*4;
offset = cOffset + r*stride;
- *(bufptr) = ptr[offset+3];
+ *(bufptr+cOffset) = ptr[offset+3];
*(bufptr+cOffset+1) = ptr[offset+2];
*(bufptr+cOffset+2) = ptr[offset+1];
*(bufptr+cOffset+3) = ptr[offset];
*(bufptr+cOffset+1) = ptr[offset+2];
*(bufptr+cOffset+2) = ptr[offset+1];
*(bufptr+cOffset+3) = ptr[offset];
- DALI_LOG_WARNING( "Tbm surface has unsupported pixel format.\n" );
-
- pixbuf.resize( 0 );
- width = 0;
- height = 0;
+ DALI_ASSERT_ALWAYS( 0 && "Tbm surface has unsupported pixel format.\n" );
Vector<unsigned char> jpegBuffer;
try
{
Vector<unsigned char> jpegBuffer;
try
{
- jpegBuffer.Reserve( jpegBufferSize );
+ jpegBuffer.Resize( jpegBufferSize );
iw = width;
ih = height;
Vector<unsigned char> data;
iw = width;
ih = height;
Vector<unsigned char> data;
- data.Reserve(width * height * bpp);
+ data.Resize(width * height * bpp);
unsigned char *dataPtr = data.Begin();
memcpy(dataPtr, buffer, width * height * bpp);
w = ih;
unsigned char *dataPtr = data.Begin();
memcpy(dataPtr, buffer, width * height * bpp);
w = ih;
iw = width;
ih = height;
Vector<unsigned char> data;
iw = width;
ih = height;
Vector<unsigned char> data;
- data.Reserve(width * height * bpp);
+ data.Resize(width * height * bpp);
unsigned char *dataPtr = data.Begin();
memcpy(dataPtr, buffer, width * height * bpp);
w = ih;
unsigned char *dataPtr = data.Begin();
memcpy(dataPtr, buffer, width * height * bpp);
w = ih;
bool EncodeToJpeg( const unsigned char* const pixelBuffer, Vector< unsigned char >& encodedPixels,
const std::size_t width, const std::size_t height, const Pixel::Format pixelFormat, unsigned quality )
{
bool EncodeToJpeg( const unsigned char* const pixelBuffer, Vector< unsigned char >& encodedPixels,
const std::size_t width, const std::size_t height, const Pixel::Format pixelFormat, unsigned quality )
{
if( !pixelBuffer )
{
DALI_LOG_ERROR("Null input buffer\n");
if( !pixelBuffer )
{
DALI_LOG_ERROR("Null input buffer\n");
// save the pixels to a persistent buffer that we own and let our cleaner
// class clean up the buffer as it goes out of scope:
AutoJpgMem cleaner( dstBuffer );
// save the pixels to a persistent buffer that we own and let our cleaner
// class clean up the buffer as it goes out of scope:
AutoJpgMem cleaner( dstBuffer );
- encodedPixels.Reserve( dstBufferSize );
+ encodedPixels.Resize( dstBufferSize );
memcpy( encodedPixels.Begin(), dstBuffer, dstBufferSize );
}
return true;
memcpy( encodedPixels.Begin(), dstBuffer, dstBufferSize );
}
return true;
if(encoded_img)
{
const Vector<unsigned char>::SizeType bufferSize = encoded_img->Count();
if(encoded_img)
{
const Vector<unsigned char>::SizeType bufferSize = encoded_img->Count();
- encoded_img->Reserve( bufferSize + length ); //< Can throw OOM.
+ encoded_img->Resize( bufferSize + length ); //< Can throw OOM.
unsigned char* const bufferBack = encoded_img->Begin() + bufferSize;
memcpy(bufferBack, data, length);
}
unsigned char* const bufferBack = encoded_img->Begin() + bufferSize;
memcpy(bufferBack, data, length);
}