ReactOS 0.4.16-dev-321-g63bb46a
tmpfile.c File Reference
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "wingdi.h"
#include "winuser.h"
#include "winerror.h"
#include "vfw.h"
#include "avifile_private.h"
#include "extrachunk.h"
#include "wine/debug.h"
Include dependency graph for tmpfile.c:

Go to the source code of this file.

Classes

struct  _ITmpFileImpl
 

Typedefs

typedef struct _ITmpFileImpl ITmpFileImpl
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (avifile)
 
static ITmpFileImplimpl_from_IAVIFile (IAVIFile *iface)
 
static HRESULT WINAPI ITmpFile_fnQueryInterface (IAVIFile *iface, REFIID refiid, LPVOID *obj)
 
static ULONG WINAPI ITmpFile_fnAddRef (IAVIFile *iface)
 
static ULONG WINAPI ITmpFile_fnRelease (IAVIFile *iface)
 
static HRESULT WINAPI ITmpFile_fnInfo (IAVIFile *iface, AVIFILEINFOW *afi, LONG size)
 
static HRESULT WINAPI ITmpFile_fnGetStream (IAVIFile *iface, PAVISTREAM *avis, DWORD fccType, LONG lParam)
 
static HRESULT WINAPI ITmpFile_fnCreateStream (IAVIFile *iface, PAVISTREAM *avis, AVISTREAMINFOW *asi)
 
static HRESULT WINAPI ITmpFile_fnWriteData (IAVIFile *iface, DWORD ckid, LPVOID lpData, LONG size)
 
static HRESULT WINAPI ITmpFile_fnReadData (IAVIFile *iface, DWORD ckid, LPVOID lpData, LONG *size)
 
static HRESULT WINAPI ITmpFile_fnEndRecord (IAVIFile *iface)
 
static HRESULT WINAPI ITmpFile_fnDeleteStream (IAVIFile *iface, DWORD fccType, LONG lParam)
 
PAVIFILE AVIFILE_CreateAVITempFile (int nStreams, const PAVISTREAM *ppStreams)
 

Variables

static const struct IAVIFileVtbl itmpft
 

Typedef Documentation

◆ ITmpFileImpl

Function Documentation

◆ AVIFILE_CreateAVITempFile()

PAVIFILE AVIFILE_CreateAVITempFile ( int  nStreams,
const PAVISTREAM ppStreams 
)

Definition at line 220 of file tmpfile.c.

