parent
3e020fd312
commit
d4bf359633
@ -1,65 +1,327 @@
|
|||||||
From 21d5a1933275edb7f67d05ea62a762464e07c2cb Mon Sep 17 00:00:00 2001
|
From cde283fef6dc1f70fd46fe891642f3e07edbc433 Mon Sep 17 00:00:00 2001
|
||||||
From: Alexandre Janniaux <ajanni@videolabs.io>
|
From: Ilkka Ollakka <ileoo@videolan.org>
|
||||||
Date: Wed, 8 Apr 2020 15:07:15 +0200
|
Date: Wed, 7 Jul 2021 12:37:58 +0000
|
||||||
Subject: [PATCH] avcodec: remove deprecation warning for av*_register_all
|
Subject: [PATCH 1/2] avcodec: remove use of av_init_packet as it is deprecated
|
||||||
|
in new ffmpeg major version
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
From doc/APIchanges:
|
av_init_packet is deprecated in new major version of ffmpeg.
|
||||||
|
|
||||||
2018-02-06 - 0694d87024 - lavf 58.9.100 - avformat.h
|
Also use av_packet_free instead of unref.
|
||||||
Deprecate use of av_register_input_format(), av_register_output_format(),
|
|
||||||
av_register_all(), av_iformat_next(), av_oformat_next().
|
|
||||||
Add av_demuxer_iterate(), and av_muxer_iterate().
|
|
||||||
|
|
||||||
2018-02-06 - 36c85d6e77 - lavc 58.10.100 - avcodec.h
|
Use av_packet_clone and AVPacket * in vlc_av_packet_t.
|
||||||
Deprecate use of avcodec_register(), avcodec_register_all(),
|
|
||||||
av_codec_next(), av_register_codec_parser(), and av_parser_next().
|
|
||||||
Add av_codec_iterate() and av_parser_iterate().
|
|
||||||
|
|
||||||
They are no-op since those updates. If compiling with a recent release,
|
(cherry picked from commit 16fd46fa506424134beb53ec88be3eea1b42a221)
|
||||||
just don't call av*_register_all to prevent warnings.
|
Signed-off-by: Hugo Beauzée-Luyssen <hugo@beauzee.fr>
|
||||||
---
|
---
|
||||||
modules/codec/avcodec/avcommon.h | 6 ++++++
|
modules/codec/avcodec/audio.c | 12 +++++++-----
|
||||||
1 file changed, 6 insertions(+)
|
modules/codec/avcodec/encoder.c | 25 ++++++++++++++-----------
|
||||||
|
modules/codec/avcodec/subtitle.c | 17 +++++++++++------
|
||||||
|
modules/codec/avcodec/video.c | 30 +++++++++++++++++-------------
|
||||||
|
modules/demux/avformat/mux.c | 29 +++++++++++++++++------------
|
||||||
|
5 files changed, 66 insertions(+), 47 deletions(-)
|
||||||
|
|
||||||
diff --git a/modules/codec/avcodec/avcommon.h b/modules/codec/avcodec/avcommon.h
|
diff --git a/modules/codec/avcodec/audio.c b/modules/codec/avcodec/audio.c
|
||||||
index 671cde5c81..fa06616433 100644
|
index eec255ae0b..8c3fa7a217 100644
|
||||||
--- a/modules/codec/avcodec/avcommon.h
|
--- a/modules/codec/avcodec/audio.c
|
||||||
+++ b/modules/codec/avcodec/avcommon.h
|
+++ b/modules/codec/avcodec/audio.c
|
||||||
@@ -109,6 +109,7 @@ static inline void vlc_init_avutil(vlc_object_t *obj)
|
@@ -363,11 +363,13 @@ static int DecodeBlock( decoder_t *p_dec, block_t **pp_block )
|
||||||
|
/* Feed in the loop as buffer could have been full on first iterations */
|
||||||
#ifdef HAVE_LIBAVFORMAT_AVFORMAT_H
|
if( p_block )
|
||||||
# include <libavformat/avformat.h>
|
{
|
||||||
+# include <libavformat/version.h>
|
- AVPacket pkt;
|
||||||
static inline void vlc_init_avformat(vlc_object_t *obj)
|
- av_init_packet( &pkt );
|
||||||
|
- pkt.data = p_block->p_buffer;
|
||||||
|
- pkt.size = p_block->i_buffer;
|
||||||
|
- ret = avcodec_send_packet( ctx, &pkt );
|
||||||
|
+ AVPacket *pkt = av_packet_alloc();
|
||||||
|
+ if( !pkt )
|
||||||
|
+ goto end;
|
||||||
|
+ pkt->data = p_block->p_buffer;
|
||||||
|
+ pkt->size = p_block->i_buffer;
|
||||||
|
+ ret = avcodec_send_packet( ctx, pkt );
|
||||||
|
+ av_packet_free(&pkt);
|
||||||
|
if( ret == 0 ) /* Block has been consumed */
|
||||||
|
{
|
||||||
|
/* Only set new pts from input block if it has been used,
|
||||||
|
diff --git a/modules/codec/avcodec/encoder.c b/modules/codec/avcodec/encoder.c
|
||||||
|
index b083d171f3..27af11a412 100644
|
||||||
|
--- a/modules/codec/avcodec/encoder.c
|
||||||
|
+++ b/modules/codec/avcodec/encoder.c
|
||||||
|
@@ -1061,14 +1061,14 @@ error:
|
||||||
|
typedef struct
|
||||||
{
|
{
|
||||||
vlc_avcodec_lock();
|
block_t self;
|
||||||
@@ -117,7 +118,9 @@ static inline void vlc_init_avformat(vlc_object_t *obj)
|
- AVPacket packet;
|
||||||
|
+ AVPacket *packet;
|
||||||
|
} vlc_av_packet_t;
|
||||||
|
|
||||||
avformat_network_init();
|
static void vlc_av_packet_Release(block_t *block)
|
||||||
|
{
|
||||||
+#if (LIBAVFORMAT_VERSION_MICRO < 100) || (LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(58, 9, 100))
|
vlc_av_packet_t *b = (void *) block;
|
||||||
av_register_all();
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
vlc_avcodec_unlock();
|
- av_packet_unref(&b->packet);
|
||||||
|
+ av_packet_free( &b->packet );
|
||||||
|
free(b);
|
||||||
}
|
}
|
||||||
@@ -125,13 +128,16 @@ static inline void vlc_init_avformat(vlc_object_t *obj)
|
|
||||||
|
|
||||||
#ifdef HAVE_LIBAVCODEC_AVCODEC_H
|
@@ -1089,7 +1089,7 @@ static block_t *vlc_av_packet_Wrap(AVPacket *packet, mtime_t i_length, AVCodecCo
|
||||||
# include <libavcodec/avcodec.h>
|
block_Init( p_block, packet->data, packet->size );
|
||||||
+# include <libavcodec/version.h>
|
p_block->i_nb_samples = 0;
|
||||||
static inline void vlc_init_avcodec(vlc_object_t *obj)
|
p_block->pf_release = vlc_av_packet_Release;
|
||||||
|
- b->packet = *packet;
|
||||||
|
+ b->packet = packet;
|
||||||
|
|
||||||
|
p_block->i_length = i_length;
|
||||||
|
p_block->i_pts = packet->pts;
|
||||||
|
@@ -1138,11 +1138,13 @@ static void check_hurry_up( encoder_sys_t *p_sys, AVFrame *frame, encoder_t *p_e
|
||||||
|
|
||||||
|
static block_t *encode_avframe( encoder_t *p_enc, encoder_sys_t *p_sys, AVFrame *frame )
|
||||||
{
|
{
|
||||||
vlc_avcodec_lock();
|
- AVPacket av_pkt;
|
||||||
|
- av_pkt.data = NULL;
|
||||||
|
- av_pkt.size = 0;
|
||||||
|
+ AVPacket *av_pkt = av_packet_alloc();
|
||||||
|
|
||||||
|
- av_init_packet( &av_pkt );
|
||||||
|
+ if( !av_pkt )
|
||||||
|
+ {
|
||||||
|
+ av_frame_unref( frame );
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
int ret = avcodec_send_frame( p_sys->p_context, frame );
|
||||||
|
if( frame && ret != 0 && ret != AVERROR(EAGAIN) )
|
||||||
|
@@ -1150,18 +1152,19 @@ static block_t *encode_avframe( encoder_t *p_enc, encoder_sys_t *p_sys, AVFrame
|
||||||
|
msg_Warn( p_enc, "cannot send one frame to encoder %d", ret );
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
- ret = avcodec_receive_packet( p_sys->p_context, &av_pkt );
|
||||||
|
+ ret = avcodec_receive_packet( p_sys->p_context, av_pkt );
|
||||||
|
if( ret != 0 && ret != AVERROR(EAGAIN) )
|
||||||
|
{
|
||||||
|
msg_Warn( p_enc, "cannot encode one frame" );
|
||||||
|
+ av_packet_free( &av_pkt );
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
- block_t *p_block = vlc_av_packet_Wrap( &av_pkt,
|
||||||
|
- av_pkt.duration / p_sys->p_context->time_base.den, p_sys->p_context );
|
||||||
|
+ block_t *p_block = vlc_av_packet_Wrap( av_pkt,
|
||||||
|
+ av_pkt->duration / p_sys->p_context->time_base.den, p_sys->p_context );
|
||||||
|
if( unlikely(p_block == NULL) )
|
||||||
|
{
|
||||||
|
- av_packet_unref( &av_pkt );
|
||||||
|
+ av_packet_free( &av_pkt );
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return p_block;
|
||||||
|
diff --git a/modules/codec/avcodec/subtitle.c b/modules/codec/avcodec/subtitle.c
|
||||||
|
index 5cac6339d6..a17ba985e1 100644
|
||||||
|
--- a/modules/codec/avcodec/subtitle.c
|
||||||
|
+++ b/modules/codec/avcodec/subtitle.c
|
||||||
|
@@ -186,16 +186,21 @@ static subpicture_t *DecodeBlock(decoder_t *dec, block_t **block_ptr)
|
||||||
|
AVSubtitle subtitle;
|
||||||
|
memset(&subtitle, 0, sizeof(subtitle));
|
||||||
|
|
||||||
|
- AVPacket pkt;
|
||||||
|
- av_init_packet(&pkt);
|
||||||
|
- pkt.data = block->p_buffer;
|
||||||
|
- pkt.size = block->i_buffer;
|
||||||
|
- pkt.pts = block->i_pts;
|
||||||
|
+ AVPacket *pkt = av_packet_alloc();
|
||||||
|
+ if(!pkt)
|
||||||
|
+ {
|
||||||
|
+ block_Release(block);
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
+ pkt->data = block->p_buffer;
|
||||||
|
+ pkt->size = block->i_buffer;
|
||||||
|
+ pkt->pts = block->i_pts;
|
||||||
|
|
||||||
|
int has_subtitle = 0;
|
||||||
|
int used = avcodec_decode_subtitle2(sys->p_context,
|
||||||
|
- &subtitle, &has_subtitle, &pkt);
|
||||||
|
+ &subtitle, &has_subtitle, pkt);
|
||||||
|
|
||||||
|
+ av_packet_free(&pkt);
|
||||||
|
if (used < 0) {
|
||||||
|
msg_Warn(dec, "cannot decode one subtitle (%zu bytes)",
|
||||||
|
block->i_buffer);
|
||||||
|
diff --git a/modules/codec/avcodec/video.c b/modules/codec/avcodec/video.c
|
||||||
|
index b99eb56e4a..e175cef3a6 100644
|
||||||
|
--- a/modules/codec/avcodec/video.c
|
||||||
|
+++ b/modules/codec/avcodec/video.c
|
||||||
|
@@ -1015,14 +1015,18 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block, bool *error
|
||||||
|
|
||||||
|
if( b_has_data || b_start_drain )
|
||||||
|
{
|
||||||
|
- AVPacket pkt;
|
||||||
|
- av_init_packet( &pkt );
|
||||||
|
+ AVPacket *pkt = av_packet_alloc();
|
||||||
|
+ if(!pkt)
|
||||||
|
+ {
|
||||||
|
+ *error = true;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
if( b_has_data )
|
||||||
|
{
|
||||||
|
- pkt.data = p_block->p_buffer;
|
||||||
|
- pkt.size = p_block->i_buffer;
|
||||||
|
- pkt.pts = p_block->i_pts > VLC_TS_INVALID ? p_block->i_pts : AV_NOPTS_VALUE;
|
||||||
|
- pkt.dts = p_block->i_dts > VLC_TS_INVALID ? p_block->i_dts : AV_NOPTS_VALUE;
|
||||||
|
+ pkt->data = p_block->p_buffer;
|
||||||
|
+ pkt->size = p_block->i_buffer;
|
||||||
|
+ pkt->pts = p_block->i_pts > VLC_TS_INVALID ? p_block->i_pts : AV_NOPTS_VALUE;
|
||||||
|
+ pkt->dts = p_block->i_dts > VLC_TS_INVALID ? p_block->i_dts : AV_NOPTS_VALUE;
|
||||||
|
|
||||||
|
/* Make sure we don't reuse the same timestamps twice */
|
||||||
|
p_block->i_pts =
|
||||||
|
@@ -1031,21 +1035,21 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block, bool *error
|
||||||
|
else /* start drain */
|
||||||
|
{
|
||||||
|
/* Return delayed frames if codec has CODEC_CAP_DELAY */
|
||||||
|
- pkt.data = NULL;
|
||||||
|
- pkt.size = 0;
|
||||||
|
+ pkt->data = NULL;
|
||||||
|
+ pkt->size = 0;
|
||||||
|
p_sys->b_draining = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !p_sys->palette_sent )
|
||||||
|
{
|
||||||
|
- uint8_t *pal = av_packet_new_side_data(&pkt, AV_PKT_DATA_PALETTE, AVPALETTE_SIZE);
|
||||||
|
+ uint8_t *pal = av_packet_new_side_data(pkt, AV_PKT_DATA_PALETTE, AVPALETTE_SIZE);
|
||||||
|
if (pal) {
|
||||||
|
memcpy(pal, p_dec->fmt_in.video.p_palette->palette, AVPALETTE_SIZE);
|
||||||
|
p_sys->palette_sent = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- ret = avcodec_send_packet(p_context, &pkt);
|
||||||
|
+ ret = avcodec_send_packet(p_context, pkt);
|
||||||
|
if( ret != 0 && ret != AVERROR(EAGAIN) )
|
||||||
|
{
|
||||||
|
if (ret == AVERROR(ENOMEM) || ret == AVERROR(EINVAL))
|
||||||
|
@@ -1053,11 +1057,11 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block, bool *error
|
||||||
|
msg_Err(p_dec, "avcodec_send_packet critical error");
|
||||||
|
*error = true;
|
||||||
|
}
|
||||||
|
- av_packet_unref( &pkt );
|
||||||
|
+ av_packet_free( &pkt );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
- i_used = ret != AVERROR(EAGAIN) ? pkt.size : 0;
|
||||||
|
- av_packet_unref( &pkt );
|
||||||
|
+ i_used = ret != AVERROR(EAGAIN) ? pkt->size : 0;
|
||||||
|
+ av_packet_unref( pkt );
|
||||||
|
}
|
||||||
|
|
||||||
|
AVFrame *frame = av_frame_alloc();
|
||||||
|
diff --git a/modules/demux/avformat/mux.c b/modules/demux/avformat/mux.c
|
||||||
|
index 48878c712b..405a6f6933 100644
|
||||||
|
--- a/modules/demux/avformat/mux.c
|
||||||
|
+++ b/modules/demux/avformat/mux.c
|
||||||
|
@@ -341,14 +341,16 @@ static int MuxBlock( sout_mux_t *p_mux, sout_input_t *p_input )
|
||||||
|
block_t *p_data = block_FifoGet( p_input->p_fifo );
|
||||||
|
int i_stream = *((int *)p_input->p_sys);
|
||||||
|
AVStream *p_stream = p_sys->oc->streams[i_stream];
|
||||||
|
- AVPacket pkt;
|
||||||
|
-
|
||||||
|
- memset( &pkt, 0, sizeof(AVPacket) );
|
||||||
|
+ AVPacket *pkt = av_packet_alloc();
|
||||||
|
+ if( !pkt )
|
||||||
|
+ {
|
||||||
|
+ block_Release( p_data );
|
||||||
|
+ return VLC_EGENERIC;
|
||||||
|
+ }
|
||||||
|
|
||||||
vlc_init_avutil(obj);
|
- av_init_packet(&pkt);
|
||||||
|
- pkt.data = p_data->p_buffer;
|
||||||
|
- pkt.size = p_data->i_buffer;
|
||||||
|
- pkt.stream_index = i_stream;
|
||||||
|
+ pkt->data = p_data->p_buffer;
|
||||||
|
+ pkt->size = p_data->i_buffer;
|
||||||
|
+ pkt->stream_index = i_stream;
|
||||||
|
|
||||||
+#if (LIBAVFORMAT_VERSION_MICRO < 100) || (LIBAVCODEC_VERSION_INT < AV_VERSION_INT(58, 10, 100))
|
if( p_data->i_flags & BLOCK_FLAG_TYPE_I )
|
||||||
avcodec_register_all();
|
{
|
||||||
+#endif
|
@@ -359,29 +361,32 @@ static int MuxBlock( sout_mux_t *p_mux, sout_input_t *p_input )
|
||||||
|
#endif
|
||||||
|
|
||||||
vlc_avcodec_unlock();
|
p_sys->b_write_keyframe = true;
|
||||||
|
- pkt.flags |= AV_PKT_FLAG_KEY;
|
||||||
|
+ pkt->flags |= AV_PKT_FLAG_KEY;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( p_data->i_pts > 0 )
|
||||||
|
- pkt.pts = p_data->i_pts * p_stream->time_base.den /
|
||||||
|
+ pkt->pts = p_data->i_pts * p_stream->time_base.den /
|
||||||
|
CLOCK_FREQ / p_stream->time_base.num;
|
||||||
|
if( p_data->i_dts > 0 )
|
||||||
|
- pkt.dts = p_data->i_dts * p_stream->time_base.den /
|
||||||
|
+ pkt->dts = p_data->i_dts * p_stream->time_base.den /
|
||||||
|
CLOCK_FREQ / p_stream->time_base.num;
|
||||||
|
|
||||||
|
/* this is another hack to prevent libavformat from triggering the "non monotone timestamps" check in avformat/utils.c */
|
||||||
|
p_stream->cur_dts = ( p_data->i_dts * p_stream->time_base.den /
|
||||||
|
CLOCK_FREQ / p_stream->time_base.num ) - 1;
|
||||||
|
|
||||||
|
- if( av_write_frame( p_sys->oc, &pkt ) < 0 )
|
||||||
|
+ if( av_write_frame( p_sys->oc, pkt ) < 0 )
|
||||||
|
{
|
||||||
|
msg_Err( p_mux, "could not write frame (pts: %"PRId64", dts: %"PRId64") "
|
||||||
|
"(pkt pts: %"PRId64", dts: %"PRId64")",
|
||||||
|
- p_data->i_pts, p_data->i_dts, pkt.pts, pkt.dts );
|
||||||
|
+ p_data->i_pts, p_data->i_dts, pkt->pts, pkt->dts );
|
||||||
|
block_Release( p_data );
|
||||||
|
+ av_packet_unref( pkt );
|
||||||
|
return VLC_EGENERIC;
|
||||||
|
}
|
||||||
|
|
||||||
|
+
|
||||||
|
+ av_packet_unref( pkt );
|
||||||
|
block_Release( p_data );
|
||||||
|
return VLC_SUCCESS;
|
||||||
}
|
}
|
||||||
--
|
--
|
||||||
GitLab
|
GitLab
|
||||||
|
|
||||||
|
|
||||||
|
From 149141346ddb419aa7c34fb59803c1db4035ced7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ilkka Ollakka <ileoo@videolan.org>
|
||||||
|
Date: Fri, 18 Jun 2021 10:23:35 +0300
|
||||||
|
Subject: [PATCH 2/2] avcodec/subtitle: stop using removed setter for pkt
|
||||||
|
timebase
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Removed from ffmpeg repo in commit 23bb78d2ea4f0e3a0835744d59708efed50abccc.
|
||||||
|
|
||||||
|
(cherry picked from commit e7190e7a70e9701754c50348f5b6357759440657)
|
||||||
|
Signed-off-by: Hugo Beauzée-Luyssen <hugo@beauzee.fr>
|
||||||
|
---
|
||||||
|
modules/codec/avcodec/subtitle.c | 4 +++-
|
||||||
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/modules/codec/avcodec/subtitle.c b/modules/codec/avcodec/subtitle.c
|
||||||
|
index a17ba985e1..d3afe4270b 100644
|
||||||
|
--- a/modules/codec/avcodec/subtitle.c
|
||||||
|
+++ b/modules/codec/avcodec/subtitle.c
|
||||||
|
@@ -90,7 +90,9 @@ int InitSubtitleDec(vlc_object_t *obj)
|
||||||
|
context->extradata_size = 0;
|
||||||
|
context->extradata = NULL;
|
||||||
|
|
||||||
|
-#if LIBAVFORMAT_VERSION_MICRO >= 100
|
||||||
|
+#if LIBAVFORMAT_VERSION_MAJOR >= 59
|
||||||
|
+ context->pkt_timebase=AV_TIME_BASE_Q;
|
||||||
|
+#elif LIBAVFORMAT_VERSION_MICRO >= 100
|
||||||
|
av_codec_set_pkt_timebase(context, AV_TIME_BASE_Q);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
--
|
||||||
|
GitLab
|
||||||
|
|
||||||
|
Loading…
Reference in new issue