From 26565c724f90e06d3ebd31750eaeb3af4f8ad324 Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Mon, 23 Jan 2012 19:51:21 +0100 Subject: [PATCH] Don't tell DTS packetizer first frame is not available if it actually is Fix for bug 705. --- ChangeLog | 7 +++++++ src/input/r_avi.cpp | 2 +- src/input/r_matroska.cpp | 2 +- src/input/r_mpeg_ps.cpp | 2 +- src/output/p_dts.cpp | 20 ++------------------ src/output/p_dts.h | 3 +-- 6 files changed, 13 insertions(+), 23 deletions(-) diff --git a/ChangeLog b/ChangeLog index 77dbcfb13..705262ecf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2012-01-23 Moritz Bunkus + + * mkvmerge: bug fix: Appending AVI, Matroska or MPEG program + stream files with DTS audio tracks will not result in a warning + that the appended DTS tracks might not be compatible. Fix for bug + 705. + 2012-01-13 Moritz Bunkus * mkvextract: bug fix for the "timecodes_v2" mode: mkvextract will diff --git a/src/input/r_avi.cpp b/src/input/r_avi.cpp index 9cf454698..c3e974c3c 100644 --- a/src/input/r_avi.cpp +++ b/src/input/r_avi.cpp @@ -681,7 +681,7 @@ avi_reader_c::create_dts_packetizer(int aid) { AVI_set_audio_position_index(m_avi, audio_position); - return new dts_packetizer_c(this, m_ti, dtsheader, true); + return new dts_packetizer_c(this, m_ti, dtsheader); } catch (...) { mxerror_tid(m_ti.m_fname, aid + 1, Y("Could not find valid DTS headers in this track's first frames.\n")); diff --git a/src/input/r_matroska.cpp b/src/input/r_matroska.cpp index fd069b383..ba4637ce7 100644 --- a/src/input/r_matroska.cpp +++ b/src/input/r_matroska.cpp @@ -1559,7 +1559,7 @@ kax_reader_c::create_dts_audio_packetizer(kax_track_t *t, if (-1 == position) throw false; - set_track_packetizer(t, new dts_packetizer_c(this, nti, dtsheader, true)); + set_track_packetizer(t, new dts_packetizer_c(this, nti, dtsheader)); show_packetizer_info(t->tnum, t->ptzr_ptr); } catch (...) { diff --git a/src/input/r_mpeg_ps.cpp b/src/input/r_mpeg_ps.cpp index c0d69a0b5..5e05e59ab 100644 --- a/src/input/r_mpeg_ps.cpp +++ b/src/input/r_mpeg_ps.cpp @@ -1166,7 +1166,7 @@ mpeg_ps_reader_c::create_packetizer(int64_t id) { show_packetizer_info(id, PTZR(track->ptzr)); } else if (FOURCC('D', 'T', 'S', ' ') == track->fourcc) { - track->ptzr = add_packetizer(new dts_packetizer_c(this, m_ti, track->dts_header, true)); + track->ptzr = add_packetizer(new dts_packetizer_c(this, m_ti, track->dts_header)); show_packetizer_info(id, PTZR(track->ptzr)); } else if (FOURCC('T', 'R', 'H', 'D') == track->fourcc) { diff --git a/src/output/p_dts.cpp b/src/output/p_dts.cpp index afd75459f..66f7f0d78 100644 --- a/src/output/p_dts.cpp +++ b/src/output/p_dts.cpp @@ -24,13 +24,11 @@ using namespace libmatroska; dts_packetizer_c::dts_packetizer_c(generic_reader_c *p_reader, track_info_c &p_ti, - const dts_header_t &dtsheader, - bool get_first_header_later) + const dts_header_t &dtsheader) : generic_packetizer_c(p_reader, p_ti) , m_samples_written(0) , m_bytes_written(0) , m_packet_buffer(128 * 1024) - , m_get_first_header_later(get_first_header_later) , m_first_header(dtsheader) , m_previous_header(dtsheader) , m_skipping_is_normal(false) @@ -63,22 +61,11 @@ dts_packetizer_c::get_dts_packet(dts_header_t &dtsheader) { buf_size = m_packet_buffer.get_size(); } - pos = find_dts_header(buf, buf_size, &dtsheader, m_get_first_header_later ? false : !m_first_header.dts_hd); + pos = find_dts_header(buf, buf_size, &dtsheader, !m_first_header.dts_hd); if ((0 > pos) || (static_cast(pos + dtsheader.frame_byte_size) > buf_size)) return NULL; - if (m_get_first_header_later) { - m_first_header = dtsheader; - m_previous_header = dtsheader; - m_get_first_header_later = false; - - if (!m_reader->m_appending) - set_headers(); - - rerender_track_headers(); - } - if ((1 < verbose) && (dtsheader != m_previous_header)) { mxinfo(Y("DTS header information changed! - New format:\n")); print_dts_header(&dtsheader); @@ -156,9 +143,6 @@ dts_packetizer_c::can_connect_to(generic_packetizer_c *src, if (NULL == dsrc) return CAN_CONNECT_NO_FORMAT; - if (m_get_first_header_later) - return CAN_CONNECT_MAYBE_CODECPRIVATE; - connect_check_a_samplerate(m_first_header.core_sampling_frequency, dsrc->m_first_header.core_sampling_frequency); connect_check_a_channels(m_first_header.audio_channels, dsrc->m_first_header.audio_channels); diff --git a/src/output/p_dts.h b/src/output/p_dts.h index cddffff75..030c38e66 100644 --- a/src/output/p_dts.h +++ b/src/output/p_dts.h @@ -27,14 +27,13 @@ private: byte_buffer_c m_packet_buffer; - bool m_get_first_header_later; dts_header_t m_first_header, m_previous_header; bool m_skipping_is_normal; std::deque m_available_timecodes; public: - dts_packetizer_c(generic_reader_c *p_reader, track_info_c &p_ti, const dts_header_t &dts_header, bool get_first_header_later = false); + dts_packetizer_c(generic_reader_c *p_reader, track_info_c &p_ti, const dts_header_t &dts_header); virtual ~dts_packetizer_c(); virtual int process(packet_cptr packet);