221{
222 ITmpFileImpl *tmpFile;
223 int i;
224
226 if (tmpFile == NULL)
227 return NULL;
228
229 tmpFile->IAVIFile_iface.lpVtbl = &itmpft;
230 tmpFile->ref = 1;
231 memset(&tmpFile->fInfo, 0, sizeof(tmpFile->fInfo));
232
233 tmpFile->fInfo.dwStreams = nStreams;
234 tmpFile->ppStreams = HeapAlloc(GetProcessHeap(), 0, nStreams * sizeof(PAVISTREAM));
235 if (tmpFile->ppStreams == NULL) {
236 HeapFree(GetProcessHeap(), 0, tmpFile);
237 return NULL;
238 }
239
240 for (i = 0; i < nStreams; i++) {
241 AVISTREAMINFOW sInfo;
242
243 tmpFile->ppStreams[i] = ppStreams[i];
244
245 AVIStreamAddRef(ppStreams[i]);
246 AVIStreamInfoW(ppStreams[i], &sInfo, sizeof(sInfo));
247 if (i == 0) {
248 tmpFile->fInfo.dwScale = sInfo.dwScale;
249 tmpFile->fInfo.dwRate = sInfo.dwRate;
250 if (!sInfo.dwScale || !sInfo.dwRate) {
251 tmpFile->fInfo.dwScale = 1;
252 tmpFile->fInfo.dwRate = 100;
253 }
254 }
255
258
259 {
260 DWORD tmp;
261
262 tmp = MulDiv(AVIStreamSampleToTime(ppStreams[i], sInfo.dwLength),
263 tmpFile->fInfo.dwScale, tmpFile->fInfo.dwRate * 1000);
264 if (tmpFile->fInfo.dwLength < tmp)
265 tmpFile->fInfo.dwLength = tmp;
266
267 tmp = sInfo.rcFrame.right - sInfo.rcFrame.left;
268 if (tmpFile->fInfo.dwWidth < tmp)
269 tmpFile->fInfo.dwWidth = tmp;
270 tmp = sInfo.rcFrame.bottom - sInfo.rcFrame.top;
271 if (tmpFile->fInfo.dwHeight < tmp)
272 tmpFile->fInfo.dwHeight = tmp;
273 }
274 }
275
276 return &tmpFile->IAVIFile_iface;
277}
#define NULL
Definition: types.h:112
LONG WINAPI AVIStreamSampleToTime(PAVISTREAM pstream, LONG lSample)
Definition: api.c:894
ULONG WINAPI AVIStreamAddRef(PAVISTREAM pstream)
Definition: api.c:434
INT nStreams
Definition: api.c:60
HRESULT WINAPI AVIStreamInfoW(PAVISTREAM pstream, LPAVISTREAMINFOW asi, LONG size)
Definition: api.c:522
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
unsigned long DWORD
Definition: ntddk_ex.h:95
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
INT WINAPI MulDiv(INT nNumber, INT nNumerator, INT nDenominator)
Definition: muldiv.c:25
#define memset(x, y, z)
Definition: compat.h:39
DWORD dwRate
Definition: avifil32.idl:78
DWORD dwWidth
Definition: avifil32.idl:75
DWORD dwStreams
Definition: avifil32.idl:73
DWORD dwSuggestedBufferSize
Definition: avifil32.idl:74
DWORD dwHeight
Definition: avifil32.idl:76
DWORD dwScale
Definition: avifil32.idl:77
DWORD dwLength
Definition: avifil32.idl:79
DWORD dwSuggestedBufferSize
Definition: avifil32.idl:40
LONG ref
Definition: tmpfile.c:39
IAVIFile IAVIFile_iface
Definition: tmpfile.c:38
AVIFILEINFOW fInfo
Definition: tmpfile.c:41
PAVISTREAM * ppStreams
Definition: tmpfile.c:42
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
static const struct IAVIFileVtbl itmpft
Definition: tmpfile.c:207

Referenced by AVIMakeFileFromStreams().

◆ impl_from_IAVIFile()

static ITmpFileImpl * impl_from_IAVIFile ( IAVIFile iface)
inlinestatic

Definition at line 45 of file tmpfile.c.

46{
47 return CONTAINING_RECORD(iface, ITmpFileImpl, IAVIFile_iface);
48}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by ITmpFile_fnAddRef(), ITmpFile_fnGetStream(), ITmpFile_fnInfo(), ITmpFile_fnQueryInterface(), and ITmpFile_fnRelease().

◆ ITmpFile_fnAddRef()

static ULONG WINAPI ITmpFile_fnAddRef ( IAVIFile iface)
static

Definition at line 68 of file tmpfile.c.

69{
72
73 TRACE("(%p) -> %d\n", iface, ref);
74
75 return ref;
76}
#define InterlockedIncrement
Definition: armddk.h:53
#define TRACE(s)
Definition: solgame.cpp:4
Definition: send.c:48
static ITmpFileImpl * impl_from_IAVIFile(IAVIFile *iface)
Definition: tmpfile.c:45
uint32_t ULONG
Definition: typedefs.h:59

◆ ITmpFile_fnCreateStream()

static HRESULT WINAPI ITmpFile_fnCreateStream ( IAVIFile iface,
PAVISTREAM avis,
AVISTREAMINFOW asi 
)
static

Definition at line 168 of file tmpfile.c.

170{
171 TRACE("(%p,%p,%p)\n",iface,avis,asi);
172
173 return AVIERR_UNSUPPORTED;
174}
#define AVIERR_UNSUPPORTED
Definition: vfw.h:1743

◆ ITmpFile_fnDeleteStream()

