Loading media/libheif/HeifDecoderImpl.cpp +25 −8 Original line number Diff line number Diff line Loading @@ -334,6 +334,13 @@ bool HeifDecoderImpl::init(HeifStream* stream, HeifFrameInfo* frameInfo) { } mDataSource = dataSource; return reinit(frameInfo); } bool HeifDecoderImpl::reinit(HeifFrameInfo* frameInfo) { mFrameDecoded = false; mFrameMemory.clear(); mRetriever = new MediaMetadataRetriever(); status_t err = mRetriever->setDataSource(mDataSource, "image/heif"); if (err != OK) { Loading Loading @@ -457,29 +464,37 @@ bool HeifDecoderImpl::getEncodedColor(HeifEncodedColor* /*outColor*/) const { } bool HeifDecoderImpl::setOutputColor(HeifColorFormat heifColor) { if (heifColor == mOutputColor) { return true; } switch(heifColor) { case kHeifColorFormat_RGB565: { mOutputColor = HAL_PIXEL_FORMAT_RGB_565; return true; break; } case kHeifColorFormat_RGBA_8888: { mOutputColor = HAL_PIXEL_FORMAT_RGBA_8888; return true; break; } case kHeifColorFormat_BGRA_8888: { mOutputColor = HAL_PIXEL_FORMAT_BGRA_8888; return true; } default: break; } default: ALOGE("Unsupported output color format %d", heifColor); return false; } if (mFrameDecoded) { return reinit(nullptr); } return true; } bool HeifDecoderImpl::decodeAsync() { for (size_t i = 1; i < mNumSlices; i++) { ALOGV("decodeAsync(): decoding slice %zu", i); Loading @@ -506,7 +521,8 @@ bool HeifDecoderImpl::decodeAsync() { } // Aggressive clear to avoid holding on to resources mRetriever.clear(); mDataSource.clear(); // Hold on to mDataSource in case the client wants to redecode. return false; } Loading Loading @@ -606,7 +622,8 @@ bool HeifDecoderImpl::decode(HeifFrameInfo* frameInfo) { // Aggressively clear to avoid holding on to resources mRetriever.clear(); mDataSource.clear(); // Hold on to mDataSource in case the client wants to redecode. return true; } Loading media/libheif/HeifDecoderImpl.h +1 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,7 @@ private: bool decodeAsync(); bool getScanlineInner(uint8_t* dst); bool reinit(HeifFrameInfo* frameInfo); }; } // namespace android Loading Loading
media/libheif/HeifDecoderImpl.cpp +25 −8 Original line number Diff line number Diff line Loading @@ -334,6 +334,13 @@ bool HeifDecoderImpl::init(HeifStream* stream, HeifFrameInfo* frameInfo) { } mDataSource = dataSource; return reinit(frameInfo); } bool HeifDecoderImpl::reinit(HeifFrameInfo* frameInfo) { mFrameDecoded = false; mFrameMemory.clear(); mRetriever = new MediaMetadataRetriever(); status_t err = mRetriever->setDataSource(mDataSource, "image/heif"); if (err != OK) { Loading Loading @@ -457,29 +464,37 @@ bool HeifDecoderImpl::getEncodedColor(HeifEncodedColor* /*outColor*/) const { } bool HeifDecoderImpl::setOutputColor(HeifColorFormat heifColor) { if (heifColor == mOutputColor) { return true; } switch(heifColor) { case kHeifColorFormat_RGB565: { mOutputColor = HAL_PIXEL_FORMAT_RGB_565; return true; break; } case kHeifColorFormat_RGBA_8888: { mOutputColor = HAL_PIXEL_FORMAT_RGBA_8888; return true; break; } case kHeifColorFormat_BGRA_8888: { mOutputColor = HAL_PIXEL_FORMAT_BGRA_8888; return true; } default: break; } default: ALOGE("Unsupported output color format %d", heifColor); return false; } if (mFrameDecoded) { return reinit(nullptr); } return true; } bool HeifDecoderImpl::decodeAsync() { for (size_t i = 1; i < mNumSlices; i++) { ALOGV("decodeAsync(): decoding slice %zu", i); Loading @@ -506,7 +521,8 @@ bool HeifDecoderImpl::decodeAsync() { } // Aggressive clear to avoid holding on to resources mRetriever.clear(); mDataSource.clear(); // Hold on to mDataSource in case the client wants to redecode. return false; } Loading Loading @@ -606,7 +622,8 @@ bool HeifDecoderImpl::decode(HeifFrameInfo* frameInfo) { // Aggressively clear to avoid holding on to resources mRetriever.clear(); mDataSource.clear(); // Hold on to mDataSource in case the client wants to redecode. return true; } Loading
media/libheif/HeifDecoderImpl.h +1 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,7 @@ private: bool decodeAsync(); bool getScanlineInner(uint8_t* dst); bool reinit(HeifFrameInfo* frameInfo); }; } // namespace android Loading