Merge "Merge Android Pie into master"
diff --git a/common/tests/Android.mk b/common/tests/Android.mk
index 58ba01b..42ea168 100644
--- a/common/tests/Android.mk
+++ b/common/tests/Android.mk
@@ -16,7 +16,7 @@
include $(CLEAR_VARS)
LOCAL_CERTIFICATE := platform
-LOCAL_JAVA_LIBRARIES := android.test.runner
+LOCAL_JAVA_LIBRARIES := android.test.runner.stubs
LOCAL_MODULE_TAGS := tests
LOCAL_PACKAGE_NAME := AndroidCommonTests
LOCAL_SDK_VERSION := 8
diff --git a/framesequence/Android.mk b/framesequence/Android.mk
index 1b3cf2d..dbe47ea 100644
--- a/framesequence/Android.mk
+++ b/framesequence/Android.mk
@@ -25,4 +25,4 @@
include $(BUILD_STATIC_JAVA_LIBRARY)
-include $(call all-makefiles-under, $(LOCAL_PATH))
+include $(call first-makefiles-under, $(LOCAL_PATH))
diff --git a/framesequence/jni/FrameSequence_gif.cpp b/framesequence/jni/FrameSequence_gif.cpp
index 5118319..ed47834 100644
--- a/framesequence/jni/FrameSequence_gif.cpp
+++ b/framesequence/jni/FrameSequence_gif.cpp
@@ -111,12 +111,14 @@
}
#endif
- if (mGif->SColorMap) {
+ const ColorMapObject* cmap = mGif->SColorMap;
+ if (cmap) {
// calculate bg color
GraphicsControlBlock gcb;
DGifSavedExtensionToGCB(mGif, 0, &gcb);
- if (gcb.TransparentColor == NO_TRANSPARENT_COLOR) {
- mBgColor = gifColorToColor8888(mGif->SColorMap->Colors[mGif->SBackGroundColor]);
+ if (gcb.TransparentColor == NO_TRANSPARENT_COLOR
+ && mGif->SBackGroundColor < cmap->ColorCount) {
+ mBgColor = gifColorToColor8888(cmap->Colors[mGif->SBackGroundColor]);
}
}
}
@@ -307,19 +309,18 @@
cmap = frame.ImageDesc.ColorMap;
}
- if (cmap == NULL || cmap->ColorCount != (1 << cmap->BitsPerPixel)) {
- ALOGW("Warning: potentially corrupt color map");
- }
-
- const unsigned char* src = (unsigned char*)frame.RasterBits;
- Color8888* dst = outputPtr + frame.ImageDesc.Left +
- frame.ImageDesc.Top * outputPixelStride;
- GifWord copyWidth, copyHeight;
- getCopySize(frame.ImageDesc, width, height, copyWidth, copyHeight);
- for (; copyHeight > 0; copyHeight--) {
- copyLine(dst, src, cmap, gcb.TransparentColor, copyWidth);
- src += frame.ImageDesc.Width;
- dst += outputPixelStride;
+ // If a cmap is missing, the frame can't be decoded, so we skip it.
+ if (cmap) {
+ const unsigned char* src = (unsigned char*)frame.RasterBits;
+ Color8888* dst = outputPtr + frame.ImageDesc.Left +
+ frame.ImageDesc.Top * outputPixelStride;
+ GifWord copyWidth, copyHeight;
+ getCopySize(frame.ImageDesc, width, height, copyWidth, copyHeight);
+ for (; copyHeight > 0; copyHeight--) {
+ copyLine(dst, src, cmap, gcb.TransparentColor, copyWidth);
+ src += frame.ImageDesc.Width;
+ dst += outputPixelStride;
+ }
}
}
}
@@ -359,4 +360,3 @@
acceptsBuffers,
};
static Registry gRegister(gEntry);
-