From ad9cf52df959489b615f30cbf072415b3352063b Mon Sep 17 00:00:00 2001 From: Shan Huang Date: Fri, 13 Aug 2021 23:50:39 +0000 Subject: Revert "Revert "Revert "Implement dynamic colors for boot animation.""" This reverts commit 9f1123cb0d7f342f5c5e26467e9b5aff529e48a4. Reason for revert: b/196642443 ATV DOA failure. Bug: 196642443 Change-Id: Iad16e5e8f43850ffa7bf1f26701d85da96fd2cdd --- cmds/bootanimation/BootAnimation.cpp | 125 +++++------------------------------ 1 file changed, 15 insertions(+), 110 deletions(-) (limited to 'cmds/bootanimation/BootAnimation.cpp') diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp index 929e63e35dcc..6e27aff5ae7b 100644 --- a/cmds/bootanimation/BootAnimation.cpp +++ b/cmds/bootanimation/BootAnimation.cpp @@ -107,13 +107,9 @@ static const char PROGRESS_PROP_NAME[] = "service.bootanim.progress"; static const char DISPLAYS_PROP_NAME[] = "persist.service.bootanim.displays"; static const int ANIM_ENTRY_NAME_MAX = ANIM_PATH_MAX + 1; static constexpr size_t TEXT_POS_LEN_MAX = 16; -static const int DYNAMIC_COLOR_COUNT = 4; static const char U_TEXTURE[] = "uTexture"; static const char U_FADE[] = "uFade"; static const char U_CROP_AREA[] = "uCropArea"; -static const char U_START_COLOR_PREFIX[] = "uStartColor"; -static const char U_END_COLOR_PREFIX[] = "uEndColor"; -static const char U_COLOR_PROGRESS[] = "uColorProgress"; static const char A_UV[] = "aUv"; static const char A_POSITION[] = "aPosition"; static const char VERTEX_SHADER_SOURCE[] = R"( @@ -125,28 +121,6 @@ static const char VERTEX_SHADER_SOURCE[] = R"( gl_Position = aPosition; vUv = aUv; })"; -static const char IMAGE_FRAG_DYNAMIC_COLORING_SHADER_SOURCE[] = R"( - precision mediump float; - uniform sampler2D uTexture; - uniform float uFade; - uniform float uColorProgress; - uniform vec4 uStartColor0; - uniform vec4 uStartColor1; - uniform vec4 uStartColor2; - uniform vec4 uStartColor3; - uniform vec4 uEndColor0; - uniform vec4 uEndColor1; - uniform vec4 uEndColor2; - uniform vec4 uEndColor3; - varying highp vec2 vUv; - void main() { - vec4 mask = texture2D(uTexture, vUv); - vec4 color = mask.r * mix(uStartColor0, uEndColor0, uColorProgress) - + mask.g * mix(uStartColor1, uEndColor1, uColorProgress) - + mask.b * mix(uStartColor2, uEndColor2, uColorProgress) - + mask.a * mix(uStartColor3, uEndColor3, uColorProgress); - gl_FragColor = vec4(color.x, color.y, color.z, (1.0 - uFade)) * color.a; - })"; static const char IMAGE_FRAG_SHADER_SOURCE[] = R"( precision mediump float; uniform sampler2D uTexture; @@ -154,7 +128,7 @@ static const char IMAGE_FRAG_SHADER_SOURCE[] = R"( varying highp vec2 vUv; void main() { vec4 color = texture2D(uTexture, vUv); - gl_FragColor = vec4(color.x, color.y, color.z, (1.0 - uFade)) * color.a; + gl_FragColor = vec4(color.x, color.y, color.z, 1.0 - uFade); })"; static const char TEXT_FRAG_SHADER_SOURCE[] = R"( precision mediump float; @@ -252,10 +226,6 @@ static void* decodeImage(const void* encodedData, size_t dataLength, AndroidBitm outInfo->stride = AImageDecoder_getMinimumStride(decoder); outInfo->flags = 0; - // Set decoding option to alpha unpremultiplied so that the R, G, B channels - // of transparent pixels are preserved. - AImageDecoder_setUnpremultipliedRequired(decoder, true); - const size_t size = outInfo->stride * outInfo->height; void* pixels = malloc(size); int result = AImageDecoder_decodeImage(decoder, pixels, outInfo->stride, size); @@ -705,12 +675,9 @@ GLuint linkShader(GLuint vertexShader, GLuint fragmentShader) { } void BootAnimation::initShaders() { - bool dynamicColoringEnabled = mAnimation != nullptr && mAnimation->dynamicColoringEnabled; GLuint vertexShader = compileShader(GL_VERTEX_SHADER, (const GLchar *)VERTEX_SHADER_SOURCE); GLuint imageFragmentShader = - compileShader(GL_FRAGMENT_SHADER, dynamicColoringEnabled - ? (const GLchar *)IMAGE_FRAG_DYNAMIC_COLORING_SHADER_SOURCE - : (const GLchar *)IMAGE_FRAG_SHADER_SOURCE); + compileShader(GL_FRAGMENT_SHADER, (const GLchar *)IMAGE_FRAG_SHADER_SOURCE); GLuint textFragmentShader = compileShader(GL_FRAGMENT_SHADER, (const GLchar *)TEXT_FRAG_SHADER_SOURCE); @@ -725,22 +692,6 @@ void BootAnimation::initShaders() { glVertexAttribPointer(uvLocation, 2, GL_FLOAT, GL_FALSE, 0, quadUVs); glEnableVertexAttribArray(uvLocation); - if (dynamicColoringEnabled) { - glUseProgram(mImageShader); - SLOGI("[BootAnimation] Dynamically coloring boot animation."); - for (int i = 0; i < DYNAMIC_COLOR_COUNT; i++) { - float *startColor = mAnimation->startColors[i]; - float *endColor = mAnimation->endColors[i]; - glUniform4f(glGetUniformLocation(mImageShader, - (U_START_COLOR_PREFIX + std::to_string(i)).c_str()), - startColor[0], startColor[1], startColor[2], 1 /* alpha */); - glUniform4f(glGetUniformLocation(mImageShader, - (U_END_COLOR_PREFIX + std::to_string(i)).c_str()), - endColor[0], endColor[1], endColor[2], 1 /* alpha */); - } - mImageColorProgressLocation = glGetUniformLocation(mImageShader, U_COLOR_PROGRESS); - } - // Initialize text shader. mTextShader = linkShader(vertexShader, textFragmentShader); positionLocation = glGetAttribLocation(mTextShader, A_POSITION); @@ -918,20 +869,6 @@ static bool parseColor(const char str[7], float color[3]) { return true; } -// Parse a color represented as a signed decimal int string. -// E.g. "-2757722" (whose hex 2's complement is 0xFFD5EBA6). -// If the input color string is empty, set color with values in defaultColor. -static void parseColorDecimalString(const std::string& colorString, - float color[3], float defaultColor[3]) { - if (colorString == "") { - memcpy(color, defaultColor, sizeof(float) * 3); - return; - } - int colorInt = atoi(colorString.c_str()); - color[0] = ((float)((colorInt >> 16) & 0xFF)) / 0xFF; // r - color[1] = ((float)((colorInt >> 8) & 0xFF)) / 0xFF; // g - color[2] = ((float)(colorInt & 0xFF)) / 0xFF; // b -} static bool readFile(ZipFileRO* zip, const char* name, String8& outString) { ZipEntryRO entry = zip->findEntryByName(name); @@ -1073,8 +1010,6 @@ bool BootAnimation::parseAnimationDesc(Animation& animation) { return false; } char const* s = desString.string(); - std::string dynamicColoringPartName = ""; - bool postDynamicColoring = false; // Parse the description file for (;;) { @@ -1093,13 +1028,7 @@ bool BootAnimation::parseAnimationDesc(Animation& animation) { char color[7] = "000000"; // default to black if unspecified char clockPos1[TEXT_POS_LEN_MAX + 1] = ""; char clockPos2[TEXT_POS_LEN_MAX + 1] = ""; - char dynamicColoringPartNameBuffer[ANIM_ENTRY_NAME_MAX]; char pathType; - // start colors default to black if unspecified - char start_color_0[7] = "000000"; - char start_color_1[7] = "000000"; - char start_color_2[7] = "000000"; - char start_color_3[7] = "000000"; int nextReadPos; @@ -1114,15 +1043,6 @@ bool BootAnimation::parseAnimationDesc(Animation& animation) { } else { animation.progressEnabled = false; } - } else if (sscanf(l, "dynamic_colors %" STRTO(ANIM_PATH_MAX) "s #%6s #%6s #%6s #%6s", - dynamicColoringPartNameBuffer, - start_color_0, start_color_1, start_color_2, start_color_3)) { - animation.dynamicColoringEnabled = true; - parseColor(start_color_0, animation.startColors[0]); - parseColor(start_color_1, animation.startColors[1]); - parseColor(start_color_2, animation.startColors[2]); - parseColor(start_color_3, animation.startColors[3]); - dynamicColoringPartName = std::string(dynamicColoringPartNameBuffer); } else if (sscanf(l, "%c %d %d %" STRTO(ANIM_PATH_MAX) "s%n", &pathType, &count, &pause, path, &nextReadPos) >= 4) { if (pathType == 'f') { @@ -1135,16 +1055,6 @@ bool BootAnimation::parseAnimationDesc(Animation& animation) { // "clockPos1=%s, clockPos2=%s", // pathType, count, pause, path, framesToFadeCount, color, clockPos1, clockPos2); Animation::Part part; - if (path == dynamicColoringPartName) { - // Part is specified to use dynamic coloring. - part.useDynamicColoring = true; - part.postDynamicColoring = false; - postDynamicColoring = true; - } else { - // Part does not use dynamic coloring. - part.useDynamicColoring = false; - part.postDynamicColoring = postDynamicColoring; - } part.playUntilComplete = pathType == 'c'; part.framesToFadeCount = framesToFadeCount; part.count = count; @@ -1176,12 +1086,6 @@ bool BootAnimation::parseAnimationDesc(Animation& animation) { s = ++endl; } - for (int i = 0; i < DYNAMIC_COLOR_COUNT; i++) { - parseColorDecimalString( - android::base::GetProperty("persist.bootanim.color" + std::to_string(i + 1), ""), - animation.endColors[i], animation.startColors[i]); - } - return true; } @@ -1453,14 +1357,6 @@ bool BootAnimation::playAnimation(const Animation& animation) { for (size_t j=0 ; j