From 44cb6424859b9410db18bb75d9f10489b238358b Mon Sep 17 00:00:00 2001 From: Darren Salt Date: Mon, 22 Mar 2010 20:11:49 +0000 Subject: Add support for Ogg tag 'DISCNUMBER' and ID3 tag 'TPOS'. --- src/demuxers/demux_ogg.c | 1 + src/demuxers/id3.c | 8 ++++++++ 2 files changed, 9 insertions(+) (limited to 'src') diff --git a/src/demuxers/demux_ogg.c b/src/demuxers/demux_ogg.c index 1be5c0dcf..573baa593 100644 --- a/src/demuxers/demux_ogg.c +++ b/src/demuxers/demux_ogg.c @@ -426,6 +426,7 @@ static const struct ogg_meta { OGG_META (ARTIST, 0), OGG_META (PUBLISHER, 0), OGG_META (COPYRIGHT, 0), + OGG_META (DISCNUMBER, 0), OGG_META (LICENSE, 0), OGG_META (TITLE, 0), OGG_META_L (TRACKNUMBER, 0, TRACK_NUMBER), diff --git a/src/demuxers/id3.c b/src/demuxers/id3.c index 15599ffea..755decaf4 100644 --- a/src/demuxers/id3.c +++ b/src/demuxers/id3.c @@ -525,6 +525,10 @@ static int id3v23_interp_frame(input_plugin_t *input, _x_meta_info_set(stream, XINE_META_INFO_TRACK_NUMBER, buf + 1); break; + case FOURCC_TAG('T', 'P', 'O', 'S'): + _x_meta_info_set(stream, XINE_META_INFO_DISCNUMBER, buf + 1); + break; + default: lprintf("unhandled frame\n"); } @@ -783,6 +787,10 @@ static int id3v24_interp_frame(input_plugin_t *input, _x_meta_info_set(stream, XINE_META_INFO_TRACK_NUMBER, buf + 1); break; + case FOURCC_TAG('T', 'P', 'O', 'S'): + _x_meta_info_set(stream, XINE_META_INFO_DISCNUMBER, buf + 1); + break; + default: lprintf("unhandled frame\n"); } -- cgit v1.2.3 From 7b59e87707f4796d9399721abe643cfd1c9ec1c1 Mon Sep 17 00:00:00 2001 From: Kelvie Wong Date: Sat, 20 Mar 2010 23:52:51 -0700 Subject: demux: Fix the pts values for the TrueAudio demux This makes seeking more accurate, I believe. --- src/demuxers/demux_tta.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/demuxers/demux_tta.c b/src/demuxers/demux_tta.c index 7462cd874..03d15045d 100644 --- a/src/demuxers/demux_tta.c +++ b/src/demuxers/demux_tta.c @@ -129,7 +129,7 @@ static int demux_tta_send_chunk(demux_plugin_t *this_gen) { /* Get a buffer */ buf = this->audio_fifo->buffer_pool_alloc(this->audio_fifo); buf->type = BUF_AUDIO_TTA; - buf->pts = 0; + buf->pts = (int64_t)(FRAME_TIME * this->currentframe) * 90000; buf->extra_info->total_time = (int)(le2me_32(this->header.tta.data_length) * 1000.0 / le2me_32(this->header.tta.samplerate)); /* milliseconds */ buf->decoder_flags = 0; @@ -231,6 +231,7 @@ static int demux_tta_seek (demux_plugin_t *this_gen, demux_tta_t *this = (demux_tta_t *) this_gen; uint32_t start_frame; uint32_t frame_index; + int64_t pts; off_t start_off = this->datastart; /* if thread is not running, initialize demuxer */ @@ -244,10 +245,14 @@ static int demux_tta_seek (demux_plugin_t *this_gen, } else { /* Get the starting frame */ - if( start_pos ) + if( start_pos ) { + pts = start_pos * le2me_32(this->header.tta.data_length) * 1000.0 / le2me_32(this->header.tta.samplerate) * 90 / 65535; start_frame = start_pos * this->totalframes / 65535; - else + + } else { + pts = start_time * 90; start_frame = (uint32_t)((double)start_time/ 1000.0 / FRAME_TIME); + } /* Now we find the offset */ for( frame_index = 0; frame_index < start_frame; frame_index++ ) @@ -258,7 +263,7 @@ static int demux_tta_seek (demux_plugin_t *this_gen, _x_demux_flush_engine(this->stream); this->input->seek(this->input, start_off, SEEK_SET); this->currentframe = start_frame; - _x_demux_control_newpts(this->stream, (int)(FRAME_TIME * start_frame) * 90000, BUF_FLAG_SEEK); + _x_demux_control_newpts(this->stream, pts, BUF_FLAG_SEEK); this->status = DEMUX_OK; } -- cgit v1.2.3 From b362fde1e91190d1988b4a1aea7b453fe6d72bc6 Mon Sep 17 00:00:00 2001 From: Petri Hintukainen Date: Tue, 23 Mar 2010 14:08:03 +0200 Subject: Fixed using uninitialized decode_buffer_size --- src/combined/ffmpeg/ff_audio_decoder.c | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/combined/ffmpeg/ff_audio_decoder.c b/src/combined/ffmpeg/ff_audio_decoder.c index 26e1ac168..125eff12c 100644 --- a/src/combined/ffmpeg/ff_audio_decoder.c +++ b/src/combined/ffmpeg/ff_audio_decoder.c @@ -285,6 +285,7 @@ static void ff_audio_decode_data (audio_decoder_t *this_gen, buf_element_t *buf) if (!this->output_open) { if (!this->audio_bits || !this->audio_sample_rate || !this->audio_channels) { + decode_buffer_size = AVCODEC_MAX_AUDIO_FRAME_SIZE; avcodec_decode_audio2 (this->context, (int16_t *)this->decode_buffer, &decode_buffer_size, -- cgit v1.2.3 From 0b9d995c38b188a6e1e899f43a0dc318d67099a2 Mon Sep 17 00:00:00 2001 From: Petri Hintukainen Date: Tue, 23 Mar 2010 14:11:09 +0200 Subject: Added new audio buffer type (EAC3) --- src/combined/ffmpeg/ffmpeg_decoder.c | 3 +++ src/combined/ffmpeg/xine_audio.list | 1 + src/xine-engine/buffer.h | 1 + src/xine-engine/buffer_types.c | 7 +++++++ 4 files changed, 12 insertions(+) (limited to 'src') diff --git a/src/combined/ffmpeg/ffmpeg_decoder.c b/src/combined/ffmpeg/ffmpeg_decoder.c index 6d0bfa432..b50633053 100644 --- a/src/combined/ffmpeg/ffmpeg_decoder.c +++ b/src/combined/ffmpeg/ffmpeg_decoder.c @@ -180,6 +180,9 @@ void avcodec_register_all(void) REGISTER_DECODER(AC3, ac3); #endif REGISTER_ENCODER(AC3, ac3); +#ifdef CODEC_ID_EAC3 + REGISTER_DECODER(EAC3, eac3); +#endif REGISTER_DECODER(ALAC, alac); #if defined(CONFIG_AMR_NB) || defined(CONFIG_AMR_NB_FIXED) REGISTER_ENCDEC (AMR_NB, amr_nb); diff --git a/src/combined/ffmpeg/xine_audio.list b/src/combined/ffmpeg/xine_audio.list index 9ec727bf1..5daa4d8b0 100644 --- a/src/combined/ffmpeg/xine_audio.list +++ b/src/combined/ffmpeg/xine_audio.list @@ -41,6 +41,7 @@ FLVADPCM ADPCM_SWF Flash ADPCM WAVPACK WAVPACK WavPack AMR_NB AMR_NB AMR narrow band AMR_WB AMR_WB AMR wide band +EAC3 EAC3 E-AC-3 # disabled codecs (ref. configure.ac) ! AAC diff --git a/src/xine-engine/buffer.h b/src/xine-engine/buffer.h index 3b25c732e..034f6552a 100644 --- a/src/xine-engine/buffer.h +++ b/src/xine-engine/buffer.h @@ -260,6 +260,7 @@ extern "C" { #define BUF_AUDIO_MP3ADU 0x033E0000 #define BUF_AUDIO_AMR_NB 0x033F0000 #define BUF_AUDIO_AMR_WB 0x03400000 +#define BUF_AUDIO_EAC3 0x03410000 /* spu buffer types: */ diff --git a/src/xine-engine/buffer_types.c b/src/xine-engine/buffer_types.c index 33a09b907..1db073851 100644 --- a/src/xine-engine/buffer_types.c +++ b/src/xine-engine/buffer_types.c @@ -1176,6 +1176,13 @@ static const audio_db_t audio_db[] = { BUF_AUDIO_TTA, "True Audio Lossless" }, +{ + { + 0 + }, + BUF_AUDIO_EAC3, + "E-AC-3" +}, { { 0 }, 0, "last entry" } }; -- cgit v1.2.3 From 74853b910cfd296eb0fea43394a3819e803c46b9 Mon Sep 17 00:00:00 2001 From: Petri Hintukainen Date: Tue, 23 Mar 2010 15:01:48 +0200 Subject: Demux EAC3 audio from matroska (Sample: http://samples.mplayerhq.hu/Matroska/H264%2bEAC3.mkv ) --- src/demuxers/demux_matroska.c | 5 +++++ src/demuxers/matroska.h | 1 + 2 files changed, 6 insertions(+) (limited to 'src') diff --git a/src/demuxers/demux_matroska.c b/src/demuxers/demux_matroska.c index 94f47db44..dd1f15fa6 100644 --- a/src/demuxers/demux_matroska.c +++ b/src/demuxers/demux_matroska.c @@ -1350,6 +1350,11 @@ static int parse_track_entry(demux_matroska_t *this, matroska_track_t *track) { track->buf_type = BUF_AUDIO_A52; init_codec = init_codec_audio; + } else if (!strcmp(track->codec_id, MATROSKA_CODEC_ID_A_EAC3)) { + lprintf("MATROSKA_CODEC_ID_A_EAC3\n"); + track->buf_type = BUF_AUDIO_EAC3; + init_codec = init_codec_audio; + } else if (!strcmp(track->codec_id, MATROSKA_CODEC_ID_A_DTS)) { lprintf("MATROSKA_CODEC_ID_A_DTS\n"); track->buf_type = BUF_AUDIO_DTS; diff --git a/src/demuxers/matroska.h b/src/demuxers/matroska.h index 0a8226319..3cafc6441 100644 --- a/src/demuxers/matroska.h +++ b/src/demuxers/matroska.h @@ -320,6 +320,7 @@ struct matroska_track_s { #define MATROSKA_CODEC_ID_A_PCM_INT_LE "A_PCM/INT/LIT" #define MATROSKA_CODEC_ID_A_PCM_FLOAT "A_PCM/FLOAT/IEEE" #define MATROSKA_CODEC_ID_A_AC3 "A_AC3" +#define MATROSKA_CODEC_ID_A_EAC3 "A_EAC3" #define MATROSKA_CODEC_ID_A_DTS "A_DTS" #define MATROSKA_CODEC_ID_A_VORBIS "A_VORBIS" #define MATROSKA_CODEC_ID_A_ACM "A_MS/ACM" -- cgit v1.2.3