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

« back to all changes in this revision

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

  • Committer: Package Import Robot
  • Author(s): Jonathan Riddell
  • Date: 2015-01-07 14:51:16 UTC
  • mfrom: (4.3.5 sid)
  • Revision ID: package-import@ubuntu.com-20150107145116-yxnafinf4lrdvrmx
Tags: 1.4.1-0.1ubuntu1
* Merge with Debian, remaining changes:
 - Drop soprano, nepomuk build-dep
* Drop ubuntu patches, now upstream

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 *  Copyright (C) 2011-2013 Savoir-Faire Linux Inc.
3
 
 *  Author: Rafaël Carré <rafael.carre@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_V4L2_H__
32
 
#define __VIDEO_V4L2_H__
33
 
 
34
 
#include <string>
35
 
#include <vector>
36
 
#include <sstream>
37
 
 
38
 
extern "C" {
39
 
#include <linux/videodev2.h>
40
 
#if !defined(VIDIOC_ENUM_FRAMESIZES) || !defined(VIDIOC_ENUM_FRAMEINTERVALS)
41
 
#   error You need at least Linux 2.6.19
42
 
#endif
43
 
}
44
 
 
45
 
namespace sfl_video {
46
 
 
47
 
class VideoV4l2Size {
48
 
    public:
49
 
        VideoV4l2Size(unsigned height, unsigned width);
50
 
 
51
 
        /**
52
 
         * @throw std::runtime_error
53
 
         */
54
 
        void getFrameRates(int fd, unsigned int pixel_format);
55
 
        std::vector<std::string> getRateList();
56
 
 
57
 
        unsigned height;
58
 
        unsigned width;
59
 
 
60
 
    private:
61
 
        std::vector<float> rates_;
62
 
};
63
 
 
64
 
class VideoV4l2Channel {
65
 
    public:
66
 
        VideoV4l2Channel(unsigned idx, const char *s);
67
 
 
68
 
        /**
69
 
         * @throw std::runtime_error
70
 
         */
71
 
        void getFormat(int fd);
72
 
        /**
73
 
         * @throw std::runtime_error
74
 
         */
75
 
        unsigned int getSizes(int fd, unsigned int pixel_format);
76
 
 
77
 
        void setFourcc(unsigned code);
78
 
        const char * getFourcc() const;
79
 
 
80
 
        std::vector<std::string> getSizeList() const;
81
 
        VideoV4l2Size getSize(const std::string &name) const;
82
 
 
83
 
        unsigned idx;
84
 
        std::string name;
85
 
 
86
 
    private:
87
 
        void putCIFFirst();
88
 
        std::vector<VideoV4l2Size> sizes_;
89
 
        char fourcc_[5];
90
 
};
91
 
 
92
 
class VideoV4l2Device {
93
 
    public:
94
 
        /**
95
 
         * @throw std::runtime_error
96
 
         */
97
 
        VideoV4l2Device(int fd, const std::string &device);
98
 
 
99
 
        std::string device;
100
 
        std::string name;
101
 
 
102
 
        std::vector<std::string> getChannelList() const;
103
 
 
104
 
        const VideoV4l2Channel &getChannel(const std::string &name) const;
105
 
 
106
 
    private:
107
 
        std::vector<VideoV4l2Channel> channels_;
108
 
};
109
 
 
110
 
} // namespace sfl_video
111
 
 
112
 
#endif //__VIDEO_V4L2_H__