1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* Copyright (c) 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* From private/ppb_video_destination_private.idl, 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * modified Thu Apr 25 11:51:30 2013. 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#ifndef PPAPI_C_PRIVATE_PPB_VIDEO_DESTINATION_PRIVATE_H_ 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define PPAPI_C_PRIVATE_PPB_VIDEO_DESTINATION_PRIVATE_H_ 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/c/pp_bool.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/c/pp_completion_callback.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/c/pp_instance.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/c/pp_macros.h" 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/c/pp_resource.h" 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/c/pp_stdint.h" 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/c/pp_time.h" 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/c/pp_var.h" 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/c/private/pp_video_frame_private.h" 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define PPB_VIDEODESTINATION_PRIVATE_INTERFACE_0_1 \ 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "PPB_VideoDestination_Private;0.1" 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define PPB_VIDEODESTINATION_PRIVATE_INTERFACE \ 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PPB_VIDEODESTINATION_PRIVATE_INTERFACE_0_1 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @file 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * This file defines the <code>PPB_VideoDestination_Private</code> interface 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * for a video destination resource, which sends video frames to a MediaStream 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * video track in the browser. 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @addtogroup Interfaces 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @{ 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * The <code>PPB_VideoDestination_Private</code> interface contains pointers to 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * several functions for creating video destination resources and using them to 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * send video frames to a MediaStream video track in the browser. 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct PPB_VideoDestination_Private_0_1 { 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Creates a video destination resource. 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param[in] instance A <code>PP_Instance</code> identifying an instance of 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * a module. 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @return A <code>PP_Resource</code> with a nonzero ID on success or zero on 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * failure. Failure means the instance was invalid. 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PP_Resource (*Create)(PP_Instance instance); 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Determines if a resource is a video destination resource. 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param[in] resource The <code>PP_Resource</code> to test. 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @return A <code>PP_Bool</code> with <code>PP_TRUE</code> if the given 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * resource is a video destination resource or <code>PP_FALSE</code> 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * otherwise. 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PP_Bool (*IsVideoDestination)(PP_Resource resource); 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Opens a video destination for putting frames. 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param[in] destination A <code>PP_Resource</code> corresponding to a video 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * destination resource. 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param[in] stream_url A <code>PP_Var</code> string holding a URL 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * identifying a MediaStream. 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param[in] callback A <code>PP_CompletionCallback</code> to be called upon 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * completion of Open(). 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @return An int32_t containing a result code from <code>pp_errors.h</code>. 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Returns PP_ERROR_BADRESOURCE if destination isn't a valid video 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * destination. 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Returns PP_ERROR_INPROGRESS if destination is already open. 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Returns PP_ERROR_FAILED if the MediaStream doesn't exist or if there is 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * some other browser error. 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int32_t (*Open)(PP_Resource destination, 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) struct PP_Var stream_url, 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) struct PP_CompletionCallback callback); 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Puts a frame to the video destination. 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * After this call, you should take care to release your references to the 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * image embedded in the video frame. If you paint to the image after 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * PutFame(), there is the possibility of artifacts because the browser may 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * still be copying the frame to the stream. 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param[in] destination A <code>PP_Resource</code> corresponding to a video 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * destination resource. 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param[in] frame A <code>PP_VideoFrame_Private</code> holding the video 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * frame to send to the destination. 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @return An int32_t containing a result code from <code>pp_errors.h</code>. 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Returns PP_ERROR_BADRESOURCE if destination isn't a valid video 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * destination. 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Returns PP_ERROR_FAILED if destination is not open, if the video frame has 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * an invalid image data resource, or if some other browser error occurs. 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int32_t (*PutFrame)(PP_Resource destination, 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const struct PP_VideoFrame_Private* frame); 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Closes the video destination. 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param[in] destination A <code>PP_Resource</code> corresponding to a video 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * destination. 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void (*Close)(PP_Resource destination); 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)typedef struct PPB_VideoDestination_Private_0_1 PPB_VideoDestination_Private; 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @} 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif /* PPAPI_C_PRIVATE_PPB_VIDEO_DESTINATION_PRIVATE_H_ */ 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 123