Message ID | 20220621194617.76561-1-ffmpeg@haasn.xyz |
---|---|
State | Accepted |
Commit | a526f0cc3ac938364afe8ce62c4bc47d3b9bb2af |
Headers | show |
Series | [FFmpeg-devel] fftools/ffplay: fix YUV conversion mode | expand |
Context | Check | Description |
---|---|---|
yinshiyou/configure_loongarch64 | warning | Failed to apply patch |
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
andriy/make_armv7_RPi4 | success | Make finished |
andriy/make_fate_armv7_RPi4 | success | Make fate finished |
On Tue, Jun 21, 2022 at 10:46 PM Niklas Haas <ffmpeg@haasn.xyz> wrote: > > From: Niklas Haas <git@haasn.dev> > > GL and Metal cache the state at time of texture creation. GLES2 and > Direct3D 11 use the state at time of the render copy call. > > So the only way we can get the correct behavior consistently is by > making sure the state is set for both the upload *and* the draw call. > This probably isn't our bug to fix (upstream should make itself behave > consistently and also document its functions), but as it stands, > `ffplay` is misrendering BT.709 as BT.601 on my stock Linux system, and > that leaves a bad taste in my mouth. > > Signed-off-by: Niklas Haas <git@haasn.dev> > --- Moves the color space setting earlier, as well as clears the state in case of an additional failure exit case with upload. LGTM. Jan
On Mon, 27 Jun 2022 10:03:55 +0300 Jan Ekström <jeebjp@gmail.com> wrote: > On Tue, Jun 21, 2022 at 10:46 PM Niklas Haas <ffmpeg@haasn.xyz> wrote: > > > > From: Niklas Haas <git@haasn.dev> > > > > GL and Metal cache the state at time of texture creation. GLES2 and > > Direct3D 11 use the state at time of the render copy call. > > > > So the only way we can get the correct behavior consistently is by > > making sure the state is set for both the upload *and* the draw call. > > This probably isn't our bug to fix (upstream should make itself behave > > consistently and also document its functions), but as it stands, > > `ffplay` is misrendering BT.709 as BT.601 on my stock Linux system, and > > that leaves a bad taste in my mouth. > > > > Signed-off-by: Niklas Haas <git@haasn.dev> > > --- > > Moves the color space setting earlier, as well as clears the state in > case of an additional failure exit case with upload. > > LGTM. > > Jan Merged.
diff --git a/fftools/ffplay.c b/fftools/ffplay.c index 040afa0189..9242047f5c 100644 --- a/fftools/ffplay.c +++ b/fftools/ffplay.c @@ -1011,15 +1011,17 @@ static void video_image_display(VideoState *is) } calculate_display_rect(&rect, is->xleft, is->ytop, is->width, is->height, vp->width, vp->height, vp->sar); + set_sdl_yuv_conversion_mode(vp->frame); if (!vp->uploaded) { - if (upload_texture(&is->vid_texture, vp->frame, &is->img_convert_ctx) < 0) + if (upload_texture(&is->vid_texture, vp->frame, &is->img_convert_ctx) < 0) { + set_sdl_yuv_conversion_mode(NULL); return; + } vp->uploaded = 1; vp->flip_v = vp->frame->linesize[0] < 0; } - set_sdl_yuv_conversion_mode(vp->frame); SDL_RenderCopyEx(renderer, is->vid_texture, NULL, &rect, 0, NULL, vp->flip_v ? SDL_FLIP_VERTICAL : 0); set_sdl_yuv_conversion_mode(NULL); if (sp) {