[libav-commits] avconv: remove -same_quant

Anton Khirnov git at libav.org
Tue Oct 9 20:32:50 CEST 2012


Module: libav
Branch: master
Commit: fb722a900fc5cc9e003b9fef25b27ed7fc5547a2

Author:    Anton Khirnov <anton at khirnov.net>
Committer: Anton Khirnov <anton at khirnov.net>
Date:      Tue Oct  9 17:40:20 2012 +0200

avconv: remove -same_quant

It has not worked for anything other than fringe codecs (asv1/2, mdec,
mjpeg[b]) since about 2003 and nobody ever noticed or complained. This
sufficiently proves that there are no users of this option who have a
clue of what they are doing, so it is completely useless.

---

 Changelog       |    1 +
 avconv.c        |   16 +++-------------
 avconv.h        |    2 --
 avconv_opt.c    |    5 +----
 doc/avconv.texi |    5 -----
 doc/faq.texi    |   19 +++++++++----------
 6 files changed, 14 insertions(+), 34 deletions(-)

diff --git a/Changelog b/Changelog
index cc5eaeb..5948bbe 100644
--- a/Changelog
+++ b/Changelog
@@ -50,6 +50,7 @@ version <next>:
 - Smooth Streaming live segmenter muxer
 - RTP packetization of JPEG
 - Opus decoder and encoder using libopus
+- remove -same_quant, it hasn't worked for years
 
 
 version 0.8:
