summaryrefslogtreecommitdiff
path: root/avstream/avscamera/sys/ExtendedMetadata.h
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.
    }

};