blob: 27ef4a797b29589a44dc0ac315ce1d3919751bd2 (
plain)
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
/**************************************************************************
A/V Stream Camera Sample
Copyright (c) 2014, Microsoft Corporation.
File:
ExtendedMetadata.h
Abstract:
This file contains the helper class CExtendedMetadata.
The class is provides initialization and accessor functions for
KSCAMERA_EXTENDEDPROP_METADATAINFO.
History:
created 6/20/2014
**************************************************************************/
//
// Helper class for Extended Metadata.
//
class CExtendedMetadata
: public CExtendedHeader
{
public:
KSCAMERA_EXTENDEDPROP_METADATAINFO m_Info;
// Maximum metadata required ... except for Histogram
static const ULONG METADATA_MAX=4096;
// Standardized ctors to help ensure a consistant definition.
CExtendedMetadata(
_In_ ULONG pinId=0, // Just so we have a default ctor.
_In_ ULONG size=METADATA_MAX,
_In_ ULONG align=KSCAMERA_EXTENDEDPROP_MetadataAlignment_32,
_In_ ULONGLONG flags=(KSCAMERA_EXTENDEDPROP_METADATA_ALIGNMENTREQUIRED | KSCAMERA_EXTENDEDPROP_METADATA_SYSTEMMEMORY),
_In_ ULONG result=STATUS_SUCCESS
)
: CExtendedHeader( flags, result )
{
PinId = pinId;
Size = sizeof(*this);
m_Info.BufferAlignment = align;
m_Info.MaxMetadataBufferSize= size;
}
// Used to modify the metadata allocation size.
CExtendedMetadata &
operator =( ULONG x )
{
m_Info.MaxMetadataBufferSize = x;
return *this;
}
bool isValid()
{
return CExtendedHeader::isValid() &&
(Size == sizeof(*this)) &&
((Flags & ~(KSCAMERA_EXTENDEDPROP_METADATA_SYSTEMMEMORY | KSCAMERA_EXTENDEDPROP_METADATA_ALIGNMENTREQUIRED)) == 0) && // Only valid flags
((m_Info.BufferAlignment-1) & m_Info.BufferAlignment); // Not more than 1 bit set.
}
};
|