From a1f7abd94a909f8557dcebb2e1cbc29262c6d438 Mon Sep 17 00:00:00 2001 From: Alexandre Janniaux Date: Wed, 19 Feb 2020 16:20:51 +0100 Subject: [PATCH] decoder: rename vlc_packetizer helpers --- include/vlc_codec.h | 15 ++++++++++++++ modules/demux/flac.c | 4 ++-- modules/demux/mpeg/es.c | 4 ++-- modules/demux/mpeg/h26x.c | 5 ++--- modules/demux/mpeg/mpgv.c | 5 ++--- modules/demux/vc1.c | 5 ++--- src/input/decoder.c | 41 +++++++++++++++++++++++++++++++++++++++ src/libvlccore.sym | 2 ++ 8 files changed, 68 insertions(+), 13 deletions(-) diff --git a/include/vlc_codec.h b/include/vlc_codec.h index 7ab479ae32..e44cc24d70 100644 --- a/include/vlc_codec.h +++ b/include/vlc_codec.h @@ -533,6 +533,21 @@ static inline float decoder_GetDisplayRate( decoder_t *dec ) return dec->cbs->video.get_display_rate( dec ); } +/** + * This function will create a packetizer suitable for a demuxer that parses + * elementary stream or for an encoder generating blocks. + * + * The provided es_format_t will be cleaned on error or by + * vlc_packetizer_Destroy. + */ +VLC_API decoder_t * (vlc_packetizer_New)( vlc_object_t *p_obj, es_format_t *p_fmt, const char *psz_msg ) VLC_USED VLC_MALLOC; +#define vlc_packetizer_New(obj, f, m) (vlc_packetizer_New)(VLC_OBJECT( obj ), f, m) + +/** + * This function will destroy a packetizer create by vlc_packetizer_New. + */ +VLC_API void vlc_packetizer_Destroy( decoder_t *p_packetizer ); + /** @} */ /** diff --git a/modules/demux/flac.c b/modules/demux/flac.c index 52850562f5..310db4bbed 100644 --- a/modules/demux/flac.c +++ b/modules/demux/flac.c @@ -162,7 +162,7 @@ static int Open( vlc_object_t * p_this ) goto error; /* Load the FLAC packetizer */ - p_sys->p_packetizer = demux_PacketizerNew( p_demux, &fmt, "flac" ); + p_sys->p_packetizer = vlc_packetizer_New( p_demux, &fmt, "flac" ); if( !p_sys->p_packetizer ) goto error; @@ -212,7 +212,7 @@ static void Close( vlc_object_t * p_this ) /* Delete the decoder */ if( p_sys->p_packetizer ) - demux_PacketizerDestroy( p_sys->p_packetizer ); + vlc_packetizer_Destroy( p_sys->p_packetizer ); if( p_sys->p_meta ) vlc_meta_Delete( p_sys->p_meta ); diff --git a/modules/demux/mpeg/es.c b/modules/demux/mpeg/es.c index a8491f3f0d..fe40c215b4 100644 --- a/modules/demux/mpeg/es.c +++ b/modules/demux/mpeg/es.c @@ -258,7 +258,7 @@ static int OpenCommon( demux_t *p_demux, /* Load the audio packetizer */ es_format_Init( &fmt, i_cat, p_sys->codec.i_codec ); fmt.i_original_fourcc = p_sys->i_original; - p_sys->p_packetizer = demux_PacketizerNew( p_demux, &fmt, p_sys->codec.psz_name ); + p_sys->p_packetizer = vlc_packetizer_New( p_demux, &fmt, p_sys->codec.psz_name ); if( !p_sys->p_packetizer ) { free( p_sys ); @@ -420,7 +420,7 @@ static void Close( vlc_object_t * p_this ) TAB_CLEAN( p_sys->chapters.i_count, p_sys->chapters.p_entry ); if( p_sys->mllt.p_bits ) free( p_sys->mllt.p_bits ); - demux_PacketizerDestroy( p_sys->p_packetizer ); + vlc_packetizer_Destroy( p_sys->p_packetizer ); free( p_sys ); } diff --git a/modules/demux/mpeg/h26x.c b/modules/demux/mpeg/h26x.c index b1cd66ebd0..c0899249c8 100644 --- a/modules/demux/mpeg/h26x.c +++ b/modules/demux/mpeg/h26x.c @@ -362,7 +362,7 @@ static int GenericOpen( demux_t *p_demux, const char *psz_module, fmt.video.i_frame_rate = p_sys->feed_dts.i_divider_num; fmt.video.i_frame_rate_base = p_sys->feed_dts.i_divider_den; } - p_sys->p_packetizer = demux_PacketizerNew( p_demux, &fmt, psz_module ); + p_sys->p_packetizer = vlc_packetizer_New( p_demux, &fmt, psz_module ); if( !p_sys->p_packetizer ) { free( p_sys ); @@ -403,7 +403,7 @@ static void Close( vlc_object_t * p_this ) demux_t *p_demux = (demux_t*)p_this; demux_sys_t *p_sys = p_demux->p_sys; - demux_PacketizerDestroy( p_sys->p_packetizer ); + vlc_packetizer_Destroy( p_sys->p_packetizer ); free( p_sys ); } @@ -527,4 +527,3 @@ static int Control( demux_t *p_demux, int i_query, va_list args ) 0, -1, 0, 1, i_query, args ); } - diff --git a/modules/demux/mpeg/mpgv.c b/modules/demux/mpeg/mpgv.c index 48a029c5dc..a8e6d9ff2d 100644 --- a/modules/demux/mpeg/mpgv.c +++ b/modules/demux/mpeg/mpgv.c @@ -73,7 +73,7 @@ static void Close( vlc_object_t * p_this ) demux_t *p_demux = (demux_t*)p_this; demux_sys_t *p_sys = p_demux->p_sys; - demux_PacketizerDestroy( p_sys->p_packetizer ); + vlc_packetizer_Destroy( p_sys->p_packetizer ); free( p_sys ); } @@ -136,7 +136,7 @@ static int Open( vlc_object_t * p_this ) /* Load the mpegvideo packetizer */ es_format_Init( &fmt, VIDEO_ES, VLC_CODEC_MPGV ); - p_sys->p_packetizer = demux_PacketizerNew( p_demux, &fmt, "mpeg video" ); + p_sys->p_packetizer = vlc_packetizer_New( p_demux, &fmt, "mpeg video" ); if( !p_sys->p_packetizer ) { free( p_sys ); @@ -210,4 +210,3 @@ static int Control( demux_t *p_demux, int i_query, va_list args ) 0, -1, 0, 1, i_query, args ); } - diff --git a/modules/demux/vc1.c b/modules/demux/vc1.c index 6902faf9fb..c9e608d3ea 100644 --- a/modules/demux/vc1.c +++ b/modules/demux/vc1.c @@ -110,7 +110,7 @@ static int Open( vlc_object_t * p_this ) /* Load the packetizer */ es_format_Init( &fmt, VIDEO_ES, VLC_CODEC_VC1 ); - p_sys->p_packetizer = demux_PacketizerNew( p_demux, &fmt, "VC-1" ); + p_sys->p_packetizer = vlc_packetizer_New( p_demux, &fmt, "VC-1" ); if( !p_sys->p_packetizer ) { free( p_sys ); @@ -127,7 +127,7 @@ static void Close( vlc_object_t * p_this ) demux_t *p_demux = (demux_t*)p_this; demux_sys_t *p_sys = p_demux->p_sys; - demux_PacketizerDestroy( p_sys->p_packetizer ); + vlc_packetizer_Destroy( p_sys->p_packetizer ); free( p_sys ); } @@ -207,4 +207,3 @@ static int Control( demux_t *p_demux, int i_query, va_list args ) 0, -1, 0, 1, i_query, args ); } - diff --git a/src/input/decoder.c b/src/input/decoder.c index 1ac909a083..3897b0ea9d 100644 --- a/src/input/decoder.c +++ b/src/input/decoder.c @@ -2694,3 +2694,44 @@ int vlc_input_decoder_SetSpuHighlight( vlc_input_decoder_t *p_owner, vlc_mutex_unlock( &p_owner->lock ); return VLC_SUCCESS; } + +decoder_t *(vlc_packetizer_New)( vlc_object_t *p_parent, es_format_t *p_fmt, + const char *psz_msg ) +{ + decoder_t *p_packetizer; + p_packetizer = vlc_custom_create( p_parent, sizeof( *p_packetizer ), "demux packetizer" ); + if( !p_packetizer ) + { + es_format_Clean( p_fmt ); + return NULL; + } + p_fmt->b_packetized = false; + + p_packetizer->pf_decode = NULL; + p_packetizer->pf_packetize = NULL; + + p_packetizer->fmt_in = *p_fmt; + es_format_Init( &p_packetizer->fmt_out, p_fmt->i_cat, 0 ); + + p_packetizer->p_module = module_need( p_packetizer, "packetizer", NULL, false ); + if( !p_packetizer->p_module ) + { + es_format_Clean( p_fmt ); + vlc_object_delete(p_packetizer); + msg_Err( p_parent, "cannot find packetizer for %s", psz_msg ); + return NULL; + } + + return p_packetizer; +} + +void vlc_packetizer_Destroy( decoder_t *p_packetizer ) +{ + if( p_packetizer->p_module ) + module_unneed( p_packetizer, p_packetizer->p_module ); + es_format_Clean( &p_packetizer->fmt_in ); + es_format_Clean( &p_packetizer->fmt_out ); + if( p_packetizer->p_description ) + vlc_meta_Delete( p_packetizer->p_description ); + vlc_object_delete( p_packetizer ); +} diff --git a/src/libvlccore.sym b/src/libvlccore.sym index 91151cd2f6..cb4978a2f2 100644 --- a/src/libvlccore.sym +++ b/src/libvlccore.sym @@ -221,6 +221,8 @@ input_resource_Release input_resource_GetAout input_resource_HoldAout input_resource_PutAout +vlc_packetizer_New +vlc_packetizer_Destroy vlc_readdir_helper_init vlc_readdir_helper_finish vlc_readdir_helper_additem