summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Courtier-Dutton <jcdutton@users.sourceforge.net>2001-11-27 00:00:34 +0000
committerJames Courtier-Dutton <jcdutton@users.sourceforge.net>2001-11-27 00:00:34 +0000
commit8c189f8457736c655a1d70cc974526b0e9d990f2 (patch)
treec24b06e65e70dda0becbb43e29b9f8e2c0349d3f
parentb7b51c776e50ea0723d0f4967cbf5d3cb7bccdb4 (diff)
downloadxine-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.c9
-rw-r--r--src/libdts/xine_decoder.c6
-rw-r--r--src/xine-engine/audio_out.c29
-rw-r--r--src/xine-engine/audio_out.h4
-rw-r--r--src/xine-engine/metronom.c4
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