Commit fb722a90 authored by Anton Khirnov's avatar Anton Khirnov

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.
parent b94e4acb
...@@ -50,6 +50,7 @@ version <next>: ...@@ -50,6 +50,7 @@ version <next>:
- Smooth Streaming live segmenter muxer - Smooth Streaming live segmenter muxer
- RTP packetization of JPEG - RTP packetization of JPEG
- Opus decoder and encoder using libopus - Opus decoder and encoder using libopus
- remove -same_quant, it hasn't worked for years
version 0.8: version 0.8:
......
...@@ -514,7 +514,7 @@ static void do_subtitle_out(AVFormatContext *s, ...@@ -514,7 +514,7 @@ static void do_subtitle_out(AVFormatContext *s,
static void do_video_out(AVFormatContext *s, static void do_video_out(AVFormatContext *s,
OutputStream *ost, OutputStream *ost,
AVFrame *in_picture, AVFrame *in_picture,
int *frame_size, float quality) int *frame_size)
{ {
int ret, format_video_sync; int ret, format_video_sync;
AVPacket pkt; AVPacket pkt;
...@@ -579,9 +579,7 @@ static void do_video_out(AVFormatContext *s, ...@@ -579,9 +579,7 @@ static void do_video_out(AVFormatContext *s,
big_picture.top_field_first = !!ost->top_field_first; big_picture.top_field_first = !!ost->top_field_first;
} }
/* handles same_quant here. This is not correct because it may big_picture.quality = ost->st->codec->global_quality;
not be a global option */
big_picture.quality = quality;
if (!enc->me_threshold) if (!enc->me_threshold)
big_picture.pict_type = 0; big_picture.pict_type = 0;
if (ost->forced_kf_index < ost->forced_kf_count && if (ost->forced_kf_index < ost->forced_kf_count &&
...@@ -708,9 +706,7 @@ static int poll_filter(OutputStream *ost) ...@@ -708,9 +706,7 @@ static int poll_filter(OutputStream *ost)
if (!ost->frame_aspect_ratio) if (!ost->frame_aspect_ratio)
ost->st->codec->sample_aspect_ratio = picref->video->pixel_aspect; ost->st->codec->sample_aspect_ratio = picref->video->pixel_aspect;
do_video_out(of->ctx, ost, filtered_frame, &frame_size, do_video_out(of->ctx, ost, filtered_frame, &frame_size);
same_quant ? ost->last_quality :
ost->st->codec->global_quality);
if (vstats_filename && frame_size) if (vstats_filename && frame_size)
do_video_stats(of->ctx, ost, frame_size); do_video_stats(of->ctx, ost, frame_size);
break; break;
...@@ -1223,7 +1219,6 @@ static int decode_video(InputStream *ist, AVPacket *pkt, int *got_output) ...@@ -1223,7 +1219,6 @@ static int decode_video(InputStream *ist, AVPacket *pkt, int *got_output)
AVFrame *decoded_frame; AVFrame *decoded_frame;
void *buffer_to_free = NULL; void *buffer_to_free = NULL;
int i, ret = 0, resample_changed; int i, ret = 0, resample_changed;
float quality;
if (!ist->decoded_frame && !(ist->decoded_frame = avcodec_alloc_frame())) if (!ist->decoded_frame && !(ist->decoded_frame = avcodec_alloc_frame()))
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
...@@ -1241,7 +1236,6 @@ static int decode_video(InputStream *ist, AVPacket *pkt, int *got_output) ...@@ -1241,7 +1236,6 @@ static int decode_video(InputStream *ist, AVPacket *pkt, int *got_output)
return ret; return ret;
} }
quality = same_quant ? decoded_frame->quality : 0;
decoded_frame->pts = guess_correct_pts(&ist->pts_ctx, decoded_frame->pkt_pts, decoded_frame->pts = guess_correct_pts(&ist->pts_ctx, decoded_frame->pkt_pts,
decoded_frame->pkt_dts); decoded_frame->pkt_dts);
pkt->size = 0; pkt->size = 0;
...@@ -1279,10 +1273,6 @@ static int decode_video(InputStream *ist, AVPacket *pkt, int *got_output) ...@@ -1279,10 +1273,6 @@ static int decode_video(InputStream *ist, AVPacket *pkt, int *got_output)
} }
for (i = 0; i < ist->nb_filters; i++) { 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) { if (ist->st->codec->codec->capabilities & CODEC_CAP_DR1) {
FrameBuffer *buf = decoded_frame->opaque; FrameBuffer *buf = decoded_frame->opaque;
AVFilterBufferRef *fb = avfilter_get_video_buffer_ref_from_arrays( AVFilterBufferRef *fb = avfilter_get_video_buffer_ref_from_arrays(
......
...@@ -278,7 +278,6 @@ typedef struct OutputStream { ...@@ -278,7 +278,6 @@ typedef struct OutputStream {
int top_field_first; int top_field_first;
float frame_aspect_ratio; float frame_aspect_ratio;
float last_quality;
/* forced key frames */ /* forced key frames */
int64_t *forced_kf_pts; int64_t *forced_kf_pts;
...@@ -343,7 +342,6 @@ extern int copy_tb; ...@@ -343,7 +342,6 @@ extern int copy_tb;
extern int exit_on_error; extern int exit_on_error;
extern int print_stats; extern int print_stats;
extern int qp_hist; extern int qp_hist;
extern int same_quant;
extern const AVIOInterruptCB int_cb; extern const AVIOInterruptCB int_cb;
......
...@@ -71,7 +71,6 @@ int copy_tb = 1; ...@@ -71,7 +71,6 @@ int copy_tb = 1;
int exit_on_error = 0; int exit_on_error = 0;
int print_stats = 1; int print_stats = 1;
int qp_hist = 0; int qp_hist = 0;
int same_quant = 0;
static int file_overwrite = 0; static int file_overwrite = 0;
static int video_discard = 0; static int video_discard = 0;
...@@ -836,7 +835,7 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e ...@@ -836,7 +835,7 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e
} }
MATCH_PER_STREAM_OPT(qscale, dbl, qscale, oc, st); 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->flags |= CODEC_FLAG_QSCALE;
st->codec->global_quality = FF_QP2LAMBDA * qscale; st->codec->global_quality = FF_QP2LAMBDA * qscale;
} }
...@@ -1969,8 +1968,6 @@ const OptionDef options[] = { ...@@ -1969,8 +1968,6 @@ const OptionDef options[] = {
"rate control override for specific intervals", "override" }, "rate control override for specific intervals", "override" },
{ "vcodec", OPT_VIDEO | HAS_ARG | OPT_PERFILE, { .func_arg = opt_video_codec }, { "vcodec", OPT_VIDEO | HAS_ARG | OPT_PERFILE, { .func_arg = opt_video_codec },
"force video codec ('copy' to copy stream)", "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) }, { "pass", OPT_VIDEO | HAS_ARG | OPT_SPEC | OPT_INT, { .off = OFFSET(pass) },
"select the pass number (1 or 2)", "n" }, "select the pass number (1 or 2)", "n" },
{ "passlogfile", OPT_VIDEO | HAS_ARG | OPT_STRING | OPT_EXPERT | OPT_SPEC, { .off = OFFSET(passlogfiles) }, { "passlogfile", OPT_VIDEO | HAS_ARG | OPT_STRING | OPT_EXPERT | OPT_SPEC, { .off = OFFSET(passlogfiles) },
......
...@@ -473,11 +473,6 @@ Disable video recording. ...@@ -473,11 +473,6 @@ Disable video recording.
@item -vcodec @var{codec} (@emph{output}) @item -vcodec @var{codec} (@emph{output})
Set the video codec. This is an alias for @code{-codec:v}. 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}) @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 Select the pass number (1 or 2). It is used to do two-pass
......
...@@ -216,15 +216,14 @@ equally humble @code{copy} under Windows), and finally transcoding back to your ...@@ -216,15 +216,14 @@ equally humble @code{copy} under Windows), and finally transcoding back to your
format of choice. format of choice.
@example @example
avconv -i input1.avi -same_quant intermediate1.mpg avconv -i input1.avi intermediate1.mpg
avconv -i input2.avi -same_quant intermediate2.mpg avconv -i input2.avi intermediate2.mpg
cat intermediate1.mpg intermediate2.mpg > intermediate_all.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 @end example
Notice that you should either use @code{-same_quant} or set a reasonably high Notice that you should set a reasonably high bitrate for your intermediate and
bitrate for your intermediate and output files, if you want to preserve output files, if you want to preserve video quality.
video quality.
Also notice that you may avoid the huge intermediate files by taking advantage Also notice that you may avoid the huge intermediate files by taking advantage
of named pipes, should your platform support it: of named pipes, should your platform support it:
...@@ -232,10 +231,10 @@ of named pipes, should your platform support it: ...@@ -232,10 +231,10 @@ of named pipes, should your platform support it:
@example @example
mkfifo intermediate1.mpg mkfifo intermediate1.mpg
mkfifo intermediate2.mpg mkfifo intermediate2.mpg
avconv -i input1.avi -same_quant -y intermediate1.mpg < /dev/null & avconv -i input1.avi -y intermediate1.mpg < /dev/null &
avconv -i input2.avi -same_quant -y intermediate2.mpg < /dev/null & avconv -i input2.avi -y intermediate2.mpg < /dev/null &
cat intermediate1.mpg intermediate2.mpg |\ 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 @end example
Similarly, the yuv4mpegpipe format, and the raw video, raw audio codecs also Similarly, the yuv4mpegpipe format, and the raw video, raw audio codecs also
...@@ -262,7 +261,7 @@ cat temp1.a temp2.a > all.a & ...@@ -262,7 +261,7 @@ cat temp1.a temp2.a > all.a &
cat temp1.v temp2.v > all.v & cat temp1.v temp2.v > all.v &
avconv -f u16le -acodec pcm_s16le -ac 2 -ar 44100 -i all.a \ avconv -f u16le -acodec pcm_s16le -ac 2 -ar 44100 -i all.a \
-f yuv4mpegpipe -i all.v \ -f yuv4mpegpipe -i all.v \
-same_quant -y output.flv -y output.flv
rm temp[12].[av] all.[av] rm temp[12].[av] all.[av]
@end example @end example
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment