[FFmpeg-devel] [PATCH]Always accept concatenating a stream without SAR with a stream with SAR defined

Carl Eugen Hoyos cehoyos at ag.or.at
Wed Jul 17 10:37:57 CEST 2013


On Wednesday 17 July 2013 10:26:00 am Nicolas George wrote:

> >      for (seg = 1; seg < cat->nb_segments; seg++) {
> >          inlink = ctx->inputs[in_no += ctx->nb_outputs];
> > +        if (!outlink->sample_aspect_ratio.num)
> > +            outlink->sample_aspect_ratio = inlink->sample_aspect_ratio;
> >          /* possible enhancement: unsafe mode, do not check */
> >          if (outlink->w                       != inlink->w               
> >        || outlink->h                       != inlink->h                  
> >     || -            outlink->sample_aspect_ratio.num !=
> > inlink->sample_aspect_ratio.num ||
> >
> > +            outlink->sample_aspect_ratio.num !=
> > inlink->sample_aspect_ratio.num && +           
> > inlink->sample_aspect_ratio.num ||
>
> I would be slightly happier with parentheses to show that && has precedence
> over || (not every reader of the code knows the exact order of precedence,
> and relying on it is fragile).
>
> And maybe keep the || aligned with the other ||.

I agree that the original patch does not look very nice but I am not sure how 
to improve.

Please see attached, Carl Eugen
-------------- next part --------------
diff --git a/libavfilter/avf_concat.c b/libavfilter/avf_concat.c
index 4534102..667edc6 100644
--- a/libavfilter/avf_concat.c
+++ b/libavfilter/avf_concat.c
@@ -134,10 +134,13 @@ static int config_output(AVFilterLink *outlink)
     outlink->format              = inlink->format;
     for (seg = 1; seg < cat->nb_segments; seg++) {
         inlink = ctx->inputs[in_no += ctx->nb_outputs];
+        if (!outlink->sample_aspect_ratio.num)
+            outlink->sample_aspect_ratio = inlink->sample_aspect_ratio;
         /* possible enhancement: unsafe mode, do not check */
         if (outlink->w                       != inlink->w                       ||
             outlink->h                       != inlink->h                       ||
-            outlink->sample_aspect_ratio.num != inlink->sample_aspect_ratio.num ||
+            (outlink->sample_aspect_ratio.num != inlink->sample_aspect_ratio.num &&
+             inlink->sample_aspect_ratio.num)                                   ||
             outlink->sample_aspect_ratio.den != inlink->sample_aspect_ratio.den) {
             av_log(ctx, AV_LOG_ERROR, "Input link %s parameters "
                    "(size %dx%d, SAR %d:%d) do not match the corresponding "


More information about the ffmpeg-devel mailing list