ReactOS  0.4.14-dev-604-gcfdd483
api.c File Reference
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "winnls.h"
#include "wingdi.h"
#include "winuser.h"
#include "winreg.h"
#include "winerror.h"
#include "ole2.h"
#include "shellapi.h"
#include "shlobj.h"
#include "vfw.h"
#include "msacm.h"
#include "avifile_private.h"
#include "wine/debug.h"
Include dependency graph for api.c:

Go to the source code of this file.

Classes

struct  _AVIFilter
 

Macros

#define COBJMACROS
 
#define MAX_FILTERS   30 /* 30 => 7kB */
 

Typedefs

typedef struct _AVIFilter AVIFilter
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (avifile)
 
static HRESULT AVIFILE_CLSIDFromString (LPCSTR idstr, LPCLSID id)
 
static BOOL AVIFILE_GetFileHandlerByExtension (LPCWSTR szFile, LPCLSID lpclsid)
 
void WINAPI AVIFileInit (void)
 
void WINAPI AVIFileExit (void)
 
HRESULT WINAPI AVIFileOpenA (PAVIFILE *ppfile, LPCSTR szFile, UINT uMode, LPCLSID lpHandler)
 
HRESULT WINAPI AVIFileOpenW (PAVIFILE *ppfile, LPCWSTR szFile, UINT uMode, LPCLSID lpHandler)
 
ULONG WINAPI AVIFileAddRef (PAVIFILE pfile)
 
ULONG WINAPI AVIFileRelease (PAVIFILE pfile)
 
HRESULT WINAPI AVIFileInfoA (PAVIFILE pfile, LPAVIFILEINFOA afi, LONG size)
 
HRESULT WINAPI AVIFileInfoW (PAVIFILE pfile, LPAVIFILEINFOW afiw, LONG size)
 
HRESULT WINAPI AVIFileGetStream (PAVIFILE pfile, PAVISTREAM *avis, DWORD fccType, LONG lParam)
 
HRESULT WINAPI AVIFileCreateStreamA (PAVIFILE pfile, PAVISTREAM *ppavi, LPAVISTREAMINFOA psi)
 
HRESULT WINAPI AVIFileCreateStreamW (PAVIFILE pfile, PAVISTREAM *avis, LPAVISTREAMINFOW asi)
 
HRESULT WINAPI AVIFileWriteData (PAVIFILE pfile, DWORD fcc, LPVOID lp, LONG size)
 
HRESULT WINAPI AVIFileReadData (PAVIFILE pfile, DWORD fcc, LPVOID lp, LPLONG size)
 
HRESULT WINAPI AVIFileEndRecord (PAVIFILE pfile)
 
ULONG WINAPI AVIStreamAddRef (PAVISTREAM pstream)
 
ULONG WINAPI AVIStreamRelease (PAVISTREAM pstream)
 
HRESULT WINAPI AVIStreamCreate (PAVISTREAM *ppavi, LONG lParam1, LONG lParam2, LPCLSID pclsidHandler)
 
HRESULT WINAPI AVIStreamInfoA (PAVISTREAM pstream, LPAVISTREAMINFOA asi, LONG size)
 
HRESULT WINAPI AVIStreamInfoW (PAVISTREAM pstream, LPAVISTREAMINFOW asi, LONG size)
 
LONG WINAPI AVIStreamFindSample (PAVISTREAM pstream, LONG pos, LONG flags)
 
HRESULT WINAPI AVIStreamReadFormat (PAVISTREAM pstream, LONG pos, LPVOID format, LPLONG formatsize)
 
HRESULT WINAPI AVIStreamSetFormat (PAVISTREAM pstream, LONG pos, LPVOID format, LONG formatsize)
 
HRESULT WINAPI AVIStreamRead (PAVISTREAM pstream, LONG start, LONG samples, LPVOID buffer, LONG buffersize, LPLONG bytesread, LPLONG samplesread)
 
HRESULT WINAPI AVIStreamWrite (PAVISTREAM pstream, LONG start, LONG samples, LPVOID buffer, LONG buffersize, DWORD flags, LPLONG sampwritten, LPLONG byteswritten)
 
HRESULT WINAPI AVIStreamReadData (PAVISTREAM pstream, DWORD fcc, LPVOID lp, LPLONG lpread)
 
HRESULT WINAPI AVIStreamWriteData (PAVISTREAM pstream, DWORD fcc, LPVOID lp, LONG size)
 
PGETFRAME WINAPI AVIStreamGetFrameOpen (PAVISTREAM pstream, LPBITMAPINFOHEADER lpbiWanted)
 
LPVOID WINAPI AVIStreamGetFrame (PGETFRAME pg, LONG pos)
 
HRESULT WINAPI AVIStreamGetFrameClose (PGETFRAME pg)
 
HRESULT WINAPI AVIMakeCompressedStream (PAVISTREAM *ppsCompressed, PAVISTREAM psSource, LPAVICOMPRESSOPTIONS aco, LPCLSID pclsidHandler)
 
HRESULT WINAPI AVIMakeFileFromStreams (PAVIFILE *ppfile, int nStreams, PAVISTREAM *ppStreams)
 
HRESULT WINAPI AVIStreamOpenFromFileA (PAVISTREAM *ppavi, LPCSTR szFile, DWORD fccType, LONG lParam, UINT mode, LPCLSID pclsidHandler)
 
HRESULT WINAPI AVIStreamOpenFromFileW (PAVISTREAM *ppavi, LPCWSTR szFile, DWORD fccType, LONG lParam, UINT mode, LPCLSID pclsidHandler)
 
LONG WINAPI AVIStreamBeginStreaming (PAVISTREAM pavi, LONG lStart, LONG lEnd, LONG lRate)
 
LONG WINAPI AVIStreamEndStreaming (PAVISTREAM pavi)
 
LONG WINAPI AVIStreamStart (PAVISTREAM pstream)
 
LONG WINAPI AVIStreamLength (PAVISTREAM pstream)
 
LONG WINAPI AVIStreamSampleToTime (PAVISTREAM pstream, LONG lSample)
 
LONG WINAPI AVIStreamTimeToSample (PAVISTREAM pstream, LONG lTime)
 
HRESULT WINAPI AVIBuildFilterA (LPSTR szFilter, LONG cbFilter, BOOL fSaving)
 
HRESULT WINAPI AVIBuildFilterW (LPWSTR szFilter, LONG cbFilter, BOOL fSaving)
 
static BOOL AVISaveOptionsFmtChoose (HWND hWnd)
 
static void AVISaveOptionsUpdate (HWND hWnd)
 
static INT_PTR CALLBACK AVISaveOptionsDlgProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
BOOL WINAPI AVISaveOptions (HWND hWnd, UINT uFlags, INT nStreams, PAVISTREAM *ppavi, LPAVICOMPRESSOPTIONS *ppOptions)
 
HRESULT WINAPI AVISaveOptionsFree (INT nStreams, LPAVICOMPRESSOPTIONS *ppOptions)
 
HRESULT WINAPI AVISaveVA (LPCSTR szFile, CLSID *pclsidHandler, AVISAVECALLBACK lpfnCallback, int nStream, PAVISTREAM *ppavi, LPAVICOMPRESSOPTIONS *plpOptions)
 
static BOOL WINAPI AVIFILE_AVISaveDefaultCallback (INT progress)
 
HRESULT WINAPI AVISaveVW (LPCWSTR szFile, CLSID *pclsidHandler, AVISAVECALLBACK lpfnCallback, int nStreams, PAVISTREAM *ppavi, LPAVICOMPRESSOPTIONS *plpOptions)
 
HRESULT WINAPI EditStreamClone (PAVISTREAM pStream, PAVISTREAM *ppResult)
 
HRESULT WINAPI EditStreamCopy (PAVISTREAM pStream, LONG *plStart, LONG *plLength, PAVISTREAM *ppResult)
 
HRESULT WINAPI EditStreamCut (PAVISTREAM pStream, LONG *plStart, LONG *plLength, PAVISTREAM *ppResult)
 
HRESULT WINAPI EditStreamPaste (PAVISTREAM pDest, LONG *plStart, LONG *plLength, PAVISTREAM pSource, LONG lStart, LONG lEnd)
 
HRESULT WINAPI EditStreamSetInfoA (PAVISTREAM pstream, LPAVISTREAMINFOA asi, LONG size)
 
HRESULT WINAPI EditStreamSetInfoW (PAVISTREAM pstream, LPAVISTREAMINFOW asi, LONG size)
 
HRESULT WINAPI EditStreamSetNameA (PAVISTREAM pstream, LPCSTR szName)
 
HRESULT WINAPI EditStreamSetNameW (PAVISTREAM pstream, LPCWSTR szName)
 
HRESULT WINAPI AVIClearClipboard (void)
 
HRESULT WINAPI AVIGetFromClipboard (PAVIFILE *ppfile)
 
HRESULT WINAPI AVIMakeStreamFromClipboard (UINT cfFormat, HANDLE hGlobal, PAVISTREAM *ppstream)
 
HRESULT WINAPI AVIPutFileOnClipboard (PAVIFILE pfile)
 
HRESULT WINAPIV AVISaveA (LPCSTR szFile, CLSID *pclsidHandler, AVISAVECALLBACK lpfnCallback, int nStreams, PAVISTREAM pavi, LPAVICOMPRESSOPTIONS lpOptions,...)
 
HRESULT WINAPIV AVISaveW (LPCWSTR szFile, CLSID *pclsidHandler, AVISAVECALLBACK lpfnCallback, int nStreams, PAVISTREAM pavi, LPAVICOMPRESSOPTIONS lpOptions,...)
 

Variables

struct {
   UINT   uFlags
 
   INT   nStreams
 
   PAVISTREAM *   ppavis
 
   LPAVICOMPRESSOPTIONS *   ppOptions
 
