void dirac::es_parser_c::handle_picture_unit(memory_cptr packet) { flush_frame(); if (!m_seqhdr_found) return; m_current_frame = frame_cptr(new frame_t); m_current_frame->data = packet; m_current_frame->data->grab(); }
void vc1::es_parser_c::flush_frame() { if (!m_current_frame.is_set()) return; if (!m_pre_frame_extra_data.empty() || !m_post_frame_extra_data.empty()) combine_extra_data_with_packet(); m_current_frame->timecode = get_next_timecode(); m_current_frame->duration = get_default_duration(); m_frames.push_back(m_current_frame); m_current_frame = frame_cptr(NULL); }
void vc1::es_parser_c::handle_frame_packet(memory_cptr packet) { flush_frame(); vc1::frame_header_t frame_header; if (!m_seqhdr_found || !vc1::parse_frame_header(packet->get_buffer(), packet->get_size(), frame_header, m_seqhdr)) return; m_current_frame = frame_cptr(new frame_t); m_current_frame->data = packet; m_current_frame->data->grab(); memcpy(&m_current_frame->header, &frame_header, sizeof(frame_header_t)); if (!m_timecodes.empty()) mxverb(2, boost::format("vc1::es_parser_c::handle_frame_packet: next provided timecode %1% next calculated timecode %2%\n") % format_timecode(m_timecodes.front()) % format_timecode(peek_next_calculated_timecode())); }