~ubuntu-branches/ubuntu/wily/sflphone/wily

« back to all changes in this revision

Viewing changes to daemon/src/video/video_send_thread.h

  • Committer: Package Import Robot
  • Author(s): Mark Purcell
  • Date: 2014-01-28 18:23:36 UTC
  • mfrom: (1.1.11)
  • mto: This revision was merged to the branch mainline in revision 24.
  • Revision ID: package-import@ubuntu.com-20140128182336-3xenud1kbnwmf3mz
* New upstream release 
  - Fixes "New Upstream Release" (Closes: #735846)
  - Fixes "Ringtone does not stop" (Closes: #727164)
  - Fixes "[sflphone-kde] crash on startup" (Closes: #718178)
  - Fixes "sflphone GUI crashes when call is hung up" (Closes: #736583)
* Build-Depends: ensure GnuTLS 2.6
  - libucommon-dev (>= 6.0.7-1.1), libccrtp-dev (>= 2.0.6-3)
  - Fixes "FTBFS Build-Depends libgnutls{26,28}-dev" (Closes: #722040)
* Fix "boost 1.49 is going away" unversioned Build-Depends: (Closes: #736746)
* Add Build-Depends: libsndfile-dev, nepomuk-core-dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 *  Copyright (C) 2011-2012 Savoir-Faire Linux Inc.
3
 
 *  Author: Tristan Matthews <tristan.matthews@savoirfairelinux.com>
4
 
 *
5
 
 *  This program is free software; you can redistribute it and/or modify
6
 
 *  it under the terms of the GNU General Public License as published by
7
 
 *  the Free Software Foundation; either version 3 of the License, or
8
 
 *  (at your option) any later version.
9
 
 *
10
 
 *  This program is distributed in the hope that it will be useful,
11
 
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 
 *  GNU General Public License for more details.
14
 
 *
15
 
 *  You should have received a copy of the GNU General Public License
16
 
 *  along with this program; if not, write to the Free Software
17
 
 *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA.
18
 
 *
19
 
 *  Additional permission under GNU GPL version 3 section 7:
20
 
 *
21
 
 *  If you modify this program, or any covered work, by linking or
22
 
 *  combining it with the OpenSSL project's OpenSSL library (or a
23
 
 *  modified version of that library), containing parts covered by the
24
 
 *  terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
25
 
 *  grants you additional permission to convey the resulting work.
26
 
 *  Corresponding Source for a non-source form of such a combination
27
 
 *  shall include the source code for the parts of OpenSSL used as well
28
 
 *  as that of the covered work.
29
 
 */
30
 
 
31
 
#ifndef _VIDEO_SEND_THREAD_H_
32
 
#define _VIDEO_SEND_THREAD_H_
33
 
 
34
 
#include <map>
35
 
#include <string>
36
 
#include <tr1/memory>
37
 
#include "noncopyable.h"
38
 
#include "shm_sink.h"
39
 
#include "video_provider.h"
40
 
 
41
 
extern "C" {
42
 
#include <libavformat/avformat.h>
43
 
}
44
 
 
45
 
class SwsContext;
46
 
class AVCodecContext;
47
 
class AVStream;
48
 
class AVFormatContext;
49
 
class AVFrame;
50
 
class AVCodec;
51
 
 
52
 
namespace sfl_video {
53
 
 
54
 
class SocketPair;
55
 
 
56
 
class VideoSendThread : public VideoProvider {
57
 
    private:
58
 
        NON_COPYABLE(VideoSendThread);
59
 
        void forcePresetX264();
60
 
        void print_sdp();
61
 
        void setup();
62
 
        void prepareEncoderContext(AVCodec *encoder);
63
 
        void fillBuffer(void *data);
64
 
        static int interruptCb(void *ctx);
65
 
 
66
 
        std::map<std::string, std::string> args_;
67
 
        /*-------------------------------------------------------------*/
68
 
        /* These variables should be used in thread (i.e. run()) only! */
69
 
        /*-------------------------------------------------------------*/
70
 
        uint8_t *scaledInputBuffer_;
71
 
        uint8_t *encoderBuffer_;
72
 
        AVCodecContext *inputDecoderCtx_;
73
 
        AVFrame *rawFrame_;
74
 
        AVFrame *scaledInput_;
75
 
        int streamIndex_;
76
 
        int encoderBufferSize_;
77
 
        AVCodecContext *encoderCtx_;
78
 
        AVStream *stream_;
79
 
        AVFormatContext *inputCtx_;
80
 
        AVFormatContext *outputCtx_;
81
 
        SwsContext *previewConvertCtx_;
82
 
        SwsContext *encoderConvertCtx_;
83
 
        std::string sdp_;
84
 
 
85
 
        SHMSink sink_;
86
 
        size_t bufferSize_;
87
 
        const std::string id_;
88
 
 
89
 
        AVIOInterruptCB interruptCb_;
90
 
        bool threadRunning_;
91
 
        int forceKeyFrame_;
92
 
        static void *runCallback(void *);
93
 
        pthread_t thread_;
94
 
        int frameNumber_;
95
 
        std::tr1::shared_ptr<AVIOContext> muxContext_;
96
 
        void run();
97
 
        bool captureFrame();
98
 
        void renderFrame();
99
 
        void encodeAndSendVideo();
100
 
        friend struct VideoTxContextHandle;
101
 
 
102
 
    public:
103
 
        VideoSendThread(const std::string &id, const std::map<std::string, std::string> &args);
104
 
        ~VideoSendThread();
105
 
        void addIOContext(SocketPair &sock);
106
 
        void start();
107
 
        std::string getSDP() const { return sdp_; }
108
 
        void forceKeyFrame();
109
 
};
110
 
}
111
 
 
112
 
#endif // _VIDEO_SEND_THREAD_H_