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