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)/** 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * This file defines the <code>PPB_VideoDestination_Private</code> interface 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * for a video destination resource, which sends video frames to a MediaStream 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * video track in the browser. 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) label Chrome { 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) M28 = 0.1 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * The <code>PPB_VideoDestination_Private</code> interface contains pointers to 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * several functions for creating video destination resources and using them to 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * send video frames to a MediaStream video track in the browser. 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)interface PPB_VideoDestination_Private { 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Creates a video destination resource. 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param[in] instance A <code>PP_Instance</code> identifying an instance of 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * a module. 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @return A <code>PP_Resource</code> with a nonzero ID on success or zero on 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * failure. Failure means the instance was invalid. 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PP_Resource Create([in] PP_Instance instance); 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Determines if a resource is a video destination resource. 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param[in] resource The <code>PP_Resource</code> to test. 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @return A <code>PP_Bool</code> with <code>PP_TRUE</code> if the given 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * resource is a video destination resource or <code>PP_FALSE</code> 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * otherwise. 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PP_Bool IsVideoDestination([in] PP_Resource resource); 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Opens a video destination for putting frames. 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param[in] destination A <code>PP_Resource</code> corresponding to a video 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * destination resource. 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param[in] stream_url A <code>PP_Var</code> string holding a URL 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * identifying a MediaStream. 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param[in] callback A <code>PP_CompletionCallback</code> to be called upon 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * completion of Open(). 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @return An int32_t containing a result code from <code>pp_errors.h</code>. 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Returns PP_ERROR_BADRESOURCE if destination isn't a valid video 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * destination. 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Returns PP_ERROR_INPROGRESS if destination is already open. 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Returns PP_ERROR_FAILED if the MediaStream doesn't exist or if there is 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * some other browser error. 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int32_t Open([in] PP_Resource destination, 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) [in] PP_Var stream_url, 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) [in] PP_CompletionCallback callback); 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Puts a frame to the video destination. 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * After this call, you should take care to release your references to the 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * image embedded in the video frame. If you paint to the image after 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * PutFame(), there is the possibility of artifacts because the browser may 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * still be copying the frame to the stream. 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param[in] destination A <code>PP_Resource</code> corresponding to a video 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * destination resource. 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param[in] frame A <code>PP_VideoFrame_Private</code> holding the video 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * frame to send to the destination. 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @return An int32_t containing a result code from <code>pp_errors.h</code>. 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Returns PP_ERROR_BADRESOURCE if destination isn't a valid video 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * destination. 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Returns PP_ERROR_FAILED if destination is not open, if the video frame has 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * an invalid image data resource, or if some other browser error occurs. 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int32_t PutFrame([in] PP_Resource destination, 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) [in] PP_VideoFrame_Private frame); 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Closes the video destination. 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param[in] destination A <code>PP_Resource</code> corresponding to a video 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * destination. 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void Close([in] PP_Resource destination); 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 96