1 #include "../../../stdafx.h"
\r
3 #include "video_decoder.h"
\r
5 #if defined(_MSC_VER)
\r
6 #pragma warning (push)
\r
7 #pragma warning (disable : 4244)
\r
11 #define __STDC_CONSTANT_MACROS
\r
12 #define __STDC_LIMIT_MACROS
\r
13 #include <libavformat/avformat.h>
\r
15 #if defined(_MSC_VER)
\r
16 #pragma warning (pop)
\r
19 namespace caspar { namespace core { namespace ffmpeg{
\r
21 struct video_decoder::implementation : boost::noncopyable
\r
23 implementation(AVCodecContext* codec_context) : codec_context_(codec_context){}
\r
25 std::shared_ptr<AVFrame> execute(const aligned_buffer& video_packet)
\r
27 std::shared_ptr<AVFrame> decoded_frame;
\r
28 decoded_frame.reset(avcodec_alloc_frame(), av_free);
\r
30 int frame_finished = 0;
\r
31 if((-avcodec_decode_video(codec_context_, decoded_frame.get(), &frame_finished, video_packet.data(), video_packet.size())) > 0)
\r
32 decoded_frame.reset();
\r
34 return decoded_frame;
\r
37 AVCodecContext* codec_context_;
\r
40 video_decoder::video_decoder(AVCodecContext* codec_context) : impl_(new implementation(codec_context)){}
\r
41 std::shared_ptr<AVFrame> video_decoder::execute(const aligned_buffer& video_packet){return impl_->execute(video_packet);}
\r