   INT   nCurrent
 
SaveOpts
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 22 of file api.c.

◆ MAX_FILTERS

#define MAX_FILTERS   30 /* 30 => 7kB */

Definition at line 48 of file api.c.

Typedef Documentation

◆ AVIFilter

Function Documentation

◆ AVIBuildFilterA()

HRESULT WINAPI AVIBuildFilterA ( LPSTR  szFilter,
LONG  cbFilter,
BOOL  fSaving 
)

Definition at line 961 of file api.c.

962 {
964  HRESULT hr;
965 
966  TRACE("(%p,%d,%d)\n", szFilter, cbFilter, fSaving);
967 
968  /* check parameters */
969  if (szFilter == NULL)
970  return AVIERR_BADPARAM;
971  if (cbFilter < 2)
972  return AVIERR_BADSIZE;
973 
974  szFilter[0] = 0;
975  szFilter[1] = 0;
976 
977  wszFilter = HeapAlloc(GetProcessHeap(), 0, cbFilter * sizeof(WCHAR));
978  if (wszFilter == NULL)
979  return AVIERR_MEMORY;
980 
981  hr = AVIBuildFilterW(wszFilter, cbFilter, fSaving);
982  if (SUCCEEDED(hr)) {
983  WideCharToMultiByte(CP_ACP, 0, wszFilter, cbFilter,
984  szFilter, cbFilter, NULL, NULL);
985  }
986 
988 
989  return hr;
990 }
#define WideCharToMultiByte
Definition: compat.h:101
HRESULT hr
Definition: shlfolder.c:183
static WCHAR wszFilter[MAX_STRING_LEN *4+6 *3+5]
Definition: wordpad.c:71
#define CP_ACP
Definition: compat.h:99
#define AVIERR_MEMORY
Definition: vfw.h:1745
smooth NULL
Definition: ftsmooth.c:416
LPTSTR szFilter
Definition: mplay32.c:30
#define AVIERR_BADPARAM
Definition: vfw.h:1748
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:77
#define AVIERR_BADSIZE
Definition: vfw.h:1749
HRESULT WINAPI AVIBuildFilterW(LPWSTR szFilter, LONG cbFilter, BOOL fSaving)
Definition: api.c:995
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define HeapFree(x, y, z)
Definition: compat.h:402
#define SUCCEEDED(hr)
Definition: intsafe.h:57

◆ AVIBuildFilterW()

HRESULT WINAPI AVIBuildFilterW ( LPWSTR  szFilter,
LONG  cbFilter,
BOOL  fSaving 
)

Definition at line 995 of file api.c.

996 {
997  static const WCHAR all_files[] = { '*','.','*',0,0 };
998  static const WCHAR szClsid[] = {'C','L','S','I','D',0};
999  static const WCHAR szExtensionFmt[] = {';','*','.','%','s',0};
1000  static const WCHAR szAVIFileExtensions[] =
1001  {'A','V','I','F','i','l','e','\\','E','x','t','e','n','s','i','o','n','s',0};
1002 
1003  AVIFilter *lp;
1004  WCHAR szAllFiles[40];
1005  WCHAR szFileExt[10];
1006  WCHAR szValue[128];
1007  HKEY hKey;
1008  DWORD n, i;
1009  LONG size;
1010  DWORD count = 0;
1011 
1012  TRACE("(%p,%d,%d)\n", szFilter, cbFilter, fSaving);
1013 
1014  /* check parameters */
1015  if (szFilter == NULL)
1016  return AVIERR_BADPARAM;
1017  if (cbFilter < 2)
1018  return AVIERR_BADSIZE;
1019 
1021  if (lp == NULL)
1022  return AVIERR_MEMORY;
1023 
1024  /*
1025  * 1. iterate over HKEY_CLASSES_ROOT\\AVIFile\\Extensions and collect
1026  * extensions and CLSIDs
1027  * 2. iterate over collected CLSIDs and copy its description and its
1028  * extensions to szFilter if it fits
1029  *
1030  * First filter is named "All multimedia files" and its filter is a
1031  * collection of all possible extensions except "*.*".
1032  */
1033  if (RegOpenKeyW(HKEY_CLASSES_ROOT, szAVIFileExtensions, &hKey) != ERROR_SUCCESS) {
1034  HeapFree(GetProcessHeap(), 0, lp);
1035  return AVIERR_ERROR;
1036  }
1037  for (n = 0;RegEnumKeyW(hKey, n, szFileExt, ARRAY_SIZE(szFileExt)) == ERROR_SUCCESS;n++) {
1038  WCHAR clsidW[40];
1039 
1040  /* get CLSID to extension */
1041  size = sizeof(clsidW);
1042  if (RegQueryValueW(hKey, szFileExt, clsidW, &size) != ERROR_SUCCESS)
1043  break;
1044 
1045  /* search if the CLSID is already known */
1046  for (i = 1; i <= count; i++) {
1047  if (lstrcmpW(lp[i].szClsid, clsidW) == 0)
1048  break; /* a new one */
1049  }
1050 
1051  if (i == count + 1) {
1052  /* it's a new CLSID */
1053 
1054  /* FIXME: How do we get info's about read/write capabilities? */
1055 
1056  if (count >= MAX_FILTERS) {
1057  /* try to inform user of our full fixed size table */
1058  ERR(": More than %d filters found! Adjust MAX_FILTERS in dlls/avifil32/api.c\n", MAX_FILTERS);
1059  break;
1060  }
1061 
1062  lstrcpyW(lp[i].szClsid, clsidW);
1063 
1064  count++;
1065  }
1066 
1067  /* append extension to the filter */
1068  wsprintfW(szValue, szExtensionFmt, szFileExt);
1069  if (lp[i].szExtensions[0] == 0)
1070  lstrcatW(lp[i].szExtensions, szValue + 1);
1071  else
1072  lstrcatW(lp[i].szExtensions, szValue);
1073 
1074  /* also append to the "all multimedia"-filter */
1075  if (lp[0].szExtensions[0] == 0)
1076  lstrcatW(lp[0].szExtensions, szValue + 1);
1077  else
1078  lstrcatW(lp[0].szExtensions, szValue);
1079  }
1080  RegCloseKey(hKey);
1081 
1082  /* 2. get descriptions for the CLSIDs and fill out szFilter */
1083  if (RegOpenKeyW(HKEY_CLASSES_ROOT, szClsid, &hKey) != ERROR_SUCCESS) {
1084  HeapFree(GetProcessHeap(), 0, lp);
1085  return AVIERR_ERROR;
1086  }
1087  for (n = 0; n <= count; n++) {
1088  /* first the description */
1089  if (n != 0) {
1090  size = sizeof(szValue);
1091  if (RegQueryValueW(hKey, lp[n].szClsid, szValue, &size) == ERROR_SUCCESS) {
1092  size = lstrlenW(szValue);
1093  lstrcpynW(szFilter, szValue, cbFilter);
1094  }
1095  } else
1097 
1098  /* check for enough space */
1099  size++;
1100  if (cbFilter < size + lstrlenW(lp[n].szExtensions) + 2) {
1101  szFilter[0] = 0;
1102  szFilter[1] = 0;
1103  HeapFree(GetProcessHeap(), 0, lp);
1104  RegCloseKey(hKey);
1105  return AVIERR_BUFFERTOOSMALL;
1106  }
1107  cbFilter -= size;
1108  szFilter += size;
1109 
1110  /* and then the filter */
1111  lstrcpynW(szFilter, lp[n].szExtensions, cbFilter);
1112  size = lstrlenW(lp[n].szExtensions) + 1;
1113  cbFilter -= size;
1114  szFilter += size;
1115  }
1116 
1117  RegCloseKey(hKey);
1118  HeapFree(GetProcessHeap(), 0, lp);
1119 
1120  /* add "All files" "*.*" filter if enough space left */
1122  ARRAY_SIZE(szAllFiles) - ARRAY_SIZE(all_files)) + 1;
1123  memcpy( szAllFiles + size, all_files, sizeof(all_files) );
1125 
1126  if (cbFilter > size) {
1127  memcpy(szFilter, szAllFiles, size * sizeof(szAllFiles[0]));
1128  return AVIERR_OK;
1129  } else {
1130  szFilter[0] = 0;
1131  return AVIERR_BUFFERTOOSMALL;
1132  }
1133 }
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
#define ERROR_SUCCESS
Definition: deptool.c:10
int WINAPI lstrcmpW(LPCWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:170
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLdouble n
Definition: glext.h:7729
#define lstrlenW
Definition: compat.h:415
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
#define lstrcpynW
Definition: compat.h:405
#define AVIERR_MEMORY
Definition: vfw.h:1745
#define IDS_ALLMULTIMEDIA
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
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
long LONG
Definition: pedump.c:60
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3296
smooth NULL
Definition: ftsmooth.c:416
LPTSTR szFilter
Definition: mplay32.c:30
#define AVIERR_BUFFERTOOSMALL
Definition: vfw.h:1758
#define AVIERR_BADPARAM
Definition: vfw.h:1748
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
#define GetProcessHeap()
Definition: compat.h:403
static const WCHAR clsidW[]
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define AVIERR_BADSIZE
Definition: vfw.h:1749
LSTATUS WINAPI RegQueryValueW(HKEY hkey, LPCWSTR name, LPWSTR data, LPLONG count)
Definition: reg.c:4254
unsigned long DWORD
Definition: ntddk_ex.h:95
HMODULE AVIFILE_hModule
Definition: factory.c:39
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define AVIERR_OK
Definition: vfw.h:1740
LONG WINAPI RegEnumKeyW(HKEY hKey, DWORD dwIndex, LPWSTR lpName, DWORD cbName)
Definition: reg.c:2416
#define ERR(fmt,...)
Definition: debug.h:109
int all_files
Definition: mkisofs.c:132
#define lstrcpyW
Definition: compat.h:414
#define ARRAY_SIZE(a)
Definition: main.h:24
#define HEAP_ZERO_MEMORY
Definition: compat.h:123
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
#define IDS_ALLFILES
Definition: definitions.h:229
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274
#define MAX_FILTERS
Definition: api.c:48
#define HeapFree(x, y, z)
Definition: compat.h:402
#define AVIERR_ERROR
Definition: vfw.h:1761
Definition: api.c:50

Referenced by AVIBuildFilterA().

◆ AVIClearClipboard()

HRESULT WINAPI AVIClearClipboard ( void  )

Definition at line 2194 of file api.c.

2195 {
2196  TRACE("()\n");
2197 
2198  return AVIERR_UNSUPPORTED; /* OleSetClipboard(NULL); */
2199 }
#define AVIERR_UNSUPPORTED
Definition: vfw.h:1743
#define TRACE(s)
Definition: solgame.cpp:4

◆ AVIFILE_AVISaveDefaultCallback()

static BOOL WINAPI AVIFILE_AVISaveDefaultCallback ( INT  progress)
static

Definition at line 1547 of file api.c.

1548 {
1549  TRACE("(%d)\n", progress);
1550 
1551  return FALSE;
1552 }
#define TRACE(s)
Definition: solgame.cpp:4
cd_progress_ptr progress
Definition: cdjpeg.h:150

Referenced by AVISaveVW().

◆ AVIFILE_CLSIDFromString()

static HRESULT AVIFILE_CLSIDFromString ( LPCSTR  idstr,
LPCLSID  id 
)
static

Definition at line 69 of file api.c.

70 {
71  BYTE const *s;
72  BYTE *p;
73  INT i;
74  BYTE table[256];
75 
76  if (!idstr) {
77  memset(id, 0, sizeof(CLSID));
78  return S_OK;
79  }
80 
81  /* validate the CLSID string */
82  if (lstrlenA(idstr) != 38)
83  return CO_E_CLASSSTRING;
84 
85  s = (BYTE const*)idstr;
86  if ((s[0]!='{') || (s[9]!='-') || (s[14]!='-') || (s[19]!='-') ||
87  (s[24]!='-') || (s[37]!='}'))
88  return CO_E_CLASSSTRING;
89 
90  for (i = 1; i < 37; i++) {
91  if ((i == 9) || (i == 14) || (i == 19) || (i == 24))
92  continue;
93  if (!(((s[i] >= '0') && (s[i] <= '9')) ||
94  ((s[i] >= 'a') && (s[i] <= 'f')) ||
95  ((s[i] >= 'A') && (s[i] <= 'F')))
96  )
97  return CO_E_CLASSSTRING;
98  }
99 
100  TRACE("%s -> %p\n", s, id);
101 
102  /* quick lookup table */
103  memset(table, 0, 256);
104 
105  for (i = 0; i < 10; i++)
106  table['0' + i] = i;
107 
108  for (i = 0; i < 6; i++) {
109  table['A' + i] = i+10;
110  table['a' + i] = i+10;
111  }
112 
113  /* in form {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} */
114  p = (BYTE *) id;
115 
116  s++; /* skip leading brace */
117  for (i = 0; i < 4; i++) {
118  p[3 - i] = table[*s]<<4 | table[*(s+1)];
119  s += 2;
120  }
121  p += 4;
122  s++; /* skip - */
123 
124  for (i = 0; i < 2; i++) {
125  p[1-i] = table[*s]<<4 | table[*(s+1)];
126  s += 2;
127  }
128  p += 2;
129  s++; /* skip - */
130 
131  for (i = 0; i < 2; i++) {
132  p[1-i] = table[*s]<<4 | table[*(s+1)];
133  s += 2;
134  }
135  p += 2;
136  s++; /* skip - */
137 
138  /* these are just sequential bytes */
139  for (i = 0; i < 2; i++) {
140  *p++ = table[*s]<<4 | table[*(s+1)];
141  s += 2;
142  }
143  s++; /* skip - */
144 
145  for (i = 0; i < 6; i++) {
146  *p++ = table[*s]<<4 | table[*(s+1)];
147  s += 2;
148  }
149 
150  return S_OK;
151 }
int32_t INT
Definition: typedefs.h:56
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
#define TRACE(s)
Definition: solgame.cpp:4
unsigned char BYTE
Definition: mem.h:68
GLdouble s
Definition: gl.h:2039
#define S_OK
Definition: intsafe.h:59
int WINAPI lstrlenA(LPCSTR lpString)
Definition: lstring.c:145
#define CO_E_CLASSSTRING
Definition: winerror.h:2806
GLfloat GLfloat p
Definition: glext.h:8902
#define memset(x, y, z)
Definition: compat.h:39

Referenced by AVIFILE_GetFileHandlerByExtension(), and AVIMakeCompressedStream().

◆ AVIFILE_GetFileHandlerByExtension()

static BOOL AVIFILE_GetFileHandlerByExtension ( LPCWSTR  szFile,
LPCLSID  lpclsid 
)
static

Definition at line 153 of file api.c.

154 {
155  CHAR szRegKey[25];
156  CHAR szValue[100];
157  LPWSTR szExt = wcsrchr(szFile, '.');
158  LONG len = ARRAY_SIZE(szValue);
159 
160  if (szExt == NULL)
161  return FALSE;
162 
163  szExt++;
164 
165  wsprintfA(szRegKey, "AVIFile\\Extensions\\%.3ls", szExt);
166  if (RegQueryValueA(HKEY_CLASSES_ROOT, szRegKey, szValue, &len) != ERROR_SUCCESS)
167  return FALSE;
168 
169  return (AVIFILE_CLSIDFromString(szValue, lpclsid) == S_OK);
170 }
LSTATUS WINAPI RegQueryValueA(HKEY hkey, LPCSTR name, LPSTR data, LPLONG count)
Definition: reg.c:4225
#define ERROR_SUCCESS
Definition: deptool.c:10
char CHAR
Definition: xmlstorage.h:175
long LONG
Definition: pedump.c:60
smooth NULL
Definition: ftsmooth.c:416
_Check_return_ _CRTIMP _CONST_RETURN wchar_t *__cdecl wcsrchr(_In_z_ const wchar_t *_Str, _In_ wchar_t _Ch)
GLenum GLsizei len
Definition: glext.h:6722
static HRESULT AVIFILE_CLSIDFromString(LPCSTR idstr, LPCLSID id)
Definition: api.c:69
#define S_OK
Definition: intsafe.h:59
int WINAPIV wsprintfA(_Out_ LPSTR, _In_ _Printf_format_string_ LPCSTR,...)
#define ARRAY_SIZE(a)
Definition: main.h:24
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by AVIFileOpenW().

◆ AVIFileAddRef()

ULONG WINAPI AVIFileAddRef ( PAVIFILE  pfile)

Definition at line 276 of file api.c.

277 {
278  TRACE("(%p)\n", pfile);
279 
280  if (pfile == NULL) {
281  ERR(": bad handle passed!\n");
282  return 0;
283  }
284 
285  return IAVIFile_AddRef(pfile);
286 }
#define IAVIFile_AddRef(p)
Definition: vfw.h:1603
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define ERR(fmt,...)
Definition: debug.h:109

◆ AVIFileCreateStreamA()

HRESULT WINAPI AVIFileCreateStreamA ( PAVIFILE  pfile,
PAVISTREAM ppavi,
LPAVISTREAMINFOA  psi 
)

Definition at line 360 of file api.c.

362 {
363  AVISTREAMINFOW psiw;
364 
365  TRACE("(%p,%p,%p)\n", pfile, ppavi, psi);
366 
367  if (pfile == NULL)
368  return AVIERR_BADHANDLE;
369 
370  /* Only the szName at the end is different */
371  memcpy(&psiw, psi, sizeof(*psi) - sizeof(psi->szName));
372  MultiByteToWideChar(CP_ACP, 0, psi->szName, -1, psiw.szName,
373  ARRAY_SIZE(psiw.szName));
374 
375  return IAVIFile_CreateStream(pfile, ppavi, &psiw);
376 }
#define CP_ACP
Definition: compat.h:99
CHAR szName[64]
Definition: vfw.h:1021
#define AVIERR_BADHANDLE
Definition: vfw.h:1750
#define IAVIFile_CreateStream(p, a, b)
Definition: vfw.h:1608
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define ARRAY_SIZE(a)
Definition: main.h:24
WCHAR szName[64]
Definition: avifil32.idl:46
#define MultiByteToWideChar
Definition: compat.h:100

◆ AVIFileCreateStreamW()

HRESULT WINAPI AVIFileCreateStreamW ( PAVIFILE  pfile,
PAVISTREAM avis,
LPAVISTREAMINFOW  asi 
)

Definition at line 381 of file api.c.

383 {
384  TRACE("(%p,%p,%p)\n", pfile, avis, asi);
385 
386  if (pfile == NULL)
387  return AVIERR_BADHANDLE;
388 
389  return IAVIFile_CreateStream(pfile, avis, asi);
390 }
#define AVIERR_BADHANDLE
Definition: vfw.h:1750
#define IAVIFile_CreateStream(p, a, b)
Definition: vfw.h:1608
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by AVISaveVW().

◆ AVIFileEndRecord()

HRESULT WINAPI AVIFileEndRecord ( PAVIFILE  pfile)

Definition at line 421 of file api.c.

422 {
423  TRACE("(%p)\n", pfile);
424 
425  if (pfile == NULL)
426  return AVIERR_BADHANDLE;
427 
428  return IAVIFile_EndRecord(pfile);
429 }
#define IAVIFile_EndRecord(p)
Definition: vfw.h:1611
#define AVIERR_BADHANDLE
Definition: vfw.h:1750
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by AVISaveVW().

◆ AVIFileExit()

void WINAPI AVIFileExit ( void  )

Definition at line 182 of file api.c.

182  {
183  /* need to free ole32.dll if we are the last exit call */
184  /* OleUninitialize() */
185  FIXME("(): stub!\n");
186 }
#define FIXME(fmt,...)
Definition: debug.h:110

Referenced by START_TEST().

◆ AVIFileGetStream()

HRESULT WINAPI AVIFileGetStream ( PAVIFILE  pfile,
PAVISTREAM avis,
DWORD  fccType,
LONG  lParam 
)

Definition at line 345 of file api.c.

347 {
348  TRACE("(%p,%p,'%4.4s',%d)\n", pfile, avis, (char*)&fccType, lParam);
349 
350  if (pfile == NULL)
351  return AVIERR_BADHANDLE;
352 
353  return IAVIFile_GetStream(pfile, avis, fccType, lParam);
354 }
#define AVIERR_BADHANDLE
Definition: vfw.h:1750
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define IAVIFile_GetStream(p, a, b, c)
Definition: vfw.h:1607
LPARAM lParam
Definition: combotst.c:139

Referenced by test_ash1_corruption(), test_ash1_corruption2(), and test_default_data().

◆ AVIFileInfoA()

HRESULT WINAPI AVIFileInfoA ( PAVIFILE  pfile,
LPAVIFILEINFOA  afi,
LONG  size 
)

Definition at line 307 of file api.c.

308 {
309  AVIFILEINFOW afiw;
310  HRESULT hres;
311 
312  TRACE("(%p,%p,%d)\n", pfile, afi, size);
313 
314  if (pfile == NULL)
315  return AVIERR_BADHANDLE;
316  if ((DWORD)size < sizeof(AVIFILEINFOA))
317  return AVIERR_BADSIZE;
318 
319  hres = IAVIFile_Info(pfile, &afiw, sizeof(afiw));
320 
321  memcpy(afi, &afiw, sizeof(*afi) - sizeof(afi->szFileType));
322  WideCharToMultiByte(CP_ACP, 0, afiw.szFileType, -1, afi->szFileType,
323  sizeof(afi->szFileType), NULL, NULL);
324  afi->szFileType[sizeof(afi->szFileType) - 1] = 0;
325 
326  return hres;
327 }
#define WideCharToMultiByte
Definition: compat.h:101
#define CP_ACP
Definition: compat.h:99
#define IAVIFile_Info(p, a, b)
Definition: vfw.h:1606
CHAR szFileType[64]
Definition: vfw.h:1091
#define AVIERR_BADHANDLE
Definition: vfw.h:1750
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:77
#define AVIERR_BADSIZE
Definition: vfw.h:1749
unsigned long DWORD
Definition: ntddk_ex.h:95
WCHAR szFileType[64]
Definition: avifil32.idl:81
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878

◆ AVIFileInfoW()

HRESULT WINAPI AVIFileInfoW ( PAVIFILE  pfile,
LPAVIFILEINFOW  afiw,
LONG  size 
)

Definition at line 332 of file api.c.

333 {
334  TRACE("(%p,%p,%d)\n", pfile, afiw, size);
335 
336  if (pfile == NULL)
337  return AVIERR_BADHANDLE;
338 
339  return IAVIFile_Info(pfile, afiw, size);
340 }
#define IAVIFile_Info(p, a, b)
Definition: vfw.h:1606
#define AVIERR_BADHANDLE
Definition: vfw.h:1750
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919

Referenced by AVISaveVW().

◆ AVIFileInit()

void WINAPI AVIFileInit ( void  )

Definition at line 175 of file api.c.

175  {
177 }
smooth NULL
Definition: ftsmooth.c:416
HRESULT WINAPI DECLSPEC_HOTPATCH OleInitialize(LPVOID reserved)
Definition: ole2.c:169

Referenced by START_TEST().

◆ AVIFileOpenA()

HRESULT WINAPI AVIFileOpenA ( PAVIFILE ppfile,
LPCSTR  szFile,
UINT  uMode,
LPCLSID  lpHandler 
)

Definition at line 192 of file api.c.

194 {
195  LPWSTR wszFile = NULL;
196  HRESULT hr;
197  int len;
198 
199  TRACE("(%p,%s,0x%08X,%s)\n", ppfile, debugstr_a(szFile), uMode,
200  debugstr_guid(lpHandler));
201 
202  /* check parameters */
203  if (ppfile == NULL || szFile == NULL)
204  return AVIERR_BADPARAM;
205 
206  /* convert ASCII string to Unicode and call unicode function */
207  len = MultiByteToWideChar(CP_ACP, 0, szFile, -1, NULL, 0);
208  if (len <= 0)
209  return AVIERR_BADPARAM;
210 
211  wszFile = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
212  if (wszFile == NULL)
213  return AVIERR_MEMORY;
214 
215  MultiByteToWideChar(CP_ACP, 0, szFile, -1, wszFile, len);
216 
217  hr = AVIFileOpenW(ppfile, wszFile, uMode, lpHandler);
218 
220 
221  return hr;
222 }
HRESULT hr
Definition: shlfolder.c:183
#define CP_ACP
Definition: compat.h:99
#define AVIERR_MEMORY
Definition: vfw.h:1745
static const WCHAR wszFile[]
Definition: urlmon_main.c:386
smooth NULL
Definition: ftsmooth.c:416
#define debugstr_guid
Definition: kernel32.h:35
#define AVIERR_BADPARAM
Definition: vfw.h:1748
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define debugstr_a
Definition: kernel32.h:31
LONG HRESULT
Definition: typedefs.h:77
GLenum GLsizei len
Definition: glext.h:6722
#define MultiByteToWideChar
Definition: compat.h:100
WCHAR * LPWSTR
Definition: xmlstorage.h:184
HRESULT WINAPI AVIFileOpenW(PAVIFILE *ppfile, LPCWSTR szFile, UINT uMode, LPCLSID lpHandler)
Definition: api.c:227
#define HeapFree(x, y, z)
Definition: compat.h:402

Referenced by AVIStreamOpenFromFileA(), test_amh_corruption(), test_ash1_corruption(), test_ash1_corruption2(), and test_default_data().

◆ AVIFileOpenW()

HRESULT WINAPI AVIFileOpenW ( PAVIFILE ppfile,
LPCWSTR  szFile,
UINT  uMode,
LPCLSID  lpHandler 
)

Definition at line 227 of file api.c.

229 {
230  IPersistFile *ppersist = NULL;
231  CLSID clsidHandler;
232  HRESULT hr;
233 
234  TRACE("(%p,%s,0x%X,%s)\n", ppfile, debugstr_w(szFile), uMode,
235  debugstr_guid(lpHandler));
236 
237  /* check parameters */
238  if (ppfile == NULL || szFile == NULL)
239  return AVIERR_BADPARAM;
240 
241  *ppfile = NULL;
242 
243  /* if no handler then try guessing it by extension */
244  if (lpHandler == NULL) {
245  if (! AVIFILE_GetFileHandlerByExtension(szFile, &clsidHandler))
246  clsidHandler = CLSID_AVIFile;
247  } else
248  clsidHandler = *lpHandler;
249 
250  /* create instance of handler */
251  hr = CoCreateInstance(&clsidHandler, NULL, CLSCTX_INPROC, &IID_IAVIFile, (LPVOID*)ppfile);
252  if (FAILED(hr) || *ppfile == NULL)
253  return hr;
254 
255  /* ask for IPersistFile interface for loading/creating the file */
256  hr = IAVIFile_QueryInterface(*ppfile, &IID_IPersistFile, (LPVOID*)&ppersist);
257  if (FAILED(hr) || ppersist == NULL) {
258  IAVIFile_Release(*ppfile);
259  *ppfile = NULL;
260  return hr;
261  }
262 
263  hr = IPersistFile_Load(ppersist, szFile, uMode);
264  IPersistFile_Release(ppersist);
265  if (FAILED(hr)) {
266  IAVIFile_Release(*ppfile);
267  *ppfile = NULL;
268  }
269 
270  return hr;
271 }
#define IAVIFile_QueryInterface(p, a, b)
Definition: vfw.h:1602
HRESULT hr
Definition: shlfolder.c:183
#define debugstr_w
Definition: kernel32.h:32
smooth NULL
Definition: ftsmooth.c:416
#define debugstr_guid
Definition: kernel32.h:35
#define AVIERR_BADPARAM
Definition: vfw.h:1748
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
const GUID IID_IPersistFile
#define IAVIFile_Release(p)
Definition: vfw.h:1604
static BOOL AVIFILE_GetFileHandlerByExtension(LPCWSTR szFile, LPCLSID lpclsid)
Definition: api.c:153

Referenced by AVIFileOpenA(), AVISaveVW(), and AVIStreamOpenFromFileW().

◆ AVIFileReadData()

HRESULT WINAPI AVIFileReadData ( PAVIFILE  pfile,
DWORD  fcc,
LPVOID  lp,
LPLONG  size 
)

Definition at line 408 of file api.c.

409 {
410  TRACE("(%p,'%4.4s',%p,%p)\n", pfile, (char*)&fcc, lp, size);
411 
412  if (pfile == NULL)
413  return AVIERR_BADHANDLE;
414 
415  return IAVIFile_ReadData(pfile, fcc, lp, size);
416 }
#define AVIERR_BADHANDLE
Definition: vfw.h:1750
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
#define IAVIFile_ReadData(p, a, b, c)
Definition: vfw.h:1610

◆ AVIFileRelease()

ULONG WINAPI AVIFileRelease ( PAVIFILE  pfile)

Definition at line 291 of file api.c.

292 {
293  TRACE("(%p)\n", pfile);
294 
295  if (pfile == NULL) {
296  ERR(": bad handle passed!\n");
297  return 0;
298  }
299 
300  return IAVIFile_Release(pfile);
301 }
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define ERR(fmt,...)
Definition: debug.h:109
#define IAVIFile_Release(p)
Definition: vfw.h:1604

Referenced by AVISaveVW(), test_ash1_corruption(), test_ash1_corruption2(), and test_default_data().

◆ AVIFileWriteData()

HRESULT WINAPI AVIFileWriteData ( PAVIFILE  pfile,
DWORD  fcc,
LPVOID  lp,
LONG  size 
)

Definition at line 395 of file api.c.

396 {
397  TRACE("(%p,'%4.4s',%p,%d)\n", pfile, (char*)&fcc, lp, size);
398 
399  if (pfile == NULL)
400  return AVIERR_BADHANDLE;
401 
402  return IAVIFile_WriteData(pfile, fcc, lp, size);
403 }
#define IAVIFile_WriteData(p, a, b, c)
Definition: vfw.h:1609
#define AVIERR_BADHANDLE
Definition: vfw.h:1750
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919

◆ AVIGetFromClipboard()

HRESULT WINAPI AVIGetFromClipboard ( PAVIFILE ppfile)

Definition at line 2204 of file api.c.

2205 {
2206  FIXME("(%p), stub!\n", ppfile);
2207 
2208  *ppfile = NULL;
2209 
2210  return AVIERR_UNSUPPORTED;
2211 }
#define FIXME(fmt,...)
Definition: debug.h:110
smooth NULL
Definition: ftsmooth.c:416
#define AVIERR_UNSUPPORTED
Definition: vfw.h:1743

◆ AVIMakeCompressedStream()

HRESULT WINAPI AVIMakeCompressedStream ( PAVISTREAM ppsCompressed,
PAVISTREAM  psSource,
LPAVICOMPRESSOPTIONS  aco,
LPCLSID  pclsidHandler 
)

Definition at line 689 of file api.c.

693 {
694  AVISTREAMINFOW asiw;
695  CHAR szRegKey[25];
696  CHAR szValue[100];
697  CLSID clsidHandler;
698  HRESULT hr;
699  LONG size = sizeof(szValue);
700 
701  TRACE("(%p,%p,%p,%s)\n", ppsCompressed, psSource, aco,
702  debugstr_guid(pclsidHandler));
703 
704  if (ppsCompressed == NULL)
705  return AVIERR_BADPARAM;
706  if (psSource == NULL)
707  return AVIERR_BADHANDLE;
708 
709  *ppsCompressed = NULL;
710 
711  /* if no handler given get default ones based on streamtype */
712  if (pclsidHandler == NULL) {
713  hr = IAVIStream_Info(psSource, &asiw, sizeof(asiw));
714  if (FAILED(hr))
715  return hr;
716 
717  wsprintfA(szRegKey, "AVIFile\\Compressors\\%4.4s", (char*)&asiw.fccType);
718  if (RegQueryValueA(HKEY_CLASSES_ROOT, szRegKey, szValue, &size) != ERROR_SUCCESS)
719  return AVIERR_UNSUPPORTED;
720  if (AVIFILE_CLSIDFromString(szValue, &clsidHandler) != S_OK)
721  return AVIERR_UNSUPPORTED;
722  } else
723  clsidHandler = *pclsidHandler;
724 
725  hr = CoCreateInstance(&clsidHandler, NULL, CLSCTX_INPROC, &IID_IAVIStream, (LPVOID*)ppsCompressed);
726  if (FAILED(hr) || *ppsCompressed == NULL)
727  return hr;
728 
729  hr = IAVIStream_Create(*ppsCompressed, (LPARAM)psSource, (LPARAM)aco);
730  if (FAILED(hr)) {
731  IAVIStream_Release(*ppsCompressed);
732  *ppsCompressed = NULL;
733  }
734 
735  return hr;
736 }
#define IAVIStream_Create(p, a, b)
Definition: vfw.h:1179
LSTATUS WINAPI RegQueryValueA(HKEY hkey, LPCSTR name, LPSTR data, LPLONG count)
Definition: reg.c:4225
#define ERROR_SUCCESS
Definition: deptool.c:10
HRESULT hr
Definition: shlfolder.c:183
#define IAVIStream_Info(p, a, b)
Definition: vfw.h:1180
char CHAR
Definition: xmlstorage.h:175
#define IAVIStream_Release(p)
Definition: vfw.h:1177
long LONG
Definition: pedump.c:60
#define AVIERR_BADHANDLE
Definition: vfw.h:1750
smooth NULL
Definition: ftsmooth.c:416
LONG_PTR LPARAM
Definition: windef.h:208
#define debugstr_guid
Definition: kernel32.h:35
#define AVIERR_BADPARAM
Definition: vfw.h:1748
#define AVIERR_UNSUPPORTED
Definition: vfw.h:1743
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
LONG HRESULT
Definition: typedefs.h:77
static HRESULT AVIFILE_CLSIDFromString(LPCSTR idstr, LPCLSID id)
Definition: api.c:69
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
#define S_OK
Definition: intsafe.h:59
int WINAPIV wsprintfA(_Out_ LPSTR, _In_ _Printf_format_string_ LPCSTR,...)
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10

Referenced by AVISaveVW().

◆ AVIMakeFileFromStreams()

HRESULT WINAPI AVIMakeFileFromStreams ( PAVIFILE ppfile,
int  nStreams,
PAVISTREAM ppStreams 
)

Definition at line 741 of file api.c.

743 {
744  TRACE("(%p,%d,%p)\n", ppfile, nStreams, ppStreams);
745 
746  if (nStreams < 0 || ppfile == NULL || ppStreams == NULL)
747  return AVIERR_BADPARAM;
748 
749  *ppfile = AVIFILE_CreateAVITempFile(nStreams, ppStreams);
750  if (*ppfile == NULL)
751  return AVIERR_MEMORY;
752 
753  return AVIERR_OK;
754 }
#define AVIERR_MEMORY
Definition: vfw.h:1745
smooth NULL
Definition: ftsmooth.c:416
INT nStreams
Definition: api.c:60
#define AVIERR_BADPARAM
Definition: vfw.h:1748
#define TRACE(s)
Definition: solgame.cpp:4
#define AVIERR_OK
Definition: vfw.h:1740
PAVIFILE AVIFILE_CreateAVITempFile(int nStreams, const PAVISTREAM *ppStreams) DECLSPEC_HIDDEN
Definition: tmpfile.c:220

◆ AVIMakeStreamFromClipboard()

HRESULT WINAPI AVIMakeStreamFromClipboard ( UINT  cfFormat,
HANDLE  hGlobal,
PAVISTREAM ppstream 
)

Definition at line 2216 of file api.c.

2218 {
2219  FIXME("(0x%08x,%p,%p), stub!\n", cfFormat, hGlobal, ppstream);
2220 
2221  if (ppstream == NULL)
2222  return AVIERR_BADHANDLE;
2223 
2224  return AVIERR_UNSUPPORTED;
2225 }
#define FIXME(fmt,...)
Definition: debug.h:110
#define AVIERR_BADHANDLE
Definition: vfw.h:1750
smooth NULL
Definition: ftsmooth.c:416
#define AVIERR_UNSUPPORTED
Definition: vfw.h:1743

◆ AVIPutFileOnClipboard()

HRESULT WINAPI AVIPutFileOnClipboard ( PAVIFILE  pfile)

Definition at line 2230 of file api.c.

2231 {
2232  FIXME("(%p), stub!\n", pfile);
2233 
2234  if (pfile == NULL)
2235  return AVIERR_BADHANDLE;
2236 
2237  return AVIERR_UNSUPPORTED;
2238 }
#define FIXME(fmt,...)
Definition: debug.h:110
#define AVIERR_BADHANDLE
Definition: vfw.h:1750
smooth NULL
Definition: ftsmooth.c:416
#define AVIERR_UNSUPPORTED
Definition: vfw.h:1743

◆ AVISaveA()

HRESULT WINAPIV AVISaveA ( LPCSTR  szFile,
CLSID pclsidHandler,
AVISAVECALLBACK  lpfnCallback,
int  nStreams,
PAVISTREAM  pavi,
LPAVICOMPRESSOPTIONS  lpOptions,
  ... 
)

Definition at line 2240 of file api.c.

2242 {
2243  __ms_va_list vl;
2244  int i;
2245  HRESULT ret;
2246  PAVISTREAM *streams;
2248 
2249  TRACE("(%s,%p,%p,%d,%p,%p)\n", debugstr_a(szFile), pclsidHandler, lpfnCallback,
2250  nStreams, pavi, lpOptions);
2251 
2252  if (nStreams <= 0) return AVIERR_BADPARAM;
2253 
2254  streams = HeapAlloc(GetProcessHeap(), 0, nStreams * sizeof(*streams));
2255  options = HeapAlloc(GetProcessHeap(), 0, nStreams * sizeof(*options));
2256  if (!streams || !options)
2257  {
2258  ret = AVIERR_MEMORY;
2259  goto error;
2260  }
2261 
2262  streams[0] = pavi;
2263  options[0] = lpOptions;
2264 
2265  __ms_va_start(vl, lpOptions);
2266  for (i = 1; i < nStreams; i++)
2267  {
2268  streams[i] = va_arg(vl, PAVISTREAM);
2270  }
2271  __ms_va_end(vl);
2272 
2273  for (i = 0; i < nStreams; i++)
2274  TRACE("Pair[%d] - Stream = %p, Options = %p\n", i, streams[i], options[i]);
2275 
2276  ret = AVISaveVA(szFile, pclsidHandler, lpfnCallback, nStreams, streams, options);
2277 error:
2278  HeapFree(GetProcessHeap(), 0, streams);
2280  return ret;
2281 }
static static const char __ms_va_list
Definition: printf.c:76
#define error(str)
Definition: mkdosfs.c:1605
#define AVIERR_MEMORY
Definition: vfw.h:1745
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 nStreams
Definition: api.c:60
int options
Definition: main.c:106
#define AVIERR_BADPARAM
Definition: vfw.h:1748
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
#define debugstr_a
Definition: kernel32.h:31
LONG HRESULT
Definition: typedefs.h:77
int ret
#define va_arg(ap, T)
Definition: acmsvcex.h:89
#define __ms_va_end(list)
Definition: windef.h:458
HRESULT WINAPI AVISaveVA(LPCSTR szFile, CLSID *pclsidHandler, AVISAVECALLBACK lpfnCallback, int nStream, PAVISTREAM *ppavi, LPAVICOMPRESSOPTIONS *plpOptions)
Definition: api.c:1511
#define __ms_va_start(list, arg)
Definition: windef.h:457
#define HeapFree(x, y, z)
Definition: compat.h:402

◆ AVISaveOptions()

BOOL WINAPI AVISaveOptions ( HWND  hWnd,
UINT  uFlags,
INT  nStreams,
PAVISTREAM ppavi,
LPAVICOMPRESSOPTIONS ppOptions 
)

Definition at line 1428 of file api.c.

1430 {
1431  LPAVICOMPRESSOPTIONS pSavedOptions = NULL;
1432  INT ret, n;
1433 
1434  TRACE("(%p,0x%X,%d,%p,%p)\n", hWnd, uFlags, nStreams,
1435  ppavi, ppOptions);
1436 
1437  /* check parameters */
1438  if (nStreams <= 0 || ppavi == NULL || ppOptions == NULL)
1439  return AVIERR_BADPARAM;
1440 
1441  /* save options in case the user presses cancel */
1442  if (nStreams > 1) {
1443  pSavedOptions = HeapAlloc(GetProcessHeap(), 0, nStreams * sizeof(AVICOMPRESSOPTIONS));
1444  if (pSavedOptions == NULL)
1445  return FALSE;
1446 
1447  for (n = 0; n < nStreams; n++) {
1448  if (ppOptions[n] != NULL)
1449  memcpy(pSavedOptions + n, ppOptions[n], sizeof(AVICOMPRESSOPTIONS));
1450  }
1451  }
1452 
1453  SaveOpts.uFlags = uFlags;
1454  SaveOpts.nStreams = nStreams;
1455  SaveOpts.ppavis = ppavi;
1456  SaveOpts.ppOptions = ppOptions;
1457 
1460 
1461  if (ret == -1)
1462  ret = FALSE;
1463 
1464  /* restore options when user pressed cancel */
1465  if (pSavedOptions != NULL) {
1466  if (ret == FALSE) {
1467  for (n = 0; n < nStreams; n++) {
1468  if (ppOptions[n] != NULL)
1469  memcpy(ppOptions[n], pSavedOptions + n, sizeof(AVICOMPRESSOPTIONS));
1470  }
1471  }
1472  HeapFree(GetProcessHeap(), 0, pSavedOptions);
1473  }
1474 
1475  return ret;
1476 }
HWND hWnd
Definition: settings.c:17
GLdouble n
Definition: glext.h:7729
UINT uFlags
Definition: api.c:59
int32_t INT
Definition: typedefs.h:56
static INT_PTR CALLBACK AVISaveOptionsDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: api.c:1343
smooth NULL
Definition: ftsmooth.c:416
INT nStreams
Definition: api.c:60
#define DialogBoxW(i, t, p, f)
Definition: winuser.h:4374
#define AVIERR_BADPARAM
Definition: vfw.h:1748
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
HMODULE AVIFILE_hModule
Definition: factory.c:39
int ret
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static struct @319 SaveOpts
LPAVICOMPRESSOPTIONS * ppOptions
Definition: api.c:62
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
#define IDD_SAVEOPTIONS
#define HeapFree(x, y, z)
Definition: compat.h:402

Referenced by test_AVISaveOptions().

◆ AVISaveOptionsDlgProc()

static INT_PTR CALLBACK AVISaveOptionsDlgProc ( HWND  hWnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 1343 of file api.c.

1345 {
1346  DWORD dwInterleave;
1347  BOOL bIsInterleaved;
1348  INT n;
1349 
1350  /*TRACE("(%p,%u,0x%04X,0x%08lX)\n", hWnd, uMsg, wParam, lParam);*/
1351 
1352  switch (uMsg) {
1353  case WM_INITDIALOG:
1354  SaveOpts.nCurrent = 0;
1355  if (SaveOpts.nStreams == 1) {
1357  return TRUE;
1358  }
1359 
1360  /* add streams */
1361  for (n = 0; n < SaveOpts.nStreams; n++) {
1362  AVISTREAMINFOW sInfo;
1363 
1364  AVIStreamInfoW(SaveOpts.ppavis[n], &sInfo, sizeof(sInfo));
1366  0L, (LPARAM)sInfo.szName);
1367  }
1368 
1369  /* select first stream */
1372 
1373  /* initialize interleave */
1374  if (SaveOpts.ppOptions[0] != NULL &&
1375  (SaveOpts.ppOptions[0]->dwFlags & AVICOMPRESSF_VALID)) {
1376  bIsInterleaved = (SaveOpts.ppOptions[0]->dwFlags & AVICOMPRESSF_INTERLEAVE);
1377  dwInterleave = SaveOpts.ppOptions[0]->dwInterleaveEvery;
1378  } else {
1379  bIsInterleaved = TRUE;
1380  dwInterleave = 0;
1381  }
1382  CheckDlgButton(hWnd, IDC_INTERLEAVE, bIsInterleaved);
1383  SetDlgItemInt(hWnd, IDC_INTERLEAVEEVERY, dwInterleave, FALSE);
1384  EnableWindow(GetDlgItem(hWnd, IDC_INTERLEAVEEVERY), bIsInterleaved);
1385  break;
1386  case WM_COMMAND:
1387  switch (LOWORD(wParam)) {
1388  case IDOK:
1389  /* get data from controls and save them */
1390  dwInterleave = GetDlgItemInt(hWnd, IDC_INTERLEAVEEVERY, NULL, 0);
1391  bIsInterleaved = IsDlgButtonChecked(hWnd, IDC_INTERLEAVE);
1392  for (n = 0; n < SaveOpts.nStreams; n++) {
1393  if (SaveOpts.ppOptions[n] != NULL) {
1394  if (bIsInterleaved) {
1395  SaveOpts.ppOptions[n]->dwFlags |= AVICOMPRESSF_INTERLEAVE;
1396  SaveOpts.ppOptions[n]->dwInterleaveEvery = dwInterleave;
1397  } else
1398  SaveOpts.ppOptions[n]->dwFlags &= ~AVICOMPRESSF_INTERLEAVE;
1399  }
1400  }
1401  /* fall through */
1402  case IDCANCEL:
1404  break;
1405  case IDC_INTERLEAVE:
1408  break;
1409  case IDC_STREAM:
1410  if (HIWORD(wParam) == CBN_SELCHANGE) {
1411  /* update control elements */
1413  }
1414  break;
1415  case IDC_OPTIONS:
1417  break;
1418  };
1419  return TRUE;
1420  };
1421 
1422  return FALSE;
1423 }
static BOOL AVISaveOptionsFmtChoose(HWND hWnd)
Definition: api.c:1135
BOOL WINAPI CheckDlgButton(_In_ HWND, _In_ int, _In_ UINT)
#define TRUE
Definition: types.h:120
#define IDOK
Definition: winuser.h:824
#define AVICOMPRESSF_VALID
Definition: vfw.h:1101
HRESULT WINAPI AVIStreamInfoW(PAVISTREAM pstream, LPAVISTREAMINFOW asi, LONG size)
Definition: api.c:522
#define IDC_OPTIONS
HWND hWnd
Definition: settings.c:17
GLdouble n
Definition: glext.h:7729
int32_t INT
Definition: typedefs.h:56
WPARAM wParam
Definition: combotst.c:138
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
#define IDC_INTERLEAVE
unsigned int BOOL
Definition: ntddk_ex.h:94
#define CB_ADDSTRING
Definition: winuser.h:1918
#define MAKELONG(a, b)
Definition: typedefs.h:248
smooth NULL
Definition: ftsmooth.c:416
UINT WINAPI GetDlgItemInt(_In_ HWND, _In_ int, _Out_opt_ PBOOL, _In_ BOOL)
LONG_PTR LPARAM
Definition: windef.h:208
UINT WINAPI IsDlgButtonChecked(_In_ HWND, _In_ int)
#define IDC_STREAM
static void AVISaveOptionsUpdate(HWND hWnd)
Definition: api.c:1255
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
#define IDC_INTERLEAVEEVERY
unsigned long DWORD
Definition: ntddk_ex.h:95
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI SetDlgItemInt(_In_ HWND, _In_ int, _In_ UINT, _In_ BOOL)
static const WCHAR L[]
Definition: oid.c:1250
#define CB_SETCURSEL
Definition: winuser.h:1943
#define WM_COMMAND
Definition: winuser.h:1722
static struct @319 SaveOpts
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
WCHAR szName[64]
Definition: avifil32.idl:46
#define CBN_SELCHANGE
Definition: winuser.h:1961
#define HIWORD(l)
Definition: typedefs.h:246
#define AVICOMPRESSF_INTERLEAVE
Definition: vfw.h:1098
#define IDCANCEL
Definition: winuser.h:825
#define WM_INITDIALOG
Definition: winuser.h:1721
#define LOWORD(l)
Definition: pedump.c:82

Referenced by AVISaveOptions().

◆ AVISaveOptionsFmtChoose()

static BOOL AVISaveOptionsFmtChoose ( HWND  hWnd)
static

Definition at line 1135 of file api.c.

1136 {
1137  LPAVICOMPRESSOPTIONS pOptions = SaveOpts.ppOptions[SaveOpts.nCurrent];
1138  AVISTREAMINFOW sInfo;
1139 
1140  TRACE("(%p)\n", hWnd);
1141 
1142  if (pOptions == NULL || SaveOpts.ppavis[SaveOpts.nCurrent] == NULL) {
1143  ERR(": bad state!\n");
1144  return FALSE;
1145  }
1146 
1147  if (FAILED(AVIStreamInfoW(SaveOpts.ppavis[SaveOpts.nCurrent],
1148  &sInfo, sizeof(sInfo)))) {
1149  ERR(": AVIStreamInfoW failed!\n");
1150  return FALSE;
1151  }
1152 
1153  if (sInfo.fccType == streamtypeVIDEO) {
1154  COMPVARS cv;
1155  BOOL ret;
1156 
1157  memset(&cv, 0, sizeof(cv));
1158 
1159  if ((pOptions->dwFlags & AVICOMPRESSF_VALID) == 0) {
1160  memset(pOptions, 0, sizeof(AVICOMPRESSOPTIONS));
1161  pOptions->fccType = streamtypeVIDEO;
1162  pOptions->fccHandler = comptypeDIB;
1163  pOptions->dwQuality = (DWORD)ICQUALITY_DEFAULT;
1164  }
1165 
1166  cv.cbSize = sizeof(cv);
1168  /*cv.fccType = pOptions->fccType; */
1169  cv.fccHandler = pOptions->fccHandler;
1170  cv.lQ = pOptions->dwQuality;
1171  cv.lpState = pOptions->lpParms;
1172  cv.cbState = pOptions->cbParms;
1173  if (pOptions->dwFlags & AVICOMPRESSF_KEYFRAMES)
1174  cv.lKey = pOptions->dwKeyFrameEvery;
1175  else
1176  cv.lKey = 0;
1177  if (pOptions->dwFlags & AVICOMPRESSF_DATARATE)
1178  cv.lDataRate = pOptions->dwBytesPerSecond / 1024; /* need kBytes */
1179  else
1180  cv.lDataRate = 0;
1181 
1183  SaveOpts.ppavis[SaveOpts.nCurrent], &cv, NULL);
1184 
1185  if (ret) {
1186  pOptions->fccHandler = cv.fccHandler;
1187  pOptions->lpParms = cv.lpState;
1188  pOptions->cbParms = cv.cbState;
1189  pOptions->dwQuality = cv.lQ;
1190  if (cv.lKey != 0) {
1191  pOptions->dwKeyFrameEvery = cv.lKey;
1192  pOptions->dwFlags |= AVICOMPRESSF_KEYFRAMES;
1193  } else
1194  pOptions->dwFlags &= ~AVICOMPRESSF_KEYFRAMES;
1195  if (cv.lDataRate != 0) {
1196  pOptions->dwBytesPerSecond = cv.lDataRate * 1024; /* need bytes */
1197  pOptions->dwFlags |= AVICOMPRESSF_DATARATE;
1198  } else
1199  pOptions->dwFlags &= ~AVICOMPRESSF_DATARATE;
1200  pOptions->dwFlags |= AVICOMPRESSF_VALID;
1201  }
1202  ICCompressorFree(&cv);
1203 
1204  return ret;
1205  } else if (sInfo.fccType == streamtypeAUDIO) {
1206  ACMFORMATCHOOSEW afmtc;
1207  MMRESULT ret;
1208  LONG size;
1209 
1210  /* FIXME: check ACM version -- Which version is needed? */
1211 
1212  memset(&afmtc, 0, sizeof(afmtc));
1213  afmtc.cbStruct = sizeof(afmtc);
1214  afmtc.fdwStyle = 0;
1215  afmtc.hwndOwner = hWnd;
1216 
1218  if ((pOptions->cbFormat == 0 || pOptions->lpFormat == NULL) && size != 0) {
1219  pOptions->lpFormat = HeapAlloc(GetProcessHeap(), 0, size);
1220  if (!pOptions->lpFormat) return FALSE;
1221  pOptions->cbFormat = size;
1222  } else if (pOptions->cbFormat < (DWORD)size) {
1223  void *new_buffer = HeapReAlloc(GetProcessHeap(), 0, pOptions->lpFormat, size);
1224  if (!new_buffer) return FALSE;
1225  pOptions->lpFormat = new_buffer;
1226  pOptions->cbFormat = size;
1227  }
1228  afmtc.pwfx = pOptions->lpFormat;
1229  afmtc.cbwfx = pOptions->cbFormat;
1230 
1231  size = 0;
1232  AVIStreamFormatSize(SaveOpts.ppavis[SaveOpts.nCurrent],
1233  sInfo.dwStart, &size);
1234  if (size < (LONG)sizeof(PCMWAVEFORMAT))
1235  size = sizeof(PCMWAVEFORMAT);
1236  afmtc.pwfxEnum = HeapAlloc(GetProcessHeap(), 0, size);
1237  if (afmtc.pwfxEnum != NULL) {
1238  AVIStreamReadFormat(SaveOpts.ppavis[SaveOpts.nCurrent],
1239  sInfo.dwStart, afmtc.pwfxEnum, &size);
1241  }
1242 
1243  ret = acmFormatChooseW(&afmtc);
1244  if (ret == S_OK)
1245  pOptions->dwFlags |= AVICOMPRESSF_VALID;
1246 
1247  HeapFree(GetProcessHeap(), 0, afmtc.pwfxEnum);
1248  return ret == S_OK;
1249  } else {
1250  ERR(": unknown streamtype 0x%08X\n", sInfo.fccType);
1251  return FALSE;
1252  }
1253 }
#define AVICOMPRESSF_DATARATE
Definition: vfw.h:1099
HRESULT WINAPI AVIStreamReadFormat(PAVISTREAM pstream, LONG pos, LPVOID format, LPLONG formatsize)
Definition: api.c:549
LPVOID lpFormat
Definition: vfw.h:1110
#define AVICOMPRESSF_VALID
Definition: vfw.h:1101
DWORD cbStruct
Definition: msacm.h:462
DWORD dwKeyFrameEvery
Definition: vfw.h:1106
HRESULT WINAPI AVIStreamInfoW(PAVISTREAM pstream, LPAVISTREAMINFOW asi, LONG size)
Definition: api.c:522
HWND hWnd
Definition: settings.c:17
MMRESULT WINAPI acmFormatChooseW(PACMFORMATCHOOSEW pafmtc)
Definition: format.c:378
UINT MMRESULT
Definition: mmsystem.h:962
#define ICMF_COMPVARS_VALID
Definition: vfw.h:836
struct pcmwaveformat_tag PCMWAVEFORMAT
DWORD fccType
Definition: vfw.h:1104
#define DWORD
Definition: nt_native.h:44
#define AVIStreamFormatSize(pavi, lPos, plSize)
Definition: vfw.h:1436
#define comptypeDIB
Definition: vfw.h:147
DWORD fdwStyle
Definition: msacm.h:463
LONG lDataRate
Definition: vfw.h:829
DWORD dwBytesPerSecond
Definition: vfw.h:1108
unsigned int BOOL
Definition: ntddk_ex.h:94
HWND hwndOwner
Definition: msacm.h:465
long LONG
Definition: pedump.c:60
PWAVEFORMATEX pwfx
Definition: msacm.h:467
#define ICQUALITY_DEFAULT
Definition: vfw.h:278
#define AVICOMPRESSF_KEYFRAMES
Definition: vfw.h:1100
MMRESULT WINAPI acmMetrics(HACMOBJ hao, UINT uMetric, LPVOID pMetric)
Definition: msacm32_main.c:106
smooth NULL
Definition: ftsmooth.c:416
DWORD fdwEnum
Definition: msacm.h:477
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
DWORD fccHandler
Definition: vfw.h:1105
unsigned long DWORD
Definition: ntddk_ex.h:95
LONG lQ
Definition: vfw.h:830
int ret
LONG lKey
Definition: vfw.h:828
DWORD dwQuality
Definition: vfw.h:1107
#define streamtypeAUDIO
Definition: aviriff.h:93
#define ACM_FORMATENUMF_CONVERT
Definition: msacm.h:168
static struct @319 SaveOpts
DWORD fccHandler
Definition: vfw.h:822
LPVOID lpState
Definition: vfw.h:832
DWORD dwFlags
Definition: vfw.h:1109
#define streamtypeVIDEO
Definition: aviriff.h:92
#define ERR(fmt,...)
Definition: debug.h:109
void VFWAPI ICCompressorFree(PCOMPVARS pc)
#define S_OK
Definition: intsafe.h:59
#define HeapReAlloc
Definition: compat.h:401
DWORD cbParms
Definition: vfw.h:1113
LONG cbSize
Definition: vfw.h:818
LONG cbState
Definition: vfw.h:833
DWORD cbFormat
Definition: vfw.h:1111
LPVOID lpParms
Definition: vfw.h:1112
BOOL VFWAPI ICCompressorChoose(HWND hwnd, UINT uiFlags, LPVOID pvIn, LPVOID lpData, PCOMPVARS pc, LPSTR lpszTitle)
DWORD dwFlags
Definition: vfw.h:819
Definition: vfw.h:817
#define memset(x, y, z)
Definition: compat.h:39
#define ACM_METRIC_MAX_SIZE_FORMAT
Definition: msacm.h:200
#define HeapFree(x, y, z)
Definition: compat.h:402
LPWAVEFORMATEX pwfxEnum
Definition: msacm.h:478

