void mpeg4_p10_video_packetizer_c::set_headers() { static auto s_debug_fix_bistream_timing_info = debugging_option_c{"fix_bitstream_timing_info"}; if (m_ti.m_private_data && m_ti.m_private_data->get_size()) extract_aspect_ratio(); if (m_ti.m_private_data && m_ti.m_private_data->get_size() && m_ti.m_fix_bitstream_frame_rate) { int64_t l_track_default_duration = -1; if (m_timestamp_factory) l_track_default_duration = m_timestamp_factory->get_default_duration(-1); if ((-1 == l_track_default_duration) && m_default_duration_forced) l_track_default_duration = m_htrack_default_duration; if ((-1 == l_track_default_duration) && (0.0 < m_fps)) l_track_default_duration = static_cast<int64_t>(1000000000.0 / m_fps); if (-1 != l_track_default_duration) l_track_default_duration /= 2; mxdebug_if(s_debug_fix_bistream_timing_info, boost::format("fix_bitstream_timing_info: factory default_duration %1% default_duration_forced? %2% htrack_default_duration %3% fps %4% l_track_default_duration %5%\n") % (m_timestamp_factory ? m_timestamp_factory->get_default_duration(-1) : -2) % m_default_duration_forced % m_htrack_default_duration % m_fps % l_track_default_duration); set_codec_private(mpeg4::p10::fix_sps_fps(m_ti.m_private_data, l_track_default_duration)); } generic_video_packetizer_c::set_headers(); }
int mpeg1_2_video_packetizer_c::process(packet_cptr packet) { if (0.0 > m_fps) extract_fps(packet->data->get_buffer(), packet->data->get_size()); if (!m_aspect_ratio_extracted) extract_aspect_ratio(packet->data->get_buffer(), packet->data->get_size()); return m_framed ? process_framed(packet) : process_unframed(packet); }
int mpeg1_2_video_packetizer_c::process(packet_cptr packet) { if (0.0 > m_fps) extract_fps(packet->data->get_buffer(), packet->data->get_size()); if (!m_aspect_ratio_extracted) extract_aspect_ratio(packet->data->get_buffer(), packet->data->get_size()); if (m_framed) return process_framed(packet); int state = m_parser.GetState(); if ((MPV_PARSER_STATE_EOS == state) || (MPV_PARSER_STATE_ERROR == state)) return FILE_STATUS_DONE; memory_cptr old_memory = packet->data; unsigned char *data_ptr = old_memory->get_buffer(); int new_bytes = old_memory->get_size(); if (packet->has_timecode()) m_parser.AddTimecode(packet->timecode); do { int bytes_to_add = (m_parser.GetFreeBufferSpace() < new_bytes) ? m_parser.GetFreeBufferSpace() : new_bytes; if (0 < bytes_to_add) { m_parser.WriteData(data_ptr, bytes_to_add); data_ptr += bytes_to_add; new_bytes -= bytes_to_add; } state = m_parser.GetState(); while (MPV_PARSER_STATE_FRAME == state) { MPEGFrame *frame = m_parser.ReadFrame(); if (NULL == frame) break; if (NULL == m_hcodec_private) create_private_data(); packet_cptr new_packet = packet_cptr(new packet_t(new memory_c(frame->data, frame->size, true), frame->timecode, frame->duration, frame->firstRef, frame->secondRef)); new_packet->time_factor = MPEG2_PICTURE_TYPE_FRAME == frame->pictureStructure ? 1 : 2; put_sequence_headers_into_codec_state(new_packet); video_packetizer_c::process(new_packet); frame->data = NULL; delete frame; state = m_parser.GetState(); } } while (0 < new_bytes); return FILE_STATUS_MOREDATA; }
int mpeg4_p2_video_packetizer_c::process(packet_cptr packet) { extract_size(packet->data->get_buffer(), packet->data->get_size()); extract_aspect_ratio(packet->data->get_buffer(), packet->data->get_size()); int result = m_input_is_native == m_output_is_native ? video_packetizer_c::process(packet) : m_input_is_native ? process_native(packet) : process_non_native(packet); ++m_frames_output; return result; }
void theora_video_packetizer_c::set_headers() { extract_aspect_ratio(); video_packetizer_c::set_headers(); }