IltmmCapture::get_TargetStream Example for C
// This function will write the contents of the target
// data for the passed capture object to a disk file
void WriteTargetMemory(const char *lpszFileName, IltmmCapture* pCapture)
{
HANDLE hFile = NULL;
long fl = 0;
unsigned long lBytesWritten;
IltmmMemory *pTarget = NULL;
VARIANT varData;
unsigned char *pBuffer = NULL;
SAFEARRAY sa;
// write the data to a file
hFile = CreateFile(lpszFileName, // open file name
GENERIC_WRITE, // open for writing
FILE_SHARE_READ, // share for reading
NULL, // no security
CREATE_ALWAYS, // re-create the file
FILE_ATTRIBUTE_NORMAL, // normal file
NULL); // no attr. template
if (hFile == INVALID_HANDLE_VALUE)
{
return;
}
IltmmCapture__get_TargetStream(pCapture, (IUnknown**)&pTarget);
if(!pTarget)
return;
IltmmMemory__get_BufferSize(pTarget, &fl);
VariantInit(&varData);
// pass data
memset(&sa, 0, sizeof(sa));
sa.cbElements = sizeof(unsigned char);
sa.cDims = 1;
sa.fFeatures = (FADF_AUTO | FADF_FIXEDSIZE);
sa.pvData = (UCHAR*) malloc(sizeof(UCHAR)*fl);
sa.rgsabound[0].cElements = fl;
V_VT(&varData) = (VT_ARRAY | VT_UI1);
V_ARRAY(&varData) = &sa;
IltmmMemory_CopyData(pTarget, 0, fl, &varData);
SafeArrayAccessData(V_ARRAY(&varData), (void**)&pBuffer);
WriteFile(hFile, pBuffer, fl, &lBytesWritten, NULL);
SafeArrayUnaccessData(V_ARRAY(&varData));
VariantClear(&varData);
CloseHandle(hFile);
IltmmMemory_Release(pTarget);
}
This function will write the contents of the target data for the passed capture object to a disk file.
L_MULTIMEDIATEX_API void IltmmCapture_get_TargetStream_Example (const char *lpszFileName, IltmmCapture* pCapture) { HANDLE hFile = NULL; long fl = 0; unsigned long lBytesWritten; IltmmMemory *pTarget = NULL; VARIANT varData; unsigned char *pBuffer = NULL; SAFEARRAY sa; // write the data to a file hFile = CreateFile(lpszFileName, // open file name GENERIC_WRITE, // open for writing FILE_SHARE_READ, // share for reading NULL, // no security CREATE_ALWAYS, // re-create the file FILE_ATTRIBUTE_NORMAL, // normal file NULL); // no attr. template if (hFile == INVALID_HANDLE_VALUE) { return; } IltmmCapture_get_TargetStream(pCapture, (IUnknown**)&pTarget); if(!pTarget) return; IltmmMemory_get_BufferSize(pTarget, &fl); VariantInit(&varData); // pass data memset(&sa, 0, sizeof(sa)); sa.cbElements = sizeof(unsigned char); sa.cDims = 1; sa.fFeatures = (FADF_AUTO | FADF_FIXEDSIZE); sa.pvData = (UCHAR*) malloc(sizeof(UCHAR)*fl); sa.rgsabound[0].cElements = fl; V_VT(&varData) = (VT_ARRAY | VT_UI1); V_ARRAY(&varData) = &sa; IltmmMemory_CopyData(pTarget, 0, fl, &varData); SafeArrayAccessData(V_ARRAY(&varData), (void**)&pBuffer); WriteFile(hFile, pBuffer, fl, &lBytesWritten, NULL); SafeArrayUnaccessData(V_ARRAY(&varData)); VariantClear(&varData); CloseHandle(hFile); IltmmMemory_Release(pTarget); }