Referenced by AVISaveOptionsDlgProc().

◆ AVISaveOptionsFree()

HRESULT WINAPI AVISaveOptionsFree ( INT  nStreams,
LPAVICOMPRESSOPTIONS ppOptions 
)

Definition at line 1481 of file api.c.

1482 {
1483  TRACE("(%d,%p)\n", nStreams, ppOptions);
1484 
1485  if (nStreams < 0 || ppOptions == NULL)
1486  return AVIERR_BADPARAM;
1487 
1488  for (nStreams--; nStreams >= 0; nStreams--) {
1489  if (ppOptions[nStreams] != NULL) {
1491 
1492  if (ppOptions[nStreams]->lpParms != NULL) {
1493  HeapFree(GetProcessHeap(), 0, ppOptions[nStreams]->lpParms);
1495  ppOptions[nStreams]->cbParms = 0;
1496  }
1497  if (ppOptions[nStreams]->lpFormat != NULL) {
1500  ppOptions[nStreams]->cbFormat = 0;
1501  }
1502  }
1503  }
1504 
1505  return AVIERR_OK;
1506 }
LPVOID lpFormat
Definition: vfw.h:1110
#define AVICOMPRESSF_VALID
Definition: vfw.h:1101
smooth NULL
Definition: ftsmooth.c:416
INT nStreams
Definition: api.c:60
#define AVIERR_BADPARAM
Definition: vfw.h:1748
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:403
LPCWSTR lpFormat
Definition: trayclock.cpp:32
DWORD dwFlags
Definition: vfw.h:1109
#define AVIERR_OK
Definition: vfw.h:1740
LPAVICOMPRESSOPTIONS * ppOptions
Definition: api.c:62
DWORD cbParms
Definition: vfw.h:1113
DWORD cbFormat
Definition: vfw.h:1111
LPVOID lpParms
Definition: vfw.h:1112
#define HeapFree(x, y, z)
Definition: compat.h:402

