~gabriel1984sibiu/simplescreenrecorder/simplescreenrecorder

« back to all changes in this revision

Viewing changes to src/AV/Output/VideoEncoder.h

  • Committer: Grevutiu Gabriel
  • Date: 2014-12-24 12:30:41 UTC
  • Revision ID: gabriel1984sibiu@gmail.com-20141224123041-xndgql40iww2bh2m
original source code from upstreamer

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
Copyright (c) 2012-2014 Maarten Baert <maarten-baert@hotmail.com>
 
3
 
 
4
This file is part of SimpleScreenRecorder.
 
5
 
 
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.
 
10
 
 
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.
 
15
 
 
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/>.
 
18
*/
 
19
 
 
20
#pragma once
 
21
#include "Global.h"
 
22
 
 
23
#include "BaseEncoder.h"
 
24
 
 
25
class VideoEncoder : public BaseEncoder {
 
26
 
 
27
private:
 
28
        struct PixelFormatData {
 
29
                QString m_name;
 
30
                PixelFormat m_format;
 
31
                bool m_is_yuv;
 
32
        };
 
33
 
 
34
private:
 
35
        static const size_t THROTTLE_THRESHOLD_FRAMES, THROTTLE_THRESHOLD_PACKETS;
 
36
        static const std::vector<PixelFormatData> SUPPORTED_PIXEL_FORMATS;
 
37
 
 
38
private:
 
39
#if !SSR_USE_AVCODEC_ENCODE_VIDEO2
 
40
        std::vector<uint8_t> m_temp_buffer;
 
41
#endif
 
42
 
 
43
public:
 
44
        VideoEncoder(Muxer* muxer, AVStream* stream, AVCodec* codec, AVDictionary** options);
 
45
        ~VideoEncoder();
 
46
 
 
47
        // Returns the required pixel format.
 
48
        PixelFormat GetPixelFormat();
 
49
 
 
50
        unsigned int GetWidth();
 
51
        unsigned int GetHeight();
 
52
        unsigned int GetFrameRate();
 
53
 
 
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();
 
58
 
 
59
public:
 
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);
 
63
 
 
64
private:
 
65
        virtual bool EncodeFrame(AVFrame* frame) override;
 
66
 
 
67
};