diff options
author | Marton Balint <cus@passwd.hu> | 2018-07-02 19:16:31 +0200 |
---|---|---|
committer | Marton Balint <cus@passwd.hu> | 2018-07-13 22:24:33 +0200 |
commit | 85bfcc46d192891891057085d36cb2daba4b5c4f (patch) | |
tree | 42bd7d88224da22b293701dfbeb73128784dc032 /fftools/ffplay.c | |
parent | 0576ef466d8a631326d1d0a5ec2e4c4c81d25353 (diff) | |
download | ffmpeg-85bfcc46d192891891057085d36cb2daba4b5c4f.tar.gz |
ffplay: add support for various YUV conversion modes
SDL from version 2.0.8 has support for full range YUV and specifying
BT601/BT709 color space for YUV->RGB conversion.
Signed-off-by: Marton Balint <cus@passwd.hu>
Diffstat (limited to 'fftools/ffplay.c')
-rw-r--r-- | fftools/ffplay.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/fftools/ffplay.c b/fftools/ffplay.c index 55cea32cae..368e262123 100644 --- a/fftools/ffplay.c +++ b/fftools/ffplay.c @@ -954,6 +954,22 @@ static int upload_texture(SDL_Texture **tex, AVFrame *frame, struct SwsContext * return ret; } +static void set_sdl_yuv_conversion_mode(AVFrame *frame) +{ +#if SDL_VERSION_ATLEAST(2,0,8) + SDL_YUV_CONVERSION_MODE mode = SDL_YUV_CONVERSION_AUTOMATIC; + if (frame && (frame->format == AV_PIX_FMT_YUV420P || frame->format == AV_PIX_FMT_YUYV422 || frame->format == AV_PIX_FMT_UYVY422)) { + if (frame->color_range == AVCOL_RANGE_JPEG) + mode = SDL_YUV_CONVERSION_JPEG; + else if (frame->colorspace == AVCOL_SPC_BT709) + mode = SDL_YUV_CONVERSION_BT709; + else if (frame->colorspace == AVCOL_SPC_BT470BG || frame->colorspace == AVCOL_SPC_SMPTE170M || frame->colorspace == AVCOL_SPC_SMPTE240M) + mode = SDL_YUV_CONVERSION_BT601; + } + SDL_SetYUVConversionMode(mode); +#endif +} + static void video_image_display(VideoState *is) { Frame *vp; @@ -1015,7 +1031,9 @@ static void video_image_display(VideoState *is) 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) { #if USE_ONEPASS_SUBTITLE_RENDER SDL_RenderCopy(renderer, is->sub_texture, NULL, &rect); |