2
Copyright (c) 2012-2014 Maarten Baert <maarten-baert@hotmail.com>
4
This file is part of SimpleScreenRecorder.
6
SimpleScreenRecorder is free software: you can redistribute it and/or modify
7
it under the terms of the GNU General Public License as published by
8
the Free Software Foundation, either version 3 of the License, or
9
(at your option) any later version.
11
SimpleScreenRecorder is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
GNU General Public License for more details.
16
You should have received a copy of the GNU General Public License
17
along with SimpleScreenRecorder. If not, see <http://www.gnu.org/licenses/>.
23
#include "BaseEncoder.h"
25
class VideoEncoder : public BaseEncoder {
28
struct PixelFormatData {
35
static const size_t THROTTLE_THRESHOLD_FRAMES, THROTTLE_THRESHOLD_PACKETS;
36
static const std::vector<PixelFormatData> SUPPORTED_PIXEL_FORMATS;
39
#if !SSR_USE_AVCODEC_ENCODE_VIDEO2
40
std::vector<uint8_t> m_temp_buffer;
44
VideoEncoder(Muxer* muxer, AVStream* stream, AVCodec* codec, AVDictionary** options);
47
// Returns the required pixel format.
48
PixelFormat GetPixelFormat();
50
unsigned int GetWidth();
51
unsigned int GetHeight();
52
unsigned int GetFrameRate();
54
// Returns an additional delay (in us) between frames, based on the queue size, to avoid memory problems.
55
// As long as the queues are relatively small, this function will just return 0.
56
// This function is thread-safe.
57
int64_t GetFrameDelay();
60
static bool AVCodecIsSupported(const QString& codec_name);
61
static void PrepareStream(AVStream* stream, AVCodec* codec, AVDictionary** options, const std::vector<std::pair<QString, QString> >& codec_options,
62
unsigned int bit_rate, unsigned int width, unsigned int height, unsigned int frame_rate);
65
virtual bool EncodeFrame(AVFrame* frame) override;