Commit e3a434cf authored by Laurent Aimar's avatar Laurent Aimar

* all: better support for MBR mms stream (display only received streams).

parent 236ca7ae
...@@ -56,6 +56,7 @@ enum access_query_e ...@@ -56,6 +56,7 @@ enum access_query_e
* XXX: avoid to use it unless you can't */ * XXX: avoid to use it unless you can't */
ACCESS_SET_PRIVATE_ID_STATE, /* arg1= int i_private_data, vlc_bool_t b_selected can fail */ ACCESS_SET_PRIVATE_ID_STATE, /* arg1= int i_private_data, vlc_bool_t b_selected can fail */
ACCESS_SET_PRIVATE_ID_CA, /* arg1= int i_program_number, uint16_t i_vpid, uint16_t i_apid1, uint16_t i_apid2, uint16_t i_apid3, uint8_t i_length, uint8_t *p_data */ ACCESS_SET_PRIVATE_ID_CA, /* arg1= int i_program_number, uint16_t i_vpid, uint16_t i_apid1, uint16_t i_apid2, uint16_t i_apid3, uint8_t i_length, uint8_t *p_data */
ACCESS_GET_PRIVATE_ID_STATE, /* arg1=int i_private_data arg2=vlc_bool_t * res=can fail */
}; };
struct access_t struct access_t
......
...@@ -167,6 +167,7 @@ static int Control( access_t *p_access, int i_query, va_list args ) ...@@ -167,6 +167,7 @@ static int Control( access_t *p_access, int i_query, va_list args )
vlc_bool_t *pb_bool; vlc_bool_t *pb_bool;
int *pi_int; int *pi_int;
int64_t *pi_64; int64_t *pi_64;
int i_int;
switch( i_query ) switch( i_query )
{ {
...@@ -193,6 +194,15 @@ static int Control( access_t *p_access, int i_query, va_list args ) ...@@ -193,6 +194,15 @@ static int Control( access_t *p_access, int i_query, va_list args )
*pi_64 = (int64_t)var_GetInteger( p_access, "mms-caching" ) * I64C(1000); *pi_64 = (int64_t)var_GetInteger( p_access, "mms-caching" ) * I64C(1000);
break; break;
case ACCESS_GET_PRIVATE_ID_STATE:
i_int = (int)va_arg( args, int );
pb_bool = (vlc_bool_t*)va_arg( args, vlc_bool_t );
if( i_int < 0 || i_int > 127 )
return VLC_EGENERIC;
*pb_bool = p_sys->asfh.stream[i_int].i_selected ? VLC_TRUE : VLC_FALSE;
break;
/* */ /* */
case ACCESS_SET_PAUSE_STATE: case ACCESS_SET_PAUSE_STATE:
case ACCESS_GET_TITLE_INFO: case ACCESS_GET_TITLE_INFO:
......
...@@ -249,6 +249,7 @@ static int Control( access_t *p_access, int i_query, va_list args ) ...@@ -249,6 +249,7 @@ static int Control( access_t *p_access, int i_query, va_list args )
vlc_bool_t *pb_bool; vlc_bool_t *pb_bool;
int *pi_int; int *pi_int;
int64_t *pi_64; int64_t *pi_64;
int i_int;
vlc_value_t val; vlc_value_t val;
switch( i_query ) switch( i_query )
...@@ -277,6 +278,15 @@ static int Control( access_t *p_access, int i_query, va_list args ) ...@@ -277,6 +278,15 @@ static int Control( access_t *p_access, int i_query, va_list args )
*pi_64 = (int64_t)var_GetInteger( p_access, "mms-caching" ) * I64C(1000); *pi_64 = (int64_t)var_GetInteger( p_access, "mms-caching" ) * I64C(1000);
break; break;
case ACCESS_GET_PRIVATE_ID_STATE:
i_int = (int)va_arg( args, int );
pb_bool = (vlc_bool_t*)va_arg( args, vlc_bool_t );
if( i_int < 0 || i_int > 127 )
return VLC_EGENERIC;
*pb_bool = p_sys->asfh.stream[i_int].i_selected ? VLC_TRUE : VLC_FALSE;
break;
/* */ /* */
case ACCESS_SET_PAUSE_STATE: case ACCESS_SET_PAUSE_STATE:
case ACCESS_GET_TITLE_INFO: case ACCESS_GET_TITLE_INFO:
...@@ -285,6 +295,7 @@ static int Control( access_t *p_access, int i_query, va_list args ) ...@@ -285,6 +295,7 @@ static int Control( access_t *p_access, int i_query, va_list args )
case ACCESS_SET_PRIVATE_ID_STATE: case ACCESS_SET_PRIVATE_ID_STATE:
return VLC_EGENERIC; return VLC_EGENERIC;
default: default:
msg_Warn( p_access, "unimplemented query in control" ); msg_Warn( p_access, "unimplemented query in control" );
return VLC_EGENERIC; return VLC_EGENERIC;
......
...@@ -637,6 +637,7 @@ static int DemuxInit( demux_t *p_demux ) ...@@ -637,6 +637,7 @@ static int DemuxInit( demux_t *p_demux )
{ {
asf_track_t *tk; asf_track_t *tk;
asf_object_stream_properties_t *p_sp; asf_object_stream_properties_t *p_sp;
vlc_bool_t b_access_selected;
p_sp = ASF_FindObject( p_sys->p_root->p_hdr, p_sp = ASF_FindObject( p_sys->p_root->p_hdr,
&asf_object_stream_properties_guid, &asf_object_stream_properties_guid,
...@@ -650,6 +651,17 @@ static int DemuxInit( demux_t *p_demux ) ...@@ -650,6 +651,17 @@ static int DemuxInit( demux_t *p_demux )
tk->p_es = NULL; tk->p_es = NULL;
tk->p_frame = NULL; tk->p_frame = NULL;
/* Check (in case of mms) if this track is selected (ie will receive data) */
if( !stream_Control( p_demux->s, STREAM_CONTROL_ACCESS, ACCESS_GET_PRIVATE_ID_STATE,
p_sp->i_stream_number, &b_access_selected ) &&
!b_access_selected )
{
tk->i_cat = UNKNOWN_ES;
msg_Dbg( p_demux, "ignoring not selected stream(ID:%d) (by access)",
p_sp->i_stream_number );
continue;
}
if( ASF_CmpGUID( &p_sp->i_stream_type, &asf_object_stream_type_audio ) && if( ASF_CmpGUID( &p_sp->i_stream_type, &asf_object_stream_type_audio ) &&
p_sp->i_type_specific_data_length >= sizeof( WAVEFORMATEX ) - 2 ) p_sp->i_type_specific_data_length >= sizeof( WAVEFORMATEX ) - 2 )
{ {
......
...@@ -503,8 +503,9 @@ static int AStreamControl( stream_t *s, int i_query, va_list args ) ...@@ -503,8 +503,9 @@ static int AStreamControl( stream_t *s, int i_query, va_list args )
case STREAM_CONTROL_ACCESS: case STREAM_CONTROL_ACCESS:
i_int = (int) va_arg( args, int ); i_int = (int) va_arg( args, int );
if( i_int != ACCESS_SET_PRIVATE_ID_STATE if( i_int != ACCESS_SET_PRIVATE_ID_STATE &&
&& i_int != ACCESS_SET_PRIVATE_ID_CA ) i_int != ACCESS_SET_PRIVATE_ID_CA &&
i_int != ACCESS_GET_PRIVATE_ID_STATE )
{ {
msg_Err( s, "Hey, what are you thinking ?" msg_Err( s, "Hey, what are you thinking ?"
"DON'T USE STREAM_CONTROL_ACCESS !!!" ); "DON'T USE STREAM_CONTROL_ACCESS !!!" );
......
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