Page 1 of 1
alsa output problem using libmad and mpga2fixed
Posted: 07 Sep 2009 21:41
by curgan
Hi All,
Using alsa as audio output i am getting a error like "audio output is starving (39734), playing silence".We know that mp3(libmad) decoding is in mpga2fixed filter.My questions re "Which thread handle this filter?Decoder or Alsa?" ,"What should i do for to fix this issue?"
Cheers
Celil
Re: alsa output problem using libmad and mpga2fixed
Posted: 07 Sep 2009 22:16
by curgan
Update
I also checked pthread code for priority settings. From this code if you don't give "-rt-priority" option it seems all threads will have same priority.
So all threads will be prioritized by their own work. Input (disk access speed or network access or etc.) , Decoder(fixed-floating math time) , output(alsa buffersizes ,consume speed)
Am i missing something?
Code: Select all
int __vlc_thread_create( vlc_object_t *p_this, const char * psz_file, int i_line,
const char *psz_name, void * ( *func ) ( vlc_object_t * ),
int i_priority, bool b_wait )
{
int i_ret;
vlc_object_internals_t *p_priv = vlc_internals( p_this );
struct vlc_thread_boot *boot = malloc (sizeof (*boot));
if (boot == NULL)
return errno;
boot->entry = func;
boot->object = p_this;
vlc_object_lock( p_this );
/* Make sure we don't re-create a thread if the object has already one */
assert( !p_priv->b_thread );
#if defined( LIBVLC_USE_PTHREAD )
pthread_attr_t attr;
pthread_attr_init (&attr);
/* Block the signals that signals interface plugin handles.
* If the LibVLC caller wants to handle some signals by itself, it should
* block these before whenever invoking LibVLC. And it must obviously not
* start the VLC signals interface plugin.
*
* LibVLC will normally ignore any interruption caused by an asynchronous
* signal during a system call. But there may well be some buggy cases
* where it fails to handle EINTR (bug reports welcome). Some underlying
* libraries might also not handle EINTR properly.
*/
sigset_t set, oldset;
sigemptyset (&set);
sigdelset (&set, SIGHUP);
sigaddset (&set, SIGINT);
sigaddset (&set, SIGQUIT);
sigaddset (&set, SIGTERM);
sigaddset (&set, SIGPIPE); /* We don't want this one, really! */
pthread_sigmask (SIG_BLOCK, &set, &oldset);
#ifndef __APPLE__
if( config_GetInt( p_this, "rt-priority" ) > 0 )
#endif
{
struct sched_param p = { .sched_priority = i_priority, };
int policy;
/* Hack to avoid error msg */
if( config_GetType( p_this, "rt-offset" ) )
p.sched_priority += config_GetInt( p_this, "rt-offset" );
if( p.sched_priority <= 0 )
p.sched_priority += sched_get_priority_max (policy = SCHED_OTHER);
else
p.sched_priority += sched_get_priority_min (policy = SCHED_RR);
pthread_attr_setschedpolicy (&attr, policy);
pthread_attr_setschedparam (&attr, &p);
}
i_ret = pthread_create( &p_priv->thread_id, &attr, thread_entry, boot );
pthread_sigmask (SIG_SETMASK, &oldset, NULL);
pthread_attr_destroy (&attr);
Re: alsa output problem using libmad and mpga2fixed
Posted: 08 Sep 2009 20:58
by RĂ©mi Denis-Courmont
That message comes from the decoder tread.
Re: alsa output problem using libmad and mpga2fixed
Posted: 09 Sep 2009 20:32
by curgan
I know that my system is fast enough also libmad optimized for arch. Then what is your opinion about this problem?
Re: alsa output problem using libmad and mpga2fixed
Posted: 11 Sep 2009 16:36
by curgan
if i re-added "AOUT_PTS_TOLERANCE" to if block problem fixed while playing song.But at start of song audio is choppy now. A old bug cause a new bug.
So doing this switched to old bug a need a fix for it. Any comments?
vlc/src/audio_output.c line 320
Code: Select all
/* Here we suppose that all buffers have the same duration - this is
* generally true, and anyway if it's wrong it won't be a disaster.
*/
if ( p_buffer->start_date > start_date
+ (p_buffer->end_date - p_buffer->start_date)+ AOUT_PTS_TOLERANCE )
/*
* + AOUT_PTS_TOLERANCE )
* There is no reason to want that, it just worsen the scheduling of
* an audio sample after an output starvation (ie. on start or on resume)
* --Gibalou
*/
{
const mtime_t i_delta = p_buffer->start_date - start_date;
aout_unlock_output_fifo( p_aout );
if ( !p_aout->output.b_starving )
msg_Dbg( p_aout, "audio output is starving (%"PRId64"), "
"playing silence", i_delta );
p_aout->output.b_starving = 1;
return NULL;
}
Re: alsa output problem using libmad and mpga2fixed
Posted: 11 Sep 2009 18:56
by Jean-Baptiste Kempf
Share on vlc-devel mailing list!