Reverse track encodings even if the pass-through packetizer is used

This commit is contained in:
Moritz Bunkus 2010-06-10 15:04:05 +02:00
parent 3f71d3fafd
commit c98ee6e68c
2 changed files with 13 additions and 6 deletions

View File

@ -9,6 +9,11 @@
* mkvmerge: bug fix: Fixed access to uninitialized memory when
reading DTS tracks from AVI and Matroska files.
2010-06-10 Moritz Bunkus <moritz@bunkus.org>
* mkvmerge: bug fix: The Matroska reader did not handle compressed
tracks correctly if the passthrough packetizer was used.
2010-06-08 Moritz Bunkus <moritz@bunkus.org>
* docs: Added a Dutch translation for the man pages by René

View File

@ -2011,9 +2011,10 @@ kax_reader_c::process_simple_block(KaxCluster *cluster,
// and stuff. Just pass everything through as it is.
int i;
for (i = 0; i < (int)block_simple->NumberFrames(); i++) {
DataBuffer &data = block_simple->GetBuffer(i);
packet_t *packet = new packet_t(new memory_c((unsigned char *)data.Buffer(), data.Size(), false),
m_last_timecode + i * frame_duration, block_duration, block_bref, block_fref);
DataBuffer &data_buffer = block_simple->GetBuffer(i);
memory_cptr data(new memory_c(data_buffer.Buffer(), data_buffer.Size(), false));
block_track->content_decoder.reverse(data, CONTENT_ENCODING_SCOPE_BLOCK);
packet_t *packet = new packet_t(data, m_last_timecode + i * frame_duration, block_duration, block_bref, block_fref);
((passthrough_packetizer_c *)PTZR(block_track->ptzr))->process(packet_cptr(packet));
}
@ -2122,9 +2123,10 @@ kax_reader_c::process_block_group(KaxCluster *cluster,
int i;
for (i = 0; i < (int)block->NumberFrames(); i++) {
DataBuffer &data = block->GetBuffer(i);
packet_t *packet = new packet_t(new memory_c((unsigned char *)data.Buffer(), data.Size(), false),
m_last_timecode + i * frame_duration, block_duration, block_bref, block_fref);
DataBuffer &data_buffer = block->GetBuffer(i);
memory_cptr data(new memory_c(data_buffer.Buffer(), data_buffer.Size(), false));
block_track->content_decoder.reverse(data, CONTENT_ENCODING_SCOPE_BLOCK);
packet_t *packet = new packet_t(data, m_last_timecode + i * frame_duration, block_duration, block_bref, block_fref);
packet->duration_mandatory = duration != NULL;
if (NULL != codec_state)