@@ -205,6 +205,11 @@ int avcodec_parameters_to_context(AVCodecContext *codec,
{
int ret;
+ av_channel_layout_uninit(&codec->ch_layout);
+ av_packet_side_data_free(&codec->coded_side_data, &codec->nb_coded_side_data);
+ av_freep(&codec->extradata);
+ codec->extradata_size = 0;
+
codec->codec_type = par->codec_type;
codec->codec_id = par->codec_id;
codec->codec_tag = par->codec_tag;
@@ -249,8 +254,6 @@ int avcodec_parameters_to_context(AVCodecContext *codec,
break;
}
- av_freep(&codec->extradata);
- codec->extradata_size = 0;
if (par->extradata) {
codec->extradata = av_mallocz(par->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE);
if (!codec->extradata)
@@ -259,7 +262,6 @@ int avcodec_parameters_to_context(AVCodecContext *codec,
codec->extradata_size = par->extradata_size;
}
- av_packet_side_data_free(&codec->coded_side_data, &codec->nb_coded_side_data);
ret = codec_parameters_copy_side_data(&codec->coded_side_data, &codec->nb_coded_side_data,
par->coded_side_data, par->nb_coded_side_data);
if (ret < 0)
This copies the behavior of avcodec_parameters_from_context(). Signed-off-by: James Almer <jamrial@gmail.com> --- libavcodec/codec_par.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)