diff --git a/framework/render/video/glRender/YUVProgramContext.cpp b/framework/render/video/glRender/YUVProgramContext.cpp index 4724bde31..380384271 100644 --- a/framework/render/video/glRender/YUVProgramContext.cpp +++ b/framework/render/video/glRender/YUVProgramContext.cpp @@ -472,12 +472,15 @@ void YUVProgramContext::fillDataToYUVTextures(uint8_t **data, int *pLineSize, in uvHeight = mFrameHeight / 2; } + int yWidth = pLineSize[0]; + int uvWidth = yWidth / 2; //uvWidth may not right in some iOS simulators. + //use linesize to fill data with texture. some android phones which below 4.4 are not performed as excepted. // crop the extra data when draw. //update y glBindTexture(GL_TEXTURE_2D, mYUVTextures[0]); glPixelStorei(GL_UNPACK_ROW_LENGTH, pLineSize[0] ); - glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, pLineSize[0], mFrameHeight, + glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, yWidth, mFrameHeight, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, data[0]); GLint yLocation = glGetUniformLocation(mProgram, "y_tex"); glUniform1i(yLocation, 0); @@ -486,7 +489,7 @@ void YUVProgramContext::fillDataToYUVTextures(uint8_t **data, int *pLineSize, in //update u glBindTexture(GL_TEXTURE_2D, mYUVTextures[1]); glPixelStorei(GL_UNPACK_ROW_LENGTH, pLineSize[1]); - glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, pLineSize[1], uvHeight , + glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, uvWidth, uvHeight , 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, data[1]); GLint uLocation = glGetUniformLocation(mProgram, "u_tex"); glUniform1i(uLocation, 1); @@ -495,7 +498,7 @@ void YUVProgramContext::fillDataToYUVTextures(uint8_t **data, int *pLineSize, in //update v glBindTexture(GL_TEXTURE_2D, mYUVTextures[2]); glPixelStorei(GL_UNPACK_ROW_LENGTH, pLineSize[2]); - glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, pLineSize[2], uvHeight , + glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, uvWidth, uvHeight , 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, data[2]); GLint vLocation = glGetUniformLocation(mProgram, "v_tex"); glUniform1i(vLocation, 2);