From 0a883937783c5480d293b2eb6662071b6ae49358 Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Tue, 22 Aug 2000 00:13:26 +0000 Subject: [PATCH] * added a few sanity checks in the audio mpeg and ac3 decoders. * temporarily got rid of vlc.channels. * added notice in debian/control about unencrypted DVDs. * fixed PowerPC .deb build. --- ChangeLog | 19 ++++-- Makefile.in | 4 +- configure | 2 +- configure.in | 2 +- debian/changelog | 15 +++++ debian/control | 8 +-- src/ac3_decoder/ac3_decoder_thread.c | 85 ++++++++++++++++-------- src/audio_decoder/audio_decoder_thread.c | 7 +- src/interface/interface.c | 3 + vlc.channels | 5 -- 10 files changed, 103 insertions(+), 47 deletions(-) delete mode 100644 vlc.channels diff --git a/ChangeLog b/ChangeLog index 7f9d9ec272..90e0fa2fbd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,4 @@ +Tue, 22 Aug 2000 01:31:58 +0200 0.1.99h : * fixed the sound issue under beos @@ -15,8 +16,12 @@ * fixed a Makefile bug which removed the CVS directory. * removed the frame statistics output. * removed a verbose message in intf_sdl.c. + * added a few sanity checks in the audio mpeg and ac3 decoders. + * temporarily got rid of vlc.channels. + * added notice in debian/control about unencrypted DVDs. + * fixed PowerPC .deb build. -Wed Aug 16 01:07:14 CEST 2000 +Wed, 16 Aug 2000 01:07:14 +0200 0.1.99g : * removed all "*vlc" aliases except "gvlc" and "fbvlc". The other sucked. @@ -35,7 +40,7 @@ Wed Aug 16 01:07:14 CEST 2000 * added request for ALSA support in the TODO list. * changed "pentiumpro" to "ppro" in the ./configure, it was misleading. -Tue Aug 8 11:24:01 CEST 2000 +Tue, 8 Aug 2000 11:24:01 +0200 0.1.99f : * plugin detection now works @@ -47,14 +52,14 @@ Tue Aug 8 11:24:01 CEST 2000 * borrowed linuxvideo's MMX motion compensation * fixed an undefined symbol in the MMX YUV plugin -Thu Jul 20 15:14:06 CEST 2000 +Thu, 20 Jul 2000 15:14:06 +0200 0.1.99e : * new bitstream syntax and slight performance increase * BeOS build fix * removed the sample code from the reference decoder -Wed Jul 12 01:24:40 CEST 2000 +Wed, 12 Jul 2000 01:24:40 +0200 0.1.99d : * fixed RPM build @@ -77,7 +82,7 @@ Wed Jul 12 01:24:40 CEST 2000 * fixed an endianness problem which occured on iMacs * fixed the build for the Mandrake distribution -Sun Jun 18 18:54:48 CEST 2000 +Sun, 18 Jun 2000 18:54:48 +0200 0.1.99c : * fixed Makefile.in for debug version @@ -90,14 +95,14 @@ Sun Jun 18 18:54:48 CEST 2000 * fixed a warning in ac3_exponent.c * automatic support for .rpm and .deb building -Sat Jun 17 03:35:02 CEST 2000 +Sat, 17 Jun 2000 03:35:02 +0200 0.1.99b : * fixed a bug preventing to quit when run with no arguments * new VLAN changing code * created the ChangeLog file :) -Thu Jun 15 20:48:54 CEST 2000 +Thu, 15 Jun 2000 20:48:54 +0200 0.1.99a : * first public release diff --git a/Makefile.in b/Makefile.in index 1e4002acf8..72bd707885 100644 --- a/Makefile.in +++ b/Makefile.in @@ -369,7 +369,7 @@ distclean: clean rm -f config.status config.cache config.log rm -f gmon.out core build-stamp rm -rf .dep - rm -rf debian/tmp debian/*.debhelper debian/*.substvars + rm -rf debian/tmp debian/files debian/*.debhelper debian/*.substvars find debian/* -type d -maxdepth 0 -name 'vlc-*' | xargs rm -rf install: @@ -392,7 +392,7 @@ show: snapshot: rm -rf /tmp/${SNAPSHOTDIR} mkdir /tmp/${SNAPSHOTDIR} - cp -r * /tmp/${SNAPSHOTDIR} + cp -a * /tmp/${SNAPSHOTDIR} (cd /tmp/${SNAPSHOTDIR} ; \ make distclean ; \ find . -type d -name CVS | xargs rm -rf ; \ diff --git a/configure b/configure index 7cecea7141..3e89a9ef86 100755 --- a/configure +++ b/configure @@ -3055,7 +3055,7 @@ fi # Check whether --enable-mmx or --disable-mmx was given. if test "${enable_mmx+set}" = set; then enableval="$enable_mmx" - if test x$enableval = xyes; then ARCH=${ARCH}" mmx"; PLUGINS=${PLUGINS}"yuvmmx "; fi + if test x`echo $ARCH | cut -b3-4` = x86 ; then if test x$enableval = xyes; then ARCH=${ARCH}" mmx"; PLUGINS=${PLUGINS}"yuvmmx "; fi; fi fi diff --git a/configure.in b/configure.in index 834a9f6e39..6530bba7e3 100644 --- a/configure.in +++ b/configure.in @@ -67,7 +67,7 @@ AC_ARG_ENABLE(ppro, [ if test x$enableval = xyes; then ARCH=${ARCH}" ppro"; fi ]) AC_ARG_ENABLE(mmx, [ --enable-mmx Enable MMX optimizations (default is no)], -[ if test x$enableval = xyes; then ARCH=${ARCH}" mmx"; PLUGINS=${PLUGINS}"yuvmmx "; fi ]) +[ if test x`echo $ARCH | cut -b3-4` = x86 ; then if test x$enableval = xyes; then ARCH=${ARCH}" mmx"; PLUGINS=${PLUGINS}"yuvmmx "; fi; fi ]) SYS=${host_os} diff --git a/debian/changelog b/debian/changelog index 6f1b79ec88..e383afa861 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,18 @@ +vlc (0.1.99h) unstable; urgency=low + + * added support for the SDL vout : the --display fullscreen allows + fullscreen when possible. Disabled by default. + * updated debian directory to build vlc-sdl. + * removed CCFLAGS flags which were improperly used. + * added hints for powerpc build. + * fixed the input_file exit bug. + * removed the frame statistics output. + * removed a verbose message in intf_sdl.c. + * added a few sanity checks in the audio mpeg and ac3 decoders. + * temporarily got rid of vlc.channels. + + -- Samuel Hocevar Tue, 22 Aug 2000 01:31:58 +0200 + vlc (0.1.99g) unstable; urgency=low * removed all "*vlc" aliases except "gvlc" and "fbvlc". The other sucked. diff --git a/debian/control b/debian/control index f84af33e10..55e830fb7b 100644 --- a/debian/control +++ b/debian/control @@ -10,8 +10,8 @@ Depends: ${shlibs:Depends} Description: VideoLAN Client - a free MPEG2 and DVD player VideoLAN is a free MPEG2 software solution. . - This is the VideoLAN Client. It plays MPEG2 files, DVDs, or MPEG2 - streams from a network source. + This is the VideoLAN Client. It plays MPEG2 files, unencrypted DVDs, + or MPEG2 streams from a network source. Package: vlc-gnome Architecture: any @@ -20,7 +20,7 @@ Description: Gnome VideoLAN Client - a free MPEG2 and DVD player for Gnome VideoLAN is a free MPEG2 software solution. . This is the Gnome version of the VideoLAN Client. It plays MPEG2 files, - DVDs, or MPEG2 streams from a network source. + unencrypted DVDs, or MPEG2 streams from a network source. Package: vlc-fb Architecture: any @@ -29,7 +29,7 @@ Description: Framebuffer VideoLAN Client - a free MPEG2 and DVD player VideoLAN is a free MPEG2 software solution. . This is the Linux framebuffer version of the VideoLAN Client. It plays - MPEG2 files, DVDs, or MPEG2 streams from a network source. + MPEG2 files, unencrypted DVDs, or MPEG2 streams from a network source. Package: vlc-ggi Architecture: any diff --git a/src/ac3_decoder/ac3_decoder_thread.c b/src/ac3_decoder/ac3_decoder_thread.c index ba950ff1e5..cf6f1c76ab 100644 --- a/src/ac3_decoder/ac3_decoder_thread.c +++ b/src/ac3_decoder/ac3_decoder_thread.c @@ -79,7 +79,8 @@ ac3dec_thread_t * ac3dec_CreateThread (input_thread_t * p_input) intf_DbgMsg( "ac3dec debug: creating ac3 decoder thread\n" ); /* Allocate the memory needed to store the thread's structure */ - if ((p_ac3dec = (ac3dec_thread_t *)malloc (sizeof(ac3dec_thread_t))) == NULL) { + if ((p_ac3dec = (ac3dec_thread_t *)malloc (sizeof(ac3dec_thread_t))) == NULL) + { intf_ErrMsg ( "ac3dec error: not enough memory " "for ac3dec_CreateThread() to create the new thread\n"); return NULL; @@ -114,7 +115,8 @@ ac3dec_thread_t * ac3dec_CreateThread (input_thread_t * p_input) p_ac3dec->p_aout_fifo = NULL; /* Spawn the ac3 decoder thread */ - if (vlc_thread_create(&p_ac3dec->thread_id, "ac3 decoder", (vlc_thread_func_t)RunThread, (void *)p_ac3dec)) { + if (vlc_thread_create(&p_ac3dec->thread_id, "ac3 decoder", (vlc_thread_func_t)RunThread, (void *)p_ac3dec)) + { intf_ErrMsg( "ac3dec error: can't spawn ac3 decoder thread\n" ); free (p_ac3dec); return NULL; @@ -159,8 +161,10 @@ static int InitThread (ac3dec_thread_t * p_ac3dec) /* Our first job is to initialize the bit stream structure with the * beginning of the input stream */ vlc_mutex_lock (&p_ac3dec->fifo.data_lock); - while (DECODER_FIFO_ISEMPTY(p_ac3dec->fifo)) { - if (p_ac3dec->b_die) { + while (DECODER_FIFO_ISEMPTY(p_ac3dec->fifo)) + { + if (p_ac3dec->b_die) + { vlc_mutex_unlock (&p_ac3dec->fifo.data_lock); return -1; } @@ -182,7 +186,8 @@ static int InitThread (ac3dec_thread_t * p_ac3dec) aout_fifo.l_frame_size = AC3DEC_FRAME_SIZE; /* Creating the audio output fifo */ - if ((p_ac3dec->p_aout_fifo = aout_CreateFifo(p_ac3dec->p_aout, &aout_fifo)) == NULL) { + if ((p_ac3dec->p_aout_fifo = aout_CreateFifo(p_ac3dec->p_aout, &aout_fifo)) == NULL) + { return -1; } @@ -202,7 +207,8 @@ static void RunThread (ac3dec_thread_t * p_ac3dec) msleep (INPUT_PTS_DELAY); /* Initializing the ac3 decoder thread */ - if (InitThread (p_ac3dec)) /* XXX?? */ { + if (InitThread (p_ac3dec)) /* XXX?? */ + { p_ac3dec->b_error = 1; } @@ -211,7 +217,8 @@ static void RunThread (ac3dec_thread_t * p_ac3dec) /* ac3 decoder thread's main loop */ /* FIXME : do we have enough room to store the decoded frames ?? */ - while ((!p_ac3dec->b_die) && (!p_ac3dec->b_error)) { + while ((!p_ac3dec->b_die) && (!p_ac3dec->b_error)) + { s16 * buffer; ac3_sync_info_t sync_info; @@ -224,35 +231,51 @@ static void RunThread (ac3dec_thread_t * p_ac3dec) p_byte_stream = ac3_byte_stream (&p_ac3dec->ac3_decoder); /* first read till next ac3 magic header */ - do { + do + { ac3_byte_stream_next (p_byte_stream); } while ((!p_ac3dec->sync_ptr) && (!p_ac3dec->b_die) && (!p_ac3dec->b_error)); /* skip the specified number of bytes */ + if( p_ac3dec->b_die || p_ac3dec->b_error ) + { + goto bad_frame; + } + ptr = p_ac3dec->sync_ptr; - while (--ptr && (!p_ac3dec->b_die) && (!p_ac3dec->b_error)) { - if (p_byte_stream->p_byte >= p_byte_stream->p_end) { + while (--ptr && (!p_ac3dec->b_die) && (!p_ac3dec->b_error)) + { + if (p_byte_stream->p_byte >= p_byte_stream->p_end) + { ac3_byte_stream_next (p_byte_stream); } p_byte_stream->p_byte++; } - /* we are in sync now */ + if( p_ac3dec->b_die || p_ac3dec->b_error ) + { + goto bad_frame; + } + /* we are in sync now */ sync = 1; p_ac3dec->sync_ptr = 0; } - if (DECODER_FIFO_START(p_ac3dec->fifo)->b_has_pts) { + if (DECODER_FIFO_START(p_ac3dec->fifo)->b_has_pts) + { p_ac3dec->p_aout_fifo->date[p_ac3dec->p_aout_fifo->l_end_frame] = DECODER_FIFO_START(p_ac3dec->fifo)->i_pts; DECODER_FIFO_START(p_ac3dec->fifo)->b_has_pts = 0; - } else { + } + else + { p_ac3dec->p_aout_fifo->date[p_ac3dec->p_aout_fifo->l_end_frame] = LAST_MDATE; } - if (ac3_sync_frame (&p_ac3dec->ac3_decoder, &sync_info)) { + if (ac3_sync_frame (&p_ac3dec->ac3_decoder, &sync_info)) + { sync = 0; goto bad_frame; } @@ -261,7 +284,8 @@ static void RunThread (ac3dec_thread_t * p_ac3dec) buffer = ((s16 *)p_ac3dec->p_aout_fifo->buffer) + (p_ac3dec->p_aout_fifo->l_end_frame * AC3DEC_FRAME_SIZE); - if (ac3_decode_frame (&p_ac3dec->ac3_decoder, buffer)) { + if (ac3_decode_frame (&p_ac3dec->ac3_decoder, buffer)) + { sync = 0; goto bad_frame; } @@ -275,7 +299,8 @@ static void RunThread (ac3dec_thread_t * p_ac3dec) } /* If b_error is set, the ac3 decoder thread enters the error loop */ - if (p_ac3dec->b_error) { + if (p_ac3dec->b_error) + { ErrorThread (p_ac3dec); } @@ -293,9 +318,11 @@ static void ErrorThread (ac3dec_thread_t * p_ac3dec) vlc_mutex_lock (&p_ac3dec->fifo.data_lock); /* Wait until a `die' order is sent */ - while (!p_ac3dec->b_die) { + while (!p_ac3dec->b_die) + { /* Trash all received PES packets */ - while (!DECODER_FIFO_ISEMPTY(p_ac3dec->fifo)) { + while (!DECODER_FIFO_ISEMPTY(p_ac3dec->fifo)) + { input_NetlistFreePES (p_ac3dec->p_input, DECODER_FIFO_START(p_ac3dec->fifo)); DECODER_FIFO_INCSTART (p_ac3dec->fifo); } @@ -316,7 +343,8 @@ static void EndThread (ac3dec_thread_t * p_ac3dec) intf_DbgMsg ("ac3dec debug: destroying ac3 decoder thread %p\n", p_ac3dec); /* If the audio output fifo was created, we destroy it */ - if (p_ac3dec->p_aout_fifo != NULL) { + if (p_ac3dec->p_aout_fifo != NULL) + { aout_DestroyFifo (p_ac3dec->p_aout_fifo); /* Make sure the output thread leaves the NextFrame() function */ @@ -337,10 +365,12 @@ void ac3_byte_stream_next (ac3_byte_stream_t * p_byte_stream) /* We are looking for the next TS packet that contains real data, * and not just a PES header */ - do { + do + { /* We were reading the last TS packet of this PES packet... It's * time to jump to the next PES packet */ - if (p_ac3dec->p_ts->p_next_ts == NULL) { + if (p_ac3dec->p_ts->p_next_ts == NULL) + { int ptr; /* We are going to read/write the start and end indexes of the @@ -349,7 +379,8 @@ void ac3_byte_stream_next (ac3_byte_stream_t * p_byte_stream) vlc_mutex_lock (&p_ac3dec->fifo.data_lock); /* Is the input thread dying ? */ - if (p_ac3dec->p_input->b_die) { + if (p_ac3dec->p_input->b_die) + { vlc_mutex_unlock (&(p_ac3dec->fifo.data_lock)); return; } @@ -363,10 +394,12 @@ void ac3_byte_stream_next (ac3_byte_stream_t * p_byte_stream) DECODER_FIFO_INCSTART (p_ac3dec->fifo); - while (DECODER_FIFO_ISEMPTY(p_ac3dec->fifo)) { + while (DECODER_FIFO_ISEMPTY(p_ac3dec->fifo)) + { vlc_cond_wait (&p_ac3dec->fifo.data_wait, &p_ac3dec->fifo.data_lock); - if (p_ac3dec->p_input->b_die) { + if (p_ac3dec->p_input->b_die) + { vlc_mutex_unlock (&(p_ac3dec->fifo.data_lock)); return; } @@ -385,10 +418,10 @@ void ac3_byte_stream_next (ac3_byte_stream_t * p_byte_stream) /* We can release the fifo's data lock */ vlc_mutex_unlock (&p_ac3dec->fifo.data_lock); } - /* Perhaps the next TS packet of the current PES packet contains * real data (ie its payload's size is greater than 0) */ - else { + else + { p_ac3dec->p_ts = p_ac3dec->p_ts->p_next_ts; } } while (p_ac3dec->p_ts->i_payload_start == p_ac3dec->p_ts->i_payload_end); diff --git a/src/audio_decoder/audio_decoder_thread.c b/src/audio_decoder/audio_decoder_thread.c index cfa80bb395..df739a124f 100644 --- a/src/audio_decoder/audio_decoder_thread.c +++ b/src/audio_decoder/audio_decoder_thread.c @@ -245,9 +245,14 @@ static void RunThread (adec_thread_t * p_adec) do { adec_byte_stream_next ( p_byte_stream ); - } while ( 0 && (!p_adec->align) && (!p_adec->b_die) + } while ( (!p_adec->align) && (!p_adec->b_die) && (!p_adec->b_error) ); + if( p_adec->b_die || p_adec->b_error ) + { + goto bad_frame; + } + sync = 1; } diff --git a/src/interface/interface.c b/src/interface/interface.c index ce8aa8a7bc..453abfefa6 100644 --- a/src/interface/interface.c +++ b/src/interface/interface.c @@ -509,6 +509,9 @@ static int LoadChannels( intf_thread_t *p_intf, char *psz_filename ) /* Set default value */ p_intf->p_channel = NULL; + /* FIXME: channels are disabled */ + return( 0 ); + /* Open file */ p_file = fopen( psz_filename, "r" ); if( p_file == NULL ) diff --git a/vlc.channels b/vlc.channels deleted file mode 100644 index 7229d1eea5..0000000000 --- a/vlc.channels +++ /dev/null @@ -1,5 +0,0 @@ -0;Ptyx (caribou);20;caribou.via.ecp.fr; -1;Sam (bofh);20;bofh.via.ecp.fr; -2;Polux (dressler);20;dressler.via.ecp.fr; -3;Stef (kim);20;kim.via.ecp.fr; -#4;File;10;/home/sam/videolan/flux/bandesannonce.vob;