[vlc-commits] access_dvb/dtv: support for libdvbpsi >= 1.0.0
Jean-Paul Saman
git at videolan.org
Fri May 17 11:20:45 CEST 2013
vlc | branch: master | Jean-Paul Saman <jpsaman at videolan.org> | Tue Apr 23 13:55:19 2013 +0200| [dfcfb98d7878db2649cbd5137325116e6b77f8a0] | committer: Jean-Paul Saman
access_dvb/dtv: support for libdvbpsi >= 1.0.0
Allow compiling against libdvbpsi 1.0.0 or greater.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=dfcfb98d7878db2649cbd5137325116e6b77f8a0
---
modules/access/Modules.am | 3 +-
modules/access/dtv/en50221.c | 2 +
modules/access/dvb/scan.c | 92 ++++++++++++++++++++++++++++++++++++++----
3 files changed, 89 insertions(+), 8 deletions(-)
diff --git a/modules/access/Modules.am b/modules/access/Modules.am
index 8a571e7..a96e33c 100644
--- a/modules/access/Modules.am
+++ b/modules/access/Modules.am
@@ -245,7 +245,7 @@ if HAVE_LINUX_DVB
libdtv_plugin_la_SOURCES += dtv/linux.c
libdtv_plugin_la_CFLAGS += -DHAVE_LINUX_DVB
if HAVE_DVBPSI
-libdtv_plugin_la_SOURCES += dtv/en50221.c dtv/en50221.h
+libdtv_plugin_la_SOURCES += dtv/en50221.c dtv/en50221.h ../mux/mpeg/dvbpsi_compat.h
libdtv_plugin_la_CFLAGS += -DHAVE_DVBPSI $(DVBPSI_CFLAGS)
libdtv_plugin_la_LIBADD += $(DVBPSI_LIBS)
endif
@@ -276,6 +276,7 @@ libdvb_plugin_la_CFLAGS = $(AM_CFLAGS)
libdvb_plugin_la_LIBADD = $(AM_LIBADD)
if HAVE_LINUX_DVB
if HAVE_DVBPSI
+libdvb_plugin_la_SOURCES += ../mux/mpeg/dvbpsi_compat.h
libvlc_LTLIBRARIES += libdvb_plugin.la
libdvb_plugin_la_CFLAGS += $(DVBPSI_CFLAGS)
libdvb_plugin_la_LIBADD += $(DVBPSI_LIBS)
diff --git a/modules/access/dtv/en50221.c b/modules/access/dtv/en50221.c
index 5bc780a..659dd17 100644
--- a/modules/access/dtv/en50221.c
+++ b/modules/access/dtv/en50221.c
@@ -58,6 +58,8 @@
#include "../demux/dvb-text.h"
#include "dtv/en50221.h"
+#include "../mux/mpeg/dvbpsi_compat.h"
+
typedef struct en50221_session_t
{
unsigned i_slot;
diff --git a/modules/access/dvb/scan.c b/modules/access/dvb/scan.c
index d4d7d1e..0a26d97 100644
--- a/modules/access/dvb/scan.c
+++ b/modules/access/dvb/scan.c
@@ -55,6 +55,7 @@
#include "dvb.h"
#include "scan.h"
#include "../../demux/dvb-text.h"
+#include "../../mux/mpeg/dvbpsi_compat.h"
typedef enum
{
@@ -750,7 +751,12 @@ static void SDTCallBack( scan_session_t *p_session, dvbpsi_sdt_t *p_sdt )
/* */
msg_Dbg( p_obj, "new SDT ts_id=%d version=%d current_next=%d network_id=%d",
- p_sdt->i_ts_id, p_sdt->i_version, p_sdt->b_current_next,
+#if (DVBPSI_VERSION_INT >= DVBPSI_VERSION_WANTED(1,0,0))
+ p_sdt->i_extension,
+#else
+ p_sdt->i_ts_id,
+#endif
+ p_sdt->i_version, p_sdt->b_current_next,
p_sdt->i_network_id );
@@ -930,15 +936,33 @@ static void NITCallBack( scan_session_t *p_session, dvbpsi_nit_t *p_nit )
}
#endif
+#if (DVBPSI_VERSION_INT >= DVBPSI_VERSION_WANTED(1,0,0))
+static void PSINewTableCallBack( dvbpsi_t *h, uint8_t i_table_id, uint16_t i_extension, void *p_data )
+{
+ scan_session_t *p_session = (scan_session_t *)p_data;
+
+ if( i_table_id == 0x42 )
+ {
+ if( !dvbpsi_sdt_attach( h, i_table_id, i_extension, (dvbpsi_sdt_callback)SDTCallBack, p_session ) )
+ msg_Err( p_session->p_obj, "PSINewTableCallback: failed attaching SDTCallback" );
+ }
+ else if( i_table_id == 0x40 || i_table_id == 0x41 )
+ {
+ if( !dvbpsi_nit_attach( h, i_table_id, i_extension, (dvbpsi_nit_callback)NITCallBack, p_session ) )
+ msg_Err( p_session->p_obj, "PSINewTableCallback: failed attaching NITCallback" );
+ }
+}
+#else
static void PSINewTableCallBack( scan_session_t *p_session, dvbpsi_handle h, uint8_t i_table_id, uint16_t i_extension )
{
if( i_table_id == 0x42 )
dvbpsi_AttachSDT( h, i_table_id, i_extension, (dvbpsi_sdt_callback)SDTCallBack, p_session );
-#ifdef DVBPSI_USE_NIT
+# ifdef DVBPSI_USE_NIT
else if( i_table_id == 0x40 || i_table_id == 0x41 )
dvbpsi_AttachNIT( h, i_table_id, i_extension, (dvbpsi_nit_callback)NITCallBack, p_session );
-#endif
+# endif
}
+#endif
scan_session_t *scan_session_New( vlc_object_t *p_obj,
const scan_configuration_t *p_cfg )
@@ -1074,7 +1098,6 @@ void scan_session_Destroy( scan_t *p_scan, scan_session_t *p_session )
#endif
}
-
/* */
if( p_session->pat )
dvbpsi_DetachPAT( p_session->pat );
@@ -1085,6 +1108,7 @@ void scan_session_Destroy( scan_t *p_scan, scan_session_t *p_session )
dvbpsi_DetachDemux( p_session->sdt );
if( p_session->p_sdt )
dvbpsi_DeleteSDT( p_session->p_sdt );
+
#ifdef DVBPSI_USE_NIT
if( p_session->nit )
dvbpsi_DetachDemux( p_session->nit );
@@ -1207,15 +1231,52 @@ bool scan_session_Push( scan_session_t *p_scan, block_t *p_block )
if( i_pid == 0x00 )
{
if( !p_scan->pat )
+#if (DVBPSI_VERSION_INT >= DVBPSI_VERSION_WANTED(1,0,0))
+ {
+ p_scan->pat = dvbpsi_new( &dvbpsi_messages, DVBPSI_MSG_DEBUG );
+ if( !p_scan->pat )
+ {
+ block_Release( p_block );
+ return false;
+ }
+ p_scan->pat->p_sys = (void *) VLC_OBJECT(p_scan->p_obj);
+ if( !dvbpsi_pat_attach( p_scan->pat, (dvbpsi_pat_callback)PATCallBack, p_scan ) )
+ {
+ dvbpsi_delete( p_scan->pat );
+ p_scan->pat = NULL;
+ block_Release( p_block );
+ return false;
+ }
+ }
+#else
p_scan->pat = dvbpsi_AttachPAT( (dvbpsi_pat_callback)PATCallBack, p_scan );
-
+#endif
if( p_scan->pat )
dvbpsi_PushPacket( p_scan->pat, p_block->p_buffer );
}
else if( i_pid == 0x11 )
{
if( !p_scan->sdt )
+#if (DVBPSI_VERSION_INT >= DVBPSI_VERSION_WANTED(1,0,0))
+ {
+ p_scan->sdt = dvbpsi_new( &dvbpsi_messages, DVBPSI_MSG_DEBUG );
+ if( !p_scan->sdt )
+ {
+ block_Release( p_block );
+ return false;
+ }
+ p_scan->sdt->p_sys = (void *) VLC_OBJECT(p_scan->p_obj);
+ if( !dvbpsi_AttachDemux( p_scan->sdt, (dvbpsi_demux_new_cb_t)PSINewTableCallBack, p_scan ) )
+ {
+ dvbpsi_delete( p_scan->sdt );
+ p_scan->sdt = NULL;
+ block_Release( p_block );
+ return false;
+ }
+ }
+#else
p_scan->sdt = dvbpsi_AttachDemux( (dvbpsi_demux_new_cb_t)PSINewTableCallBack, p_scan );
+#endif
if( p_scan->sdt )
dvbpsi_PushPacket( p_scan->sdt, p_block->p_buffer );
@@ -1224,8 +1285,26 @@ bool scan_session_Push( scan_session_t *p_scan, block_t *p_block )
{
#ifdef DVBPSI_USE_NIT
if( !p_scan->nit )
+# if (DVBPSI_VERSION_INT >= DVBPSI_VERSION_WANTED(1,0,0))
+ {
+ p_scan->nit = dvbpsi_new( &dvbpsi_messages, DVBPSI_MSG_DEBUG );
+ if( !p_scan->nit )
+ {
+ block_Release( p_block );
+ return false;
+ }
+ p_scan->nit->p_sys = (void *) VLC_OBJECT(p_scan->p_obj);
+ if( !dvbpsi_AttachDemux( p_scan->nit, (dvbpsi_demux_new_cb_t)PSINewTableCallBack, p_scan ) )
+ {
+ dvbpsi_delete( p_scan->nit );
+ p_scan->nit = NULL;
+ block_Release( p_block );
+ return false;
+ }
+ }
+# else
p_scan->nit = dvbpsi_AttachDemux( (dvbpsi_demux_new_cb_t)PSINewTableCallBack, p_scan );
-
+# endif
if( p_scan->nit )
dvbpsi_PushPacket( p_scan->nit, p_block->p_buffer );
#endif
@@ -1245,4 +1324,3 @@ void scan_service_SetSNR( scan_session_t *p_session, int i_snr )
{
p_session->i_snr = i_snr;
}
-
More information about the vlc-commits
mailing list