diff options
author | James Courtier-Dutton <jcdutton@users.sourceforge.net> | 2001-11-27 00:00:34 +0000 |
---|---|---|
committer | James Courtier-Dutton <jcdutton@users.sourceforge.net> | 2001-11-27 00:00:34 +0000 |
commit | 8c189f8457736c655a1d70cc974526b0e9d990f2 (patch) | |
tree | c24b06e65e70dda0becbb43e29b9f8e2c0349d3f | |
parent | b7b51c776e50ea0723d0f4967cbf5d3cb7bccdb4 (diff) | |
download | xine-lib-8c189f8457736c655a1d70cc974526b0e9d990f2.tar.gz xine-lib-8c189f8457736c655a1d70cc974526b0e9d990f2.tar.bz2 |
Improve DTS support.
CVS patchset: 1121
CVS date: 2001/11/27 00:00:34
-rw-r--r-- | src/demuxers/demux_mpeg_block.c | 9 | ||||
-rw-r--r-- | src/libdts/xine_decoder.c | 6 | ||||
-rw-r--r-- | src/xine-engine/audio_out.c | 29 | ||||
-rw-r--r-- | src/xine-engine/audio_out.h | 4 | ||||
-rw-r--r-- | src/xine-engine/metronom.c | 4 |
5 files changed, 24 insertions, 28 deletions
diff --git a/src/demuxers/demux_mpeg_block.c b/src/demuxers/demux_mpeg_block.c index df44419e7..418361721 100644 --- a/src/demuxers/demux_mpeg_block.c +++ b/src/demuxers/demux_mpeg_block.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: demux_mpeg_block.c,v 1.62 2001/11/18 03:53:23 guenter Exp $ + * $Id: demux_mpeg_block.c,v 1.63 2001/11/27 00:00:34 jcdutton Exp $ * * demultiplexer for mpeg 1/2 program streams * @@ -385,13 +385,16 @@ static void demux_mpeg_block_parse_pack (demux_mpeg_block_t *this, int preview_m if ((p[0]&0xF0) == 0x80) { /* printf ( "ac3 PES packet, track %02x\n",track); */ + buf->decoder_info[1] = p[1]; /* Number of frame headers */ + buf->decoder_info[2] = p[2] << 8 | p[3]; /* First access unit pointer */ buf->content = p+4; buf->size = packet_len-4; - if (track & 0x8) + if (track & 0x8) { buf->type = BUF_AUDIO_DTS + (track & 0x07); /* DVDs only have 8 tracks */ - else + } else { buf->type = BUF_AUDIO_A52 + track; + } buf->PTS = PTS; buf->input_pos = this->input->get_current_pos(this->input); diff --git a/src/libdts/xine_decoder.c b/src/libdts/xine_decoder.c index 877424b38..7fbc6d499 100644 --- a/src/libdts/xine_decoder.c +++ b/src/libdts/xine_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine_decoder.c,v 1.5 2001/11/16 21:06:21 jcdutton Exp $ + * $Id: xine_decoder.c,v 1.6 2001/11/27 00:00:35 jcdutton Exp $ * * 04-09-2001 DTS passtrough (C) Joachim Koenig * @@ -108,7 +108,9 @@ void dts_decode_data (audio_decoder_t *this_gen, buf_element_t *buf) { audio_buffer = this->audio_out->get_buffer (this->audio_out); memcpy (audio_buffer->mem, data, ac5_length); - + + audio_buffer->frame_header_count = buf->decoder_info[1]; /* Number of frames */ + audio_buffer->first_access_unit = buf->decoder_info[2]; /* First access unit */ audio_buffer->vpts = buf->PTS; audio_buffer->scr = buf->SCR; audio_buffer->num_frames = ac5_length / 2; diff --git a/src/xine-engine/audio_out.c b/src/xine-engine/audio_out.c index 69c652a79..abaf1b7df 100644 --- a/src/xine-engine/audio_out.c +++ b/src/xine-engine/audio_out.c @@ -17,7 +17,7 @@ * along with self program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: audio_out.c,v 1.35 2001/11/20 12:41:57 miguelfreitas Exp $ + * $Id: audio_out.c,v 1.36 2001/11/27 00:00:35 jcdutton Exp $ * * 22-8-2001 James imported some useful AC3 sections from the previous alsa driver. * (c) 2001 Andy Lo A Foe <andy@alsaplayer.org> @@ -469,6 +469,8 @@ static void *ao_loop (void *this_gen) { ((data[6] & 0xff) << 4) | ((data[7] & 0xf0) >> 4); ac5_length++; + ac5_length=ac5_length * buf->frame_header_count ; + if (ac5_length > 4088) { /* Biggest PCM length from AC5 is 4096 */ break; @@ -491,29 +493,14 @@ static void *ao_loop (void *this_gen) { } else { printf("BAD AC5 length\n"); break; - } + } + if (ac5_pcm_length < (512 * buf->frame_header_count)) { + ac5_pcm_length = 512 * buf->frame_header_count ; + } + /* printf("DTS length=%d\n",ac5_pcm_length); */ this->driver->write(this->driver, this->frame_buffer, ac5_pcm_length); break; - - - - - - memset(this->frame_buffer,0xff,6144); - this->frame_buffer[0] = 0xf872; /* spdif syncword */ - this->frame_buffer[1] = 0x4e1f; /* ............. */ - this->frame_buffer[2] = 0x0001; /* */ - - this->frame_buffer[3] = 0x3ee0; - - /* ac3 seems to be swabbed data */ - swab(buf->mem,this->frame_buffer+4, 2014 ); - - this->driver->write(this->driver, this->frame_buffer, 1024); - - break; - } } diff --git a/src/xine-engine/audio_out.h b/src/xine-engine/audio_out.h index a3f1c65e2..ab219a648 100644 --- a/src/xine-engine/audio_out.h +++ b/src/xine-engine/audio_out.h @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: audio_out.h,v 1.21 2001/11/20 12:41:58 miguelfreitas Exp $ + * $Id: audio_out.h,v 1.22 2001/11/27 00:00:35 jcdutton Exp $ */ #ifndef HAVE_AUDIO_OUT_H #define HAVE_AUDIO_OUT_H @@ -135,6 +135,8 @@ struct audio_buffer_s { uint32_t vpts; uint32_t scr; + uint32_t frame_header_count; + uint32_t first_access_unit; }; typedef struct ao_instance_s ao_instance_t; diff --git a/src/xine-engine/metronom.c b/src/xine-engine/metronom.c index 2924d6a4b..19bd88523 100644 --- a/src/xine-engine/metronom.c +++ b/src/xine-engine/metronom.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: metronom.c,v 1.37 2001/11/18 03:53:25 guenter Exp $ + * $Id: metronom.c,v 1.38 2001/11/27 00:00:35 jcdutton Exp $ */ #ifdef HAVE_CONFIG_H @@ -617,6 +617,8 @@ static uint32_t metronom_got_audio_samples (metronom_t *this, uint32_t pts, uint32_t vpts; #ifdef METRONOM_LOG + printf ("metronom: DTS pts is %u, last_pts is %u, diff = %d\n", + pts, this->last_audio_pts, pts - this->last_audio_pts); printf ("metronom: got %d audio samples (pts=%d)\n", nsamples,pts); #endif |