diff options
Diffstat (limited to 'Src/libvp6/include/vp60')
-rw-r--r-- | Src/libvp6/include/vp60/comp_interface.h | 55 | ||||
-rw-r--r-- | Src/libvp6/include/vp60/vfw_pb_interface.h | 62 | ||||
-rw-r--r-- | Src/libvp6/include/vp60/vp60_comp_interface.h | 211 |
3 files changed, 328 insertions, 0 deletions
diff --git a/Src/libvp6/include/vp60/comp_interface.h b/Src/libvp6/include/vp60/comp_interface.h new file mode 100644 index 00000000..add9a5c9 --- /dev/null +++ b/Src/libvp6/include/vp60/comp_interface.h @@ -0,0 +1,55 @@ +/**************************************************************************** +* +* Module Title : comp_interface.h +* +* Description : Interface to video codec demo compressor DLL +* +****************************************************************************/ +#ifndef __INC_COMP_INTERFACE_H +#define __INC_COMP_INTERFACE_H + +/**************************************************************************** +* Include Files +****************************************************************************/ +#include "type_aliases.h" +#include "codec_common_interface.h" +#include "vp60_comp_interface.h" + +/**************************************************************************** +* Macros +****************************************************************************/ +// C4514 Unreferenced inline function has been removed +#ifdef _MSC_VER +#pragma warning(disable: 4514) +#endif +/**************************************************************************** +* Typedefs +****************************************************************************/ +typedef struct CP_INSTANCE * xCP_INST; + +/**************************************************************************** +* Exports +****************************************************************************/ +#ifdef __cplusplus +extern "C" +{ +#endif + +extern BOOL CCONV StartEncoder ( xCP_INST *cpi, COMP_CONFIG_VP6 *CompConfig ); +extern void CCONV ChangeCompressorSetting ( xCP_INST cpi, C_SETTING Setting, int Value ); +extern void CCONV ChangeEncoderConfig ( xCP_INST cpi, COMP_CONFIG_VP6 *CompConfig ); +extern UINT32 CCONV EncodeFrame ( xCP_INST cpi, unsigned char *InBmpIPtr, unsigned char *InBmpPtr, unsigned char *OutPutPtr, unsigned int *is_key ); +extern UINT32 CCONV EncodeFrameYuv ( xCP_INST cpi, YUV_INPUT_BUFFER_CONFIG *YuvInputData, unsigned char *OutPutPtr, unsigned int *is_key ); +extern BOOL CCONV StopEncoder ( xCP_INST *cpi ); +extern void VPEInitLibrary ( void ); +extern void VPEDeInitLibrary ( void ); +extern const char *CCONV VP50E_GetVersionNumber ( void ); +extern UINT32 CCONV VPGetState ( xCP_INST cpi, void *ret ); +extern void CCONV VPSetState ( xCP_INST cpi, void *ret ); +extern int CCONV VPGetPB ( xCP_INST cpi ); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Src/libvp6/include/vp60/vfw_pb_interface.h b/Src/libvp6/include/vp60/vfw_pb_interface.h new file mode 100644 index 00000000..2ce80155 --- /dev/null +++ b/Src/libvp6/include/vp60/vfw_pb_interface.h @@ -0,0 +1,62 @@ +/**************************************************************************** +* +* Module Title : vfw_pb_interface.h +* +* Description : Codec interface specification header file. +* +****************************************************************************/ +#ifndef __INC_VFW_PB_INTERFACE +#define __INC_VFW_PB_INTERFACE + +/**************************************************************************** +* Header Files +****************************************************************************/ +#include "codec_common_interface.h" +#include "type_aliases.h" +#ifdef __GNUC__ +#include <inttypes.h> +#elif defined(_WIN32) +#include <stddef.h> +#endif +/**************************************************************************** +* Typedefs +****************************************************************************/ +typedef struct PB_INSTANCE * xPB_INST; + +// Settings Control +typedef enum +{ + PBC_SET_POSTPROC, + PBC_SET_CPUFREE, + PBC_MAX_PARAM, + PBC_SET_TESTMODE, + PBC_SET_PBSTRUCT, + PBC_SET_BLACKCLAMP, + PBC_SET_WHITECLAMP, + PBC_SET_REFERENCEFRAME, + PBC_SET_DEINTERLACEMODE, + PBC_SET_ADDNOISE + +} PB_COMMAND_TYPE; + +/**************************************************************************** +* Exports +****************************************************************************/ +#ifdef __cplusplus +extern "C" +{ +#endif + +extern BOOL CCONV VP6_StartDecoder ( xPB_INST *pbi, UINT32 ImageWidth, UINT32 ImageHeight ); +extern void CCONV VP6_GetPbParam ( xPB_INST, PB_COMMAND_TYPE Command, UINT32 *Parameter ); +extern void CCONV VP6_SetPbParam ( xPB_INST, PB_COMMAND_TYPE Command, uintptr_t Parameter ); +extern void CCONV VP6_GetYUVConfig ( xPB_INST, YUV_BUFFER_CONFIG * YuvConfig ); +extern const char * CCONV VP31D_GetVersionNumber ( void ); +extern int CCONV VP6_DecodeFrameToYUV ( xPB_INST, char * VideoBufferPtr, unsigned int ByteCount); +extern BOOL CCONV VP6_StopDecoder ( xPB_INST *pbi ); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Src/libvp6/include/vp60/vp60_comp_interface.h b/Src/libvp6/include/vp60/vp60_comp_interface.h new file mode 100644 index 00000000..3ca389ee --- /dev/null +++ b/Src/libvp6/include/vp60/vp60_comp_interface.h @@ -0,0 +1,211 @@ +/**************************************************************************** +* +* Module Title : vp60_comp_interface.h +* +* Description : Interface to VP60 compressor. +* +****************************************************************************/ +#ifndef __INC_VP60_COMP_INTERFACE_H +#define __INC_VP60_COMP_INTERFACE_H + +#ifdef _MSC_VER +#pragma warning(disable: 4514) // Disable warning 4514: Unreferenced inline function +#endif + +/**************************************************************************** +* Header Files +****************************************************************************/ +#include "codec_common_interface.h" +#include "type_aliases.h" +#include "string.h" + +#define DEFAULT_VALUE -999 +/**************************************************************************** +* Typedefs +****************************************************************************/ +typedef enum +{ + USAGE_STREAM_FROM_SERVER = 0x0, // INTER prediction, (0,0) motion vector implied. + USAGE_LOCAL_FILE_PLAYBACK = 0x1 // INTER prediction, (0,0) motion vector implied. +} END_USAGE; + + +typedef enum +{ + MODE_REALTIME = 0x0, + MODE_GOODQUALITY = 0x1, + MODE_BESTQUALITY = 0x2, + MODE_FIRSTPASS = 0x3, + MODE_SECONDPASS = 0x4, + MODE_SECONDPASS_BEST= 0x5 +} MODE; + + + +/* Command interface to compressor */ +typedef struct +{ + //UINT32 FourCC; + //UINT32 ConfigVersion; + UINT32 FrameSize; + UINT32 TargetBitRate; + UINT32 FrameRate; + UINT32 KeyFrameFrequency; + UINT32 KeyFrameDataTarget; + UINT32 Quality; + BOOL AllowDF; + BOOL QuickCompress; + BOOL AutoKeyFrameEnabled; + INT32 AutoKeyFrameThreshold; + UINT32 MinimumDistanceToKeyFrame; + INT32 ForceKeyFrameEvery; + INT32 NoiseSensitivity; + BOOL AllowSpatialResampling; + + // The Intended Horizontal Scale + UINT32 HScale; + UINT32 HRatio; + + // The Intended Vertical Scale + UINT32 VScale; + UINT32 VRatio; + + // The way in which we intended + UINT32 ScalingMode; + + // Interlaced (0) means no (1) means Yes + UINT32 Interlaced; + + BOOL FixedQ; + + INT32 StartingBufferLevel; // The initial encoder buffer level + INT32 OptimalBufferLevel; // The buffer level target we strive to reach / maintain. + INT32 DropFramesWaterMark; // Buffer fullness watermark for forced drop frames. + INT32 ResampleDownWaterMark; // Buffer fullness watermark for downwards spacial re-sampling + INT32 ResampleUpWaterMark; // Buffer fullness watermark where returning to larger image size is consdered + INT32 OutputFrameRate; + INT32 Speed; + + BOOL ErrorResilientMode; // compress using a mode that won't completely fall apart if we decompress using + // the frame after a dropped frame + INT32 Profile; + + BOOL DisableGolden; // disable golden frame updates + BOOL VBMode; // run in variable bandwidth 1 pass mode + UINT32 BestAllowedQ; // best allowed quality ( save bits by disallowings frames that are too high quality ) + INT32 UnderShootPct; // target a percentage of the actual frame to allow for sections that go over + + INT32 MaxAllowedDatarate; // maximum the datarate is allowed to go. + INT32 MaximumBufferSize; // maximum buffer size. + + BOOL TwoPassVBREnabled; // two pass variable bandwidth enabled + INT32 TwoPassVBRBias; // how variable do we want to target? + INT32 TwoPassVBRMaxSection; // maximum + INT32 TwoPassVBRMinSection; // minimum + INT32 Pass; // which pass of the compression are we running. + + MODE Mode; + END_USAGE EndUsage; + + char FirstPassFile[512]; + char SettingsFile[512]; + char RootDirectory[512]; + + INT32 PlaceHolder; + INT32 DeleteFirstPassFile; + INT32 Sharpness; + +} COMP_CONFIG_VP6; + + +typedef struct +{ + int YWidth; + int YHeight; + int YStride; + + int UVWidth; + int UVHeight; + int UVStride; + + char *YBuffer; + char *UBuffer; + char *VBuffer; + +} YUV_INPUT_BUFFER_CONFIG; + +/**************************************************************************** +* Functions +****************************************************************************/ +#ifdef _MSC_VER +_inline +void comp_config_default_vp6 ( COMP_CONFIG_VP6* pcc ) +{ + + + pcc->FrameSize = 0; // No default value + pcc->TargetBitRate = 300; + pcc->FrameRate = 0; // No default value + pcc->KeyFrameFrequency = 120; + pcc->KeyFrameDataTarget = 0; // No default value + pcc->Quality = 56; + pcc->AllowDF = 0; + pcc->AutoKeyFrameEnabled = 1; + pcc->AutoKeyFrameThreshold = 80; + pcc->MinimumDistanceToKeyFrame = 4; + pcc->ForceKeyFrameEvery = 120; + pcc->NoiseSensitivity = 0; + pcc->AllowSpatialResampling = 0; + pcc->HScale = 1; + pcc->HRatio = 1; + pcc->VScale = 1; + pcc->VRatio = 1; + pcc->ScalingMode = MAINTAIN_ASPECT_RATIO; + pcc->Interlaced = 0; + pcc->FixedQ = 0; + + pcc->StartingBufferLevel = 4; + pcc->OptimalBufferLevel = 5; + pcc->DropFramesWaterMark = 20; + pcc->ResampleDownWaterMark = 35; + pcc->ResampleUpWaterMark = 45; + + pcc->OutputFrameRate = 30; + pcc->Speed = 4; + pcc->ErrorResilientMode = FALSE; + + pcc->Profile = 0; + + pcc->DisableGolden = 0; + pcc->BestAllowedQ = 4; + pcc->UnderShootPct = 90; + + pcc->MaxAllowedDatarate = 100; + pcc->MaximumBufferSize = 6; + + pcc->TwoPassVBRBias = 70; + pcc->TwoPassVBRMaxSection = 400; + pcc->TwoPassVBRMinSection = 40; + + + pcc->Mode = MODE_GOODQUALITY; + pcc->EndUsage = USAGE_STREAM_FROM_SERVER; + + // DEFAULT means default value as determined by mode and endusage + pcc->QuickCompress = DEFAULT_VALUE; + pcc->Pass = DEFAULT_VALUE; + pcc->VBMode = DEFAULT_VALUE; + pcc->TwoPassVBREnabled = DEFAULT_VALUE; + + pcc->SettingsFile[0] = 0; + pcc->RootDirectory[0] = 0; + pcc->Sharpness = 5; + + strncpy(pcc->FirstPassFile,"firstpass.fpf",512); + //pcc->FourCC = '06PV'; + //pcc->ConfigVersion = 4; + + return; +} +#endif +#endif |