• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
4 
5 #ifndef MEDIA_VIDEO_CAPTURE_VIDEO_CAPTURE_TYPES_H_
6 #define MEDIA_VIDEO_CAPTURE_VIDEO_CAPTURE_TYPES_H_
7 
8 #include <vector>
9 
10 #include "media/base/media_export.h"
11 #include "ui/gfx/size.h"
12 
13 namespace media {
14 
15 // TODO(wjia): this type should be defined in a common place and
16 // shared with device manager.
17 typedef int VideoCaptureSessionId;
18 
19 // Color formats from camera.
20 enum VideoPixelFormat {
21   PIXEL_FORMAT_UNKNOWN,  // Color format not set.
22   PIXEL_FORMAT_I420,
23   PIXEL_FORMAT_YUY2,
24   PIXEL_FORMAT_UYVY,
25   PIXEL_FORMAT_RGB24,
26   PIXEL_FORMAT_ARGB,
27   PIXEL_FORMAT_MJPEG,
28   PIXEL_FORMAT_NV21,
29   PIXEL_FORMAT_YV12,
30   PIXEL_FORMAT_TEXTURE,  // Capture format as a GL texture.
31   PIXEL_FORMAT_MAX,
32 };
33 
34 // Policies for capture devices that has source content with dynamic resolution.
35 enum ResolutionChangePolicy {
36   // Capture device outputs a fixed resolution all the time. The resolution of
37   // the first frame is the resolution for all frames.
38   // It is implementation specific for the capture device to scale, letter-box
39   // and pillar-box. The only gurantee is that resolution will never change.
40   RESOLUTION_POLICY_FIXED,
41 
42   // Capture device outputs frames with dynamic resolution. The width and height
43   // will not exceed the maximum dimensions specified. The typical scenario is
44   // the frames will have the same aspect ratio as the original content and
45   // scaled down to fit inside the limit.
46   RESOLUTION_POLICY_DYNAMIC_WITHIN_LIMIT,
47 
48   RESOLUTION_POLICY_LAST,
49 };
50 
51 // Some drivers use rational time per frame instead of float frame rate, this
52 // constant k is used to convert between both: A fps -> [k/k*A] seconds/frame.
53 const int kFrameRatePrecision = 10000;
54 
55 // Video capture format specification.
56 // This class is used by the video capture device to specify the format of every
57 // frame captured and returned to a client. It is also used to specify a
58 // supported capture format by a device.
59 class MEDIA_EXPORT VideoCaptureFormat {
60  public:
61   VideoCaptureFormat();
62   VideoCaptureFormat(const gfx::Size& frame_size,
63                      float frame_rate,
64                      VideoPixelFormat pixel_format);
65 
66   std::string ToString() const;
67   static std::string PixelFormatToString(VideoPixelFormat format);
68 
69   // Checks that all values are in the expected range. All limits are specified
70   // in media::Limits.
71   bool IsValid() const;
72 
73   gfx::Size frame_size;
74   float frame_rate;
75   VideoPixelFormat pixel_format;
76 };
77 
78 typedef std::vector<VideoCaptureFormat> VideoCaptureFormats;
79 
80 // Parameters for starting video capture.
81 // This class is used by the client of a video capture device to specify the
82 // format of frames in which the client would like to have captured frames
83 // returned.
84 class MEDIA_EXPORT VideoCaptureParams {
85  public:
86   VideoCaptureParams();
87 
88   // Requests a resolution and format at which the capture will occur.
89   VideoCaptureFormat requested_format;
90 
91   // Policy for resolution change.
92   ResolutionChangePolicy resolution_change_policy;
93 };
94 
95 }  // namespace media
96 
97 #endif  // MEDIA_VIDEO_CAPTURE_VIDEO_CAPTURE_TYPES_H_
98