File: avc_headers.h

package info (click to toggle)
libvpl-tools 1.4.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,652 kB
  • sloc: cpp: 107,469; python: 4,303; ansic: 3,202; sh: 159; lisp: 52; makefile: 13
file content (122 lines) | stat: -rw-r--r-- 2,668 bytes parent folder | download | duplicates (2)
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/*############################################################################
  # Copyright (C) 2005 Intel Corporation
  #
  # SPDX-License-Identifier: MIT
  ############################################################################*/

#ifndef __AVC_HEADERS_H
#define __AVC_HEADERS_H

#include <vector>
#include "avc_structures.h"

namespace ProtectedLibrary {

template <typename T>
class HeaderSet {
public:
    HeaderSet() : m_header(), m_currentID(-1) {}

    ~HeaderSet() {
        Reset();
    }

    void AddHeader(T* hdr) {
        mfxU32 id = hdr->GetID();
        if (id >= m_header.size()) {
            m_header.resize(id + 1);
        }

        delete m_header[id];

        m_header[id]    = new T();
        *(m_header[id]) = *hdr;
    }

    T* GetHeader(mfxU32 id) {
        if (id >= m_header.size())
            return 0;

        return m_header[id];
    }

    void RemoveHeader(mfxU32 id) {
        if (id >= m_header.size())
            return;

        delete m_header[id];
        m_header[id] = 0;
    }

    void RemoveHeader(T* hdr) {
        if (!hdr)
            return;

        RemoveHeader(hdr->GetID());
    }

    const T* GetHeader(mfxU32 id) const {
        if (id >= m_header.size())
            return 0;

        return m_header[id];
    }

    void Reset() {
        for (mfxU32 i = 0; i < m_header.size(); i++) {
            delete m_header[i];
            m_header[i] = 0;
        }
    }

    void SetCurrentID(mfxU32 id) {
        m_currentID = id;
    }

    mfxI32 GetCurrrentID() const {
        return m_currentID;
    }

    T* GetCurrentHeader() {
        if (m_currentID == -1)
            return 0;

        return GetHeader(m_currentID);
    }

    const T* GetCurrentHeader() const {
        if (m_currentID == -1)
            return 0;

        return GetHeader(m_currentID);
    }

private:
    std::vector<T*> m_header;
    mfxI32 m_currentID;
};

/****************************************************************************************************/
// Headers stuff
/****************************************************************************************************/
class AVCHeaders {
public:
    void Reset() {
        m_SeqParams.Reset();
        m_SeqExParams.Reset();
        m_SeqParamsMvcExt.Reset();
        m_PicParams.Reset();
        m_SEIParams.Reset();
    }

    HeaderSet<AVCSeqParamSet> m_SeqParams;
    HeaderSet<AVCSeqParamSetExtension> m_SeqExParams;
    HeaderSet<AVCSeqParamSet> m_SeqParamsMvcExt;
    HeaderSet<AVCPicParamSet> m_PicParams;
    HeaderSet<AVCSEIPayLoad> m_SEIParams;
    AVCNalExtension m_nalExtension;
};

} //namespace ProtectedLibrary

#endif // __AVC_HEADERS_H