From fb722a900fc5cc9e003b9fef25b27ed7fc5547a2 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Tue, 9 Oct 2012 17:40:20 +0200 Subject: [PATCH] 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 cc5eaeb856..5948bbe976 100644 --- a/Changelog +++ b/Changelog @@ -50,6 +50,7 @@ version : - 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 9aaa4a8cc2..219e9e2370 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 1cfcc40025..d546594a8e 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 f8a76c0978..9f30134055 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 ecf7192817..7341d2fda6 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}. -@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 79ef3b5feb..ac06ebffcd 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