static HRESULT WINAPI ITmpFile_fnDeleteStream ( IAVIFile iface,
DWORD  fccType,
LONG  lParam 
)
static

Definition at line 199 of file tmpfile.c.

201{
202 TRACE("(%p,0x%08X,%d)\n", iface, fccType, lParam);
203
204 return AVIERR_UNSUPPORTED;
205}
LPARAM lParam
Definition: combotst.c:139

◆ ITmpFile_fnEndRecord()

static HRESULT WINAPI ITmpFile_fnEndRecord ( IAVIFile iface)
static

Definition at line 192 of file tmpfile.c.

193{
194 TRACE("(%p)\n",iface);
195
196 return AVIERR_OK;
197}
#define AVIERR_OK
Definition: vfw.h:1740

◆ ITmpFile_fnGetStream()

static HRESULT WINAPI ITmpFile_fnGetStream ( IAVIFile iface,
PAVISTREAM avis,
DWORD  fccType,
LONG  lParam 
)
static

Definition at line 121 of file tmpfile.c.

123{
125
126 ULONG nStream = (ULONG)-1;
127
128 TRACE("(%p,%p,0x%08X,%d)\n", iface, avis, fccType, lParam);
129
130 if (avis == NULL || lParam < 0)
131 return AVIERR_BADPARAM;
132
133 if (fccType != streamtypeANY) {
134 /* search the number of the specified stream */
135 ULONG i;
136
137 for (i = 0; i < This->fInfo.dwStreams; i++) {
138 AVISTREAMINFOW sInfo;
139 HRESULT hr;
140
141 hr = AVIStreamInfoW(This->ppStreams[i], &sInfo, sizeof(sInfo));
142 if (FAILED(hr))
143 return hr;
144
145 if (sInfo.fccType == fccType) {
146 if (lParam == 0) {
147 nStream = i;
148 break;
149 } else
150 lParam--;
151 }
152 }
153 } else
154 nStream = lParam;
155
156 /* Does the requested stream exist ? */
157 if (nStream < This->fInfo.dwStreams && This->ppStreams[nStream] != NULL) {
158 *avis = This->ppStreams[nStream];
159 AVIStreamAddRef(*avis);
160
161 return AVIERR_OK;
162 }
163
164 /* Sorry, but the specified stream doesn't exist */
165 return AVIERR_NODATA;
166}
#define FAILED(hr)
Definition: intsafe.h:51
HRESULT hr
Definition: shlfolder.c:183
#define streamtypeANY
Definition: vfw.h:903
#define AVIERR_NODATA
Definition: vfw.h:1757
#define AVIERR_BADPARAM
Definition: vfw.h:1748

◆ ITmpFile_fnInfo()

static HRESULT WINAPI ITmpFile_fnInfo ( IAVIFile iface,
AVIFILEINFOW afi,
LONG  size 
)
static

Definition at line 102 of file tmpfile.c.

104{
106
107 TRACE("(%p,%p,%d)\n",iface,afi,size);
108
109 if (afi == NULL)
110 return AVIERR_BADPARAM;
111 if (size < 0)
112 return AVIERR_BADSIZE;
113
114 memcpy(afi, &This->fInfo, min((DWORD)size, sizeof(This->fInfo)));
115
116 if ((DWORD)size < sizeof(This->fInfo))
118 return AVIERR_OK;
119}
GLsizeiptr size
Definition: glext.h:5919
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define min(a, b)
Definition: monoChain.cc:55
#define AVIERR_BADSIZE
Definition: vfw.h:1749
#define AVIERR_BUFFERTOOSMALL
Definition: vfw.h:1758

◆ ITmpFile_fnQueryInterface()

static HRESULT WINAPI ITmpFile_fnQueryInterface ( IAVIFile iface,
REFIID  refiid,
LPVOID obj 
)
static

Definition at line 50 of file tmpfile.c.

