X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fpacketizer%2Fcopy.c;h=c208dfca9b086a5cd7c4f33f4e7cda4ece146b21;hb=0946ea13535b1e5f83482ea6e5dfef7555adbac1;hp=7e7108de3e5829d22db58a9e6f0f8b6c51964f23;hpb=f7fd8b6514d5427b5e177396e236c486142f3d97;p=vlc diff --git a/modules/packetizer/copy.c b/modules/packetizer/copy.c index 7e7108de3e..c208dfca9b 100644 --- a/modules/packetizer/copy.c +++ b/modules/packetizer/copy.c @@ -2,7 +2,7 @@ * copy.c ***************************************************************************** * Copyright (C) 2001, 2002 VideoLAN - * $Id: copy.c,v 1.23 2004/01/25 17:58:30 murray Exp $ + * $Id$ * * Authors: Laurent Aimar * Eric Petit @@ -38,6 +38,8 @@ static int Open ( vlc_object_t * ); static void Close( vlc_object_t * ); vlc_module_begin(); + set_category( CAT_SOUT ); + set_subcategory( SUBCAT_SOUT_PACKETIZER ); set_description( _("Copy packetizer") ); set_capability( "packetizer", 1 ); set_callbacks( Open, Close ); @@ -51,7 +53,8 @@ struct decoder_sys_t block_t *p_block; }; -static block_t *Packetize ( decoder_t *, block_t ** ); +static block_t *Packetize ( decoder_t *, block_t ** ); +static block_t *PacketizeSub( decoder_t *, block_t ** ); /***************************************************************************** * Open: probe the packetizer and return score @@ -72,16 +75,13 @@ static int Open( vlc_object_t *p_this ) return VLC_EGENERIC; } - p_dec->pf_packetize = Packetize; + if( p_dec->fmt_in.i_cat == SPU_ES ) + p_dec->pf_packetize = PacketizeSub; + else + p_dec->pf_packetize = Packetize; /* Create the output format */ - memcpy( &p_dec->fmt_out, &p_dec->fmt_in, sizeof( es_format_t ) ); - if( p_dec->fmt_in.i_extra > 0 ) - { - p_dec->fmt_out.p_extra = malloc( p_dec->fmt_in.i_extra ); - memcpy( p_dec->fmt_out.p_extra, p_dec->fmt_in.p_extra, - p_dec->fmt_in.i_extra ); - } + es_format_Copy( &p_dec->fmt_out, &p_dec->fmt_in ); /* Fix the value of the fourcc */ switch( p_dec->fmt_in.i_codec ) @@ -247,7 +247,7 @@ static void Close( vlc_object_t *p_this ) } /***************************************************************************** - * PacketizeStd: packetize an unit (here copy a complete block ) + * Packetize: packetize an unit (here copy a complete block ) *****************************************************************************/ static block_t *Packetize ( decoder_t *p_dec, block_t **pp_block ) { @@ -261,18 +261,14 @@ static block_t *Packetize ( decoder_t *p_dec, block_t **pp_block ) p_block = *pp_block; *pp_block = NULL; - if( p_block->i_pts <= 0 ) - { - p_block->i_pts = p_block->i_dts; - } - else if( p_block->i_dts <= 0 ) + if( p_block->i_dts <= 0 ) { p_block->i_dts = p_block->i_pts; } - if( p_block->i_pts <= 0 ) + if( p_block->i_dts <= 0 ) { - msg_Dbg( p_dec, "need pts > 0" ); + msg_Dbg( p_dec, "need dts > 0" ); block_Release( p_block ); return NULL; } @@ -286,3 +282,31 @@ static block_t *Packetize ( decoder_t *p_dec, block_t **pp_block ) return p_ret; } +/***************************************************************************** + * PacketizeSub: packetize an unit (here copy a complete block ) + *****************************************************************************/ +static block_t *PacketizeSub( decoder_t *p_dec, block_t **pp_block ) +{ + block_t *p_block; + + if( pp_block == NULL || *pp_block == NULL ) + { + return NULL; + } + p_block = *pp_block; + *pp_block = NULL; + + if( p_block->i_dts <= 0 ) + { + p_block->i_dts = p_block->i_pts; + } + + if( p_block->i_dts <= 0 ) + { + msg_Dbg( p_dec, "need dts > 0" ); + block_Release( p_block ); + return NULL; + } + + return p_block; +}