|
|
|
@@ -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); |
|
|
|
|