Re-subimission of https://codereview.chromium.org/1041213003/
[chromium-blink-merge.git] / media / base / video_capture_types.h
blob817e94298cb9d4fbb31ea3cbf874550dc4577b84
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef MEDIA_BASE_VIDEO_CAPTURE_TYPES_H_
6 #define MEDIA_BASE_VIDEO_CAPTURE_TYPES_H_
8 #include <vector>
10 #include "media/base/media_export.h"
11 #include "ui/gfx/geometry/size.h"
13 namespace media {
15 // TODO(wjia): this type should be defined in a common place and
16 // shared with device manager.
17 typedef int VideoCaptureSessionId;
19 // Color formats from camera. This list is sorted in order of preference.
20 enum VideoPixelFormat {
21 PIXEL_FORMAT_I420,
22 PIXEL_FORMAT_YV12,
23 PIXEL_FORMAT_NV12,
24 PIXEL_FORMAT_NV21,
25 PIXEL_FORMAT_UYVY,
26 PIXEL_FORMAT_YUY2,
27 PIXEL_FORMAT_RGB24,
28 PIXEL_FORMAT_RGB32,
29 PIXEL_FORMAT_ARGB,
30 PIXEL_FORMAT_MJPEG,
31 PIXEL_FORMAT_TEXTURE, // Capture format as a GL texture.
32 PIXEL_FORMAT_UNKNOWN, // Color format not set.
33 PIXEL_FORMAT_MAX,
36 // Policies for capture devices that has source content with dynamic resolution.
37 enum ResolutionChangePolicy {
38 // Capture device outputs a fixed resolution all the time. The resolution of
39 // the first frame is the resolution for all frames.
40 // It is implementation specific for the capture device to scale, letter-box
41 // and pillar-box. The only guarantee is that resolution will never change.
42 RESOLUTION_POLICY_FIXED,
44 // Capture device outputs frames with dynamic resolution. The width and height
45 // will not exceed the maximum dimensions specified. The typical scenario is
46 // the frames will have the same aspect ratio as the original content and
47 // scaled down to fit inside the limit.
48 RESOLUTION_POLICY_DYNAMIC_WITHIN_LIMIT,
50 RESOLUTION_POLICY_LAST,
53 // Some drivers use rational time per frame instead of float frame rate, this
54 // constant k is used to convert between both: A fps -> [k/k*A] seconds/frame.
55 const int kFrameRatePrecision = 10000;
57 // Video capture format specification.
58 // This class is used by the video capture device to specify the format of every
59 // frame captured and returned to a client. It is also used to specify a
60 // supported capture format by a device.
61 class MEDIA_EXPORT VideoCaptureFormat {
62 public:
63 VideoCaptureFormat();
64 VideoCaptureFormat(const gfx::Size& frame_size,
65 float frame_rate,
66 VideoPixelFormat pixel_format);
68 std::string ToString() const;
69 static std::string PixelFormatToString(VideoPixelFormat format);
71 // Returns the required buffer size to hold an image of a given
72 // VideoCaptureFormat with no padding and tightly packed.
73 size_t ImageAllocationSize() const;
75 // Checks that all values are in the expected range. All limits are specified
76 // in media::Limits.
77 bool IsValid() const;
79 gfx::Size frame_size;
80 float frame_rate;
81 VideoPixelFormat pixel_format;
84 typedef std::vector<VideoCaptureFormat> VideoCaptureFormats;
86 // Parameters for starting video capture.
87 // This class is used by the client of a video capture device to specify the
88 // format of frames in which the client would like to have captured frames
89 // returned.
90 class MEDIA_EXPORT VideoCaptureParams {
91 public:
92 VideoCaptureParams();
94 // Requests a resolution and format at which the capture will occur.
95 VideoCaptureFormat requested_format;
97 // Policy for resolution change.
98 ResolutionChangePolicy resolution_change_policy;
101 } // namespace media
103 #endif // MEDIA_BASE_VIDEO_CAPTURE_TYPES_H_