52{
54
55 TRACE("(%p,%s,%p)\n", This, debugstr_guid(refiid), obj);
56
57 if (IsEqualGUID(&IID_IUnknown, refiid) ||
58 IsEqualGUID(&IID_IAVIFile, refiid)) {
59 *obj = iface;
60 IAVIFile_AddRef(iface);
61
62 return S_OK;
63 }
64
65 return OLE_E_ENUM_NOMORE;
66}
const GUID IID_IUnknown
#define S_OK
Definition: intsafe.h:52
#define debugstr_guid
Definition: kernel32.h:35
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define IAVIFile_AddRef(p)
Definition: vfw.h:1603
#define OLE_E_ENUM_NOMORE
Definition: winerror.h:2616

◆ ITmpFile_fnReadData()

static HRESULT WINAPI ITmpFile_fnReadData ( IAVIFile iface,
DWORD  ckid,
LPVOID  lpData,
LONG size 
)
static

Definition at line 184 of file tmpfile.c.

186{
187 TRACE("(%p,0x%08X,%p,%p)\n", iface, ckid, lpData, size);
188
189 return AVIERR_UNSUPPORTED;
190}

◆ ITmpFile_fnRelease()

static ULONG WINAPI ITmpFile_fnRelease ( IAVIFile iface)
static

Definition at line 78 of file tmpfile.c.

79{
82
83 TRACE("(%p) -> %d\n", iface, ref);
84
85 if (!ref) {
86 unsigned int i;
87
88 for (i = 0; i < This->fInfo.dwStreams; i++) {
89 if (This->ppStreams[i] != NULL) {
90 AVIStreamRelease(This->ppStreams[i]);
91
92 This->ppStreams[i] = NULL;
93 }
94 }
95
97 }
98
99 return ref;
100}
#define InterlockedDecrement
Definition: armddk.h:52
ULONG WINAPI AVIStreamRelease(PAVISTREAM pstream)
Definition: api.c:449

◆ ITmpFile_fnWriteData()

static HRESULT WINAPI ITmpFile_fnWriteData ( IAVIFile iface,
DWORD  ckid,
LPVOID  lpData,
LONG  size 
)
static

Definition at line 176 of file tmpfile.c.

178{
179 TRACE("(%p,0x%08X,%p,%d)\n", iface, ckid, lpData, size);
180
181 return AVIERR_UNSUPPORTED;
182}

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( avifile  )

Variable Documentation

◆ itmpft

const struct IAVIFileVtbl itmpft
static
Initial value:
= {
}
static HRESULT WINAPI ITmpFile_fnCreateStream(IAVIFile *iface, PAVISTREAM *avis, AVISTREAMINFOW *asi)
Definition: tmpfile.c:168
static HRESULT WINAPI ITmpFile_fnDeleteStream(IAVIFile *iface, DWORD fccType, LONG lParam)
Definition: tmpfile.c:199
static HRESULT WINAPI ITmpFile_fnWriteData(IAVIFile *iface, DWORD ckid, LPVOID lpData, LONG size)
Definition: tmpfile.c:176
static HRESULT WINAPI ITmpFile_fnInfo(IAVIFile *iface, AVIFILEINFOW *afi, LONG size)
Definition: tmpfile.c:102
static HRESULT WINAPI ITmpFile_fnEndRecord(IAVIFile *iface)
Definition: tmpfile.c:192
static HRESULT WINAPI ITmpFile_fnReadData(IAVIFile *iface, DWORD ckid, LPVOID lpData, LONG *size)
Definition: tmpfile.c:184
static ULONG WINAPI ITmpFile_fnAddRef(IAVIFile *iface)
Definition: tmpfile.c:68
static ULONG WINAPI ITmpFile_fnRelease(IAVIFile *iface)
Definition: tmpfile.c:78
static HRESULT WINAPI ITmpFile_fnQueryInterface(IAVIFile *iface, REFIID refiid, LPVOID *obj)
Definition: tmpfile.c:50
static HRESULT WINAPI ITmpFile_fnGetStream(IAVIFile *iface, PAVISTREAM *avis, DWORD fccType, LONG lParam)
Definition: tmpfile.c:121

Definition at line 207 of file tmpfile.c.

Referenced by AVIFILE_CreateAVITempFile().