Referenced by test_AVISaveOptions().

◆ AVISaveOptionsUpdate()

static void AVISaveOptionsUpdate ( HWND  hWnd)
static

Definition at line 1255 of file api.c.

1256 {
1257  static const WCHAR szVideoFmt[]={'%','l','d','x','%','l','d','x','%','d',0};
1258  static const WCHAR szAudioFmt[]={'%','s',' ','%','s',0};
1259 
1260  WCHAR szFormat[128];
1261  AVISTREAMINFOW sInfo;
1262  LPVOID lpFormat;
1263  LONG size;
1264 
1265  TRACE("(%p)\n", hWnd);
1266 
1268  if (SaveOpts.nCurrent < 0)
1269  return;
1270 
1271  if (FAILED(AVIStreamInfoW(SaveOpts.ppavis[SaveOpts.nCurrent], &sInfo, sizeof(sInfo))))
1272  return;
1273 
1274  AVIStreamFormatSize(SaveOpts.ppavis[SaveOpts.nCurrent],sInfo.dwStart,&size);
1275  if (size > 0) {
1276  szFormat[0] = 0;
1277 
1278  /* read format to build format description string */
1280  if (lpFormat != NULL) {
1281  if (SUCCEEDED(AVIStreamReadFormat(SaveOpts.ppavis[SaveOpts.nCurrent],sInfo.dwStart,lpFormat, &size))) {
1282  if (sInfo.fccType == streamtypeVIDEO) {
1284  ICINFO icinfo;
1285 
1286  wsprintfW(szFormat, szVideoFmt, lpbi->biWidth,
1287  lpbi->biHeight, lpbi->biBitCount);
1288 
1289  if (lpbi->biCompression != BI_RGB) {
1290  HIC hic;
1291 
1292  hic = ICLocate(ICTYPE_VIDEO, sInfo.fccHandler, lpFormat,
1294  if (hic != NULL) {
1295  if (ICGetInfo(hic, &icinfo, sizeof(icinfo)) == S_OK)
1296  lstrcatW(szFormat, icinfo.szDescription);
1297  ICClose(hic);
1298  }
1299  } else {
1301  icinfo.szDescription,
1302  ARRAY_SIZE(icinfo.szDescription));
1303  lstrcatW(szFormat, icinfo.szDescription);
1304  }
1305  } else if (sInfo.fccType == streamtypeAUDIO) {
1306  ACMFORMATTAGDETAILSW aftd;
1307  ACMFORMATDETAILSW afd;
1308 
1309  memset(&aftd, 0, sizeof(aftd));
1310  memset(&afd, 0, sizeof(afd));
1311 
1312  aftd.cbStruct = sizeof(aftd);
1313  aftd.dwFormatTag = afd.dwFormatTag =
1314  ((PWAVEFORMATEX)lpFormat)->wFormatTag;
1315  aftd.cbFormatSize = afd.cbwfx = size;
1316 
1317  afd.cbStruct = sizeof(afd);
1318  afd.pwfx = lpFormat;
1319 
1320  if (acmFormatTagDetailsW(NULL, &aftd,
1323  wsprintfW(szFormat, szAudioFmt, afd.szFormat, aftd.szFormatTag);
1324  }
1325  }
1326  }
1328  }
1329 
1330  /* set text for format description */
1331  SetDlgItemTextW(hWnd, IDC_FORMATTEXT, szFormat);
1332 
1333  /* Disable option button for unsupported streamtypes */
1334  if (sInfo.fccType == streamtypeVIDEO ||
1335  sInfo.fccType == streamtypeAUDIO)
1337  else
1339  }
1340 
1341 }
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
PWAVEFORMATEX pwfx
Definition: msacm.h:507
HRESULT WINAPI AVIStreamReadFormat(PAVISTREAM pstream, LONG pos, LPVOID format, LPLONG formatsize)
Definition: api.c:549
#define TRUE
Definition: types.h:120
struct _WAVEFORMATEX * PWAVEFORMATEX
HRESULT WINAPI AVIStreamInfoW(PAVISTREAM pstream, LPAVISTREAMINFOW asi, LONG size)
Definition: api.c:522
#define IDC_OPTIONS
HWND hWnd
Definition: settings.c:17
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
#define CB_GETCURSEL
Definition: winuser.h:1925
#define AVIStreamFormatSize(pavi, lPos, plSize)
Definition: vfw.h:1436
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
#define ACM_FORMATDETAILSF_FORMAT
Definition: msacm.h:161
LRESULT WINAPI ICClose(HIC hic)
long LONG
Definition: pedump.c:60
DWORD biCompression
Definition: amvideo.idl:35
smooth NULL
Definition: ftsmooth.c:416
WCHAR szDescription[128]
Definition: vfw.h:291
#define IDC_STREAM
LRESULT VFWAPI ICGetInfo(HIC hic, ICINFO *picinfo, DWORD cb)
Definition: msvideo_main.c:594
#define TRACE(s)
Definition: solgame.cpp:4
#define ACM_FORMATTAGDETAILSF_FORMATTAG
Definition: msacm.h:183
GLsizeiptr size
Definition: glext.h:5919
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
__wchar_t WCHAR
Definition: xmlstorage.h:180
MMRESULT WINAPI acmFormatTagDetailsW(HACMDRIVER had, PACMFORMATTAGDETAILSW paftd, DWORD fdwDetails)
Definition: format.c:852
#define ICMODE_DECOMPRESS
Definition: vfw.h:269
#define ICTYPE_VIDEO
Definition: mmreg.h:531
WCHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS]
Definition: msacm.h:509
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HMODULE AVIFILE_hModule
Definition: factory.c:39
#define streamtypeAUDIO
Definition: aviriff.h:93
LPCWSTR lpFormat
Definition: trayclock.cpp:32
static struct @319 SaveOpts
#define IDC_FORMATTEXT
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
#define streamtypeVIDEO
Definition: aviriff.h:92
Definition: vfw.h:280
MMRESULT WINAPI acmFormatDetailsW(HACMDRIVER had, PACMFORMATDETAILSW pafd, DWORD fdwDetails)
Definition: format.c:431
#define S_OK
Definition: intsafe.h:59
#define ARRAY_SIZE(a)
Definition: main.h:24
DWORD cbStruct
Definition: msacm.h:503
DWORD fccHandler
Definition: avifil32.idl:30
WCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS]
Definition: msacm.h:535
HIC VFWAPI ICLocate(DWORD type, DWORD handler, BITMAPINFOHEADER *in, BITMAPINFOHEADER *out, WORD mode)
Definition: msvideo_main.c:633
#define IDS_UNCOMPRESSED
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274
DWORD dwFormatTag
Definition: msacm.h:505
#define memset(x, y, z)
Definition: compat.h:39
#define BI_RGB
Definition: precomp.h:34
#define HeapFree(x, y, z)
Definition: compat.h:402
#define SUCCEEDED(hr)
Definition: intsafe.h:57

