[FFmpeg-cvslog] ffplay: fix odd YUV width by cropping the video
Marton Balint
git at videolan.org
Mon Aug 27 01:55:02 CEST 2012
ffmpeg | branch: master | Marton Balint <cus at passwd.hu> | Sun Aug 26 11:56:47 2012 +0200| [a366beaf6a7cbaa43fef09cabc2248225290208f] | committer: Michael Niedermayer
ffplay: fix odd YUV width by cropping the video
Should fix issue #1322.
Signed-off-by: Marton Balint <cus at passwd.hu>
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=a366beaf6a7cbaa43fef09cabc2248225290208f
---
ffplay.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/ffplay.c b/ffplay.c
index f81bd7c..257d656 100644
--- a/ffplay.c
+++ b/ffplay.c
@@ -1586,7 +1586,7 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c
char buffersrc_args[256];
int ret;
AVBufferSinkParams *buffersink_params = av_buffersink_params_alloc();
- AVFilterContext *filt_src = NULL, *filt_out = NULL, *filt_format;
+ AVFilterContext *filt_src = NULL, *filt_out = NULL, *filt_format, *filt_crop;
AVCodecContext *codec = is->video_st->codec;
snprintf(sws_flags_str, sizeof(sws_flags_str), "flags=%d", sws_flags);
@@ -1612,14 +1612,22 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c
if (ret < 0)
return ret;
+ /* SDL YUV code is not handling odd width/height for some driver
+ * combinations, therefore we crop the picture to an even width/height. */
+ if ((ret = avfilter_graph_create_filter(&filt_crop,
+ avfilter_get_by_name("crop"),
+ "ffplay_crop", "floor(in_w/2)*2:floor(in_h/2)*2", NULL, graph)) < 0)
+ return ret;
if ((ret = avfilter_graph_create_filter(&filt_format,
avfilter_get_by_name("format"),
"format", "yuv420p", NULL, graph)) < 0)
return ret;
+ if ((ret = avfilter_link(filt_crop, 0, filt_format, 0)) < 0)
+ return ret;
if ((ret = avfilter_link(filt_format, 0, filt_out, 0)) < 0)
return ret;
- if ((ret = configure_filtergraph(graph, vfilters, filt_src, filt_format)) < 0)
+ if ((ret = configure_filtergraph(graph, vfilters, filt_src, filt_crop)) < 0)
return ret;
is->in_video_filter = filt_src;
More information about the ffmpeg-cvslog
mailing list