diff --git a/avconv.c b/avconv.c
index 9aaa4a8..219e9e2 100644
--- a/avconv.c
+++ b/avconv.c
@@ -514,7 +514,7 @@ static void do_subtitle_out(AVFormatContext *s,
 static void do_video_out(AVFormatContext *s,
                          OutputStream *ost,
                          AVFrame *in_picture,
-                         int *frame_size, float quality)
+                         int *frame_size)
 {
     int ret, format_video_sync;
     AVPacket pkt;
@@ -579,9 +579,7 @@ static void do_video_out(AVFormatContext *s,
                 big_picture.top_field_first = !!ost->top_field_first;
         }
 
-        /* handles same_quant here. This is not correct because it may
-           not be a global option */
-        big_picture.quality = quality;
+        big_picture.quality = ost->st->codec->global_quality;
         if (!enc->me_threshold)
             big_picture.pict_type = 0;
         if (ost->forced_kf_index < ost->forced_kf_count &&
@@ -708,9 +706,7 @@ static int poll_filter(OutputStream *ost)
         if (!ost->frame_aspect_ratio)
             ost->st->codec->sample_aspect_ratio = picref->video->pixel_aspect;
 
-        do_video_out(of->ctx, ost, filtered_frame, &frame_size,
-                     same_quant ? ost->last_quality :
-                                  ost->st->codec->global_quality);
+        do_video_out(of->ctx, ost, filtered_frame, &frame_size);
         if (vstats_filename && frame_size)
             do_video_stats(of->ctx, ost, frame_size);
         break;
@@ -1223,7 +1219,6 @@ static int decode_video(InputStream *ist, AVPacket *pkt, int *got_output)
     AVFrame *decoded_frame;
     void *buffer_to_free = NULL;
     int i, ret = 0, resample_changed;
-    float quality;
 
     if (!ist->decoded_frame && !(ist->decoded_frame = avcodec_alloc_frame()))
         return AVERROR(ENOMEM);
@@ -1241,7 +1236,6 @@ static int decode_video(InputStream *ist, AVPacket *pkt, int *got_output)
         return ret;
     }
 
-    quality = same_quant ? decoded_frame->quality : 0;
     decoded_frame->pts = guess_correct_pts(&ist->pts_ctx, decoded_frame->pkt_pts,
                                            decoded_frame->pkt_dts);
     pkt->size = 0;
@@ -1279,10 +1273,6 @@ static int decode_video(InputStream *ist, AVPacket *pkt, int *got_output)
     }
 
     for (i = 0; i < ist->nb_filters; i++) {
-        // XXX what an ugly hack
-        if (ist->filters[i]->graph->nb_outputs == 1)
-            ist->filters[i]->graph->outputs[0]->ost->last_quality = quality;
-
         if (ist->st->codec->codec->capabilities & CODEC_CAP_DR1) {
             FrameBuffer      *buf = decoded_frame->opaque;
             AVFilterBufferRef *fb = avfilter_get_video_buffer_ref_from_arrays(
diff --git a/avconv.h b/avconv.h
index 1cfcc40..d546594 100644
--- a/avconv.h
+++ b/avconv.h
@@ -278,7 +278,6 @@ typedef struct OutputStream {
     int top_field_first;
 
     float frame_aspect_ratio;
-    float last_quality;
 
     /* forced key frames */
     int64_t *forced_kf_pts;
@@ -343,7 +342,6 @@ extern int copy_tb;
 extern int exit_on_error;
 extern int print_stats;
 extern int qp_hist;
-extern int same_quant;
 
 extern const AVIOInterruptCB int_cb;
 
diff --git a/avconv_opt.c b/avconv_opt.c
index f8a76c0..9f30134 100644
--- a/avconv_opt.c
+++ b/avconv_opt.c
@@ -71,7 +71,6 @@ int copy_tb           = 1;
 int exit_on_error     = 0;
 int print_stats       = 1;
 int qp_hist           = 0;
-int same_quant        = 0;
 
 static int file_overwrite     = 0;
 static int video_discard      = 0;
@@ -836,7 +835,7 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e
     }
 
     MATCH_PER_STREAM_OPT(qscale, dbl, qscale, oc, st);
-    if (qscale >= 0 || same_quant) {
+    if (qscale >= 0) {
         st->codec->flags |= CODEC_FLAG_QSCALE;
         st->codec->global_quality = FF_QP2LAMBDA * qscale;
     }
@@ -1969,8 +1968,6 @@ const OptionDef options[] = {
         "rate control override for specific intervals", "override" },
     { "vcodec",       OPT_VIDEO | HAS_ARG  | OPT_PERFILE,                        { .func_arg = opt_video_codec },
         "force video codec ('copy' to copy stream)", "codec" },
-    { "same_quant",   OPT_VIDEO | OPT_BOOL | OPT_EXPERT,                         { &same_quant },
-        "use same quantizer as source (implies VBR)" },
     { "pass",         OPT_VIDEO | HAS_ARG | OPT_SPEC | OPT_INT,                  { .off = OFFSET(pass) },
         "select the pass number (1 or 2)", "n" },
     { "passlogfile",  OPT_VIDEO | HAS_ARG | OPT_STRING | OPT_EXPERT | OPT_SPEC,  { .off = OFFSET(passlogfiles) },
diff --git a/doc/avconv.texi b/doc/avconv.texi
index ecf7192..7341d2f 100644
--- a/doc/avconv.texi
+++ b/doc/avconv.texi
@@ -473,11 +473,6 @@ Disable video recording.
 
 @item -vcodec @var{codec} (@emph{output})
 Set the video codec. This is an alias for @code{-codec:v}.
- at item -same_quant
-Use same quantizer as source (implies VBR).
-
-Note that this is NOT SAME QUALITY. Do not use this option unless you know you
-need it.
 
 @item -pass[:@var{stream_specifier}] @var{n} (@emph{output,per-stream})
 Select the pass number (1 or 2). It is used to do two-pass
diff --git a/doc/faq.texi b/doc/faq.texi
index 79ef3b5..ac06ebf 100644
--- a/doc/faq.texi
+++ b/doc/faq.texi
@@ -216,15 +216,14 @@ equally humble @code{copy} under Windows), and finally transcoding back to your
 format of choice.
 
 @example
-avconv -i input1.avi -same_quant intermediate1.mpg
-avconv -i input2.avi -same_quant intermediate2.mpg
+avconv -i input1.avi intermediate1.mpg
+avconv -i input2.avi intermediate2.mpg
 cat intermediate1.mpg intermediate2.mpg > intermediate_all.mpg
-avconv -i intermediate_all.mpg -same_quant output.avi
+avconv -i intermediate_all.mpg output.avi
 @end example
 
-Notice that you should either use @code{-same_quant} or set a reasonably high
-bitrate for your intermediate and output files, if you want to preserve
-video quality.
+Notice that you should set a reasonably high bitrate for your intermediate and
+output files, if you want to preserve video quality.
 
 Also notice that you may avoid the huge intermediate files by taking advantage
 of named pipes, should your platform support it:
@@ -232,10 +231,10 @@ of named pipes, should your platform support it:
 @example
 mkfifo intermediate1.mpg
 mkfifo intermediate2.mpg
-avconv -i input1.avi -same_quant -y intermediate1.mpg < /dev/null &
-avconv -i input2.avi -same_quant -y intermediate2.mpg < /dev/null &
+avconv -i input1.avi -y intermediate1.mpg < /dev/null &
+avconv -i input2.avi -y intermediate2.mpg < /dev/null &
 cat intermediate1.mpg intermediate2.mpg |\
-avconv -f mpeg -i - -same_quant -c:v mpeg4 -acodec libmp3lame output.avi
+avconv -f mpeg -i - -c:v mpeg4 -acodec libmp3lame output.avi
 @end example
 
 Similarly, the yuv4mpegpipe format, and the raw video, raw audio codecs also
@@ -262,7 +261,7 @@ cat temp1.a temp2.a > all.a &
 cat temp1.v temp2.v > all.v &
 avconv -f u16le -acodec pcm_s16le -ac 2 -ar 44100 -i all.a \
        -f yuv4mpegpipe -i all.v \
-       -same_quant -y output.flv
+       -y output.flv
 rm temp[12].[av] all.[av]
 @end example
 



More information about the libav-commits mailing list