Don't tell DTS packetizer first frame is not available if it actually is

Fix for bug 705.
This commit is contained in:
Moritz Bunkus 2012-01-23 19:51:21 +01:00
parent c133003e00
commit 26565c724f
6 changed files with 13 additions and 23 deletions

View File

@ -1,3 +1,10 @@
2012-01-23 Moritz Bunkus <moritz@bunkus.org>
* 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 <moritz@bunkus.org>
* mkvextract: bug fix for the "timecodes_v2" mode: mkvextract will

View File

@ -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"));

View File

@ -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 (...) {

View File

@ -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) {

View File

@ -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<int>(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);

View File

@ -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<int64_t> 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);