Home | History | Annotate | Download | only in capture
      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