VC1: determine frame type from frame header as well, not only from sequence header presence

This commit is contained in:
Moritz Bunkus 2013-11-15 16:48:24 +01:00
parent 92daebd2b5
commit e37ef5f2ca
5 changed files with 14 additions and 2 deletions

View File

@ -54,6 +54,12 @@ vc1::frame_t::init() {
contains_field = false;
}
bool
vc1::frame_t::is_key()
const {
return contains_sequence_header || (vc1::FRAME_TYPE_I == header.frame_type);
}
bool
vc1::parse_sequence_header(const unsigned char *buf,
int size,

View File

@ -119,6 +119,7 @@ struct frame_t {
frame_t();
void init();
bool is_key() const;
};
typedef std::shared_ptr<frame_t> frame_cptr;

View File

@ -152,8 +152,7 @@ void
vc1_video_packetizer_c::flush_frames() {
while (m_parser.is_frame_available()) {
vc1::frame_cptr frame = m_parser.get_frame();
add_packet(new packet_t(frame->data, frame->timecode, frame->duration, frame->contains_sequence_header ? -1 : m_previous_timecode));
add_packet(new packet_t(frame->data, frame->timecode, frame->duration, frame->is_key() ? -1 : m_previous_timecode));
m_previous_timecode = frame->timecode;
}

View File

@ -259,3 +259,4 @@ T_410extract_vp9:b6135380fa07f827384ad1004015d79c:passed:20131019-200643:0.03386
T_411ui_locale_pt_PT:7378e1146862dcb96f11caa91d33c5cb-3182bfa8c7ef57b56185285fbd614c98:passed:20131026-154124:0.073196901
T_412ui_locale_pl_PL:f84afd16653d395b33943ef722c63cfa-a4f512bdc00e1eab4d27a715174df149:passed:20131026-154845:0.077632905
T_413memory_resize_nonfree_smaller:c1085152b4b60a197bf93d598d066924:passed:20131102-115507:0.066828215
T_414vc1_no_sequence_headers_before_key_frames:48a03189f55b303a98332e6594f7bd31:passed:20131115-164756:0.133015738

View File

@ -0,0 +1,5 @@
#!/usr/bin/ruby -w
# T_414vc1_no_sequence_headers_before_key_frames
describe "mkvmerge / VC1, no sequence headers before key frames"
test_merge "data/mkv/vc1-no-sequence-headers-before-key-frames.mkv"