123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- /*
- * Copyright (c) 2008 The Khronos Group Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject
- * to the following conditions:
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- */
- /** OMX_ContentPipe.h - OpenMax IL version 1.1.2
- * The OMX_ContentPipe header file contains the definitions used to define
- * the public interface for content piples. This header file is intended to
- * be used by the component.
- */
- #ifndef OMX_CONTENTPIPE_H
- #define OMX_CONTENTPIPE_H
- #ifndef KD_EACCES
- /* OpenKODE error codes. CPResult values may be zero (indicating success
- or one of the following values) */
- #define KD_EACCES (1)
- #define KD_EADDRINUSE (2)
- #define KD_EAGAIN (5)
- #define KD_EBADF (7)
- #define KD_EBUSY (8)
- #define KD_ECONNREFUSED (9)
- #define KD_ECONNRESET (10)
- #define KD_EDEADLK (11)
- #define KD_EDESTADDRREQ (12)
- #define KD_ERANGE (35)
- #define KD_EEXIST (13)
- #define KD_EFBIG (14)
- #define KD_EHOSTUNREACH (15)
- #define KD_EINVAL (17)
- #define KD_EIO (18)
- #define KD_EISCONN (20)
- #define KD_EISDIR (21)
- #define KD_EMFILE (22)
- #define KD_ENAMETOOLONG (23)
- #define KD_ENOENT (24)
- #define KD_ENOMEM (25)
- #define KD_ENOSPC (26)
- #define KD_ENOSYS (27)
- #define KD_ENOTCONN (28)
- #define KD_EPERM (33)
- #define KD_ETIMEDOUT (36)
- #define KD_EILSEQ (19)
- #endif
- /** Map types from OMX standard types only here so interface is as generic as possible. */
- typedef OMX_U32 CPresult;
- typedef char * CPstring;
- typedef void * CPhandle;
- typedef OMX_U32 CPuint;
- typedef OMX_S32 CPint;
- typedef char CPbyte;
- typedef OMX_BOOL CPbool;
- /** enumeration of origin types used in the CP_PIPETYPE's Seek function
- * @ingroup cp
- */
- typedef enum CP_ORIGINTYPE {
- CP_OriginBegin,
- CP_OriginCur,
- CP_OriginEnd,
- CP_OriginKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
- CP_OriginVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
- CP_OriginMax = 0X7FFFFFFF
- } CP_ORIGINTYPE;
- /** enumeration of contact access types used in the CP_PIPETYPE's Open function
- * @ingroup cp
- */
- typedef enum CP_ACCESSTYPE {
- CP_AccessRead,
- CP_AccessWrite,
- CP_AccessReadWrite ,
- CP_AccessKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
- CP_AccessVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
- CP_AccessMax = 0X7FFFFFFF
- } CP_ACCESSTYPE;
- /** enumeration of results returned by the CP_PIPETYPE's CheckAvailableBytes function
- * @ingroup cp
- */
- typedef enum CP_CHECKBYTESRESULTTYPE
- {
- CP_CheckBytesOk, /**< There are at least the request number
- of bytes available */
- CP_CheckBytesNotReady, /**< The pipe is still retrieving bytes
- and presently lacks sufficient bytes.
- Client will be called when they are
- sufficient bytes are available. */
- CP_CheckBytesInsufficientBytes , /**< The pipe has retrieved all bytes
- but those available are less than those
- requested */
- CP_CheckBytesAtEndOfStream, /**< The pipe has reached the end of stream
- and no more bytes are available. */
- CP_CheckBytesOutOfBuffers, /**< All read/write buffers are currently in use. */
- CP_CheckBytesKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
- CP_CheckBytesVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
- CP_CheckBytesMax = 0X7FFFFFFF
- } CP_CHECKBYTESRESULTTYPE;
- /** enumeration of content pipe events sent to the client callback.
- * @ingroup cp
- */
- typedef enum CP_EVENTTYPE{
- CP_BytesAvailable, /** bytes requested in a CheckAvailableBytes call are now available*/
- CP_Overflow, /** enumeration of content pipe events sent to the client callback*/
- CP_PipeDisconnected , /** enumeration of content pipe events sent to the client callback*/
- CP_EventKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
- CP_EventVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
- CP_EventMax = 0X7FFFFFFF
- } CP_EVENTTYPE;
- /** content pipe definition
- * @ingroup cp
- */
- typedef struct CP_PIPETYPE
- {
- /** Open a content stream for reading or writing. */
- CPresult (*Open)( CPhandle* hContent, CPstring szURI, CP_ACCESSTYPE eAccess );
- /** Close a content stream. */
- CPresult (*Close)( CPhandle hContent );
- /** Create a content source and open it for writing. */
- CPresult (*Create)( CPhandle *hContent, CPstring szURI );
- /** Check the that specified number of bytes are available for reading or writing (depending on access type).*/
- CPresult (*CheckAvailableBytes)( CPhandle hContent, CPuint nBytesRequested, CP_CHECKBYTESRESULTTYPE *eResult );
- /** Seek to certain position in the content relative to the specified origin. */
- CPresult (*SetPosition)( CPhandle hContent, CPint nOffset, CP_ORIGINTYPE eOrigin);
- /** Retrieve the current position relative to the start of the content. */
- CPresult (*GetPosition)( CPhandle hContent, CPuint *pPosition);
- /** Retrieve data of the specified size from the content stream (advance content pointer by size of data).
- Note: pipe client provides pointer. This function is appropriate for small high frequency reads. */
- CPresult (*Read)( CPhandle hContent, CPbyte *pData, CPuint nSize);
- /** Retrieve a buffer allocated by the pipe that contains the requested number of bytes.
- Buffer contains the next block of bytes, as specified by nSize, of the content. nSize also
- returns the size of the block actually read. Content pointer advances the by the returned size.
- Note: pipe provides pointer. This function is appropriate for large reads. The client must call
- ReleaseReadBuffer when done with buffer.
- In some cases the requested block may not reside in contiguous memory within the
- pipe implementation. For instance if the pipe leverages a circular buffer then the requested
- block may straddle the boundary of the circular buffer. By default a pipe implementation
- performs a copy in this case to provide the block to the pipe client in one contiguous buffer.
- If, however, the client sets bForbidCopy, then the pipe returns only those bytes preceding the memory
- boundary. Here the client may retrieve the data in segments over successive calls. */
- CPresult (*ReadBuffer)( CPhandle hContent, CPbyte **ppBuffer, CPuint *nSize, CPbool bForbidCopy);
- /** Release a buffer obtained by ReadBuffer back to the pipe. */
- CPresult (*ReleaseReadBuffer)(CPhandle hContent, CPbyte *pBuffer);
- /** Write data of the specified size to the content (advance content pointer by size of data).
- Note: pipe client provides pointer. This function is appropriate for small high frequency writes. */
- CPresult (*Write)( CPhandle hContent, CPbyte *data, CPuint nSize);
- /** Retrieve a buffer allocated by the pipe used to write data to the content.
- Client will fill buffer with output data. Note: pipe provides pointer. This function is appropriate
- for large writes. The client must call WriteBuffer when done it has filled the buffer with data.*/
- CPresult (*GetWriteBuffer)( CPhandle hContent, CPbyte **ppBuffer, CPuint nSize);
- /** Deliver a buffer obtained via GetWriteBuffer to the pipe. Pipe will write the
- the contents of the buffer to content and advance content pointer by the size of the buffer */
- CPresult (*WriteBuffer)( CPhandle hContent, CPbyte *pBuffer, CPuint nFilledSize);
- /** Register a per-handle client callback with the content pipe. */
- CPresult (*RegisterCallback)( CPhandle hContent, CPresult (*ClientCallback)(CP_EVENTTYPE eEvent, CPuint iParam));
- } CP_PIPETYPE;
- #endif
|