Commit 53f3c079 authored by Laurent Aimar's avatar Laurent Aimar

Obsoleted minimize-threads option.

It is not really needed and was complicating too much decoder code.
parent 4832631e
...@@ -77,8 +77,6 @@ static es_format_t null_es_format; ...@@ -77,8 +77,6 @@ static es_format_t null_es_format;
struct decoder_owner_sys_t struct decoder_owner_sys_t
{ {
bool b_own_thread;
int64_t i_preroll_end; int64_t i_preroll_end;
input_thread_t *p_input; input_thread_t *p_input;
...@@ -212,8 +210,8 @@ int decoder_GetDisplayRate( decoder_t *p_dec ) ...@@ -212,8 +210,8 @@ int decoder_GetDisplayRate( decoder_t *p_dec )
decoder_t *input_DecoderNew( input_thread_t *p_input, decoder_t *input_DecoderNew( input_thread_t *p_input,
es_format_t *fmt, input_clock_t *p_clock, sout_instance_t *p_sout ) es_format_t *fmt, input_clock_t *p_clock, sout_instance_t *p_sout )
{ {
decoder_t *p_dec = NULL; decoder_t *p_dec = NULL;
vlc_value_t val; int i_priority;
#ifndef ENABLE_SOUT #ifndef ENABLE_SOUT
(void)b_force_decoder; (void)b_force_decoder;
...@@ -256,35 +254,20 @@ decoder_t *input_DecoderNew( input_thread_t *p_input, ...@@ -256,35 +254,20 @@ decoder_t *input_DecoderNew( input_thread_t *p_input,
p_dec->p_owner->p_clock = p_clock; p_dec->p_owner->p_clock = p_clock;
if( p_sout && p_sout == p_input->p->p_sout && p_input->p->input.b_can_pace_control ) if( fmt->i_cat == AUDIO_ES )
{ i_priority = VLC_THREAD_PRIORITY_AUDIO;
msg_Dbg( p_input, "stream out mode -> no decoder thread" );
p_dec->p_owner->b_own_thread = false;
}
else else
{ i_priority = VLC_THREAD_PRIORITY_VIDEO;
var_Get( p_input, "minimize-threads", &val );
p_dec->p_owner->b_own_thread = !val.b_bool;
}
if( p_dec->p_owner->b_own_thread ) /* Spawn the decoder thread */
if( vlc_thread_create( p_dec, "decoder", DecoderThread,
i_priority, false ) )
{ {
int i_priority; msg_Err( p_dec, "cannot spawn decoder thread" );
if( fmt->i_cat == AUDIO_ES ) module_unneed( p_dec, p_dec->p_module );
i_priority = VLC_THREAD_PRIORITY_AUDIO; DeleteDecoder( p_dec );
else vlc_object_release( p_dec );
i_priority = VLC_THREAD_PRIORITY_VIDEO; return NULL;
/* Spawn the decoder thread */
if( vlc_thread_create( p_dec, "decoder", DecoderThread,
i_priority, false ) )
{
msg_Err( p_dec, "cannot spawn decoder thread" );
module_unneed( p_dec, p_dec->p_module );
DeleteDecoder( p_dec );
vlc_object_release( p_dec );
return NULL;
}
} }
return p_dec; return p_dec;
...@@ -303,33 +286,23 @@ void input_DecoderDelete( decoder_t *p_dec ) ...@@ -303,33 +286,23 @@ void input_DecoderDelete( decoder_t *p_dec )
vlc_object_kill( p_dec ); vlc_object_kill( p_dec );
if( p_owner->b_own_thread ) /* Make sure we aren't paused anymore */
vlc_mutex_lock( &p_owner->lock );
if( p_owner->b_paused || p_owner->b_buffering )
{ {
/* Make sure we aren't paused anymore */ p_owner->b_paused = false;
vlc_mutex_lock( &p_owner->lock ); p_owner->b_buffering = false;
if( p_owner->b_paused || p_owner->b_buffering ) vlc_cond_signal( &p_owner->wait );
{ }
p_owner->b_paused = false; vlc_mutex_unlock( &p_owner->lock );
p_owner->b_buffering = false;
vlc_cond_signal( &p_owner->wait );
}
vlc_mutex_unlock( &p_owner->lock );
/* Make sure the thread leaves the function */
block_FifoWake( p_owner->p_fifo );
vlc_thread_join( p_dec ); /* Make sure the thread leaves the function */
block_FifoWake( p_owner->p_fifo );
/* Don't module_unneed() here because of the dll loader that wants vlc_thread_join( p_dec );
* close() in the same thread than open()/decode() */
}
else
{
/* Flush */
input_DecoderDecode( p_dec, NULL );
module_unneed( p_dec, p_dec->p_module ); /* Don't module_unneed() here because of the dll loader that wants
} * close() in the same thread than open()/decode() */
/* */ /* */
if( p_dec->p_owner->cc.b_supported ) if( p_dec->p_owner->cc.b_supported )
...@@ -352,56 +325,37 @@ void input_DecoderDelete( decoder_t *p_dec ) ...@@ -352,56 +325,37 @@ void input_DecoderDelete( decoder_t *p_dec )
* \param p_dec the decoder object * \param p_dec the decoder object
* \param p_block the data block * \param p_block the data block
*/ */
void input_DecoderDecode( decoder_t * p_dec, block_t *p_block ) void input_DecoderDecode( decoder_t *p_dec, block_t *p_block )
{ {
decoder_owner_sys_t *p_owner = p_dec->p_owner; decoder_owner_sys_t *p_owner = p_dec->p_owner;
if( p_owner->b_own_thread ) if( p_owner->p_input->p->b_out_pace_control )
{ {
if( p_owner->p_input->p->b_out_pace_control ) /* FIXME !!!!! */
while( vlc_object_alive( p_dec ) && !p_dec->b_error &&
block_FifoCount( p_owner->p_fifo ) > 10 )
{ {
/* FIXME !!!!! */ msleep( 1000 );
while( vlc_object_alive( p_dec ) && !p_dec->b_error &&
block_FifoCount( p_owner->p_fifo ) > 10 )
{
msleep( 1000 );
}
}
else if( block_FifoSize( p_owner->p_fifo ) > 50000000 /* 50 MB */ )
{
/* FIXME: ideally we would check the time amount of data
* in the fifo instead of its size. */
msg_Warn( p_dec, "decoder/packetizer fifo full (data not "
"consumed quickly enough), resetting fifo!" );
block_FifoEmpty( p_owner->p_fifo );
} }
block_FifoPut( p_owner->p_fifo, p_block );
} }
else else if( block_FifoSize( p_owner->p_fifo ) > 50000000 /* 50 MB */ )
{ {
if( p_dec->b_error || ( p_block && p_block->i_buffer <= 0 ) ) /* FIXME: ideally we would check the time amount of data
{ * in the fifo instead of its size. */
if( p_block ) msg_Warn( p_dec, "decoder/packetizer fifo full (data not "
block_Release( p_block ); "consumed quickly enough), resetting fifo!" );
} block_FifoEmpty( p_owner->p_fifo );
else
{
DecoderProcess( p_dec, p_block );
}
} }
block_FifoPut( p_owner->p_fifo, p_block );
} }
bool input_DecoderIsEmpty( decoder_t * p_dec ) bool input_DecoderIsEmpty( decoder_t * p_dec )
{ {
assert( !p_dec->p_owner->b_buffering ); assert( !p_dec->p_owner->b_buffering );
if( p_dec->p_owner->b_own_thread && /* FIXME that's not really true */
block_FifoCount( p_dec->p_owner->p_fifo ) > 0 ) return block_FifoCount( p_dec->p_owner->p_fifo ) <= 0;
{
return false;
}
return true;
} }
void input_DecoderIsCcPresent( decoder_t *p_dec, bool pb_present[4] ) void input_DecoderIsCcPresent( decoder_t *p_dec, bool pb_present[4] )
...@@ -496,12 +450,13 @@ void input_DecoderChangePause( decoder_t *p_dec, bool b_paused, mtime_t i_date ) ...@@ -496,12 +450,13 @@ void input_DecoderChangePause( decoder_t *p_dec, bool b_paused, mtime_t i_date )
vlc_mutex_lock( &p_owner->lock ); vlc_mutex_lock( &p_owner->lock );
assert( !p_owner->b_paused || !b_paused ); assert( !p_owner->b_paused || !b_paused );
p_owner->b_paused = b_paused; p_owner->b_paused = b_paused;
p_owner->pause.i_date = i_date; p_owner->pause.i_date = i_date;
if( p_owner->b_own_thread ) vlc_cond_signal( &p_owner->wait );
vlc_cond_signal( &p_owner->wait );
DecoderOutputChangePause( p_dec, b_paused, i_date ); DecoderOutputChangePause( p_dec, b_paused, i_date );
vlc_mutex_unlock( &p_owner->lock ); vlc_mutex_unlock( &p_owner->lock );
} }
...@@ -626,7 +581,6 @@ static decoder_t * CreateDecoder( input_thread_t *p_input, ...@@ -626,7 +581,6 @@ static decoder_t * CreateDecoder( input_thread_t *p_input,
vlc_object_release( p_dec ); vlc_object_release( p_dec );
return NULL; return NULL;
} }
p_dec->p_owner->b_own_thread = true;
p_dec->p_owner->i_preroll_end = -1; p_dec->p_owner->i_preroll_end = -1;
p_dec->p_owner->i_last_rate = INPUT_RATE_DEFAULT; p_dec->p_owner->i_last_rate = INPUT_RATE_DEFAULT;
p_dec->p_owner->p_input = p_input; p_dec->p_owner->p_input = p_input;
...@@ -795,17 +749,14 @@ static void DecoderFlush( decoder_t *p_dec ) ...@@ -795,17 +749,14 @@ static void DecoderFlush( decoder_t *p_dec )
decoder_owner_sys_t *p_owner = p_dec->p_owner; decoder_owner_sys_t *p_owner = p_dec->p_owner;
block_t *p_null; block_t *p_null;
if( p_owner->b_own_thread ) vlc_assert_locked( &p_owner->lock );
{
vlc_assert_locked( &p_owner->lock );
/* Empty the fifo */ /* Empty the fifo */
block_FifoEmpty( p_owner->p_fifo ); block_FifoEmpty( p_owner->p_fifo );
/* Monitor for flush end */ /* Monitor for flush end */
p_owner->b_flushing = true; p_owner->b_flushing = true;
vlc_cond_signal( &p_owner->wait ); vlc_cond_signal( &p_owner->wait );
}
/* Send a special block */ /* Send a special block */
p_null = block_New( p_dec, 128 ); p_null = block_New( p_dec, 128 );
...@@ -820,11 +771,8 @@ static void DecoderFlush( decoder_t *p_dec ) ...@@ -820,11 +771,8 @@ static void DecoderFlush( decoder_t *p_dec )
input_DecoderDecode( p_dec, p_null ); input_DecoderDecode( p_dec, p_null );
/* */ /* */
if( p_owner->b_own_thread ) while( vlc_object_alive( p_dec ) && p_owner->b_flushing )
{ vlc_cond_wait( &p_owner->wait, &p_owner->lock );
while( vlc_object_alive( p_dec ) && p_owner->b_flushing )
vlc_cond_wait( &p_owner->wait, &p_owner->lock );
}
} }
static void DecoderSignalFlushed( decoder_t *p_dec ) static void DecoderSignalFlushed( decoder_t *p_dec )
...@@ -1598,7 +1546,7 @@ static void DecoderProcessSout( decoder_t *p_dec, block_t *p_block ) ...@@ -1598,7 +1546,7 @@ static void DecoderProcessSout( decoder_t *p_dec, block_t *p_block )
p_sout_block->p_next = NULL; p_sout_block->p_next = NULL;
DecoderPlaySout( p_dec, p_block, b_telx ); DecoderPlaySout( p_dec, p_sout_block, b_telx );
p_sout_block = p_next; p_sout_block = p_next;
} }
......
...@@ -454,9 +454,6 @@ void input_ConfigVarInit ( input_thread_t *p_input ) ...@@ -454,9 +454,6 @@ void input_ConfigVarInit ( input_thread_t *p_input )
var_Create( p_input, "input-slave", var_Create( p_input, "input-slave",
VLC_VAR_STRING | VLC_VAR_DOINHERIT ); VLC_VAR_STRING | VLC_VAR_DOINHERIT );
var_Create( p_input, "minimize-threads",
VLC_VAR_BOOL|VLC_VAR_DOINHERIT );
var_Create( p_input, "audio-desync", var_Create( p_input, "audio-desync",
VLC_VAR_INTEGER | VLC_VAR_DOINHERIT ); VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
var_Create( p_input, "cr-average", var_Create( p_input, "cr-average",
......
...@@ -1019,10 +1019,6 @@ static const char *const ppsz_clock_descriptions[] = ...@@ -1019,10 +1019,6 @@ static const char *const ppsz_clock_descriptions[] =
"priorities. You can use it to tune VLC priority against other " \ "priorities. You can use it to tune VLC priority against other " \
"programs, or against other VLC instances.") "programs, or against other VLC instances.")
#define MINIMIZE_THREADS_TEXT N_("Minimize number of threads")
#define MINIMIZE_THREADS_LONGTEXT N_( \
"This option minimizes the number of threads needed to run VLC.")
#define USE_STREAM_IMMEDIATE N_("(Experimental) Don't do caching at the access level.") #define USE_STREAM_IMMEDIATE N_("(Experimental) Don't do caching at the access level.")
#define USE_STREAM_IMMEDIATE_LONGTEXT N_( \ #define USE_STREAM_IMMEDIATE_LONGTEXT N_( \
"This option is useful if you want to lower the latency when " \ "This option is useful if you want to lower the latency when " \
...@@ -1872,9 +1868,7 @@ vlc_module_begin(); ...@@ -1872,9 +1868,7 @@ vlc_module_begin();
change_need_restart(); change_need_restart();
set_section( N_("Performance options"), NULL ); set_section( N_("Performance options"), NULL );
add_bool( "minimize-threads", 0, NULL, MINIMIZE_THREADS_TEXT, add_obsolete_bool( "minimize-threads" );
MINIMIZE_THREADS_LONGTEXT, true );
change_need_restart();
add_bool( "use-stream-immediate", false, NULL, add_bool( "use-stream-immediate", false, NULL,
USE_STREAM_IMMEDIATE, USE_STREAM_IMMEDIATE_LONGTEXT, true ); USE_STREAM_IMMEDIATE, USE_STREAM_IMMEDIATE_LONGTEXT, true );
......
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