# include "config.h"
#endif
-#include <vlc/vlc.h>
+#include <vlc_common.h>
+#include <vlc_plugin.h>
#include <vlc_demux.h>
#include "vlc_codec.h"
#include "vlc_meta.h"
#include "vlc_input.h"
#include "../codec/cc.h"
+#include <assert.h>
+
/*****************************************************************************
* Module descriptor
*****************************************************************************/
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);
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);
//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 */
/* 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 );
}
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 )
/* 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);
/* 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;
}
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 )
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.
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);
}
-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;