Referenced by AVISaveOptionsDlgProc().

◆ AVISaveVA()

HRESULT WINAPI AVISaveVA ( LPCSTR  szFile,
CLSID pclsidHandler,
AVISAVECALLBACK  lpfnCallback,
int  nStream,
PAVISTREAM ppavi,
LPAVICOMPRESSOPTIONS plpOptions 
)

Definition at line 1511 of file api.c.

1514 {
1515  LPWSTR wszFile = NULL;
1516  HRESULT hr;
1517  int len;
1518 
1519  TRACE("(%s,%p,%p,%d,%p,%p)\n", debugstr_a(szFile), pclsidHandler,
1520  lpfnCallback, nStream, ppavi, plpOptions);
1521 
1522  if (szFile == NULL || ppavi == NULL || plpOptions == NULL)
1523  return AVIERR_BADPARAM;
1524 
1525  /* convert ASCII string to Unicode and call Unicode function */
1526  len = MultiByteToWideChar(CP_ACP, 0, szFile, -1, NULL, 0);
1527  if (len <= 0)
1528  return AVIERR_BADPARAM;
1529 
1530  wszFile = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
1531  if (wszFile == NULL)
1532  return AVIERR_MEMORY;
1533 
1534  MultiByteToWideChar(CP_ACP, 0, szFile, -1, wszFile, len);
1535 
1536  hr = AVISaveVW(wszFile, pclsidHandler, lpfnCallback,
1537  nStream, ppavi, plpOptions);
1538 
1540 
1541  return hr;
1542 }
HRESULT hr
Definition: shlfolder.c:183
HRESULT WINAPI AVISaveVW(LPCWSTR szFile, CLSID *pclsidHandler, AVISAVECALLBACK lpfnCallback, int nStreams, PAVISTREAM *ppavi, LPAVICOMPRESSOPTIONS *plpOptions)
Definition: api.c:1557
#define CP_ACP
Definition: compat.h:99
#define AVIERR_MEMORY
Definition: vfw.h:1745
static const WCHAR wszFile[]
Definition: urlmon_main.c:386
smooth NULL
Definition: ftsmooth.c:416
#define AVIERR_BADPARAM
Definition: vfw.h:1748
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define debugstr_a
Definition: kernel32.h:31
LONG HRESULT
Definition: typedefs.h:77
GLenum GLsizei len
Definition: glext.h:6722
#define MultiByteToWideChar
Definition: compat.h:100
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define HeapFree(x, y, z)
Definition: compat.h:402

Referenced by AVISaveA().

◆ AVISaveVW()

HRESULT WINAPI AVISaveVW ( LPCWSTR  szFile,
CLSID pclsidHandler,
AVISAVECALLBACK  lpfnCallback,
int  nStreams,
PAVISTREAM ppavi,
LPAVICOMPRESSOPTIONS plpOptions 
)

Definition at line 1557 of file api.c.

1560 {
1561  LONG lStart[MAX_AVISTREAMS];
1562  PAVISTREAM pOutStreams[MAX_AVISTREAMS];
1563  PAVISTREAM pInStreams[MAX_AVISTREAMS];
1564  AVIFILEINFOW fInfo;
1565  AVISTREAMINFOW sInfo;
1566 
1567  PAVIFILE pfile = NULL; /* the output AVI file */
1568  LONG lFirstVideo = -1;
1569  int curStream;
1570 
1571  /* for interleaving ... */
1572  DWORD dwInterleave = 0; /* interleave rate */
1573  DWORD dwFileInitialFrames;
1574  LONG lFileLength;
1575  LONG lSampleInc;
1576 
1577  /* for reading/writing the data ... */
1578  LPVOID lpBuffer = NULL;
1579  LONG cbBuffer; /* real size of lpBuffer */
1580  LONG lBufferSize; /* needed bytes for format(s), etc. */
1581  LONG lReadBytes;
1582  LONG lReadSamples;
1583  HRESULT hres;
1584 
1585  TRACE("(%s,%p,%p,%d,%p,%p)\n", debugstr_w(szFile), pclsidHandler,
1586  lpfnCallback, nStreams, ppavi, plpOptions);
1587 
1588  if (szFile == NULL || ppavi == NULL || plpOptions == NULL)
1589  return AVIERR_BADPARAM;
1590  if (nStreams >= MAX_AVISTREAMS) {
1591  WARN("Can't write AVI with %d streams only supports %d -- change MAX_AVISTREAMS!\n", nStreams, MAX_AVISTREAMS);
1592  return AVIERR_INTERNAL;
1593  }
1594 
1595  if (lpfnCallback == NULL)
1596  lpfnCallback = AVIFILE_AVISaveDefaultCallback;
1597 
1598  /* clear local variable(s) */
1599  for (curStream = 0; curStream < nStreams; curStream++) {
1600  pInStreams[curStream] = NULL;
1601  pOutStreams[curStream] = NULL;
1602  }
1603 
1604  /* open output AVI file (create it if it doesn't exist) */
1606  pclsidHandler);
1607  if (FAILED(hres))
1608  return hres;
1609  AVIFileInfoW(pfile, &fInfo, sizeof(fInfo)); /* for dwCaps */
1610 
1611  /* initialize our data structures part 1 */
1612  for (curStream = 0; curStream < nStreams; curStream++) {
1613  PAVISTREAM pCurStream = ppavi[curStream];
1614 
1615  hres = AVIStreamInfoW(pCurStream, &sInfo, sizeof(sInfo));
1616  if (FAILED(hres))
1617  goto error;
1618 
1619  /* search first video stream and check for interleaving */
1620  if (sInfo.fccType == streamtypeVIDEO) {
1621  /* remember first video stream -- needed for interleaving */
1622  if (lFirstVideo < 0)
1623  lFirstVideo = curStream;
1624  } else if (!dwInterleave) {
1625  /* check if any non-video stream wants to be interleaved */
1626  WARN("options.flags=0x%X options.dwInterleave=%u\n",plpOptions[curStream]->dwFlags,plpOptions[curStream]->dwInterleaveEvery);
1627  if (plpOptions[curStream] != NULL &&
1628  plpOptions[curStream]->dwFlags & AVICOMPRESSF_INTERLEAVE)
1629  dwInterleave = plpOptions[curStream]->dwInterleaveEvery;
1630  }
1631 
1632  /* create de-/compressed stream interface if needed */
1633  pInStreams[curStream] = NULL;
1634  if (plpOptions[curStream] != NULL) {
1635  if (plpOptions[curStream]->fccHandler ||
1636  plpOptions[curStream]->lpFormat != NULL) {
1637  DWORD dwKeySave = plpOptions[curStream]->dwKeyFrameEvery;
1638 
1639  if (fInfo.dwCaps & AVIFILECAPS_ALLKEYFRAMES)
1640  plpOptions[curStream]->dwKeyFrameEvery = 1;
1641 
1642  hres = AVIMakeCompressedStream(&pInStreams[curStream], pCurStream,
1643  plpOptions[curStream], NULL);
1644  plpOptions[curStream]->dwKeyFrameEvery = dwKeySave;
1645  if (FAILED(hres) || pInStreams[curStream] == NULL) {
1646  pInStreams[curStream] = NULL;
1647  goto error;
1648  }
1649 
1650  /* test stream interface and update stream-info */
1651  hres = AVIStreamInfoW(pInStreams[curStream], &sInfo, sizeof(sInfo));
1652  if (FAILED(hres))
1653  goto error;
1654  }
1655  }
1656 
1657  /* now handle streams which will only be copied */
1658  if (pInStreams[curStream] == NULL) {
1659  pCurStream = pInStreams[curStream] = ppavi[curStream];
1660  AVIStreamAddRef(pCurStream);
1661  } else
1662  pCurStream = pInStreams[curStream];
1663 
1664  lStart[curStream] = sInfo.dwStart;
1665  } /* for all streams */
1666 
1667  /* check that first video stream is the first stream */
1668  if (lFirstVideo > 0) {
1669  PAVISTREAM pTmp = pInStreams[lFirstVideo];
1670  LONG lTmp = lStart[lFirstVideo];
1671 
1672  pInStreams[lFirstVideo] = pInStreams[0];
1673  pInStreams[0] = pTmp;
1674  lStart[lFirstVideo] = lStart[0];
1675  lStart[0] = lTmp;
1676  lFirstVideo = 0;
1677  }
1678 
1679  /* allocate buffer for formats, data, etc. of an initial size of 64 kBytes*/
1680  cbBuffer = 0x00010000;
1681  lpBuffer = HeapAlloc(GetProcessHeap(), 0, cbBuffer);
1682  if (lpBuffer == NULL) {
1683  hres = AVIERR_MEMORY;
1684  goto error;
1685  }
1686 
1687  AVIStreamInfoW(pInStreams[0], &sInfo, sizeof(sInfo));
1688  lFileLength = sInfo.dwLength;
1689  dwFileInitialFrames = 0;
1690  if (lFirstVideo >= 0) {
1691  /* check for correct version of the format
1692  * -- need at least BITMAPINFOHEADER or newer
1693  */
1694  lSampleInc = 1;
1695  lBufferSize = cbBuffer;
1696  hres = AVIStreamReadFormat(pInStreams[lFirstVideo], AVIStreamStart(pInStreams[lFirstVideo]), lpBuffer, &lBufferSize);
1697  if (lBufferSize < (LONG)sizeof(BITMAPINFOHEADER))
1699  if (FAILED(hres))
1700  goto error;
1701  } else /* use one second blocks for interleaving if no video present */
1702  lSampleInc = AVIStreamTimeToSample(pInStreams[0], 1000000);
1703 
1704  /* create output streams */
1705  for (curStream = 0; curStream < nStreams; curStream++) {
1706  AVIStreamInfoW(pInStreams[curStream], &sInfo, sizeof(sInfo));
1707 
1708  sInfo.dwInitialFrames = 0;
1709  if (dwInterleave != 0 && curStream > 0 && sInfo.fccType != streamtypeVIDEO) {
1710  /* 750 ms initial frames for non-video streams */
1711  sInfo.dwInitialFrames = AVIStreamTimeToSample(pInStreams[0], 750);
1712  }
1713 
1714  hres = AVIFileCreateStreamW(pfile, &pOutStreams[curStream], &sInfo);
1715  if (pOutStreams[curStream] != NULL && SUCCEEDED(hres)) {
1716  /* copy initial format for this stream */
1717  lBufferSize = cbBuffer;
1718  hres = AVIStreamReadFormat(pInStreams[curStream], sInfo.dwStart,
1719  lpBuffer, &lBufferSize);
1720  if (FAILED(hres))
1721  goto error;
1722  hres = AVIStreamSetFormat(pOutStreams[curStream], 0, lpBuffer, lBufferSize);
1723  if (FAILED(hres))
1724  goto error;
1725 
1726  /* try to copy stream handler data */
1727  lBufferSize = cbBuffer;
1728  hres = AVIStreamReadData(pInStreams[curStream], ckidSTREAMHANDLERDATA,
1729  lpBuffer, &lBufferSize);
1730  if (SUCCEEDED(hres) && lBufferSize > 0) {
1731  hres = AVIStreamWriteData(pOutStreams[curStream],ckidSTREAMHANDLERDATA,
1732  lpBuffer, lBufferSize);
1733  if (FAILED(hres))
1734  goto error;
1735  }
1736 
1737  if (dwFileInitialFrames < sInfo.dwInitialFrames)
1738  dwFileInitialFrames = sInfo.dwInitialFrames;
1739  lReadBytes =
1740  AVIStreamSampleToSample(pOutStreams[0], pInStreams[curStream],
1741  sInfo.dwLength);
1742  if (lFileLength < lReadBytes)
1743  lFileLength = lReadBytes;
1744  } else {
1745  /* creation of de-/compression stream interface failed */
1746  WARN("creation of (de-)compression stream failed for stream %d\n",curStream);
1747  AVIStreamRelease(pInStreams[curStream]);
1748  if (curStream + 1 >= nStreams) {
1749  /* move the others one up */
1750  PAVISTREAM *ppas = &pInStreams[curStream];
1751  int n = nStreams - (curStream + 1);
1752 
1753  do {
1754  *ppas = pInStreams[curStream + 1];
1755  } while (--n);
1756  }
1757  nStreams--;
1758  curStream--;
1759  }
1760  } /* create output streams for all input streams */
1761 
1762  /* have we still something to write, or lost everything? */
1763  if (nStreams <= 0)
1764  goto error;
1765 
1766  if (dwInterleave) {
1767  LONG lCurFrame = -dwFileInitialFrames;
1768 
1769  /* interleaved file */
1770  if (dwInterleave == 1)
1771  AVIFileEndRecord(pfile);
1772 
1773  for (; lCurFrame < lFileLength; lCurFrame += lSampleInc) {
1774  for (curStream = 0; curStream < nStreams; curStream++) {
1775  LONG lLastSample;
1776 
1777  hres = AVIStreamInfoW(pOutStreams[curStream], &sInfo, sizeof(sInfo));
1778  if (FAILED(hres))
1779  goto error;
1780 
1781  /* initial frames phase at the end for this stream? */
1782  if (-(LONG)sInfo.dwInitialFrames > lCurFrame)
1783  continue;
1784 
1785  if ((lFileLength - lSampleInc) <= lCurFrame) {
1786  lLastSample = AVIStreamLength(pInStreams[curStream]);
1787  lFirstVideo = lLastSample + AVIStreamStart(pInStreams[curStream]);
1788  } else {
1789  if (curStream != 0) {
1790  lFirstVideo =
1791  AVIStreamSampleToSample(pInStreams[curStream], pInStreams[0],
1792  (sInfo.fccType == streamtypeVIDEO ?
1793  (LONG)dwInterleave : lSampleInc) +
1794  sInfo.dwInitialFrames + lCurFrame);
1795  } else
1796  lFirstVideo = lSampleInc + (sInfo.dwInitialFrames + lCurFrame);
1797 
1798  lLastSample = AVIStreamEnd(pInStreams[curStream]);
1799  if (lLastSample <= lFirstVideo)
1800  lFirstVideo = lLastSample;
1801  }
1802 
1803  /* copy needed samples now */
1804  WARN("copy from stream %d samples %d to %d...\n",curStream,
1805  lStart[curStream],lFirstVideo);
1806  while (lFirstVideo > lStart[curStream]) {
1807  DWORD flags = 0;
1808 
1809  /* copy format in case it can change */
1810  lBufferSize = cbBuffer;
1811  hres = AVIStreamReadFormat(pInStreams[curStream], lStart[curStream],
1812  lpBuffer, &lBufferSize);
1813  if (FAILED(hres))
1814  goto error;
1815  AVIStreamSetFormat(pOutStreams[curStream], lStart[curStream],
1816  lpBuffer, lBufferSize);
1817 
1818  /* try to read data until we got it, or error */
1819  do {
1820  hres = AVIStreamRead(pInStreams[curStream], lStart[curStream],
1821  lFirstVideo - lStart[curStream], lpBuffer,
1822  cbBuffer, &lReadBytes, &lReadSamples);
1823  } while ((hres == AVIERR_BUFFERTOOSMALL) &&
1824  (lpBuffer = HeapReAlloc(GetProcessHeap(), 0, lpBuffer, cbBuffer *= 2)) != NULL);
1825  if (lpBuffer == NULL)
1826  hres = AVIERR_MEMORY;
1827  if (FAILED(hres))
1828  goto error;
1829 
1830  if (AVIStreamIsKeyFrame(pInStreams[curStream], (LONG)sInfo.dwStart))
1832  hres = AVIStreamWrite(pOutStreams[curStream], -1, lReadSamples,
1833  lpBuffer, lReadBytes, flags, NULL, NULL);
1834  if (FAILED(hres))
1835  goto error;
1836 
1837  lStart[curStream] += lReadSamples;
1838  }
1839  lStart[curStream] = lFirstVideo;
1840  } /* stream by stream */
1841 
1842  /* need to close this block? */
1843  if (dwInterleave == 1) {
1844  hres = AVIFileEndRecord(pfile);
1845  if (FAILED(hres))
1846  break;
1847  }
1848 
1849  /* show progress */
1850  if (lpfnCallback(MulDiv(dwFileInitialFrames + lCurFrame, 100,
1851  dwFileInitialFrames + lFileLength))) {
1853  break;
1854  }
1855  } /* copy frame by frame */
1856  } else {
1857  /* non-interleaved file */
1858 
1859  for (curStream = 0; curStream < nStreams; curStream++) {
1860  /* show progress */
1861  if (lpfnCallback(MulDiv(curStream, 100, nStreams))) {
1863  goto error;
1864  }
1865 
1866  AVIStreamInfoW(pInStreams[curStream], &sInfo, sizeof(sInfo));
1867 
1868  if (sInfo.dwSampleSize != 0) {
1869  /* sample-based data like audio */
1870  while (sInfo.dwStart < sInfo.dwLength) {
1871  LONG lSamples = cbBuffer / sInfo.dwSampleSize;
1872 
1873  /* copy format in case it can change */
1874  lBufferSize = cbBuffer;
1875  hres = AVIStreamReadFormat(pInStreams[curStream], sInfo.dwStart,
1876  lpBuffer, &lBufferSize);
1877  if (FAILED(hres))
1878  goto error;
1879  AVIStreamSetFormat(pOutStreams[curStream], sInfo.dwStart,
1880  lpBuffer, lBufferSize);
1881 
1882  /* limit to stream boundaries */
1883  if (lSamples != (LONG)(sInfo.dwLength - sInfo.dwStart))
1884  lSamples = sInfo.dwLength - sInfo.dwStart;
1885 
1886  /* now try to read until we get it, or an error occurs */
1887  do {
1888  lReadBytes = cbBuffer;
1889  lReadSamples = 0;
1890  hres = AVIStreamRead(pInStreams[curStream],sInfo.dwStart,lSamples,
1891  lpBuffer,cbBuffer,&lReadBytes,&lReadSamples);
1892  } while ((hres == AVIERR_BUFFERTOOSMALL) &&
1893  (lpBuffer = HeapReAlloc(GetProcessHeap(), 0, lpBuffer, cbBuffer *= 2)) != NULL);
1894  if (lpBuffer == NULL)
1895  hres = AVIERR_MEMORY;
1896  if (FAILED(hres))
1897  goto error;
1898  if (lReadSamples != 0) {
1899  sInfo.dwStart += lReadSamples;
1900  hres = AVIStreamWrite(pOutStreams[curStream], -1, lReadSamples,
1901  lpBuffer, lReadBytes, 0, NULL , NULL);
1902  if (FAILED(hres))
1903  goto error;
1904 
1905  /* show progress */
1906  if (lpfnCallback(MulDiv(sInfo.dwStart,100,nStreams*sInfo.dwLength)+
1907  MulDiv(curStream, 100, nStreams))) {
1909  goto error;
1910  }
1911  } else {
1912  if ((sInfo.dwLength - sInfo.dwStart) != 1) {
1914  goto error;
1915  }
1916  }
1917  }
1918  } else {
1919  /* block-based data like video */
1920  for (; sInfo.dwStart < sInfo.dwLength; sInfo.dwStart++) {
1921  DWORD flags = 0;
1922 
1923  /* copy format in case it can change */
1924  lBufferSize = cbBuffer;
1925  hres = AVIStreamReadFormat(pInStreams[curStream], sInfo.dwStart,
1926  lpBuffer, &lBufferSize);
1927  if (FAILED(hres))
1928  goto error;
1929  AVIStreamSetFormat(pOutStreams[curStream], sInfo.dwStart,
1930  lpBuffer, lBufferSize);
1931 
1932  /* try to read block and resize buffer if necessary */
1933  do {
1934  lReadSamples = 0;
1935  lReadBytes = cbBuffer;
1936  hres = AVIStreamRead(pInStreams[curStream], sInfo.dwStart, 1,
1937  lpBuffer, cbBuffer,&lReadBytes,&lReadSamples);
1938  } while ((hres == AVIERR_BUFFERTOOSMALL) &&
1939  (lpBuffer = HeapReAlloc(GetProcessHeap(), 0, lpBuffer, cbBuffer *= 2)) != NULL);
1940  if (lpBuffer == NULL)
1941  hres = AVIERR_MEMORY;
1942  if (FAILED(hres))
1943  goto error;
1944  if (lReadSamples != 1) {
1946  goto error;
1947  }
1948 
1949  if (AVIStreamIsKeyFrame(pInStreams[curStream], (LONG)sInfo.dwStart))
1951  hres = AVIStreamWrite(pOutStreams[curStream], -1, lReadSamples,
1952  lpBuffer, lReadBytes, flags, NULL, NULL);
1953  if (FAILED(hres))
1954  goto error;
1955 
1956  /* show progress */
1957  if (lpfnCallback(MulDiv(sInfo.dwStart,100,nStreams*sInfo.dwLength)+
1958  MulDiv(curStream, 100, nStreams))) {
1960  goto error;
1961  }
1962  } /* copy all blocks */
1963  }
1964  } /* copy data stream by stream */
1965  }
1966 
1967  error:
1969  if (pfile != NULL) {
1970  for (curStream = 0; curStream < nStreams; curStream++) {
1971  if (pOutStreams[curStream] != NULL)
1972  AVIStreamRelease(pOutStreams[curStream]);
1973  if (pInStreams[curStream] != NULL)
1974  AVIStreamRelease(pInStreams[curStream]);
1975  }
1976 
1977  AVIFileRelease(pfile);
1978  }
1979 
1980  return hres;
1981 }
HRESULT WINAPI AVIStreamReadFormat(PAVISTREAM pstream, LONG pos, LPVOID format, LPLONG formatsize)
Definition: api.c:549
DWORD dwSampleSize
Definition: avifil32.idl:42
#define error(str)
Definition: mkdosfs.c:1605
#define AVIERR_INTERNAL
Definition: vfw.h:1746
#define AVIFILECAPS_ALLKEYFRAMES
Definition: vfw.h:1062
#define WARN(fmt,...)
Definition: debug.h:111
DWORD dwKeyFrameEvery
Definition: vfw.h:1106
HRESULT WINAPI AVIStreamInfoW(PAVISTREAM pstream, LPAVISTREAMINFOW asi, LONG size)
Definition: api.c:522
HRESULT WINAPI AVIStreamSetFormat(PAVISTREAM pstream, LONG pos, LPVOID format, LONG formatsize)
Definition: api.c:563
GLdouble n
Definition: glext.h:7729
#define AVIIF_KEYFRAME
Definition: aviriff.h:131
LONG WINAPI AVIStreamTimeToSample(PAVISTREAM pstream, LONG lTime)
Definition: api.c:927
ULONG WINAPI AVIFileRelease(PAVIFILE pfile)
Definition: api.c:291
#define AVIERR_MEMORY
Definition: vfw.h:1745
long LONG
Definition: pedump.c:60
LONG WINAPI AVIStreamLength(PAVISTREAM pstream)
Definition: api.c:876
#define debugstr_w
Definition: kernel32.h:32
HRESULT WINAPI AVIStreamReadData(PAVISTREAM pstream, DWORD fcc, LPVOID lp, LPLONG lpread)
Definition: api.c:611
HRESULT WINAPI AVIMakeCompressedStream(PAVISTREAM *ppsCompressed, PAVISTREAM psSource, LPAVICOMPRESSOPTIONS aco, LPCLSID pclsidHandler)
Definition: api.c:689
HRESULT WINAPI AVIStreamWriteData(PAVISTREAM pstream, DWORD fcc, LPVOID lp, LONG size)
Definition: api.c:625
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
Definition: db.cpp:173
ULONG WINAPI AVIStreamAddRef(PAVISTREAM pstream)
Definition: api.c:434
DWORD dwInitialFrames
Definition: avifil32.idl:39
smooth NULL
Definition: ftsmooth.c:416
INT nStreams
Definition: api.c:60
HRESULT WINAPI AVIStreamRead(PAVISTREAM pstream, LONG start, LONG samples, LPVOID buffer, LONG buffersize, LPLONG bytesread, LPLONG samplesread)
Definition: api.c:577
#define AVIERR_BUFFERTOOSMALL
Definition: vfw.h:1758
#define AVIERR_USERABORT
Definition: vfw.h:1760
#define AVIERR_BADPARAM
Definition: vfw.h:1748
HRESULT WINAPI AVIFileCreateStreamW(PAVIFILE pfile, PAVISTREAM *avis, LPAVISTREAMINFOW asi)
Definition: api.c:381
#define MAX_AVISTREAMS
HRESULT WINAPI AVIStreamWrite(PAVISTREAM pstream, LONG start, LONG samples, LPVOID buffer, LONG buffersize, DWORD flags, LPLONG sampwritten, LPLONG byteswritten)
Definition: api.c:594
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
#define ckidSTREAMHANDLERDATA
Definition: vfw.h:895
LONG HRESULT
Definition: typedefs.h:77
static BOOL WINAPI AVIFILE_AVISaveDefaultCallback(INT progress)
Definition: api.c:1547
#define AVIStreamIsKeyFrame(pavi, pos)
Definition: vfw.h:1459
unsigned long DWORD
Definition: ntddk_ex.h:95
ULONG WINAPI AVIStreamRelease(PAVISTREAM pstream)
Definition: api.c:449
GLbitfield flags
Definition: glext.h:7161
#define OF_WRITE
Definition: winbase.h:118
DWORD dwInterleaveEvery
Definition: vfw.h:1114
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
LONG WINAPI AVIStreamStart(PAVISTREAM pstream)
Definition: api.c:858
LPCWSTR lpFormat
Definition: trayclock.cpp:32
HRESULT WINAPI AVIFileEndRecord(PAVIFILE pfile)
Definition: api.c:421
#define AVIStreamSampleToSample(pavi1, pavi2, samp2)
Definition: vfw.h:1442
#define streamtypeVIDEO
Definition: aviriff.h:92
#define HeapReAlloc
Definition: compat.h:401
#define AVIStreamEnd(pavi)
Definition: vfw.h:1432
#define OF_CREATE
Definition: winbase.h:125
#define AVICOMPRESSF_INTERLEAVE
Definition: vfw.h:1098
#define AVIERR_FILEREAD
Definition: vfw.h:1751
DWORD dwCaps
Definition: avifil32.idl:72
HRESULT WINAPI AVIFileOpenW(PAVIFILE *ppfile, LPCWSTR szFile, UINT uMode, LPCLSID lpHandler)
Definition: api.c:227
#define HeapFree(x, y, z)
Definition: compat.h:402
#define MulDiv(x, y, z)
Definition: gdifloat.h:86
#define SUCCEEDED(hr)
Definition: intsafe.h:57
#define OF_SHARE_EXCLUSIVE
Definition: winbase.h:123
HRESULT WINAPI AVIFileInfoW(PAVIFILE pfile, LPAVIFILEINFOW afiw, LONG size)
Definition: api.c:332

