VideoCodec/Data/Constants.h
#ifndef CONSTANTS_H_
#define CONSTANTS_H_
#include <stddef.h>
#include "Types.h"
// Enable Matlab reporting.
//#define USE_MATLAB
#define USE_OCTAVE
// Codec stream data.
#define STREAM_FORMAT_VERSION 1
#define STREAM_FORMAT_CODEC_IDENTIFIER 0x1C25
#define STREAM_FORMAT_VERSION_IDENTIFIER 0x0001
// Colour formats.
typedef int ColourFormat;
#define COLOUR_FORMAT_INVALID -1
#define COLOUR_FORMAT_RGB 0
#define COLOUR_FORMAT_YUV 1
// Frame types.
typedef int FrameType;
#define FRAME_TYPE_INVALID -1
#define FRAME_TYPE_INTRA 0
#define FRAME_TYPE_INTER 1
// Module configuration status.
typedef int ConfigurationStatus;
#define MODULE_CONFIGURATION_OK 0
#define MODULE_CONFIGURATION_WARNING 1
#define MODULE_CONFIGURATION_ERROR 2
// Status for I/O operations on streams.
typedef int StreamStatus;
#define STREAM_STATUS_OK 0
#define STREAM_STATUS_WARNING 1
#define STREAM_STATUS_ERROR 2
// Module identifiers.
#define INVALID_MODULE_ID "invalidModule"
#define FRAME_INPUT_MODULE_ID "frameInput"
#define FRAME_OUTPUT_MODULE_ID "frameOutput"
#define PIPELINE_MODULE_ID "pipeline"
#define COLOUR_SPACE_CONVERTER_MODULE_ID "colourSpace"
#define MACROBLOCK_HANDLER_MODULE_ID "macroblockHandler"
#define DCT_MODULE_ID "dct"
#define AAN_DCT_MODULE_ID "aandct"
#define DCT_COEFFICIENT_QUANTIZER_MODULE_ID "dctCoefficientQuantizer"
#define HUFFMAN_ENTROPY_ENCODER_MODULE_ID "huffmanEntropyEncoder"
#define HUFFMAN_ENTROPY_DECODER_MODULE_ID "huffmanEntropyDecoder"
#define STREAM_INPUT_MODULE_ID "streamInput"
#define STREAM_OUTPUT_MODULE_ID "streamOutput"
#define STREAM_FORMATTER_MODULE_ID "streamFormatter"
#define STREAM_PARSER_MODULE_ID "streamParser"
#define FRAME_DIFFERENCE_MODULE_ID "frameDifference"
#define GOP_MANAGER_MODULE_ID "gopManager"
#define PROGRESS_INFORMATION_MODULE_ID "progressInformation"
#define EXTERNAL_MODULE_ID "external"
#define MOTION_ESTIMATION_MODULE_ID "motionEstimation"
#define RATE_CONTROL_MODULE_ID "rateControl"
// Pipelines
#define SIMPLE_FRAMES_PIPELINE 0
#define ENCODE_FRAMES_TO_FILE 1
#define DECODE_FILE_TO_FRAMES 2
#define TESTING_PIPELINE 3
#define ENCODE_FRAMES_TO_FILE_WITH_PREDICTION 4
#define INVALID_PIPELINE -1
// Pixel layout formats.
typedef int PixelLayout;
// Blocks are eight by eight pixels.
// Divides each 16*16 chunk into four 8*8 luminance blocks and two colour blocks.
// YUV colour data is required. (This pattern takes advantage of the human visual system's lower chromatic resolution.)
//
// Y
// 0 1 C b C r
// 2 3 4 5
//
#define PIXEL_LAYOUT_MB_FOUR_TWO_ZERO 0
// The pixels are in scan order, with components packed together so that if values[i] is Red or Luminance,
// values[i + 1] and values[i + 2] will contain the corresponding GB/UV values.
#define PIXEL_LAYOUT_SCAN 1
// Colour resize filter.
typedef int ColourResizeFilter;
// Averages over each square of four pixels.
#define SIMPLE_COLOUR_RESIZE_FILTER 0
// DCT coefficient quantization.
typedef unsigned char DCTCoefficientQuantizationMethod;
// Zeros elements except for the most important ones. (See the DCTCoefficientQuantizer class for more information.)
#define DCT_QUANTIZATION_CUT_OFF_AGGRESSIVE 0
// From the JPEG standard
#define DCT_QUANTIZATION_JPEG_STANDARD_AGGRESSIVE 1
// From the JPEG standard, but divided by two. (Should be `nearly indistinguishable'.)
#define DCT_QUANTIZATION_JPEG_STANDARD_QUALITY 2
// For predictive frames.
#define DCT_QUANTIZATION_INTER_STANDARD 3
// No quantization.
#define DCT_QUANTIZATION_NONE 4
#endif /*CONSTANTS_H_*/