Home | History | Annotate | Download | only in private
      1 /* Copyright 2014 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 
      6 #ifndef PPAPI_CPP_PRIVATE_IMAGE_CAPTURE_PRIVATE_H_
      7 #define PPAPI_CPP_PRIVATE_IMAGE_CAPTURE_PRIVATE_H_
      8 
      9 #include "ppapi/c/private/ppb_image_capture_private.h"
     10 #include "ppapi/cpp/completion_callback.h"
     11 #include "ppapi/cpp/private/camera_capabilities_private.h"
     12 #include "ppapi/cpp/private/image_capture_config_private.h"
     13 #include "ppapi/cpp/resource.h"
     14 #include "ppapi/cpp/var.h"
     15 
     16 /// @file
     17 /// Defines the <code>ImageCapture_Private</code> interface. Used for
     18 /// acquiring a single still image from a camera source.
     19 namespace pp {
     20 
     21 /// To capture a still image with this class, use the following steps.
     22 /// 1. Create an ImageCapture_Private object by the constructor.
     23 /// 2. Call GetCameraCapabilities to get the supported preview sizes.
     24 /// 3. For optimal performance, set one of the supported preview size as the
     25 ///    constraints of getUserMedia. Use the created MediaStreamVideoTrack for
     26 ///    camera previews.
     27 /// 4. Set the same preview size and other settings by SetConfig.
     28 /// 5. Call CaptureStillImage to capture a still image. Play the shutter sound
     29 ///    in the shutter callback. The image from the preview callback can be used
     30 ///    for display. JPEG image will be returned to the JPEG callback.
     31 class ImageCapture_Private {
     32  public:
     33   /// Default constructor for creating an is_null()
     34   /// <code>ImageCapture_Private</code> object.
     35   ImageCapture_Private();
     36 
     37   /// Creates an ImageCapture_Private resource.
     38   ///
     39   /// @param[in] instance A <code>PP_Instance</code> identifying one instance
     40   /// of a module.
     41   /// @param[in] camera_source_id A <code>Var</code> identifying a camera
     42   /// source. The type is string. The ID can be obtained from
     43   /// MediaStreamTrack.getSources() or MediaStreamVideoTrack.id. If a
     44   /// MediaStreamVideoTrack is associated with the same source and the track
     45   /// is closed, this ImageCapture_Private object can still do image capture.
     46   /// @param[in] error_callback A <code>ImageCapture_Private_ErrorCallback
     47   /// </code> callback to indicate the image capture has failed.
     48   /// @param[inout] user_data An opaque pointer that will be passed to the
     49   /// callbacks of ImageCapture_Private.
     50   ImageCapture_Private(const InstanceHandle& instance,
     51                        const Var& camera_source_id,
     52                        PPB_ImageCapture_Private_ErrorCallback error_callback,
     53                        void* user_data);
     54 
     55   /// Constructs a <code>ImageCapture_Private</code> from a <code>
     56   /// Resource</code>.
     57   ///
     58   /// @param[in] resource A <code>ImageCapture_Private</code>
     59   /// resource.
     60   explicit ImageCapture_Private(const Resource& resource);
     61 
     62   /// A constructor used when you have received a <code>PP_Resource</code> as a
     63   /// return value that has had 1 ref added for you.
     64   ///
     65   /// @param[in] resource A <code>ImageCapture_Private</code>
     66   /// resource.
     67   ImageCapture_Private(PassRef, PP_Resource resource);
     68 
     69   // Destructor.
     70   ~ImageCapture_Private();
     71 
     72   /// Disconnects from the camera and cancels all pending capture requests.
     73   /// After this returns, no callbacks will be called. If <code>
     74   /// ImageCapture_Private</code> is destroyed and is not closed yet, this
     75   /// function will be automatically called. Calling this more than once has no
     76   /// effect.
     77   ///
     78   /// @param[in] callback <code>CompletionCallback</code> to be called upon
     79   /// completion of <code>Close()</code>.
     80   ///
     81   /// @return An int32_t containing a result code from <code>pp_errors.h</code>.
     82   int32_t Close(const CompletionCallback& callback);
     83 
     84   /// Sets the configuration of the image capture.
     85   /// If <code>SetConfig()</code> is not called, default settings will be used.
     86   ///
     87   /// @param[in] config A <code>ImageCaptureConfig_Private</code> object.
     88   /// @param[in] callback <code>CompletionCallback</code> to be called upon
     89   /// completion of <code>SetConfig()</code>.
     90   ///
     91   /// @return An int32_t containing a result code from <code>pp_errors.h</code>.
     92   /// Returns <code>PP_ERROR_INPROGRESS</code> if there is a pending call of
     93   /// <code>SetConfig()</code> or <code>CaptureStillImage()</code>.
     94   /// If an error is returned, the configuration will not be changed.
     95   int32_t SetConfig(const ImageCaptureConfig_Private& config,
     96                     const CompletionCallback& callback);
     97 
     98   /// Gets the configuration of the image capture.
     99   ///
    100   /// @param[in] callback A <code>CompletionCallbackWithOutput</code>
    101   /// to be called upon completion.
    102   ///
    103   /// @return An int32_t containing a result code from <code>pp_errors.h</code>.
    104   int32_t GetConfig(
    105       const CompletionCallbackWithOutput<ImageCaptureConfig_Private>& callback);
    106 
    107   /// Gets the camera capabilities.
    108   ///
    109   /// The camera capabilities do not change for a given camera source.
    110   ///
    111   /// @param[in] callback A <code>CompletionCallbackWithOutput</code>
    112   /// to be called upon completion.
    113   ///
    114   /// @return An int32_t containing a result code from <code>pp_errors.h</code>.
    115   int32_t GetCameraCapabilities(
    116       const CompletionCallbackWithOutput<CameraCapabilities_Private>& callback);
    117 
    118   /// Captures a still JPEG image from the camera.
    119   ///
    120   /// Triggers an asynchronous image capture. The camera will initiate a series
    121   /// of callbacks to the application as the image capture progresses. The
    122   /// callbacks will be invoked in the order of shutter callback, preview
    123   /// callback, and JPEG callback. The shutter callback occurs after the image
    124   /// is captured. This can be used to trigger a sound to let the user know that
    125   /// image has been captured. The preview callback occurs when a scaled, fully
    126   /// processed preview image is available. The JPEG callback occurs when the
    127   /// compressed image is available. If there is an error after the capture is
    128   /// in progress, the error callback passed to <code>
    129   /// ImageCapture_Private.Create()</code> will be invoked. All the callbacks
    130   /// are invoked by the thread that calls this function.
    131   ///
    132   /// The size of the preview image in preview callback is determined by
    133   /// <code>ImageCaptureConfig_Private.SetPreviewSize</code>. The format is
    134   /// decided by the camera and can be got from <code>VideoFrame.GetFormat
    135   /// </code>. The size of the JPEG image is determined by <code>
    136   /// ImageCaptureConfig_Private.SetJpegSize</code>.
    137   ///
    138   /// The camera may need to stop and re-start streaming during image capture.
    139   /// If some MediaStreamVideoTrack are associated with the camera source, they
    140   /// will receive mute and unmute events. The mute event will be received
    141   /// before all the callbacks. The unmute event will be received after all the
    142   /// callbacks. The preview image will not be sent to the video tracks
    143   /// associated with the camera.
    144   ///
    145   /// @param[in] shutter_callback A <code>
    146   /// ImageCapture_Private_ShutterCallback</code> callback to indicate the
    147   /// image has been taken.
    148   /// @param[in] preview_callback A <code>
    149   /// ImageCapture_Private_PreviewCallback</code> callback to return a
    150   /// preview of the captured image.
    151   /// @param[in] jpeg_callback A <code>
    152   /// ImageCapture_Private_JpegCallback</code> callback to return captured
    153   /// JPEG image.
    154   /// @param[out] sequence_id The sequence ID is a unique monotonically
    155   /// increasing value starting from 0, incremented every time a new request
    156   /// like image capture is submitted.
    157   ///
    158   /// @return An int32_t containing a result code from <code>pp_errors.h</code>.
    159   /// PP_OK means the callbacks will be triggered. Other values mean the
    160   /// callbacks will not be triggered.
    161   int32_t CaptureStillImage(
    162       PPB_ImageCapture_Private_ShutterCallback shutter_callback,
    163       PPB_ImageCapture_Private_PreviewCallback preview_callback,
    164       PPB_ImageCapture_Private_JpegCallback jpeg_callback,
    165       int64_t* sequence_id);
    166 
    167   /// Determines if a resource is an image capture resource.
    168   ///
    169   /// @param[in] resource The <code>Resource</code> to test.
    170   ///
    171   /// @return true if the given resource is an image capture resource or false
    172   /// otherwise.
    173   static bool IsImageCapture(const Resource& resource);
    174 };
    175 
    176 } // namespace pp
    177 
    178 #endif  /* PPAPI_CPP_PRIVATE_IMAGE_CAPTURE_PRIVATE_H_ */
    179 
    180