RTSP_CMD_TYPE_SEEK,
RTSP_CMD_TYPE_REWIND,
RTSP_CMD_TYPE_FORWARD,
+
+ RTSP_CMD_TYPE_ADD,
+ RTSP_CMD_TYPE_DEL,
} rtsp_cmd_type_t;
/* */
{
int i_type;
int i_media_id;
- //vod_media_t *p_media;
+ vod_media_t *p_media;
char *psz_session;
char *psz_arg;
double f_arg;
static vod_media_t *MediaNew( vod_t *, const char *, input_item_t * );
static void MediaDel( vod_t *, vod_media_t * );
+ static void MediaAskDel ( vod_t *, vod_media_t * );
static int MediaAddES( vod_t *, vod_media_t *, es_format_t * );
static void MediaDelES( vod_t *, vod_media_t *, es_format_t * );
p_sys->i_media_id = 0;
p_vod->pf_media_new = MediaNew;
- p_vod->pf_media_del = MediaDel;
+ p_vod->pf_media_del = MediaAskDel;
p_vod->pf_media_add_es = MediaAddES;
p_vod->pf_media_del_es = MediaDelES;
p_block_cmd = block_FifoGet( p_sys->p_fifo_cmd );
memcpy( &cmd, p_block_cmd->p_buffer, sizeof(cmd) );
block_Release( p_block_cmd );
+ if ( cmd.i_type == RTSP_CMD_TYPE_DEL )
+ MediaDel(p_vod, cmd.p_media);
free( cmd.psz_session );
free( cmd.psz_arg );
}
p_media->p_vod = p_vod;
- vlc_mutex_lock( &p_sys->lock_media );
- TAB_APPEND( p_sys->i_media, p_sys->media, p_media );
- vlc_mutex_unlock( &p_sys->lock_media );
-
vlc_mutex_init( &p_media->lock );
p_media->psz_session_name = strdup("");
p_media->psz_session_description = strdup("");
}
vlc_mutex_unlock( &p_item->lock );
+ CommandPush( p_vod, RTSP_CMD_TYPE_ADD, p_media, NULL, 0.0, NULL );
return p_media;
}
+ static void MediaAskDel ( vod_t *p_vod, vod_media_t *p_media )
+ {
+ CommandPush( p_vod, RTSP_CMD_TYPE_DEL, p_media, NULL, 0.0, NULL );
+ }
+
static void MediaDel( vod_t *p_vod, vod_media_t *p_media )
{
vod_sys_t *p_sys = p_vod->p_sys;
switch( p_fmt->i_codec )
{
- case VLC_FOURCC( 's', '1', '6', 'b' ):
+ case VLC_CODEC_S16B:
if( p_fmt->audio.i_channels == 1 && p_fmt->audio.i_rate == 44100 )
{
p_es->i_payload_type = 11;
p_fmt->audio.i_channels ) == -1 )
p_es->psz_rtpmap = NULL;
break;
- case VLC_FOURCC( 'u', '8', ' ', ' ' ):
+ case VLC_CODEC_U8:
p_es->i_payload_type = p_media->i_payload_type++;
if( asprintf( &p_es->psz_rtpmap, "L8/%d/%d", p_fmt->audio.i_rate,
p_fmt->audio.i_channels ) == -1 )
p_es->psz_rtpmap = NULL;
break;
- case VLC_FOURCC( 'm', 'p', 'g', 'a' ):
- case VLC_FOURCC( 'm', 'p', '3', ' ' ):
+ case VLC_CODEC_MPGA:
p_es->i_payload_type = 14;
p_es->psz_rtpmap = strdup( "MPA/90000" );
break;
- case VLC_FOURCC( 'm', 'p', 'g', 'v' ):
+ case VLC_CODEC_MPGV:
p_es->i_payload_type = 32;
p_es->psz_rtpmap = strdup( "MPV/90000" );
break;
- case VLC_FOURCC( 'a', '5', '2', ' ' ):
+ case VLC_CODEC_A52:
p_es->i_payload_type = p_media->i_payload_type++;
if( asprintf( &p_es->psz_rtpmap, "ac3/%d", p_fmt->audio.i_rate ) == -1 )
p_es->psz_rtpmap = NULL;
break;
- case VLC_FOURCC( 'H', '2', '6', '3' ):
+ case VLC_CODEC_H263:
p_es->i_payload_type = p_media->i_payload_type++;
p_es->psz_rtpmap = strdup( "H263-1998/90000" );
break;
- case VLC_FOURCC( 'h', '2', '6', '4' ):
+ case VLC_CODEC_H264:
p_es->i_payload_type = p_media->i_payload_type++;
p_es->psz_rtpmap = strdup( "H264/90000" );
p_es->psz_fmtp = NULL;
if( !p_es->psz_fmtp )
p_es->psz_fmtp = strdup( "packetization-mode=1" );
break;
- case VLC_FOURCC( 'm', 'p', '4', 'v' ):
+ case VLC_CODEC_MP4V:
p_es->i_payload_type = p_media->i_payload_type++;
p_es->psz_rtpmap = strdup( "MP4V-ES/90000" );
if( p_fmt->i_extra > 0 )
free( p_hexa );
}
break;
- case VLC_FOURCC( 'm', 'p', '4', 'a' ):
+ case VLC_CODEC_MP4A:
p_es->i_payload_type = p_media->i_payload_type++;
if( asprintf( &p_es->psz_rtpmap, "mpeg4-generic/%d", p_fmt->audio.i_rate ) == -1 )
p_es->psz_rtpmap = NULL;
p_es->i_payload_type = p_media->i_payload_type++;
p_es->psz_rtpmap = strdup( "MP2P/90000" );
break;
- case VLC_FOURCC( 's', 'a', 'm', 'r' ):
+ case VLC_CODEC_AMR_NB:
p_es->i_payload_type = p_media->i_payload_type++;
p_es->psz_rtpmap = strdup( p_fmt->audio.i_channels == 2 ?
"AMR/8000/2" : "AMR/8000" );
p_es->psz_fmtp = strdup( "octet-align=1" );
break;
- case VLC_FOURCC( 's', 'a', 'w', 'b' ):
+ case VLC_CODEC_AMR_WB:
p_es->i_payload_type = p_media->i_payload_type++;
p_es->psz_rtpmap = strdup( p_fmt->audio.i_channels == 2 ?
"AMR-WB/16000/2" : "AMR-WB/16000" );
memset( &cmd, 0, sizeof(cmd) );
cmd.i_type = i_type;
+ cmd.p_media = p_media;
if( p_media )
cmd.i_media_id = p_media->id;
if( psz_session )
if( cmd.i_type == RTSP_CMD_TYPE_NONE )
break;
+ if ( cmd.i_type == RTSP_CMD_TYPE_ADD )
+ {
+ vlc_mutex_lock( &p_sys->lock_media );
+ TAB_APPEND( p_sys->i_media, p_sys->media, cmd.p_media );
+ vlc_mutex_unlock( &p_sys->lock_media );
+ goto next;
+ }
+
+ if ( cmd.i_type == RTSP_CMD_TYPE_DEL )
+ {
+ MediaDel(p_vod, cmd.p_media);
+ goto next;
+ }
+
/* */
vlc_mutex_lock( &p_sys->lock_media );
for( i = 0; i < p_sys->i_media; i++ )
break;
}
if( i >= p_sys->i_media )
+ {
+ vlc_mutex_unlock( &p_sys->lock_media );
goto next;
+ }
p_media = p_sys->media[i];
switch( cmd.i_type )
default:
break;
}
+ vlc_mutex_unlock( &p_sys->lock_media );
next:
- vlc_mutex_unlock( &p_sys->lock_media );
free( cmd.psz_session );
free( cmd.psz_arg );
}