Commit dfcfb98d authored by Jean-Paul Saman's avatar Jean-Paul Saman

access_dvb/dtv: support for libdvbpsi >= 1.0.0

Allow compiling against libdvbpsi 1.0.0 or greater.
parent 4b2446d4
...@@ -245,7 +245,7 @@ if HAVE_LINUX_DVB ...@@ -245,7 +245,7 @@ if HAVE_LINUX_DVB
libdtv_plugin_la_SOURCES += dtv/linux.c libdtv_plugin_la_SOURCES += dtv/linux.c
libdtv_plugin_la_CFLAGS += -DHAVE_LINUX_DVB libdtv_plugin_la_CFLAGS += -DHAVE_LINUX_DVB
if HAVE_DVBPSI 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_CFLAGS += -DHAVE_DVBPSI $(DVBPSI_CFLAGS)
libdtv_plugin_la_LIBADD += $(DVBPSI_LIBS) libdtv_plugin_la_LIBADD += $(DVBPSI_LIBS)
endif endif
...@@ -276,6 +276,7 @@ libdvb_plugin_la_CFLAGS = $(AM_CFLAGS) ...@@ -276,6 +276,7 @@ libdvb_plugin_la_CFLAGS = $(AM_CFLAGS)
libdvb_plugin_la_LIBADD = $(AM_LIBADD) libdvb_plugin_la_LIBADD = $(AM_LIBADD)
if HAVE_LINUX_DVB if HAVE_LINUX_DVB
if HAVE_DVBPSI if HAVE_DVBPSI
libdvb_plugin_la_SOURCES += ../mux/mpeg/dvbpsi_compat.h
libvlc_LTLIBRARIES += libdvb_plugin.la libvlc_LTLIBRARIES += libdvb_plugin.la
libdvb_plugin_la_CFLAGS += $(DVBPSI_CFLAGS) libdvb_plugin_la_CFLAGS += $(DVBPSI_CFLAGS)
libdvb_plugin_la_LIBADD += $(DVBPSI_LIBS) libdvb_plugin_la_LIBADD += $(DVBPSI_LIBS)
......
...@@ -58,6 +58,8 @@ ...@@ -58,6 +58,8 @@
#include "../demux/dvb-text.h" #include "../demux/dvb-text.h"
#include "dtv/en50221.h" #include "dtv/en50221.h"
#include "../mux/mpeg/dvbpsi_compat.h"
typedef struct en50221_session_t typedef struct en50221_session_t
{ {
unsigned i_slot; unsigned i_slot;
......
...@@ -55,6 +55,7 @@ ...@@ -55,6 +55,7 @@
#include "dvb.h" #include "dvb.h"
#include "scan.h" #include "scan.h"
#include "../../demux/dvb-text.h" #include "../../demux/dvb-text.h"
#include "../../mux/mpeg/dvbpsi_compat.h"
typedef enum typedef enum
{ {
...@@ -750,7 +751,12 @@ static void SDTCallBack( scan_session_t *p_session, dvbpsi_sdt_t *p_sdt ) ...@@ -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", 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 ); p_sdt->i_network_id );
...@@ -930,15 +936,33 @@ static void NITCallBack( scan_session_t *p_session, dvbpsi_nit_t *p_nit ) ...@@ -930,15 +936,33 @@ static void NITCallBack( scan_session_t *p_session, dvbpsi_nit_t *p_nit )
} }
#endif #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 ) 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 ) if( i_table_id == 0x42 )
dvbpsi_AttachSDT( h, i_table_id, i_extension, (dvbpsi_sdt_callback)SDTCallBack, p_session ); 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 ) else if( i_table_id == 0x40 || i_table_id == 0x41 )
dvbpsi_AttachNIT( h, i_table_id, i_extension, (dvbpsi_nit_callback)NITCallBack, p_session ); 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, scan_session_t *scan_session_New( vlc_object_t *p_obj,
const scan_configuration_t *p_cfg ) const scan_configuration_t *p_cfg )
...@@ -1074,7 +1098,6 @@ void scan_session_Destroy( scan_t *p_scan, scan_session_t *p_session ) ...@@ -1074,7 +1098,6 @@ void scan_session_Destroy( scan_t *p_scan, scan_session_t *p_session )
#endif #endif
} }
/* */ /* */
if( p_session->pat ) if( p_session->pat )
dvbpsi_DetachPAT( 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 ) ...@@ -1085,6 +1108,7 @@ void scan_session_Destroy( scan_t *p_scan, scan_session_t *p_session )
dvbpsi_DetachDemux( p_session->sdt ); dvbpsi_DetachDemux( p_session->sdt );
if( p_session->p_sdt ) if( p_session->p_sdt )
dvbpsi_DeleteSDT( p_session->p_sdt ); dvbpsi_DeleteSDT( p_session->p_sdt );
#ifdef DVBPSI_USE_NIT #ifdef DVBPSI_USE_NIT
if( p_session->nit ) if( p_session->nit )
dvbpsi_DetachDemux( 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 ) ...@@ -1207,15 +1231,52 @@ bool scan_session_Push( scan_session_t *p_scan, block_t *p_block )
if( i_pid == 0x00 ) if( i_pid == 0x00 )
{ {
if( !p_scan->pat ) 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 ); p_scan->pat = dvbpsi_AttachPAT( (dvbpsi_pat_callback)PATCallBack, p_scan );
#endif
if( p_scan->pat ) if( p_scan->pat )
dvbpsi_PushPacket( p_scan->pat, p_block->p_buffer ); dvbpsi_PushPacket( p_scan->pat, p_block->p_buffer );
} }
else if( i_pid == 0x11 ) else if( i_pid == 0x11 )
{ {
if( !p_scan->sdt ) 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 ); p_scan->sdt = dvbpsi_AttachDemux( (dvbpsi_demux_new_cb_t)PSINewTableCallBack, p_scan );
#endif
if( p_scan->sdt ) if( p_scan->sdt )
dvbpsi_PushPacket( p_scan->sdt, p_block->p_buffer ); 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 ) ...@@ -1224,8 +1285,26 @@ bool scan_session_Push( scan_session_t *p_scan, block_t *p_block )
{ {
#ifdef DVBPSI_USE_NIT #ifdef DVBPSI_USE_NIT
if( !p_scan->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 ); p_scan->nit = dvbpsi_AttachDemux( (dvbpsi_demux_new_cb_t)PSINewTableCallBack, p_scan );
# endif
if( p_scan->nit ) if( p_scan->nit )
dvbpsi_PushPacket( p_scan->nit, p_block->p_buffer ); dvbpsi_PushPacket( p_scan->nit, p_block->p_buffer );
#endif #endif
...@@ -1245,4 +1324,3 @@ void scan_service_SetSNR( scan_session_t *p_session, int i_snr ) ...@@ -1245,4 +1324,3 @@ void scan_service_SetSNR( scan_session_t *p_session, int i_snr )
{ {
p_session->i_snr = i_snr; p_session->i_snr = i_snr;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment