This example will retrieve the source file properties and show them in message boxes.
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include "ltmm.h"
#include "prsht.h"
#if defined(_UNICODE)
LPOLESTR T2OLE(LPCTSTR lpt)
{
return (LPOLESTR) lpt;
}
LPTSTR OLE2T(LPCOLESTR lpw)
{
return (LPTSTR) lpw;
}
#else
LPOLESTR T2OLE(LPCTSTR lpt)
{
static OLECHAR lpw[512];
if(!lpt)
return NULL;
lpw[0] = L'\0';
MultiByteToWideChar(CP_ACP, 0, lpt, -1, lpw, 512);
return lpw;
}
LPTSTR OLE2T(LPCOLESTR lpw)
{
static TCHAR lpt[512];
if(!lpw)
return NULL;
lpt[0] = _T('\0');
WideCharToMultiByte(CP_ACP, 0, lpw, -1, lpt, 512, NULL, NULL);
return lpt;
}
#endif
void AddStringToMsg(char *pszTitle, BSTR sString, char *pszMsg);
void AddNumberToMsg(char *pszTitle, double dNumber, char *pszMsg, BOOL bFloat);
int RetrievingMediaFileInformation_Example ( )
{
IltmmMediaInfo *pMediaInfo;
BSTR sString;
char szMsg[8196];
long lStreams, lIndex, l;
double d;
HRESULT hr;
CoInitialize(NULL);
/* create an ltmmMediaInfo object: */
hr = CoCreateInstance(&CLSID_ltmmMediaInfo, NULL,
CLSCTX_INPROC_SERVER, &IID_IltmmMediaInfo,
(void**) &pMediaInfo);
memset(szMsg, 0, 8196);
/* set the source file: */
sString = SysAllocString((OLECHAR*)MAKE_MEDIA_PATH("Test.avi"));
IltmmMediaInfo_put_SourceFile(pMediaInfo, sString);
SysFreeString(sString);
/* general properties: */
IltmmMediaInfo_get_SourceFile(pMediaInfo, &sString);
AddStringToMsg("Source file: ", sString, szMsg);
SysFreeString(sString);
IltmmMediaInfo_get_SourceFileSize(pMediaInfo, &d);
AddNumberToMsg("File size: ", d, szMsg, FALSE);
IltmmMediaInfo_get_OutputStreams(pMediaInfo, &lStreams);
AddNumberToMsg("Number of streams: ", (double)lStreams, szMsg, FALSE);
IltmmMediaInfo_get_SourceDuration(pMediaInfo, &d);
AddNumberToMsg("File duration: ", d, szMsg, TRUE);
IltmmMediaInfo_get_SourceBitRate(pMediaInfo, &l);
AddNumberToMsg("Source BitRate : ", (double)l, szMsg, FALSE);
IltmmMediaInfo_get_SourceFormat(pMediaInfo, &l);
AddNumberToMsg("Source format: ", (double)l, szMsg, FALSE);
IltmmMediaInfo_get_SourceFormatName(pMediaInfo, &sString);
AddStringToMsg("Source format name: ", sString, szMsg);
SysFreeString(sString);
IltmmMediaInfo_get_SourceFilterClassID(pMediaInfo, &sString);
AddStringToMsg("Source filter CLSID: ", sString, szMsg);
SysFreeString(sString);
IltmmMediaInfo_get_SourceFilterName(pMediaInfo, &sString);
AddStringToMsg("Source filter name: ", sString, szMsg);
SysFreeString(sString);
IltmmMediaInfo_get_Title(pMediaInfo, &sString);
AddStringToMsg("Title: ", sString, szMsg);
SysFreeString(sString);
IltmmMediaInfo_get_Author(pMediaInfo, &sString);
AddStringToMsg("Author: ", sString, szMsg);
SysFreeString(sString);
IltmmMediaInfo_get_Description(pMediaInfo, &sString);
AddStringToMsg("Description: ", sString, szMsg);
SysFreeString(sString);
IltmmMediaInfo_get_Rating(pMediaInfo, &sString);
AddStringToMsg("Rating: ", sString, szMsg);
SysFreeString(sString);
IltmmMediaInfo_get_Copyright(pMediaInfo, &sString);
AddStringToMsg("Copyright: ", sString, szMsg);
SysFreeString(sString);
MessageBox(0, szMsg, "MediaInfo Sample: General...", 0);
/* stream properties: */
for( lIndex=0; lIndex<lStreams; lIndex++ )
{
memset(szMsg, 0, 8196);
IltmmMediaInfo_put_CurrentStream(pMediaInfo, lIndex);
IltmmMediaInfo_get_CurrentStream(pMediaInfo, &l);
AddNumberToMsg("Stream number: ", (double)l, szMsg, FALSE);
IltmmMediaInfo_get_StreamType(pMediaInfo, &sString);
AddStringToMsg("Stream type: ", sString, szMsg);
SysFreeString(sString);
IltmmMediaInfo_get_StreamTypeName(pMediaInfo, &sString);
AddStringToMsg("Stream type name: ", sString, szMsg);
SysFreeString(sString);
IltmmMediaInfo_get_StreamSubtype(pMediaInfo, &sString);
AddStringToMsg("Stream subtype: ", sString, szMsg);
SysFreeString(sString);
IltmmMediaInfo_get_StreamSubtypeName(pMediaInfo, &sString);
AddStringToMsg("Stream subtype name: ", sString, szMsg);
SysFreeString(sString);
IltmmMediaInfo_get_StreamDuration(pMediaInfo, &d);
AddNumberToMsg("Stream duration: ", d, szMsg, TRUE);
/* video specific */
strcat(szMsg, "\n");
strcat(szMsg, "\t*** Video specific properties ***\n");
IltmmMediaInfo_get_VideoFrameRate(pMediaInfo, &d);
AddNumberToMsg("Video frame rate: ", d, szMsg, TRUE);
IltmmMediaInfo_get_VideoWidth(pMediaInfo, &l);
AddNumberToMsg("Video width: ", (double)l, szMsg, FALSE);
IltmmMediaInfo_get_VideoHeight(pMediaInfo, &l);
AddNumberToMsg("Video height: ", (double)l, szMsg, FALSE);
IltmmMediaInfo_get_VideoBitCount(pMediaInfo, &l);
AddNumberToMsg("Video bit count: ", (double)l, szMsg, FALSE);
IltmmMediaInfo_get_VideoCompression(pMediaInfo, &l);
AddNumberToMsg("Video compression: ", (double)l, szMsg, FALSE);
IltmmMediaInfo_get_VideoBitRate(pMediaInfo, &l);
AddNumberToMsg("Video bit rate: ", (double)l, szMsg, FALSE);
IltmmMediaInfo_get_VideoFrames(pMediaInfo, &l);
AddNumberToMsg("Video frames count: ", (double)l, szMsg, FALSE);
/* Audio specific */
strcat(szMsg, "\n");
strcat(szMsg, "\t*** Audio specific properties ***\n");
IltmmMediaInfo_get_AudioFormatTag(pMediaInfo, &l);
AddNumberToMsg("Audio format tag: ", (double)l, szMsg, FALSE);
IltmmMediaInfo_get_AudioChannels(pMediaInfo, &l);
AddNumberToMsg("Audio channels: ", (double)l, szMsg, FALSE);
IltmmMediaInfo_get_AudioSamplesPerSec(pMediaInfo, &l);
AddNumberToMsg("Audio frequency: ", (double)l, szMsg, FALSE);
IltmmMediaInfo_get_AudioBitsPerSample(pMediaInfo, &l);
AddNumberToMsg("Audio sample size: ", (double)l, szMsg, FALSE);
IltmmMediaInfo_get_AudioAvgBytesPerSec(pMediaInfo, &l);
AddNumberToMsg("Audio average bytes per second: ", (double)l, szMsg, FALSE);
MessageBox(0, szMsg, "MediaInfo Sample: Streams...", 0);
}
IltmmMediaInfo_ResetSource(pMediaInfo);
IltmmMediaInfo_Release(pMediaInfo);
return 0;
}
void AddStringToMsg(char *pszTitle, BSTR sString, char *pszMsg)
{
strcat(pszMsg, pszTitle);
if( sString )
strcat(pszMsg, OLE2T(sString));
else
strcat(pszMsg, "NA");
strcat(pszMsg, " \n");
}
void AddNumberToMsg(char *pszTitle, double dNumber, char *pszMsg, BOOL bFloat)
{
char szNumber[64];
if( bFloat )
sprintf(szNumber, "%f", dNumber);
else
sprintf(szNumber, "%.f", dNumber);
strcat(pszMsg, pszTitle);
strcat(pszMsg, szNumber);
strcat(pszMsg, " \n");
}
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document