AvTranscoder  0.9.4
C++APIforLibav/FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
VideoCodec.cpp
Go to the documentation of this file.
1 #include "VideoCodec.hpp"
2 
3 #include <cmath>
4 #include <cassert>
5 
6 namespace avtranscoder
7 {
8 
9 VideoCodec::VideoCodec(const ECodecType type, const std::string& codecName)
10  : ICodec(type, codecName)
11 {
12 }
13 
14 VideoCodec::VideoCodec(const ECodecType type, const AVCodecID codecId)
15  : ICodec(type, codecId)
16 {
17 }
18 
19 VideoCodec::VideoCodec(const ECodecType type, AVCodecContext& avCodecContext)
20  : ICodec(type, avCodecContext)
21 {
22 }
23 
25 {
26  assert(_avCodecContext != NULL);
27  VideoFrameDesc videoFrameDesc(_avCodecContext->width, _avCodecContext->height, _avCodecContext->pix_fmt);
28  double fps = 1.0 * _avCodecContext->time_base.den / (_avCodecContext->time_base.num * _avCodecContext->ticks_per_frame);
29  if(!std::isinf(fps))
30  videoFrameDesc._fps = fps;
31  return videoFrameDesc;
32 }
33 
35 {
36  _avCodecContext->width = videoFrameDesc._width;
37  _avCodecContext->height = videoFrameDesc._height;
38  _avCodecContext->pix_fmt = videoFrameDesc._pixelFormat;
39  _avCodecContext->time_base.num = 1;
40  _avCodecContext->time_base.den = videoFrameDesc._fps;
41  _avCodecContext->ticks_per_frame = 1;
42 }
43 }
Description to create a video frame.
Definition: VideoFrame.hpp:21
#define AVCodecID
Definition: common.hpp:45
void setImageParameters(const VideoFrameDesc &videoFrameDesc)
Definition: VideoCodec.cpp:34
AVCodecContext * _avCodecContext
Full codec instance description (has ownership)
Definition: ICodec.hpp:66
ECodecType
Define if a codec is for encoding or decoding.
Definition: ICodec.hpp:19
VideoCodec(const ECodecType type, const std::string &codecName="")
Definition: VideoCodec.cpp:9
VideoFrameDesc getVideoFrameDesc() const
Definition: VideoCodec.cpp:24