ff_stream_info_impl::ff_stream_info_impl(const AVStream * _AVStream) { DT_ASSERT(NULL != _AVStream); if (NULL == _AVStream) BOOST_THROW_EXCEPTION(errors::invalid_pointer()); m_index = _AVStream->index; m_id = _AVStream->id; m_frame_rate = FF2DTType(_AVStream->r_frame_rate); m_first_dts = _AVStream->first_dts; m_time_base = FF2DTType(_AVStream->time_base); m_start_time = _AVStream->start_time; m_duration = _AVStream->duration; m_language = /*_AVStream->language*/""; // remove from ffmpeg 0.8 m_frames_count = _AVStream->nb_frames; m_sample_aspect_ratio = FF2DTType(_AVStream->sample_aspect_ratio); m_metadata = metadata_ptr(/*new ff_metadata(_AVStream->metadata)*/); m_avg_frame_rate = FF2DTType(_AVStream->avg_frame_rate); m_decoder_info = create_ff_decoder_info(_AVStream->codec); }
ff_stream_info_impl::ff_stream_info_impl(const AVFormatContext * avFormatContext, const AVStream * _AVStream) { DT_ASSERT(NULL != _AVStream); if (NULL == _AVStream) BOOST_THROW_EXCEPTION(errors::invalid_pointer()); m_index = _AVStream->index; m_id = _AVStream->id; m_frame_rate = FF2DTType(_AVStream->r_frame_rate); m_first_dts = _AVStream->first_dts; m_time_base = FF2DTType(_AVStream->time_base); m_start_time = _AVStream->start_time; const AVRational tb = {1, AV_TIME_BASE}; m_duration = (_AVStream->duration != AV_NOPTS_VALUE) ? _AVStream->duration : convertDuration(avFormatContext->duration, tb, _AVStream->time_base);; m_language = /*_AVStream->language*/""; // remove from ffmpeg 0.8 m_frames_count = _AVStream->nb_frames; m_sample_aspect_ratio = FF2DTType(_AVStream->sample_aspect_ratio); m_metadata = metadata_ptr(/*new ff_metadata(_AVStream->metadata)*/); m_avg_frame_rate = FF2DTType(_AVStream->avg_frame_rate); m_decoder_info = create_ff_decoder_info(_AVStream->codec); }
virtual dt_rational_t get_time_base() const { return FF2DTType(m_CodecContext.time_base); }
virtual dt_codec_id_t get_codec_id() const { return FF2DTType(m_CodecContext.codec_id); }
virtual dt_media_type_t get_codec_type() const { return FF2DTType(m_CodecContext.codec_type); }
virtual dt_sample_format_t get_sample_format() const { return FF2DTType(m_CodecContext.sample_fmt); }
virtual dt_rational_t get_sample_aspect_ratio() const { return FF2DTType(m_CodecContext.sample_aspect_ratio); }
virtual dt_pixel_format_t get_pix_fmt() const { return FF2DTType(m_CodecContext.pix_fmt); }
video_data_ptr swscale_picture_convert_impl::convert(video_data_ptr _InputData) { if (!swsContext_) { BOOST_THROW_EXCEPTION( errors::unexpected() ); return video_data_ptr(); } uint8_t * data[4] = { _InputData->get_plane(0), _InputData->get_plane(1), _InputData->get_plane(2), _InputData->get_plane(3) }; int linesize[4] = { _InputData->get_line_size(0), _InputData->get_line_size(1), _InputData->get_line_size(2), _InputData->get_line_size(3) }; sws_scale(swsContext_.get(), data, linesize, 0, inputHeight_, outputFrame_.get()->data, outputFrame_.get()->linesize); return video_data_ptr(new ff_video_data(outputFrame_, outputWidth_, outputHeight_, FF2DTType(outputPixelFormat_))); }