Referenced by AVISaveVA(), and AVISaveW().

◆ AVISaveW()

HRESULT WINAPIV AVISaveW ( LPCWSTR  szFile,
CLSID pclsidHandler,
AVISAVECALLBACK  lpfnCallback,
int  nStreams,
PAVISTREAM  pavi,
LPAVICOMPRESSOPTIONS  lpOptions,
  ... 
)

Definition at line 2283 of file api.c.

2285 {
2286  __ms_va_list vl;
2287  int i;
2288  HRESULT ret;
2289  PAVISTREAM *streams;
2291 
2292  TRACE("(%s,%p,%p,%d,%p,%p)\n", debugstr_w(szFile), pclsidHandler, lpfnCallback,
2293  nStreams, pavi, lpOptions);
2294 
2295  if (nStreams <= 0) return AVIERR_BADPARAM;
2296 
2297  streams = HeapAlloc(GetProcessHeap(), 0, nStreams * sizeof(*streams));
2298  options = HeapAlloc(GetProcessHeap(), 0, nStreams * sizeof(*options));
2299  if (!streams || !options)
2300  {
2301  ret = AVIERR_MEMORY;
2302  goto error;
2303  }
2304 
2305  streams[0] = pavi;
2306  options[0] = lpOptions;
2307 
2308  __ms_va_start(vl, lpOptions);
2309  for (i = 1; i < nStreams; i++)
2310  {
2311  streams[i] = va_arg(vl, PAVISTREAM);
2313  }
2314  __ms_va_end(vl);
2315 
2316  for (i = 0; i < nStreams; i++)
2317  TRACE("Pair[%d] - Stream = %p, Options = %p\n", i, streams[i], options[i]);
2318 
2319  ret = AVISaveVW(szFile, pclsidHandler, lpfnCallback, nStreams, streams, options);
2320 error:
2321  HeapFree(GetProcessHeap(), 0, streams);
2323  return ret;
2324 }
static static const char __ms_va_list
Definition: printf.c:76
#define error(str)
Definition: mkdosfs.c:1605
HRESULT WINAPI AVISaveVW(LPCWSTR szFile, CLSID *pclsidHandler, AVISAVECALLBACK lpfnCallback, int nStreams, PAVISTREAM *ppavi, LPAVICOMPRESSOPTIONS *plpOptions)
Definition: api.c:1557
#define AVIERR_MEMORY
Definition: vfw.h:1745
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
#define debugstr_w
Definition: kernel32.h:32
INT nStreams
Definition: api.c:60
int options
Definition: main.c:106
#define AVIERR_BADPARAM
Definition: vfw.h:1748
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
LONG HRESULT
Definition: typedefs.h:77
int ret
#define va_arg(ap, T)
Definition: acmsvcex.h:89
#define __ms_va_end(list)
Definition: windef.h:458
#define __ms_va_start(list, arg)
Definition: windef.h:457
#define HeapFree(x, y, z)
Definition: compat.h:402

◆ AVIStreamAddRef()

ULONG WINAPI AVIStreamAddRef ( PAVISTREAM  pstream)

Definition at line 434 of file api.c.

435 {
436  TRACE("(%p)\n", pstream);
437 
438  if (pstream == NULL) {
439  ERR(": bad handle passed!\n");
440  return 0;
441  }
442 
443  return IAVIStream_AddRef(pstream);
444 }
#define IAVIStream_AddRef(p)
Definition: vfw.h:1176
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define ERR(fmt,...)
Definition: debug.h:109

Referenced by AVIFILE_CreateAVITempFile(), AVISaveVW(), and ITmpFile_fnGetStream().

◆ AVIStreamBeginStreaming()

LONG WINAPI AVIStreamBeginStreaming ( PAVISTREAM  pavi,
LONG  lStart,
LONG  lEnd,
LONG  lRate 
)

Definition at line 816 of file api.c.

817 {
818  IAVIStreaming* pstream = NULL;
819  HRESULT hr;
820 
821  TRACE("(%p,%d,%d,%d)\n", pavi, lStart, lEnd, lRate);
822 
823  if (pavi == NULL)
824  return AVIERR_BADHANDLE;
825 
826  hr = IAVIStream_QueryInterface(pavi, &IID_IAVIStreaming, (LPVOID*)&pstream);
827  if (SUCCEEDED(hr) && pstream != NULL) {
828  hr = IAVIStreaming_Begin(pstream, lStart, lEnd, lRate);
829  IAVIStreaming_Release(pstream);
830  } else
831  hr = AVIERR_OK;
832 
833  return hr;
834 }
HRESULT hr
Definition: shlfolder.c:183
#define IAVIStreaming_Begin(p, a, b, c)
Definition: vfw.h:1484
#define AVIERR_BADHANDLE
Definition: vfw.h:1750
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77
#define IAVIStream_QueryInterface(p, a, b)
Definition: vfw.h:1175
#define AVIERR_OK
Definition: vfw.h:1740
#define IAVIStreaming_Release(p)
Definition: vfw.h:1482
#define SUCCEEDED(hr)
Definition: intsafe.h:57

◆ AVIStreamCreate()

HRESULT WINAPI AVIStreamCreate ( PAVISTREAM ppavi,
LONG  lParam1,
LONG  lParam2,
LPCLSID  pclsidHandler 
)

Definition at line 464 of file api.c.

466 {
467  HRESULT hr;
468 
469  TRACE("(%p,0x%08X,0x%08X,%s)\n", ppavi, lParam1, lParam2,
470  debugstr_guid(pclsidHandler));
471 
472  if (ppavi == NULL)
473  return AVIERR_BADPARAM;
474 
475  *ppavi = NULL;
476  if (pclsidHandler == NULL)
477  return AVIERR_UNSUPPORTED;
478 
479  hr = CoCreateInstance(pclsidHandler, NULL, CLSCTX_INPROC, &IID_IAVIStream, (LPVOID*)ppavi);
480  if (FAILED(hr) || *ppavi == NULL)
481  return hr;
482 
483  hr = IAVIStream_Create(*ppavi, lParam1, lParam2);
484  if (FAILED(hr)) {
485  IAVIStream_Release(*ppavi);
486  *ppavi = NULL;
487  }
488 
489  return hr;
490 }
#define IAVIStream_Create(p, a, b)
Definition: vfw.h:1179
HRESULT hr
Definition: shlfolder.c:183
#define IAVIStream_Release(p)
Definition: vfw.h:1177
smooth NULL
Definition: ftsmooth.c:416
#define debugstr_guid
Definition: kernel32.h:35
#define AVIERR_BADPARAM
Definition: vfw.h:1748
#define AVIERR_UNSUPPORTED
Definition: vfw.h:1743
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325

◆ AVIStreamEndStreaming()

LONG WINAPI AVIStreamEndStreaming ( PAVISTREAM  pavi)

Definition at line 839 of file api.c.

840 {
841  IAVIStreaming* pstream = NULL;
842  HRESULT hr;
843 
844  TRACE("(%p)\n", pavi);
845 
846  hr = IAVIStream_QueryInterface(pavi, &IID_IAVIStreaming, (LPVOID*)&pstream);
847  if (SUCCEEDED(hr) && pstream != NULL) {
848  IAVIStreaming_End(pstream);
849  IAVIStreaming_Release(pstream);
850  }
851 
852  return AVIERR_OK;
853 }
HRESULT hr
Definition: shlfolder.c:183
#define IAVIStreaming_End(p)
Definition: vfw.h:1485
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77
#define IAVIStream_QueryInterface(p, a, b)
Definition: vfw.h:1175
#define AVIERR_OK
Definition: vfw.h:1740
#define IAVIStreaming_Release(p)
Definition: vfw.h:1482
#define SUCCEEDED(hr)
Definition: intsafe.h:57

◆ AVIStreamFindSample()

LONG WINAPI AVIStreamFindSample ( PAVISTREAM  pstream,
LONG  pos,
LONG  flags 
)

Definition at line 536 of file api.c.

537 {
538  TRACE("(%p,%d,0x%X)\n", pstream, pos, flags);
539 
540  if (pstream == NULL)
541  return -1;
542 
543  return IAVIStream_FindSample(pstream, pos, flags);
544 }
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
GLbitfield flags
Definition: glext.h:7161
#define IAVIStream_FindSample(p, a, b)
Definition: vfw.h:1181

◆ AVIStreamGetFrame()

LPVOID WINAPI AVIStreamGetFrame ( PGETFRAME  pg,
LONG  pos 
)

Definition at line 664 of file api.c.

665 {
666  TRACE("(%p,%d)\n", pg, pos);
667 
668  if (pg == NULL)
669  return NULL;
670 
671  return IGetFrame_GetFrame(pg, pos);
672 }
#define IGetFrame_GetFrame(p, a)
Definition: vfw.h:1721
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by AVIFILE_OpenGetFrame(), AVIFILE_ReadFrame(), ICMStream_fnRead(), and ICMStream_fnReadFormat().

◆ AVIStreamGetFrameClose()

HRESULT WINAPI AVIStreamGetFrameClose ( PGETFRAME  pg)

Definition at line 677 of file api.c.

678 {
679  TRACE("(%p)\n", pg);
680 
681  if (pg != NULL)
682  return IGetFrame_Release(pg);
683  return 0;
684 }
#define IGetFrame_Release(p)
Definition: vfw.h:1719
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by AVIFILE_ReadFrame(), IAVIEditStream_fnRelease(), and ICMStream_fnRelease().

◆ AVIStreamGetFrameOpen()

PGETFRAME WINAPI AVIStreamGetFrameOpen ( PAVISTREAM  pstream,
LPBITMAPINFOHEADER  lpbiWanted 
)

Definition at line 639 of file api.c.

641 {
642  PGETFRAME pg = NULL;
643 
644  TRACE("(%p,%p)\n", pstream, lpbiWanted);
645 
646  if (FAILED(IAVIStream_QueryInterface(pstream, &IID_IGetFrame, (LPVOID*)&pg)) ||
647  pg == NULL) {
648  pg = AVIFILE_CreateGetFrame(pstream);
649  if (pg == NULL)
650  return NULL;
651  }
652 
653  if (FAILED(IGetFrame_SetFormat(pg, lpbiWanted, NULL, 0, 0, -1, -1))) {
654  IGetFrame_Release(pg);
655  return NULL;
656  }
657 
658  return pg;
659 }
#define IGetFrame_SetFormat(p, a, b, c, d, e, f)
Definition: vfw.h:1724
#define IGetFrame_Release(p)
Definition: vfw.h:1719
struct IGetFrame * PGETFRAME
Definition: vfw.h:40
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
PGETFRAME AVIFILE_CreateGetFrame(PAVISTREAM pstream) DECLSPEC_HIDDEN
Definition: getframe.c:487
#define IAVIStream_QueryInterface(p, a, b)
Definition: vfw.h:1175

