diff options
author | Klaus Schmidinger <kls (at) cadsoft (dot) de> | 2002-02-24 18:00:00 +0100 |
---|---|---|
committer | Klaus Schmidinger <kls (at) cadsoft (dot) de> | 2002-02-24 18:00:00 +0100 |
commit | fb8e7fa302ef8a73feb6958b0cb32cc54f76e677 (patch) | |
tree | 74cf9dd5cd1892aaf1c05db32796eb356d7bc860 /ac3dec/decode.c | |
parent | a1da0e5c5de55009716e2c327dda16c61c1dae83 (diff) | |
download | vdr-patch-lnbsharing-fb8e7fa302ef8a73feb6958b0cb32cc54f76e677.tar.gz vdr-patch-lnbsharing-fb8e7fa302ef8a73feb6958b0cb32cc54f76e677.tar.bz2 |
Version 1.0.0pre1vdr-1.0.0pre1
- Added scanning for EPG data for another 4 days on channels that support this
(thanks to Oleg Assovski).
- Removed '#define VFAT 1' from recording.c (was a leftover from testing).
- Fixed the "Low disk space!" message (thanks to Sergei Haller).
- Added the TPID to Hessen-3 in 'channels.conf' (thanks to Sergei Haller).
- Fixed a crash when replaying with DEBUG_OSD=1 (thanks to Stefan Huelswitt).
- Implemented the "First day" parameter for repeating timers. See FORMATS for
information about the enhanced 'timers.conf' file format, and MANUAL for
a description of the new item in the "Edit Timer" menu and the enhanced
functionality of the "Blue" button in the "Timers" menu.
- When deleting a recording that is currently still being recorded, the related
timer will now automatically be terminated. If this is a repeating timer, it
will receive a "First day" setting that skips the timer for this day.
- Fixed closing all unused file descriptors when opening a pipe (thanks to
Werner Fink).
- Instant recordings now take the EPG data from the point in time at 5 minutes
from the start time of the recording. In order for this to work the 'active'
parameter of a timer now uses the second bit to indicate that this is an
"instant" recording (see FORMATS for details).
- Fixed the SVDRP GRAB command in case the video device can't be opened (thanks
to Adrian Stabiszewski).
- At startup the data written into 'epg.data' is now read into the EPG data
structures. In order for this to work, the 'E' record has been extended to
(optionally) contain the 'table ID' (see FORMATS for details).
- The new SVDRP command PUTE can be used to put EPG data into the EPG list.
See FORMATS for details about the required data format.
- Taking the German umlauts 'as is' when compiled with VFAT.
- The new Setup parameter RecordDolbyDigital can be used to generally turn off
recording the Dolby Digital audio channels in case you want to save disk space
or don't have the equipment to replay Dolby Digital audio.
- Reading the 'setup.conf' file no longer terminates in case of an error, but
rather attempts to read the rest of the file.
- Removed DVD support from the core VDR source, since the current version from
Andreas Schultz is already much further developed (DVD menu navigation) and
the concept of "additional players" in VDR is going to change in version 1.1.0,
where a new "plugin" interface shall allow the easy implementation of new
players without having to patch the core VDR source. Until then, Andreas has
agreed to provide his DVD support as a completely external patch.
- The contents of the distribution archive now contains the directory name with
the current version number, as in 'vdr-1.0.0pre1/...' in order to avoid
inadvertently overwriting an existing VDR directory with a new version.
- Added a missing error message in SVDRP command LSTC in case the given channel
can't be found.
Diffstat (limited to 'ac3dec/decode.c')
-rw-r--r-- | ac3dec/decode.c | 312 |
1 files changed, 0 insertions, 312 deletions
diff --git a/ac3dec/decode.c b/ac3dec/decode.c deleted file mode 100644 index 1ff517c..0000000 --- a/ac3dec/decode.c +++ /dev/null @@ -1,312 +0,0 @@ -/* - * decode.c - * - * Copyright (C) Aaron Holtzman - May 1999 - * - * This file is part of ac3dec, a free Dolby AC-3 stream decoder. - * - * ac3dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * ac3dec is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - *------------------------------------------------------------ - * - * Thomas Mirlacher <dent@cosy.sbg.ac.at> - * added OMS support - * 11 Jan 2001 - * Thomas Mirlacher <dent@cosy.sbg.ac.at> - * faster error response using jmp functions - * - * 9 Aug 2001 - * Matjaz Thaler <matjaz.thaler@rd.iskraemeco.si> - * Added support for DVB-s PCI card - * - * 24 Nov 2001 - * Andreas Schultz <aschultz@cs.uni-magdeburg.de> - * Added ac3_buffersize() - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <stdlib.h> -#include <stdio.h> -#include <errno.h> -#include <string.h> -#include <sys/time.h> - -#ifdef __OMS__ -#include <oms/oms.h> -#include <oms/plugin/output_audio.h> -#endif - -#include "ac3.h" -#include "ac3_internal.h" -#include "bitstream.h" -#include "downmix.h" -#include "srfft.h" -#include "imdct.h" -#include "exponent.h" -#include "coeff.h" -#include "bit_allocate.h" -#include "parse.h" -#include "crc.h" -#include "stats.h" -#include "rematrix.h" -#include "sanity_check.h" -#include "debug.h" -#ifndef __OMS__ -//#include "audio_out.h" -#endif -//our global config structure -ac3_config_t ac3_config; - -static audblk_t audblk; -static bsi_t bsi; -static syncinfo_t syncinfo; -#ifndef __OMS__ -static uint32_t done_banner; -#endif -static uint32_t is_output_initialized = 0; - -//the floating point samples for one audblk -static stream_samples_t samples; - -//the integer samples for the entire frame (with enough space for 2 ch out) -//if this size change, be sure to change the size when muting -static int16_t s16_samples[2 * 6 * 256] __attribute__ ((aligned(16))); - -// downmix stuff -static float cmixlev_lut[4] = { 0.707, 0.595, 0.500, 0.707 }; -static float smixlev_lut[4] = { 0.707, 0.500, 0.0 , 0.500 }; -static dm_par_t dm_par; - -//Storage for the syncframe -#define BUFFER_MAX_SIZE 4096 -static uint8_t buffer[BUFFER_MAX_SIZE]; -static uint32_t buffer_size = 0;; -// for error handling -jmp_buf error_jmp_mark; - -uint32_t ac3_buffersize() -{ - return buffer_size; -} - -static uint32_t decode_buffer_syncframe (syncinfo_t *syncinfo, uint8_t **start, uint8_t *end) -{ - uint8_t *cur = *start; - uint16_t syncword = syncinfo->syncword; - uint32_t ret = 0; - - // Find an ac3 sync frame. - while (syncword != 0x0b77) { - if (cur >= end) - goto done; - syncword = (syncword << 8) + *cur++; - } - - //need the next 3 bytes to decide how big the frame is - while (buffer_size < 3) { - if(cur >= end) - goto done; - - buffer[buffer_size++] = *cur++; - } - - parse_syncinfo (syncinfo,buffer); - stats_print_syncinfo (syncinfo); - - while (buffer_size < syncinfo->frame_size * 2 - 2) { - if(cur >= end) - goto done; - - buffer[buffer_size++] = *cur++; - } - -#if 0 - // Check the crc over the entire frame - crc_init(); - crc_process_frame (buffer, syncinfo->frame_size * 2 - 2); - - if (!crc_validate()) { - fprintf(stderr,"** CRC failed - skipping frame **\n"); - goto done; - } -#endif - - //if we got to this point, we found a valid ac3 frame to decode - - bitstream_init (buffer); - //get rid of the syncinfo struct as we already parsed it - bitstream_get (24); - - //reset the syncword for next time - syncword = 0xffff; - buffer_size = 0; - ret = 1; - -done: - syncinfo->syncword = syncword; - *start = cur; - return ret; -} - - -void inline decode_mute (void) -{ - //mute the frame - memset (s16_samples, 0, sizeof(int16_t) * 256 * 2 * 6); -} - - -void ac3dec_init (void) -{ -// FIXME - don't do that statically here - ac3_config.num_output_ch = 2; - ac3_config.flags = 0; - - imdct_init (); - downmix_init (); - memset (&syncinfo, 0, sizeof (syncinfo)); - memset (&bsi, 0, sizeof (bsi)); - memset (&audblk, 0, sizeof (audblk)); - sanity_check_init (&syncinfo,&bsi,&audblk); -} - -#ifdef __OMS__ -size_t ac3dec_decode_data (plugin_output_audio_t *output, uint8_t *data_start, uint8_t *data_end) -#else -size_t ac3dec_decode_data (uint8_t *data_start ,uint8_t *data_end, int ac3reset, int *input_pointer, int *output_pointer, char *ac3_data) -#endif -{ - uint32_t i; - int datasize; - char *data; - - - if(ac3reset != 0){ - syncinfo.syncword = 0xffff; - buffer_size = 0; - } - - if (setjmp (error_jmp_mark) < 0) { - ac3dec_init (); - return 0; - } - - while (decode_buffer_syncframe (&syncinfo, &data_start, data_end)) { - parse_bsi (&bsi); - -#ifndef __OMS__ - if(!done_banner) { - // stats_print_banner(&syncinfo,&bsi); - done_banner = 1; - } -#endif - - // compute downmix parameters - // downmix to tow channels for now - dm_par.clev = 0.0; dm_par.slev = 0.0; dm_par.unit = 1.0; - if (bsi.acmod & 0x1) // have center - dm_par.clev = cmixlev_lut[bsi.cmixlev]; - - if (bsi.acmod & 0x4) // have surround channels - dm_par.slev = smixlev_lut[bsi.surmixlev]; - - dm_par.unit /= 1.0 + dm_par.clev + dm_par.slev; - dm_par.clev *= dm_par.unit; - dm_par.slev *= dm_par.unit; - - for(i=0; i < 6; i++) { - //Initialize freq/time sample storage - memset (samples, 0, sizeof(float) * 256 * (bsi.nfchans + bsi.lfeon)); - - // Extract most of the audblk info from the bitstream - // (minus the mantissas - parse_audblk (&bsi,&audblk); - - // Take the differential exponent data and turn it into - // absolute exponents - exponent_unpack (&bsi,&audblk); - - // Figure out how many bits per mantissa - bit_allocate (syncinfo.fscod,&bsi,&audblk); - - // Extract the mantissas from the stream and - // generate floating point frequency coefficients - coeff_unpack (&bsi,&audblk,samples); - - if (bsi.acmod == 0x2) - rematrix (&audblk,samples); - - // Convert the frequency samples into time samples - imdct (&bsi,&audblk,samples, &s16_samples[i * 2 * 256], &dm_par); - - // Downmix into the requested number of channels - // and convert floating point to int16_t - // downmix(&bsi,samples,&s16_samples[i * 2 * 256]); - - if (sanity_check(&syncinfo,&bsi,&audblk) < 0) { - HANDLE_ERROR (); - return 0; - } - - continue; - } - - if (!is_output_initialized) { -#ifdef __OMS__ - plugin_output_audio_attr_t attr; -#ifdef __sun__ - attr.format = 16; -#else - attr.format = AFMT_S16_NE; -#endif - attr.speed = syncinfo.sampling_rate; - attr.channels = 2; - - // output->setup (&attr); -#else - // ao_functions->open (16, syncinfo.sampling_rate, 2); -#endif - is_output_initialized = 1; - } - -#ifdef __OMS__ - output->write (s16_samples, 256 * 6 * 2 * 2); -#else - // ao_functions->play(s16_samples, 256 * 6 * 2); - data = (char *)s16_samples; - datasize = 0; - while(datasize < 6144){ - if(((*input_pointer+1) % AC3_BUFFER_SIZE) != *output_pointer){ // There is room in the sync_buffer - ac3_data[*input_pointer]=data[datasize]; - datasize++; - *input_pointer = (*input_pointer+1) % AC3_BUFFER_SIZE; - } - else{ - *input_pointer = *output_pointer = 0; - break; - } - } - -#endif - - } - - decode_mute (); - - return 0; -} |