48 AVFormatContext *formatContext);
65 VideoFrameEncoder(AVStream *stream,
const Codec &codec, HWAccelUPtr hwAccel,
67 const QMediaEncoderSettings &encoderSettings);
69 static AVStream *createStream(
const SourceParams &sourceParams, AVFormatContext *formatContext);
71 bool updateSourceFormatAndSize(
const AVFrame *frame);
73 void updateConversions();
77 VideoFrameEncoderUPtr encoder;
78 AVPixelFormat targetFormat = AV_PIX_FMT_NONE;
81 static CreationResult create(AVStream *stream,
const Codec &codec, HWAccelUPtr hwAccel,
83 const QMediaEncoderSettings &encoderSettings,
84 const AVPixelFormatSet &prohibitedTargetFormats = {});
86 void initTargetSize();
88 void initCodecFrameRate();
90 bool initTargetFormats(
const AVPixelFormatSet &prohibitedTargetFormats);
94 bool initCodecContext();
98 qint64 estimateDuration(
const AVPacket &packet,
bool isFirstPacket);
101 const QMediaEncoderSettings m_settings;
102 AVStream *
const m_stream =
nullptr;
104 const HWAccelUPtr m_accel;
110 AVCodecContextUPtr m_codecContext;
111 SwsContextUPtr m_scaleContext;
116 bool m_downloadFromHW =
false;
117 bool m_uploadToHW =
false;
119 qreal m_sourceFrameRate = 0.f;
120 AVRational m_codecFrameRate = { 0, 1 };
125 AVRational effectiveCodecFrameRate()
const
127 return m_codecFrameRate.den > 0 && m_codecFrameRate.num > 0
129 : AVRational{ DefaultVideoFrameRate, 1 };
133 int64_t m_packetDtsOffset = 0;