OpenMAX Bellagio 0.9.3
content_pipe_file.c
Go to the documentation of this file.
1
26#include "content_pipe_file.h"
27
29static CPresult Create( CPhandle *hContent, CPstring szURI )
30{
31 file_ContentPipe* pFilePipe = (file_ContentPipe*) hContent;
32 char* pathname = szURI + 7;
33 CPresult err = 0;
34 int flags, ret;
35
36 DEBUG(DEB_LEV_FUNCTION_NAME, "content_pipe_file:%s \n", __func__);
37
38 if(0 != strncmp(szURI, "file://", 7))
39 err = KD_EINVAL;
40
41 flags = O_WRONLY | O_CREAT;
42
43 if(0 == err) {
44 ret = open(pathname, flags, 0);
45 if(-1 != ret) {
46 pFilePipe->fd = ret;
47 } else {
48 err = KD_EIO; /* ??? */
49 }
50 }
51
52 return err;
53}
54
56static CPresult Open( CPhandle* hContent, CPstring szURI, CP_ACCESSTYPE eAccess )
57{
58 file_ContentPipe* pFilePipe = (file_ContentPipe*) hContent;
59 CPresult err = 0;
60 int flags, ret;
61
62 DEBUG(DEB_LEV_FUNCTION_NAME, "content_pipe_file:%s \n", __func__);
63
64 if(0 != strncmp(szURI, "file://", 7))
65 err = KD_EINVAL;
66
67 if(0 == err)
68 switch(eAccess) {
69 case CP_AccessRead:
70 flags = O_RDONLY;
71 break;
72 case CP_AccessWrite:
73 flags = O_WRONLY;
74 break;
76 flags = O_RDWR;
77 break;
78 default:
79 err = KD_EINVAL; /* ??? */
80 break;
81 }
82
83 if(0 == err) {
84 char* pathname = szURI + 7;
85 ret = open(pathname, flags);
86 if(-1 != ret) {
87 pFilePipe->fd = ret;
88 } else {
89 /* Map errno */
90 err = KD_EIO; /* ??? */
91 }
92 }
93
94 return err;
95}
96
98static CPresult Close( CPhandle hContent )
99{
100 file_ContentPipe* pFilePipe = (file_ContentPipe*) hContent;
101 CPresult err = 0;
102 int ret;
103
104 DEBUG(DEB_LEV_FUNCTION_NAME, "content_pipe_file:%s \n", __func__);
105
106 ret = close(pFilePipe->fd);
107 if(ret == -1) {
108 /* Map errno */
109 err = KD_EIO; /* ??? */
110 }
111
112 return err;
113}
114
116static CPresult CheckAvailableBytes( CPhandle hContent, CPuint nBytesRequested, CP_CHECKBYTESRESULTTYPE *eResult )
117{
118 DEBUG(DEB_LEV_FUNCTION_NAME, "content_pipe_file:%s \n", __func__);
119
120 return KD_EBADF;
121}
122
124static CPresult SetPosition( CPhandle hContent, CPint nOffset, CP_ORIGINTYPE eOrigin)
125{
126 DEBUG(DEB_LEV_FUNCTION_NAME, "content_pipe_file:%s \n", __func__);
127
128 return KD_EBADF;
129}
130
132static CPresult GetPosition( CPhandle hContent, CPuint *pPosition)
133{
134 DEBUG(DEB_LEV_FUNCTION_NAME, "content_pipe_file:%s \n", __func__);
135
136 return KD_EBADF;
137}
138
141static CPresult Read( CPhandle hContent, CPbyte *pData, CPuint nSize)
142{
143 file_ContentPipe* pFilePipe = (file_ContentPipe*) hContent;
144 CPresult err = 0;
145 ssize_t count;
146
147 DEBUG(DEB_LEV_FUNCTION_NAME, "content_pipe_file:%s \n", __func__);
148
149 count = read(pFilePipe->fd, (void*) pData, (size_t) nSize);
150
151 if(count < nSize) {
152 err = KD_EIO; /* ??? */
153 } else if(count == -1) {
154 err = KD_EIO; /* ??? */
155 }
156
157 return err;
158}
159
172static CPresult ReadBuffer( CPhandle hContent, CPbyte **ppBuffer, CPuint *nSize, CPbool bForbidCopy)
173{
174 DEBUG(DEB_LEV_FUNCTION_NAME, "content_pipe_file:%s \n", __func__);
175
176 return KD_EBADF;
177}
178
180static CPresult ReleaseReadBuffer(CPhandle hContent, CPbyte *pBuffer)
181{
182 DEBUG(DEB_LEV_FUNCTION_NAME, "content_pipe_file:%s \n", __func__);
183
184 return KD_EBADF;
185}
186
189static CPresult Write( CPhandle hContent, CPbyte *pData, CPuint nSize)
190{
191 file_ContentPipe* pFilePipe = (file_ContentPipe*) hContent;
192 CPresult err = 0;
193 ssize_t ret;
194
195 DEBUG(DEB_LEV_FUNCTION_NAME, "content_pipe_file:%s \n", __func__);
196
197 ret = write(pFilePipe->fd, (void*) pData, (size_t) nSize);
198
199 if(ret < nSize) {
200 err = KD_EIO; /* ??? */
201 } else if(ret == -1) {
202 err = KD_EIO; /* ??? */
203 }
204
205 return err;
206}
207
211static CPresult GetWriteBuffer( CPhandle hContent, CPbyte **ppBuffer, CPuint nSize)
212{
213 DEBUG(DEB_LEV_FUNCTION_NAME, "content_pipe_file:%s \n", __func__);
214
215 return KD_EBADF;
216}
217
220static CPresult WriteBuffer( CPhandle hContent, CPbyte *pBuffer, CPuint nFilledSize)
221{
222 DEBUG(DEB_LEV_FUNCTION_NAME, "content_pipe_file:%s \n", __func__);
223
224 return KD_EBADF;
225}
226
228static CPresult RegisterCallback( CPhandle hContent, CPresult (*ClientCallback)(CP_EVENTTYPE eEvent, CPuint iParam))
229{
230 DEBUG(DEB_LEV_FUNCTION_NAME, "content_pipe_file:%s \n", __func__);
231
232 return KD_EBADF;
233}
234
236{
237 file_ContentPipe* pFilePipe;
238
239 pFilePipe = (file_ContentPipe*) calloc(1, sizeof(file_ContentPipe));
240
241 if(NULL != pFilePipe) {
242
243 pFilePipe->pipe.Open = Open;
244 pFilePipe->pipe.Close = Close;
245 pFilePipe->pipe.Create = Create;
246 pFilePipe->pipe.CheckAvailableBytes = CheckAvailableBytes;
247 pFilePipe->pipe.SetPosition = SetPosition;
248 pFilePipe->pipe.GetPosition = GetPosition;
249 pFilePipe->pipe.Read = Read;
250 pFilePipe->pipe.ReadBuffer = ReadBuffer;
251 pFilePipe->pipe.ReleaseReadBuffer = ReleaseReadBuffer;
252 pFilePipe->pipe.Write = Write;
253 pFilePipe->pipe.GetWriteBuffer = GetWriteBuffer;
254 pFilePipe->pipe.WriteBuffer = WriteBuffer;
255 pFilePipe->pipe.RegisterCallback = RegisterCallback;
256
257 pFilePipe->fd = -1; /* An invalid value */
258
259 *ppPipe = (CP_PIPETYPE*) pFilePipe;
260 }
261
262 return 0;
263}
264
OMX_U32 CPuint
OMX_S32 CPint
void * CPhandle
#define KD_EINVAL
char * CPstring
char CPbyte
OMX_U32 CPresult
#define KD_EBADF
#define KD_EIO
OMX_BOOL
Definition: OMX_Types.h:189
CPresult file_pipe_Constructor(CP_PIPETYPE **ppPipe, CPstring szURI)
CP_ACCESSTYPE
CP_EVENTTYPE
CP_ORIGINTYPE
CP_CHECKBYTESRESULTTYPE
@ CP_AccessWrite
@ CP_AccessReadWrite
@ CP_AccessRead
#define DEB_LEV_FUNCTION_NAME
#define DEBUG(n, fmt, args...)
OMX_ERRORTYPE err
CPresult(* ReleaseReadBuffer)(CPhandle hContent, CPbyte *pBuffer)
CPresult(* Create)(CPhandle *hContent, CPstring szURI)
CPresult(* WriteBuffer)(CPhandle hContent, CPbyte *pBuffer, CPuint nFilledSize)
CPresult(* Write)(CPhandle hContent, CPbyte *data, CPuint nSize)
CPresult(* RegisterCallback)(CPhandle hContent, CPresult(*ClientCallback)(CP_EVENTTYPE eEvent, CPuint iParam))
CPresult(* CheckAvailableBytes)(CPhandle hContent, CPuint nBytesRequested, CP_CHECKBYTESRESULTTYPE *eResult)
CPresult(* ReadBuffer)(CPhandle hContent, CPbyte **ppBuffer, CPuint *nSize, CPbool bForbidCopy)
CPresult(* SetPosition)(CPhandle hContent, CPint nOffset, CP_ORIGINTYPE eOrigin)
CPresult(* Open)(CPhandle *hContent, CPstring szURI, CP_ACCESSTYPE eAccess)
CPresult(* GetPosition)(CPhandle hContent, CPuint *pPosition)
CPresult(* GetWriteBuffer)(CPhandle hContent, CPbyte **ppBuffer, CPuint nSize)
CPresult(* Close)(CPhandle hContent)
CPresult(* Read)(CPhandle hContent, CPbyte *pData, CPuint nSize)

Generated for OpenMAX Bellagio rel. 0.9.3 by  doxygen 1.5.1
SourceForge.net Logo