Referenced by AVIFILE_OpenGetFrame(), and AVIFILE_ReadFrame().

◆ AVIStreamInfoA()

HRESULT WINAPI AVIStreamInfoA ( PAVISTREAM  pstream,
LPAVISTREAMINFOA  asi,
LONG  size 
)

Definition at line 496 of file api.c.

498 {
499  AVISTREAMINFOW asiw;
500  HRESULT hres;
501 
502  TRACE("(%p,%p,%d)\n", pstream, asi, size);
503 
504  if (pstream == NULL)
505  return AVIERR_BADHANDLE;
506  if ((DWORD)size < sizeof(AVISTREAMINFOA))
507  return AVIERR_BADSIZE;
508 
509  hres = IAVIStream_Info(pstream, &asiw, sizeof(asiw));
510 
511  memcpy(asi, &asiw, sizeof(asiw) - sizeof(asiw.szName));
512  WideCharToMultiByte(CP_ACP, 0, asiw.szName, -1, asi->szName,
513  sizeof(asi->szName), NULL, NULL);
514  asi->szName[sizeof(asi->szName) - 1] = 0;
515 
516  return hres;
517 }
#define WideCharToMultiByte
Definition: compat.h:101
#define IAVIStream_Info(p, a, b)
Definition: vfw.h:1180
#define CP_ACP
Definition: compat.h:99
CHAR szName[64]
Definition: vfw.h:1021
#define AVIERR_BADHANDLE
Definition: vfw.h:1750
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:77
#define AVIERR_BADSIZE
Definition: vfw.h:1749
unsigned long DWORD
Definition: ntddk_ex.h:95
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
WCHAR szName[64]
Definition: avifil32.idl:46

Referenced by EditStreamSetNameA(), test_ash1_corruption(), test_ash1_corruption2(), test_default_data(), and test_EditStreamSetInfo().

◆ AVIStreamInfoW()

HRESULT WINAPI AVIStreamInfoW ( PAVISTREAM  pstream,
LPAVISTREAMINFOW  asi,
LONG  size 
)

Definition at line 522 of file api.c.

524 {
525  TRACE("(%p,%p,%d)\n", pstream, asi, size);
526 
527  if (pstream == NULL)
528  return AVIERR_BADHANDLE;
529 
530  return IAVIStream_Info(pstream, asi, size);
531 }
#define IAVIStream_Info(p, a, b)
Definition: vfw.h:1180
#define AVIERR_BADHANDLE
Definition: vfw.h:1750
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919

Referenced by AVIFILE_CreateAVITempFile(), AVISaveOptionsDlgProc(), AVISaveOptionsFmtChoose(), AVISaveOptionsUpdate(), AVISaveVW(), and ITmpFile_fnGetStream().

◆ AVIStreamLength()

LONG WINAPI AVIStreamLength ( PAVISTREAM  pstream)

Definition at line 876 of file api.c.

877 {
878  AVISTREAMINFOW asiw;
879 
880  TRACE("(%p)\n", pstream);
881 
882  if (pstream == NULL)
883  return 0;
884 
885  if (FAILED(IAVIStream_Info(pstream, &asiw, sizeof(asiw))))
886  return 0;
887 
888  return asiw.dwLength;
889 }
#define IAVIStream_Info(p, a, b)
Definition: vfw.h:1180
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by AVISaveVW().

◆ AVIStreamOpenFromFileA()

HRESULT WINAPI AVIStreamOpenFromFileA ( PAVISTREAM ppavi,
LPCSTR  szFile,
DWORD  fccType,
LONG  lParam,
UINT  mode,
LPCLSID  pclsidHandler 
)

Definition at line 760 of file api.c.

763 {
764  PAVIFILE pfile = NULL;
765  HRESULT hr;
766 
767  TRACE("(%p,%s,'%4.4s',%d,0x%X,%s)\n", ppavi, debugstr_a(szFile),
768  (char*)&fccType, lParam, mode, debugstr_guid(pclsidHandler));
769 
770  if (ppavi == NULL || szFile == NULL)
771  return AVIERR_BADPARAM;
772 
773  *ppavi = NULL;
774 
775  hr = AVIFileOpenA(&pfile, szFile, mode, pclsidHandler);
776  if (FAILED(hr) || pfile == NULL)
777  return hr;
778 
779  hr = IAVIFile_GetStream(pfile, ppavi, fccType, lParam);
780  IAVIFile_Release(pfile);
781 
782  return hr;
783 }
HRESULT hr
Definition: shlfolder.c:183
smooth NULL
Definition: ftsmooth.c:416
#define debugstr_guid
Definition: kernel32.h:35
#define AVIERR_BADPARAM
Definition: vfw.h:1748
#define TRACE(s)
Definition: solgame.cpp:4
#define debugstr_a
Definition: kernel32.h:31
LONG HRESULT
Definition: typedefs.h:77
HRESULT WINAPI AVIFileOpenA(PAVIFILE *ppfile, LPCSTR szFile, UINT uMode, LPCLSID lpHandler)
Definition: api.c:192
GLenum mode
Definition: glext.h:6217
#define IAVIFile_Release(p)
Definition: vfw.h:1604
#define IAVIFile_GetStream(p, a, b, c)
Definition: vfw.h:1607
LPARAM lParam
Definition: combotst.c:139

◆ AVIStreamOpenFromFileW()

HRESULT WINAPI AVIStreamOpenFromFileW ( PAVISTREAM ppavi,
LPCWSTR  szFile,
DWORD  fccType,
LONG  lParam,
UINT  mode,
LPCLSID  pclsidHandler 
)

Definition at line 788 of file api.c.

791 {
792  PAVIFILE pfile = NULL;
793  HRESULT hr;
794 
795  TRACE("(%p,%s,'%4.4s',%d,0x%X,%s)\n", ppavi, debugstr_w(szFile),
796  (char*)&fccType, lParam, mode, debugstr_guid(pclsidHandler));
797 
798  if (ppavi == NULL || szFile == NULL)
799  return AVIERR_BADPARAM;
800 
801  *ppavi = NULL;
802 
803  hr = AVIFileOpenW(&pfile, szFile, mode, pclsidHandler);
804  if (FAILED(hr) || pfile == NULL)
805  return hr;
806 
807  hr = IAVIFile_GetStream(pfile, ppavi, fccType, lParam);
808  IAVIFile_Release(pfile);
809 
810  return hr;
811 }
HRESULT hr
Definition: shlfolder.c:183
#define debugstr_w
Definition: kernel32.h:32
smooth NULL
Definition: ftsmooth.c:416
#define debugstr_guid
Definition: kernel32.h:35
#define AVIERR_BADPARAM
Definition: vfw.h:1748
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77
GLenum mode
Definition: glext.h:6217
#define IAVIFile_Release(p)
Definition: vfw.h:1604
HRESULT WINAPI AVIFileOpenW(PAVIFILE *ppfile, LPCWSTR szFile, UINT uMode, LPCLSID lpHandler)
Definition: api.c:227
#define IAVIFile_GetStream(p, a, b, c)
Definition: vfw.h:1607
LPARAM lParam
Definition: combotst.c:139

◆ AVIStreamRead()

HRESULT WINAPI AVIStreamRead ( PAVISTREAM  pstream,
LONG  start,
LONG  samples,
LPVOID  buffer,
LONG  buffersize,
LPLONG  bytesread,
LPLONG  samplesread 
)

Definition at line 577 of file api.c.

580 {
581  TRACE("(%p,%d,%d,%p,%d,%p,%p)\n", pstream, start, samples, buffer,
582  buffersize, bytesread, samplesread);
583 
584  if (pstream == NULL)
585  return AVIERR_BADHANDLE;
586 
587  return IAVIStream_Read(pstream, start, samples, buffer, buffersize,
588  bytesread, samplesread);
589 }
GLsizei samples
Definition: glext.h:7006
GLuint buffer
Definition: glext.h:5915
#define AVIERR_BADHANDLE
Definition: vfw.h:1750
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define IAVIStream_Read(p, a, b, c, d, e, f)
Definition: vfw.h:1184
GLuint start
Definition: gl.h:1545

Referenced by AVISaveVW(), and IGetFrame_fnGetFrame().

◆ AVIStreamReadData()

HRESULT WINAPI AVIStreamReadData ( PAVISTREAM  pstream,
DWORD  fcc,
LPVOID  lp,
LPLONG  lpread 
)

Definition at line 611 of file api.c.

613 {
614  TRACE("(%p,'%4.4s',%p,%p)\n", pstream, (char*)&fcc, lp, lpread);
615 
616  if (pstream == NULL)
617  return AVIERR_BADHANDLE;
618 
619  return IAVIStream_ReadData(pstream, fcc, lp, lpread);
620 }
#define IAVIStream_ReadData(p, a, b, c)
Definition: vfw.h:1187
#define AVIERR_BADHANDLE
Definition: vfw.h:1750
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by AVISaveVW().

◆ AVIStreamReadFormat()

HRESULT WINAPI AVIStreamReadFormat ( PAVISTREAM  pstream,
LONG  pos,
LPVOID  format,
LPLONG  formatsize 
)

Definition at line 549 of file api.c.

551 {
552  TRACE("(%p,%d,%p,%p)\n", pstream, pos, format, formatsize);
553 
554  if (pstream == NULL)
555  return AVIERR_BADHANDLE;
556 
557  return IAVIStream_ReadFormat(pstream, pos, format, formatsize);
558 }
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
#define AVIERR_BADHANDLE
Definition: vfw.h:1750
smooth NULL
Definition: ftsmooth.c:416
#define IAVIStream_ReadFormat(p, a, b, c)
Definition: vfw.h:1182
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by AVIFILE_FormatsEqual(), AVISaveOptionsFmtChoose(), AVISaveOptionsUpdate(), AVISaveVW(), and test_default_data().

◆ AVIStreamRelease()

ULONG WINAPI AVIStreamRelease ( PAVISTREAM  pstream)

Definition at line 449 of file api.c.

450 {
451  TRACE("(%p)\n", pstream);
452 
453  if (pstream == NULL) {
454  ERR(": bad handle passed!\n");
455  return 0;
456  }
457 
458  return IAVIStream_Release(pstream);
459 }
#define IAVIStream_Release(p)
Definition: vfw.h:1177
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define ERR(fmt,...)
Definition: debug.h:109

Referenced by AVISaveVW(), ITmpFile_fnRelease(), test_ash1_corruption(), test_ash1_corruption2(), test_AVISaveOptions(), test_default_data(), and test_EditStreamSetInfo().

◆ AVIStreamSampleToTime()

LONG WINAPI AVIStreamSampleToTime ( PAVISTREAM  pstream,
LONG  lSample 
)

Definition at line 894 of file api.c.

895 {
896  AVISTREAMINFOW asiw;
897  LONG time;
898 
899  TRACE("(%p,%d)\n", pstream, lSample);
900 
901  if (pstream == NULL)
902  return -1;
903 
904  if (FAILED(IAVIStream_Info(pstream, &asiw, sizeof(asiw))))
905  return -1;
906  if (asiw.dwRate == 0)
907  return -1;
908 
909  /* limit to stream bounds */
910  if (lSample < asiw.dwStart)
911  lSample = asiw.dwStart;
912  if (lSample > asiw.dwStart + asiw.dwLength)
913  lSample = asiw.dwStart + asiw.dwLength;
914 
915  if (asiw.dwRate / asiw.dwScale < 1000)
916  time = (LONG)(((float)lSample * asiw.dwScale * 1000) / asiw.dwRate);
917  else
918  time = (LONG)(((float)lSample * asiw.dwScale * 1000 + (asiw.dwRate - 1)) / asiw.dwRate);
919 
920  TRACE(" -> %d\n",time);
921  return time;
922 }
#define IAVIStream_Info(p, a, b)
Definition: vfw.h:1180
__u16 time
Definition: mkdosfs.c:366
long LONG
Definition: pedump.c:60
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by AVIFILE_CreateAVITempFile().

◆ AVIStreamSetFormat()

HRESULT WINAPI AVIStreamSetFormat ( PAVISTREAM  pstream,
LONG  pos,
LPVOID  format,
LONG  formatsize 
)

Definition at line 563 of file api.c.

565 {
566  TRACE("(%p,%d,%p,%d)\n", pstream, pos, format, formatsize);
567 
568  if (pstream == NULL)
569  return AVIERR_BADHANDLE;
570 
571  return IAVIStream_SetFormat(pstream, pos, format, formatsize);
572 }
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
#define AVIERR_BADHANDLE
Definition: vfw.h:1750
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define IAVIStream_SetFormat(p, a, b, c)
Definition: vfw.h:1183

Referenced by AVISaveVW().

◆ AVIStreamStart()

LONG WINAPI AVIStreamStart ( PAVISTREAM  pstream)

Definition at line 858 of file api.c.

859 {
860  AVISTREAMINFOW asiw;
861 
862  TRACE("(%p)\n", pstream);
863 
864  if (pstream == NULL)
865  return 0;
866 
867  if (FAILED(IAVIStream_Info(pstream, &asiw, sizeof(asiw))))
868  return 0;
869 
870  return asiw.dwStart;
871 }
#define IAVIStream_Info(p, a, b)
Definition: vfw.h:1180
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by AVIFILE_FormatsEqual(), AVISaveVW(), and test_default_data().

◆ AVIStreamTimeToSample()

LONG WINAPI AVIStreamTimeToSample ( PAVISTREAM  pstream,
LONG  lTime 
)

Definition at line 927 of file api.c.

928 {
929  AVISTREAMINFOW asiw;
930  ULONG sample;
931 
932  TRACE("(%p,%d)\n", pstream, lTime);
933 
934  if (pstream == NULL || lTime < 0)
935  return -1;
936 
937  if (FAILED(IAVIStream_Info(pstream, &asiw, sizeof(asiw))))
938  return -1;
939  if (asiw.dwScale == 0)
940  return -1;
941 
942  if (asiw.dwRate / asiw.dwScale < 1000)
943  sample = (LONG)((((float)asiw.dwRate * lTime) / (asiw.dwScale * 1000)));
944  else
945  sample = (LONG)(((float)asiw.dwRate * lTime + (asiw.dwScale * 1000 - 1)) / (asiw.dwScale * 1000));
946 
947  /* limit to stream bounds */
948  if (sample < asiw.dwStart)
949  sample = asiw.dwStart;
950  if (sample > asiw.dwStart + asiw.dwLength)
951  sample = asiw.dwStart + asiw.dwLength;
952 
953  TRACE(" -> %d\n", sample);
954  return sample;
955 }
#define IAVIStream_Info(p, a, b)
Definition: vfw.h:1180
long LONG
Definition: pedump.c:60
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
unsigned int ULONG
Definition: retypes.h:1

Referenced by AVIFILE_SaveIndex(), and AVISaveVW().

◆ AVIStreamWrite()

HRESULT WINAPI AVIStreamWrite ( PAVISTREAM  pstream,
LONG  start,
LONG  samples,
LPVOID  buffer,
LONG  buffersize,
DWORD  flags,
LPLONG  sampwritten,
LPLONG  byteswritten 
)

Definition at line 594 of file api.c.

597 {
598  TRACE("(%p,%d,%d,%p,%d,0x%X,%p,%p)\n", pstream, start, samples, buffer,
599  buffersize, flags, sampwritten, byteswritten);
600 
601  if (pstream == NULL)
602  return AVIERR_BADHANDLE;
603 
604  return IAVIStream_Write(pstream, start, samples, buffer, buffersize,
605  flags, sampwritten, byteswritten);
606 }
GLsizei samples
Definition: glext.h:7006
GLuint buffer
Definition: glext.h:5915
#define AVIERR_BADHANDLE
Definition: vfw.h:1750
smooth NULL
Definition: ftsmooth.c:416
#define IAVIStream_Write(p, a, b, c, d, e, f, g)
Definition: vfw.h:1185
#define TRACE(s)
Definition: solgame.cpp:4
GLbitfield flags
Definition: glext.h:7161
GLuint start
Definition: gl.h:1545

Referenced by AVISaveVW().

◆ AVIStreamWriteData()

HRESULT WINAPI AVIStreamWriteData ( PAVISTREAM  pstream,
DWORD  fcc,
LPVOID  lp,
LONG  size 
)

Definition at line 625 of file api.c.

627 {
628  TRACE("(%p,'%4.4s',%p,%d)\n", pstream, (char*)&fcc, lp, size);
629 
630  if (pstream == NULL)
631  return AVIERR_BADHANDLE;
632 
633  return IAVIStream_WriteData(pstream, fcc, lp, size);
634 }
#define AVIERR_BADHANDLE
Definition: vfw.h:1750
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
#define IAVIStream_WriteData(p, a, b, c)
Definition: vfw.h:1188

Referenced by AVISaveVW().

◆ EditStreamClone()

HRESULT WINAPI EditStreamClone ( PAVISTREAM  pStream,
PAVISTREAM ppResult 
)

Definition at line 1986 of file api.c.

1987 {
1988  PAVIEDITSTREAM pEdit = NULL;
1989  HRESULT hr;
1990 
1991  TRACE("(%p,%p)\n", pStream, ppResult);
1992 
1993  if (pStream == NULL)
1994  return AVIERR_BADHANDLE;
1995  if (ppResult == NULL)
1996  return AVIERR_BADPARAM;
1997 
1998  *ppResult = NULL;
1999 
2000  hr = IAVIStream_QueryInterface(pStream, &IID_IAVIEditStream,(LPVOID*)&pEdit);
2001  if (SUCCEEDED(hr) && pEdit != NULL) {
2002  hr = IAVIEditStream_Clone(pEdit, ppResult);
2003 
2004  IAVIEditStream_Release(pEdit);
2005  } else
2007 
2008  return hr;
2009 }
HRESULT hr
Definition: shlfolder.c:183
#define AVIERR_BADHANDLE
Definition: vfw.h:1750
smooth NULL
Definition: ftsmooth.c:416
#define AVIERR_BADPARAM
Definition: vfw.h:1748
#define AVIERR_UNSUPPORTED
Definition: vfw.h:1743
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77
struct IAVIEditStream * PAVIEDITSTREAM
Definition: vfw.h:41
#define IAVIStream_QueryInterface(p, a, b)
Definition: vfw.h:1175
#define IAVIEditStream_Release(p)
Definition: vfw.h:1511
#define IAVIEditStream_Clone(p, a)
Definition: vfw.h:1516
#define SUCCEEDED(hr)
Definition: intsafe.h:57

◆ EditStreamCopy()

HRESULT WINAPI EditStreamCopy ( PAVISTREAM  pStream,
LONG plStart,
LONG plLength,
PAVISTREAM ppResult 
)

Definition at line 2014 of file api.c.

