summaryrefslogtreecommitdiffstats
path: root/libhb/stream.c
diff options
context:
space:
mode:
authorJohn Stebbins <[email protected]>2016-12-08 18:02:37 -0800
committerJohn Stebbins <[email protected]>2016-12-17 07:28:51 -0800
commitcb1d271859bd27960191254deadff82a29cb0bb2 (patch)
tree82846287a8f82d4bfa50dbc5c7f0d09a4b2fb96d /libhb/stream.c
parent15503330d6eecf3980655b395ebd331925442f43 (diff)
stream: fix use of deprecated libav interfaces
AVStream.codec is deprecated, use AVStream.codecpar
Diffstat (limited to 'libhb/stream.c')
-rw-r--r--libhb/stream.c178
1 files changed, 87 insertions, 91 deletions
diff --git a/libhb/stream.c b/libhb/stream.c
index 96813d35c..9f6a44d98 100644
--- a/libhb/stream.c
+++ b/libhb/stream.c
@@ -214,7 +214,7 @@ struct hb_stream_s
hb_title_t *title;
AVFormatContext *ffmpeg_ic;
- AVPacket *ffmpeg_pkt;
+ AVPacket ffmpeg_pkt;
uint8_t ffmpeg_video_id;
uint32_t reg_desc; // 4 byte registration code that identifies
@@ -5050,8 +5050,7 @@ static int ffmpeg_open( hb_stream_t *stream, hb_title_t *title, int scan )
title->opaque_priv = (void*)info_ic;
stream->ffmpeg_ic = info_ic;
stream->hb_stream_type = ffmpeg;
- stream->ffmpeg_pkt = malloc(sizeof(*stream->ffmpeg_pkt));
- av_init_packet( stream->ffmpeg_pkt );
+ av_init_packet(&stream->ffmpeg_pkt);
stream->chapter_end = INT64_MAX;
if ( !scan )
@@ -5075,7 +5074,7 @@ static int ffmpeg_open( hb_stream_t *stream, hb_title_t *title, int scan )
int i;
for (i = 0; i < info_ic->nb_streams; ++i )
{
- if ( info_ic->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO )
+ if (info_ic->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)
{
break;
}
@@ -5095,34 +5094,30 @@ static int ffmpeg_open( hb_stream_t *stream, hb_title_t *title, int scan )
static void ffmpeg_close( hb_stream_t *d )
{
avformat_close_input( &d->ffmpeg_ic );
- if ( d->ffmpeg_pkt != NULL )
- {
- free( d->ffmpeg_pkt );
- d->ffmpeg_pkt = NULL;
- }
+ av_packet_unref(&d->ffmpeg_pkt);
}
static void add_ffmpeg_audio(hb_title_t *title, hb_stream_t *stream, int id)
{
- AVStream *st = stream->ffmpeg_ic->streams[id];
- AVCodecContext *codec = st->codec;
- AVDictionaryEntry *tag = av_dict_get(st->metadata, "language", NULL, 0);
+ AVStream *st = stream->ffmpeg_ic->streams[id];
+ AVCodecParameters *codecpar = st->codecpar;
+ AVDictionaryEntry *tag = av_dict_get(st->metadata, "language", NULL, 0);
hb_audio_t *audio = calloc(1, sizeof(*audio));
audio->id = id;
audio->config.in.track = id;
audio->config.in.codec = HB_ACODEC_FFMPEG;
- audio->config.in.codec_param = codec->codec_id;
+ audio->config.in.codec_param = codecpar->codec_id;
// set the bitrate to 0; decavcodecaBSInfo will be called and fill the rest
audio->config.in.bitrate = 0;
// set the input codec and extradata for Passthru
- switch (codec->codec_id)
+ switch (codecpar->codec_id)
{
case AV_CODEC_ID_AAC:
{
- int len = MIN(codec->extradata_size, HB_CONFIG_MAX_SIZE);
- memcpy(audio->priv.config.extradata.bytes, codec->extradata, len);
+ int len = MIN(codecpar->extradata_size, HB_CONFIG_MAX_SIZE);
+ memcpy(audio->priv.config.extradata.bytes, codecpar->extradata, len);
audio->priv.config.extradata.length = len;
audio->config.in.codec = HB_ACODEC_FFAAC;
} break;
@@ -5141,7 +5136,7 @@ static void add_ffmpeg_audio(hb_title_t *title, hb_stream_t *stream, int id)
case AV_CODEC_ID_DTS:
{
- switch (codec->profile)
+ switch (codecpar->profile)
{
case FF_PROFILE_DTS:
case FF_PROFILE_DTS_ES:
@@ -5161,8 +5156,8 @@ static void add_ffmpeg_audio(hb_title_t *title, hb_stream_t *stream, int id)
case AV_CODEC_ID_FLAC:
{
- int len = MIN(codec->extradata_size, HB_CONFIG_MAX_SIZE);
- memcpy(audio->priv.config.extradata.bytes, codec->extradata, len);
+ int len = MIN(codecpar->extradata_size, HB_CONFIG_MAX_SIZE);
+ memcpy(audio->priv.config.extradata.bytes, codecpar->extradata, len);
audio->priv.config.extradata.length = len;
audio->config.in.codec = HB_ACODEC_FFFLAC;
} break;
@@ -5193,14 +5188,15 @@ static void add_ffmpeg_audio(hb_title_t *title, hb_stream_t *stream, int id)
* More information on the format at:
* http://www.matroska.org/technical/specs/subtitles/images.html
*/
-static int ffmpeg_parse_vobsub_extradata_mkv( AVCodecContext *codec, hb_subtitle_t *subtitle )
+static int ffmpeg_parse_vobsub_extradata_mkv( AVCodecParameters *codecpar,
+ hb_subtitle_t *subtitle )
{
- // lines = (string) codec->extradata;
- char *lines = malloc( codec->extradata_size + 1 );
+ // lines = (string) codecpar->extradata;
+ char *lines = malloc( codecpar->extradata_size + 1 );
if ( lines == NULL )
return 1;
- memcpy( lines, codec->extradata, codec->extradata_size );
- lines[codec->extradata_size] = '\0';
+ memcpy( lines, codecpar->extradata, codecpar->extradata_size );
+ lines[codecpar->extradata_size] = '\0';
uint32_t rgb[16];
int gotPalette = 0;
@@ -5265,29 +5261,30 @@ static int ffmpeg_parse_vobsub_extradata_mkv( AVCodecContext *codec, hb_subtitle
/*
* Format: 8-bit {0,Y,Cb,Cr} x 16
*/
-static int ffmpeg_parse_vobsub_extradata_mp4( AVCodecContext *codec, hb_subtitle_t *subtitle )
+static int ffmpeg_parse_vobsub_extradata_mp4( AVCodecParameters *codecpar,
+ hb_subtitle_t *subtitle )
{
- if ( codec->extradata_size != 4*16 )
+ if ( codecpar->extradata_size != 4*16 )
return 1;
int i, j;
for ( i=0, j=0; i<16; i++, j+=4 )
{
subtitle->palette[i] =
- codec->extradata[j+1] << 16 | // Y
- codec->extradata[j+2] << 8 | // Cb
- codec->extradata[j+3] << 0; // Cr
+ codecpar->extradata[j+1] << 16 | // Y
+ codecpar->extradata[j+2] << 8 | // Cb
+ codecpar->extradata[j+3] << 0; // Cr
subtitle->palette_set = 1;
}
- if (codec->width <= 0 || codec->height <= 0)
+ if (codecpar->width <= 0 || codecpar->height <= 0)
{
subtitle->width = 720;
subtitle->height = 480;
}
else
{
- subtitle->width = codec->width;
- subtitle->height = codec->height;
+ subtitle->width = codecpar->width;
+ subtitle->height = codecpar->height;
}
return 0;
}
@@ -5296,31 +5293,32 @@ static int ffmpeg_parse_vobsub_extradata_mp4( AVCodecContext *codec, hb_subtitle
* Parses the 'subtitle->palette' information from the specific VOB subtitle track's private data.
* Returns 0 if successful or 1 if parsing failed or was incomplete.
*/
-static int ffmpeg_parse_vobsub_extradata( AVCodecContext *codec, hb_subtitle_t *subtitle )
+static int ffmpeg_parse_vobsub_extradata( AVCodecParameters *codecpar,
+ hb_subtitle_t *subtitle )
{
// XXX: Better if we actually chose the correct parser based on the input container
return
- ffmpeg_parse_vobsub_extradata_mkv( codec, subtitle ) &&
- ffmpeg_parse_vobsub_extradata_mp4( codec, subtitle );
+ ffmpeg_parse_vobsub_extradata_mkv(codecpar, subtitle) &&
+ ffmpeg_parse_vobsub_extradata_mp4(codecpar, subtitle);
}
static void add_ffmpeg_subtitle( hb_title_t *title, hb_stream_t *stream, int id )
{
- AVStream *st = stream->ffmpeg_ic->streams[id];
- AVCodecContext *codec = st->codec;
+ AVStream * st = stream->ffmpeg_ic->streams[id];
+ AVCodecParameters * codecpar = st->codecpar;
hb_subtitle_t *subtitle = calloc( 1, sizeof(*subtitle) );
subtitle->id = id;
- switch ( codec->codec_id )
+ switch ( codecpar->codec_id )
{
case AV_CODEC_ID_DVD_SUBTITLE:
subtitle->format = PICTURESUB;
subtitle->source = VOBSUB;
subtitle->config.dest = RENDERSUB; // By default render (burn-in) the VOBSUB.
subtitle->codec = WORK_DECVOBSUB;
- if ( ffmpeg_parse_vobsub_extradata( codec, subtitle ) )
+ if (ffmpeg_parse_vobsub_extradata(codecpar, subtitle))
hb_log( "add_ffmpeg_subtitle: malformed extradata for VOB subtitle track; "
"subtitle colors likely to be wrong" );
break;
@@ -5349,7 +5347,8 @@ static void add_ffmpeg_subtitle( hb_title_t *title, hb_stream_t *stream, int id
subtitle->codec = WORK_DECPGSSUB;
break;
default:
- hb_log( "add_ffmpeg_subtitle: unknown subtitle stream type: 0x%x", (int) codec->codec_id );
+ hb_log( "add_ffmpeg_subtitle: unknown subtitle stream type: 0x%x",
+ (int) codecpar->codec_id );
free(subtitle);
return;
}
@@ -5363,11 +5362,12 @@ static void add_ffmpeg_subtitle( hb_title_t *title, hb_stream_t *stream, int id
strncpy( subtitle->iso639_2, language->iso639_2, 4 );
// Copy the extradata for the subtitle track
- if (codec->extradata != NULL)
+ if (codecpar->extradata != NULL)
{
- subtitle->extradata = malloc( codec->extradata_size );
- memcpy( subtitle->extradata, codec->extradata, codec->extradata_size );
- subtitle->extradata_size = codec->extradata_size;
+ subtitle->extradata = malloc(codecpar->extradata_size);
+ memcpy(subtitle->extradata,
+ codecpar->extradata, codecpar->extradata_size);
+ subtitle->extradata_size = codecpar->extradata_size;
}
if (st->disposition & AV_DISPOSITION_DEFAULT)
@@ -5396,11 +5396,11 @@ static char *get_ffmpeg_metadata_value( AVDictionary *m, char *key )
static void add_ffmpeg_attachment( hb_title_t *title, hb_stream_t *stream, int id )
{
AVStream *st = stream->ffmpeg_ic->streams[id];
- AVCodecContext *codec = st->codec;
+ AVCodecParameters *codecpar = st->codecpar;
enum attachtype type;
const char *name = get_ffmpeg_metadata_value( st->metadata, "filename" );
- switch ( codec->codec_id )
+ switch ( codecpar->codec_id )
{
case AV_CODEC_ID_TTF:
// Libav sets codec ID based on mime type of the attachment
@@ -5435,9 +5435,9 @@ static void add_ffmpeg_attachment( hb_title_t *title, hb_stream_t *stream, int i
// Copy the attachment name and data
attachment->type = type;
attachment->name = strdup( name );
- attachment->data = malloc( codec->extradata_size );
- memcpy( attachment->data, codec->extradata, codec->extradata_size );
- attachment->size = codec->extradata_size;
+ attachment->data = malloc( codecpar->extradata_size );
+ memcpy( attachment->data, codecpar->extradata, codecpar->extradata_size );
+ attachment->size = codecpar->extradata_size;
hb_list_add(title->list_attachment, attachment);
}
@@ -5528,14 +5528,14 @@ static hb_title_t *ffmpeg_title_scan( hb_stream_t *stream, hb_title_t *title )
int i;
for (i = 0; i < ic->nb_streams; ++i )
{
- if ( ic->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO &&
+ if ( ic->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO &&
!(ic->streams[i]->disposition & AV_DISPOSITION_ATTACHED_PIC) &&
- avcodec_find_decoder( ic->streams[i]->codec->codec_id ) &&
+ avcodec_find_decoder( ic->streams[i]->codecpar->codec_id ) &&
title->video_codec == 0 )
{
- AVCodecContext *context = ic->streams[i]->codec;
- if ( context->pix_fmt != AV_PIX_FMT_YUV420P &&
- !sws_isSupportedInput( context->pix_fmt ) )
+ AVCodecParameters *codecpar = ic->streams[i]->codecpar;
+ if ( codecpar->format != AV_PIX_FMT_YUV420P &&
+ !sws_isSupportedInput( codecpar->format ) )
{
hb_log( "ffmpeg_title_scan: Unsupported color space" );
continue;
@@ -5550,18 +5550,18 @@ static hb_title_t *ffmpeg_title_scan( hb_stream_t *stream, hb_title_t *title )
}
title->video_codec = WORK_DECAVCODECV;
- title->video_codec_param = context->codec_id;
+ title->video_codec_param = codecpar->codec_id;
}
- else if ( ic->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO &&
- avcodec_find_decoder( ic->streams[i]->codec->codec_id ) )
+ else if (ic->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_AUDIO &&
+ avcodec_find_decoder( ic->streams[i]->codecpar->codec_id))
{
add_ffmpeg_audio( title, stream, i );
}
- else if ( ic->streams[i]->codec->codec_type == AVMEDIA_TYPE_SUBTITLE )
+ else if (ic->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE)
{
add_ffmpeg_subtitle( title, stream, i );
}
- else if ( ic->streams[i]->codec->codec_type == AVMEDIA_TYPE_ATTACHMENT )
+ else if (ic->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_ATTACHMENT)
{
add_ffmpeg_attachment( title, stream, i );
}
@@ -5648,13 +5648,13 @@ static int ffmpeg_is_keyframe( hb_stream_t *stream )
{
uint8_t *pkt;
- switch ( stream->ffmpeg_ic->streams[stream->ffmpeg_video_id]->codec->codec_id )
+ switch (stream->ffmpeg_ic->streams[stream->ffmpeg_video_id]->codecpar->codec_id)
{
case AV_CODEC_ID_VC1:
// XXX the VC1 codec doesn't mark key frames so to get previews
// we do it ourselves here. The decoder gets messed up if it
// doesn't get a SEQ header first so we consider that to be a key frame.
- pkt = stream->ffmpeg_pkt->data;
+ pkt = stream->ffmpeg_pkt.data;
if ( !pkt[0] && !pkt[1] && pkt[2] == 1 && pkt[3] == 0x0f )
return 1;
@@ -5669,8 +5669,8 @@ static int ffmpeg_is_keyframe( hb_stream_t *stream )
// depending on whether it's main or advanced profile then whether
// there are bframes or not so we have to look at the sequence
// header to get that.
- pkt = stream->ffmpeg_pkt->data;
- uint8_t *seqhdr = stream->ffmpeg_ic->streams[stream->ffmpeg_video_id]->codec->extradata;
+ pkt = stream->ffmpeg_pkt.data;
+ uint8_t *seqhdr = stream->ffmpeg_ic->streams[stream->ffmpeg_video_id]->codecpar->extradata;
int pshift = 2;
if ( ( seqhdr[3] & 0x02 ) == 0 )
// no FINTERPFLAG
@@ -5687,7 +5687,7 @@ static int ffmpeg_is_keyframe( hb_stream_t *stream )
default:
break;
}
- return ( stream->ffmpeg_pkt->flags & AV_PKT_FLAG_KEY );
+ return ( stream->ffmpeg_pkt.flags & AV_PKT_FLAG_KEY );
}
hb_buffer_t * hb_ffmpeg_read( hb_stream_t *stream )
@@ -5696,7 +5696,7 @@ hb_buffer_t * hb_ffmpeg_read( hb_stream_t *stream )
hb_buffer_t * buf;
again:
- if ( ( err = av_read_frame( stream->ffmpeg_ic, stream->ffmpeg_pkt )) < 0 )
+ if ( ( err = av_read_frame( stream->ffmpeg_ic, &stream->ffmpeg_pkt )) < 0 )
{
// av_read_frame can return EAGAIN. In this case, it expects
// to be called again to get more data.
@@ -5707,7 +5707,7 @@ hb_buffer_t * hb_ffmpeg_read( hb_stream_t *stream )
// XXX the following conditional is to handle avi files that
// use M$ 'packed b-frames' and occasionally have negative
// sizes for the null frames these require.
- if ( err != AVERROR(ENOMEM) || stream->ffmpeg_pkt->size >= 0 )
+ if ( err != AVERROR(ENOMEM) || stream->ffmpeg_pkt.size >= 0 )
{
// error or eof
if (err != AVERROR_EOF)
@@ -5720,7 +5720,7 @@ hb_buffer_t * hb_ffmpeg_read( hb_stream_t *stream )
return NULL;
}
}
- if ( stream->ffmpeg_pkt->stream_index == stream->ffmpeg_video_id )
+ if ( stream->ffmpeg_pkt.stream_index == stream->ffmpeg_video_id )
{
if ( stream->need_keyframe )
{
@@ -5730,14 +5730,14 @@ hb_buffer_t * hb_ffmpeg_read( hb_stream_t *stream )
// or we've looked through 50 video frames without finding one.
if ( ! ffmpeg_is_keyframe( stream ) && ++stream->need_keyframe < 50 )
{
- av_free_packet( stream->ffmpeg_pkt );
+ av_packet_unref(&stream->ffmpeg_pkt);
goto again;
}
stream->need_keyframe = 0;
}
++stream->frames;
}
- if ( stream->ffmpeg_pkt->size <= 0 )
+ if ( stream->ffmpeg_pkt.size <= 0 )
{
// M$ "invalid and inefficient" packed b-frames require 'null frames'
// following them to preserve the timing (since the packing puts two
@@ -5750,18 +5750,18 @@ hb_buffer_t * hb_ffmpeg_read( hb_stream_t *stream )
else
{
// sometimes we get absurd sizes from ffmpeg
- if ( stream->ffmpeg_pkt->size >= (1 << 25) )
+ if ( stream->ffmpeg_pkt.size >= (1 << 25) )
{
- hb_log( "ffmpeg_read: pkt too big: %d bytes", stream->ffmpeg_pkt->size );
- av_free_packet( stream->ffmpeg_pkt );
+ hb_log( "ffmpeg_read: pkt too big: %d bytes", stream->ffmpeg_pkt.size );
+ av_packet_unref(&stream->ffmpeg_pkt);
return hb_ffmpeg_read( stream );
}
- buf = hb_buffer_init( stream->ffmpeg_pkt->size );
- memcpy( buf->data, stream->ffmpeg_pkt->data, stream->ffmpeg_pkt->size );
+ buf = hb_buffer_init( stream->ffmpeg_pkt.size );
+ memcpy( buf->data, stream->ffmpeg_pkt.data, stream->ffmpeg_pkt.size );
const uint8_t *palette;
int size;
- palette = av_packet_get_side_data(stream->ffmpeg_pkt,
+ palette = av_packet_get_side_data(&stream->ffmpeg_pkt,
AV_PKT_DATA_PALETTE, &size);
if (palette != NULL)
{
@@ -5769,16 +5769,16 @@ hb_buffer_t * hb_ffmpeg_read( hb_stream_t *stream )
memcpy( buf->palette->data, palette, size );
}
}
- buf->s.id = stream->ffmpeg_pkt->stream_index;
+ buf->s.id = stream->ffmpeg_pkt.stream_index;
// compute a conversion factor to go from the ffmpeg
// timebase for the stream to HB's 90kHz timebase.
- AVStream *s = stream->ffmpeg_ic->streams[stream->ffmpeg_pkt->stream_index];
+ AVStream *s = stream->ffmpeg_ic->streams[stream->ffmpeg_pkt.stream_index];
double tsconv = (double)90000. * s->time_base.num / s->time_base.den;
int64_t offset = 90000LL * ffmpeg_initial_timestamp(stream) / AV_TIME_BASE;
- buf->s.start = av_to_hb_pts(stream->ffmpeg_pkt->pts, tsconv, offset);
- buf->s.renderOffset = av_to_hb_pts(stream->ffmpeg_pkt->dts, tsconv, offset);
+ buf->s.start = av_to_hb_pts(stream->ffmpeg_pkt.pts, tsconv, offset);
+ buf->s.renderOffset = av_to_hb_pts(stream->ffmpeg_pkt.dts, tsconv, offset);
if ( buf->s.renderOffset >= 0 && buf->s.start == AV_NOPTS_VALUE )
{
buf->s.start = buf->s.renderOffset;
@@ -5806,8 +5806,8 @@ hb_buffer_t * hb_ffmpeg_read( hb_stream_t *stream )
*/
enum AVCodecID ffmpeg_pkt_codec;
enum AVMediaType codec_type;
- ffmpeg_pkt_codec = stream->ffmpeg_ic->streams[stream->ffmpeg_pkt->stream_index]->codec->codec_id;
- codec_type = stream->ffmpeg_ic->streams[stream->ffmpeg_pkt->stream_index]->codec->codec_type;
+ ffmpeg_pkt_codec = stream->ffmpeg_ic->streams[stream->ffmpeg_pkt.stream_index]->codecpar->codec_id;
+ codec_type = stream->ffmpeg_ic->streams[stream->ffmpeg_pkt.stream_index]->codecpar->codec_type;
switch ( codec_type )
{
case AVMEDIA_TYPE_VIDEO:
@@ -5816,7 +5816,7 @@ hb_buffer_t * hb_ffmpeg_read( hb_stream_t *stream )
* libav avcodec_decode_video2() needs AVPacket flagged with AV_PKT_FLAG_KEY
* for some codecs. For example, sequence of PNG in a mov container.
*/
- if (stream->ffmpeg_pkt->flags & AV_PKT_FLAG_KEY)
+ if (stream->ffmpeg_pkt.flags & AV_PKT_FLAG_KEY)
{
buf->s.flags = HB_FLAG_FRAMETYPE_KEY;
buf->s.frametype = HB_FRAME_I;
@@ -5835,13 +5835,9 @@ hb_buffer_t * hb_ffmpeg_read( hb_stream_t *stream )
buf->s.type = OTHER_BUF;
break;
}
- if ( ffmpeg_pkt_codec == AV_CODEC_ID_TEXT ) {
- int64_t ffmpeg_pkt_duration = stream->ffmpeg_pkt->convergence_duration;
- int64_t buf_duration = av_to_hb_pts( ffmpeg_pkt_duration, tsconv, 0 );
- buf->s.stop = buf->s.start + buf_duration;
- }
- if ( ffmpeg_pkt_codec == AV_CODEC_ID_MOV_TEXT ) {
- int64_t ffmpeg_pkt_duration = stream->ffmpeg_pkt->duration;
+ if ( ffmpeg_pkt_codec == AV_CODEC_ID_TEXT ||
+ ffmpeg_pkt_codec == AV_CODEC_ID_MOV_TEXT ) {
+ int64_t ffmpeg_pkt_duration = stream->ffmpeg_pkt.duration;
int64_t buf_duration = av_to_hb_pts( ffmpeg_pkt_duration, tsconv, 0 );
buf->s.stop = buf->s.start + buf_duration;
}
@@ -5854,7 +5850,7 @@ hb_buffer_t * hb_ffmpeg_read( hb_stream_t *stream )
* (roughly 3 million years at our 90KHz clock rate) so the test
* below handles both the chapters & no chapters case.
*/
- if ( stream->ffmpeg_pkt->stream_index == stream->ffmpeg_video_id &&
+ if ( stream->ffmpeg_pkt.stream_index == stream->ffmpeg_video_id &&
buf->s.start >= stream->chapter_end )
{
hb_chapter_t *chapter = hb_list_item( stream->title->list_chapter,
@@ -5878,7 +5874,7 @@ hb_buffer_t * hb_ffmpeg_read( hb_stream_t *stream )
} else {
buf->s.new_chap = 0;
}
- av_free_packet( stream->ffmpeg_pkt );
+ av_packet_unref(&stream->ffmpeg_pkt);
return buf;
}