Commit f5009d6f authored by Clément Stenac's avatar Clément Stenac

Recommit 9469->9479 + fix wxT/wxU

parent d8e40e92
...@@ -67,6 +67,10 @@ static void Close( vlc_object_t * ); ...@@ -67,6 +67,10 @@ static void Close( vlc_object_t * );
#define RECONNECT_LONGTEXT N_("Will automatically attempt a re-connection " \ #define RECONNECT_LONGTEXT N_("Will automatically attempt a re-connection " \
"in case it was untimely closed.") "in case it was untimely closed.")
#define CONTINUOUS_TEXT N_("Continuous stream")
#define CONTINUOUS_LONGTEXT N_("Enable this option to read a file that is " \
"being constantly updated (for example, a JPG file on a server)")
vlc_module_begin(); vlc_module_begin();
set_description( _("HTTP input") ); set_description( _("HTTP input") );
set_capability( "access2", 0 ); set_capability( "access2", 0 );
...@@ -81,10 +85,13 @@ vlc_module_begin(); ...@@ -81,10 +85,13 @@ vlc_module_begin();
AGENT_LONGTEXT, VLC_FALSE ); AGENT_LONGTEXT, VLC_FALSE );
add_bool( "http-reconnect", 0, NULL, RECONNECT_TEXT, add_bool( "http-reconnect", 0, NULL, RECONNECT_TEXT,
RECONNECT_LONGTEXT, VLC_TRUE ); RECONNECT_LONGTEXT, VLC_TRUE );
add_bool( "http-continuous", 0, NULL, CONTINUOUS_TEXT,
CONTINUOUS_LONGTEXT, VLC_TRUE );
add_shortcut( "http" ); add_shortcut( "http" );
add_shortcut( "http4" ); add_shortcut( "http4" );
add_shortcut( "http6" ); add_shortcut( "http6" );
add_shortcut( "unsv" );
set_callbacks( Open, Close ); set_callbacks( Open, Close );
vlc_module_end(); vlc_module_end();
...@@ -124,8 +131,11 @@ struct access_sys_t ...@@ -124,8 +131,11 @@ struct access_sys_t
char *psz_icy_genre; char *psz_icy_genre;
char *psz_icy_title; char *psz_icy_title;
int i_remaining;
vlc_bool_t b_seekable; vlc_bool_t b_seekable;
vlc_bool_t b_reconnect; vlc_bool_t b_reconnect;
vlc_bool_t b_continuous;
vlc_bool_t b_pace_control; vlc_bool_t b_pace_control;
}; };
...@@ -137,6 +147,7 @@ static int Control( access_t *, int, va_list ); ...@@ -137,6 +147,7 @@ static int Control( access_t *, int, va_list );
/* */ /* */
static void ParseURL( access_sys_t *, char *psz_url ); static void ParseURL( access_sys_t *, char *psz_url );
static int Connect( access_t *, int64_t ); static int Connect( access_t *, int64_t );
static int Request( access_t *p_access, int64_t i_tell );
/***************************************************************************** /*****************************************************************************
* Open: * Open:
...@@ -201,6 +212,7 @@ static int Open( vlc_object_t *p_this ) ...@@ -201,6 +212,7 @@ static int Open( vlc_object_t *p_this )
p_sys->psz_icy_name = NULL; p_sys->psz_icy_name = NULL;
p_sys->psz_icy_genre = NULL; p_sys->psz_icy_genre = NULL;
p_sys->psz_icy_title = NULL; p_sys->psz_icy_title = NULL;
p_sys->i_remaining = 0;
/* Parse URI */ /* Parse URI */
ParseURL( p_sys, p_access->psz_path ); ParseURL( p_sys, p_access->psz_path );
...@@ -269,6 +281,7 @@ static int Open( vlc_object_t *p_this ) ...@@ -269,6 +281,7 @@ static int Open( vlc_object_t *p_this )
} }
p_sys->b_reconnect = var_CreateGetBool( p_access, "http-reconnect" ); p_sys->b_reconnect = var_CreateGetBool( p_access, "http-reconnect" );
p_sys->b_continuous = var_CreateGetBool( p_access, "http-continuous" );
/* Connect */ /* Connect */
if( Connect( p_access, 0 ) ) if( Connect( p_access, 0 ) )
...@@ -420,6 +433,7 @@ static int Read( access_t *p_access, uint8_t *p_buffer, int i_len ) ...@@ -420,6 +433,7 @@ static int Read( access_t *p_access, uint8_t *p_buffer, int i_len )
return 0; return 0;
} }
} }
if( p_sys->b_chunked ) if( p_sys->b_chunked )
{ {
if( p_sys->i_chunk < 0 ) if( p_sys->i_chunk < 0 )
...@@ -454,6 +468,19 @@ static int Read( access_t *p_access, uint8_t *p_buffer, int i_len ) ...@@ -454,6 +468,19 @@ static int Read( access_t *p_access, uint8_t *p_buffer, int i_len )
} }
} }
if( p_sys->b_continuous && i_len > p_sys->i_remaining )
{
/* Only ask for the remaining length */
int i_new_len = p_sys->i_remaining;
if( i_new_len == 0 )
{
Request( p_access, 0 );
i_read = Read( p_access, p_buffer, i_len );
return i_read;
}
i_len = i_new_len;
}
if( p_sys->i_icy_meta > 0 && p_access->info.i_pos > 0 ) if( p_sys->i_icy_meta > 0 && p_access->info.i_pos > 0 )
{ {
int64_t i_next = p_sys->i_icy_meta - int64_t i_next = p_sys->i_icy_meta -
...@@ -472,6 +499,7 @@ static int Read( access_t *p_access, uint8_t *p_buffer, int i_len ) ...@@ -472,6 +499,7 @@ static int Read( access_t *p_access, uint8_t *p_buffer, int i_len )
} }
i_read = net_Read( p_access, p_sys->fd, NULL, p_buffer, i_len, VLC_FALSE ); i_read = net_Read( p_access, p_sys->fd, NULL, p_buffer, i_len, VLC_FALSE );
if( i_read > 0 ) if( i_read > 0 )
{ {
p_access->info.i_pos += i_read; p_access->info.i_pos += i_read;
...@@ -489,6 +517,13 @@ static int Read( access_t *p_access, uint8_t *p_buffer, int i_len ) ...@@ -489,6 +517,13 @@ static int Read( access_t *p_access, uint8_t *p_buffer, int i_len )
} }
else if( i_read == 0 ) else if( i_read == 0 )
{ {
if( p_sys->b_continuous )
{
Request( p_access, 0 );
p_sys->b_continuous = VLC_FALSE;
i_read = Read( p_access, p_buffer, i_len );
p_sys->b_continuous = VLC_TRUE;
}
if( p_sys->b_reconnect ) if( p_sys->b_reconnect )
{ {
msg_Dbg( p_access, "got disconnected, trying to reconnect" ); msg_Dbg( p_access, "got disconnected, trying to reconnect" );
...@@ -508,6 +543,11 @@ static int Read( access_t *p_access, uint8_t *p_buffer, int i_len ) ...@@ -508,6 +543,11 @@ static int Read( access_t *p_access, uint8_t *p_buffer, int i_len )
if( i_read == 0 ) p_access->info.b_eof = VLC_TRUE; if( i_read == 0 ) p_access->info.b_eof = VLC_TRUE;
} }
if( p_sys->b_continuous )
{
p_sys->i_remaining -= i_read;
}
return i_read; return i_read;
} }
...@@ -760,6 +800,14 @@ static int Connect( access_t *p_access, int64_t i_tell ) ...@@ -760,6 +800,14 @@ static int Connect( access_t *p_access, int64_t i_tell )
return VLC_EGENERIC; return VLC_EGENERIC;
} }
return Request( p_access,i_tell );
}
static int Request( access_t *p_access, int64_t i_tell )
{
access_sys_t *p_sys = p_access->p_sys;
char *psz;
if( p_sys->b_proxy ) if( p_sys->b_proxy )
{ {
if( p_sys->url.psz_path ) if( p_sys->url.psz_path )
...@@ -807,6 +855,7 @@ static int Connect( access_t *p_access, int64_t i_tell ) ...@@ -807,6 +855,7 @@ static int Connect( access_t *p_access, int64_t i_tell )
net_Printf( VLC_OBJECT(p_access), p_sys->fd, NULL, net_Printf( VLC_OBJECT(p_access), p_sys->fd, NULL,
"Range: bytes="I64Fd"-\r\n", i_tell ); "Range: bytes="I64Fd"-\r\n", i_tell );
} }
/* Authentification */ /* Authentification */
if( p_sys->psz_user && *p_sys->psz_user ) if( p_sys->psz_user && *p_sys->psz_user )
{ {
...@@ -827,7 +876,17 @@ static int Connect( access_t *p_access, int64_t i_tell ) ...@@ -827,7 +876,17 @@ static int Connect( access_t *p_access, int64_t i_tell )
net_Printf( VLC_OBJECT(p_access), p_sys->fd, NULL, "Icy-MetaData: 1\r\n" ); net_Printf( VLC_OBJECT(p_access), p_sys->fd, NULL, "Icy-MetaData: 1\r\n" );
net_Printf( VLC_OBJECT(p_access), p_sys->fd, NULL, "Connection: Close\r\n"); if( p_sys->b_continuous && p_sys->i_version == 1 )
{
net_Printf( VLC_OBJECT( p_access ), p_sys->fd, NULL,
"Connection: keep-alive\r\n" );
}
else
{
net_Printf( VLC_OBJECT(p_access), p_sys->fd, NULL,
"Connection: Close\r\n");
p_sys->b_continuous = VLC_FALSE;
}
if( net_Printf( VLC_OBJECT(p_access), p_sys->fd, NULL, "\r\n" ) < 0 ) if( net_Printf( VLC_OBJECT(p_access), p_sys->fd, NULL, "\r\n" ) < 0 )
{ {
...@@ -906,10 +965,19 @@ static int Connect( access_t *p_access, int64_t i_tell ) ...@@ -906,10 +965,19 @@ static int Connect( access_t *p_access, int64_t i_tell )
while( *p == ' ' ) p++; while( *p == ' ' ) p++;
if( !strcasecmp( psz, "Content-Length" ) ) if( !strcasecmp( psz, "Content-Length" ) )
{
if( p_sys->b_continuous )
{
p_access->info.i_size = -1;
msg_Dbg( p_access, "this frame size="I64Fd, atoll(p ) );
p_sys->i_remaining = atoll( p );
}
else
{ {
p_access->info.i_size = i_tell + atoll( p ); p_access->info.i_size = i_tell + atoll( p );
msg_Dbg( p_access, "stream size="I64Fd, p_access->info.i_size ); msg_Dbg( p_access, "stream size="I64Fd, p_access->info.i_size );
} }
}
else if( !strcasecmp( psz, "Location" ) ) else if( !strcasecmp( psz, "Location" ) )
{ {
if( p_sys->psz_location ) free( p_sys->psz_location ); if( p_sys->psz_location ) free( p_sys->psz_location );
...@@ -936,10 +1004,11 @@ static int Connect( access_t *p_access, int64_t i_tell ) ...@@ -936,10 +1004,11 @@ static int Connect( access_t *p_access, int64_t i_tell )
!strncasecmp( p, "Nanocaster", 10 ) ) !strncasecmp( p, "Nanocaster", 10 ) )
{ {
/* Remember if this is Icecast /* Remember if this is Icecast
* we need to force mp3 in some cases without breaking autodetection */ * we need to force mp3 in some cases without breaking
* autodetection */
/* Let live365 streams (nanocaster) piggyback on the icecast routine. /* Let live 65 streams (nanocaster) piggyback on the icecast
* They look very similar */ * routine. They look very similar */
p_sys->b_reconnect = VLC_TRUE; p_sys->b_reconnect = VLC_TRUE;
p_sys->b_pace_control = VLC_FALSE; p_sys->b_pace_control = VLC_FALSE;
......
...@@ -53,7 +53,7 @@ struct decoder_sys_t ...@@ -53,7 +53,7 @@ struct decoder_sys_t
static int OpenDecoder ( vlc_object_t * ); static int OpenDecoder ( vlc_object_t * );
static void CloseDecoder ( vlc_object_t * ); static void CloseDecoder ( vlc_object_t * );
static void DecodeBlock ( decoder_t *, block_t ** ); static subpicture_t *DecodeBlock ( decoder_t *, block_t ** );
static void ParseText ( decoder_t *, block_t * ); static void ParseText ( decoder_t *, block_t * );
...@@ -140,17 +140,32 @@ static int OpenDecoder( vlc_object_t *p_this ) ...@@ -140,17 +140,32 @@ static int OpenDecoder( vlc_object_t *p_this )
**************************************************************************** ****************************************************************************
* This function must be fed with complete subtitles units. * This function must be fed with complete subtitles units.
****************************************************************************/ ****************************************************************************/
static void DecodeBlock( decoder_t *p_dec, block_t **pp_block ) static subpicture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
{ {
subpicture_t *p_spu;
if( !pp_block || *pp_block == NULL ) if( !pp_block || *pp_block == NULL )
{ {
return; return NULL;
} }
ParseText( p_dec, *pp_block ); ParseText( p_dec, *pp_block );
block_Release( *pp_block ); block_Release( *pp_block );
*pp_block = NULL; *pp_block = NULL;
/* allocate an empty subpicture to return. the actual subpicture
* displaying is done in the DisplayAnchor function in intf.c (called from
* DisplayPendingAnchor, which in turn is called from the main RunIntf
* loop). */
p_spu = p_dec->pf_spu_buffer_new( p_dec );
if( !p_spu )
{
msg_Dbg( p_dec, "couldn't allocate new subpicture" );
return NULL;
}
return p_spu;
} }
/***************************************************************************** /*****************************************************************************
......
...@@ -53,7 +53,6 @@ ...@@ -53,7 +53,6 @@
#undef CMML_INTF_USE_TIMED_URIS #undef CMML_INTF_USE_TIMED_URIS
#undef CMML_INTF_DEBUG #undef CMML_INTF_DEBUG
#undef CMML_INTF_SUBPICTURE_DEBUG
#undef CMML_INTF_HISTORY_DEBUG #undef CMML_INTF_HISTORY_DEBUG
/***************************************************************************** /*****************************************************************************
...@@ -149,10 +148,11 @@ void E_(CloseIntf) ( vlc_object_t *p_this ) ...@@ -149,10 +148,11 @@ void E_(CloseIntf) ( vlc_object_t *p_this )
msg_Dbg( p_intf, "freeing CMML interface" ); msg_Dbg( p_intf, "freeing CMML interface" );
#endif #endif
/* Erase the anchor text description from the video output if it exists */ /* erase the anchor text description from the video output if it exists */
p_vout = vlc_object_find( p_intf, VLC_OBJECT_VOUT, FIND_ANYWHERE ); p_vout = vlc_object_find( p_intf, VLC_OBJECT_VOUT, FIND_ANYWHERE );
if( p_vout ) if( p_vout )
{ {
/* enable CMML as a subtitle track */
spu_Control( p_vout->p_spu, SPU_CHANNEL_CLEAR, DEFAULT_CHAN ); spu_Control( p_vout->p_spu, SPU_CHANNEL_CLEAR, DEFAULT_CHAN );
vlc_object_release( p_vout ); vlc_object_release( p_vout );
} }
...@@ -821,9 +821,8 @@ static int DisplayAnchor( intf_thread_t *p_intf, ...@@ -821,9 +821,8 @@ static int DisplayAnchor( intf_thread_t *p_intf,
if( psz_anchor_url ) if( psz_anchor_url )
{ {
/* Should display subtitle underlined and in blue, /* Should display subtitle underlined and in blue, but it looks
* but it looks like VLC doesn't implement any * like VLC doesn't implement any text styles yet. D'oh! */
* text styles yet. D'oh! */
p_style = &blue_with_underline; p_style = &blue_with_underline;
} }
...@@ -836,11 +835,6 @@ static int DisplayAnchor( intf_thread_t *p_intf, ...@@ -836,11 +835,6 @@ static int DisplayAnchor( intf_thread_t *p_intf,
i_margin_h, i_margin_v, i_now, 0 ) == VLC_SUCCESS ) i_margin_h, i_margin_v, i_now, 0 ) == VLC_SUCCESS )
{ {
/* Displayed successfully */ /* Displayed successfully */
#ifdef CMML_INTF_SUBPICTURE_DEBUG
msg_Dbg( p_intf, "subpicture created at (%d, %d) (%d, %d)",
p_subpicture->i_x, p_subpicture->i_y,
p_subpicture->i_width, p_subpicture->i_height );
#endif
} }
else else
{ {
......
...@@ -463,7 +463,7 @@ static aout_buffer_t *DecodePacket( decoder_t *p_dec, ogg_packet *p_oggpacket ) ...@@ -463,7 +463,7 @@ static aout_buffer_t *DecodePacket( decoder_t *p_dec, ogg_packet *p_oggpacket )
return NULL; return NULL;
} }
i_ret = speex_decode( p_sys->p_state, &p_sys->bits, i_ret = speex_decode_int( p_sys->p_state, &p_sys->bits,
(int16_t *)p_aout_buffer->p_buffer ); (int16_t *)p_aout_buffer->p_buffer );
if( i_ret == -1 ) if( i_ret == -1 )
{ {
...@@ -483,8 +483,9 @@ static aout_buffer_t *DecodePacket( decoder_t *p_dec, ogg_packet *p_oggpacket ) ...@@ -483,8 +483,9 @@ static aout_buffer_t *DecodePacket( decoder_t *p_dec, ogg_packet *p_oggpacket )
} }
if( p_sys->p_header->nb_channels == 2 ) if( p_sys->p_header->nb_channels == 2 )
speex_decode_stereo( (int16_t *)p_aout_buffer->p_buffer, speex_decode_stereo_int( (int16_t *)p_aout_buffer->p_buffer,
p_sys->p_header->frame_size, &p_sys->stereo ); p_sys->p_header->frame_size,
&p_sys->stereo );
/* Date management */ /* Date management */
p_aout_buffer->start_date = aout_DateGet( &p_sys->end_date ); p_aout_buffer->start_date = aout_DateGet( &p_sys->end_date );
...@@ -744,7 +745,7 @@ static block_t *Encode( encoder_t *p_enc, aout_buffer_t *p_aout_buf ) ...@@ -744,7 +745,7 @@ static block_t *Encode( encoder_t *p_enc, aout_buffer_t *p_aout_buf )
/* Encode current frame */ /* Encode current frame */
if( p_enc->fmt_in.audio.i_channels == 2 ) if( p_enc->fmt_in.audio.i_channels == 2 )
speex_encode_stereo( p_samples, p_sys->i_frame_length, speex_encode_stereo_int( p_samples, p_sys->i_frame_length,
&p_sys->bits ); &p_sys->bits );
#if 0 #if 0
...@@ -752,7 +753,7 @@ static block_t *Encode( encoder_t *p_enc, aout_buffer_t *p_aout_buf ) ...@@ -752,7 +753,7 @@ static block_t *Encode( encoder_t *p_enc, aout_buffer_t *p_aout_buf )
speex_preprocess( p_sys->preprocess, p_samples, NULL ); speex_preprocess( p_sys->preprocess, p_samples, NULL );
#endif #endif
speex_encode( p_sys->p_state, p_samples, &p_sys->bits ); speex_encode_int( p_sys->p_state, p_samples, &p_sys->bits );
p_buffer += p_sys->i_frame_size; p_buffer += p_sys->i_frame_size;
p_sys->i_samples_delay -= p_sys->i_frame_length; p_sys->i_samples_delay -= p_sys->i_frame_length;
......
...@@ -65,6 +65,7 @@ struct demux_sys_t ...@@ -65,6 +65,7 @@ struct demux_sys_t
vlc_bool_t b_still; vlc_bool_t b_still;
mtime_t i_still_end; mtime_t i_still_end;
mtime_t i_still_length;
mtime_t i_time; mtime_t i_time;
mtime_t i_frame_length; mtime_t i_frame_length;
...@@ -277,7 +278,7 @@ static int SendBlock( demux_t *p_demux, int i ) ...@@ -277,7 +278,7 @@ static int SendBlock( demux_t *p_demux, int i )
if( p_sys->b_still ) if( p_sys->b_still )
{ {
p_sys->i_still_end = mdate() + I64C(5000000); p_sys->i_still_end = mdate() + p_sys->i_still_length;
} }
return 1; return 1;
...@@ -327,6 +328,11 @@ static int Open( vlc_object_t * p_this ) ...@@ -327,6 +328,11 @@ static int Open( vlc_object_t * p_this )
goto error; goto error;
} }
var_Create( p_demux, "mjpeg-fps", VLC_VAR_FLOAT | VLC_VAR_DOINHERIT );
var_Get( p_demux, "mjpeg-fps", &val );
p_sys->i_frame_length = 0;
/* Check for jpeg file extension */ /* Check for jpeg file extension */
p_sys->b_still = VLC_FALSE; p_sys->b_still = VLC_FALSE;
p_sys->i_still_end = 0; p_sys->i_still_end = 0;
...@@ -335,12 +341,17 @@ static int Open( vlc_object_t * p_this ) ...@@ -335,12 +341,17 @@ static int Open( vlc_object_t * p_this )
!strcasecmp( psz_ext, ".jpg" ) ) ) !strcasecmp( psz_ext, ".jpg" ) ) )
{ {
p_sys->b_still = VLC_TRUE; p_sys->b_still = VLC_TRUE;
if( val.f_float)
{
p_sys->i_still_length =1000000.0 / val.f_float;
} }
else
var_Create( p_demux, "mjpeg-fps", VLC_VAR_FLOAT | VLC_VAR_DOINHERIT ); {
var_Get( p_demux, "mjpeg-fps", &val ); /* Defaults to 1fps */
p_sys->i_frame_length = 0; p_sys->i_still_length = 1000000;
if( val.f_float ) }
}
else if ( val.f_float )
{ {
p_sys->i_frame_length = 1000000.0 / val.f_float; p_sys->i_frame_length = 1000000.0 / val.f_float;
} }
...@@ -373,7 +384,7 @@ static int MjpgDemux( demux_t *p_demux ) ...@@ -373,7 +384,7 @@ static int MjpgDemux( demux_t *p_demux )
} }
else if( p_sys->b_still && p_sys->i_still_end ) else if( p_sys->b_still && p_sys->i_still_end )
{ {
msleep( 40000 ); msleep( 400 );
return 1; return 1;
} }
......
...@@ -1338,6 +1338,13 @@ static void Ogg_ReadAnnodexHeader( vlc_object_t *p_this, ...@@ -1338,6 +1338,13 @@ static void Ogg_ReadAnnodexHeader( vlc_object_t *p_this,
p_stream->b_force_backup = 1; p_stream->b_force_backup = 1;
} }
else if( !strncmp(content_type_string, "audio/x-speex", 14) )
{
p_stream->fmt.i_cat = AUDIO_ES;
p_stream->fmt.i_codec = VLC_FOURCC( 's','p','x',' ' );
p_stream->b_force_backup = 1;
}
else if( !strncmp(content_type_string, "video/x-theora", 14) ) else if( !strncmp(content_type_string, "video/x-theora", 14) )
{ {
p_stream->fmt.i_cat = VIDEO_ES; p_stream->fmt.i_cat = VIDEO_ES;
......
...@@ -30,24 +30,18 @@ class OSGraphics; ...@@ -30,24 +30,18 @@ class OSGraphics;
/// Class to handle a video output window /// Class to handle a video output window
class VoutWindow: public GenericWindow class VoutWindow: private GenericWindow
{ {
public: public:
VoutWindow( intf_thread_t *pIntf, int xPos, int yPos, VoutWindow( intf_thread_t *pIntf, int xPos, int yPos,
bool dragDrop, bool playOnDrop, GenericWindow &rParent ); bool dragDrop, bool playOnDrop, GenericWindow &rParent );
virtual ~VoutWindow(); virtual ~VoutWindow();
/// These methods are redefined here to make them public /// Make some functions public
//@{ //@{
/// Show the window using GenericWindow::show;
virtual void show() { GenericWindow::show(); } using GenericWindow::hide;
using GenericWindow::move;
/// Hide the window
virtual void hide() { GenericWindow::hide(); }
/// Move the window
virtual void move( int left, int top )
{ GenericWindow::move( left, top ); }
//@} //@}
/// Resize the window /// Resize the window
......
...@@ -223,22 +223,6 @@ void ItemInfoDialog::OnOk( wxCommandEvent& WXUNUSED(event) ) ...@@ -223,22 +223,6 @@ void ItemInfoDialog::OnOk( wxCommandEvent& WXUNUSED(event) )
p_item->input.psz_uri = strdup( uri_text->GetLineText(0).mb_str() ); p_item->input.psz_uri = strdup( uri_text->GetLineText(0).mb_str() );
playlist_ItemAddInfo( p_item,"General","Author", playlist_ItemAddInfo( p_item,"General","Author",
author_text->GetLineText(0).mb_str() ); author_text->GetLineText(0).mb_str() );
vlc_bool_t b_old_enabled = p_item->b_enabled;
playlist_t * p_playlist =
(playlist_t *)vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
FIND_ANYWHERE );
if( p_playlist != NULL )
{
if( b_old_enabled == VLC_FALSE && enabled_checkbox->IsChecked() )
p_playlist->i_enabled ++;
else if( b_old_enabled == VLC_TRUE && !enabled_checkbox->IsChecked() )
p_playlist->i_enabled --;
vlc_object_release( p_playlist );
}
p_item->b_enabled = enabled_checkbox->IsChecked() ? VLC_TRUE : VLC_FALSE ;
vlc_mutex_unlock( &p_item->input.lock ); vlc_mutex_unlock( &p_item->input.lock );
EndModal( wxID_OK ); EndModal( wxID_OK );
} }
......
This diff is collapsed.
...@@ -785,40 +785,52 @@ public: ...@@ -785,40 +785,52 @@ public:
private: private:
void DeleteItem( int item ); void DeleteItem( int item );
void ShowInfos( int item ); void DeleteNode( playlist_item_t *node );
/* Event handlers (these functions should _not_ be virtual) */ /* Event handlers (these functions should _not_ be virtual) */
void OnSize( wxSizeEvent &event );
/* Menu Handlers */ /* Menu Handlers */
void OnAddFile( wxCommandEvent& event ); void OnAddFile( wxCommandEvent& event );
void OnAddDir( wxCommandEvent& event ); void OnAddDir( wxCommandEvent& event );
void OnAddMRL( wxCommandEvent& event ); void OnAddMRL( wxCommandEvent& event );
void OnClose( wxCommandEvent& event ); void OnClose( wxCommandEvent& event );
void OnSearch( wxCommandEvent& event );
void OnEnDis( wxCommandEvent& event ); void OnEnableSelection( wxCommandEvent& event );
void OnInfos( wxCommandEvent& event ); void OnDisableSelection( wxCommandEvent& event );
void OnSearchTextChange( wxCommandEvent& event ); void OnInvertSelection( wxCommandEvent& event );
void OnDeleteSelection( wxCommandEvent& event );
void OnSelectAll( wxCommandEvent& event );
void OnOpen( wxCommandEvent& event ); void OnOpen( wxCommandEvent& event );
void OnSave( wxCommandEvent& event ); void OnSave( wxCommandEvent& event );
/* Search (user) */
void OnSearch( wxCommandEvent& event );
void OnSearchTextChange( wxCommandEvent& event );
wxTextCtrl *search_text;
wxButton *search_button;
wxTreeItemId search_current;
void OnEnDis( wxCommandEvent& event );
/* Sort */
int i_sort_mode;
void OnSort( wxCommandEvent& event ); void OnSort( wxCommandEvent& event );
int i_title_sorted;
int i_group_sorted;
int i_duration_sorted;
/* Dynamic menus */
void OnMenuEvent( wxCommandEvent& event ); void OnMenuEvent( wxCommandEvent& event );
void OnMenuOpen( wxMenuEvent& event ); void OnMenuOpen( wxMenuEvent& event );
wxMenu *p_view_menu;
wxMenu *p_sd_menu;
wxMenu *ViewMenu(); wxMenu *ViewMenu();
wxMenu *SDMenu(); wxMenu *SDMenu();
void OnUp( wxCommandEvent& event); void OnUp( wxCommandEvent& event);
void OnDown( wxCommandEvent& event); void OnDown( wxCommandEvent& event);
void OnEnableSelection( wxCommandEvent& event );
void OnDisableSelection( wxCommandEvent& event );
void OnInvertSelection( wxCommandEvent& event );
void OnDeleteSelection( wxCommandEvent& event );
void OnSelectAll( wxCommandEvent& event );
void OnRandom( wxCommandEvent& event ); void OnRandom( wxCommandEvent& event );
void OnRepeat( wxCommandEvent& event ); void OnRepeat( wxCommandEvent& event );
void OnLoop ( wxCommandEvent& event ); void OnLoop ( wxCommandEvent& event );
...@@ -827,7 +839,11 @@ private: ...@@ -827,7 +839,11 @@ private:
void OnKeyDown( wxTreeEvent& event ); void OnKeyDown( wxTreeEvent& event );
void OnNewGroup( wxCommandEvent& event ); void OnNewGroup( wxCommandEvent& event );
/* Popup functions */ /* Popup */
wxMenu *popup_menu;
wxTreeItemId i_popup_item;
playlist_item_t *p_popup_item;
playlist_item_t *p_popup_parent;
void OnPopup( wxContextMenuEvent& event ); void OnPopup( wxContextMenuEvent& event );
void OnPopupPlay( wxMenuEvent& event ); void OnPopupPlay( wxMenuEvent& event );
void OnPopupSort( wxMenuEvent& event ); void OnPopupSort( wxMenuEvent& event );
...@@ -840,46 +856,34 @@ private: ...@@ -840,46 +856,34 @@ private:
void UpdateNode( playlist_t *, playlist_item_t*, wxTreeItemId ); void UpdateNode( playlist_t *, playlist_item_t*, wxTreeItemId );
void UpdateNodeChildren( playlist_t *, playlist_item_t*, wxTreeItemId ); void UpdateNodeChildren( playlist_t *, playlist_item_t*, wxTreeItemId );
void CreateNode( playlist_t *, playlist_item_t*, wxTreeItemId ); void CreateNode( playlist_t *, playlist_item_t*, wxTreeItemId );
void UpdateTreeItem( playlist_t *, wxTreeItemId );
void SetCurrentItem( wxTreeItemId );
/* Search (internal) */
int CountItems( wxTreeItemId);
wxTreeItemId FindItem( wxTreeItemId, playlist_item_t * ); wxTreeItemId FindItem( wxTreeItemId, playlist_item_t * );
wxTreeItemId FindItemByName( wxTreeItemId, wxString, wxTreeItemId, vlc_bool_t *); wxTreeItemId FindItemByName( wxTreeItemId, wxString,
void SetCurrentItem( wxTreeItemId ); wxTreeItemId, vlc_bool_t *);
void UpdateTreeItem( playlist_t *, wxTreeItemId );
/* Custom events */ /* Custom events */
void OnPlaylistEvent( wxCommandEvent& event ); void OnPlaylistEvent( wxCommandEvent& event );
wxTextCtrl *search_text;
wxButton *search_button;
DECLARE_EVENT_TABLE(); DECLARE_EVENT_TABLE();
wxMenu *popup_menu;
wxMenu *p_view_menu;
wxMenu *p_sd_menu;
char **pp_sds;
/* Global widgets */
wxStatusBar *statusbar; wxStatusBar *statusbar;
ItemInfoDialog *iteminfo_dialog; ItemInfoDialog *iteminfo_dialog;
intf_thread_t *p_intf;
wxTreeCtrl *treectrl;
int i_update_counter; int i_update_counter;
int i_sort_mode;
intf_thread_t *p_intf;
wxTreeCtrl *treectrl;
int i_current_view; int i_current_view;
vlc_bool_t b_changed_view;
char **pp_sds;
wxTreeItemId i_popup_item;
wxTreeItemId search_current;
playlist_item_t *p_popup_item;
playlist_item_t *p_popup_parent;
int i_title_sorted;
int i_author_sorted;
int i_group_sorted;
int i_duration_sorted;
}; };
/* ItemInfo Dialog */ /* ItemInfo Dialog */
...@@ -923,7 +927,6 @@ private: ...@@ -923,7 +927,6 @@ private:
wxTreeCtrl *info_tree; wxTreeCtrl *info_tree;
wxTreeItemId info_root; wxTreeItemId info_root;
wxCheckBox *enabled_checkbox;
}; };
......
...@@ -738,19 +738,20 @@ static int ParseSAP( services_discovery_t *p_sd, uint8_t *p_buffer, int i_read ) ...@@ -738,19 +738,20 @@ static int ParseSAP( services_discovery_t *p_sd, uint8_t *p_buffer, int i_read )
} }
/* Decide whether we should add a playlist item for this SDP */ /* Decide whether we should add a playlist item for this SDP */
/* Multi-media or no-parse -> pass to LIVE.COM */
if( p_sdp->i_media > 1 || p_sd->p_sys->b_parse == VLC_FALSE )
{
asprintf( &p_sdp->psz_uri, "sdp://%s", p_sdp->psz_sdp );
}
else
{
/* Parse connection information (c= & m= ) */ /* Parse connection information (c= & m= ) */
if( ParseConnection( VLC_OBJECT(p_sd), p_sdp ) ) if( ParseConnection( VLC_OBJECT(p_sd), p_sdp ) )
{ {
p_sdp->psz_uri = NULL; p_sdp->psz_uri = NULL;
} }
/* Multi-media or no-parse -> pass to LIVE.COM */
if( p_sdp->i_media > 1 || ( p_sdp->i_media_type != 14 &&
p_sdp->i_media_type != 32 &&
p_sdp->i_media_type != 33) ||
p_sd->p_sys->b_parse == VLC_FALSE )
{
if( p_sdp->psz_uri ) free( p_sdp->psz_uri );
asprintf( &p_sdp->psz_uri, "sdp://%s", p_sdp->psz_sdp );
} }
if( p_sdp->psz_uri == NULL ) return VLC_EGENERIC; if( p_sdp->psz_uri == NULL ) return VLC_EGENERIC;
......
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