2016 {
2017  PAVIEDITSTREAM pEdit = NULL;
2018  HRESULT hr;
2019 
2020  TRACE("(%p,%p,%p,%p)\n", pStream, plStart, plLength, ppResult);
2021 
2022  if (pStream == NULL)
2023  return AVIERR_BADHANDLE;
2024  if (plStart == NULL || plLength == NULL || ppResult == NULL)
2025  return AVIERR_BADPARAM;
2026 
2027  *ppResult = NULL;
2028 
2029  hr = IAVIStream_QueryInterface(pStream, &IID_IAVIEditStream,(LPVOID*)&pEdit);
2030  if (SUCCEEDED(hr) && pEdit != NULL) {
2031  hr = IAVIEditStream_Copy(pEdit, plStart, plLength, ppResult);
2032 
2033  IAVIEditStream_Release(pEdit);
2034  } else
2036 
2037  return hr;
2038 }
#define IAVIEditStream_Copy(p, a, b, c)
Definition: vfw.h:1514
HRESULT hr
Definition: shlfolder.c:183
#define AVIERR_BADHANDLE
Definition: vfw.h:1750
smooth NULL
Definition: ftsmooth.c:416
#define AVIERR_BADPARAM
Definition: vfw.h:1748
#define AVIERR_UNSUPPORTED
Definition: vfw.h:1743
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77
struct IAVIEditStream * PAVIEDITSTREAM
Definition: vfw.h:41
#define IAVIStream_QueryInterface(p, a, b)
Definition: vfw.h:1175
#define IAVIEditStream_Release(p)
Definition: vfw.h:1511
#define SUCCEEDED(hr)
Definition: intsafe.h:57

◆ EditStreamCut()

HRESULT WINAPI EditStreamCut ( PAVISTREAM  pStream,
LONG plStart,
LONG plLength,
PAVISTREAM ppResult 
)

Definition at line 2043 of file api.c.

2045 {
2046  PAVIEDITSTREAM pEdit = NULL;
2047  HRESULT hr;
2048 
2049  TRACE("(%p,%p,%p,%p)\n", pStream, plStart, plLength, ppResult);
2050 
2051  if (ppResult != NULL)
2052  *ppResult = NULL;
2053  if (pStream == NULL)
2054  return AVIERR_BADHANDLE;
2055  if (plStart == NULL || plLength == NULL)
2056  return AVIERR_BADPARAM;
2057 
2058  hr = IAVIStream_QueryInterface(pStream, &IID_IAVIEditStream,(LPVOID*)&pEdit);
2059  if (SUCCEEDED(hr) && pEdit != NULL) {
2060  hr = IAVIEditStream_Cut(pEdit, plStart, plLength, ppResult);
2061 
2062  IAVIEditStream_Release(pEdit);
2063  } else
2065 
2066  return hr;
2067 }
HRESULT hr
Definition: shlfolder.c:183
#define IAVIEditStream_Cut(p, a, b, c)
Definition: vfw.h:1513
#define AVIERR_BADHANDLE
Definition: vfw.h:1750
smooth NULL
Definition: ftsmooth.c:416
#define AVIERR_BADPARAM
Definition: vfw.h:1748
#define AVIERR_UNSUPPORTED
Definition: vfw.h:1743
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77
struct IAVIEditStream * PAVIEDITSTREAM
Definition: vfw.h:41
#define IAVIStream_QueryInterface(p, a, b)
Definition: vfw.h:1175
#define IAVIEditStream_Release(p)
Definition: vfw.h:1511
#define SUCCEEDED(hr)
Definition: intsafe.h:57

◆ EditStreamPaste()

HRESULT WINAPI EditStreamPaste ( PAVISTREAM  pDest,
LONG plStart,
LONG plLength,
PAVISTREAM  pSource,
LONG  lStart,
LONG  lEnd 
)

Definition at line 2072 of file api.c.

2074 {
2075  PAVIEDITSTREAM pEdit = NULL;
2076  HRESULT hr;
2077 
2078  TRACE("(%p,%p,%p,%p,%d,%d)\n", pDest, plStart, plLength,
2079  pSource, lStart, lEnd);
2080 
2081  if (pDest == NULL || pSource == NULL)
2082  return AVIERR_BADHANDLE;
2083  if (plStart == NULL || plLength == NULL || lStart < 0)
2084  return AVIERR_BADPARAM;
2085 
2086  hr = IAVIStream_QueryInterface(pDest, &IID_IAVIEditStream,(LPVOID*)&pEdit);
2087  if (SUCCEEDED(hr) && pEdit != NULL) {
2088  hr = IAVIEditStream_Paste(pEdit, plStart, plLength, pSource, lStart, lEnd);
2089 
2090  IAVIEditStream_Release(pEdit);
2091  } else
2093 
2094  return hr;
2095 }
HRESULT hr
Definition: shlfolder.c:183
#define AVIERR_BADHANDLE
Definition: vfw.h:1750
smooth NULL
Definition: ftsmooth.c:416
#define AVIERR_BADPARAM
Definition: vfw.h:1748
#define AVIERR_UNSUPPORTED
Definition: vfw.h:1743
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:77
struct IAVIEditStream * PAVIEDITSTREAM
Definition: vfw.h:41
#define IAVIStream_QueryInterface(p, a, b)
Definition: vfw.h:1175
#define IAVIEditStream_Paste(p, a, b, c, d, e)
Definition: vfw.h:1515
#define IAVIEditStream_Release(p)
Definition: vfw.h:1511
#define SUCCEEDED(hr)
Definition: intsafe.h:57

◆ EditStreamSetInfoA()

HRESULT WINAPI EditStreamSetInfoA ( PAVISTREAM  pstream,
LPAVISTREAMINFOA  asi,
LONG  size 
)

Definition at line 2100 of file api.c.

2102 {
2103  AVISTREAMINFOW asiw;
2104 
2105  TRACE("(%p,%p,%d)\n", pstream, asi, size);
2106 
2107  if (size >= 0 && size < sizeof(AVISTREAMINFOA))
2108  return AVIERR_BADSIZE;
2109 
2110  memcpy(&asiw, asi, sizeof(asiw) - sizeof(asiw.szName));
2111  MultiByteToWideChar(CP_ACP, 0, asi->szName, -1, asiw.szName, ARRAY_SIZE(asiw.szName));
2112 
2113  return EditStreamSetInfoW(pstream, &asiw, sizeof(asiw));
2114 }
#define CP_ACP
Definition: compat.h:99
CHAR szName[64]
Definition: vfw.h:1021
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
#define AVIERR_BADSIZE
Definition: vfw.h:1749
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
HRESULT WINAPI EditStreamSetInfoW(PAVISTREAM pstream, LPAVISTREAMINFOW asi, LONG size)
Definition: api.c:2119
#define ARRAY_SIZE(a)
Definition: main.h:24
WCHAR szName[64]
Definition: avifil32.idl:46
#define MultiByteToWideChar
Definition: compat.h:100

Referenced by EditStreamSetNameA(), and test_EditStreamSetInfo().

◆ EditStreamSetInfoW()

HRESULT WINAPI EditStreamSetInfoW ( PAVISTREAM  pstream,
LPAVISTREAMINFOW  asi,
LONG  size 
)

Definition at line 2119 of file api.c.

2121 {
2122  PAVIEDITSTREAM pEdit = NULL;
2123  HRESULT hr;
2124 
2125  TRACE("(%p,%p,%d)\n", pstream, asi, size);
2126 
2127  if (size >= 0 && size < sizeof(AVISTREAMINFOA))
2128  return AVIERR_BADSIZE;
2129 
2130  hr = IAVIStream_QueryInterface(pstream, &IID_IAVIEditStream,(LPVOID*)&pEdit);
2131  if (SUCCEEDED(hr) && pEdit != NULL) {
2132  hr = IAVIEditStream_SetInfo(pEdit, asi, size);
2133 
2134  IAVIEditStream_Release(pEdit);
2135  } else
2137 
2138  return hr;
2139 }
HRESULT hr
Definition: shlfolder.c:183
smooth NULL
Definition: ftsmooth.c:416
#define AVIERR_UNSUPPORTED
Definition: vfw.h:1743
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
LONG HRESULT
Definition: typedefs.h:77
#define AVIERR_BADSIZE
Definition: vfw.h:1749
#define IAVIEditStream_SetInfo(p, a, b)
Definition: vfw.h:1517
struct IAVIEditStream * PAVIEDITSTREAM
Definition: vfw.h:41
#define IAVIStream_QueryInterface(p, a, b)
Definition: vfw.h:1175
#define IAVIEditStream_Release(p)
Definition: vfw.h:1511
#define SUCCEEDED(hr)
Definition: intsafe.h:57

Referenced by EditStreamSetInfoA(), and EditStreamSetNameW().

◆ EditStreamSetNameA()

HRESULT WINAPI EditStreamSetNameA ( PAVISTREAM  pstream,
LPCSTR  szName 
)

Definition at line 2144 of file api.c.

2145 {
2146  AVISTREAMINFOA asia;
2147  HRESULT hres;
2148 
2149  TRACE("(%p,%s)\n", pstream, debugstr_a(szName));
2150 
2151  if (pstream == NULL)
2152  return AVIERR_BADHANDLE;
2153  if (szName == NULL)
2154  return AVIERR_BADPARAM;
2155 
2156  hres = AVIStreamInfoA(pstream, &asia, sizeof(asia));
2157  if (FAILED(hres))
2158  return hres;
2159 
2160  memset(asia.szName, 0, sizeof(asia.szName));
2161  lstrcpynA(asia.szName, szName, ARRAY_SIZE(asia.szName));
2162 
2163  return EditStreamSetInfoA(pstream, &asia, sizeof(asia));
2164 }
CHAR szName[64]
Definition: vfw.h:1021
#define AVIERR_BADHANDLE
Definition: vfw.h:1750
smooth NULL
Definition: ftsmooth.c:416
#define AVIERR_BADPARAM
Definition: vfw.h:1748
HRESULT WINAPI EditStreamSetInfoA(PAVISTREAM pstream, LPAVISTREAMINFOA asi, LONG size)
Definition: api.c:2100
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
#define debugstr_a
Definition: kernel32.h:31
LONG HRESULT
Definition: typedefs.h:77
HRESULT WINAPI AVIStreamInfoA(PAVISTREAM pstream, LPAVISTREAMINFOA asi, LONG size)
Definition: api.c:496
#define ARRAY_SIZE(a)
Definition: main.h:24
#define lstrcpynA
Definition: compat.h:416
static const WCHAR szName[]
Definition: msipriv.h:1194
#define memset(x, y, z)
Definition: compat.h:39

Referenced by test_AVISaveOptions().

◆ EditStreamSetNameW()

HRESULT WINAPI EditStreamSetNameW ( PAVISTREAM  pstream,
LPCWSTR  szName 
)

Definition at line 2169 of file api.c.

2170 {
2171  AVISTREAMINFOW asiw;
2172  HRESULT hres;
2173 
2174  TRACE("(%p,%s)\n", pstream, debugstr_w(szName));
2175 
2176  if (pstream == NULL)
2177  return AVIERR_BADHANDLE;
2178  if (szName == NULL)
2179  return AVIERR_BADPARAM;
2180 
2181  hres = IAVIStream_Info(pstream, &asiw, sizeof(asiw));
2182  if (FAILED(hres))
2183  return hres;
2184 
2185  memset(asiw.szName, 0, sizeof(asiw.szName));
2186  lstrcpynW(asiw.szName, szName, ARRAY_SIZE(asiw.szName));
2187 
2188  return EditStreamSetInfoW(pstream, &asiw, sizeof(asiw));
2189 }
#define IAVIStream_Info(p, a, b)
Definition: vfw.h:1180
#define lstrcpynW
Definition: compat.h:405
#define debugstr_w
Definition: kernel32.h:32
#define AVIERR_BADHANDLE
Definition: vfw.h:1750
smooth NULL
Definition: ftsmooth.c:416
#define AVIERR_BADPARAM
Definition: vfw.h:1748
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:77
HRESULT WINAPI EditStreamSetInfoW(PAVISTREAM pstream, LPAVISTREAMINFOW asi, LONG size)
Definition: api.c:2119
#define ARRAY_SIZE(a)
Definition: main.h:24
WCHAR szName[64]
Definition: avifil32.idl:46
static const WCHAR szName[]
Definition: msipriv.h:1194
#define memset(x, y, z)
Definition: compat.h:39

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( avifile  )

Variable Documentation

◆ nCurrent

INT nCurrent

Definition at line 63 of file api.c.

◆ nStreams

◆ ppavis

PAVISTREAM* ppavis

Definition at line 61 of file api.c.

◆ ppOptions

◆ SaveOpts

◆ uFlags

Definition at line 59 of file api.c.

Referenced by CTrayBandSite::AddContextMenus(), AddMenuItem(), AppendMenuA(), AppendMenuW(), AVISaveOptions(), BrowserService_IEGetDisplayName(), CallbackEntry(), CallbackExtra(), ChildWindowFromPointEx(), ATL::CWindow::ChildWindowFromPointEx(), co_IntSendMessageTimeout(), co_IntSendMessageTimeoutSingle(), CreateIconFromResourceEx(), DECLARE_INTERFACE_(), ATL::CWindow::DeferWindowPos(), DeferWindowPos(), DefWndPrint(), DeleteMenu(), draw_diag_edge(), draw_rect_edge(), DrawCaption(), DrawCaptionTempA(), DrawCaptionTempW(), DrawThemeEdge(), DRIVER_getCallback(), DriverCallback(), ExitWindowsEx(), ExitWindowsWorker(), FileMenu_AddFilesForPidl(), FileMenu_Create(), FileMenu_InsertUsingPidl(), FileMenu_TrackPopupMenuEx(), FM_SetMenuParameter(), FormatMenuString(), get_mmioFromProfile(), CDefViewBckgrndMenu::GetCommandString(), CVfdShExt::GetCommandString(), BtrfsContextMenu::GetCommandString(), CRecycleBin::GetCommandString(), CCPLItemMenu::GetCommandString(), CRecycleBinItemContextMenu::GetCommandString(), CDefaultContextMenu::GetCommandString(), CQuickLaunchBand::GetCommandString(), CZipFolder::GetCommandString(), CFindFolderContextMenu::GetCommandString(), getDefaultIconLocation(), GetDisplayName(), CRecycleBin::GetDisplayNameOf(), CMergedFolder::GetDisplayNameOf(), CCommonFolder< CRegistryFolder, RegPidlEntry, CRegistryFolderExtractIcon >::GetDisplayNameOf(), GetFullName(), GetIcon(), CNtObjectFolderExtractIcon::GetIconLocation(), CExtractIcon::GetIconLocation(), CShellLink::GetIconLocation(), getIconLocationForFolder(), GetMenuState(), GlobalAlloc(), GlobalFlags(), GlobalReAlloc(), IEGetNameAndFlags(), IEGetNameAndFlagsEx(), ImageList_Copy(), ImageList_LoadImageA(), ImageList_LoadImageW(), InsertMenuA(), InsertMenuW(), CSendToMenu::InsertSendToItems(), IntDrawDiagEdge(), IntDrawRectEdge(), IntGetMenuState(), CDefView::ItemCount(), keylist_GetKey(), keylist_GetKey2(), keylist_RemoveAllKeys(), keylist_RemoveKey(), keylist_SetKey(), keylist_SetKey2(), LISTVIEW_GetNextItem(), CSendToMenu::LoadAllItems(), LocalAlloc(), LocalFlags(), LocalReAlloc(), LogoffShutdownThread(), MD_OnPrint(), MD_OnPrintClient(), MD_RichEdit_OnSetCharFormat(), MMIO_Flush(), MMIO_SetBuffer(), mmioAdvance(), mmioAscend(), mmioClose(), mmioCreateChunk(), mmioDescend(), mmioFlush(), mmioGetInfo(), mmioSetBuffer(), mmioSetInfo(), mmioStringToFOURCCA(), mmioStringToFOURCCW(), ModifyMenuA(), ModifyMenuW(), MyDrawCaptionTemp(), MyDrawFrameCaption(), MyDrawFrameScroll(), MyIntDrawRectEdge(), NtUserDeleteMenu(), NtUserDrawCaption(), NtUserDrawCaptionTemp(), NtUserRemoveMenu(), NtUserSetWindowPos(), CDefView::OnStateChange(), PidlToSicIndex(), CDefViewBckgrndMenu::QueryContextMenu(), COpenWithMenu::QueryContextMenu(), CBandSiteMenu::QueryContextMenu(), CVfdShExt::QueryContextMenu(), BtrfsContextMenu::QueryContextMenu(), CRecycleBin::QueryContextMenu(), CNewMenu::QueryContextMenu(), CSendToMenu::QueryContextMenu(), CRecycleBinItemContextMenu::QueryContextMenu(), CDefaultContextMenu::QueryContextMenu(), CQuickLaunchBand::QueryContextMenu(), CShellLink::QueryContextMenu(), CZipFolder::QueryContextMenu(), CFindFolderContextMenu::QueryContextMenu(), CTrayWindow::QueryContextMenu(), RealUserDrawCaption(), RemoveMenu(), ResizeWnd(), RestartDialog(), RunFileDlg(), CNewMenu::SelectNewItem(), CExtractIcon::SetFlags(), SetMenuItemBitmaps(), CUserNotification::SetUpNotifyData(), SetWindowPos(), SHAddToRecentDocs(), SHChangeNotify(), SHChangeNotifyWrap(), SHCreateLinks(), SHDefExtractIconA(), SHDefExtractIconW(), SHDefExtractIconWrapW(), Shell_MergeMenus(), SHELL_PidlGetIconLocationW(), ShellBrowser_SetToolbarItems(), SHGetFileInfoW(), SHGetNewLinkInfoA(), SHGetNewLinkInfoW(), SHGetNewLinkInfoWrapW(), ShowHideMenuCtl(), SHUpdateImageA(), SHUpdateImageW(), sndPlaySoundA(), sndPlaySoundW(), test_browse_pidl_(), test_browse_pidl_sb_(), test_pack_MIDL_STUB_MESSAGE(), test_pack_NOTIFYICONDATAA(), test_pack_NOTIFYICONDATAW(), test_pack_TBINFO(), TestGlobalDiscard(), TestGlobalFlagsFixed(), TestGlobalFlagsMoveable(), ToAscii(), ToAsciiEx(), TOOLTIPS_CalcTipSize(), TOOLTIPS_customdraw_fill(), TOOLTIPS_Refresh(), TreeListEditLabel(), TreeListGetItemRect(), TreeListGetNextItem(), UITOOLS95_DFC_ButtonCheckRadio(), UITOOLS95_DFC_ButtonPush(), UITOOLS95_DrawFrameCaption(), UITOOLS95_DrawFrameMenu(), UITOOLS95_DrawFrameScroll(), unz64local_CheckCurrentFileCoherencyHeader(), UpdateToolTip(), UserDrawCaption(), and UserDrawCaptionText().