Index: core/src/fxcodec/codec/fx_codec_jpx_opj.cpp |
diff --git a/core/src/fxcodec/codec/fx_codec_jpx_opj.cpp b/core/src/fxcodec/codec/fx_codec_jpx_opj.cpp |
index c4a0f88201a81db97599ac9aea9b1d7385585cdd..393c56781bf066b736716e5288b4488f213bfc29 100644 |
--- a/core/src/fxcodec/codec/fx_codec_jpx_opj.cpp |
+++ b/core/src/fxcodec/codec/fx_codec_jpx_opj.cpp |
@@ -52,9 +52,12 @@ static OPJ_SIZE_T opj_write_from_memory (void * p_buffer, OPJ_SIZE_T p_nb_bytes, |
static OPJ_OFF_T opj_skip_from_memory (OPJ_OFF_T p_nb_bytes, void* p_user_data) |
{ |
DecodeData* srcData = static_cast<DecodeData*>(p_user_data); |
- if (srcData == NULL || srcData->src_size == 0 || srcData->src_data == NULL || srcData->offset >= srcData->src_size) { |
+ if (srcData == NULL || srcData->src_size == 0 || srcData->src_data == NULL) { |
return -1; |
} |
+ if (srcData->offset >= srcData->src_size) { |
+ return p_nb_bytes; |
Tom Sepez
2015/03/11 18:25:41
I think we have to adjust the offset here, for exa
jun_fang
2015/03/11 21:14:41
Acknowledged.
|
+ } |
OPJ_SIZE_T bufferLength = srcData->src_size - srcData->offset; |
OPJ_SIZE_T skipLength = p_nb_bytes < bufferLength ? p_nb_bytes : bufferLength; |
srcData->offset += skipLength; |
@@ -63,9 +66,12 @@ static OPJ_OFF_T opj_skip_from_memory (OPJ_OFF_T p_nb_bytes, void* p_user_data) |
static OPJ_BOOL opj_seek_from_memory (OPJ_OFF_T p_nb_bytes, void* p_user_data) |
{ |
DecodeData* srcData = static_cast<DecodeData*>(p_user_data); |
- if (srcData == NULL || srcData->src_size == 0 || srcData->src_data == NULL || srcData->offset >= srcData->src_size) { |
+ if (srcData == NULL || srcData->src_size == 0 || srcData->src_data == NULL) { |
return OPJ_FALSE; |
} |
+ if (srcData->offset >= srcData->src_size) { |
+ return OPJ_TRUE; |
+ } |
if (p_nb_bytes >= srcData->src_size) { |
return OPJ_FALSE; |
} |
@@ -629,7 +635,7 @@ FX_BOOL CJPX_Decoder::Init(const unsigned char* src_data, int src_size) |
image = NULL; |
return FALSE; |
} |
- if (!(opj_decode(l_codec, l_stream, image) && opj_end_decompress(l_codec, l_stream))) { |
+ if (!(opj_decode(l_codec, l_stream, image) && opj_end_decompress(l_codec, l_stream))) { |
opj_image_destroy(image); |
image = NULL; |
return FALSE; |