В настоящее время я разрабатываю видеоплеер с использованием FFMPEG. Я пытаюсь преобразовать YUV420P в RGB Shader, чтобы уменьшить удар производительности, и я мог видеть, что он работает нормально. Проблема возникает, когда я пытаюсь изменить размер изображения.YUV to RGB Shader на iPhone
Корпус 1. YUV to RGB идеально подходит. но изображение точно не соответствует рамкам текстуры. Например, если я воспроизвожу видео 640x360, часть справа (640-512) обрезается, а нижняя (512-360) заполняется прямоугольником зеленого цвета.
FRAME_X=512; //This is texture size
FRAME_Y=512;
avpicture_fill((AVPicture *) f, [currentVideoBuffer.data mutableBytes],
enc->pix_fmt,
FRAME_X, FRAME_Y);
av_picture_copy((AVPicture *) f, (AVPicture *) avFrame,
enc->pix_fmt,
enc->width, enc->height);
....
int yuvWidth= FRAME_X ;
int yuvHeight= FRAME_Y;
glBindTexture (GL_TEXTURE_2D, textureIdY);
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE,
yuvWidth, yuvHeight, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, y_channel);
glBindTexture (GL_TEXTURE_2D, textureIdU);
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE,
yuvWidth/2, yuvHeight/2, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, u_channel);
glBindTexture (GL_TEXTURE_2D, textureIdV);
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE,
yuvWidth/2, yuvHeight/2, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, v_channel);
Случай 2. Если я установить фактический размер изображения до размера текстуры, то изображение точно приспособленное к текстуре, но цвет изображения немного странно. Он имеет слишком много зеленого цвета.
Кто-нибудь дает мне некоторые подсказки для этого? Спасибо заранее.
О, еще слишком поздно сказать спасибо. Я видел ваш ответ прямо перед этим. Спасибо. – user1333656