Merge "DO NOT MERGE Prevent ImageWallpaper from crashing due to wide gamut" into qt-dev

This commit is contained in:
Wu Ahan
2020-06-03 18:07:58 +00:00
committed by Android (Google) Code Review
2 changed files with 24 additions and 13 deletions

View File

@@ -167,7 +167,7 @@ class ImageGLWallpaper {
private void setupTexture(Bitmap bitmap) { private void setupTexture(Bitmap bitmap) {
final int[] tids = new int[1]; final int[] tids = new int[1];
if (bitmap == null) { if (bitmap == null || bitmap.isRecycled()) {
Log.w(TAG, "setupTexture: invalid bitmap"); Log.w(TAG, "setupTexture: invalid bitmap");
return; return;
} }
@@ -179,16 +179,20 @@ class ImageGLWallpaper {
return; return;
} }
try {
// Bind a named texture to a target. // Bind a named texture to a target.
glBindTexture(GL_TEXTURE_2D, tids[0]); glBindTexture(GL_TEXTURE_2D, tids[0]);
// Load the bitmap data and copy it over into the texture object that is currently bound. // Load the bitmap data and copy it over into the texture object
// that is currently bound.
GLUtils.texImage2D(GL_TEXTURE_2D, 0, bitmap, 0); GLUtils.texImage2D(GL_TEXTURE_2D, 0, bitmap, 0);
// Use bilinear texture filtering when minification. // Use bilinear texture filtering when minification.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
// Use bilinear texture filtering when magnification. // Use bilinear texture filtering when magnification.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
mTextureId = tids[0]; mTextureId = tids[0];
} catch (IllegalArgumentException e) {
Log.w(TAG, "Failed uploading texture: " + e.getLocalizedMessage());
}
} }
void useTexture() { void useTexture() {

View File

@@ -86,7 +86,13 @@ class ImageProcessHelper {
protected Float doInBackground(Bitmap... bitmaps) { protected Float doInBackground(Bitmap... bitmaps) {
Bitmap bitmap = bitmaps[0]; Bitmap bitmap = bitmaps[0];
if (bitmap != null) { if (bitmap != null) {
try {
return new Threshold().compute(bitmap); return new Threshold().compute(bitmap);
} catch (RuntimeException e) {
Log.e(TAG, "Failed at computing threshold, color space="
+ bitmap.getColorSpace(), e);
return DEFAULT_THRESHOLD;
}
} }
Log.e(TAG, "ThresholdComputeTask: Can't get bitmap"); Log.e(TAG, "ThresholdComputeTask: Can't get bitmap");
return DEFAULT_THRESHOLD; return DEFAULT_THRESHOLD;
@@ -116,7 +122,8 @@ class ImageProcessHelper {
int width = bitmap.getWidth(); int width = bitmap.getWidth();
int height = bitmap.getHeight(); int height = bitmap.getHeight();
Bitmap grayscale = Bitmap.createBitmap(width, height, bitmap.getConfig()); Bitmap grayscale = Bitmap.createBitmap(width, height,
bitmap.getConfig(), false, bitmap.getColorSpace());
Canvas canvas = new Canvas(grayscale); Canvas canvas = new Canvas(grayscale);
ColorMatrix cm = new ColorMatrix(LUMINOSITY_MATRIX); ColorMatrix cm = new ColorMatrix(LUMINOSITY_MATRIX);
Paint paint = new Paint(); Paint paint = new Paint();