aboutsummaryrefslogtreecommitdiff
path: root/Src/libvp6/include/VP6VFWState.hpp
blob: 6ee9d1caa6a76fe9806250ce758930510a58decf (plain) (blame)
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
//------------------------------------------------------------------------------
//
//  Copyright (c) 1999-2003  On2 Technologies Inc.  All Rights Reserved.
//
//------------------------------------------------------------------------------
//
//  $Workfile: VP6VFWState.hpp$
//  $Date: 2010/07/23 19:10:48 $
//  $Revision: 1.1 $
//
//------------------------------------------------------------------------------

#if !defined(VP6VFWSTATE_HPP)
#define VP6VFWSTATE_HPP

#include "FourCC.hpp"
#include <iosfwd>

namespace on2vp
{

    //--------------------------------------
    class VP6VFWState
    {
        friend std::ostream& operator<<(std::ostream& os, const VP6VFWState& vfws);

    public:

        enum Mode
        {
            M_Setting,
            M_Config
        };

        enum
        {
            HeaderSize = 8
        };

        enum
        {
            ConfigUsed = 1724
        };

        struct VPConfig
        {
            unsigned int Used;
            int Width;
            int Height;
            int TargetBitRate;
            int Quality;
            int RateNum;
            int RateDenom;
            int KeyFrameFrequency;
            int KeyFrameDataTarget;
            int AutoKeyFrameEnabled;
            int AutoKeyFrameThreshold;
            int MinimumDistanceToKeyFrame;
            int ForceKeyFrameEvery;
            int NoiseSensitivity;
            int AllowDF;
            int AllowSpatialResampling;
            int HScale;
            int HRatio;
            int VScale;
            int VRatio;
            int ScalingMode;
            int QuickCompress;
            int Speed;
            int Interlaced;
            int FixedQ;
            int StartingBufferLevel;
            int OptimalBufferLevel;
            int DropFramesWaterMark;
            int ResampleDownWaterMark;
            int ResampleUpWaterMark;
            int OutputFrameRate;
            int ErrorResilientMode;
            int Profile;
            int DisableGolden;
            int VBMode;
            int BestAllowedQ;
            int UnderShootPct;
            int MaxAllowedDatarate;
            int MaximumBufferSize;
            int TwoPassVBREnabled;
            int TwoPassVBRBias;
            int TwoPassVBRMaxSection;
            int TwoPassVBRMinSection;
            int Pass;
            int Mode;
            int EndUsage;
            int Sharpness;
            char FirstPassFile[512];
            char SettingsFile[512];
            char RootDirectory[512];

            char Reserved[2048 - ConfigUsed];

            VPConfig() :
                Used(ConfigUsed)
            {
            }
        };

        VP6VFWState(FourCC fcc);
        ~VP6VFWState();

        FourCC fcc() const;
        Mode mode() const;

        static size_t nominalSize();

        VPConfig& vpConfig();

        size_t vpStateSize() const;
        const void* vpState() const;
        void vpState(const void* pVPState, size_t sizeVPState);

        size_t size() const;
        const void* data() const;
        int data(const void* pData, size_t sizeData);

    private:

        VP6VFWState(const VP6VFWState& vfws);  //  Not implemented
        VP6VFWState& operator=(const VP6VFWState& vfws);  //  Not implemented

        int extract_(const void* pData, size_t sizeData);
        void update_(const void* pVPState, size_t sizeVPState) const;

        FourCC m_fcc;
        Mode m_mode;

        VPConfig m_vpConfig;

        mutable void* m_pData;
        mutable size_t m_sizeData;
    };

}  //  namespace on2vp

#endif  //  VP6VFWSTATE_HPP