vlc | branch: master | Francois Cartegnie <[email protected]> | Wed Mar 2 17:51:14 2016 +0100| [42cb58fa03a0fc56d71fcb4e6b71bbc65c132981] | committer: Francois Cartegnie
demux: ts: encap psi packets push > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=42cb58fa03a0fc56d71fcb4e6b71bbc65c132981 --- modules/demux/mpeg/ts.c | 26 ++++---------------------- modules/demux/mpeg/ts_psi.c | 8 ++++++++ modules/demux/mpeg/ts_psi.h | 1 + modules/demux/mpeg/ts_psi_eit.c | 7 +++++++ modules/demux/mpeg/ts_psi_eit.h | 4 ++++ modules/demux/mpeg/ts_psip.c | 6 ++++++ modules/demux/mpeg/ts_psip.h | 4 ++++ 7 files changed, 34 insertions(+), 22 deletions(-) diff --git a/modules/demux/mpeg/ts.c b/modules/demux/mpeg/ts.c index 2ca7785..12907f9 100644 --- a/modules/demux/mpeg/ts.c +++ b/modules/demux/mpeg/ts.c @@ -35,19 +35,12 @@ #include <vlc_access.h> /* DVB-specific things */ #include <vlc_demux.h> -/* Include dvbpsi headers */ -#ifndef _DVBPSI_DVBPSI_H_ - # include <dvbpsi/dvbpsi.h> -#endif -# include <dvbpsi/descriptor.h> -# include <dvbpsi/pat.h> -# include <dvbpsi/pmt.h> - #include "ts_pid.h" #include "ts_streams.h" #include "ts_streams_private.h" #include "ts_psi.h" #include "ts_psi_eit.h" +#include "ts_psip.h" #include "ts_hotfixes.h" #include "ts_sl.h" @@ -680,12 +673,8 @@ static int Demux( demux_t *p_demux ) switch( p_pid->type ) { case TYPE_PAT: - dvbpsi_packet_push( p_pid->u.p_pat->handle, p_pkt->p_buffer ); - block_Release( p_pkt ); - break; - case TYPE_PMT: - dvbpsi_packet_push( p_pid->u.p_pmt->handle, p_pkt->p_buffer ); + ts_psi_Packet_Push( p_pid, p_pkt->p_buffer ); block_Release( p_pkt ); break; @@ -710,14 +699,12 @@ static int Demux( demux_t *p_demux ) break; case TYPE_SI: - if( p_sys->b_dvb_meta && p_pid->u.p_si->handle->p_decoder ) - dvbpsi_packet_push( p_pid->u.p_si->handle, p_pkt->p_buffer ); + ts_si_Packet_Push( p_pid, p_pkt->p_buffer ); block_Release( p_pkt ); break; case TYPE_PSIP: - if( p_pid->u.p_psip->handle->p_decoder ) - dvbpsi_packet_push( p_pid->u.p_psip->handle, p_pkt->p_buffer ); + ts_psip_Packet_Push( p_pid, p_pkt->p_buffer ); block_Release( p_pkt ); break; @@ -2430,11 +2417,6 @@ static bool GatherPESData( demux_t *p_demux, ts_pid_t *pid, block_t *p_pkt, return i_ret; } -/**************************************************************************** - **************************************************************************** - ** libdvbpsi callbacks - **************************************************************************** - ****************************************************************************/ bool ProgramIsSelected( demux_sys_t *p_sys, uint16_t i_pgrm ) { for(int i=0; i<p_sys->programs.i_size; i++) diff --git a/modules/demux/mpeg/ts_psi.c b/modules/demux/mpeg/ts_psi.c index 95c3aa1..824db6d 100644 --- a/modules/demux/mpeg/ts_psi.c +++ b/modules/demux/mpeg/ts_psi.c @@ -1836,3 +1836,11 @@ bool ts_psi_PAT_Attach( ts_pid_t *patpid, void *cbdata ) return false; return dvbpsi_pat_attach( patpid->u.p_pat->handle, PATCallBack, cbdata ); } + +void ts_psi_Packet_Push( ts_pid_t *p_pid, const uint8_t *p_pktbuffer ) +{ + if( p_pid->type == TYPE_PAT ) + dvbpsi_packet_push( p_pid->u.p_pat->handle, (uint8_t *) p_pktbuffer ); + else if( p_pid->type == TYPE_PMT ) + dvbpsi_packet_push( p_pid->u.p_pmt->handle, (uint8_t *) p_pktbuffer ); +} diff --git a/modules/demux/mpeg/ts_psi.h b/modules/demux/mpeg/ts_psi.h index 62c1286..fe2bbe5 100644 --- a/modules/demux/mpeg/ts_psi.h +++ b/modules/demux/mpeg/ts_psi.h @@ -30,6 +30,7 @@ typedef enum } ts_pmt_registration_type_t; bool ts_psi_PAT_Attach( ts_pid_t *, void * ); +void ts_psi_Packet_Push( ts_pid_t *, const uint8_t * ); int UserPmt( demux_t *p_demux, const char * ); diff --git a/modules/demux/mpeg/ts_psi_eit.c b/modules/demux/mpeg/ts_psi_eit.c index 674944a..a807512 100644 --- a/modules/demux/mpeg/ts_psi_eit.c +++ b/modules/demux/mpeg/ts_psi_eit.c @@ -65,6 +65,13 @@ static void SINewTableCallBack( dvbpsi_t *h, uint8_t i_table_id, uint16_t i_extension, void *p_pid_cbdata ); +void ts_si_Packet_Push( ts_pid_t *p_pid, const uint8_t *p_pktbuffer ) +{ + if( likely(p_pid->type == TYPE_SI) && + dvbpsi_decoder_present( p_pid->u.p_si->handle ) ) + dvbpsi_packet_push( p_pid->u.p_si->handle, (uint8_t *) p_pktbuffer ); +} + static char *EITConvertToUTF8( demux_t *p_demux, const unsigned char *psz_instring, size_t i_length, diff --git a/modules/demux/mpeg/ts_psi_eit.h b/modules/demux/mpeg/ts_psi_eit.h index 46ad956..204deb1 100644 --- a/modules/demux/mpeg/ts_psi_eit.h +++ b/modules/demux/mpeg/ts_psi_eit.h @@ -19,6 +19,8 @@ #ifndef VLC_TS_PSI_EIT_H #define VLC_TS_PSI_EIT_H +#include "ts_pid_fwd.h" + //#define PSI_DEBUG_EIT #define TS_SI_SDT_PID 0x11 @@ -35,6 +37,8 @@ #define TS_SI_RUNSTATUS_RUNNING 0x04 #define TS_SI_RUNSTATUS_OFF_AIR 0x05 +void ts_si_Packet_Push( ts_pid_t *, const uint8_t * ); + bool ts_attach_SI_Tables_Decoders( dvbpsi_t *p_handle, void * ); #endif diff --git a/modules/demux/mpeg/ts_psip.c b/modules/demux/mpeg/ts_psip.c index 9c32b3e..36bc4f9c 100644 --- a/modules/demux/mpeg/ts_psip.c +++ b/modules/demux/mpeg/ts_psip.c @@ -73,6 +73,12 @@ struct ts_psip_context_t DECL_ARRAY(dvbpsi_atsc_eit_t *) eits; /* For EIT pid, used on new ETT update */ }; +void ts_psip_Packet_Push( ts_pid_t *p_pid, const uint8_t *p_pktbuffer ) +{ + if( p_pid->u.p_psip->handle->p_decoder && likely(p_pid->type == TYPE_PSIP) ) + dvbpsi_packet_push( p_pid->u.p_psip->handle, (uint8_t *) p_pktbuffer ); +} + ts_psip_context_t * ts_psip_context_New() { ts_psip_context_t *p_ctx = malloc(sizeof(*p_ctx)); diff --git a/modules/demux/mpeg/ts_psip.h b/modules/demux/mpeg/ts_psip.h index 2676a01..e01b9c7 100644 --- a/modules/demux/mpeg/ts_psip.h +++ b/modules/demux/mpeg/ts_psip.h @@ -19,6 +19,8 @@ #ifndef VLC_ATSC_PSIP_H #define VLC_ATSC_PSIP_H +#include "ts_pid_fwd.h" + #ifndef _DVBPSI_DVBPSI_H_ #include <dvbpsi/dvbpsi.h> #endif @@ -56,6 +58,8 @@ typedef struct ts_psip_context_t ts_psip_context_t; +void ts_psip_Packet_Push( ts_pid_t *, const uint8_t * ); + ts_psip_context_t * ts_psip_context_New( void ); void ts_psip_context_Delete( ts_psip_context_t * ); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
