source: trunk/Utilities/MediaFoundation/VideoCaptureSynchronous/VideoCaptureSynchronous.cpp

Last change on this file was 801, checked in by roman, 7 months ago
  • Property svn:mime-type set to application/octet-stream
File size: 4.2 KB
Line 
1#include <winsdkver.h>
2#include <sdkddkver.h>
3#include <stdio.h>
4#include <tchar.h>
5#include <mfapi.h>
6#include <mfidl.h>
7#include <mfreadwrite.h>
8#include <atlbase.h>
9#include <atlcom.h>
10
11#pragma comment(lib, "mfplat.lib")
12#pragma comment(lib, "mf.lib")
13#pragma comment(lib, "mfreadwrite.lib")
14
15#define __C ATLENSURE_SUCCEEDED
16#define __D ATLENSURE_THROW
17
18static UINT32 g_nIndex = 0;
19
20int main()
21{
22        __C(MFStartup(MF_VERSION));
23        {
24                CComPtr<IMFMediaSource> pMediaSource;
25                {
26                        CComPtr<IMFAttributes> pAttributes;
27                        __C(MFCreateAttributes(&pAttributes, 1));
28                        __C(pAttributes->SetGUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE, MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID));
29                        CComHeapPtr<IMFActivate*> ppActivates;
30                        UINT32 nActivateCount = 0;
31                        __C(MFEnumDeviceSources(pAttributes, &ppActivates, &nActivateCount));
32                        __D(g_nIndex < nActivateCount, E_INVALIDARG);
33                        const CComPtr<IMFActivate> pActivate = ppActivates[g_nIndex];
34                        for(UINT32 nIndex = 0; nIndex < nActivateCount; nIndex++)
35                                reinterpret_cast<CComPtr<IMFActivate>&>(ppActivates[nIndex]).Release();
36                        __C(pActivate->ActivateObject(__uuidof(IMFMediaSource), (VOID**) &pMediaSource));
37                        CComHeapPtr<WCHAR> pszFriendlyName;
38                        __C(pActivate->GetAllocatedString(MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME, &pszFriendlyName, NULL));
39                        _tprintf(_T("Friendly Name: %ls\n"), (LPCWSTR) pszFriendlyName);
40                }
41                CComPtr<IMFSourceReader> pSourceReader;
42                __C(MFCreateSourceReaderFromMediaSource(pMediaSource, NULL, &pSourceReader));
43                LONGLONG nBaseTime = 0;
44                for(; ; )
45                {
46                        DWORD nStreamIndex;
47                        DWORD nStreamFlags;
48                        LONGLONG nTime;
49                        CComPtr<IMFSample> pSample;
50                        __C(pSourceReader->ReadSample(MF_SOURCE_READER_ANY_STREAM, 0, &nStreamIndex, &nStreamFlags, &nTime, &pSample));
51                        nTime -= nBaseTime;
52                        _tprintf(_T("nStreamIndex %d, nStreamFlags 0x%X, nTime %.3f, pSample 0x%p\n"), nStreamIndex, nStreamFlags, nTime / 1E7, (IMFSample*) pSample);
53                        if(nStreamIndex == 0 && (nStreamFlags & MF_SOURCE_READERF_STREAMTICK))
54                        {
55                                ATLASSERT(!pSample);
56                                nBaseTime = nTime;
57                                continue;
58                        }
59                }
60        }
61        __C(MFShutdown());
62    return 0;
63}
64
Note: See TracBrowser for help on using the repository browser.