1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
#pragma once
#ifndef SIMPLE_FRAME_GENERATOR_H
#define SIMPLE_FRAME_GENERATOR_H
class SimpleFrameGenerator
{
public:
SimpleFrameGenerator() = default;
~SimpleFrameGenerator() {};
HRESULT Initialize(_In_ IMFMediaType* pMediaType);
HRESULT CreateFrame(
_Inout_updates_bytes_(len) BYTE* pBuf,
_In_ DWORD len,
_In_ LONG pitch,
_In_ ULONG rgbMask);
// pixel format converter
static void RGB24ToYUY2(int R, int G, int B, BYTE* pY, BYTE* pU, BYTE* pV);
static void RGB24ToY(int R, int G, int B, BYTE* pY);
static void RGB32ToNV12(BYTE RGB1[8], BYTE RGB2[8], BYTE* pY1, BYTE* pY2, BYTE* pUV);
static HRESULT RGB32ToNV12Frame(_Inout_updates_bytes_(len) BYTE* pbBuff, ULONG cbBuff, long stride, UINT width, UINT height, BYTE* pbBuffOut, ULONG cbBuffOut, long strideOut);
private:
HRESULT _CreateRGB32Frame(
_Inout_updates_bytes_(len) BYTE* pBuf,
_In_ DWORD len,
_In_ LONG pitch,
_In_ DWORD width,
_In_ DWORD height,
_In_ ULONG rgbMask);
UINT32 m_width = 0;
UINT32 m_height = 0;
GUID m_subType = GUID_NULL;
};
#endif
|