mirror of https://git.ffmpeg.org/ffmpeg.git
avconv: use avcodec_parameters_copy() with streamcopy
This preserves all the information in the codec parameters. The wavpack ref changes are caused by the fact that now the sample format is set, so matroskaenc can use it to set the bit depth. Bug-Id: 945, along with the previous commit
This commit is contained in:
parent
be3e807c8f
commit
b55566db4c
68
avconv.c
68
avconv.c
|
@ -1812,40 +1812,24 @@ static int init_output_stream_streamcopy(OutputStream *ost)
|
|||
AVCodecParameters *par_dst = ost->st->codecpar;
|
||||
AVCodecParameters *par_src = ist->st->codecpar;
|
||||
AVRational sar;
|
||||
int i;
|
||||
uint64_t extra_size;
|
||||
uint32_t codec_tag = par_dst->codec_tag;
|
||||
int i, ret;
|
||||
|
||||
extra_size = (uint64_t)par_src->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE;
|
||||
if (extra_size > INT_MAX) {
|
||||
return AVERROR(EINVAL);
|
||||
if (!codec_tag) {
|
||||
if (!of->ctx->oformat->codec_tag ||
|
||||
av_codec_get_id (of->ctx->oformat->codec_tag, par_src->codec_tag) == par_src->codec_id ||
|
||||
av_codec_get_tag(of->ctx->oformat->codec_tag, par_src->codec_id) <= 0)
|
||||
codec_tag = par_src->codec_tag;
|
||||
}
|
||||
|
||||
ret = avcodec_parameters_copy(par_dst, par_src);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
par_dst->codec_tag = codec_tag;
|
||||
|
||||
ost->st->disposition = ist->st->disposition;
|
||||
|
||||
/* if stream_copy is selected, no need to decode or encode */
|
||||
par_dst->codec_id = par_src->codec_id;
|
||||
par_dst->codec_type = par_src->codec_type;
|
||||
|
||||
if (!par_dst->codec_tag) {
|
||||
if (!of->ctx->oformat->codec_tag ||
|
||||
av_codec_get_id (of->ctx->oformat->codec_tag, par_src->codec_tag) == par_dst->codec_id ||
|
||||
av_codec_get_tag(of->ctx->oformat->codec_tag, par_src->codec_id) <= 0)
|
||||
par_dst->codec_tag = par_src->codec_tag;
|
||||
}
|
||||
|
||||
par_dst->bit_rate = par_src->bit_rate;
|
||||
par_dst->field_order = par_src->field_order;
|
||||
par_dst->chroma_location = par_src->chroma_location;
|
||||
|
||||
if (par_src->extradata) {
|
||||
par_dst->extradata = av_mallocz(extra_size);
|
||||
if (!par_dst->extradata) {
|
||||
return AVERROR(ENOMEM);
|
||||
}
|
||||
memcpy(par_dst->extradata, par_src->extradata, par_src->extradata_size);
|
||||
par_dst->extradata_size = par_src->extradata_size;
|
||||
}
|
||||
|
||||
ost->st->time_base = ist->st->time_base;
|
||||
|
||||
if (ist->st->nb_side_data) {
|
||||
|
@ -1873,21 +1857,7 @@ static int init_output_stream_streamcopy(OutputStream *ost)
|
|||
if (!ost->parser_avctx)
|
||||
return AVERROR(ENOMEM);
|
||||
|
||||
switch (par_dst->codec_type) {
|
||||
case AVMEDIA_TYPE_AUDIO:
|
||||
if (audio_volume != 256) {
|
||||
av_log(NULL, AV_LOG_FATAL, "-acodec copy and -vol are incompatible (frames are not decoded)\n");
|
||||
exit_program(1);
|
||||
}
|
||||
par_dst->channel_layout = par_src->channel_layout;
|
||||
par_dst->sample_rate = par_src->sample_rate;
|
||||
par_dst->channels = par_src->channels;
|
||||
par_dst->block_align = par_src->block_align;
|
||||
break;
|
||||
case AVMEDIA_TYPE_VIDEO:
|
||||
par_dst->format = par_src->format;
|
||||
par_dst->width = par_src->width;
|
||||
par_dst->height = par_src->height;
|
||||
if (par_dst->codec_type == AVMEDIA_TYPE_VIDEO) {
|
||||
if (ost->frame_aspect_ratio)
|
||||
sar = av_d2q(ost->frame_aspect_ratio * par_dst->height / par_dst->width, 255);
|
||||
else if (ist->st->sample_aspect_ratio.num)
|
||||
|
@ -1895,16 +1865,6 @@ static int init_output_stream_streamcopy(OutputStream *ost)
|
|||
else
|
||||
sar = par_src->sample_aspect_ratio;
|
||||
ost->st->sample_aspect_ratio = par_dst->sample_aspect_ratio = sar;
|
||||
break;
|
||||
case AVMEDIA_TYPE_SUBTITLE:
|
||||
par_dst->width = par_src->width;
|
||||
par_dst->height = par_src->height;
|
||||
break;
|
||||
case AVMEDIA_TYPE_DATA:
|
||||
case AVMEDIA_TYPE_ATTACHMENT:
|
||||
break;
|
||||
default:
|
||||
abort();
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -91,12 +91,12 @@ fate-wavpack-matroskamode: CMD = md5 -i $(TARGET_SAMPLES)/wavpack/special/matros
|
|||
FATE_WAVPACK-$(call DEMMUX, WV, MATROSKA) += fate-wavpack-matroska_mux-mono
|
||||
fate-wavpack-matroska_mux-mono: CMD = md5 -i $(TARGET_SAMPLES)/wavpack/num_channels/mono_16bit_int.wv -c copy -fflags +bitexact -f matroska
|
||||
fate-wavpack-matroska_mux-mono: CMP = oneline
|
||||
fate-wavpack-matroska_mux-mono: REF = 90bb202ca75333d25146c52f863f93bd
|
||||
fate-wavpack-matroska_mux-mono: REF = f87d2356f34e1ac0d6a873fac8bc0453
|
||||
|
||||
FATE_WAVPACK-$(call DEMMUX, WV, MATROSKA) += fate-wavpack-matroska_mux-61
|
||||
fate-wavpack-matroska_mux-61: CMD = md5 -i $(TARGET_SAMPLES)/wavpack/num_channels/eva_2.22_6.1_16bit-partial.wv -c copy -fflags +bitexact -f matroska
|
||||
fate-wavpack-matroska_mux-61: CMP = oneline
|
||||
fate-wavpack-matroska_mux-61: REF = de9f9f8136377af41ac1e899aaec6752
|
||||
fate-wavpack-matroska_mux-61: REF = 6926fde4cb74ec63a5f21a26bec62688
|
||||
|
||||
FATE_SAMPLES_AVCONV += $(FATE_WAVPACK-yes)
|
||||
fate-wavpack: $(FATE_WAVPACK-yes)
|
||||
|
|
Loading…
Reference in New Issue