X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fdemux%2Fty.c;h=754e235bb4a4cfbf8dbbfe1c60597bebd7d06fc2;hb=68d84670dccbe61605676160a27c5042c12cd543;hp=d600c2f478d9082ea4516c72f3d330774b9c4e4c;hpb=df61d33b06e2b3cbbe746b2f5a9bea5b370c24ff;p=vlc diff --git a/modules/demux/ty.c b/modules/demux/ty.c index d600c2f478..754e235bb4 100644 --- a/modules/demux/ty.c +++ b/modules/demux/ty.c @@ -39,13 +39,16 @@ # include "config.h" #endif -#include +#include +#include #include #include "vlc_codec.h" #include "vlc_meta.h" #include "vlc_input.h" #include "../codec/cc.h" +#include + /***************************************************************************** * Module descriptor *****************************************************************************/ @@ -53,8 +56,8 @@ static int Open ( vlc_object_t * ); static void Close( vlc_object_t * ); vlc_module_begin(); - set_shortname( _("TY") ); - set_description(_("TY Stream audio/video demux")); + set_shortname( N_("TY") ); + set_description(N_("TY Stream audio/video demux")); set_category( CAT_INPUT ); set_subcategory( SUBCAT_INPUT_DEMUX ); set_capability("demux", 6); @@ -261,7 +264,7 @@ static int find_es_header( const uint8_t *header, static int ty_stream_seek_pct(demux_t *p_demux, double seek_pct); static int ty_stream_seek_time(demux_t *, uint64_t); -static ty_rec_hdr_t *parse_chunk_headers( demux_t *p_demux, const uint8_t *p_buf, +static ty_rec_hdr_t *parse_chunk_headers( const uint8_t *p_buf, int i_num_recs, int *pi_payload_size); static int probe_stream(demux_t *p_demux); static void analyze_chunk(demux_t *p_demux, const uint8_t *p_chunk); @@ -690,7 +693,7 @@ static int DemuxRecVideo( demux_t *p_demux, ty_rec_hdr_t *rec_hdr, block_t *p_bl //subrec_type, esOffset1); p_sys->lastVideoPTS = get_pts( &p_block_in->p_buffer[ esOffset1 + VIDEO_PTS_OFFSET ] ); - /*msg_Dbg(p_demux, "Video rec %d PTS "I64Fd, p_sys->i_cur_rec, + /*msg_Dbg(p_demux, "Video rec %d PTS %"PRId64, p_sys->i_cur_rec, p_sys->lastVideoPTS );*/ if (subrec_type != 0x06) { /* if we found a PES, and it's not type 6, then we're S2 */ @@ -786,24 +789,17 @@ static int DemuxRecVideo( demux_t *p_demux, ty_rec_hdr_t *rec_hdr, block_t *p_bl /* Send the CC data */ if( p_block_in->i_pts > 0 && p_sys->cc.i_data > 0 ) { - int i_cc_count; - - block_t *p_cc = block_New( p_demux, p_sys->cc.i_data ); - p_cc->i_flags |= BLOCK_FLAG_TYPE_I; - p_cc->i_pts = p_block_in->i_pts; - memcpy( p_cc->p_buffer, p_sys->cc.p_data, p_sys->cc.i_data ); - - for( i = 0, i_cc_count = 0; i < 4; i++ ) - i_cc_count += p_sys->p_cc[i] ? 1 : 0; - for( i = 0; i < 4; i++ ) { - if( !p_sys->p_cc[i] ) - continue; - if( i_cc_count > 1 ) - es_out_Send( p_demux->out, p_sys->p_cc[i], block_Duplicate( p_cc ) ); - else + if( p_sys->p_cc[i] ) + { + block_t *p_cc = block_New( p_demux, p_sys->cc.i_data ); + p_cc->i_flags |= BLOCK_FLAG_TYPE_I; + p_cc->i_pts = p_block_in->i_pts; + memcpy( p_cc->p_buffer, p_sys->cc.p_data, p_sys->cc.i_data ); + es_out_Send( p_demux->out, p_sys->p_cc[i], p_cc ); + } } cc_Flush( &p_sys->cc ); } @@ -825,10 +821,10 @@ static int DemuxRecAudio( demux_t *p_demux, ty_rec_hdr_t *rec_hdr, block_t *p_bl return -1; #if 0 int i; - printf( "Audio Packet Header " ); + fprintf( stderr, "Audio Packet Header " ); for( i = 0 ; i < 24 ; i++ ) - printf( "%2.2x ", p_block_in->p_buffer[i] ); - printf( "\n" ); + fprintf( stderr, "%2.2x ", p_block_in->p_buffer[i] ); + fprintf( stderr, "\n" ); #endif if( subrec_type == 2 ) @@ -1087,7 +1083,7 @@ static int ty_stream_seek_pct(demux_t *p_demux, double seek_pct) /* seek within the chunk to get roughly to where we want */ p_sys->i_cur_rec = (int) ((double) ((seek_pos % CHUNK_SIZE) / (double) (CHUNK_SIZE)) * p_sys->i_num_recs); - msg_Dbg(p_demux, "Seeked to file pos " I64Fd, seek_pos); + msg_Dbg(p_demux, "Seeked to file pos %"PRId64, seek_pos); msg_Dbg(p_demux, " (chunk %d, record %d)", p_sys->i_cur_chunk - 1, p_sys->i_cur_rec); @@ -1101,7 +1097,6 @@ static int ty_stream_seek_pct(demux_t *p_demux, double seek_pct) /* to hell with syncing any audio or video, just start reading records... :) */ /*p_sys->lastAudioPTS = p_sys->lastVideoPTS = 0;*/ - es_out_Control( p_demux->out, ES_OUT_RESET_PCR ); return VLC_SUCCESS; } @@ -1728,7 +1723,7 @@ static void analyze_chunk(demux_t *p_demux, const uint8_t *p_chunk) int i_num_recs, i; ty_rec_hdr_t *p_hdrs; int i_num_6e0, i_num_be0, i_num_9c0, i_num_3c0; - uint32_t i_payload_size; + int i_payload_size; /* skip if it's a Part header */ if( U32_AT( &p_chunk[ 0 ] ) == TIVO_PES_FILEID ) @@ -1744,7 +1739,7 @@ static void analyze_chunk(demux_t *p_demux, const uint8_t *p_chunk) p_chunk += 4; /* skip past rec count & SEQ bytes */ //msg_Dbg(p_demux, "probe: chunk has %d recs", i_num_recs); - p_hdrs = parse_chunk_headers(p_demux, p_chunk, i_num_recs, &i_payload_size); + p_hdrs = parse_chunk_headers(p_chunk, i_num_recs, &i_payload_size); /* scan headers. * 1. check video packets. Presence of 0x6e0 means S1. * No 6e0 but have be0 means S2. @@ -1903,7 +1898,7 @@ static int get_chunk_header(demux_t *p_demux) return 0; } /* parse them */ - p_sys->rec_hdrs = parse_chunk_headers(p_demux, p_hdr_buf, i_num_recs, + p_sys->rec_hdrs = parse_chunk_headers(p_hdr_buf, i_num_recs, &i_payload_size); free(p_hdr_buf); @@ -1916,7 +1911,7 @@ static int get_chunk_header(demux_t *p_demux) } -static ty_rec_hdr_t *parse_chunk_headers( demux_t *p_demux, const uint8_t *p_buf, +static ty_rec_hdr_t *parse_chunk_headers( const uint8_t *p_buf, int i_num_recs, int *pi_payload_size) { int i;