Commit 01461d52 authored by Michel Kaempf's avatar Michel Kaempf

* audio_output/audio_output.c :

- impl�mentation de la synkro (qui punit m�chant) ;

* audio_decoder/audio_decoder.c, ac3_decoder/ac3_decoder.c :
- rajout de vlc_cond_signal() afin de pr�venir l'audio_output que de
nouveaux samples ont �t� d�cod�s ;

* Makefile :
- rajout de l'options de compilation -g ;
- utilisation du old decoder (synkro) ;

* include/config.h :
- suppression des messages de debug ;
parent e97f189c
...@@ -27,8 +27,8 @@ ARCH=MMX ...@@ -27,8 +27,8 @@ ARCH=MMX
#ARCH=SPARC #ARCH=SPARC
# Decoder choice - ?? old decoder will be removed soon # Decoder choice - ?? old decoder will be removed soon
#DECODER=old DECODER=old
DECODER=new #DECODER=new
# !!! don't forget to run this command after changing decoder type !!! # !!! don't forget to run this command after changing decoder type !!!
# touch input/input.c input/input_ctrl.c include/vlc.h include/video_decoder.h # touch input/input.c input/input_ctrl.c include/vlc.h include/video_decoder.h
...@@ -90,7 +90,7 @@ CCFLAGS += -D_REENTRANT ...@@ -90,7 +90,7 @@ CCFLAGS += -D_REENTRANT
CCFLAGS += -D_GNU_SOURCE CCFLAGS += -D_GNU_SOURCE
# Optimizations : don't compile debug versions with them # Optimizations : don't compile debug versions with them
#CCFLAGS += -g CCFLAGS += -g
CCFLAGS += -O6 CCFLAGS += -O6
CCFLAGS += -ffast-math -funroll-loops -fargument-noalias-global CCFLAGS += -ffast-math -funroll-loops -fargument-noalias-global
CCFLAGS += -fomit-frame-pointer CCFLAGS += -fomit-frame-pointer
......
...@@ -73,7 +73,7 @@ ...@@ -73,7 +73,7 @@
*******************************************************************************/ *******************************************************************************/
/* General debugging support */ /* General debugging support */
#define DEBUG //#define DEBUG
/* Modules specific debugging - this will produce a lot of output, but can be /* Modules specific debugging - this will produce a lot of output, but can be
* usefull to track a bug */ * usefull to track a bug */
...@@ -85,8 +85,8 @@ ...@@ -85,8 +85,8 @@
/* Debugging log file - if defined, a file can be used to store all messages. If /* Debugging log file - if defined, a file can be used to store all messages. If
* DEBUG_LOG_ONLY is defined, debug messages will only be printed to the log and * DEBUG_LOG_ONLY is defined, debug messages will only be printed to the log and
* will not appear on the screen */ * will not appear on the screen */
#define DEBUG_LOG "vlc-debug.log" //#define DEBUG_LOG "vlc-debug.log"
#define DEBUG_LOG_ONLY //#define DEBUG_LOG_ONLY
/******************************************************************************* /*******************************************************************************
* General configuration * General configuration
...@@ -359,4 +359,3 @@ ...@@ -359,4 +359,3 @@
/* Maximal number of commands which can be saved in history list */ /* Maximal number of commands which can be saved in history list */
#define INTF_CONSOLE_MAX_HISTORY 20 #define INTF_CONSOLE_MAX_HISTORY 20
...@@ -3,6 +3,15 @@ ...@@ -3,6 +3,15 @@
* (c)1999 VideoLAN * (c)1999 VideoLAN
*****************************************************************************/ *****************************************************************************/
/*
* TODO :
*
* - vrifier l'tat de la fifo de sortie avant d'y stocker les samples
* dcods ;
* - vlc_cond_signal() / vlc_cond_wait()
*
*/
/***************************************************************************** /*****************************************************************************
* Preamble * Preamble
*****************************************************************************/ *****************************************************************************/
......
...@@ -5,7 +5,10 @@ ...@@ -5,7 +5,10 @@
/* /*
* TODO : * TODO :
* - Optimiser les NeedBits() et les GetBits() du code l o c'est possible *
* - optimiser les NeedBits() et les GetBits() du code l o c'est possible ;
* - vlc_cond_signal() / vlc_cond_wait() ;
*
*/ */
/****************************************************************************** /******************************************************************************
...@@ -855,6 +858,7 @@ static void RunThread( adec_thread_t * p_adec ) ...@@ -855,6 +858,7 @@ static void RunThread( adec_thread_t * p_adec )
if ( adec_Layer2_Stereo(p_adec) ) if ( adec_Layer2_Stereo(p_adec) )
{ {
vlc_mutex_lock( &p_adec->p_aout_fifo->data_lock ); vlc_mutex_lock( &p_adec->p_aout_fifo->data_lock );
/* Frame 1 */ /* Frame 1 */
p_adec->p_aout_fifo->l_end_frame = (p_adec->p_aout_fifo->l_end_frame + 1) & AOUT_FIFO_SIZE; p_adec->p_aout_fifo->l_end_frame = (p_adec->p_aout_fifo->l_end_frame + 1) & AOUT_FIFO_SIZE;
/* Frame 2 */ /* Frame 2 */
...@@ -872,6 +876,9 @@ static void RunThread( adec_thread_t * p_adec ) ...@@ -872,6 +876,9 @@ static void RunThread( adec_thread_t * p_adec )
/* Frame 6 */ /* Frame 6 */
p_adec->p_aout_fifo->date[p_adec->p_aout_fifo->l_end_frame] = LAST_MDATE; p_adec->p_aout_fifo->date[p_adec->p_aout_fifo->l_end_frame] = LAST_MDATE;
p_adec->p_aout_fifo->l_end_frame = (p_adec->p_aout_fifo->l_end_frame + 1) & AOUT_FIFO_SIZE; p_adec->p_aout_fifo->l_end_frame = (p_adec->p_aout_fifo->l_end_frame + 1) & AOUT_FIFO_SIZE;
vlc_cond_signal( &p_adec->p_aout_fifo->data_wait );
vlc_mutex_unlock( &p_adec->p_aout_fifo->data_lock ); vlc_mutex_unlock( &p_adec->p_aout_fifo->data_lock );
} }
} }
......
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
* chaque boucle * chaque boucle
* = Utiliser des tables pour les gros calculs * = Utiliser des tables pour les gros calculs
* - Faire une structure diffrente pour intf/adec fifo * - Faire une structure diffrente pour intf/adec fifo
* - Rajouter des vlc_cond_signal ?
* *
*/ */
...@@ -158,7 +157,7 @@ static int aout_SpawnThread( aout_thread_t * p_aout ) ...@@ -158,7 +157,7 @@ static int aout_SpawnThread( aout_thread_t * p_aout )
* AOUT_BUFFER_DURATION is given in microseconds, the output rate is given * AOUT_BUFFER_DURATION is given in microseconds, the output rate is given
* in Hz, that's why we need to divide by 10^6 microseconds (1 second) */ * in Hz, that's why we need to divide by 10^6 microseconds (1 second) */
p_aout->l_units = (long)( ((s64)p_aout->dsp.l_rate * AOUT_BUFFER_DURATION) / 1000000 ); p_aout->l_units = (long)( ((s64)p_aout->dsp.l_rate * AOUT_BUFFER_DURATION) / 1000000 );
p_aout->l_msleep = ((s64)p_aout->l_units * 1000000) / (s64)p_aout->dsp.l_rate; p_aout->l_msleep = (long)( ((s64)p_aout->l_units * 1000000) / (s64)p_aout->dsp.l_rate );
/* Make aout_thread point to the right thread function, and compute the /* Make aout_thread point to the right thread function, and compute the
* byte size of the audio output buffer */ * byte size of the audio output buffer */
...@@ -465,134 +464,52 @@ static __inline__ int NextFrame( aout_thread_t * p_aout, aout_fifo_t * p_fifo, m ...@@ -465,134 +464,52 @@ static __inline__ int NextFrame( aout_thread_t * p_aout, aout_fifo_t * p_fifo, m
} }
} }
#if 0
if ( aout_date < p_fifo->date[p_fifo->l_start_frame] - 100000 )
{
fprintf( stderr, "-" );
p_fifo->l_dr = 0;
vlc_mutex_unlock( &p_fifo->data_lock );
return( -1 );
}
#endif
/* We are looking for the next dated frame */ /* We are looking for the next dated frame */
while ( 1 ) while ( 1 )
{ {
while ( p_fifo->l_next_frame != p_fifo->l_end_frame ) while ( p_fifo->l_next_frame != p_fifo->l_end_frame )
{
if ( p_fifo->date[p_fifo->l_next_frame] != LAST_MDATE )
{ {
#if 0 if ( p_fifo->date[p_fifo->l_next_frame] != LAST_MDATE )
if ( p_fifo->date[p_fifo->l_start_frame] >= p_fifo->date[p_fifo->l_next_frame] )
{
fprintf( stderr, "aout debug: %lli >= %lli\n", p_fifo->date[p_fifo->l_start_frame], p_fifo->date[p_fifo->l_next_frame] );
p_fifo->date[p_fifo->l_start_frame] = p_fifo->date[p_fifo->l_next_frame] - ((1000000 * ((mtime_t)(p_fifo->l_frame_size * ((p_fifo->l_next_frame - p_fifo->l_start_frame) & AOUT_FIFO_SIZE))) >> p_fifo->b_stereo) / ((mtime_t)p_fifo->l_rate));
}
else if ( (p_fifo->date[p_fifo->l_next_frame] - p_fifo->date[p_fifo->l_start_frame]) > 1000000 )
{
fprintf( stderr, "aout debug: (%lli - %lli) > 1000000\n", p_fifo->date[p_fifo->l_next_frame], p_fifo->date[p_fifo->l_start_frame] );
p_fifo->date[p_fifo->l_start_frame] = p_fifo->date[p_fifo->l_next_frame] - ((1000000 * ((mtime_t)(p_fifo->l_frame_size * ((p_fifo->l_next_frame - p_fifo->l_start_frame) & AOUT_FIFO_SIZE))) >> p_fifo->b_stereo) / ((mtime_t)p_fifo->l_rate));
}
#endif
#if 0
if ( aout_date < p_fifo->date[p_fifo->l_next_frame] + 100000 )
{ {
#endif
p_fifo->b_next_frame = 1; p_fifo->b_next_frame = 1;
break; break;
#if 0
} }
else else
{ {
fprintf( stderr, "+" ); p_fifo->l_next_frame = (p_fifo->l_next_frame + 1) & AOUT_FIFO_SIZE;
// p_fifo->b_next_frame = 1;
// break;
p_fifo->l_start_frame = p_fifo->l_next_frame;
p_fifo->l_unit = p_fifo->l_start_frame * (p_fifo->l_frame_size >> p_fifo->b_stereo);
p_fifo->l_dr = 0;
} }
#endif
} }
p_fifo->l_next_frame = (p_fifo->l_next_frame + 1) & AOUT_FIFO_SIZE;
} if ( p_fifo->b_next_frame == 1 )
if ( p_fifo->l_next_frame == p_fifo->l_end_frame )
{
if ( (((p_fifo->l_end_frame + 1) - p_fifo->l_start_frame) & AOUT_FIFO_SIZE) == 0 )
{ {
fprintf( stderr, "aout debug: synkro suxx rocks;\n" ); break;
p_fifo->l_start_frame = 0; }
p_fifo->b_start_frame = 0; else
/* p_fifo->l_next_frame = 0; */
/* p_fifo->b_next_frame = 0; */
p_fifo->l_end_frame = 0;
vlc_mutex_unlock( &p_fifo->data_lock );
return( -1 );
}
while ( p_fifo->l_next_frame == p_fifo->l_end_frame )
{
vlc_cond_wait(&p_fifo->data_wait, &p_fifo->data_lock);
}
}
else
{
break;
}
}
#if 0
if ( p_fifo->l_next_frame == p_fifo->l_end_frame )
{
fprintf( stderr, "aout debug: synkro suxx rocks (%li);\n", p_fifo->l_dr );
if ( (((p_fifo->l_end_frame + 1) - p_fifo->l_start_frame) & AOUT_FIFO_SIZE) == 0 )
{ {
p_fifo->l_start_frame = 0; if ( (((p_fifo->l_end_frame + 1) - p_fifo->l_start_frame) & AOUT_FIFO_SIZE) == 0 )
p_fifo->b_start_frame = 0; {
/* p_fifo->l_next_frame = 0; */ p_fifo->l_start_frame = 0;
/* p_fifo->b_next_frame = 0; */ p_fifo->b_start_frame = 0;
p_fifo->l_end_frame = 0; /* p_fifo->l_next_frame = 0; */
/* p_fifo->b_next_frame = 0; */
p_fifo->l_end_frame = 0;
vlc_mutex_unlock( &p_fifo->data_lock );
return( -1 );
}
else
{
while ( p_fifo->l_next_frame == p_fifo->l_end_frame )
{
vlc_cond_wait( &p_fifo->data_wait, &p_fifo->data_lock );
}
}
} }
vlc_mutex_unlock( &p_fifo->data_lock );
return( -1 );
} }
#endif
l_units = ((p_fifo->l_next_frame - p_fifo->l_start_frame) & AOUT_FIFO_SIZE) * (p_fifo->l_frame_size >> p_fifo->b_stereo); l_units = ((p_fifo->l_next_frame - p_fifo->l_start_frame) & AOUT_FIFO_SIZE) * (p_fifo->l_frame_size >> p_fifo->b_stereo);
// fprintf( stderr, "%li", p_fifo->l_unit - (p_fifo->l_start_frame * (p_fifo->l_frame_size >> p_fifo->b_stereo)) );
#if 0
// fprintf( stderr, "aout debug: %lli;\n", aout_date - p_fifo->date[p_fifo->l_start_frame] );
if ( /*(p_fifo->date[p_fifo->l_start_frame] < aout_date) &&*/ (aout_date < p_fifo->date[p_fifo->l_next_frame]) )
{
fprintf( stderr, "*" );
l_rate = (long)(((mtime_t)l_units * 1000000) / (p_fifo->date[p_fifo->l_next_frame] - aout_date));
}
else
{
l_rate = (long)(((mtime_t)l_units * 1000000) / (p_fifo->date[p_fifo->l_next_frame] - p_fifo->date[p_fifo->l_start_frame]));
}
#endif
// l_rate = (long)( ((mtime_t)l_units * 1000000) / (p_fifo->date[p_fifo->l_next_frame] - ((p_fifo->date[p_fifo->l_start_frame] + aout_date) / 2)) );
// fprintf( stderr, "aout debug: l_rate == %li;\n", l_rate );
// fprintf( stderr, "aout debug: %li;\n", l_rate );
// fprintf( stderr, "aout debug: %lli, %li, %lli;\n", aout_date - p_fifo->date[p_fifo->l_start_frame], p_fifo->l_unit - (p_fifo->l_start_frame * (p_fifo->l_frame_size >> p_fifo->b_stereo)), p_fifo->date[p_fifo->l_next_frame] - aout_date );
/*
if ( aout_date < p_fifo->date[p_fifo->l_start_frame] )
{
p_fifo->l_dr -= 1;
}
else if ( p_fifo->date[p_fifo->l_start_frame] < aout_date )
{
p_fifo->l_dr += 1;
}
*/
l_rate = p_fifo->l_rate + ((aout_date - p_fifo->date[p_fifo->l_start_frame]) / 8); l_rate = p_fifo->l_rate + ((aout_date - p_fifo->date[p_fifo->l_start_frame]) / 8);
// l_rate = (long)(((mtime_t)l_units * 1000000) / (p_fifo->date[p_fifo->l_next_frame] - p_fifo->date[p_fifo->l_start_frame])) + p_fifo->l_dr; // fprintf( stderr, "aout debug: %lli;\n", aout_date - p_fifo->date[p_fifo->l_start_frame] );
// fprintf( stderr, "aout debug: l_rate == %li (%lli);\n", l_rate /*+ p_fifo->l_dr*/, aout_date - p_fifo->date[p_fifo->l_start_frame] );
// p_fifo->delta += aout_date - p_fifo->date[p_fifo->l_start_frame];
// p_fifo->n += 1;
// fprintf( stderr, "aout debug: %lli, %lli, %li;\n", aout_date - p_fifo->date[p_fifo->l_start_frame], p_fifo->delta/p_fifo->n, l_rate );
InitializeIncrement( &p_fifo->unit_increment, l_rate, p_aout->dsp.l_rate ); InitializeIncrement( &p_fifo->unit_increment, l_rate, p_aout->dsp.l_rate );
...@@ -884,28 +801,6 @@ void aout_Thread_S16_Stereo( aout_thread_t * p_aout ) ...@@ -884,28 +801,6 @@ void aout_Thread_S16_Stereo( aout_thread_t * p_aout )
{ {
msleep( p_aout->l_msleep ); msleep( p_aout->l_msleep );
} }
#if 0
if ( p_aout->dsp.buf_info.fragments == p_aout->dsp.buf_info.fragstotal ) /* ?? */
{
p_aout->date = mdate();
aout_dspPlaySamples( &p_aout->dsp, (byte_t *)p_aout->buffer, sizeof(s16) * l_buffer_limit );
}
else if ( p_aout->dsp.buf_info.bytes >=
((p_aout->dsp.buf_info.fragsize * p_aout->dsp.buf_info.fragstotal) -
(sizeof(s16) * l_buffer_limit)) )
{
aout_dspPlaySamples( &p_aout->dsp, (byte_t *)p_aout->buffer, sizeof(s16) * l_buffer_limit );
}
else
{
fprintf( stderr, "%lli\n", mdate() - date );
date = mdate();
aout_dspPlaySamples( &p_aout->dsp, (byte_t *)p_aout->buffer, sizeof(s16) * l_buffer_limit );
// fprintf( stderr, "%lli\n", (date + ((((mtime_t)((p_aout->dsp.buf_info.fragstotal * p_aout->dsp.buf_info.fragsize - p_aout->dsp.buf_info.bytes) / 4)) * 1000000)/((mtime_t)p_aout->dsp.l_rate))) - p_aout->date );
msleep( p_aout->date_increment.l_euclidean_integer );
}
UPDATE_INCREMENT( p_aout->date_increment, p_aout->date )
#endif
} }
vlc_mutex_lock( &p_aout->fifos_lock ); vlc_mutex_lock( &p_aout->fifos_lock );
......
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