[FFmpeg-cvslog] avconv: move frame aspect ratio to the options context.

Anton Khirnov git at videolan.org
Mon Sep 12 00:38:57 CEST 2011


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Thu Sep  1 08:20:50 2011 +0200| [ca46fde792fd1c98e697b8e3ef54265d7eaf4248] | committer: Anton Khirnov

avconv: move frame aspect ratio to the options context.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ca46fde792fd1c98e697b8e3ef54265d7eaf4248
---

 avconv.c |   19 +++++++++++--------
 1 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/avconv.c b/avconv.c
index 96aece1..2802094 100644
--- a/avconv.c
+++ b/avconv.c
@@ -101,7 +101,6 @@ static const OptionDef options[];
 static int *streamid_map = NULL;
 static int nb_streamid_map = 0;
 
-static float frame_aspect_ratio = 0;
 static enum PixelFormat frame_pix_fmt = PIX_FMT_NONE;
 static uint16_t *intra_matrix = NULL;
 static uint16_t *inter_matrix = NULL;
@@ -323,6 +322,8 @@ typedef struct OptionsContext {
     int        nb_forced_key_frames;
     SpecifierOpt *force_fps;
     int        nb_force_fps;
+    SpecifierOpt *frame_aspect_ratios;
+    int        nb_frame_aspect_ratios;
 } OptionsContext;
 
 #define MATCH_PER_STREAM_OPT(name, type, outvar, fmtctx, st)\
@@ -2532,7 +2533,7 @@ static int opt_frame_pix_fmt(const char *opt, const char *arg)
     return 0;
 }
 
-static int opt_frame_aspect_ratio(const char *opt, const char *arg)
+static double parse_frame_aspect_ratio(const char *arg)
 {
     int x = 0, y = 0;
     double ar = 0;
@@ -2551,10 +2552,9 @@ static int opt_frame_aspect_ratio(const char *opt, const char *arg)
 
     if (!ar) {
         fprintf(stderr, "Incorrect aspect ratio specification.\n");
-        return AVERROR(EINVAL);
+        exit_program(1);
     }
-    frame_aspect_ratio = ar;
-    return 0;
+    return ar;
 }
 
 static int opt_top_field_first(const char *opt, const char *arg)
@@ -3040,8 +3040,6 @@ static OutputStream *new_video_stream(OptionsContext *o, AVFormatContext *oc)
     ost = new_output_stream(o, oc, AVMEDIA_TYPE_VIDEO);
     st  = ost->st;
     if (!st->stream_copy) {
-        ost->frame_aspect_ratio = frame_aspect_ratio;
-        frame_aspect_ratio = 0;
 #if CONFIG_AVFILTER
         ost->avfilter= vfilters;
         vfilters = NULL;
@@ -3057,6 +3055,7 @@ static OutputStream *new_video_stream(OptionsContext *o, AVFormatContext *oc)
     if (!st->stream_copy) {
         const char *p;
         char *forced_key_frames = NULL, *frame_rate = NULL, *frame_size = NULL;
+        char *frame_aspect_ratio = NULL;
         int i, force_fps = 0;
 
         MATCH_PER_STREAM_OPT(frame_rates, str, frame_rate, oc, st);
@@ -3071,6 +3070,10 @@ static OutputStream *new_video_stream(OptionsContext *o, AVFormatContext *oc)
             exit_program(1);
         }
 
+        MATCH_PER_STREAM_OPT(frame_aspect_ratios, str, frame_aspect_ratio, oc, st);
+        if (frame_aspect_ratio)
+            ost->frame_aspect_ratio = parse_frame_aspect_ratio(frame_aspect_ratio);
+
         video_enc->pix_fmt = frame_pix_fmt;
         st->sample_aspect_ratio = video_enc->sample_aspect_ratio;
 
@@ -3978,7 +3981,7 @@ static const OptionDef options[] = {
     { "vframes", HAS_ARG | OPT_VIDEO | OPT_FUNC2, {(void*)opt_video_frames}, "set the number of video frames to record", "number" },
     { "r", HAS_ARG | OPT_VIDEO | OPT_STRING | OPT_SPEC, {.off = OFFSET(frame_rates)}, "set frame rate (Hz value, fraction or abbreviation)", "rate" },
     { "s", HAS_ARG | OPT_VIDEO | OPT_STRING | OPT_SPEC, {.off = OFFSET(frame_sizes)}, "set frame size (WxH or abbreviation)", "size" },
-    { "aspect", HAS_ARG | OPT_VIDEO, {(void*)opt_frame_aspect_ratio}, "set aspect ratio (4:3, 16:9 or 1.3333, 1.7777)", "aspect" },
+    { "aspect", HAS_ARG | OPT_VIDEO | OPT_STRING | OPT_SPEC, {.off = OFFSET(frame_aspect_ratios)}, "set aspect ratio (4:3, 16:9 or 1.3333, 1.7777)", "aspect" },
     { "pix_fmt", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_frame_pix_fmt}, "set pixel format, 'list' as argument shows all the pixel formats supported", "format" },
     { "vn", OPT_BOOL | OPT_VIDEO | OPT_OFFSET, {.off = OFFSET(video_disable)}, "disable video" },
     { "vdt", OPT_INT | HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)&video_discard}, "discard threshold", "n" },



More information about the ffmpeg-cvslog mailing list