source: trunk/Utilities/Miscellaneous/VideoResizerDsp01/VideoResizerDsp01.cpp @ 227

Last change on this file since 227 was 227, checked in by roman, 9 years ago
File size: 4.0 KB
Line 
1////////////////////////////////////////////////////////////
2// Copyright (C) Roman Ryltsov, 2013
3// Created by Roman Ryltsov roman@alax.info
4//
5// NOTE: This is to demonstrate the bug
6//       Video Resizer DSP's IMediaObject::SetOutputType returns E_POINTER when it is not supposed to
7//       http://connect.microsoft.com/VisualStudio/feedback/details/812418/video-resizer-dsps-imediaobject-setoutputtype-returns-e-pointer-when-it-is-not-supposed-to
8
9#include "stdafx.h"
10#include <windows.h>
11#include <dshow.h>
12#include <dmo.h>
13#include <wmcodecdsp.h>
14#include <atlcom.h>
15
16#pragma comment(lib, "strmiids.lib")
17#pragma comment(lib, "wmcodecdspuuid.lib")
18
19int _tmain(int argc, _TCHAR* argv[])
20{
21        CoInitialize(NULL);
22        {
23                CComPtr<IMediaObject> pMediaObject;
24                ATLENSURE_SUCCEEDED(pMediaObject.CoCreateInstance(CLSID_CResizerDMO));
25                #pragma region Input
26                DMO_MEDIA_TYPE InputMediaType;
27                ZeroMemory(&InputMediaType, sizeof InputMediaType);
28                InputMediaType.majortype = MEDIATYPE_Video;
29                InputMediaType.subtype = MEDIASUBTYPE_YV12;
30                InputMediaType.bFixedSizeSamples = TRUE;
31                InputMediaType.bTemporalCompression = FALSE;
32                VIDEOINFOHEADER InputVideoInfoHeader;
33                ZeroMemory(&InputVideoInfoHeader, sizeof InputVideoInfoHeader);
34                BITMAPINFOHEADER& InputBitmapInfoHeader = InputVideoInfoHeader.bmiHeader;
35        InputBitmapInfoHeader.biSize = sizeof InputBitmapInfoHeader;
36        InputBitmapInfoHeader.biWidth = 1920;
37        InputBitmapInfoHeader.biHeight = 1080;
38        InputBitmapInfoHeader.biPlanes = 1;
39        InputBitmapInfoHeader.biBitCount = 12;
40                InputBitmapInfoHeader.biCompression = InputMediaType.subtype.Data1;
41        InputBitmapInfoHeader.biSizeImage = InputBitmapInfoHeader.biHeight * InputBitmapInfoHeader.biWidth * InputBitmapInfoHeader.biBitCount / 8;
42                InputMediaType.lSampleSize = InputBitmapInfoHeader.biSizeImage;
43                InputMediaType.formattype = FORMAT_VideoInfo;
44                InputMediaType.cbFormat = sizeof InputVideoInfoHeader;
45                InputMediaType.pbFormat = (BYTE*) &InputVideoInfoHeader;
46                const HRESULT nSetInputTypeResult = pMediaObject->SetInputType(0, &InputMediaType, 0);
47                _tprintf(_T("nSetInputTypeResult 0x%08x\n"), nSetInputTypeResult);
48                #pragma endregion
49                #pragma region Output
50                DMO_MEDIA_TYPE OutputMediaType;
51                ZeroMemory(&OutputMediaType, sizeof OutputMediaType);
52                OutputMediaType.majortype = MEDIATYPE_Video;
53                OutputMediaType.subtype = InputMediaType.subtype;
54                OutputMediaType.bFixedSizeSamples = TRUE;
55                OutputMediaType.bTemporalCompression = FALSE;
56                VIDEOINFOHEADER OutputVideoInfoHeader;
57                ZeroMemory(&OutputVideoInfoHeader, sizeof OutputVideoInfoHeader);
58                BITMAPINFOHEADER& OutputBitmapInfoHeader = OutputVideoInfoHeader.bmiHeader;
59        OutputBitmapInfoHeader.biSize = sizeof OutputBitmapInfoHeader;
60        OutputBitmapInfoHeader.biWidth = 1280;
61        OutputBitmapInfoHeader.biHeight = 720;
62        OutputBitmapInfoHeader.biPlanes = 1;
63        OutputBitmapInfoHeader.biBitCount = InputBitmapInfoHeader.biBitCount;
64                OutputBitmapInfoHeader.biCompression = OutputMediaType.subtype.Data1;
65        OutputBitmapInfoHeader.biSizeImage = OutputBitmapInfoHeader.biHeight * OutputBitmapInfoHeader.biWidth * OutputBitmapInfoHeader.biBitCount / 8;
66                OutputMediaType.lSampleSize = OutputBitmapInfoHeader.biSizeImage;
67                OutputMediaType.formattype = FORMAT_VideoInfo;
68                OutputMediaType.cbFormat = sizeof OutputVideoInfoHeader;
69                OutputMediaType.pbFormat = (BYTE*) &OutputVideoInfoHeader;
70                const HRESULT nSetOutputTypeResult = pMediaObject->SetOutputType(0, &OutputMediaType, 0);
71                _tprintf(_T("nSetOutputTypeResult 0x%08x\n"), nSetOutputTypeResult);
72                #pragma endregion
73                const HRESULT nResetInputTypeResult = pMediaObject->SetInputType(0, NULL, DMO_SET_TYPEF_CLEAR);
74                const HRESULT nResetOutputTypeResult = pMediaObject->SetOutputType(0, NULL, DMO_SET_TYPEF_CLEAR);
75                _tprintf(_T("nResetInputTypeResult 0x%08x, nResetOutputTypeResult 0x%08x\n"), nResetInputTypeResult, nResetOutputTypeResult);
76        }
77        CoUninitialize();
78        return 0;
79}
80
Note: See TracBrowser for help on using the repository browser.