heif: fix decoding of image size different from full tiled area
Bug: 64077740
Change-Id: I57ee7e1bc05e320be723d224b9328526543cad25
diff --git a/media/libheif/HeifDecoderImpl.cpp b/media/libheif/HeifDecoderImpl.cpp
index 8b846be..080313c 100644
--- a/media/libheif/HeifDecoderImpl.cpp
+++ b/media/libheif/HeifDecoderImpl.cpp
@@ -216,8 +216,8 @@
if (frameInfo != nullptr) {
frameInfo->set(
- videoFrame->mWidth,
- videoFrame->mHeight,
+ videoFrame->mDisplayWidth,
+ videoFrame->mDisplayHeight,
videoFrame->mRotationAngle,
videoFrame->mBytesPerPixel,
videoFrame->mIccSize,
@@ -275,8 +275,8 @@
if (frameInfo != nullptr) {
frameInfo->set(
- videoFrame->mWidth,
- videoFrame->mHeight,
+ videoFrame->mDisplayWidth,
+ videoFrame->mDisplayHeight,
videoFrame->mRotationAngle,
videoFrame->mBytesPerPixel,
videoFrame->mIccSize,
@@ -290,11 +290,12 @@
return false;
}
VideoFrame* videoFrame = static_cast<VideoFrame*>(mFrameMemory->pointer());
- if (mCurScanline >= videoFrame->mHeight) {
+ if (mCurScanline >= videoFrame->mDisplayHeight) {
+ ALOGE("no more scanline available");
return false;
}
uint8_t* src = videoFrame->getFlattenedData() + videoFrame->mRowBytes * mCurScanline++;
- memcpy(dst, src, videoFrame->mBytesPerPixel * videoFrame->mWidth);
+ memcpy(dst, src, videoFrame->mBytesPerPixel * videoFrame->mDisplayWidth);
return true;
}
@@ -306,8 +307,8 @@
uint32_t oldScanline = mCurScanline;
mCurScanline += count;
- if (mCurScanline >= videoFrame->mHeight) {
- mCurScanline = videoFrame->mHeight;
+ if (mCurScanline > videoFrame->mDisplayHeight) {
+ mCurScanline = videoFrame->mDisplayHeight;
}
return (mCurScanline > oldScanline) ? (mCurScanline - oldScanline) : 0;
}