49 AVFormatContext *formatContext);
66 VideoFrameEncoder(AVStream *stream,
const Codec &codec, HWAccelUPtr hwAccel,
68 const QMediaEncoderSettings &encoderSettings,
bool needsGlobalHeader);
70 static AVStream *createStream(
const SourceParams &sourceParams, AVFormatContext *formatContext);
72 bool updateSourceFormatAndSize(
const AVFrame *frame);
74 void updateConversions();
76 static VideoFrameEncoderUPtr create(AVStream *stream,
const Codec &codec, HWAccelUPtr hwAccel,
78 const QMediaEncoderSettings &encoderSettings,
79 bool needsGlobalHeader);
81 void initCodecFrameRate();
84 std::vector<ScoredPixelFormat> enumerateTargetSwFormats()
const;
85 bool tryInitTargetSwFormat(AVPixelFormat targetSwFormat);
87 bool initCodecContext();
91 qint64 estimateDuration(
const AVPacket &packet,
bool isFirstPacket);
94 const QMediaEncoderSettings m_settings;
95 AVStream *
const m_stream =
nullptr;
97 const HWAccelUPtr m_accel;
98 const bool m_needsGlobalHeader =
false;
104 AVCodecContextUPtr m_codecContext;
105 SwsContextUPtr m_scaleContext;
108 AVPixelFormat m_targetFormat;
110 bool m_downloadFromHW =
false;
111 bool m_uploadToHW =
false;
113 qreal m_sourceFrameRate = 0.f;
114 AVRational m_codecFrameRate = { 0, 1 };
119 AVRational effectiveCodecFrameRate()
const
121 return m_codecFrameRate.den > 0 && m_codecFrameRate.num > 0
123 : AVRational{ DefaultVideoFrameRate, 1 };
127 int64_t m_packetDtsOffset = 0;