diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..2127e06b --- /dev/null +++ b/.gitignore @@ -0,0 +1,47 @@ +### VSCODE + +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + + +### SUBLIME +# Cache files for Sublime Text +*.tmlanguage.cache +*.tmPreferences.cache +*.stTheme.cache + +# Workspace files are user-specific +*.sublime-workspace + + +### MACOS +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + diff --git a/README.md b/README.md index 281151b0..e51c68f5 100644 --- a/README.md +++ b/README.md @@ -48,9 +48,18 @@ Install Golang https://golang.org/doc/install Install dependencies - * `apt-get install libvpx-dev -y` (or alternatives of libvpx on other OS) + * Install [libvpx](https://www.webmproject.org/code/) and [pkg-config](https://www.freedesktop.org/wiki/Software/pkg-config/) +``` +# Ubuntu +apt-get install -y pkg-config libvpx-dev + +# MacOS +brew install libvpx pkg-config + +# Windows +... +``` * `go get github.com/pion/webrtc/` - * `go get github.com/gorilla/mux` * `go get github.com/gorilla/websocket` Then we can run the main directly diff --git a/vpx-encoder/android_include/.DS_Store b/vpx-encoder/android_include/.DS_Store deleted file mode 100644 index 5008ddfc..00000000 Binary files a/vpx-encoder/android_include/.DS_Store and /dev/null differ diff --git a/vpx-encoder/android_include/vpx/vp8.h b/vpx-encoder/android_include/vpx/vp8.h deleted file mode 100644 index f30dafed..00000000 --- a/vpx-encoder/android_include/vpx/vp8.h +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -/*!\defgroup vp8 VP8 - * \ingroup codecs - * VP8 is a video compression algorithm that uses motion - * compensated prediction, Discrete Cosine Transform (DCT) coding of the - * prediction error signal and context dependent entropy coding techniques - * based on arithmetic principles. It features: - * - YUV 4:2:0 image format - * - Macro-block based coding (16x16 luma plus two 8x8 chroma) - * - 1/4 (1/8) pixel accuracy motion compensated prediction - * - 4x4 DCT transform - * - 128 level linear quantizer - * - In loop deblocking filter - * - Context-based entropy coding - * - * @{ - */ -/*!\file - * \brief Provides controls common to both the VP8 encoder and decoder. - */ -#ifndef VPX_VPX_VP8_H_ -#define VPX_VPX_VP8_H_ - -#include "./vpx_codec.h" -#include "./vpx_image.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/*!\brief Control functions - * - * The set of macros define the control functions of VP8 interface - */ -enum vp8_com_control_id { - /*!\brief pass in an external frame into decoder to be used as reference frame - */ - VP8_SET_REFERENCE = 1, - VP8_COPY_REFERENCE = 2, /**< get a copy of reference frame from the decoder */ - VP8_SET_POSTPROC = 3, /**< set the decoder's post processing settings */ - - /* TODO(jkoleszar): The encoder incorrectly reuses some of these values (5+) - * for its control ids. These should be migrated to something like the - * VP8_DECODER_CTRL_ID_START range next time we're ready to break the ABI. - */ - VP9_GET_REFERENCE = 128, /**< get a pointer to a reference frame */ - VP8_COMMON_CTRL_ID_MAX, - VP8_DECODER_CTRL_ID_START = 256 -}; - -/*!\brief post process flags - * - * The set of macros define VP8 decoder post processing flags - */ -enum vp8_postproc_level { - VP8_NOFILTERING = 0, - VP8_DEBLOCK = 1 << 0, - VP8_DEMACROBLOCK = 1 << 1, - VP8_ADDNOISE = 1 << 2, - VP8_MFQE = 1 << 3 -}; - -/*!\brief post process flags - * - * This define a structure that describe the post processing settings. For - * the best objective measure (using the PSNR metric) set post_proc_flag - * to VP8_DEBLOCK and deblocking_level to 1. - */ - -typedef struct vp8_postproc_cfg { - /*!\brief the types of post processing to be done, should be combination of - * "vp8_postproc_level" */ - int post_proc_flag; - int deblocking_level; /**< the strength of deblocking, valid range [0, 16] */ - int noise_level; /**< the strength of additive noise, valid range [0, 16] */ -} vp8_postproc_cfg_t; - -/*!\brief reference frame type - * - * The set of macros define the type of VP8 reference frames - */ -typedef enum vpx_ref_frame_type { - VP8_LAST_FRAME = 1, - VP8_GOLD_FRAME = 2, - VP8_ALTR_FRAME = 4 -} vpx_ref_frame_type_t; - -/*!\brief reference frame data struct - * - * Define the data struct to access vp8 reference frames. - */ -typedef struct vpx_ref_frame { - vpx_ref_frame_type_t frame_type; /**< which reference frame */ - vpx_image_t img; /**< reference frame data in image format */ -} vpx_ref_frame_t; - -/*!\brief VP9 specific reference frame data struct - * - * Define the data struct to access vp9 reference frames. - */ -typedef struct vp9_ref_frame { - int idx; /**< frame index to get (input) */ - vpx_image_t img; /**< img structure to populate (output) */ -} vp9_ref_frame_t; - -/*!\cond */ -/*!\brief vp8 decoder control function parameter type - * - * defines the data type for each of VP8 decoder control function requires - */ -VPX_CTRL_USE_TYPE(VP8_SET_REFERENCE, vpx_ref_frame_t *) -#define VPX_CTRL_VP8_SET_REFERENCE -VPX_CTRL_USE_TYPE(VP8_COPY_REFERENCE, vpx_ref_frame_t *) -#define VPX_CTRL_VP8_COPY_REFERENCE -VPX_CTRL_USE_TYPE(VP8_SET_POSTPROC, vp8_postproc_cfg_t *) -#define VPX_CTRL_VP8_SET_POSTPROC -VPX_CTRL_USE_TYPE(VP9_GET_REFERENCE, vp9_ref_frame_t *) -#define VPX_CTRL_VP9_GET_REFERENCE - -/*!\endcond */ -/*! @} - end defgroup vp8 */ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // VPX_VPX_VP8_H_ diff --git a/vpx-encoder/android_include/vpx/vp8cx.h b/vpx-encoder/android_include/vpx/vp8cx.h deleted file mode 100644 index b2d57dce..00000000 --- a/vpx-encoder/android_include/vpx/vp8cx.h +++ /dev/null @@ -1,1027 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ -#ifndef VPX_VPX_VP8CX_H_ -#define VPX_VPX_VP8CX_H_ - -/*!\defgroup vp8_encoder WebM VP8/VP9 Encoder - * \ingroup vp8 - * - * @{ - */ -#include "./vp8.h" -#include "./vpx_encoder.h" - -/*!\file - * \brief Provides definitions for using VP8 or VP9 encoder algorithm within the - * vpx Codec Interface. - */ - -#ifdef __cplusplus -extern "C" { -#endif - -/*!\name Algorithm interface for VP8 - * - * This interface provides the capability to encode raw VP8 streams. - * @{ - */ -extern vpx_codec_iface_t vpx_codec_vp8_cx_algo; -extern vpx_codec_iface_t *vpx_codec_vp8_cx(void); -/*!@} - end algorithm interface member group*/ - -/*!\name Algorithm interface for VP9 - * - * This interface provides the capability to encode raw VP9 streams. - * @{ - */ -extern vpx_codec_iface_t vpx_codec_vp9_cx_algo; -extern vpx_codec_iface_t *vpx_codec_vp9_cx(void); -/*!@} - end algorithm interface member group*/ - -/* - * Algorithm Flags - */ - -/*!\brief Don't reference the last frame - * - * When this flag is set, the encoder will not use the last frame as a - * predictor. When not set, the encoder will choose whether to use the - * last frame or not automatically. - */ -#define VP8_EFLAG_NO_REF_LAST (1 << 16) - -/*!\brief Don't reference the golden frame - * - * When this flag is set, the encoder will not use the golden frame as a - * predictor. When not set, the encoder will choose whether to use the - * golden frame or not automatically. - */ -#define VP8_EFLAG_NO_REF_GF (1 << 17) - -/*!\brief Don't reference the alternate reference frame - * - * When this flag is set, the encoder will not use the alt ref frame as a - * predictor. When not set, the encoder will choose whether to use the - * alt ref frame or not automatically. - */ -#define VP8_EFLAG_NO_REF_ARF (1 << 21) - -/*!\brief Don't update the last frame - * - * When this flag is set, the encoder will not update the last frame with - * the contents of the current frame. - */ -#define VP8_EFLAG_NO_UPD_LAST (1 << 18) - -/*!\brief Don't update the golden frame - * - * When this flag is set, the encoder will not update the golden frame with - * the contents of the current frame. - */ -#define VP8_EFLAG_NO_UPD_GF (1 << 22) - -/*!\brief Don't update the alternate reference frame - * - * When this flag is set, the encoder will not update the alt ref frame with - * the contents of the current frame. - */ -#define VP8_EFLAG_NO_UPD_ARF (1 << 23) - -/*!\brief Force golden frame update - * - * When this flag is set, the encoder copy the contents of the current frame - * to the golden frame buffer. - */ -#define VP8_EFLAG_FORCE_GF (1 << 19) - -/*!\brief Force alternate reference frame update - * - * When this flag is set, the encoder copy the contents of the current frame - * to the alternate reference frame buffer. - */ -#define VP8_EFLAG_FORCE_ARF (1 << 24) - -/*!\brief Disable entropy update - * - * When this flag is set, the encoder will not update its internal entropy - * model based on the entropy of this frame. - */ -#define VP8_EFLAG_NO_UPD_ENTROPY (1 << 20) - -/*!\brief VPx encoder control functions - * - * This set of macros define the control functions available for VPx - * encoder interface. - * - * \sa #vpx_codec_control - */ -enum vp8e_enc_control_id { - /*!\brief Codec control function to pass an ROI map to encoder. - * - * Supported in codecs: VP8 - */ - VP8E_SET_ROI_MAP = 8, - - /*!\brief Codec control function to pass an Active map to encoder. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_ACTIVEMAP, - - /*!\brief Codec control function to set encoder scaling mode. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_SCALEMODE = 11, - - /*!\brief Codec control function to set encoder internal speed settings. - * - * Changes in this value influences, among others, the encoder's selection - * of motion estimation methods. Values greater than 0 will increase encoder - * speed at the expense of quality. - * - * \note Valid range for VP8: -16..16 - * \note Valid range for VP9: -8..8 - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_CPUUSED = 13, - - /*!\brief Codec control function to enable automatic use of arf frames. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_ENABLEAUTOALTREF, - - /*!\brief control function to set noise sensitivity - * - * 0: off, 1: OnYOnly, 2: OnYUV, - * 3: OnYUVAggressive, 4: Adaptive - * - * Supported in codecs: VP8 - */ - VP8E_SET_NOISE_SENSITIVITY, - - /*!\brief Codec control function to set higher sharpness at the expense - * of a lower PSNR. - * - * \note Valid range: 0..7 - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_SHARPNESS, - - /*!\brief Codec control function to set the threshold for MBs treated static. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_STATIC_THRESHOLD, - - /*!\brief Codec control function to set the number of token partitions. - * - * Supported in codecs: VP8 - */ - VP8E_SET_TOKEN_PARTITIONS, - - /*!\brief Codec control function to get last quantizer chosen by the encoder. - * - * Return value uses internal quantizer scale defined by the codec. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_GET_LAST_QUANTIZER, - - /*!\brief Codec control function to get last quantizer chosen by the encoder. - * - * Return value uses the 0..63 scale as used by the rc_*_quantizer config - * parameters. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_GET_LAST_QUANTIZER_64, - - /*!\brief Codec control function to set the max no of frames to create arf. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_ARNR_MAXFRAMES, - - /*!\brief Codec control function to set the filter strength for the arf. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_ARNR_STRENGTH, - - /*!\deprecated control function to set the filter type to use for the arf. */ - VP8E_SET_ARNR_TYPE, - - /*!\brief Codec control function to set visual tuning. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_TUNING, - - /*!\brief Codec control function to set constrained quality level. - * - * \attention For this value to be used vpx_codec_enc_cfg_t::rc_end_usage must - * be set to #VPX_CQ - * \note Valid range: 0..63 - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_CQ_LEVEL, - - /*!\brief Codec control function to set Max data rate for Intra frames. - * - * This value controls additional clamping on the maximum size of a - * keyframe. It is expressed as a percentage of the average - * per-frame bitrate, with the special (and default) value 0 meaning - * unlimited, or no additional clamping beyond the codec's built-in - * algorithm. - * - * For example, to allocate no more than 4.5 frames worth of bitrate - * to a keyframe, set this to 450. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_MAX_INTRA_BITRATE_PCT, - - /*!\brief Codec control function to set reference and update frame flags. - * - * Supported in codecs: VP8 - */ - VP8E_SET_FRAME_FLAGS, - - /*!\brief Codec control function to set max data rate for Inter frames. - * - * This value controls additional clamping on the maximum size of an - * inter frame. It is expressed as a percentage of the average - * per-frame bitrate, with the special (and default) value 0 meaning - * unlimited, or no additional clamping beyond the codec's built-in - * algorithm. - * - * For example, to allow no more than 4.5 frames worth of bitrate - * to an inter frame, set this to 450. - * - * Supported in codecs: VP9 - */ - VP9E_SET_MAX_INTER_BITRATE_PCT, - - /*!\brief Boost percentage for Golden Frame in CBR mode. - * - * This value controls the amount of boost given to Golden Frame in - * CBR mode. It is expressed as a percentage of the average - * per-frame bitrate, with the special (and default) value 0 meaning - * the feature is off, i.e., no golden frame boost in CBR mode and - * average bitrate target is used. - * - * For example, to allow 100% more bits, i.e, 2X, in a golden frame - * than average frame, set this to 100. - * - * Supported in codecs: VP9 - */ - VP9E_SET_GF_CBR_BOOST_PCT, - - /*!\brief Codec control function to set the temporal layer id. - * - * For temporal scalability: this control allows the application to set the - * layer id for each frame to be encoded. Note that this control must be set - * for every frame prior to encoding. The usage of this control function - * supersedes the internal temporal pattern counter, which is now deprecated. - * - * Supported in codecs: VP8 - */ - VP8E_SET_TEMPORAL_LAYER_ID, - - /*!\brief Codec control function to set encoder screen content mode. - * - * 0: off, 1: On, 2: On with more aggressive rate control. - * - * Supported in codecs: VP8 - */ - VP8E_SET_SCREEN_CONTENT_MODE, - - /*!\brief Codec control function to set lossless encoding mode. - * - * VP9 can operate in lossless encoding mode, in which the bitstream - * produced will be able to decode and reconstruct a perfect copy of - * input source. This control function provides a mean to switch encoder - * into lossless coding mode(1) or normal coding mode(0) that may be lossy. - * 0 = lossy coding mode - * 1 = lossless coding mode - * - * By default, encoder operates in normal coding mode (maybe lossy). - * - * Supported in codecs: VP9 - */ - VP9E_SET_LOSSLESS, - - /*!\brief Codec control function to set number of tile columns. - * - * In encoding and decoding, VP9 allows an input image frame be partitioned - * into separated vertical tile columns, which can be encoded or decoded - * independently. This enables easy implementation of parallel encoding and - * decoding. This control requests the encoder to use column tiles in - * encoding an input frame, with number of tile columns (in Log2 unit) as - * the parameter: - * 0 = 1 tile column - * 1 = 2 tile columns - * 2 = 4 tile columns - * ..... - * n = 2**n tile columns - * The requested tile columns will be capped by the encoder based on image - * size limitations (The minimum width of a tile column is 256 pixels, the - * maximum is 4096). - * - * By default, the value is 6, i.e., the maximum number of tiles supported by - * the resolution. - * - * Supported in codecs: VP9 - */ - VP9E_SET_TILE_COLUMNS, - - /*!\brief Codec control function to set number of tile rows. - * - * In encoding and decoding, VP9 allows an input image frame be partitioned - * into separated horizontal tile rows. Tile rows are encoded or decoded - * sequentially. Even though encoding/decoding of later tile rows depends on - * earlier ones, this allows the encoder to output data packets for tile rows - * prior to completely processing all tile rows in a frame, thereby reducing - * the latency in processing between input and output. The parameter - * for this control describes the number of tile rows, which has a valid - * range [0, 2]: - * 0 = 1 tile row - * 1 = 2 tile rows - * 2 = 4 tile rows - * - * By default, the value is 0, i.e. one single row tile for entire image. - * - * Supported in codecs: VP9 - */ - VP9E_SET_TILE_ROWS, - - /*!\brief Codec control function to enable frame parallel decoding feature. - * - * VP9 has a bitstream feature to reduce decoding dependency between frames - * by turning off backward update of probability context used in encoding - * and decoding. This allows staged parallel processing of more than one - * video frame in the decoder. This control function provides a means to - * turn this feature on or off for bitstreams produced by encoder. - * - * By default, this feature is on. - * - * Supported in codecs: VP9 - */ - VP9E_SET_FRAME_PARALLEL_DECODING, - - /*!\brief Codec control function to set adaptive quantization mode. - * - * VP9 has a segment based feature that allows encoder to adaptively change - * quantization parameter for each segment within a frame to improve the - * subjective quality. This control makes encoder operate in one of the - * several AQ_modes supported. - * - * By default, encoder operates with AQ_Mode 0(adaptive quantization off). - * - * Supported in codecs: VP9 - */ - VP9E_SET_AQ_MODE, - - /*!\brief Codec control function to enable/disable periodic Q boost. - * - * One VP9 encoder speed feature is to enable quality boost by lowering - * frame level Q periodically. This control function provides a mean to - * turn on/off this feature. - * 0 = off - * 1 = on - * - * By default, the encoder is allowed to use this feature for appropriate - * encoding modes. - * - * Supported in codecs: VP9 - */ - VP9E_SET_FRAME_PERIODIC_BOOST, - - /*!\brief Codec control function to set noise sensitivity. - * - * 0: off, 1: On(YOnly), 2: For SVC only, on top two spatial layers(YOnly) - * - * Supported in codecs: VP9 - */ - VP9E_SET_NOISE_SENSITIVITY, - - /*!\brief Codec control function to turn on/off SVC in encoder. - * \note Return value is VPX_CODEC_INVALID_PARAM if the encoder does not - * support SVC in its current encoding mode - * 0: off, 1: on - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC, - - /*!\brief Codec control function to pass an ROI map to encoder. - * - * Supported in codecs: VP9 - */ - VP9E_SET_ROI_MAP, - - /*!\brief Codec control function to set parameters for SVC. - * \note Parameters contain min_q, max_q, scaling factor for each of the - * SVC layers. - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_PARAMETERS, - - /*!\brief Codec control function to set svc layer for spatial and temporal. - * \note Valid ranges: 0..#vpx_codec_enc_cfg::ss_number_layers for spatial - * layer and 0..#vpx_codec_enc_cfg::ts_number_layers for - * temporal layer. - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_LAYER_ID, - - /*!\brief Codec control function to set content type. - * \note Valid parameter range: - * VP9E_CONTENT_DEFAULT = Regular video content (Default) - * VP9E_CONTENT_SCREEN = Screen capture content - * VP9E_CONTENT_FILM = Film content: improves grain retention - * - * Supported in codecs: VP9 - */ - VP9E_SET_TUNE_CONTENT, - - /*!\brief Codec control function to get svc layer ID. - * \note The layer ID returned is for the data packet from the registered - * callback function. - * - * Supported in codecs: VP9 - */ - VP9E_GET_SVC_LAYER_ID, - - /*!\brief Codec control function to register callback to get per layer packet. - * \note Parameter for this control function is a structure with a callback - * function and a pointer to private data used by the callback. - * - * Supported in codecs: VP9 - */ - VP9E_REGISTER_CX_CALLBACK, - - /*!\brief Codec control function to set color space info. - * \note Valid ranges: 0..7, default is "UNKNOWN". - * 0 = UNKNOWN, - * 1 = BT_601 - * 2 = BT_709 - * 3 = SMPTE_170 - * 4 = SMPTE_240 - * 5 = BT_2020 - * 6 = RESERVED - * 7 = SRGB - * - * Supported in codecs: VP9 - */ - VP9E_SET_COLOR_SPACE, - - /*!\brief Codec control function to set temporal layering mode. - * \note Valid ranges: 0..3, default is "0" - * (VP9E_TEMPORAL_LAYERING_MODE_NOLAYERING). - * 0 = VP9E_TEMPORAL_LAYERING_MODE_NOLAYERING - * 1 = VP9E_TEMPORAL_LAYERING_MODE_BYPASS - * 2 = VP9E_TEMPORAL_LAYERING_MODE_0101 - * 3 = VP9E_TEMPORAL_LAYERING_MODE_0212 - * - * Supported in codecs: VP9 - */ - VP9E_SET_TEMPORAL_LAYERING_MODE, - - /*!\brief Codec control function to set minimum interval between GF/ARF frames - * - * By default the value is set as 4. - * - * Supported in codecs: VP9 - */ - VP9E_SET_MIN_GF_INTERVAL, - - /*!\brief Codec control function to set minimum interval between GF/ARF frames - * - * By default the value is set as 16. - * - * Supported in codecs: VP9 - */ - VP9E_SET_MAX_GF_INTERVAL, - - /*!\brief Codec control function to get an Active map back from the encoder. - * - * Supported in codecs: VP9 - */ - VP9E_GET_ACTIVEMAP, - - /*!\brief Codec control function to set color range bit. - * \note Valid ranges: 0..1, default is 0 - * 0 = Limited range (16..235 or HBD equivalent) - * 1 = Full range (0..255 or HBD equivalent) - * - * Supported in codecs: VP9 - */ - VP9E_SET_COLOR_RANGE, - - /*!\brief Codec control function to set the frame flags and buffer indices - * for spatial layers. The frame flags and buffer indices are set using the - * struct #vpx_svc_ref_frame_config defined below. - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_REF_FRAME_CONFIG, - - /*!\brief Codec control function to set intended rendering image size. - * - * By default, this is identical to the image size in pixels. - * - * Supported in codecs: VP9 - */ - VP9E_SET_RENDER_SIZE, - - /*!\brief Codec control function to set target level. - * - * 255: off (default); 0: only keep level stats; 10: target for level 1.0; - * 11: target for level 1.1; ... 62: target for level 6.2 - * - * Supported in codecs: VP9 - */ - VP9E_SET_TARGET_LEVEL, - - /*!\brief Codec control function to set row level multi-threading. - * - * 0 : off, 1 : on - * - * Supported in codecs: VP9 - */ - VP9E_SET_ROW_MT, - - /*!\brief Codec control function to get bitstream level. - * - * Supported in codecs: VP9 - */ - VP9E_GET_LEVEL, - - /*!\brief Codec control function to enable/disable special mode for altref - * adaptive quantization. You can use it with --aq-mode concurrently. - * - * Enable special adaptive quantization for altref frames based on their - * expected prediction quality for the future frames. - * - * Supported in codecs: VP9 - */ - VP9E_SET_ALT_REF_AQ, - - /*!\brief Boost percentage for Golden Frame in CBR mode. - * - * This value controls the amount of boost given to Golden Frame in - * CBR mode. It is expressed as a percentage of the average - * per-frame bitrate, with the special (and default) value 0 meaning - * the feature is off, i.e., no golden frame boost in CBR mode and - * average bitrate target is used. - * - * For example, to allow 100% more bits, i.e, 2X, in a golden frame - * than average frame, set this to 100. - * - * Supported in codecs: VP8 - */ - VP8E_SET_GF_CBR_BOOST_PCT, - - /*!\brief Codec control function to enable the extreme motion vector unit test - * in VP9. Please note that this is only used in motion vector unit test. - * - * 0 : off, 1 : MAX_EXTREME_MV, 2 : MIN_EXTREME_MV - * - * Supported in codecs: VP9 - */ - VP9E_ENABLE_MOTION_VECTOR_UNIT_TEST, - - /*!\brief Codec control function to constrain the inter-layer prediction - * (prediction of lower spatial resolution) in VP9 SVC. - * - * 0 : inter-layer prediction on, 1 : off, 2 : off only on non-key frames - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_INTER_LAYER_PRED, - - /*!\brief Codec control function to set mode and thresholds for frame - * dropping in SVC. Drop frame thresholds are set per-layer. Mode is set as: - * 0 : layer-dependent dropping, 1 : constrained dropping, current layer drop - * forces drop on all upper layers. Default mode is 0. - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_FRAME_DROP_LAYER, - - /*!\brief Codec control function to get the refresh and reference flags and - * the buffer indices, up to the last encoded spatial layer. - * - * Supported in codecs: VP9 - */ - VP9E_GET_SVC_REF_FRAME_CONFIG, - - /*!\brief Codec control function to enable/disable use of golden reference as - * a second temporal reference for SVC. Only used when inter-layer prediction - * is disabled on INTER frames. - * - * 0: Off, 1: Enabled (default) - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_GF_TEMPORAL_REF, - - /*!\brief Codec control function to enable spatial layer sync frame, for any - * spatial layer. Enabling it for layer k means spatial layer k will disable - * all temporal prediction, but keep the inter-layer prediction. It will - * refresh any temporal reference buffer for that layer, and reset the - * temporal layer for the superframe to 0. Setting the layer sync for base - * spatial layer forces a key frame. Default is off (0) for all spatial - * layers. Spatial layer sync flag is reset to 0 after each encoded layer, - * so when control is invoked it is only used for the current superframe. - * - * 0: Off (default), 1: Enabled - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_SPATIAL_LAYER_SYNC, - - /*!\brief Codec control function to enable temporal dependency model. - * - * Vp9 allows the encoder to run temporal dependency model and use it to - * improve the compression performance. To enable, set this parameter to be - * 1. The default value is set to be 1. - */ - VP9E_SET_TPL, - - /*!\brief Codec control function to enable postencode frame drop. - * - * This will allow encoder to drop frame after it's encoded. - * - * 0: Off (default), 1: Enabled - * - * Supported in codecs: VP9 - */ - VP9E_SET_POSTENCODE_DROP, -}; - -/*!\brief vpx 1-D scaling mode - * - * This set of constants define 1-D vpx scaling modes - */ -typedef enum vpx_scaling_mode_1d { - VP8E_NORMAL = 0, - VP8E_FOURFIVE = 1, - VP8E_THREEFIVE = 2, - VP8E_ONETWO = 3 -} VPX_SCALING_MODE; - -/*!\brief Temporal layering mode enum for VP9 SVC. - * - * This set of macros define the different temporal layering modes. - * Supported codecs: VP9 (in SVC mode) - * - */ -typedef enum vp9e_temporal_layering_mode { - /*!\brief No temporal layering. - * Used when only spatial layering is used. - */ - VP9E_TEMPORAL_LAYERING_MODE_NOLAYERING = 0, - - /*!\brief Bypass mode. - * Used when application needs to control temporal layering. - * This will only work when the number of spatial layers equals 1. - */ - VP9E_TEMPORAL_LAYERING_MODE_BYPASS = 1, - - /*!\brief 0-1-0-1... temporal layering scheme with two temporal layers. - */ - VP9E_TEMPORAL_LAYERING_MODE_0101 = 2, - - /*!\brief 0-2-1-2... temporal layering scheme with three temporal layers. - */ - VP9E_TEMPORAL_LAYERING_MODE_0212 = 3 -} VP9E_TEMPORAL_LAYERING_MODE; - -/*!\brief vpx region of interest map - * - * These defines the data structures for the region of interest map - * - */ - -typedef struct vpx_roi_map { - /*! If ROI is enabled. */ - uint8_t enabled; - /*! An id between 0-3 (0-7 for vp9) for each 16x16 (8x8 for VP9) - * region within a frame. */ - unsigned char *roi_map; - unsigned int rows; /**< Number of rows. */ - unsigned int cols; /**< Number of columns. */ - /*! VP8 only uses the first 4 segments. VP9 uses 8 segments. */ - int delta_q[8]; /**< Quantizer deltas. */ - int delta_lf[8]; /**< Loop filter deltas. */ - /*! skip and ref frame segment is only used in VP9. */ - int skip[8]; /**< Skip this block. */ - int ref_frame[8]; /**< Reference frame for this block. */ - /*! Static breakout threshold for each segment. Only used in VP8. */ - unsigned int static_threshold[4]; -} vpx_roi_map_t; - -/*!\brief vpx active region map - * - * These defines the data structures for active region map - * - */ - -typedef struct vpx_active_map { - /*!\brief specify an on (1) or off (0) each 16x16 region within a frame */ - unsigned char *active_map; - unsigned int rows; /**< number of rows */ - unsigned int cols; /**< number of cols */ -} vpx_active_map_t; - -/*!\brief vpx image scaling mode - * - * This defines the data structure for image scaling mode - * - */ -typedef struct vpx_scaling_mode { - VPX_SCALING_MODE h_scaling_mode; /**< horizontal scaling mode */ - VPX_SCALING_MODE v_scaling_mode; /**< vertical scaling mode */ -} vpx_scaling_mode_t; - -/*!\brief VP8 token partition mode - * - * This defines VP8 partitioning mode for compressed data, i.e., the number of - * sub-streams in the bitstream. Used for parallelized decoding. - * - */ - -typedef enum { - VP8_ONE_TOKENPARTITION = 0, - VP8_TWO_TOKENPARTITION = 1, - VP8_FOUR_TOKENPARTITION = 2, - VP8_EIGHT_TOKENPARTITION = 3 -} vp8e_token_partitions; - -/*!brief VP9 encoder content type */ -typedef enum { - VP9E_CONTENT_DEFAULT, - VP9E_CONTENT_SCREEN, - VP9E_CONTENT_FILM, - VP9E_CONTENT_INVALID -} vp9e_tune_content; - -/*!\brief VP8 model tuning parameters - * - * Changes the encoder to tune for certain types of input material. - * - */ -typedef enum { VP8_TUNE_PSNR, VP8_TUNE_SSIM } vp8e_tuning; - -/*!\brief vp9 svc layer parameters - * - * This defines the spatial and temporal layer id numbers for svc encoding. - * This is used with the #VP9E_SET_SVC_LAYER_ID control to set the spatial and - * temporal layer id for the current frame. - * - */ -typedef struct vpx_svc_layer_id { - int spatial_layer_id; /**< First spatial layer to start encoding. */ - // TODO(jianj): Deprecated, to be removed. - int temporal_layer_id; /**< Temporal layer id number. */ - int temporal_layer_id_per_spatial[VPX_SS_MAX_LAYERS]; /**< Temp layer id. */ -} vpx_svc_layer_id_t; - -/*!\brief vp9 svc frame flag parameters. - * - * This defines the frame flags and buffer indices for each spatial layer for - * svc encoding. - * This is used with the #VP9E_SET_SVC_REF_FRAME_CONFIG control to set frame - * flags and buffer indices for each spatial layer for the current (super)frame. - * - */ -typedef struct vpx_svc_ref_frame_config { - int lst_fb_idx[VPX_SS_MAX_LAYERS]; /**< Last buffer index. */ - int gld_fb_idx[VPX_SS_MAX_LAYERS]; /**< Golden buffer index. */ - int alt_fb_idx[VPX_SS_MAX_LAYERS]; /**< Altref buffer index. */ - int update_buffer_slot[VPX_SS_MAX_LAYERS]; /**< Update reference frames. */ - // TODO(jianj): Remove update_last/golden/alt_ref, these are deprecated. - int update_last[VPX_SS_MAX_LAYERS]; /**< Update last. */ - int update_golden[VPX_SS_MAX_LAYERS]; /**< Update golden. */ - int update_alt_ref[VPX_SS_MAX_LAYERS]; /**< Update altref. */ - int reference_last[VPX_SS_MAX_LAYERS]; /**< Last as reference. */ - int reference_golden[VPX_SS_MAX_LAYERS]; /**< Golden as reference. */ - int reference_alt_ref[VPX_SS_MAX_LAYERS]; /**< Altref as reference. */ - int64_t duration[VPX_SS_MAX_LAYERS]; /**< Duration per spatial layer. */ -} vpx_svc_ref_frame_config_t; - -/*!\brief VP9 svc frame dropping mode. - * - * This defines the frame drop mode for SVC. - * - */ -typedef enum { - CONSTRAINED_LAYER_DROP, - /**< Upper layers are constrained to drop if current layer drops. */ - LAYER_DROP, /**< Any spatial layer can drop. */ - FULL_SUPERFRAME_DROP, /**< Only full superframe can drop. */ -} SVC_LAYER_DROP_MODE; - -/*!\brief vp9 svc frame dropping parameters. - * - * This defines the frame drop thresholds for each spatial layer, and - * the frame dropping mode: 0 = layer based frame dropping (default), - * 1 = constrained dropping where current layer drop forces all upper - * spatial layers to drop. - */ -typedef struct vpx_svc_frame_drop { - int framedrop_thresh[VPX_SS_MAX_LAYERS]; /**< Frame drop thresholds */ - SVC_LAYER_DROP_MODE - framedrop_mode; /**< Layer-based or constrained dropping. */ - int max_consec_drop; /**< Maximum consecutive drops, for any layer. */ -} vpx_svc_frame_drop_t; - -/*!\brief vp9 svc spatial layer sync parameters. - * - * This defines the spatial layer sync flag, defined per spatial layer. - * - */ -typedef struct vpx_svc_spatial_layer_sync { - int spatial_layer_sync[VPX_SS_MAX_LAYERS]; /**< Sync layer flags */ - int base_layer_intra_only; /**< Flag for setting Intra-only frame on base */ -} vpx_svc_spatial_layer_sync_t; - -/*!\cond */ -/*!\brief VP8 encoder control function parameter type - * - * Defines the data types that VP8E control functions take. Note that - * additional common controls are defined in vp8.h - * - */ - -VPX_CTRL_USE_TYPE(VP8E_SET_FRAME_FLAGS, int) -#define VPX_CTRL_VP8E_SET_FRAME_FLAGS -VPX_CTRL_USE_TYPE(VP8E_SET_TEMPORAL_LAYER_ID, int) -#define VPX_CTRL_VP8E_SET_TEMPORAL_LAYER_ID -VPX_CTRL_USE_TYPE(VP8E_SET_ROI_MAP, vpx_roi_map_t *) -#define VPX_CTRL_VP8E_SET_ROI_MAP -VPX_CTRL_USE_TYPE(VP9E_SET_ROI_MAP, vpx_roi_map_t *) -#define VPX_CTRL_VP9E_SET_ROI_MAP -VPX_CTRL_USE_TYPE(VP8E_SET_ACTIVEMAP, vpx_active_map_t *) -#define VPX_CTRL_VP8E_SET_ACTIVEMAP -VPX_CTRL_USE_TYPE(VP8E_SET_SCALEMODE, vpx_scaling_mode_t *) -#define VPX_CTRL_VP8E_SET_SCALEMODE - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC, int) -#define VPX_CTRL_VP9E_SET_SVC -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_PARAMETERS, void *) -#define VPX_CTRL_VP9E_SET_SVC_PARAMETERS -VPX_CTRL_USE_TYPE(VP9E_REGISTER_CX_CALLBACK, void *) -#define VPX_CTRL_VP9E_REGISTER_CX_CALLBACK -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_LAYER_ID, vpx_svc_layer_id_t *) -#define VPX_CTRL_VP9E_SET_SVC_LAYER_ID - -VPX_CTRL_USE_TYPE(VP8E_SET_CPUUSED, int) -#define VPX_CTRL_VP8E_SET_CPUUSED -VPX_CTRL_USE_TYPE(VP8E_SET_ENABLEAUTOALTREF, unsigned int) -#define VPX_CTRL_VP8E_SET_ENABLEAUTOALTREF -VPX_CTRL_USE_TYPE(VP8E_SET_NOISE_SENSITIVITY, unsigned int) -#define VPX_CTRL_VP8E_SET_NOISE_SENSITIVITY -VPX_CTRL_USE_TYPE(VP8E_SET_SHARPNESS, unsigned int) -#define VPX_CTRL_VP8E_SET_SHARPNESS -VPX_CTRL_USE_TYPE(VP8E_SET_STATIC_THRESHOLD, unsigned int) -#define VPX_CTRL_VP8E_SET_STATIC_THRESHOLD -VPX_CTRL_USE_TYPE(VP8E_SET_TOKEN_PARTITIONS, int) /* vp8e_token_partitions */ -#define VPX_CTRL_VP8E_SET_TOKEN_PARTITIONS - -VPX_CTRL_USE_TYPE(VP8E_SET_ARNR_MAXFRAMES, unsigned int) -#define VPX_CTRL_VP8E_SET_ARNR_MAXFRAMES -VPX_CTRL_USE_TYPE(VP8E_SET_ARNR_STRENGTH, unsigned int) -#define VPX_CTRL_VP8E_SET_ARNR_STRENGTH -VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_SET_ARNR_TYPE, unsigned int) -#define VPX_CTRL_VP8E_SET_ARNR_TYPE -VPX_CTRL_USE_TYPE(VP8E_SET_TUNING, int) /* vp8e_tuning */ -#define VPX_CTRL_VP8E_SET_TUNING -VPX_CTRL_USE_TYPE(VP8E_SET_CQ_LEVEL, unsigned int) -#define VPX_CTRL_VP8E_SET_CQ_LEVEL - -VPX_CTRL_USE_TYPE(VP9E_SET_TILE_COLUMNS, int) -#define VPX_CTRL_VP9E_SET_TILE_COLUMNS -VPX_CTRL_USE_TYPE(VP9E_SET_TILE_ROWS, int) -#define VPX_CTRL_VP9E_SET_TILE_ROWS - -VPX_CTRL_USE_TYPE(VP9E_SET_TPL, int) -#define VPX_CTRL_VP9E_SET_TPL - -VPX_CTRL_USE_TYPE(VP8E_GET_LAST_QUANTIZER, int *) -#define VPX_CTRL_VP8E_GET_LAST_QUANTIZER -VPX_CTRL_USE_TYPE(VP8E_GET_LAST_QUANTIZER_64, int *) -#define VPX_CTRL_VP8E_GET_LAST_QUANTIZER_64 -VPX_CTRL_USE_TYPE(VP9E_GET_SVC_LAYER_ID, vpx_svc_layer_id_t *) -#define VPX_CTRL_VP9E_GET_SVC_LAYER_ID - -VPX_CTRL_USE_TYPE(VP8E_SET_MAX_INTRA_BITRATE_PCT, unsigned int) -#define VPX_CTRL_VP8E_SET_MAX_INTRA_BITRATE_PCT -VPX_CTRL_USE_TYPE(VP8E_SET_MAX_INTER_BITRATE_PCT, unsigned int) -#define VPX_CTRL_VP8E_SET_MAX_INTER_BITRATE_PCT - -VPX_CTRL_USE_TYPE(VP8E_SET_GF_CBR_BOOST_PCT, unsigned int) -#define VPX_CTRL_VP8E_SET_GF_CBR_BOOST_PCT - -VPX_CTRL_USE_TYPE(VP8E_SET_SCREEN_CONTENT_MODE, unsigned int) -#define VPX_CTRL_VP8E_SET_SCREEN_CONTENT_MODE - -VPX_CTRL_USE_TYPE(VP9E_SET_GF_CBR_BOOST_PCT, unsigned int) -#define VPX_CTRL_VP9E_SET_GF_CBR_BOOST_PCT - -VPX_CTRL_USE_TYPE(VP9E_SET_LOSSLESS, unsigned int) -#define VPX_CTRL_VP9E_SET_LOSSLESS - -VPX_CTRL_USE_TYPE(VP9E_SET_FRAME_PARALLEL_DECODING, unsigned int) -#define VPX_CTRL_VP9E_SET_FRAME_PARALLEL_DECODING - -VPX_CTRL_USE_TYPE(VP9E_SET_AQ_MODE, unsigned int) -#define VPX_CTRL_VP9E_SET_AQ_MODE - -VPX_CTRL_USE_TYPE(VP9E_SET_ALT_REF_AQ, int) -#define VPX_CTRL_VP9E_SET_ALT_REF_AQ - -VPX_CTRL_USE_TYPE(VP9E_SET_FRAME_PERIODIC_BOOST, unsigned int) -#define VPX_CTRL_VP9E_SET_FRAME_PERIODIC_BOOST - -VPX_CTRL_USE_TYPE(VP9E_SET_NOISE_SENSITIVITY, unsigned int) -#define VPX_CTRL_VP9E_SET_NOISE_SENSITIVITY - -VPX_CTRL_USE_TYPE(VP9E_SET_TUNE_CONTENT, int) /* vp9e_tune_content */ -#define VPX_CTRL_VP9E_SET_TUNE_CONTENT - -VPX_CTRL_USE_TYPE(VP9E_SET_COLOR_SPACE, int) -#define VPX_CTRL_VP9E_SET_COLOR_SPACE - -VPX_CTRL_USE_TYPE(VP9E_SET_MIN_GF_INTERVAL, unsigned int) -#define VPX_CTRL_VP9E_SET_MIN_GF_INTERVAL - -VPX_CTRL_USE_TYPE(VP9E_SET_MAX_GF_INTERVAL, unsigned int) -#define VPX_CTRL_VP9E_SET_MAX_GF_INTERVAL - -VPX_CTRL_USE_TYPE(VP9E_GET_ACTIVEMAP, vpx_active_map_t *) -#define VPX_CTRL_VP9E_GET_ACTIVEMAP - -VPX_CTRL_USE_TYPE(VP9E_SET_COLOR_RANGE, int) -#define VPX_CTRL_VP9E_SET_COLOR_RANGE - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_REF_FRAME_CONFIG, vpx_svc_ref_frame_config_t *) -#define VPX_CTRL_VP9E_SET_SVC_REF_FRAME_CONFIG - -VPX_CTRL_USE_TYPE(VP9E_SET_RENDER_SIZE, int *) -#define VPX_CTRL_VP9E_SET_RENDER_SIZE - -VPX_CTRL_USE_TYPE(VP9E_SET_TARGET_LEVEL, unsigned int) -#define VPX_CTRL_VP9E_SET_TARGET_LEVEL - -VPX_CTRL_USE_TYPE(VP9E_SET_ROW_MT, unsigned int) -#define VPX_CTRL_VP9E_SET_ROW_MT - -VPX_CTRL_USE_TYPE(VP9E_GET_LEVEL, int *) -#define VPX_CTRL_VP9E_GET_LEVEL - -VPX_CTRL_USE_TYPE(VP9E_ENABLE_MOTION_VECTOR_UNIT_TEST, unsigned int) -#define VPX_CTRL_VP9E_ENABLE_MOTION_VECTOR_UNIT_TEST - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_INTER_LAYER_PRED, unsigned int) -#define VPX_CTRL_VP9E_SET_SVC_INTER_LAYER_PRED - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_FRAME_DROP_LAYER, vpx_svc_frame_drop_t *) -#define VPX_CTRL_VP9E_SET_SVC_FRAME_DROP_LAYER - -VPX_CTRL_USE_TYPE(VP9E_GET_SVC_REF_FRAME_CONFIG, vpx_svc_ref_frame_config_t *) -#define VPX_CTRL_VP9E_GET_SVC_REF_FRAME_CONFIG - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_GF_TEMPORAL_REF, unsigned int) -#define VPX_CTRL_VP9E_SET_SVC_GF_TEMPORAL_REF - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_SPATIAL_LAYER_SYNC, - vpx_svc_spatial_layer_sync_t *) -#define VPX_CTRL_VP9E_SET_SVC_SPATIAL_LAYER_SYNC - -VPX_CTRL_USE_TYPE(VP9E_SET_POSTENCODE_DROP, unsigned int) -#define VPX_CTRL_VP9E_SET_POSTENCODE_DROP - -/*!\endcond */ -/*! @} - end defgroup vp8_encoder */ -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // VPX_VPX_VP8CX_H_ diff --git a/vpx-encoder/android_include/vpx/vp8dx.h b/vpx-encoder/android_include/vpx/vp8dx.h deleted file mode 100644 index af92f21a..00000000 --- a/vpx-encoder/android_include/vpx/vp8dx.h +++ /dev/null @@ -1,210 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -/*!\defgroup vp8_decoder WebM VP8/VP9 Decoder - * \ingroup vp8 - * - * @{ - */ -/*!\file - * \brief Provides definitions for using VP8 or VP9 within the vpx Decoder - * interface. - */ -#ifndef VPX_VPX_VP8DX_H_ -#define VPX_VPX_VP8DX_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Include controls common to both the encoder and decoder */ -#include "./vp8.h" - -/*!\name Algorithm interface for VP8 - * - * This interface provides the capability to decode VP8 streams. - * @{ - */ -extern vpx_codec_iface_t vpx_codec_vp8_dx_algo; -extern vpx_codec_iface_t *vpx_codec_vp8_dx(void); -/*!@} - end algorithm interface member group*/ - -/*!\name Algorithm interface for VP9 - * - * This interface provides the capability to decode VP9 streams. - * @{ - */ -extern vpx_codec_iface_t vpx_codec_vp9_dx_algo; -extern vpx_codec_iface_t *vpx_codec_vp9_dx(void); -/*!@} - end algorithm interface member group*/ - -/*!\enum vp8_dec_control_id - * \brief VP8 decoder control functions - * - * This set of macros define the control functions available for the VP8 - * decoder interface. - * - * \sa #vpx_codec_control - */ -enum vp8_dec_control_id { - /** control function to get info on which reference frames were updated - * by the last decode - */ - VP8D_GET_LAST_REF_UPDATES = VP8_DECODER_CTRL_ID_START, - - /** check if the indicated frame is corrupted */ - VP8D_GET_FRAME_CORRUPTED, - - /** control function to get info on which reference frames were used - * by the last decode - */ - VP8D_GET_LAST_REF_USED, - - /** decryption function to decrypt encoded buffer data immediately - * before decoding. Takes a vpx_decrypt_init, which contains - * a callback function and opaque context pointer. - */ - VPXD_SET_DECRYPTOR, - VP8D_SET_DECRYPTOR = VPXD_SET_DECRYPTOR, - - /** control function to get the dimensions that the current frame is decoded - * at. This may be different to the intended display size for the frame as - * specified in the wrapper or frame header (see VP9D_GET_DISPLAY_SIZE). */ - VP9D_GET_FRAME_SIZE, - - /** control function to get the current frame's intended display dimensions - * (as specified in the wrapper or frame header). This may be different to - * the decoded dimensions of this frame (see VP9D_GET_FRAME_SIZE). */ - VP9D_GET_DISPLAY_SIZE, - - /** control function to get the bit depth of the stream. */ - VP9D_GET_BIT_DEPTH, - - /** control function to set the byte alignment of the planes in the reference - * buffers. Valid values are power of 2, from 32 to 1024. A value of 0 sets - * legacy alignment. I.e. Y plane is aligned to 32 bytes, U plane directly - * follows Y plane, and V plane directly follows U plane. Default value is 0. - */ - VP9_SET_BYTE_ALIGNMENT, - - /** control function to invert the decoding order to from right to left. The - * function is used in a test to confirm the decoding independence of tile - * columns. The function may be used in application where this order - * of decoding is desired. - * - * TODO(yaowu): Rework the unit test that uses this control, and in a future - * release, this test-only control shall be removed. - */ - VP9_INVERT_TILE_DECODE_ORDER, - - /** control function to set the skip loop filter flag. Valid values are - * integers. The decoder will skip the loop filter when its value is set to - * nonzero. If the loop filter is skipped the decoder may accumulate decode - * artifacts. The default value is 0. - */ - VP9_SET_SKIP_LOOP_FILTER, - - /** control function to decode SVC stream up to the x spatial layers, - * where x is passed in through the control, and is 0 for base layer. - */ - VP9_DECODE_SVC_SPATIAL_LAYER, - - /*!\brief Codec control function to get last decoded frame quantizer. - * - * Return value uses internal quantizer scale defined by the codec. - * - * Supported in codecs: VP8, VP9 - */ - VPXD_GET_LAST_QUANTIZER, - - /*!\brief Codec control function to set row level multi-threading. - * - * 0 : off, 1 : on - * - * Supported in codecs: VP9 - */ - VP9D_SET_ROW_MT, - - /*!\brief Codec control function to set loopfilter optimization. - * - * 0 : off, Loop filter is done after all tiles have been decoded - * 1 : on, Loop filter is done immediately after decode without - * waiting for all threads to sync. - * - * Supported in codecs: VP9 - */ - VP9D_SET_LOOP_FILTER_OPT, - - VP8_DECODER_CTRL_ID_MAX -}; - -/** Decrypt n bytes of data from input -> output, using the decrypt_state - * passed in VPXD_SET_DECRYPTOR. - */ -typedef void (*vpx_decrypt_cb)(void *decrypt_state, const unsigned char *input, - unsigned char *output, int count); - -/*!\brief Structure to hold decryption state - * - * Defines a structure to hold the decryption state and access function. - */ -typedef struct vpx_decrypt_init { - /*! Decrypt callback. */ - vpx_decrypt_cb decrypt_cb; - - /*! Decryption state. */ - void *decrypt_state; -} vpx_decrypt_init; - -/*!\cond */ -/*!\brief VP8 decoder control function parameter type - * - * Defines the data types that VP8D control functions take. Note that - * additional common controls are defined in vp8.h - * - */ - -VPX_CTRL_USE_TYPE(VP8D_GET_LAST_REF_UPDATES, int *) -#define VPX_CTRL_VP8D_GET_LAST_REF_UPDATES -VPX_CTRL_USE_TYPE(VP8D_GET_FRAME_CORRUPTED, int *) -#define VPX_CTRL_VP8D_GET_FRAME_CORRUPTED -VPX_CTRL_USE_TYPE(VP8D_GET_LAST_REF_USED, int *) -#define VPX_CTRL_VP8D_GET_LAST_REF_USED -VPX_CTRL_USE_TYPE(VPXD_GET_LAST_QUANTIZER, int *) -#define VPX_CTRL_VPXD_GET_LAST_QUANTIZER -VPX_CTRL_USE_TYPE(VPXD_SET_DECRYPTOR, vpx_decrypt_init *) -#define VPX_CTRL_VPXD_SET_DECRYPTOR -VPX_CTRL_USE_TYPE(VP8D_SET_DECRYPTOR, vpx_decrypt_init *) -#define VPX_CTRL_VP8D_SET_DECRYPTOR -VPX_CTRL_USE_TYPE(VP9D_GET_DISPLAY_SIZE, int *) -#define VPX_CTRL_VP9D_GET_DISPLAY_SIZE -VPX_CTRL_USE_TYPE(VP9D_GET_BIT_DEPTH, unsigned int *) -#define VPX_CTRL_VP9D_GET_BIT_DEPTH -VPX_CTRL_USE_TYPE(VP9D_GET_FRAME_SIZE, int *) -#define VPX_CTRL_VP9D_GET_FRAME_SIZE -VPX_CTRL_USE_TYPE(VP9_INVERT_TILE_DECODE_ORDER, int) -#define VPX_CTRL_VP9_INVERT_TILE_DECODE_ORDER -#define VPX_CTRL_VP9_DECODE_SVC_SPATIAL_LAYER -VPX_CTRL_USE_TYPE(VP9_DECODE_SVC_SPATIAL_LAYER, int) -#define VPX_CTRL_VP9_SET_SKIP_LOOP_FILTER -VPX_CTRL_USE_TYPE(VP9_SET_SKIP_LOOP_FILTER, int) -#define VPX_CTRL_VP9_DECODE_SET_ROW_MT -VPX_CTRL_USE_TYPE(VP9D_SET_ROW_MT, int) -#define VPX_CTRL_VP9_SET_LOOP_FILTER_OPT -VPX_CTRL_USE_TYPE(VP9D_SET_LOOP_FILTER_OPT, int) - -/*!\endcond */ -/*! @} - end defgroup vp8_decoder */ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // VPX_VPX_VP8DX_H_ diff --git a/vpx-encoder/android_include/vpx/vpx_codec.h b/vpx-encoder/android_include/vpx/vpx_codec.h deleted file mode 100644 index 0f8d7851..00000000 --- a/vpx-encoder/android_include/vpx/vpx_codec.h +++ /dev/null @@ -1,468 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -/*!\defgroup codec Common Algorithm Interface - * This abstraction allows applications to easily support multiple video - * formats with minimal code duplication. This section describes the interface - * common to all codecs (both encoders and decoders). - * @{ - */ - -/*!\file - * \brief Describes the codec algorithm interface to applications. - * - * This file describes the interface between an application and a - * video codec algorithm. - * - * An application instantiates a specific codec instance by using - * vpx_codec_init() and a pointer to the algorithm's interface structure: - *
- *     my_app.c:
- *       extern vpx_codec_iface_t my_codec;
- *       {
- *           vpx_codec_ctx_t algo;
- *           res = vpx_codec_init(&algo, &my_codec);
- *       }
- *     
- * - * Once initialized, the instance is manged using other functions from - * the vpx_codec_* family. - */ -#ifndef VPX_VPX_VPX_CODEC_H_ -#define VPX_VPX_VPX_CODEC_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "./vpx_image.h" -#include "./vpx_integer.h" - -/*!\brief Decorator indicating a function is deprecated */ -#ifndef VPX_DEPRECATED -#if defined(__GNUC__) && __GNUC__ -#define VPX_DEPRECATED __attribute__((deprecated)) -#elif defined(_MSC_VER) -#define VPX_DEPRECATED -#else -#define VPX_DEPRECATED -#endif -#endif /* VPX_DEPRECATED */ - -#ifndef VPX_DECLSPEC_DEPRECATED -#if defined(__GNUC__) && __GNUC__ -#define VPX_DECLSPEC_DEPRECATED /**< \copydoc #VPX_DEPRECATED */ -#elif defined(_MSC_VER) -/*!\brief \copydoc #VPX_DEPRECATED */ -#define VPX_DECLSPEC_DEPRECATED __declspec(deprecated) -#else -#define VPX_DECLSPEC_DEPRECATED /**< \copydoc #VPX_DEPRECATED */ -#endif -#endif /* VPX_DECLSPEC_DEPRECATED */ - -/*!\brief Decorator indicating a function is potentially unused */ -#ifndef VPX_UNUSED -#if defined(__GNUC__) || defined(__clang__) -#define VPX_UNUSED __attribute__((unused)) -#else -#define VPX_UNUSED -#endif -#endif /* VPX_UNUSED */ - -/*!\brief Current ABI version number - * - * \internal - * If this file is altered in any way that changes the ABI, this value - * must be bumped. Examples include, but are not limited to, changing - * types, removing or reassigning enums, adding/removing/rearranging - * fields to structures - */ -#define VPX_CODEC_ABI_VERSION (4 + VPX_IMAGE_ABI_VERSION) /**<\hideinitializer*/ - -/*!\brief Algorithm return codes */ -typedef enum { - /*!\brief Operation completed without error */ - VPX_CODEC_OK, - - /*!\brief Unspecified error */ - VPX_CODEC_ERROR, - - /*!\brief Memory operation failed */ - VPX_CODEC_MEM_ERROR, - - /*!\brief ABI version mismatch */ - VPX_CODEC_ABI_MISMATCH, - - /*!\brief Algorithm does not have required capability */ - VPX_CODEC_INCAPABLE, - - /*!\brief The given bitstream is not supported. - * - * The bitstream was unable to be parsed at the highest level. The decoder - * is unable to proceed. This error \ref SHOULD be treated as fatal to the - * stream. */ - VPX_CODEC_UNSUP_BITSTREAM, - - /*!\brief Encoded bitstream uses an unsupported feature - * - * The decoder does not implement a feature required by the encoder. This - * return code should only be used for features that prevent future - * pictures from being properly decoded. This error \ref MAY be treated as - * fatal to the stream or \ref MAY be treated as fatal to the current GOP. - */ - VPX_CODEC_UNSUP_FEATURE, - - /*!\brief The coded data for this stream is corrupt or incomplete - * - * There was a problem decoding the current frame. This return code - * should only be used for failures that prevent future pictures from - * being properly decoded. This error \ref MAY be treated as fatal to the - * stream or \ref MAY be treated as fatal to the current GOP. If decoding - * is continued for the current GOP, artifacts may be present. - */ - VPX_CODEC_CORRUPT_FRAME, - - /*!\brief An application-supplied parameter is not valid. - * - */ - VPX_CODEC_INVALID_PARAM, - - /*!\brief An iterator reached the end of list. - * - */ - VPX_CODEC_LIST_END - -} vpx_codec_err_t; - -/*! \brief Codec capabilities bitfield - * - * Each codec advertises the capabilities it supports as part of its - * ::vpx_codec_iface_t interface structure. Capabilities are extra interfaces - * or functionality, and are not required to be supported. - * - * The available flags are specified by VPX_CODEC_CAP_* defines. - */ -typedef long vpx_codec_caps_t; -#define VPX_CODEC_CAP_DECODER 0x1 /**< Is a decoder */ -#define VPX_CODEC_CAP_ENCODER 0x2 /**< Is an encoder */ - -/*! Can support images at greater than 8 bitdepth. - */ -#define VPX_CODEC_CAP_HIGHBITDEPTH 0x4 - -/*! \brief Initialization-time Feature Enabling - * - * Certain codec features must be known at initialization time, to allow for - * proper memory allocation. - * - * The available flags are specified by VPX_CODEC_USE_* defines. - */ -typedef long vpx_codec_flags_t; - -/*!\brief Codec interface structure. - * - * Contains function pointers and other data private to the codec - * implementation. This structure is opaque to the application. - */ -typedef const struct vpx_codec_iface vpx_codec_iface_t; - -/*!\brief Codec private data structure. - * - * Contains data private to the codec implementation. This structure is opaque - * to the application. - */ -typedef struct vpx_codec_priv vpx_codec_priv_t; - -/*!\brief Iterator - * - * Opaque storage used for iterating over lists. - */ -typedef const void *vpx_codec_iter_t; - -/*!\brief Codec context structure - * - * All codecs \ref MUST support this context structure fully. In general, - * this data should be considered private to the codec algorithm, and - * not be manipulated or examined by the calling application. Applications - * may reference the 'name' member to get a printable description of the - * algorithm. - */ -typedef struct vpx_codec_ctx { - const char *name; /**< Printable interface name */ - vpx_codec_iface_t *iface; /**< Interface pointers */ - vpx_codec_err_t err; /**< Last returned error */ - const char *err_detail; /**< Detailed info, if available */ - vpx_codec_flags_t init_flags; /**< Flags passed at init time */ - union { - /**< Decoder Configuration Pointer */ - const struct vpx_codec_dec_cfg *dec; - /**< Encoder Configuration Pointer */ - const struct vpx_codec_enc_cfg *enc; - const void *raw; - } config; /**< Configuration pointer aliasing union */ - vpx_codec_priv_t *priv; /**< Algorithm private storage */ -} vpx_codec_ctx_t; - -/*!\brief Bit depth for codec - * * - * This enumeration determines the bit depth of the codec. - */ -typedef enum vpx_bit_depth { - VPX_BITS_8 = 8, /**< 8 bits */ - VPX_BITS_10 = 10, /**< 10 bits */ - VPX_BITS_12 = 12, /**< 12 bits */ -} vpx_bit_depth_t; - -/* - * Library Version Number Interface - * - * For example, see the following sample return values: - * vpx_codec_version() (1<<16 | 2<<8 | 3) - * vpx_codec_version_str() "v1.2.3-rc1-16-gec6a1ba" - * vpx_codec_version_extra_str() "rc1-16-gec6a1ba" - */ - -/*!\brief Return the version information (as an integer) - * - * Returns a packed encoding of the library version number. This will only - * include - * the major.minor.patch component of the version number. Note that this encoded - * value should be accessed through the macros provided, as the encoding may - * change - * in the future. - * - */ -int vpx_codec_version(void); -#define VPX_VERSION_MAJOR(v) \ - ((v >> 16) & 0xff) /**< extract major from packed version */ -#define VPX_VERSION_MINOR(v) \ - ((v >> 8) & 0xff) /**< extract minor from packed version */ -#define VPX_VERSION_PATCH(v) \ - ((v >> 0) & 0xff) /**< extract patch from packed version */ - -/*!\brief Return the version major number */ -#define vpx_codec_version_major() ((vpx_codec_version() >> 16) & 0xff) - -/*!\brief Return the version minor number */ -#define vpx_codec_version_minor() ((vpx_codec_version() >> 8) & 0xff) - -/*!\brief Return the version patch number */ -#define vpx_codec_version_patch() ((vpx_codec_version() >> 0) & 0xff) - -/*!\brief Return the version information (as a string) - * - * Returns a printable string containing the full library version number. This - * may - * contain additional text following the three digit version number, as to - * indicate - * release candidates, prerelease versions, etc. - * - */ -const char *vpx_codec_version_str(void); - -/*!\brief Return the version information (as a string) - * - * Returns a printable "extra string". This is the component of the string - * returned - * by vpx_codec_version_str() following the three digit version number. - * - */ -const char *vpx_codec_version_extra_str(void); - -/*!\brief Return the build configuration - * - * Returns a printable string containing an encoded version of the build - * configuration. This may be useful to vpx support. - * - */ -const char *vpx_codec_build_config(void); - -/*!\brief Return the name for a given interface - * - * Returns a human readable string for name of the given codec interface. - * - * \param[in] iface Interface pointer - * - */ -const char *vpx_codec_iface_name(vpx_codec_iface_t *iface); - -/*!\brief Convert error number to printable string - * - * Returns a human readable string for the last error returned by the - * algorithm. The returned error will be one line and will not contain - * any newline characters. - * - * - * \param[in] err Error number. - * - */ -const char *vpx_codec_err_to_string(vpx_codec_err_t err); - -/*!\brief Retrieve error synopsis for codec context - * - * Returns a human readable string for the last error returned by the - * algorithm. The returned error will be one line and will not contain - * any newline characters. - * - * - * \param[in] ctx Pointer to this instance's context. - * - */ -const char *vpx_codec_error(vpx_codec_ctx_t *ctx); - -/*!\brief Retrieve detailed error information for codec context - * - * Returns a human readable string providing detailed information about - * the last error. - * - * \param[in] ctx Pointer to this instance's context. - * - * \retval NULL - * No detailed information is available. - */ -const char *vpx_codec_error_detail(vpx_codec_ctx_t *ctx); - -/* REQUIRED FUNCTIONS - * - * The following functions are required to be implemented for all codecs. - * They represent the base case functionality expected of all codecs. - */ - -/*!\brief Destroy a codec instance - * - * Destroys a codec context, freeing any associated memory buffers. - * - * \param[in] ctx Pointer to this instance's context - * - * \retval #VPX_CODEC_OK - * The codec algorithm initialized. - * \retval #VPX_CODEC_MEM_ERROR - * Memory allocation failed. - */ -vpx_codec_err_t vpx_codec_destroy(vpx_codec_ctx_t *ctx); - -/*!\brief Get the capabilities of an algorithm. - * - * Retrieves the capabilities bitfield from the algorithm's interface. - * - * \param[in] iface Pointer to the algorithm interface - * - */ -vpx_codec_caps_t vpx_codec_get_caps(vpx_codec_iface_t *iface); - -/*!\brief Control algorithm - * - * This function is used to exchange algorithm specific data with the codec - * instance. This can be used to implement features specific to a particular - * algorithm. - * - * This wrapper function dispatches the request to the helper function - * associated with the given ctrl_id. It tries to call this function - * transparently, but will return #VPX_CODEC_ERROR if the request could not - * be dispatched. - * - * Note that this function should not be used directly. Call the - * #vpx_codec_control wrapper macro instead. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] ctrl_id Algorithm specific control identifier - * - * \retval #VPX_CODEC_OK - * The control request was processed. - * \retval #VPX_CODEC_ERROR - * The control request was not processed. - * \retval #VPX_CODEC_INVALID_PARAM - * The data was not valid. - */ -vpx_codec_err_t vpx_codec_control_(vpx_codec_ctx_t *ctx, int ctrl_id, ...); -#if defined(VPX_DISABLE_CTRL_TYPECHECKS) && VPX_DISABLE_CTRL_TYPECHECKS -#define vpx_codec_control(ctx, id, data) vpx_codec_control_(ctx, id, data) -#define VPX_CTRL_USE_TYPE(id, typ) -#define VPX_CTRL_USE_TYPE_DEPRECATED(id, typ) -#define VPX_CTRL_VOID(id, typ) - -#else -/*!\brief vpx_codec_control wrapper macro - * - * This macro allows for type safe conversions across the variadic parameter - * to vpx_codec_control_(). - * - * \internal - * It works by dispatching the call to the control function through a wrapper - * function named with the id parameter. - */ -#define vpx_codec_control(ctx, id, data) \ - vpx_codec_control_##id(ctx, id, data) /**<\hideinitializer*/ - -/*!\brief vpx_codec_control type definition macro - * - * This macro allows for type safe conversions across the variadic parameter - * to vpx_codec_control_(). It defines the type of the argument for a given - * control identifier. - * - * \internal - * It defines a static function with - * the correctly typed arguments as a wrapper to the type-unsafe internal - * function. - */ -#define VPX_CTRL_USE_TYPE(id, typ) \ - static vpx_codec_err_t vpx_codec_control_##id(vpx_codec_ctx_t *, int, typ) \ - VPX_UNUSED; \ - \ - static vpx_codec_err_t vpx_codec_control_##id(vpx_codec_ctx_t *ctx, \ - int ctrl_id, typ data) { \ - return vpx_codec_control_(ctx, ctrl_id, data); \ - } /**<\hideinitializer*/ - -/*!\brief vpx_codec_control deprecated type definition macro - * - * Like #VPX_CTRL_USE_TYPE, but indicates that the specified control is - * deprecated and should not be used. Consult the documentation for your - * codec for more information. - * - * \internal - * It defines a static function with the correctly typed arguments as a - * wrapper to the type-unsafe internal function. - */ -#define VPX_CTRL_USE_TYPE_DEPRECATED(id, typ) \ - VPX_DECLSPEC_DEPRECATED static vpx_codec_err_t vpx_codec_control_##id( \ - vpx_codec_ctx_t *, int, typ) VPX_DEPRECATED VPX_UNUSED; \ - \ - VPX_DECLSPEC_DEPRECATED static vpx_codec_err_t vpx_codec_control_##id( \ - vpx_codec_ctx_t *ctx, int ctrl_id, typ data) { \ - return vpx_codec_control_(ctx, ctrl_id, data); \ - } /**<\hideinitializer*/ - -/*!\brief vpx_codec_control void type definition macro - * - * This macro allows for type safe conversions across the variadic parameter - * to vpx_codec_control_(). It indicates that a given control identifier takes - * no argument. - * - * \internal - * It defines a static function without a data argument as a wrapper to the - * type-unsafe internal function. - */ -#define VPX_CTRL_VOID(id) \ - static vpx_codec_err_t vpx_codec_control_##id(vpx_codec_ctx_t *, int) \ - VPX_UNUSED; \ - \ - static vpx_codec_err_t vpx_codec_control_##id(vpx_codec_ctx_t *ctx, \ - int ctrl_id) { \ - return vpx_codec_control_(ctx, ctrl_id); \ - } /**<\hideinitializer*/ - -#endif - -/*!@} - end defgroup codec*/ -#ifdef __cplusplus -} -#endif -#endif // VPX_VPX_VPX_CODEC_H_ diff --git a/vpx-encoder/android_include/vpx/vpx_decoder.h b/vpx-encoder/android_include/vpx/vpx_decoder.h deleted file mode 100644 index f113f719..00000000 --- a/vpx-encoder/android_include/vpx/vpx_decoder.h +++ /dev/null @@ -1,365 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ -#ifndef VPX_VPX_VPX_DECODER_H_ -#define VPX_VPX_VPX_DECODER_H_ - -/*!\defgroup decoder Decoder Algorithm Interface - * \ingroup codec - * This abstraction allows applications using this decoder to easily support - * multiple video formats with minimal code duplication. This section describes - * the interface common to all decoders. - * @{ - */ - -/*!\file - * \brief Describes the decoder algorithm interface to applications. - * - * This file describes the interface between an application and a - * video decoder algorithm. - * - */ -#ifdef __cplusplus -extern "C" { -#endif - -#include "./vpx_codec.h" -#include "./vpx_frame_buffer.h" - -/*!\brief Current ABI version number - * - * \internal - * If this file is altered in any way that changes the ABI, this value - * must be bumped. Examples include, but are not limited to, changing - * types, removing or reassigning enums, adding/removing/rearranging - * fields to structures - */ -#define VPX_DECODER_ABI_VERSION \ - (3 + VPX_CODEC_ABI_VERSION) /**<\hideinitializer*/ - -/*! \brief Decoder capabilities bitfield - * - * Each decoder advertises the capabilities it supports as part of its - * ::vpx_codec_iface_t interface structure. Capabilities are extra interfaces - * or functionality, and are not required to be supported by a decoder. - * - * The available flags are specified by VPX_CODEC_CAP_* defines. - */ -#define VPX_CODEC_CAP_PUT_SLICE 0x10000 /**< Will issue put_slice callbacks */ -#define VPX_CODEC_CAP_PUT_FRAME 0x20000 /**< Will issue put_frame callbacks */ -#define VPX_CODEC_CAP_POSTPROC 0x40000 /**< Can postprocess decoded frame */ -/*!\brief Can conceal errors due to packet loss */ -#define VPX_CODEC_CAP_ERROR_CONCEALMENT 0x80000 -/*!\brief Can receive encoded frames one fragment at a time */ -#define VPX_CODEC_CAP_INPUT_FRAGMENTS 0x100000 - -/*! \brief Initialization-time Feature Enabling - * - * Certain codec features must be known at initialization time, to allow for - * proper memory allocation. - * - * The available flags are specified by VPX_CODEC_USE_* defines. - */ -/*!\brief Can support frame-based multi-threading */ -#define VPX_CODEC_CAP_FRAME_THREADING 0x200000 -/*!brief Can support external frame buffers */ -#define VPX_CODEC_CAP_EXTERNAL_FRAME_BUFFER 0x400000 - -#define VPX_CODEC_USE_POSTPROC 0x10000 /**< Postprocess decoded frame */ -/*!\brief Conceal errors in decoded frames */ -#define VPX_CODEC_USE_ERROR_CONCEALMENT 0x20000 -/*!\brief The input frame should be passed to the decoder one fragment at a - * time */ -#define VPX_CODEC_USE_INPUT_FRAGMENTS 0x40000 -/*!\brief Enable frame-based multi-threading */ -#define VPX_CODEC_USE_FRAME_THREADING 0x80000 - -/*!\brief Stream properties - * - * This structure is used to query or set properties of the decoded - * stream. Algorithms may extend this structure with data specific - * to their bitstream by setting the sz member appropriately. - */ -typedef struct vpx_codec_stream_info { - unsigned int sz; /**< Size of this structure */ - unsigned int w; /**< Width (or 0 for unknown/default) */ - unsigned int h; /**< Height (or 0 for unknown/default) */ - unsigned int is_kf; /**< Current frame is a keyframe */ -} vpx_codec_stream_info_t; - -/* REQUIRED FUNCTIONS - * - * The following functions are required to be implemented for all decoders. - * They represent the base case functionality expected of all decoders. - */ - -/*!\brief Initialization Configurations - * - * This structure is used to pass init time configuration options to the - * decoder. - */ -typedef struct vpx_codec_dec_cfg { - unsigned int threads; /**< Maximum number of threads to use, default 1 */ - unsigned int w; /**< Width */ - unsigned int h; /**< Height */ -} vpx_codec_dec_cfg_t; /**< alias for struct vpx_codec_dec_cfg */ - -/*!\brief Initialize a decoder instance - * - * Initializes a decoder context using the given interface. Applications - * should call the vpx_codec_dec_init convenience macro instead of this - * function directly, to ensure that the ABI version number parameter - * is properly initialized. - * - * If the library was configured with --disable-multithread, this call - * is not thread safe and should be guarded with a lock if being used - * in a multithreaded context. - * - * \param[in] ctx Pointer to this instance's context. - * \param[in] iface Pointer to the algorithm interface to use. - * \param[in] cfg Configuration to use, if known. May be NULL. - * \param[in] flags Bitfield of VPX_CODEC_USE_* flags - * \param[in] ver ABI version number. Must be set to - * VPX_DECODER_ABI_VERSION - * \retval #VPX_CODEC_OK - * The decoder algorithm initialized. - * \retval #VPX_CODEC_MEM_ERROR - * Memory allocation failed. - */ -vpx_codec_err_t vpx_codec_dec_init_ver(vpx_codec_ctx_t *ctx, - vpx_codec_iface_t *iface, - const vpx_codec_dec_cfg_t *cfg, - vpx_codec_flags_t flags, int ver); - -/*!\brief Convenience macro for vpx_codec_dec_init_ver() - * - * Ensures the ABI version parameter is properly set. - */ -#define vpx_codec_dec_init(ctx, iface, cfg, flags) \ - vpx_codec_dec_init_ver(ctx, iface, cfg, flags, VPX_DECODER_ABI_VERSION) - -/*!\brief Parse stream info from a buffer - * - * Performs high level parsing of the bitstream. Construction of a decoder - * context is not necessary. Can be used to determine if the bitstream is - * of the proper format, and to extract information from the stream. - * - * \param[in] iface Pointer to the algorithm interface - * \param[in] data Pointer to a block of data to parse - * \param[in] data_sz Size of the data buffer - * \param[in,out] si Pointer to stream info to update. The size member - * \ref MUST be properly initialized, but \ref MAY be - * clobbered by the algorithm. This parameter \ref MAY - * be NULL. - * - * \retval #VPX_CODEC_OK - * Bitstream is parsable and stream information updated - */ -vpx_codec_err_t vpx_codec_peek_stream_info(vpx_codec_iface_t *iface, - const uint8_t *data, - unsigned int data_sz, - vpx_codec_stream_info_t *si); - -/*!\brief Return information about the current stream. - * - * Returns information about the stream that has been parsed during decoding. - * - * \param[in] ctx Pointer to this instance's context - * \param[in,out] si Pointer to stream info to update. The size member - * \ref MUST be properly initialized, but \ref MAY be - * clobbered by the algorithm. This parameter \ref MAY - * be NULL. - * - * \retval #VPX_CODEC_OK - * Bitstream is parsable and stream information updated - */ -vpx_codec_err_t vpx_codec_get_stream_info(vpx_codec_ctx_t *ctx, - vpx_codec_stream_info_t *si); - -/*!\brief Decode data - * - * Processes a buffer of coded data. If the processing results in a new - * decoded frame becoming available, PUT_SLICE and PUT_FRAME events may be - * generated, as appropriate. Encoded data \ref MUST be passed in DTS (decode - * time stamp) order. Frames produced will always be in PTS (presentation - * time stamp) order. - * If the decoder is configured with VPX_CODEC_USE_INPUT_FRAGMENTS enabled, - * data and data_sz can contain a fragment of the encoded frame. Fragment - * \#n must contain at least partition \#n, but can also contain subsequent - * partitions (\#n+1 - \#n+i), and if so, fragments \#n+1, .., \#n+i must - * be empty. When no more data is available, this function should be called - * with NULL as data and 0 as data_sz. The memory passed to this function - * must be available until the frame has been decoded. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] data Pointer to this block of new coded data. If - * NULL, a VPX_CODEC_CB_PUT_FRAME event is posted - * for the previously decoded frame. - * \param[in] data_sz Size of the coded data, in bytes. - * \param[in] user_priv Application specific data to associate with - * this frame. - * \param[in] deadline Soft deadline the decoder should attempt to meet, - * in us. Set to zero for unlimited. - * - * \return Returns #VPX_CODEC_OK if the coded data was processed completely - * and future pictures can be decoded without error. Otherwise, - * see the descriptions of the other error codes in ::vpx_codec_err_t - * for recoverability capabilities. - */ -vpx_codec_err_t vpx_codec_decode(vpx_codec_ctx_t *ctx, const uint8_t *data, - unsigned int data_sz, void *user_priv, - long deadline); - -/*!\brief Decoded frames iterator - * - * Iterates over a list of the frames available for display. The iterator - * storage should be initialized to NULL to start the iteration. Iteration is - * complete when this function returns NULL. - * - * The list of available frames becomes valid upon completion of the - * vpx_codec_decode call, and remains valid until the next call to - * vpx_codec_decode. - * - * \param[in] ctx Pointer to this instance's context - * \param[in,out] iter Iterator storage, initialized to NULL - * - * \return Returns a pointer to an image, if one is ready for display. Frames - * produced will always be in PTS (presentation time stamp) order. - */ -vpx_image_t *vpx_codec_get_frame(vpx_codec_ctx_t *ctx, vpx_codec_iter_t *iter); - -/*!\defgroup cap_put_frame Frame-Based Decoding Functions - * - * The following functions are required to be implemented for all decoders - * that advertise the VPX_CODEC_CAP_PUT_FRAME capability. Calling these - * functions - * for codecs that don't advertise this capability will result in an error - * code being returned, usually VPX_CODEC_ERROR - * @{ - */ - -/*!\brief put frame callback prototype - * - * This callback is invoked by the decoder to notify the application of - * the availability of decoded image data. - */ -typedef void (*vpx_codec_put_frame_cb_fn_t)(void *user_priv, - const vpx_image_t *img); - -/*!\brief Register for notification of frame completion. - * - * Registers a given function to be called when a decoded frame is - * available. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] cb Pointer to the callback function - * \param[in] user_priv User's private data - * - * \retval #VPX_CODEC_OK - * Callback successfully registered. - * \retval #VPX_CODEC_ERROR - * Decoder context not initialized, or algorithm not capable of - * posting slice completion. - */ -vpx_codec_err_t vpx_codec_register_put_frame_cb(vpx_codec_ctx_t *ctx, - vpx_codec_put_frame_cb_fn_t cb, - void *user_priv); - -/*!@} - end defgroup cap_put_frame */ - -/*!\defgroup cap_put_slice Slice-Based Decoding Functions - * - * The following functions are required to be implemented for all decoders - * that advertise the VPX_CODEC_CAP_PUT_SLICE capability. Calling these - * functions - * for codecs that don't advertise this capability will result in an error - * code being returned, usually VPX_CODEC_ERROR - * @{ - */ - -/*!\brief put slice callback prototype - * - * This callback is invoked by the decoder to notify the application of - * the availability of partially decoded image data. The - */ -typedef void (*vpx_codec_put_slice_cb_fn_t)(void *user_priv, - const vpx_image_t *img, - const vpx_image_rect_t *valid, - const vpx_image_rect_t *update); - -/*!\brief Register for notification of slice completion. - * - * Registers a given function to be called when a decoded slice is - * available. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] cb Pointer to the callback function - * \param[in] user_priv User's private data - * - * \retval #VPX_CODEC_OK - * Callback successfully registered. - * \retval #VPX_CODEC_ERROR - * Decoder context not initialized, or algorithm not capable of - * posting slice completion. - */ -vpx_codec_err_t vpx_codec_register_put_slice_cb(vpx_codec_ctx_t *ctx, - vpx_codec_put_slice_cb_fn_t cb, - void *user_priv); - -/*!@} - end defgroup cap_put_slice*/ - -/*!\defgroup cap_external_frame_buffer External Frame Buffer Functions - * - * The following section is required to be implemented for all decoders - * that advertise the VPX_CODEC_CAP_EXTERNAL_FRAME_BUFFER capability. - * Calling this function for codecs that don't advertise this capability - * will result in an error code being returned, usually VPX_CODEC_ERROR. - * - * \note - * Currently this only works with VP9. - * @{ - */ - -/*!\brief Pass in external frame buffers for the decoder to use. - * - * Registers functions to be called when libvpx needs a frame buffer - * to decode the current frame and a function to be called when libvpx does - * not internally reference the frame buffer. This set function must - * be called before the first call to decode or libvpx will assume the - * default behavior of allocating frame buffers internally. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] cb_get Pointer to the get callback function - * \param[in] cb_release Pointer to the release callback function - * \param[in] cb_priv Callback's private data - * - * \retval #VPX_CODEC_OK - * External frame buffers will be used by libvpx. - * \retval #VPX_CODEC_INVALID_PARAM - * One or more of the callbacks were NULL. - * \retval #VPX_CODEC_ERROR - * Decoder context not initialized, or algorithm not capable of - * using external frame buffers. - * - * \note - * When decoding VP9, the application may be required to pass in at least - * #VP9_MAXIMUM_REF_BUFFERS + #VPX_MAXIMUM_WORK_BUFFERS external frame - * buffers. - */ -vpx_codec_err_t vpx_codec_set_frame_buffer_functions( - vpx_codec_ctx_t *ctx, vpx_get_frame_buffer_cb_fn_t cb_get, - vpx_release_frame_buffer_cb_fn_t cb_release, void *cb_priv); - -/*!@} - end defgroup cap_external_frame_buffer */ - -/*!@} - end defgroup decoder*/ -#ifdef __cplusplus -} -#endif -#endif // VPX_VPX_VPX_DECODER_H_ diff --git a/vpx-encoder/android_include/vpx/vpx_encoder.h b/vpx-encoder/android_include/vpx/vpx_encoder.h deleted file mode 100644 index c18de703..00000000 --- a/vpx-encoder/android_include/vpx/vpx_encoder.h +++ /dev/null @@ -1,968 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ -#ifndef VPX_VPX_VPX_ENCODER_H_ -#define VPX_VPX_VPX_ENCODER_H_ - -/*!\defgroup encoder Encoder Algorithm Interface - * \ingroup codec - * This abstraction allows applications using this encoder to easily support - * multiple video formats with minimal code duplication. This section describes - * the interface common to all encoders. - * @{ - */ - -/*!\file - * \brief Describes the encoder algorithm interface to applications. - * - * This file describes the interface between an application and a - * video encoder algorithm. - * - */ -#ifdef __cplusplus -extern "C" { -#endif - -#include "./vpx_codec.h" - -/*! Temporal Scalability: Maximum length of the sequence defining frame - * layer membership - */ -#define VPX_TS_MAX_PERIODICITY 16 - -/*! Temporal Scalability: Maximum number of coding layers */ -#define VPX_TS_MAX_LAYERS 5 - -/*! Temporal+Spatial Scalability: Maximum number of coding layers */ -#define VPX_MAX_LAYERS 12 // 3 temporal + 4 spatial layers are allowed. - -/*! Spatial Scalability: Maximum number of coding layers */ -#define VPX_SS_MAX_LAYERS 5 - -/*! Spatial Scalability: Default number of coding layers */ -#define VPX_SS_DEFAULT_LAYERS 1 - -/*!\brief Current ABI version number - * - * \internal - * If this file is altered in any way that changes the ABI, this value - * must be bumped. Examples include, but are not limited to, changing - * types, removing or reassigning enums, adding/removing/rearranging - * fields to structures - */ -#define VPX_ENCODER_ABI_VERSION \ - (14 + VPX_CODEC_ABI_VERSION) /**<\hideinitializer*/ - -/*! \brief Encoder capabilities bitfield - * - * Each encoder advertises the capabilities it supports as part of its - * ::vpx_codec_iface_t interface structure. Capabilities are extra - * interfaces or functionality, and are not required to be supported - * by an encoder. - * - * The available flags are specified by VPX_CODEC_CAP_* defines. - */ -#define VPX_CODEC_CAP_PSNR 0x10000 /**< Can issue PSNR packets */ - -/*! Can output one partition at a time. Each partition is returned in its - * own VPX_CODEC_CX_FRAME_PKT, with the FRAME_IS_FRAGMENT flag set for - * every partition but the last. In this mode all frames are always - * returned partition by partition. - */ -#define VPX_CODEC_CAP_OUTPUT_PARTITION 0x20000 - -/*! \brief Initialization-time Feature Enabling - * - * Certain codec features must be known at initialization time, to allow - * for proper memory allocation. - * - * The available flags are specified by VPX_CODEC_USE_* defines. - */ -#define VPX_CODEC_USE_PSNR 0x10000 /**< Calculate PSNR on each frame */ -/*!\brief Make the encoder output one partition at a time. */ -#define VPX_CODEC_USE_OUTPUT_PARTITION 0x20000 -#define VPX_CODEC_USE_HIGHBITDEPTH 0x40000 /**< Use high bitdepth */ - -/*!\brief Generic fixed size buffer structure - * - * This structure is able to hold a reference to any fixed size buffer. - */ -typedef struct vpx_fixed_buf { - void *buf; /**< Pointer to the data */ - size_t sz; /**< Length of the buffer, in chars */ -} vpx_fixed_buf_t; /**< alias for struct vpx_fixed_buf */ - -/*!\brief Time Stamp Type - * - * An integer, which when multiplied by the stream's time base, provides - * the absolute time of a sample. - */ -typedef int64_t vpx_codec_pts_t; - -/*!\brief Compressed Frame Flags - * - * This type represents a bitfield containing information about a compressed - * frame that may be useful to an application. The most significant 16 bits - * can be used by an algorithm to provide additional detail, for example to - * support frame types that are codec specific (MPEG-1 D-frames for example) - */ -typedef uint32_t vpx_codec_frame_flags_t; -#define VPX_FRAME_IS_KEY 0x1 /**< frame is the start of a GOP */ -/*!\brief frame can be dropped without affecting the stream (no future frame - * depends on this one) */ -#define VPX_FRAME_IS_DROPPABLE 0x2 -/*!\brief frame should be decoded but will not be shown */ -#define VPX_FRAME_IS_INVISIBLE 0x4 -/*!\brief this is a fragment of the encoded frame */ -#define VPX_FRAME_IS_FRAGMENT 0x8 - -/*!\brief Error Resilient flags - * - * These flags define which error resilient features to enable in the - * encoder. The flags are specified through the - * vpx_codec_enc_cfg::g_error_resilient variable. - */ -typedef uint32_t vpx_codec_er_flags_t; -/*!\brief Improve resiliency against losses of whole frames */ -#define VPX_ERROR_RESILIENT_DEFAULT 0x1 -/*!\brief The frame partitions are independently decodable by the bool decoder, - * meaning that partitions can be decoded even though earlier partitions have - * been lost. Note that intra prediction is still done over the partition - * boundary. */ -#define VPX_ERROR_RESILIENT_PARTITIONS 0x2 - -/*!\brief Encoder output packet variants - * - * This enumeration lists the different kinds of data packets that can be - * returned by calls to vpx_codec_get_cx_data(). Algorithms \ref MAY - * extend this list to provide additional functionality. - */ -enum vpx_codec_cx_pkt_kind { - VPX_CODEC_CX_FRAME_PKT, /**< Compressed video frame */ - VPX_CODEC_STATS_PKT, /**< Two-pass statistics for this frame */ - VPX_CODEC_FPMB_STATS_PKT, /**< first pass mb statistics for this frame */ - VPX_CODEC_PSNR_PKT, /**< PSNR statistics for this frame */ - VPX_CODEC_CUSTOM_PKT = 256 /**< Algorithm extensions */ -}; - -/*!\brief Encoder output packet - * - * This structure contains the different kinds of output data the encoder - * may produce while compressing a frame. - */ -typedef struct vpx_codec_cx_pkt { - enum vpx_codec_cx_pkt_kind kind; /**< packet variant */ - union { - struct { - void *buf; /**< compressed data buffer */ - size_t sz; /**< length of compressed data */ - /*!\brief time stamp to show frame (in timebase units) */ - vpx_codec_pts_t pts; - /*!\brief duration to show frame (in timebase units) */ - unsigned long duration; - vpx_codec_frame_flags_t flags; /**< flags for this frame */ - /*!\brief the partition id defines the decoding order of the partitions. - * Only applicable when "output partition" mode is enabled. First - * partition has id 0.*/ - int partition_id; - /*!\brief Width and height of frames in this packet. VP8 will only use the - * first one.*/ - unsigned int width[VPX_SS_MAX_LAYERS]; /**< frame width */ - unsigned int height[VPX_SS_MAX_LAYERS]; /**< frame height */ - /*!\brief Flag to indicate if spatial layer frame in this packet is - * encoded or dropped. VP8 will always be set to 1.*/ - uint8_t spatial_layer_encoded[VPX_SS_MAX_LAYERS]; - } frame; /**< data for compressed frame packet */ - vpx_fixed_buf_t twopass_stats; /**< data for two-pass packet */ - vpx_fixed_buf_t firstpass_mb_stats; /**< first pass mb packet */ - struct vpx_psnr_pkt { - unsigned int samples[4]; /**< Number of samples, total/y/u/v */ - uint64_t sse[4]; /**< sum squared error, total/y/u/v */ - double psnr[4]; /**< PSNR, total/y/u/v */ - } psnr; /**< data for PSNR packet */ - vpx_fixed_buf_t raw; /**< data for arbitrary packets */ - - /* This packet size is fixed to allow codecs to extend this - * interface without having to manage storage for raw packets, - * i.e., if it's smaller than 128 bytes, you can store in the - * packet list directly. - */ - char pad[128 - sizeof(enum vpx_codec_cx_pkt_kind)]; /**< fixed sz */ - } data; /**< packet data */ -} vpx_codec_cx_pkt_t; /**< alias for struct vpx_codec_cx_pkt */ - -/*!\brief Encoder return output buffer callback - * - * This callback function, when registered, returns with packets when each - * spatial layer is encoded. - */ -typedef void (*vpx_codec_enc_output_cx_pkt_cb_fn_t)(vpx_codec_cx_pkt_t *pkt, - void *user_data); - -/*!\brief Callback function pointer / user data pair storage */ -typedef struct vpx_codec_enc_output_cx_cb_pair { - vpx_codec_enc_output_cx_pkt_cb_fn_t output_cx_pkt; /**< Callback function */ - void *user_priv; /**< Pointer to private data */ -} vpx_codec_priv_output_cx_pkt_cb_pair_t; - -/*!\brief Rational Number - * - * This structure holds a fractional value. - */ -typedef struct vpx_rational { - int num; /**< fraction numerator */ - int den; /**< fraction denominator */ -} vpx_rational_t; /**< alias for struct vpx_rational */ - -/*!\brief Multi-pass Encoding Pass */ -enum vpx_enc_pass { - VPX_RC_ONE_PASS, /**< Single pass mode */ - VPX_RC_FIRST_PASS, /**< First pass of multi-pass mode */ - VPX_RC_LAST_PASS /**< Final pass of multi-pass mode */ -}; - -/*!\brief Rate control mode */ -enum vpx_rc_mode { - VPX_VBR, /**< Variable Bit Rate (VBR) mode */ - VPX_CBR, /**< Constant Bit Rate (CBR) mode */ - VPX_CQ, /**< Constrained Quality (CQ) mode */ - VPX_Q, /**< Constant Quality (Q) mode */ -}; - -/*!\brief Keyframe placement mode. - * - * This enumeration determines whether keyframes are placed automatically by - * the encoder or whether this behavior is disabled. Older releases of this - * SDK were implemented such that VPX_KF_FIXED meant keyframes were disabled. - * This name is confusing for this behavior, so the new symbols to be used - * are VPX_KF_AUTO and VPX_KF_DISABLED. - */ -enum vpx_kf_mode { - VPX_KF_FIXED, /**< deprecated, implies VPX_KF_DISABLED */ - VPX_KF_AUTO, /**< Encoder determines optimal placement automatically */ - VPX_KF_DISABLED = 0 /**< Encoder does not place keyframes. */ -}; - -/*!\brief Encoded Frame Flags - * - * This type indicates a bitfield to be passed to vpx_codec_encode(), defining - * per-frame boolean values. By convention, bits common to all codecs will be - * named VPX_EFLAG_*, and bits specific to an algorithm will be named - * /algo/_eflag_*. The lower order 16 bits are reserved for common use. - */ -typedef long vpx_enc_frame_flags_t; -#define VPX_EFLAG_FORCE_KF (1 << 0) /**< Force this frame to be a keyframe */ - -/*!\brief Encoder configuration structure - * - * This structure contains the encoder settings that have common representations - * across all codecs. This doesn't imply that all codecs support all features, - * however. - */ -typedef struct vpx_codec_enc_cfg { - /* - * generic settings (g) - */ - - /*!\brief Deprecated: Algorithm specific "usage" value - * - * This value must be zero. - */ - unsigned int g_usage; - - /*!\brief Maximum number of threads to use - * - * For multi-threaded implementations, use no more than this number of - * threads. The codec may use fewer threads than allowed. The value - * 0 is equivalent to the value 1. - */ - unsigned int g_threads; - - /*!\brief Bitstream profile to use - * - * Some codecs support a notion of multiple bitstream profiles. Typically - * this maps to a set of features that are turned on or off. Often the - * profile to use is determined by the features of the intended decoder. - * Consult the documentation for the codec to determine the valid values - * for this parameter, or set to zero for a sane default. - */ - unsigned int g_profile; /**< profile of bitstream to use */ - - /*!\brief Width of the frame - * - * This value identifies the presentation resolution of the frame, - * in pixels. Note that the frames passed as input to the encoder must - * have this resolution. Frames will be presented by the decoder in this - * resolution, independent of any spatial resampling the encoder may do. - */ - unsigned int g_w; - - /*!\brief Height of the frame - * - * This value identifies the presentation resolution of the frame, - * in pixels. Note that the frames passed as input to the encoder must - * have this resolution. Frames will be presented by the decoder in this - * resolution, independent of any spatial resampling the encoder may do. - */ - unsigned int g_h; - - /*!\brief Bit-depth of the codec - * - * This value identifies the bit_depth of the codec, - * Only certain bit-depths are supported as identified in the - * vpx_bit_depth_t enum. - */ - vpx_bit_depth_t g_bit_depth; - - /*!\brief Bit-depth of the input frames - * - * This value identifies the bit_depth of the input frames in bits. - * Note that the frames passed as input to the encoder must have - * this bit-depth. - */ - unsigned int g_input_bit_depth; - - /*!\brief Stream timebase units - * - * Indicates the smallest interval of time, in seconds, used by the stream. - * For fixed frame rate material, or variable frame rate material where - * frames are timed at a multiple of a given clock (ex: video capture), - * the \ref RECOMMENDED method is to set the timebase to the reciprocal - * of the frame rate (ex: 1001/30000 for 29.970 Hz NTSC). This allows the - * pts to correspond to the frame number, which can be handy. For - * re-encoding video from containers with absolute time timestamps, the - * \ref RECOMMENDED method is to set the timebase to that of the parent - * container or multimedia framework (ex: 1/1000 for ms, as in FLV). - */ - struct vpx_rational g_timebase; - - /*!\brief Enable error resilient modes. - * - * The error resilient bitfield indicates to the encoder which features - * it should enable to take measures for streaming over lossy or noisy - * links. - */ - vpx_codec_er_flags_t g_error_resilient; - - /*!\brief Multi-pass Encoding Mode - * - * This value should be set to the current phase for multi-pass encoding. - * For single pass, set to #VPX_RC_ONE_PASS. - */ - enum vpx_enc_pass g_pass; - - /*!\brief Allow lagged encoding - * - * If set, this value allows the encoder to consume a number of input - * frames before producing output frames. This allows the encoder to - * base decisions for the current frame on future frames. This does - * increase the latency of the encoding pipeline, so it is not appropriate - * in all situations (ex: realtime encoding). - * - * Note that this is a maximum value -- the encoder may produce frames - * sooner than the given limit. Set this value to 0 to disable this - * feature. - */ - unsigned int g_lag_in_frames; - - /* - * rate control settings (rc) - */ - - /*!\brief Temporal resampling configuration, if supported by the codec. - * - * Temporal resampling allows the codec to "drop" frames as a strategy to - * meet its target data rate. This can cause temporal discontinuities in - * the encoded video, which may appear as stuttering during playback. This - * trade-off is often acceptable, but for many applications is not. It can - * be disabled in these cases. - * - * This threshold is described as a percentage of the target data buffer. - * When the data buffer falls below this percentage of fullness, a - * dropped frame is indicated. Set the threshold to zero (0) to disable - * this feature. - */ - unsigned int rc_dropframe_thresh; - - /*!\brief Enable/disable spatial resampling, if supported by the codec. - * - * Spatial resampling allows the codec to compress a lower resolution - * version of the frame, which is then upscaled by the encoder to the - * correct presentation resolution. This increases visual quality at - * low data rates, at the expense of CPU time on the encoder/decoder. - */ - unsigned int rc_resize_allowed; - - /*!\brief Internal coded frame width. - * - * If spatial resampling is enabled this specifies the width of the - * encoded frame. - */ - unsigned int rc_scaled_width; - - /*!\brief Internal coded frame height. - * - * If spatial resampling is enabled this specifies the height of the - * encoded frame. - */ - unsigned int rc_scaled_height; - - /*!\brief Spatial resampling up watermark. - * - * This threshold is described as a percentage of the target data buffer. - * When the data buffer rises above this percentage of fullness, the - * encoder will step up to a higher resolution version of the frame. - */ - unsigned int rc_resize_up_thresh; - - /*!\brief Spatial resampling down watermark. - * - * This threshold is described as a percentage of the target data buffer. - * When the data buffer falls below this percentage of fullness, the - * encoder will step down to a lower resolution version of the frame. - */ - unsigned int rc_resize_down_thresh; - - /*!\brief Rate control algorithm to use. - * - * Indicates whether the end usage of this stream is to be streamed over - * a bandwidth constrained link, indicating that Constant Bit Rate (CBR) - * mode should be used, or whether it will be played back on a high - * bandwidth link, as from a local disk, where higher variations in - * bitrate are acceptable. - */ - enum vpx_rc_mode rc_end_usage; - - /*!\brief Two-pass stats buffer. - * - * A buffer containing all of the stats packets produced in the first - * pass, concatenated. - */ - vpx_fixed_buf_t rc_twopass_stats_in; - - /*!\brief first pass mb stats buffer. - * - * A buffer containing all of the first pass mb stats packets produced - * in the first pass, concatenated. - */ - vpx_fixed_buf_t rc_firstpass_mb_stats_in; - - /*!\brief Target data rate - * - * Target bandwidth to use for this stream, in kilobits per second. - */ - unsigned int rc_target_bitrate; - - /* - * quantizer settings - */ - - /*!\brief Minimum (Best Quality) Quantizer - * - * The quantizer is the most direct control over the quality of the - * encoded image. The range of valid values for the quantizer is codec - * specific. Consult the documentation for the codec to determine the - * values to use. - */ - unsigned int rc_min_quantizer; - - /*!\brief Maximum (Worst Quality) Quantizer - * - * The quantizer is the most direct control over the quality of the - * encoded image. The range of valid values for the quantizer is codec - * specific. Consult the documentation for the codec to determine the - * values to use. - */ - unsigned int rc_max_quantizer; - - /* - * bitrate tolerance - */ - - /*!\brief Rate control adaptation undershoot control - * - * VP8: Expressed as a percentage of the target bitrate, - * controls the maximum allowed adaptation speed of the codec. - * This factor controls the maximum amount of bits that can - * be subtracted from the target bitrate in order to compensate - * for prior overshoot. - * VP9: Expressed as a percentage of the target bitrate, a threshold - * undershoot level (current rate vs target) beyond which more aggressive - * corrective measures are taken. - * * - * Valid values in the range VP8:0-1000 VP9: 0-100. - */ - unsigned int rc_undershoot_pct; - - /*!\brief Rate control adaptation overshoot control - * - * VP8: Expressed as a percentage of the target bitrate, - * controls the maximum allowed adaptation speed of the codec. - * This factor controls the maximum amount of bits that can - * be added to the target bitrate in order to compensate for - * prior undershoot. - * VP9: Expressed as a percentage of the target bitrate, a threshold - * overshoot level (current rate vs target) beyond which more aggressive - * corrective measures are taken. - * - * Valid values in the range VP8:0-1000 VP9: 0-100. - */ - unsigned int rc_overshoot_pct; - - /* - * decoder buffer model parameters - */ - - /*!\brief Decoder Buffer Size - * - * This value indicates the amount of data that may be buffered by the - * decoding application. Note that this value is expressed in units of - * time (milliseconds). For example, a value of 5000 indicates that the - * client will buffer (at least) 5000ms worth of encoded data. Use the - * target bitrate (#rc_target_bitrate) to convert to bits/bytes, if - * necessary. - */ - unsigned int rc_buf_sz; - - /*!\brief Decoder Buffer Initial Size - * - * This value indicates the amount of data that will be buffered by the - * decoding application prior to beginning playback. This value is - * expressed in units of time (milliseconds). Use the target bitrate - * (#rc_target_bitrate) to convert to bits/bytes, if necessary. - */ - unsigned int rc_buf_initial_sz; - - /*!\brief Decoder Buffer Optimal Size - * - * This value indicates the amount of data that the encoder should try - * to maintain in the decoder's buffer. This value is expressed in units - * of time (milliseconds). Use the target bitrate (#rc_target_bitrate) - * to convert to bits/bytes, if necessary. - */ - unsigned int rc_buf_optimal_sz; - - /* - * 2 pass rate control parameters - */ - - /*!\brief Two-pass mode CBR/VBR bias - * - * Bias, expressed on a scale of 0 to 100, for determining target size - * for the current frame. The value 0 indicates the optimal CBR mode - * value should be used. The value 100 indicates the optimal VBR mode - * value should be used. Values in between indicate which way the - * encoder should "lean." - */ - unsigned int rc_2pass_vbr_bias_pct; - - /*!\brief Two-pass mode per-GOP minimum bitrate - * - * This value, expressed as a percentage of the target bitrate, indicates - * the minimum bitrate to be used for a single GOP (aka "section") - */ - unsigned int rc_2pass_vbr_minsection_pct; - - /*!\brief Two-pass mode per-GOP maximum bitrate - * - * This value, expressed as a percentage of the target bitrate, indicates - * the maximum bitrate to be used for a single GOP (aka "section") - */ - unsigned int rc_2pass_vbr_maxsection_pct; - - /*!\brief Two-pass corpus vbr mode complexity control - * Used only in VP9: A value representing the corpus midpoint complexity - * for corpus vbr mode. This value defaults to 0 which disables corpus vbr - * mode in favour of normal vbr mode. - */ - unsigned int rc_2pass_vbr_corpus_complexity; - - /* - * keyframing settings (kf) - */ - - /*!\brief Keyframe placement mode - * - * This value indicates whether the encoder should place keyframes at a - * fixed interval, or determine the optimal placement automatically - * (as governed by the #kf_min_dist and #kf_max_dist parameters) - */ - enum vpx_kf_mode kf_mode; - - /*!\brief Keyframe minimum interval - * - * This value, expressed as a number of frames, prevents the encoder from - * placing a keyframe nearer than kf_min_dist to the previous keyframe. At - * least kf_min_dist frames non-keyframes will be coded before the next - * keyframe. Set kf_min_dist equal to kf_max_dist for a fixed interval. - */ - unsigned int kf_min_dist; - - /*!\brief Keyframe maximum interval - * - * This value, expressed as a number of frames, forces the encoder to code - * a keyframe if one has not been coded in the last kf_max_dist frames. - * A value of 0 implies all frames will be keyframes. Set kf_min_dist - * equal to kf_max_dist for a fixed interval. - */ - unsigned int kf_max_dist; - - /* - * Spatial scalability settings (ss) - */ - - /*!\brief Number of spatial coding layers. - * - * This value specifies the number of spatial coding layers to be used. - */ - unsigned int ss_number_layers; - - /*!\brief Enable auto alt reference flags for each spatial layer. - * - * These values specify if auto alt reference frame is enabled for each - * spatial layer. - */ - int ss_enable_auto_alt_ref[VPX_SS_MAX_LAYERS]; - - /*!\brief Target bitrate for each spatial layer. - * - * These values specify the target coding bitrate to be used for each - * spatial layer. - */ - unsigned int ss_target_bitrate[VPX_SS_MAX_LAYERS]; - - /*!\brief Number of temporal coding layers. - * - * This value specifies the number of temporal layers to be used. - */ - unsigned int ts_number_layers; - - /*!\brief Target bitrate for each temporal layer. - * - * These values specify the target coding bitrate to be used for each - * temporal layer. - */ - unsigned int ts_target_bitrate[VPX_TS_MAX_LAYERS]; - - /*!\brief Frame rate decimation factor for each temporal layer. - * - * These values specify the frame rate decimation factors to apply - * to each temporal layer. - */ - unsigned int ts_rate_decimator[VPX_TS_MAX_LAYERS]; - - /*!\brief Length of the sequence defining frame temporal layer membership. - * - * This value specifies the length of the sequence that defines the - * membership of frames to temporal layers. For example, if the - * ts_periodicity = 8, then the frames are assigned to coding layers with a - * repeated sequence of length 8. - */ - unsigned int ts_periodicity; - - /*!\brief Template defining the membership of frames to temporal layers. - * - * This array defines the membership of frames to temporal coding layers. - * For a 2-layer encoding that assigns even numbered frames to one temporal - * layer (0) and odd numbered frames to a second temporal layer (1) with - * ts_periodicity=8, then ts_layer_id = (0,1,0,1,0,1,0,1). - */ - unsigned int ts_layer_id[VPX_TS_MAX_PERIODICITY]; - - /*!\brief Target bitrate for each spatial/temporal layer. - * - * These values specify the target coding bitrate to be used for each - * spatial/temporal layer. - * - */ - unsigned int layer_target_bitrate[VPX_MAX_LAYERS]; - - /*!\brief Temporal layering mode indicating which temporal layering scheme to - * use. - * - * The value (refer to VP9E_TEMPORAL_LAYERING_MODE) specifies the - * temporal layering mode to use. - * - */ - int temporal_layering_mode; -} vpx_codec_enc_cfg_t; /**< alias for struct vpx_codec_enc_cfg */ - -/*!\brief vp9 svc extra configure parameters - * - * This defines max/min quantizers and scale factors for each layer - * - */ -typedef struct vpx_svc_parameters { - int max_quantizers[VPX_MAX_LAYERS]; /**< Max Q for each layer */ - int min_quantizers[VPX_MAX_LAYERS]; /**< Min Q for each layer */ - int scaling_factor_num[VPX_MAX_LAYERS]; /**< Scaling factor-numerator */ - int scaling_factor_den[VPX_MAX_LAYERS]; /**< Scaling factor-denominator */ - int speed_per_layer[VPX_MAX_LAYERS]; /**< Speed setting for each sl */ - int temporal_layering_mode; /**< Temporal layering mode */ -} vpx_svc_extra_cfg_t; - -/*!\brief Initialize an encoder instance - * - * Initializes a encoder context using the given interface. Applications - * should call the vpx_codec_enc_init convenience macro instead of this - * function directly, to ensure that the ABI version number parameter - * is properly initialized. - * - * If the library was configured with --disable-multithread, this call - * is not thread safe and should be guarded with a lock if being used - * in a multithreaded context. - * - * \param[in] ctx Pointer to this instance's context. - * \param[in] iface Pointer to the algorithm interface to use. - * \param[in] cfg Configuration to use, if known. May be NULL. - * \param[in] flags Bitfield of VPX_CODEC_USE_* flags - * \param[in] ver ABI version number. Must be set to - * VPX_ENCODER_ABI_VERSION - * \retval #VPX_CODEC_OK - * The decoder algorithm initialized. - * \retval #VPX_CODEC_MEM_ERROR - * Memory allocation failed. - */ -vpx_codec_err_t vpx_codec_enc_init_ver(vpx_codec_ctx_t *ctx, - vpx_codec_iface_t *iface, - const vpx_codec_enc_cfg_t *cfg, - vpx_codec_flags_t flags, int ver); - -/*!\brief Convenience macro for vpx_codec_enc_init_ver() - * - * Ensures the ABI version parameter is properly set. - */ -#define vpx_codec_enc_init(ctx, iface, cfg, flags) \ - vpx_codec_enc_init_ver(ctx, iface, cfg, flags, VPX_ENCODER_ABI_VERSION) - -/*!\brief Initialize multi-encoder instance - * - * Initializes multi-encoder context using the given interface. - * Applications should call the vpx_codec_enc_init_multi convenience macro - * instead of this function directly, to ensure that the ABI version number - * parameter is properly initialized. - * - * \param[in] ctx Pointer to this instance's context. - * \param[in] iface Pointer to the algorithm interface to use. - * \param[in] cfg Configuration to use, if known. May be NULL. - * \param[in] num_enc Total number of encoders. - * \param[in] flags Bitfield of VPX_CODEC_USE_* flags - * \param[in] dsf Pointer to down-sampling factors. - * \param[in] ver ABI version number. Must be set to - * VPX_ENCODER_ABI_VERSION - * \retval #VPX_CODEC_OK - * The decoder algorithm initialized. - * \retval #VPX_CODEC_MEM_ERROR - * Memory allocation failed. - */ -vpx_codec_err_t vpx_codec_enc_init_multi_ver( - vpx_codec_ctx_t *ctx, vpx_codec_iface_t *iface, vpx_codec_enc_cfg_t *cfg, - int num_enc, vpx_codec_flags_t flags, vpx_rational_t *dsf, int ver); - -/*!\brief Convenience macro for vpx_codec_enc_init_multi_ver() - * - * Ensures the ABI version parameter is properly set. - */ -#define vpx_codec_enc_init_multi(ctx, iface, cfg, num_enc, flags, dsf) \ - vpx_codec_enc_init_multi_ver(ctx, iface, cfg, num_enc, flags, dsf, \ - VPX_ENCODER_ABI_VERSION) - -/*!\brief Get a default configuration - * - * Initializes a encoder configuration structure with default values. Supports - * the notion of "usages" so that an algorithm may offer different default - * settings depending on the user's intended goal. This function \ref SHOULD - * be called by all applications to initialize the configuration structure - * before specializing the configuration with application specific values. - * - * \param[in] iface Pointer to the algorithm interface to use. - * \param[out] cfg Configuration buffer to populate. - * \param[in] usage Must be set to 0. - * - * \retval #VPX_CODEC_OK - * The configuration was populated. - * \retval #VPX_CODEC_INCAPABLE - * Interface is not an encoder interface. - * \retval #VPX_CODEC_INVALID_PARAM - * A parameter was NULL, or the usage value was not recognized. - */ -vpx_codec_err_t vpx_codec_enc_config_default(vpx_codec_iface_t *iface, - vpx_codec_enc_cfg_t *cfg, - unsigned int usage); - -/*!\brief Set or change configuration - * - * Reconfigures an encoder instance according to the given configuration. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] cfg Configuration buffer to use - * - * \retval #VPX_CODEC_OK - * The configuration was populated. - * \retval #VPX_CODEC_INCAPABLE - * Interface is not an encoder interface. - * \retval #VPX_CODEC_INVALID_PARAM - * A parameter was NULL, or the usage value was not recognized. - */ -vpx_codec_err_t vpx_codec_enc_config_set(vpx_codec_ctx_t *ctx, - const vpx_codec_enc_cfg_t *cfg); - -/*!\brief Get global stream headers - * - * Retrieves a stream level global header packet, if supported by the codec. - * - * \param[in] ctx Pointer to this instance's context - * - * \retval NULL - * Encoder does not support global header - * \retval Non-NULL - * Pointer to buffer containing global header packet - */ -vpx_fixed_buf_t *vpx_codec_get_global_headers(vpx_codec_ctx_t *ctx); - -/*!\brief deadline parameter analogous to VPx REALTIME mode. */ -#define VPX_DL_REALTIME (1) -/*!\brief deadline parameter analogous to VPx GOOD QUALITY mode. */ -#define VPX_DL_GOOD_QUALITY (1000000) -/*!\brief deadline parameter analogous to VPx BEST QUALITY mode. */ -#define VPX_DL_BEST_QUALITY (0) -/*!\brief Encode a frame - * - * Encodes a video frame at the given "presentation time." The presentation - * time stamp (PTS) \ref MUST be strictly increasing. - * - * The encoder supports the notion of a soft real-time deadline. Given a - * non-zero value to the deadline parameter, the encoder will make a "best - * effort" guarantee to return before the given time slice expires. It is - * implicit that limiting the available time to encode will degrade the - * output quality. The encoder can be given an unlimited time to produce the - * best possible frame by specifying a deadline of '0'. This deadline - * supersedes the VPx notion of "best quality, good quality, realtime". - * Applications that wish to map these former settings to the new deadline - * based system can use the symbols #VPX_DL_REALTIME, #VPX_DL_GOOD_QUALITY, - * and #VPX_DL_BEST_QUALITY. - * - * When the last frame has been passed to the encoder, this function should - * continue to be called, with the img parameter set to NULL. This will - * signal the end-of-stream condition to the encoder and allow it to encode - * any held buffers. Encoding is complete when vpx_codec_encode() is called - * and vpx_codec_get_cx_data() returns no data. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] img Image data to encode, NULL to flush. - * \param[in] pts Presentation time stamp, in timebase units. - * \param[in] duration Duration to show frame, in timebase units. - * \param[in] flags Flags to use for encoding this frame. - * \param[in] deadline Time to spend encoding, in microseconds. (0=infinite) - * - * \retval #VPX_CODEC_OK - * The configuration was populated. - * \retval #VPX_CODEC_INCAPABLE - * Interface is not an encoder interface. - * \retval #VPX_CODEC_INVALID_PARAM - * A parameter was NULL, the image format is unsupported, etc. - */ -vpx_codec_err_t vpx_codec_encode(vpx_codec_ctx_t *ctx, const vpx_image_t *img, - vpx_codec_pts_t pts, unsigned long duration, - vpx_enc_frame_flags_t flags, - unsigned long deadline); - -/*!\brief Set compressed data output buffer - * - * Sets the buffer that the codec should output the compressed data - * into. This call effectively sets the buffer pointer returned in the - * next VPX_CODEC_CX_FRAME_PKT packet. Subsequent packets will be - * appended into this buffer. The buffer is preserved across frames, - * so applications must periodically call this function after flushing - * the accumulated compressed data to disk or to the network to reset - * the pointer to the buffer's head. - * - * `pad_before` bytes will be skipped before writing the compressed - * data, and `pad_after` bytes will be appended to the packet. The size - * of the packet will be the sum of the size of the actual compressed - * data, pad_before, and pad_after. The padding bytes will be preserved - * (not overwritten). - * - * Note that calling this function does not guarantee that the returned - * compressed data will be placed into the specified buffer. In the - * event that the encoded data will not fit into the buffer provided, - * the returned packet \ref MAY point to an internal buffer, as it would - * if this call were never used. In this event, the output packet will - * NOT have any padding, and the application must free space and copy it - * to the proper place. This is of particular note in configurations - * that may output multiple packets for a single encoded frame (e.g., lagged - * encoding) or if the application does not reset the buffer periodically. - * - * Applications may restore the default behavior of the codec providing - * the compressed data buffer by calling this function with a NULL - * buffer. - * - * Applications \ref MUSTNOT call this function during iteration of - * vpx_codec_get_cx_data(). - * - * \param[in] ctx Pointer to this instance's context - * \param[in] buf Buffer to store compressed data into - * \param[in] pad_before Bytes to skip before writing compressed data - * \param[in] pad_after Bytes to skip after writing compressed data - * - * \retval #VPX_CODEC_OK - * The buffer was set successfully. - * \retval #VPX_CODEC_INVALID_PARAM - * A parameter was NULL, the image format is unsupported, etc. - */ -vpx_codec_err_t vpx_codec_set_cx_data_buf(vpx_codec_ctx_t *ctx, - const vpx_fixed_buf_t *buf, - unsigned int pad_before, - unsigned int pad_after); - -/*!\brief Encoded data iterator - * - * Iterates over a list of data packets to be passed from the encoder to the - * application. The different kinds of packets available are enumerated in - * #vpx_codec_cx_pkt_kind. - * - * #VPX_CODEC_CX_FRAME_PKT packets should be passed to the application's - * muxer. Multiple compressed frames may be in the list. - * #VPX_CODEC_STATS_PKT packets should be appended to a global buffer. - * - * The application \ref MUST silently ignore any packet kinds that it does - * not recognize or support. - * - * The data buffers returned from this function are only guaranteed to be - * valid until the application makes another call to any vpx_codec_* function. - * - * \param[in] ctx Pointer to this instance's context - * \param[in,out] iter Iterator storage, initialized to NULL - * - * \return Returns a pointer to an output data packet (compressed frame data, - * two-pass statistics, etc.) or NULL to signal end-of-list. - * - */ -const vpx_codec_cx_pkt_t *vpx_codec_get_cx_data(vpx_codec_ctx_t *ctx, - vpx_codec_iter_t *iter); - -/*!\brief Get Preview Frame - * - * Returns an image that can be used as a preview. Shows the image as it would - * exist at the decompressor. The application \ref MUST NOT write into this - * image buffer. - * - * \param[in] ctx Pointer to this instance's context - * - * \return Returns a pointer to a preview image, or NULL if no image is - * available. - * - */ -const vpx_image_t *vpx_codec_get_preview_frame(vpx_codec_ctx_t *ctx); - -/*!@} - end defgroup encoder*/ -#ifdef __cplusplus -} -#endif -#endif // VPX_VPX_VPX_ENCODER_H_ diff --git a/vpx-encoder/android_include/vpx/vpx_frame_buffer.h b/vpx-encoder/android_include/vpx/vpx_frame_buffer.h deleted file mode 100644 index 2813ca6d..00000000 --- a/vpx-encoder/android_include/vpx/vpx_frame_buffer.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2014 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef VPX_VPX_VPX_FRAME_BUFFER_H_ -#define VPX_VPX_VPX_FRAME_BUFFER_H_ - -/*!\file - * \brief Describes the decoder external frame buffer interface. - */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "./vpx_integer.h" - -/*!\brief The maximum number of work buffers used by libvpx. - * Support maximum 4 threads to decode video in parallel. - * Each thread will use one work buffer. - * TODO(hkuang): Add support to set number of worker threads dynamically. - */ -#define VPX_MAXIMUM_WORK_BUFFERS 8 - -/*!\brief The maximum number of reference buffers that a VP9 encoder may use. - */ -#define VP9_MAXIMUM_REF_BUFFERS 8 - -/*!\brief External frame buffer - * - * This structure holds allocated frame buffers used by the decoder. - */ -typedef struct vpx_codec_frame_buffer { - uint8_t *data; /**< Pointer to the data buffer */ - size_t size; /**< Size of data in bytes */ - void *priv; /**< Frame's private data */ -} vpx_codec_frame_buffer_t; - -/*!\brief get frame buffer callback prototype - * - * This callback is invoked by the decoder to retrieve data for the frame - * buffer in order for the decode call to complete. The callback must - * allocate at least min_size in bytes and assign it to fb->data. The callback - * must zero out all the data allocated. Then the callback must set fb->size - * to the allocated size. The application does not need to align the allocated - * data. The callback is triggered when the decoder needs a frame buffer to - * decode a compressed image into. This function may be called more than once - * for every call to vpx_codec_decode. The application may set fb->priv to - * some data which will be passed back in the ximage and the release function - * call. |fb| is guaranteed to not be NULL. On success the callback must - * return 0. Any failure the callback must return a value less than 0. - * - * \param[in] priv Callback's private data - * \param[in] min_size Size in bytes needed by the buffer - * \param[in,out] fb Pointer to vpx_codec_frame_buffer_t - */ -typedef int (*vpx_get_frame_buffer_cb_fn_t)(void *priv, size_t min_size, - vpx_codec_frame_buffer_t *fb); - -/*!\brief release frame buffer callback prototype - * - * This callback is invoked by the decoder when the frame buffer is not - * referenced by any other buffers. |fb| is guaranteed to not be NULL. On - * success the callback must return 0. Any failure the callback must return - * a value less than 0. - * - * \param[in] priv Callback's private data - * \param[in] fb Pointer to vpx_codec_frame_buffer_t - */ -typedef int (*vpx_release_frame_buffer_cb_fn_t)(void *priv, - vpx_codec_frame_buffer_t *fb); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // VPX_VPX_VPX_FRAME_BUFFER_H_ diff --git a/vpx-encoder/android_include/vpx/vpx_image.h b/vpx-encoder/android_include/vpx/vpx_image.h deleted file mode 100644 index 98be5966..00000000 --- a/vpx-encoder/android_include/vpx/vpx_image.h +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -/*!\file - * \brief Describes the vpx image descriptor and associated operations - * - */ -#ifndef VPX_VPX_VPX_IMAGE_H_ -#define VPX_VPX_VPX_IMAGE_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*!\brief Current ABI version number - * - * \internal - * If this file is altered in any way that changes the ABI, this value - * must be bumped. Examples include, but are not limited to, changing - * types, removing or reassigning enums, adding/removing/rearranging - * fields to structures - */ -#define VPX_IMAGE_ABI_VERSION (5) /**<\hideinitializer*/ - -#define VPX_IMG_FMT_PLANAR 0x100 /**< Image is a planar format. */ -#define VPX_IMG_FMT_UV_FLIP 0x200 /**< V plane precedes U in memory. */ -#define VPX_IMG_FMT_HAS_ALPHA 0x400 /**< Image has an alpha channel. */ -#define VPX_IMG_FMT_HIGHBITDEPTH 0x800 /**< Image uses 16bit framebuffer. */ - -/*!\brief List of supported image formats */ -typedef enum vpx_img_fmt { - VPX_IMG_FMT_NONE, - VPX_IMG_FMT_YV12 = - VPX_IMG_FMT_PLANAR | VPX_IMG_FMT_UV_FLIP | 1, /**< planar YVU */ - VPX_IMG_FMT_I420 = VPX_IMG_FMT_PLANAR | 2, - VPX_IMG_FMT_I422 = VPX_IMG_FMT_PLANAR | 5, - VPX_IMG_FMT_I444 = VPX_IMG_FMT_PLANAR | 6, - VPX_IMG_FMT_I440 = VPX_IMG_FMT_PLANAR | 7, - VPX_IMG_FMT_I42016 = VPX_IMG_FMT_I420 | VPX_IMG_FMT_HIGHBITDEPTH, - VPX_IMG_FMT_I42216 = VPX_IMG_FMT_I422 | VPX_IMG_FMT_HIGHBITDEPTH, - VPX_IMG_FMT_I44416 = VPX_IMG_FMT_I444 | VPX_IMG_FMT_HIGHBITDEPTH, - VPX_IMG_FMT_I44016 = VPX_IMG_FMT_I440 | VPX_IMG_FMT_HIGHBITDEPTH -} vpx_img_fmt_t; /**< alias for enum vpx_img_fmt */ - -/*!\brief List of supported color spaces */ -typedef enum vpx_color_space { - VPX_CS_UNKNOWN = 0, /**< Unknown */ - VPX_CS_BT_601 = 1, /**< BT.601 */ - VPX_CS_BT_709 = 2, /**< BT.709 */ - VPX_CS_SMPTE_170 = 3, /**< SMPTE.170 */ - VPX_CS_SMPTE_240 = 4, /**< SMPTE.240 */ - VPX_CS_BT_2020 = 5, /**< BT.2020 */ - VPX_CS_RESERVED = 6, /**< Reserved */ - VPX_CS_SRGB = 7 /**< sRGB */ -} vpx_color_space_t; /**< alias for enum vpx_color_space */ - -/*!\brief List of supported color range */ -typedef enum vpx_color_range { - VPX_CR_STUDIO_RANGE = 0, /**< Y [16..235], UV [16..240] */ - VPX_CR_FULL_RANGE = 1 /**< YUV/RGB [0..255] */ -} vpx_color_range_t; /**< alias for enum vpx_color_range */ - -/**\brief Image Descriptor */ -typedef struct vpx_image { - vpx_img_fmt_t fmt; /**< Image Format */ - vpx_color_space_t cs; /**< Color Space */ - vpx_color_range_t range; /**< Color Range */ - - /* Image storage dimensions */ - unsigned int w; /**< Stored image width */ - unsigned int h; /**< Stored image height */ - unsigned int bit_depth; /**< Stored image bit-depth */ - - /* Image display dimensions */ - unsigned int d_w; /**< Displayed image width */ - unsigned int d_h; /**< Displayed image height */ - - /* Image intended rendering dimensions */ - unsigned int r_w; /**< Intended rendering image width */ - unsigned int r_h; /**< Intended rendering image height */ - - /* Chroma subsampling info */ - unsigned int x_chroma_shift; /**< subsampling order, X */ - unsigned int y_chroma_shift; /**< subsampling order, Y */ - -/* Image data pointers. */ -#define VPX_PLANE_PACKED 0 /**< To be used for all packed formats */ -#define VPX_PLANE_Y 0 /**< Y (Luminance) plane */ -#define VPX_PLANE_U 1 /**< U (Chroma) plane */ -#define VPX_PLANE_V 2 /**< V (Chroma) plane */ -#define VPX_PLANE_ALPHA 3 /**< A (Transparency) plane */ - unsigned char *planes[4]; /**< pointer to the top left pixel for each plane */ - int stride[4]; /**< stride between rows for each plane */ - - int bps; /**< bits per sample (for packed formats) */ - - /*!\brief The following member may be set by the application to associate - * data with this image. - */ - void *user_priv; - - /* The following members should be treated as private. */ - unsigned char *img_data; /**< private */ - int img_data_owner; /**< private */ - int self_allocd; /**< private */ - - void *fb_priv; /**< Frame buffer data associated with the image. */ -} vpx_image_t; /**< alias for struct vpx_image */ - -/**\brief Representation of a rectangle on a surface */ -typedef struct vpx_image_rect { - unsigned int x; /**< leftmost column */ - unsigned int y; /**< topmost row */ - unsigned int w; /**< width */ - unsigned int h; /**< height */ -} vpx_image_rect_t; /**< alias for struct vpx_image_rect */ - -/*!\brief Open a descriptor, allocating storage for the underlying image - * - * Returns a descriptor for storing an image of the given format. The - * storage for the descriptor is allocated on the heap. - * - * \param[in] img Pointer to storage for descriptor. If this parameter - * is NULL, the storage for the descriptor will be - * allocated on the heap. - * \param[in] fmt Format for the image - * \param[in] d_w Width of the image - * \param[in] d_h Height of the image - * \param[in] align Alignment, in bytes, of the image buffer and - * each row in the image(stride). - * - * \return Returns a pointer to the initialized image descriptor. If the img - * parameter is non-null, the value of the img parameter will be - * returned. - */ -vpx_image_t *vpx_img_alloc(vpx_image_t *img, vpx_img_fmt_t fmt, - unsigned int d_w, unsigned int d_h, - unsigned int align); - -/*!\brief Open a descriptor, using existing storage for the underlying image - * - * Returns a descriptor for storing an image of the given format. The - * storage for descriptor has been allocated elsewhere, and a descriptor is - * desired to "wrap" that storage. - * - * \param[in] img Pointer to storage for descriptor. If this - * parameter is NULL, the storage for the descriptor - * will be allocated on the heap. - * \param[in] fmt Format for the image - * \param[in] d_w Width of the image - * \param[in] d_h Height of the image - * \param[in] stride_align Alignment, in bytes, of each row in the image. - * \param[in] img_data Storage to use for the image - * - * \return Returns a pointer to the initialized image descriptor. If the img - * parameter is non-null, the value of the img parameter will be - * returned. - */ -vpx_image_t *vpx_img_wrap(vpx_image_t *img, vpx_img_fmt_t fmt, unsigned int d_w, - unsigned int d_h, unsigned int stride_align, - unsigned char *img_data); - -/*!\brief Set the rectangle identifying the displayed portion of the image - * - * Updates the displayed rectangle (aka viewport) on the image surface to - * match the specified coordinates and size. - * - * \param[in] img Image descriptor - * \param[in] x leftmost column - * \param[in] y topmost row - * \param[in] w width - * \param[in] h height - * - * \return 0 if the requested rectangle is valid, nonzero otherwise. - */ -int vpx_img_set_rect(vpx_image_t *img, unsigned int x, unsigned int y, - unsigned int w, unsigned int h); - -/*!\brief Flip the image vertically (top for bottom) - * - * Adjusts the image descriptor's pointers and strides to make the image - * be referenced upside-down. - * - * \param[in] img Image descriptor - */ -void vpx_img_flip(vpx_image_t *img); - -/*!\brief Close an image descriptor - * - * Frees all allocated storage associated with an image descriptor. - * - * \param[in] img Image descriptor - */ -void vpx_img_free(vpx_image_t *img); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // VPX_VPX_VPX_IMAGE_H_ diff --git a/vpx-encoder/android_include/vpx/vpx_integer.h b/vpx-encoder/android_include/vpx/vpx_integer.h deleted file mode 100644 index 4129d156..00000000 --- a/vpx-encoder/android_include/vpx/vpx_integer.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef VPX_VPX_VPX_INTEGER_H_ -#define VPX_VPX_VPX_INTEGER_H_ - -/* get ptrdiff_t, size_t, wchar_t, NULL */ -#include - -#if defined(_MSC_VER) -#define VPX_FORCE_INLINE __forceinline -#define VPX_INLINE __inline -#else -#define VPX_FORCE_INLINE __inline__ __attribute__((always_inline)) -// TODO(jbb): Allow a way to force inline off for older compilers. -#define VPX_INLINE inline -#endif - -/* Assume platforms have the C99 standard integer types. */ - -#if defined(__cplusplus) -#if !defined(__STDC_FORMAT_MACROS) -#define __STDC_FORMAT_MACROS -#endif -#if !defined(__STDC_LIMIT_MACROS) -#define __STDC_LIMIT_MACROS -#endif -#endif // __cplusplus - -#include -#include - -#endif // VPX_VPX_VPX_INTEGER_H_ diff --git a/vpx-encoder/android_libs/.DS_Store b/vpx-encoder/android_libs/.DS_Store deleted file mode 100644 index 5008ddfc..00000000 Binary files a/vpx-encoder/android_libs/.DS_Store and /dev/null differ diff --git a/vpx-encoder/android_libs/arm64-v8a/include/common/file_util.h b/vpx-encoder/android_libs/arm64-v8a/include/common/file_util.h deleted file mode 100644 index a8737346..00000000 --- a/vpx-encoder/android_libs/arm64-v8a/include/common/file_util.h +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) 2016 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -#ifndef LIBWEBM_COMMON_FILE_UTIL_H_ -#define LIBWEBM_COMMON_FILE_UTIL_H_ - -#include - -#include - -#include "mkvmuxer/mkvmuxertypes.h" // LIBWEBM_DISALLOW_COPY_AND_ASSIGN() - -namespace libwebm { - -// Returns a temporary file name. -std::string GetTempFileName(); - -// Returns size of file specified by |file_name|, or 0 upon failure. -uint64_t GetFileSize(const std::string& file_name); - -// Gets the contents file_name as a string. Returns false on error. -bool GetFileContents(const std::string& file_name, std::string* contents); - -// Manages life of temporary file specified at time of construction. Deletes -// file upon destruction. -class TempFileDeleter { - public: - TempFileDeleter(); - explicit TempFileDeleter(std::string file_name) : file_name_(file_name) {} - ~TempFileDeleter(); - const std::string& name() const { return file_name_; } - - private: - std::string file_name_; - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(TempFileDeleter); -}; - -} // namespace libwebm - -#endif // LIBWEBM_COMMON_FILE_UTIL_H_ diff --git a/vpx-encoder/android_libs/arm64-v8a/include/common/hdr_util.h b/vpx-encoder/android_libs/arm64-v8a/include/common/hdr_util.h deleted file mode 100644 index 78e2eeb7..00000000 --- a/vpx-encoder/android_libs/arm64-v8a/include/common/hdr_util.h +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (c) 2016 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -#ifndef LIBWEBM_COMMON_HDR_UTIL_H_ -#define LIBWEBM_COMMON_HDR_UTIL_H_ - -#include - -#include - -#include "mkvmuxer/mkvmuxer.h" - -namespace mkvparser { -struct Colour; -struct MasteringMetadata; -struct PrimaryChromaticity; -} // namespace mkvparser - -namespace libwebm { -// Utility types and functions for working with the Colour element and its -// children. Copiers return true upon success. Presence functions return true -// when the specified element is present. - -// TODO(tomfinegan): These should be moved to libwebm_utils once c++11 is -// required by libwebm. - -// Features of the VP9 codec that may be set in the CodecPrivate of a VP9 video -// stream. A value of kValueNotPresent represents that the value was not set in -// the CodecPrivate. -struct Vp9CodecFeatures { - static const int kValueNotPresent; - - Vp9CodecFeatures() - : profile(kValueNotPresent), - level(kValueNotPresent), - bit_depth(kValueNotPresent), - chroma_subsampling(kValueNotPresent) {} - ~Vp9CodecFeatures() {} - - int profile; - int level; - int bit_depth; - int chroma_subsampling; -}; - -typedef std::unique_ptr PrimaryChromaticityPtr; - -bool CopyPrimaryChromaticity(const mkvparser::PrimaryChromaticity& parser_pc, - PrimaryChromaticityPtr* muxer_pc); - -bool MasteringMetadataValuePresent(double value); - -bool CopyMasteringMetadata(const mkvparser::MasteringMetadata& parser_mm, - mkvmuxer::MasteringMetadata* muxer_mm); - -bool ColourValuePresent(long long value); - -bool CopyColour(const mkvparser::Colour& parser_colour, - mkvmuxer::Colour* muxer_colour); - -// Returns true if |features| is set to one or more valid values. -bool ParseVpxCodecPrivate(const uint8_t* private_data, int32_t length, - Vp9CodecFeatures* features); - -} // namespace libwebm - -#endif // LIBWEBM_COMMON_HDR_UTIL_H_ diff --git a/vpx-encoder/android_libs/arm64-v8a/include/common/webmids.h b/vpx-encoder/android_libs/arm64-v8a/include/common/webmids.h deleted file mode 100644 index fc0c2081..00000000 --- a/vpx-encoder/android_libs/arm64-v8a/include/common/webmids.h +++ /dev/null @@ -1,193 +0,0 @@ -// Copyright (c) 2012 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. - -#ifndef COMMON_WEBMIDS_H_ -#define COMMON_WEBMIDS_H_ - -namespace libwebm { - -enum MkvId { - kMkvEBML = 0x1A45DFA3, - kMkvEBMLVersion = 0x4286, - kMkvEBMLReadVersion = 0x42F7, - kMkvEBMLMaxIDLength = 0x42F2, - kMkvEBMLMaxSizeLength = 0x42F3, - kMkvDocType = 0x4282, - kMkvDocTypeVersion = 0x4287, - kMkvDocTypeReadVersion = 0x4285, - kMkvVoid = 0xEC, - kMkvSignatureSlot = 0x1B538667, - kMkvSignatureAlgo = 0x7E8A, - kMkvSignatureHash = 0x7E9A, - kMkvSignaturePublicKey = 0x7EA5, - kMkvSignature = 0x7EB5, - kMkvSignatureElements = 0x7E5B, - kMkvSignatureElementList = 0x7E7B, - kMkvSignedElement = 0x6532, - // segment - kMkvSegment = 0x18538067, - // Meta Seek Information - kMkvSeekHead = 0x114D9B74, - kMkvSeek = 0x4DBB, - kMkvSeekID = 0x53AB, - kMkvSeekPosition = 0x53AC, - // Segment Information - kMkvInfo = 0x1549A966, - kMkvTimecodeScale = 0x2AD7B1, - kMkvDuration = 0x4489, - kMkvDateUTC = 0x4461, - kMkvTitle = 0x7BA9, - kMkvMuxingApp = 0x4D80, - kMkvWritingApp = 0x5741, - // Cluster - kMkvCluster = 0x1F43B675, - kMkvTimecode = 0xE7, - kMkvPrevSize = 0xAB, - kMkvBlockGroup = 0xA0, - kMkvBlock = 0xA1, - kMkvBlockDuration = 0x9B, - kMkvReferenceBlock = 0xFB, - kMkvLaceNumber = 0xCC, - kMkvSimpleBlock = 0xA3, - kMkvBlockAdditions = 0x75A1, - kMkvBlockMore = 0xA6, - kMkvBlockAddID = 0xEE, - kMkvBlockAdditional = 0xA5, - kMkvDiscardPadding = 0x75A2, - // Track - kMkvTracks = 0x1654AE6B, - kMkvTrackEntry = 0xAE, - kMkvTrackNumber = 0xD7, - kMkvTrackUID = 0x73C5, - kMkvTrackType = 0x83, - kMkvFlagEnabled = 0xB9, - kMkvFlagDefault = 0x88, - kMkvFlagForced = 0x55AA, - kMkvFlagLacing = 0x9C, - kMkvDefaultDuration = 0x23E383, - kMkvMaxBlockAdditionID = 0x55EE, - kMkvName = 0x536E, - kMkvLanguage = 0x22B59C, - kMkvCodecID = 0x86, - kMkvCodecPrivate = 0x63A2, - kMkvCodecName = 0x258688, - kMkvCodecDelay = 0x56AA, - kMkvSeekPreRoll = 0x56BB, - // video - kMkvVideo = 0xE0, - kMkvFlagInterlaced = 0x9A, - kMkvStereoMode = 0x53B8, - kMkvAlphaMode = 0x53C0, - kMkvPixelWidth = 0xB0, - kMkvPixelHeight = 0xBA, - kMkvPixelCropBottom = 0x54AA, - kMkvPixelCropTop = 0x54BB, - kMkvPixelCropLeft = 0x54CC, - kMkvPixelCropRight = 0x54DD, - kMkvDisplayWidth = 0x54B0, - kMkvDisplayHeight = 0x54BA, - kMkvDisplayUnit = 0x54B2, - kMkvAspectRatioType = 0x54B3, - kMkvColourSpace = 0x2EB524, - kMkvFrameRate = 0x2383E3, - // end video - // colour - kMkvColour = 0x55B0, - kMkvMatrixCoefficients = 0x55B1, - kMkvBitsPerChannel = 0x55B2, - kMkvChromaSubsamplingHorz = 0x55B3, - kMkvChromaSubsamplingVert = 0x55B4, - kMkvCbSubsamplingHorz = 0x55B5, - kMkvCbSubsamplingVert = 0x55B6, - kMkvChromaSitingHorz = 0x55B7, - kMkvChromaSitingVert = 0x55B8, - kMkvRange = 0x55B9, - kMkvTransferCharacteristics = 0x55BA, - kMkvPrimaries = 0x55BB, - kMkvMaxCLL = 0x55BC, - kMkvMaxFALL = 0x55BD, - // mastering metadata - kMkvMasteringMetadata = 0x55D0, - kMkvPrimaryRChromaticityX = 0x55D1, - kMkvPrimaryRChromaticityY = 0x55D2, - kMkvPrimaryGChromaticityX = 0x55D3, - kMkvPrimaryGChromaticityY = 0x55D4, - kMkvPrimaryBChromaticityX = 0x55D5, - kMkvPrimaryBChromaticityY = 0x55D6, - kMkvWhitePointChromaticityX = 0x55D7, - kMkvWhitePointChromaticityY = 0x55D8, - kMkvLuminanceMax = 0x55D9, - kMkvLuminanceMin = 0x55DA, - // end mastering metadata - // end colour - // projection - kMkvProjection = 0x7670, - kMkvProjectionType = 0x7671, - kMkvProjectionPrivate = 0x7672, - kMkvProjectionPoseYaw = 0x7673, - kMkvProjectionPosePitch = 0x7674, - kMkvProjectionPoseRoll = 0x7675, - // end projection - // audio - kMkvAudio = 0xE1, - kMkvSamplingFrequency = 0xB5, - kMkvOutputSamplingFrequency = 0x78B5, - kMkvChannels = 0x9F, - kMkvBitDepth = 0x6264, - // end audio - // ContentEncodings - kMkvContentEncodings = 0x6D80, - kMkvContentEncoding = 0x6240, - kMkvContentEncodingOrder = 0x5031, - kMkvContentEncodingScope = 0x5032, - kMkvContentEncodingType = 0x5033, - kMkvContentCompression = 0x5034, - kMkvContentCompAlgo = 0x4254, - kMkvContentCompSettings = 0x4255, - kMkvContentEncryption = 0x5035, - kMkvContentEncAlgo = 0x47E1, - kMkvContentEncKeyID = 0x47E2, - kMkvContentSignature = 0x47E3, - kMkvContentSigKeyID = 0x47E4, - kMkvContentSigAlgo = 0x47E5, - kMkvContentSigHashAlgo = 0x47E6, - kMkvContentEncAESSettings = 0x47E7, - kMkvAESSettingsCipherMode = 0x47E8, - kMkvAESSettingsCipherInitData = 0x47E9, - // end ContentEncodings - // Cueing Data - kMkvCues = 0x1C53BB6B, - kMkvCuePoint = 0xBB, - kMkvCueTime = 0xB3, - kMkvCueTrackPositions = 0xB7, - kMkvCueTrack = 0xF7, - kMkvCueClusterPosition = 0xF1, - kMkvCueBlockNumber = 0x5378, - // Chapters - kMkvChapters = 0x1043A770, - kMkvEditionEntry = 0x45B9, - kMkvChapterAtom = 0xB6, - kMkvChapterUID = 0x73C4, - kMkvChapterStringUID = 0x5654, - kMkvChapterTimeStart = 0x91, - kMkvChapterTimeEnd = 0x92, - kMkvChapterDisplay = 0x80, - kMkvChapString = 0x85, - kMkvChapLanguage = 0x437C, - kMkvChapCountry = 0x437E, - // Tags - kMkvTags = 0x1254C367, - kMkvTag = 0x7373, - kMkvSimpleTag = 0x67C8, - kMkvTagName = 0x45A3, - kMkvTagString = 0x4487 -}; - -} // namespace libwebm - -#endif // COMMON_WEBMIDS_H_ diff --git a/vpx-encoder/android_libs/arm64-v8a/include/mkvmuxer/mkvmuxer.h b/vpx-encoder/android_libs/arm64-v8a/include/mkvmuxer/mkvmuxer.h deleted file mode 100644 index f2db3771..00000000 --- a/vpx-encoder/android_libs/arm64-v8a/include/mkvmuxer/mkvmuxer.h +++ /dev/null @@ -1,1924 +0,0 @@ -// Copyright (c) 2012 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. - -#ifndef MKVMUXER_MKVMUXER_H_ -#define MKVMUXER_MKVMUXER_H_ - -#include - -#include -#include -#include - -#include "common/webmids.h" -#include "mkvmuxer/mkvmuxertypes.h" - -// For a description of the WebM elements see -// http://www.webmproject.org/code/specs/container/. - -namespace mkvparser { -class IMkvReader; -} // namespace mkvparser - -namespace mkvmuxer { - -class MkvWriter; -class Segment; - -const uint64_t kMaxTrackNumber = 126; - -/////////////////////////////////////////////////////////////// -// Interface used by the mkvmuxer to write out the Mkv data. -class IMkvWriter { - public: - // Writes out |len| bytes of |buf|. Returns 0 on success. - virtual int32 Write(const void* buf, uint32 len) = 0; - - // Returns the offset of the output position from the beginning of the - // output. - virtual int64 Position() const = 0; - - // Set the current File position. Returns 0 on success. - virtual int32 Position(int64 position) = 0; - - // Returns true if the writer is seekable. - virtual bool Seekable() const = 0; - - // Element start notification. Called whenever an element identifier is about - // to be written to the stream. |element_id| is the element identifier, and - // |position| is the location in the WebM stream where the first octet of the - // element identifier will be written. - // Note: the |MkvId| enumeration in webmids.hpp defines element values. - virtual void ElementStartNotify(uint64 element_id, int64 position) = 0; - - protected: - IMkvWriter(); - virtual ~IMkvWriter(); - - private: - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(IMkvWriter); -}; - -// Writes out the EBML header for a WebM file, but allows caller to specify -// DocType. This function must be called before any other libwebm writing -// functions are called. -bool WriteEbmlHeader(IMkvWriter* writer, uint64_t doc_type_version, - const char* const doc_type); - -// Writes out the EBML header for a WebM file. This function must be called -// before any other libwebm writing functions are called. -bool WriteEbmlHeader(IMkvWriter* writer, uint64_t doc_type_version); - -// Deprecated. Writes out EBML header with doc_type_version as -// kDefaultDocTypeVersion. Exists for backward compatibility. -bool WriteEbmlHeader(IMkvWriter* writer); - -// Copies in Chunk from source to destination between the given byte positions -bool ChunkedCopy(mkvparser::IMkvReader* source, IMkvWriter* dst, int64_t start, - int64_t size); - -/////////////////////////////////////////////////////////////// -// Class to hold data the will be written to a block. -class Frame { - public: - Frame(); - ~Frame(); - - // Sets this frame's contents based on |frame|. Returns true on success. On - // failure, this frame's existing contents may be lost. - bool CopyFrom(const Frame& frame); - - // Copies |frame| data into |frame_|. Returns true on success. - bool Init(const uint8_t* frame, uint64_t length); - - // Copies |additional| data into |additional_|. Returns true on success. - bool AddAdditionalData(const uint8_t* additional, uint64_t length, - uint64_t add_id); - - // Returns true if the frame has valid parameters. - bool IsValid() const; - - // Returns true if the frame can be written as a SimpleBlock based on current - // parameters. - bool CanBeSimpleBlock() const; - - uint64_t add_id() const { return add_id_; } - const uint8_t* additional() const { return additional_; } - uint64_t additional_length() const { return additional_length_; } - void set_duration(uint64_t duration); - uint64_t duration() const { return duration_; } - bool duration_set() const { return duration_set_; } - const uint8_t* frame() const { return frame_; } - void set_is_key(bool key) { is_key_ = key; } - bool is_key() const { return is_key_; } - uint64_t length() const { return length_; } - void set_track_number(uint64_t track_number) { track_number_ = track_number; } - uint64_t track_number() const { return track_number_; } - void set_timestamp(uint64_t timestamp) { timestamp_ = timestamp; } - uint64_t timestamp() const { return timestamp_; } - void set_discard_padding(int64_t discard_padding) { - discard_padding_ = discard_padding; - } - int64_t discard_padding() const { return discard_padding_; } - void set_reference_block_timestamp(int64_t reference_block_timestamp); - int64_t reference_block_timestamp() const { - return reference_block_timestamp_; - } - bool reference_block_timestamp_set() const { - return reference_block_timestamp_set_; - } - - private: - // Id of the Additional data. - uint64_t add_id_; - - // Pointer to additional data. Owned by this class. - uint8_t* additional_; - - // Length of the additional data. - uint64_t additional_length_; - - // Duration of the frame in nanoseconds. - uint64_t duration_; - - // Flag indicating that |duration_| has been set. Setting duration causes the - // frame to be written out as a Block with BlockDuration instead of as a - // SimpleBlock. - bool duration_set_; - - // Pointer to the data. Owned by this class. - uint8_t* frame_; - - // Flag telling if the data should set the key flag of a block. - bool is_key_; - - // Length of the data. - uint64_t length_; - - // Mkv track number the data is associated with. - uint64_t track_number_; - - // Timestamp of the data in nanoseconds. - uint64_t timestamp_; - - // Discard padding for the frame. - int64_t discard_padding_; - - // Reference block timestamp. - int64_t reference_block_timestamp_; - - // Flag indicating if |reference_block_timestamp_| has been set. - bool reference_block_timestamp_set_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Frame); -}; - -/////////////////////////////////////////////////////////////// -// Class to hold one cue point in a Cues element. -class CuePoint { - public: - CuePoint(); - ~CuePoint(); - - // Returns the size in bytes for the entire CuePoint element. - uint64_t Size() const; - - // Output the CuePoint element to the writer. Returns true on success. - bool Write(IMkvWriter* writer) const; - - void set_time(uint64_t time) { time_ = time; } - uint64_t time() const { return time_; } - void set_track(uint64_t track) { track_ = track; } - uint64_t track() const { return track_; } - void set_cluster_pos(uint64_t cluster_pos) { cluster_pos_ = cluster_pos; } - uint64_t cluster_pos() const { return cluster_pos_; } - void set_block_number(uint64_t block_number) { block_number_ = block_number; } - uint64_t block_number() const { return block_number_; } - void set_output_block_number(bool output_block_number) { - output_block_number_ = output_block_number; - } - bool output_block_number() const { return output_block_number_; } - - private: - // Returns the size in bytes for the payload of the CuePoint element. - uint64_t PayloadSize() const; - - // Absolute timecode according to the segment time base. - uint64_t time_; - - // The Track element associated with the CuePoint. - uint64_t track_; - - // The position of the Cluster containing the Block. - uint64_t cluster_pos_; - - // Number of the Block within the Cluster, starting from 1. - uint64_t block_number_; - - // If true the muxer will write out the block number for the cue if the - // block number is different than the default of 1. Default is set to true. - bool output_block_number_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(CuePoint); -}; - -/////////////////////////////////////////////////////////////// -// Cues element. -class Cues { - public: - Cues(); - ~Cues(); - - // Adds a cue point to the Cues element. Returns true on success. - bool AddCue(CuePoint* cue); - - // Returns the cue point by index. Returns NULL if there is no cue point - // match. - CuePoint* GetCueByIndex(int32_t index) const; - - // Returns the total size of the Cues element - uint64_t Size(); - - // Output the Cues element to the writer. Returns true on success. - bool Write(IMkvWriter* writer) const; - - int32_t cue_entries_size() const { return cue_entries_size_; } - void set_output_block_number(bool output_block_number) { - output_block_number_ = output_block_number; - } - bool output_block_number() const { return output_block_number_; } - - private: - // Number of allocated elements in |cue_entries_|. - int32_t cue_entries_capacity_; - - // Number of CuePoints in |cue_entries_|. - int32_t cue_entries_size_; - - // CuePoint list. - CuePoint** cue_entries_; - - // If true the muxer will write out the block number for the cue if the - // block number is different than the default of 1. Default is set to true. - bool output_block_number_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Cues); -}; - -/////////////////////////////////////////////////////////////// -// ContentEncAESSettings element -class ContentEncAESSettings { - public: - enum { kCTR = 1 }; - - ContentEncAESSettings(); - ~ContentEncAESSettings() {} - - // Returns the size in bytes for the ContentEncAESSettings element. - uint64_t Size() const; - - // Writes out the ContentEncAESSettings element to |writer|. Returns true on - // success. - bool Write(IMkvWriter* writer) const; - - uint64_t cipher_mode() const { return cipher_mode_; } - - private: - // Returns the size in bytes for the payload of the ContentEncAESSettings - // element. - uint64_t PayloadSize() const; - - // Sub elements - uint64_t cipher_mode_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(ContentEncAESSettings); -}; - -/////////////////////////////////////////////////////////////// -// ContentEncoding element -// Elements used to describe if the track data has been encrypted or -// compressed with zlib or header stripping. -// Currently only whole frames can be encrypted with AES. This dictates that -// ContentEncodingOrder will be 0, ContentEncodingScope will be 1, -// ContentEncodingType will be 1, and ContentEncAlgo will be 5. -class ContentEncoding { - public: - ContentEncoding(); - ~ContentEncoding(); - - // Sets the content encryption id. Copies |length| bytes from |id| to - // |enc_key_id_|. Returns true on success. - bool SetEncryptionID(const uint8_t* id, uint64_t length); - - // Returns the size in bytes for the ContentEncoding element. - uint64_t Size() const; - - // Writes out the ContentEncoding element to |writer|. Returns true on - // success. - bool Write(IMkvWriter* writer) const; - - uint64_t enc_algo() const { return enc_algo_; } - uint64_t encoding_order() const { return encoding_order_; } - uint64_t encoding_scope() const { return encoding_scope_; } - uint64_t encoding_type() const { return encoding_type_; } - ContentEncAESSettings* enc_aes_settings() { return &enc_aes_settings_; } - - private: - // Returns the size in bytes for the encoding elements. - uint64_t EncodingSize(uint64_t compresion_size, - uint64_t encryption_size) const; - - // Returns the size in bytes for the encryption elements. - uint64_t EncryptionSize() const; - - // Track element names - uint64_t enc_algo_; - uint8_t* enc_key_id_; - uint64_t encoding_order_; - uint64_t encoding_scope_; - uint64_t encoding_type_; - - // ContentEncAESSettings element. - ContentEncAESSettings enc_aes_settings_; - - // Size of the ContentEncKeyID data in bytes. - uint64_t enc_key_id_length_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(ContentEncoding); -}; - -/////////////////////////////////////////////////////////////// -// Colour element. -class PrimaryChromaticity { - public: - static const float kChromaticityMin; - static const float kChromaticityMax; - - PrimaryChromaticity(float x_val, float y_val) : x_(x_val), y_(y_val) {} - PrimaryChromaticity() : x_(0), y_(0) {} - ~PrimaryChromaticity() {} - - // Returns sum of |x_id| and |y_id| element id sizes and payload sizes. - uint64_t PrimaryChromaticitySize(libwebm::MkvId x_id, - libwebm::MkvId y_id) const; - bool Valid() const; - bool Write(IMkvWriter* writer, libwebm::MkvId x_id, - libwebm::MkvId y_id) const; - - float x() const { return x_; } - void set_x(float new_x) { x_ = new_x; } - float y() const { return y_; } - void set_y(float new_y) { y_ = new_y; } - - private: - float x_; - float y_; -}; - -class MasteringMetadata { - public: - static const float kValueNotPresent; - static const float kMinLuminance; - static const float kMinLuminanceMax; - static const float kMaxLuminanceMax; - - MasteringMetadata() - : luminance_max_(kValueNotPresent), - luminance_min_(kValueNotPresent), - r_(NULL), - g_(NULL), - b_(NULL), - white_point_(NULL) {} - ~MasteringMetadata() { - delete r_; - delete g_; - delete b_; - delete white_point_; - } - - // Returns total size of the MasteringMetadata element. - uint64_t MasteringMetadataSize() const; - bool Valid() const; - bool Write(IMkvWriter* writer) const; - - // Copies non-null chromaticity. - bool SetChromaticity(const PrimaryChromaticity* r, - const PrimaryChromaticity* g, - const PrimaryChromaticity* b, - const PrimaryChromaticity* white_point); - const PrimaryChromaticity* r() const { return r_; } - const PrimaryChromaticity* g() const { return g_; } - const PrimaryChromaticity* b() const { return b_; } - const PrimaryChromaticity* white_point() const { return white_point_; } - - float luminance_max() const { return luminance_max_; } - void set_luminance_max(float luminance_max) { - luminance_max_ = luminance_max; - } - float luminance_min() const { return luminance_min_; } - void set_luminance_min(float luminance_min) { - luminance_min_ = luminance_min; - } - - private: - // Returns size of MasteringMetadata child elements. - uint64_t PayloadSize() const; - - float luminance_max_; - float luminance_min_; - PrimaryChromaticity* r_; - PrimaryChromaticity* g_; - PrimaryChromaticity* b_; - PrimaryChromaticity* white_point_; -}; - -class Colour { - public: - enum MatrixCoefficients { - kGbr = 0, - kBt709 = 1, - kUnspecifiedMc = 2, - kReserved = 3, - kFcc = 4, - kBt470bg = 5, - kSmpte170MMc = 6, - kSmpte240MMc = 7, - kYcocg = 8, - kBt2020NonConstantLuminance = 9, - kBt2020ConstantLuminance = 10, - }; - enum ChromaSitingHorz { - kUnspecifiedCsh = 0, - kLeftCollocated = 1, - kHalfCsh = 2, - }; - enum ChromaSitingVert { - kUnspecifiedCsv = 0, - kTopCollocated = 1, - kHalfCsv = 2, - }; - enum Range { - kUnspecifiedCr = 0, - kBroadcastRange = 1, - kFullRange = 2, - kMcTcDefined = 3, // Defined by MatrixCoefficients/TransferCharacteristics. - }; - enum TransferCharacteristics { - kIturBt709Tc = 1, - kUnspecifiedTc = 2, - kReservedTc = 3, - kGamma22Curve = 4, - kGamma28Curve = 5, - kSmpte170MTc = 6, - kSmpte240MTc = 7, - kLinear = 8, - kLog = 9, - kLogSqrt = 10, - kIec6196624 = 11, - kIturBt1361ExtendedColourGamut = 12, - kIec6196621 = 13, - kIturBt202010bit = 14, - kIturBt202012bit = 15, - kSmpteSt2084 = 16, - kSmpteSt4281Tc = 17, - kAribStdB67Hlg = 18, - }; - enum Primaries { - kReservedP0 = 0, - kIturBt709P = 1, - kUnspecifiedP = 2, - kReservedP3 = 3, - kIturBt470M = 4, - kIturBt470Bg = 5, - kSmpte170MP = 6, - kSmpte240MP = 7, - kFilm = 8, - kIturBt2020 = 9, - kSmpteSt4281P = 10, - kJedecP22Phosphors = 22, - }; - static const uint64_t kValueNotPresent; - Colour() - : matrix_coefficients_(kValueNotPresent), - bits_per_channel_(kValueNotPresent), - chroma_subsampling_horz_(kValueNotPresent), - chroma_subsampling_vert_(kValueNotPresent), - cb_subsampling_horz_(kValueNotPresent), - cb_subsampling_vert_(kValueNotPresent), - chroma_siting_horz_(kValueNotPresent), - chroma_siting_vert_(kValueNotPresent), - range_(kValueNotPresent), - transfer_characteristics_(kValueNotPresent), - primaries_(kValueNotPresent), - max_cll_(kValueNotPresent), - max_fall_(kValueNotPresent), - mastering_metadata_(NULL) {} - ~Colour() { delete mastering_metadata_; } - - // Returns total size of the Colour element. - uint64_t ColourSize() const; - bool Valid() const; - bool Write(IMkvWriter* writer) const; - - // Deep copies |mastering_metadata|. - bool SetMasteringMetadata(const MasteringMetadata& mastering_metadata); - - const MasteringMetadata* mastering_metadata() const { - return mastering_metadata_; - } - - uint64_t matrix_coefficients() const { return matrix_coefficients_; } - void set_matrix_coefficients(uint64_t matrix_coefficients) { - matrix_coefficients_ = matrix_coefficients; - } - uint64_t bits_per_channel() const { return bits_per_channel_; } - void set_bits_per_channel(uint64_t bits_per_channel) { - bits_per_channel_ = bits_per_channel; - } - uint64_t chroma_subsampling_horz() const { return chroma_subsampling_horz_; } - void set_chroma_subsampling_horz(uint64_t chroma_subsampling_horz) { - chroma_subsampling_horz_ = chroma_subsampling_horz; - } - uint64_t chroma_subsampling_vert() const { return chroma_subsampling_vert_; } - void set_chroma_subsampling_vert(uint64_t chroma_subsampling_vert) { - chroma_subsampling_vert_ = chroma_subsampling_vert; - } - uint64_t cb_subsampling_horz() const { return cb_subsampling_horz_; } - void set_cb_subsampling_horz(uint64_t cb_subsampling_horz) { - cb_subsampling_horz_ = cb_subsampling_horz; - } - uint64_t cb_subsampling_vert() const { return cb_subsampling_vert_; } - void set_cb_subsampling_vert(uint64_t cb_subsampling_vert) { - cb_subsampling_vert_ = cb_subsampling_vert; - } - uint64_t chroma_siting_horz() const { return chroma_siting_horz_; } - void set_chroma_siting_horz(uint64_t chroma_siting_horz) { - chroma_siting_horz_ = chroma_siting_horz; - } - uint64_t chroma_siting_vert() const { return chroma_siting_vert_; } - void set_chroma_siting_vert(uint64_t chroma_siting_vert) { - chroma_siting_vert_ = chroma_siting_vert; - } - uint64_t range() const { return range_; } - void set_range(uint64_t range) { range_ = range; } - uint64_t transfer_characteristics() const { - return transfer_characteristics_; - } - void set_transfer_characteristics(uint64_t transfer_characteristics) { - transfer_characteristics_ = transfer_characteristics; - } - uint64_t primaries() const { return primaries_; } - void set_primaries(uint64_t primaries) { primaries_ = primaries; } - uint64_t max_cll() const { return max_cll_; } - void set_max_cll(uint64_t max_cll) { max_cll_ = max_cll; } - uint64_t max_fall() const { return max_fall_; } - void set_max_fall(uint64_t max_fall) { max_fall_ = max_fall; } - - private: - // Returns size of Colour child elements. - uint64_t PayloadSize() const; - - uint64_t matrix_coefficients_; - uint64_t bits_per_channel_; - uint64_t chroma_subsampling_horz_; - uint64_t chroma_subsampling_vert_; - uint64_t cb_subsampling_horz_; - uint64_t cb_subsampling_vert_; - uint64_t chroma_siting_horz_; - uint64_t chroma_siting_vert_; - uint64_t range_; - uint64_t transfer_characteristics_; - uint64_t primaries_; - uint64_t max_cll_; - uint64_t max_fall_; - - MasteringMetadata* mastering_metadata_; -}; - -/////////////////////////////////////////////////////////////// -// Projection element. -class Projection { - public: - enum ProjectionType { - kTypeNotPresent = -1, - kRectangular = 0, - kEquirectangular = 1, - kCubeMap = 2, - kMesh = 3, - }; - static const uint64_t kValueNotPresent; - Projection() - : type_(kRectangular), - pose_yaw_(0.0), - pose_pitch_(0.0), - pose_roll_(0.0), - private_data_(NULL), - private_data_length_(0) {} - ~Projection() { delete[] private_data_; } - - uint64_t ProjectionSize() const; - bool Write(IMkvWriter* writer) const; - - bool SetProjectionPrivate(const uint8_t* private_data, - uint64_t private_data_length); - - ProjectionType type() const { return type_; } - void set_type(ProjectionType type) { type_ = type; } - float pose_yaw() const { return pose_yaw_; } - void set_pose_yaw(float pose_yaw) { pose_yaw_ = pose_yaw; } - float pose_pitch() const { return pose_pitch_; } - void set_pose_pitch(float pose_pitch) { pose_pitch_ = pose_pitch; } - float pose_roll() const { return pose_roll_; } - void set_pose_roll(float pose_roll) { pose_roll_ = pose_roll; } - uint8_t* private_data() const { return private_data_; } - uint64_t private_data_length() const { return private_data_length_; } - - private: - // Returns size of VideoProjection child elements. - uint64_t PayloadSize() const; - - ProjectionType type_; - float pose_yaw_; - float pose_pitch_; - float pose_roll_; - uint8_t* private_data_; - uint64_t private_data_length_; -}; - -/////////////////////////////////////////////////////////////// -// Track element. -class Track { - public: - // The |seed| parameter is used to synthesize a UID for the track. - explicit Track(unsigned int* seed); - virtual ~Track(); - - // Adds a ContentEncoding element to the Track. Returns true on success. - virtual bool AddContentEncoding(); - - // Returns the ContentEncoding by index. Returns NULL if there is no - // ContentEncoding match. - ContentEncoding* GetContentEncodingByIndex(uint32_t index) const; - - // Returns the size in bytes for the payload of the Track element. - virtual uint64_t PayloadSize() const; - - // Returns the size in bytes of the Track element. - virtual uint64_t Size() const; - - // Output the Track element to the writer. Returns true on success. - virtual bool Write(IMkvWriter* writer) const; - - // Sets the CodecPrivate element of the Track element. Copies |length| - // bytes from |codec_private| to |codec_private_|. Returns true on success. - bool SetCodecPrivate(const uint8_t* codec_private, uint64_t length); - - void set_codec_id(const char* codec_id); - const char* codec_id() const { return codec_id_; } - const uint8_t* codec_private() const { return codec_private_; } - void set_language(const char* language); - const char* language() const { return language_; } - void set_max_block_additional_id(uint64_t max_block_additional_id) { - max_block_additional_id_ = max_block_additional_id; - } - uint64_t max_block_additional_id() const { return max_block_additional_id_; } - void set_name(const char* name); - const char* name() const { return name_; } - void set_number(uint64_t number) { number_ = number; } - uint64_t number() const { return number_; } - void set_type(uint64_t type) { type_ = type; } - uint64_t type() const { return type_; } - void set_uid(uint64_t uid) { uid_ = uid; } - uint64_t uid() const { return uid_; } - void set_codec_delay(uint64_t codec_delay) { codec_delay_ = codec_delay; } - uint64_t codec_delay() const { return codec_delay_; } - void set_seek_pre_roll(uint64_t seek_pre_roll) { - seek_pre_roll_ = seek_pre_roll; - } - uint64_t seek_pre_roll() const { return seek_pre_roll_; } - void set_default_duration(uint64_t default_duration) { - default_duration_ = default_duration; - } - uint64_t default_duration() const { return default_duration_; } - - uint64_t codec_private_length() const { return codec_private_length_; } - uint32_t content_encoding_entries_size() const { - return content_encoding_entries_size_; - } - - private: - // Track element names. - char* codec_id_; - uint8_t* codec_private_; - char* language_; - uint64_t max_block_additional_id_; - char* name_; - uint64_t number_; - uint64_t type_; - uint64_t uid_; - uint64_t codec_delay_; - uint64_t seek_pre_roll_; - uint64_t default_duration_; - - // Size of the CodecPrivate data in bytes. - uint64_t codec_private_length_; - - // ContentEncoding element list. - ContentEncoding** content_encoding_entries_; - - // Number of ContentEncoding elements added. - uint32_t content_encoding_entries_size_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Track); -}; - -/////////////////////////////////////////////////////////////// -// Track that has video specific elements. -class VideoTrack : public Track { - public: - // Supported modes for stereo 3D. - enum StereoMode { - kMono = 0, - kSideBySideLeftIsFirst = 1, - kTopBottomRightIsFirst = 2, - kTopBottomLeftIsFirst = 3, - kSideBySideRightIsFirst = 11 - }; - - enum AlphaMode { kNoAlpha = 0, kAlpha = 1 }; - - // The |seed| parameter is used to synthesize a UID for the track. - explicit VideoTrack(unsigned int* seed); - virtual ~VideoTrack(); - - // Returns the size in bytes for the payload of the Track element plus the - // video specific elements. - virtual uint64_t PayloadSize() const; - - // Output the VideoTrack element to the writer. Returns true on success. - virtual bool Write(IMkvWriter* writer) const; - - // Sets the video's stereo mode. Returns true on success. - bool SetStereoMode(uint64_t stereo_mode); - - // Sets the video's alpha mode. Returns true on success. - bool SetAlphaMode(uint64_t alpha_mode); - - void set_display_height(uint64_t height) { display_height_ = height; } - uint64_t display_height() const { return display_height_; } - void set_display_width(uint64_t width) { display_width_ = width; } - uint64_t display_width() const { return display_width_; } - void set_pixel_height(uint64_t height) { pixel_height_ = height; } - uint64_t pixel_height() const { return pixel_height_; } - void set_pixel_width(uint64_t width) { pixel_width_ = width; } - uint64_t pixel_width() const { return pixel_width_; } - - void set_crop_left(uint64_t crop_left) { crop_left_ = crop_left; } - uint64_t crop_left() const { return crop_left_; } - void set_crop_right(uint64_t crop_right) { crop_right_ = crop_right; } - uint64_t crop_right() const { return crop_right_; } - void set_crop_top(uint64_t crop_top) { crop_top_ = crop_top; } - uint64_t crop_top() const { return crop_top_; } - void set_crop_bottom(uint64_t crop_bottom) { crop_bottom_ = crop_bottom; } - uint64_t crop_bottom() const { return crop_bottom_; } - - void set_frame_rate(double frame_rate) { frame_rate_ = frame_rate; } - double frame_rate() const { return frame_rate_; } - void set_height(uint64_t height) { height_ = height; } - uint64_t height() const { return height_; } - uint64_t stereo_mode() { return stereo_mode_; } - uint64_t alpha_mode() { return alpha_mode_; } - void set_width(uint64_t width) { width_ = width; } - uint64_t width() const { return width_; } - void set_colour_space(const char* colour_space); - const char* colour_space() const { return colour_space_; } - - Colour* colour() { return colour_; } - - // Deep copies |colour|. - bool SetColour(const Colour& colour); - - Projection* projection() { return projection_; } - - // Deep copies |projection|. - bool SetProjection(const Projection& projection); - - private: - // Returns the size in bytes of the Video element. - uint64_t VideoPayloadSize() const; - - // Video track element names. - uint64_t display_height_; - uint64_t display_width_; - uint64_t pixel_height_; - uint64_t pixel_width_; - uint64_t crop_left_; - uint64_t crop_right_; - uint64_t crop_top_; - uint64_t crop_bottom_; - double frame_rate_; - uint64_t height_; - uint64_t stereo_mode_; - uint64_t alpha_mode_; - uint64_t width_; - char* colour_space_; - - Colour* colour_; - Projection* projection_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(VideoTrack); -}; - -/////////////////////////////////////////////////////////////// -// Track that has audio specific elements. -class AudioTrack : public Track { - public: - // The |seed| parameter is used to synthesize a UID for the track. - explicit AudioTrack(unsigned int* seed); - virtual ~AudioTrack(); - - // Returns the size in bytes for the payload of the Track element plus the - // audio specific elements. - virtual uint64_t PayloadSize() const; - - // Output the AudioTrack element to the writer. Returns true on success. - virtual bool Write(IMkvWriter* writer) const; - - void set_bit_depth(uint64_t bit_depth) { bit_depth_ = bit_depth; } - uint64_t bit_depth() const { return bit_depth_; } - void set_channels(uint64_t channels) { channels_ = channels; } - uint64_t channels() const { return channels_; } - void set_sample_rate(double sample_rate) { sample_rate_ = sample_rate; } - double sample_rate() const { return sample_rate_; } - - private: - // Audio track element names. - uint64_t bit_depth_; - uint64_t channels_; - double sample_rate_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(AudioTrack); -}; - -/////////////////////////////////////////////////////////////// -// Tracks element -class Tracks { - public: - // Audio and video type defined by the Matroska specs. - enum { kVideo = 0x1, kAudio = 0x2 }; - - static const char kOpusCodecId[]; - static const char kVorbisCodecId[]; - static const char kAv1CodecId[]; - static const char kVp8CodecId[]; - static const char kVp9CodecId[]; - static const char kWebVttCaptionsId[]; - static const char kWebVttDescriptionsId[]; - static const char kWebVttMetadataId[]; - static const char kWebVttSubtitlesId[]; - - Tracks(); - ~Tracks(); - - // Adds a Track element to the Tracks object. |track| will be owned and - // deleted by the Tracks object. Returns true on success. |number| is the - // number to use for the track. |number| must be >= 0. If |number| == 0 - // then the muxer will decide on the track number. - bool AddTrack(Track* track, int32_t number); - - // Returns the track by index. Returns NULL if there is no track match. - const Track* GetTrackByIndex(uint32_t idx) const; - - // Search the Tracks and return the track that matches |tn|. Returns NULL - // if there is no track match. - Track* GetTrackByNumber(uint64_t track_number) const; - - // Returns true if the track number is an audio track. - bool TrackIsAudio(uint64_t track_number) const; - - // Returns true if the track number is a video track. - bool TrackIsVideo(uint64_t track_number) const; - - // Output the Tracks element to the writer. Returns true on success. - bool Write(IMkvWriter* writer) const; - - uint32_t track_entries_size() const { return track_entries_size_; } - - private: - // Track element list. - Track** track_entries_; - - // Number of Track elements added. - uint32_t track_entries_size_; - - // Whether or not Tracks element has already been written via IMkvWriter. - mutable bool wrote_tracks_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Tracks); -}; - -/////////////////////////////////////////////////////////////// -// Chapter element -// -class Chapter { - public: - // Set the identifier for this chapter. (This corresponds to the - // Cue Identifier line in WebVTT.) - // TODO(matthewjheaney): the actual serialization of this item in - // MKV is pending. - bool set_id(const char* id); - - // Converts the nanosecond start and stop times of this chapter to - // their corresponding timecode values, and stores them that way. - void set_time(const Segment& segment, uint64_t start_time_ns, - uint64_t end_time_ns); - - // Sets the uid for this chapter. Primarily used to enable - // deterministic output from the muxer. - void set_uid(const uint64_t uid) { uid_ = uid; } - - // Add a title string to this chapter, per the semantics described - // here: - // http://www.matroska.org/technical/specs/index.html - // - // The title ("chapter string") is a UTF-8 string. - // - // The language has ISO 639-2 representation, described here: - // http://www.loc.gov/standards/iso639-2/englangn.html - // http://www.loc.gov/standards/iso639-2/php/English_list.php - // If you specify NULL as the language value, this implies - // English ("eng"). - // - // The country value corresponds to the codes listed here: - // http://www.iana.org/domains/root/db/ - // - // The function returns false if the string could not be allocated. - bool add_string(const char* title, const char* language, const char* country); - - private: - friend class Chapters; - - // For storage of chapter titles that differ by language. - class Display { - public: - // Establish representation invariant for new Display object. - void Init(); - - // Reclaim resources, in anticipation of destruction. - void Clear(); - - // Copies the title to the |title_| member. Returns false on - // error. - bool set_title(const char* title); - - // Copies the language to the |language_| member. Returns false - // on error. - bool set_language(const char* language); - - // Copies the country to the |country_| member. Returns false on - // error. - bool set_country(const char* country); - - // If |writer| is non-NULL, serialize the Display sub-element of - // the Atom into the stream. Returns the Display element size on - // success, 0 if error. - uint64_t WriteDisplay(IMkvWriter* writer) const; - - private: - char* title_; - char* language_; - char* country_; - }; - - Chapter(); - ~Chapter(); - - // Establish the representation invariant for a newly-created - // Chapter object. The |seed| parameter is used to create the UID - // for this chapter atom. - void Init(unsigned int* seed); - - // Copies this Chapter object to a different one. This is used when - // expanding a plain array of Chapter objects (see Chapters). - void ShallowCopy(Chapter* dst) const; - - // Reclaim resources used by this Chapter object, pending its - // destruction. - void Clear(); - - // If there is no storage remaining on the |displays_| array for a - // new display object, creates a new, longer array and copies the - // existing Display objects to the new array. Returns false if the - // array cannot be expanded. - bool ExpandDisplaysArray(); - - // If |writer| is non-NULL, serialize the Atom sub-element into the - // stream. Returns the total size of the element on success, 0 if - // error. - uint64_t WriteAtom(IMkvWriter* writer) const; - - // The string identifier for this chapter (corresponds to WebVTT cue - // identifier). - char* id_; - - // Start timecode of the chapter. - uint64_t start_timecode_; - - // Stop timecode of the chapter. - uint64_t end_timecode_; - - // The binary identifier for this chapter. - uint64_t uid_; - - // The Atom element can contain multiple Display sub-elements, as - // the same logical title can be rendered in different languages. - Display* displays_; - - // The physical length (total size) of the |displays_| array. - int displays_size_; - - // The logical length (number of active elements) on the |displays_| - // array. - int displays_count_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Chapter); -}; - -/////////////////////////////////////////////////////////////// -// Chapters element -// -class Chapters { - public: - Chapters(); - ~Chapters(); - - Chapter* AddChapter(unsigned int* seed); - - // Returns the number of chapters that have been added. - int Count() const; - - // Output the Chapters element to the writer. Returns true on success. - bool Write(IMkvWriter* writer) const; - - private: - // Expands the chapters_ array if there is not enough space to contain - // another chapter object. Returns true on success. - bool ExpandChaptersArray(); - - // If |writer| is non-NULL, serialize the Edition sub-element of the - // Chapters element into the stream. Returns the Edition element - // size on success, 0 if error. - uint64_t WriteEdition(IMkvWriter* writer) const; - - // Total length of the chapters_ array. - int chapters_size_; - - // Number of active chapters on the chapters_ array. - int chapters_count_; - - // Array for storage of chapter objects. - Chapter* chapters_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Chapters); -}; - -/////////////////////////////////////////////////////////////// -// Tag element -// -class Tag { - public: - bool add_simple_tag(const char* tag_name, const char* tag_string); - - private: - // Tags calls Clear and the destructor of Tag - friend class Tags; - - // For storage of simple tags - class SimpleTag { - public: - // Establish representation invariant for new SimpleTag object. - void Init(); - - // Reclaim resources, in anticipation of destruction. - void Clear(); - - // Copies the title to the |tag_name_| member. Returns false on - // error. - bool set_tag_name(const char* tag_name); - - // Copies the language to the |tag_string_| member. Returns false - // on error. - bool set_tag_string(const char* tag_string); - - // If |writer| is non-NULL, serialize the SimpleTag sub-element of - // the Atom into the stream. Returns the SimpleTag element size on - // success, 0 if error. - uint64_t Write(IMkvWriter* writer) const; - - private: - char* tag_name_; - char* tag_string_; - }; - - Tag(); - ~Tag(); - - // Copies this Tag object to a different one. This is used when - // expanding a plain array of Tag objects (see Tags). - void ShallowCopy(Tag* dst) const; - - // Reclaim resources used by this Tag object, pending its - // destruction. - void Clear(); - - // If there is no storage remaining on the |simple_tags_| array for a - // new display object, creates a new, longer array and copies the - // existing SimpleTag objects to the new array. Returns false if the - // array cannot be expanded. - bool ExpandSimpleTagsArray(); - - // If |writer| is non-NULL, serialize the Tag sub-element into the - // stream. Returns the total size of the element on success, 0 if - // error. - uint64_t Write(IMkvWriter* writer) const; - - // The Atom element can contain multiple SimpleTag sub-elements - SimpleTag* simple_tags_; - - // The physical length (total size) of the |simple_tags_| array. - int simple_tags_size_; - - // The logical length (number of active elements) on the |simple_tags_| - // array. - int simple_tags_count_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Tag); -}; - -/////////////////////////////////////////////////////////////// -// Tags element -// -class Tags { - public: - Tags(); - ~Tags(); - - Tag* AddTag(); - - // Returns the number of tags that have been added. - int Count() const; - - // Output the Tags element to the writer. Returns true on success. - bool Write(IMkvWriter* writer) const; - - private: - // Expands the tags_ array if there is not enough space to contain - // another tag object. Returns true on success. - bool ExpandTagsArray(); - - // Total length of the tags_ array. - int tags_size_; - - // Number of active tags on the tags_ array. - int tags_count_; - - // Array for storage of tag objects. - Tag* tags_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Tags); -}; - -/////////////////////////////////////////////////////////////// -// Cluster element -// -// Notes: -// |Init| must be called before any other method in this class. -class Cluster { - public: - // |timecode| is the absolute timecode of the cluster. |cues_pos| is the - // position for the cluster within the segment that should be written in - // the cues element. |timecode_scale| is the timecode scale of the segment. - Cluster(uint64_t timecode, int64_t cues_pos, uint64_t timecode_scale, - bool write_last_frame_with_duration = false, - bool fixed_size_timecode = false); - ~Cluster(); - - bool Init(IMkvWriter* ptr_writer); - - // Adds a frame to be output in the file. The frame is written out through - // |writer_| if successful. Returns true on success. - bool AddFrame(const Frame* frame); - - // Adds a frame to be output in the file. The frame is written out through - // |writer_| if successful. Returns true on success. - // Inputs: - // data: Pointer to the data - // length: Length of the data - // track_number: Track to add the data to. Value returned by Add track - // functions. The range of allowed values is [1, 126]. - // timecode: Absolute (not relative to cluster) timestamp of the - // frame, expressed in timecode units. - // is_key: Flag telling whether or not this frame is a key frame. - bool AddFrame(const uint8_t* data, uint64_t length, uint64_t track_number, - uint64_t timecode, // timecode units (absolute) - bool is_key); - - // Adds a frame to be output in the file. The frame is written out through - // |writer_| if successful. Returns true on success. - // Inputs: - // data: Pointer to the data - // length: Length of the data - // additional: Pointer to the additional data - // additional_length: Length of the additional data - // add_id: Value of BlockAddID element - // track_number: Track to add the data to. Value returned by Add track - // functions. The range of allowed values is [1, 126]. - // abs_timecode: Absolute (not relative to cluster) timestamp of the - // frame, expressed in timecode units. - // is_key: Flag telling whether or not this frame is a key frame. - bool AddFrameWithAdditional(const uint8_t* data, uint64_t length, - const uint8_t* additional, - uint64_t additional_length, uint64_t add_id, - uint64_t track_number, uint64_t abs_timecode, - bool is_key); - - // Adds a frame to be output in the file. The frame is written out through - // |writer_| if successful. Returns true on success. - // Inputs: - // data: Pointer to the data. - // length: Length of the data. - // discard_padding: DiscardPadding element value. - // track_number: Track to add the data to. Value returned by Add track - // functions. The range of allowed values is [1, 126]. - // abs_timecode: Absolute (not relative to cluster) timestamp of the - // frame, expressed in timecode units. - // is_key: Flag telling whether or not this frame is a key frame. - bool AddFrameWithDiscardPadding(const uint8_t* data, uint64_t length, - int64_t discard_padding, - uint64_t track_number, uint64_t abs_timecode, - bool is_key); - - // Writes a frame of metadata to the output medium; returns true on - // success. - // Inputs: - // data: Pointer to the data - // length: Length of the data - // track_number: Track to add the data to. Value returned by Add track - // functions. The range of allowed values is [1, 126]. - // timecode: Absolute (not relative to cluster) timestamp of the - // metadata frame, expressed in timecode units. - // duration: Duration of metadata frame, in timecode units. - // - // The metadata frame is written as a block group, with a duration - // sub-element but no reference time sub-elements (indicating that - // it is considered a keyframe, per Matroska semantics). - bool AddMetadata(const uint8_t* data, uint64_t length, uint64_t track_number, - uint64_t timecode, uint64_t duration); - - // Increments the size of the cluster's data in bytes. - void AddPayloadSize(uint64_t size); - - // Closes the cluster so no more data can be written to it. Will update the - // cluster's size if |writer_| is seekable. Returns true on success. This - // variant of Finalize() fails when |write_last_frame_with_duration_| is set - // to true. - bool Finalize(); - - // Closes the cluster so no more data can be written to it. Will update the - // cluster's size if |writer_| is seekable. Returns true on success. - // Inputs: - // set_last_frame_duration: Boolean indicating whether or not the duration - // of the last frame should be set. If set to - // false, the |duration| value is ignored and - // |write_last_frame_with_duration_| will not be - // honored. - // duration: Duration of the Cluster in timecode scale. - bool Finalize(bool set_last_frame_duration, uint64_t duration); - - // Returns the size in bytes for the entire Cluster element. - uint64_t Size() const; - - // Given |abs_timecode|, calculates timecode relative to most recent timecode. - // Returns -1 on failure, or a relative timecode. - int64_t GetRelativeTimecode(int64_t abs_timecode) const; - - int64_t size_position() const { return size_position_; } - int32_t blocks_added() const { return blocks_added_; } - uint64_t payload_size() const { return payload_size_; } - int64_t position_for_cues() const { return position_for_cues_; } - uint64_t timecode() const { return timecode_; } - uint64_t timecode_scale() const { return timecode_scale_; } - void set_write_last_frame_with_duration(bool write_last_frame_with_duration) { - write_last_frame_with_duration_ = write_last_frame_with_duration; - } - bool write_last_frame_with_duration() const { - return write_last_frame_with_duration_; - } - - private: - // Iterator type for the |stored_frames_| map. - typedef std::map >::iterator FrameMapIterator; - - // Utility method that confirms that blocks can still be added, and that the - // cluster header has been written. Used by |DoWriteFrame*|. Returns true - // when successful. - bool PreWriteBlock(); - - // Utility method used by the |DoWriteFrame*| methods that handles the book - // keeping required after each block is written. - void PostWriteBlock(uint64_t element_size); - - // Does some verification and calls WriteFrame. - bool DoWriteFrame(const Frame* const frame); - - // Either holds back the given frame, or writes it out depending on whether or - // not |write_last_frame_with_duration_| is set. - bool QueueOrWriteFrame(const Frame* const frame); - - // Outputs the Cluster header to |writer_|. Returns true on success. - bool WriteClusterHeader(); - - // Number of blocks added to the cluster. - int32_t blocks_added_; - - // Flag telling if the cluster has been closed. - bool finalized_; - - // Flag indicating whether the cluster's timecode will always be written out - // using 8 bytes. - bool fixed_size_timecode_; - - // Flag telling if the cluster's header has been written. - bool header_written_; - - // The size of the cluster elements in bytes. - uint64_t payload_size_; - - // The file position used for cue points. - const int64_t position_for_cues_; - - // The file position of the cluster's size element. - int64_t size_position_; - - // The absolute timecode of the cluster. - const uint64_t timecode_; - - // The timecode scale of the Segment containing the cluster. - const uint64_t timecode_scale_; - - // Flag indicating whether the last frame of the cluster should be written as - // a Block with Duration. If set to true, then it will result in holding back - // of frames and the parameterized version of Finalize() must be called to - // finish writing the Cluster. - bool write_last_frame_with_duration_; - - // Map used to hold back frames, if required. Track number is the key. - std::map > stored_frames_; - - // Map from track number to the timestamp of the last block written for that - // track. - std::map last_block_timestamp_; - - // Pointer to the writer object. Not owned by this class. - IMkvWriter* writer_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Cluster); -}; - -/////////////////////////////////////////////////////////////// -// SeekHead element -class SeekHead { - public: - SeekHead(); - ~SeekHead(); - - // TODO(fgalligan): Change this to reserve a certain size. Then check how - // big the seek entry to be added is as not every seek entry will be the - // maximum size it could be. - // Adds a seek entry to be written out when the element is finalized. |id| - // must be the coded mkv element id. |pos| is the file position of the - // element. Returns true on success. - bool AddSeekEntry(uint32_t id, uint64_t pos); - - // Writes out SeekHead and SeekEntry elements. Returns true on success. - bool Finalize(IMkvWriter* writer) const; - - // Returns the id of the Seek Entry at the given index. Returns -1 if index is - // out of range. - uint32_t GetId(int index) const; - - // Returns the position of the Seek Entry at the given index. Returns -1 if - // index is out of range. - uint64_t GetPosition(int index) const; - - // Sets the Seek Entry id and position at given index. - // Returns true on success. - bool SetSeekEntry(int index, uint32_t id, uint64_t position); - - // Reserves space by writing out a Void element which will be updated with - // a SeekHead element later. Returns true on success. - bool Write(IMkvWriter* writer); - - // We are going to put a cap on the number of Seek Entries. - const static int32_t kSeekEntryCount = 5; - - private: - // Returns the maximum size in bytes of one seek entry. - uint64_t MaxEntrySize() const; - - // Seek entry id element list. - uint32_t seek_entry_id_[kSeekEntryCount]; - - // Seek entry pos element list. - uint64_t seek_entry_pos_[kSeekEntryCount]; - - // The file position of SeekHead element. - int64_t start_pos_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(SeekHead); -}; - -/////////////////////////////////////////////////////////////// -// Segment Information element -class SegmentInfo { - public: - SegmentInfo(); - ~SegmentInfo(); - - // Will update the duration if |duration_| is > 0.0. Returns true on success. - bool Finalize(IMkvWriter* writer) const; - - // Sets |muxing_app_| and |writing_app_|. - bool Init(); - - // Output the Segment Information element to the writer. Returns true on - // success. - bool Write(IMkvWriter* writer); - - void set_duration(double duration) { duration_ = duration; } - double duration() const { return duration_; } - void set_muxing_app(const char* app); - const char* muxing_app() const { return muxing_app_; } - void set_timecode_scale(uint64_t scale) { timecode_scale_ = scale; } - uint64_t timecode_scale() const { return timecode_scale_; } - void set_writing_app(const char* app); - const char* writing_app() const { return writing_app_; } - void set_date_utc(int64_t date_utc) { date_utc_ = date_utc; } - int64_t date_utc() const { return date_utc_; } - - private: - // Segment Information element names. - // Initially set to -1 to signify that a duration has not been set and should - // not be written out. - double duration_; - // Set to libwebm-%d.%d.%d.%d, major, minor, build, revision. - char* muxing_app_; - uint64_t timecode_scale_; - // Initially set to libwebm-%d.%d.%d.%d, major, minor, build, revision. - char* writing_app_; - // LLONG_MIN when DateUTC is not set. - int64_t date_utc_; - - // The file position of the duration element. - int64_t duration_pos_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(SegmentInfo); -}; - -/////////////////////////////////////////////////////////////// -// This class represents the main segment in a WebM file. Currently only -// supports one Segment element. -// -// Notes: -// |Init| must be called before any other method in this class. -class Segment { - public: - enum Mode { kLive = 0x1, kFile = 0x2 }; - - enum CuesPosition { - kAfterClusters = 0x0, // Position Cues after Clusters - Default - kBeforeClusters = 0x1 // Position Cues before Clusters - }; - - static const uint32_t kDefaultDocTypeVersion = 4; - static const uint64_t kDefaultMaxClusterDuration = 30000000000ULL; - - Segment(); - ~Segment(); - - // Initializes |SegmentInfo| and returns result. Always returns false when - // |ptr_writer| is NULL. - bool Init(IMkvWriter* ptr_writer); - - // Adds a generic track to the segment. Returns the newly-allocated - // track object (which is owned by the segment) on success, NULL on - // error. |number| is the number to use for the track. |number| - // must be >= 0. If |number| == 0 then the muxer will decide on the - // track number. - Track* AddTrack(int32_t number); - - // Adds a Vorbis audio track to the segment. Returns the number of the track - // on success, 0 on error. |number| is the number to use for the audio track. - // |number| must be >= 0. If |number| == 0 then the muxer will decide on - // the track number. - uint64_t AddAudioTrack(int32_t sample_rate, int32_t channels, int32_t number); - - // Adds an empty chapter to the chapters of this segment. Returns - // non-NULL on success. After adding the chapter, the caller should - // populate its fields via the Chapter member functions. - Chapter* AddChapter(); - - // Adds an empty tag to the tags of this segment. Returns - // non-NULL on success. After adding the tag, the caller should - // populate its fields via the Tag member functions. - Tag* AddTag(); - - // Adds a cue point to the Cues element. |timestamp| is the time in - // nanoseconds of the cue's time. |track| is the Track of the Cue. This - // function must be called after AddFrame to calculate the correct - // BlockNumber for the CuePoint. Returns true on success. - bool AddCuePoint(uint64_t timestamp, uint64_t track); - - // Adds a frame to be output in the file. Returns true on success. - // Inputs: - // data: Pointer to the data - // length: Length of the data - // track_number: Track to add the data to. Value returned by Add track - // functions. - // timestamp: Timestamp of the frame in nanoseconds from 0. - // is_key: Flag telling whether or not this frame is a key frame. - bool AddFrame(const uint8_t* data, uint64_t length, uint64_t track_number, - uint64_t timestamp_ns, bool is_key); - - // Writes a frame of metadata to the output medium; returns true on - // success. - // Inputs: - // data: Pointer to the data - // length: Length of the data - // track_number: Track to add the data to. Value returned by Add track - // functions. - // timecode: Absolute timestamp of the metadata frame, expressed - // in nanosecond units. - // duration: Duration of metadata frame, in nanosecond units. - // - // The metadata frame is written as a block group, with a duration - // sub-element but no reference time sub-elements (indicating that - // it is considered a keyframe, per Matroska semantics). - bool AddMetadata(const uint8_t* data, uint64_t length, uint64_t track_number, - uint64_t timestamp_ns, uint64_t duration_ns); - - // Writes a frame with additional data to the output medium; returns true on - // success. - // Inputs: - // data: Pointer to the data. - // length: Length of the data. - // additional: Pointer to additional data. - // additional_length: Length of additional data. - // add_id: Additional ID which identifies the type of additional data. - // track_number: Track to add the data to. Value returned by Add track - // functions. - // timestamp: Absolute timestamp of the frame, expressed in nanosecond - // units. - // is_key: Flag telling whether or not this frame is a key frame. - bool AddFrameWithAdditional(const uint8_t* data, uint64_t length, - const uint8_t* additional, - uint64_t additional_length, uint64_t add_id, - uint64_t track_number, uint64_t timestamp, - bool is_key); - - // Writes a frame with DiscardPadding to the output medium; returns true on - // success. - // Inputs: - // data: Pointer to the data. - // length: Length of the data. - // discard_padding: DiscardPadding element value. - // track_number: Track to add the data to. Value returned by Add track - // functions. - // timestamp: Absolute timestamp of the frame, expressed in nanosecond - // units. - // is_key: Flag telling whether or not this frame is a key frame. - bool AddFrameWithDiscardPadding(const uint8_t* data, uint64_t length, - int64_t discard_padding, - uint64_t track_number, uint64_t timestamp, - bool is_key); - - // Writes a Frame to the output medium. Chooses the correct way of writing - // the frame (Block vs SimpleBlock) based on the parameters passed. - // Inputs: - // frame: frame object - bool AddGenericFrame(const Frame* frame); - - // Adds a VP8 video track to the segment. Returns the number of the track on - // success, 0 on error. |number| is the number to use for the video track. - // |number| must be >= 0. If |number| == 0 then the muxer will decide on - // the track number. - uint64_t AddVideoTrack(int32_t width, int32_t height, int32_t number); - - // This function must be called after Finalize() if you need a copy of the - // output with Cues written before the Clusters. It will return false if the - // writer is not seekable of if chunking is set to true. - // Input parameters: - // reader - an IMkvReader object created with the same underlying file of the - // current writer object. Make sure to close the existing writer - // object before creating this so that all the data is properly - // flushed and available for reading. - // writer - an IMkvWriter object pointing to a *different* file than the one - // pointed by the current writer object. This file will contain the - // Cues element before the Clusters. - bool CopyAndMoveCuesBeforeClusters(mkvparser::IMkvReader* reader, - IMkvWriter* writer); - - // Sets which track to use for the Cues element. Must have added the track - // before calling this function. Returns true on success. |track_number| is - // returned by the Add track functions. - bool CuesTrack(uint64_t track_number); - - // This will force the muxer to create a new Cluster when the next frame is - // added. - void ForceNewClusterOnNextFrame(); - - // Writes out any frames that have not been written out. Finalizes the last - // cluster. May update the size and duration of the segment. May output the - // Cues element. May finalize the SeekHead element. Returns true on success. - bool Finalize(); - - // Returns the Cues object. - Cues* GetCues() { return &cues_; } - - // Returns the Segment Information object. - const SegmentInfo* GetSegmentInfo() const { return &segment_info_; } - SegmentInfo* GetSegmentInfo() { return &segment_info_; } - - // Search the Tracks and return the track that matches |track_number|. - // Returns NULL if there is no track match. - Track* GetTrackByNumber(uint64_t track_number) const; - - // Toggles whether to output a cues element. - void OutputCues(bool output_cues); - - // Toggles whether to write the last frame in each Cluster with Duration. - void AccurateClusterDuration(bool accurate_cluster_duration); - - // Toggles whether to write the Cluster Timecode using exactly 8 bytes. - void UseFixedSizeClusterTimecode(bool fixed_size_cluster_timecode); - - // Sets if the muxer will output files in chunks or not. |chunking| is a - // flag telling whether or not to turn on chunking. |filename| is the base - // filename for the chunk files. The header chunk file will be named - // |filename|.hdr and the data chunks will be named - // |filename|_XXXXXX.chk. Chunking implies that the muxer will be writing - // to files so the muxer will use the default MkvWriter class to control - // what data is written to what files. Returns true on success. - // TODO: Should we change the IMkvWriter Interface to add Open and Close? - // That will force the interface to be dependent on files. - bool SetChunking(bool chunking, const char* filename); - - bool chunking() const { return chunking_; } - uint64_t cues_track() const { return cues_track_; } - void set_max_cluster_duration(uint64_t max_cluster_duration) { - max_cluster_duration_ = max_cluster_duration; - } - uint64_t max_cluster_duration() const { return max_cluster_duration_; } - void set_max_cluster_size(uint64_t max_cluster_size) { - max_cluster_size_ = max_cluster_size; - } - uint64_t max_cluster_size() const { return max_cluster_size_; } - void set_mode(Mode mode) { mode_ = mode; } - Mode mode() const { return mode_; } - CuesPosition cues_position() const { return cues_position_; } - bool output_cues() const { return output_cues_; } - void set_estimate_file_duration(bool estimate_duration) { - estimate_file_duration_ = estimate_duration; - } - bool estimate_file_duration() const { return estimate_file_duration_; } - const SegmentInfo* segment_info() const { return &segment_info_; } - void set_duration(double duration) { duration_ = duration; } - double duration() const { return duration_; } - - // Returns true when codec IDs are valid for WebM. - bool DocTypeIsWebm() const; - - private: - // Checks if header information has been output and initialized. If not it - // will output the Segment element and initialize the SeekHead elment and - // Cues elements. - bool CheckHeaderInfo(); - - // Sets |doc_type_version_| based on the current element requirements. - void UpdateDocTypeVersion(); - - // Sets |name| according to how many chunks have been written. |ext| is the - // file extension. |name| must be deleted by the calling app. Returns true - // on success. - bool UpdateChunkName(const char* ext, char** name) const; - - // Returns the maximum offset within the segment's payload. When chunking - // this function is needed to determine offsets of elements within the - // chunked files. Returns -1 on error. - int64_t MaxOffset(); - - // Adds the frame to our frame array. - bool QueueFrame(Frame* frame); - - // Output all frames that are queued. Returns -1 on error, otherwise - // it returns the number of frames written. - int WriteFramesAll(); - - // Output all frames that are queued that have an end time that is less - // then |timestamp|. Returns true on success and if there are no frames - // queued. - bool WriteFramesLessThan(uint64_t timestamp); - - // Outputs the segment header, Segment Information element, SeekHead element, - // and Tracks element to |writer_|. - bool WriteSegmentHeader(); - - // Given a frame with the specified timestamp (nanosecond units) and - // keyframe status, determine whether a new cluster should be - // created, before writing enqueued frames and the frame itself. The - // function returns one of the following values: - // -1 = error: an out-of-order frame was detected - // 0 = do not create a new cluster, and write frame to the existing cluster - // 1 = create a new cluster, and write frame to that new cluster - // 2 = create a new cluster, and re-run test - int TestFrame(uint64_t track_num, uint64_t timestamp_ns, bool key) const; - - // Create a new cluster, using the earlier of the first enqueued - // frame, or the indicated time. Returns true on success. - bool MakeNewCluster(uint64_t timestamp_ns); - - // Checks whether a new cluster needs to be created, and if so - // creates a new cluster. Returns false if creation of a new cluster - // was necessary but creation was not successful. - bool DoNewClusterProcessing(uint64_t track_num, uint64_t timestamp_ns, - bool key); - - // Adjusts Cue Point values (to place Cues before Clusters) so that they - // reflect the correct offsets. - void MoveCuesBeforeClusters(); - - // This function recursively computes the correct cluster offsets (this is - // done to move the Cues before Clusters). It recursively updates the change - // in size (which indicates a change in cluster offset) until no sizes change. - // Parameters: - // diff - indicates the difference in size of the Cues element that needs to - // accounted for. - // index - index in the list of Cues which is currently being adjusted. - // cue_size - sum of size of all the CuePoint elements. - void MoveCuesBeforeClustersHelper(uint64_t diff, int index, - uint64_t* cue_size); - - // Seeds the random number generator used to make UIDs. - unsigned int seed_; - - // WebM elements - Cues cues_; - SeekHead seek_head_; - SegmentInfo segment_info_; - Tracks tracks_; - Chapters chapters_; - Tags tags_; - - // Number of chunks written. - int chunk_count_; - - // Current chunk filename. - char* chunk_name_; - - // Default MkvWriter object created by this class used for writing clusters - // out in separate files. - MkvWriter* chunk_writer_cluster_; - - // Default MkvWriter object created by this class used for writing Cues - // element out to a file. - MkvWriter* chunk_writer_cues_; - - // Default MkvWriter object created by this class used for writing the - // Matroska header out to a file. - MkvWriter* chunk_writer_header_; - - // Flag telling whether or not the muxer is chunking output to multiple - // files. - bool chunking_; - - // Base filename for the chunked files. - char* chunking_base_name_; - - // File position offset where the Clusters end. - int64_t cluster_end_offset_; - - // List of clusters. - Cluster** cluster_list_; - - // Number of cluster pointers allocated in the cluster list. - int32_t cluster_list_capacity_; - - // Number of clusters in the cluster list. - int32_t cluster_list_size_; - - // Indicates whether Cues should be written before or after Clusters - CuesPosition cues_position_; - - // Track number that is associated with the cues element for this segment. - uint64_t cues_track_; - - // Tells the muxer to force a new cluster on the next Block. - bool force_new_cluster_; - - // List of stored audio frames. These variables are used to store frames so - // the muxer can follow the guideline "Audio blocks that contain the video - // key frame's timecode should be in the same cluster as the video key frame - // block." - Frame** frames_; - - // Number of frame pointers allocated in the frame list. - int32_t frames_capacity_; - - // Number of frames in the frame list. - int32_t frames_size_; - - // Flag telling if a video track has been added to the segment. - bool has_video_; - - // Flag telling if the segment's header has been written. - bool header_written_; - - // Duration of the last block in nanoseconds. - uint64_t last_block_duration_; - - // Last timestamp in nanoseconds added to a cluster. - uint64_t last_timestamp_; - - // Last timestamp in nanoseconds by track number added to a cluster. - uint64_t last_track_timestamp_[kMaxTrackNumber]; - - // Number of frames written per track. - uint64_t track_frames_written_[kMaxTrackNumber]; - - // Maximum time in nanoseconds for a cluster duration. This variable is a - // guideline and some clusters may have a longer duration. Default is 30 - // seconds. - uint64_t max_cluster_duration_; - - // Maximum size in bytes for a cluster. This variable is a guideline and - // some clusters may have a larger size. Default is 0 which signifies that - // the muxer will decide the size. - uint64_t max_cluster_size_; - - // The mode that segment is in. If set to |kLive| the writer must not - // seek backwards. - Mode mode_; - - // Flag telling the muxer that a new cue point should be added. - bool new_cuepoint_; - - // TODO(fgalligan): Should we add support for more than one Cues element? - // Flag whether or not the muxer should output a Cues element. - bool output_cues_; - - // Flag whether or not the last frame in each Cluster will have a Duration - // element in it. - bool accurate_cluster_duration_; - - // Flag whether or not to write the Cluster Timecode using exactly 8 bytes. - bool fixed_size_cluster_timecode_; - - // Flag whether or not to estimate the file duration. - bool estimate_file_duration_; - - // The size of the EBML header, used to validate the header if - // WriteEbmlHeader() is called more than once. - int32_t ebml_header_size_; - - // The file position of the segment's payload. - int64_t payload_pos_; - - // The file position of the element's size. - int64_t size_position_; - - // Current DocTypeVersion (|doc_type_version_|) and that written in - // WriteSegmentHeader(). - // WriteEbmlHeader() will be called from Finalize() if |doc_type_version_| - // differs from |doc_type_version_written_|. - uint32_t doc_type_version_; - uint32_t doc_type_version_written_; - - // If |duration_| is > 0, then explicitly set the duration of the segment. - double duration_; - - // Pointer to the writer objects. Not owned by this class. - IMkvWriter* writer_cluster_; - IMkvWriter* writer_cues_; - IMkvWriter* writer_header_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Segment); -}; - -} // namespace mkvmuxer - -#endif // MKVMUXER_MKVMUXER_H_ diff --git a/vpx-encoder/android_libs/arm64-v8a/include/mkvmuxer/mkvmuxertypes.h b/vpx-encoder/android_libs/arm64-v8a/include/mkvmuxer/mkvmuxertypes.h deleted file mode 100644 index e5db1216..00000000 --- a/vpx-encoder/android_libs/arm64-v8a/include/mkvmuxer/mkvmuxertypes.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) 2012 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. - -#ifndef MKVMUXER_MKVMUXERTYPES_H_ -#define MKVMUXER_MKVMUXERTYPES_H_ - -namespace mkvmuxer { -typedef unsigned char uint8; -typedef short int16; -typedef int int32; -typedef unsigned int uint32; -typedef long long int64; -typedef unsigned long long uint64; -} // namespace mkvmuxer - -// Copied from Chromium basictypes.h -// A macro to disallow the copy constructor and operator= functions -// This should be used in the private: declarations for a class -#define LIBWEBM_DISALLOW_COPY_AND_ASSIGN(TypeName) \ - TypeName(const TypeName&); \ - void operator=(const TypeName&) - -#endif // MKVMUXER_MKVMUXERTYPES_HPP_ diff --git a/vpx-encoder/android_libs/arm64-v8a/include/mkvmuxer/mkvmuxerutil.h b/vpx-encoder/android_libs/arm64-v8a/include/mkvmuxer/mkvmuxerutil.h deleted file mode 100644 index 132388da..00000000 --- a/vpx-encoder/android_libs/arm64-v8a/include/mkvmuxer/mkvmuxerutil.h +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright (c) 2012 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -#ifndef MKVMUXER_MKVMUXERUTIL_H_ -#define MKVMUXER_MKVMUXERUTIL_H_ - -#include "mkvmuxertypes.h" - -#include "stdint.h" - -namespace mkvmuxer { -class Cluster; -class Frame; -class IMkvWriter; - -// TODO(tomfinegan): mkvmuxer:: integer types continue to be used here because -// changing them causes pain for downstream projects. It would be nice if a -// solution that allows removal of the mkvmuxer:: integer types while avoiding -// pain for downstream users of libwebm. Considering that mkvmuxerutil.{cc,h} -// are really, for the great majority of cases, EBML size calculation and writer -// functions, perhaps a more EBML focused utility would be the way to go as a -// first step. - -const uint64 kEbmlUnknownValue = 0x01FFFFFFFFFFFFFFULL; -const int64 kMaxBlockTimecode = 0x07FFFLL; - -// Writes out |value| in Big Endian order. Returns 0 on success. -int32 SerializeInt(IMkvWriter* writer, int64 value, int32 size); - -// Returns the size in bytes of the element. -int32 GetUIntSize(uint64 value); -int32 GetIntSize(int64 value); -int32 GetCodedUIntSize(uint64 value); -uint64 EbmlMasterElementSize(uint64 type, uint64 value); -uint64 EbmlElementSize(uint64 type, int64 value); -uint64 EbmlElementSize(uint64 type, uint64 value); -uint64 EbmlElementSize(uint64 type, float value); -uint64 EbmlElementSize(uint64 type, const char* value); -uint64 EbmlElementSize(uint64 type, const uint8* value, uint64 size); -uint64 EbmlDateElementSize(uint64 type); - -// Returns the size in bytes of the element assuming that the element was -// written using |fixed_size| bytes. If |fixed_size| is set to zero, then it -// computes the necessary number of bytes based on |value|. -uint64 EbmlElementSize(uint64 type, uint64 value, uint64 fixed_size); - -// Creates an EBML coded number from |value| and writes it out. The size of -// the coded number is determined by the value of |value|. |value| must not -// be in a coded form. Returns 0 on success. -int32 WriteUInt(IMkvWriter* writer, uint64 value); - -// Creates an EBML coded number from |value| and writes it out. The size of -// the coded number is determined by the value of |size|. |value| must not -// be in a coded form. Returns 0 on success. -int32 WriteUIntSize(IMkvWriter* writer, uint64 value, int32 size); - -// Output an Mkv master element. Returns true if the element was written. -bool WriteEbmlMasterElement(IMkvWriter* writer, uint64 value, uint64 size); - -// Outputs an Mkv ID, calls |IMkvWriter::ElementStartNotify|, and passes the -// ID to |SerializeInt|. Returns 0 on success. -int32 WriteID(IMkvWriter* writer, uint64 type); - -// Output an Mkv non-master element. Returns true if the element was written. -bool WriteEbmlElement(IMkvWriter* writer, uint64 type, uint64 value); -bool WriteEbmlElement(IMkvWriter* writer, uint64 type, int64 value); -bool WriteEbmlElement(IMkvWriter* writer, uint64 type, float value); -bool WriteEbmlElement(IMkvWriter* writer, uint64 type, const char* value); -bool WriteEbmlElement(IMkvWriter* writer, uint64 type, const uint8* value, - uint64 size); -bool WriteEbmlDateElement(IMkvWriter* writer, uint64 type, int64 value); - -// Output an Mkv non-master element using fixed size. The element will be -// written out using exactly |fixed_size| bytes. If |fixed_size| is set to zero -// then it computes the necessary number of bytes based on |value|. Returns true -// if the element was written. -bool WriteEbmlElement(IMkvWriter* writer, uint64 type, uint64 value, - uint64 fixed_size); - -// Output a Mkv Frame. It decides the correct element to write (Block vs -// SimpleBlock) based on the parameters of the Frame. -uint64 WriteFrame(IMkvWriter* writer, const Frame* const frame, - Cluster* cluster); - -// Output a void element. |size| must be the entire size in bytes that will be -// void. The function will calculate the size of the void header and subtract -// it from |size|. -uint64 WriteVoidElement(IMkvWriter* writer, uint64 size); - -// Returns the version number of the muxer in |major|, |minor|, |build|, -// and |revision|. -void GetVersion(int32* major, int32* minor, int32* build, int32* revision); - -// Returns a random number to be used for UID, using |seed| to seed -// the random-number generator (see POSIX rand_r() for semantics). -uint64 MakeUID(unsigned int* seed); - -// Colour field validation helpers. All return true when |value| is valid. -bool IsMatrixCoefficientsValueValid(uint64_t value); -bool IsChromaSitingHorzValueValid(uint64_t value); -bool IsChromaSitingVertValueValid(uint64_t value); -bool IsColourRangeValueValid(uint64_t value); -bool IsTransferCharacteristicsValueValid(uint64_t value); -bool IsPrimariesValueValid(uint64_t value); - -} // namespace mkvmuxer - -#endif // MKVMUXER_MKVMUXERUTIL_H_ diff --git a/vpx-encoder/android_libs/arm64-v8a/include/mkvmuxer/mkvwriter.h b/vpx-encoder/android_libs/arm64-v8a/include/mkvmuxer/mkvwriter.h deleted file mode 100644 index 4227c637..00000000 --- a/vpx-encoder/android_libs/arm64-v8a/include/mkvmuxer/mkvwriter.h +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c) 2012 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. - -#ifndef MKVMUXER_MKVWRITER_H_ -#define MKVMUXER_MKVWRITER_H_ - -#include - -#include "mkvmuxer/mkvmuxer.h" -#include "mkvmuxer/mkvmuxertypes.h" - -namespace mkvmuxer { - -// Default implementation of the IMkvWriter interface on Windows. -class MkvWriter : public IMkvWriter { - public: - MkvWriter(); - explicit MkvWriter(FILE* fp); - virtual ~MkvWriter(); - - // IMkvWriter interface - virtual int64 Position() const; - virtual int32 Position(int64 position); - virtual bool Seekable() const; - virtual int32 Write(const void* buffer, uint32 length); - virtual void ElementStartNotify(uint64 element_id, int64 position); - - // Creates and opens a file for writing. |filename| is the name of the file - // to open. This function will overwrite the contents of |filename|. Returns - // true on success. - bool Open(const char* filename); - - // Closes an opened file. - void Close(); - - private: - // File handle to output file. - FILE* file_; - bool writer_owns_file_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(MkvWriter); -}; - -} // namespace mkvmuxer - -#endif // MKVMUXER_MKVWRITER_H_ diff --git a/vpx-encoder/android_libs/arm64-v8a/include/mkvparser/mkvparser.h b/vpx-encoder/android_libs/arm64-v8a/include/mkvparser/mkvparser.h deleted file mode 100644 index 848d01f0..00000000 --- a/vpx-encoder/android_libs/arm64-v8a/include/mkvparser/mkvparser.h +++ /dev/null @@ -1,1147 +0,0 @@ -// Copyright (c) 2012 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -#ifndef MKVPARSER_MKVPARSER_H_ -#define MKVPARSER_MKVPARSER_H_ - -#include - -namespace mkvparser { - -const int E_PARSE_FAILED = -1; -const int E_FILE_FORMAT_INVALID = -2; -const int E_BUFFER_NOT_FULL = -3; - -class IMkvReader { - public: - virtual int Read(long long pos, long len, unsigned char* buf) = 0; - virtual int Length(long long* total, long long* available) = 0; - - protected: - virtual ~IMkvReader() {} -}; - -template -Type* SafeArrayAlloc(unsigned long long num_elements, - unsigned long long element_size); -long long GetUIntLength(IMkvReader*, long long, long&); -long long ReadUInt(IMkvReader*, long long, long&); -long long ReadID(IMkvReader* pReader, long long pos, long& len); -long long UnserializeUInt(IMkvReader*, long long pos, long long size); - -long UnserializeFloat(IMkvReader*, long long pos, long long size, double&); -long UnserializeInt(IMkvReader*, long long pos, long long size, - long long& result); - -long UnserializeString(IMkvReader*, long long pos, long long size, char*& str); - -long ParseElementHeader(IMkvReader* pReader, - long long& pos, // consume id and size fields - long long stop, // if you know size of element's parent - long long& id, long long& size); - -bool Match(IMkvReader*, long long&, unsigned long, long long&); -bool Match(IMkvReader*, long long&, unsigned long, unsigned char*&, size_t&); - -void GetVersion(int& major, int& minor, int& build, int& revision); - -struct EBMLHeader { - EBMLHeader(); - ~EBMLHeader(); - long long m_version; - long long m_readVersion; - long long m_maxIdLength; - long long m_maxSizeLength; - char* m_docType; - long long m_docTypeVersion; - long long m_docTypeReadVersion; - - long long Parse(IMkvReader*, long long&); - void Init(); -}; - -class Segment; -class Track; -class Cluster; - -class Block { - Block(const Block&); - Block& operator=(const Block&); - - public: - const long long m_start; - const long long m_size; - - Block(long long start, long long size, long long discard_padding); - ~Block(); - - long Parse(const Cluster*); - - long long GetTrackNumber() const; - long long GetTimeCode(const Cluster*) const; // absolute, but not scaled - long long GetTime(const Cluster*) const; // absolute, and scaled (ns) - bool IsKey() const; - void SetKey(bool); - bool IsInvisible() const; - - enum Lacing { kLacingNone, kLacingXiph, kLacingFixed, kLacingEbml }; - Lacing GetLacing() const; - - int GetFrameCount() const; // to index frames: [0, count) - - struct Frame { - long long pos; // absolute offset - long len; - - long Read(IMkvReader*, unsigned char*) const; - }; - - const Frame& GetFrame(int frame_index) const; - - long long GetDiscardPadding() const; - - private: - long long m_track; // Track::Number() - short m_timecode; // relative to cluster - unsigned char m_flags; - - Frame* m_frames; - int m_frame_count; - - protected: - const long long m_discard_padding; -}; - -class BlockEntry { - BlockEntry(const BlockEntry&); - BlockEntry& operator=(const BlockEntry&); - - protected: - BlockEntry(Cluster*, long index); - - public: - virtual ~BlockEntry(); - - bool EOS() const { return (GetKind() == kBlockEOS); } - const Cluster* GetCluster() const; - long GetIndex() const; - virtual const Block* GetBlock() const = 0; - - enum Kind { kBlockEOS, kBlockSimple, kBlockGroup }; - virtual Kind GetKind() const = 0; - - protected: - Cluster* const m_pCluster; - const long m_index; -}; - -class SimpleBlock : public BlockEntry { - SimpleBlock(const SimpleBlock&); - SimpleBlock& operator=(const SimpleBlock&); - - public: - SimpleBlock(Cluster*, long index, long long start, long long size); - long Parse(); - - Kind GetKind() const; - const Block* GetBlock() const; - - protected: - Block m_block; -}; - -class BlockGroup : public BlockEntry { - BlockGroup(const BlockGroup&); - BlockGroup& operator=(const BlockGroup&); - - public: - BlockGroup(Cluster*, long index, - long long block_start, // absolute pos of block's payload - long long block_size, // size of block's payload - long long prev, long long next, long long duration, - long long discard_padding); - - long Parse(); - - Kind GetKind() const; - const Block* GetBlock() const; - - long long GetPrevTimeCode() const; // relative to block's time - long long GetNextTimeCode() const; // as above - long long GetDurationTimeCode() const; - - private: - Block m_block; - const long long m_prev; - const long long m_next; - const long long m_duration; -}; - -/////////////////////////////////////////////////////////////// -// ContentEncoding element -// Elements used to describe if the track data has been encrypted or -// compressed with zlib or header stripping. -class ContentEncoding { - public: - enum { kCTR = 1 }; - - ContentEncoding(); - ~ContentEncoding(); - - // ContentCompression element names - struct ContentCompression { - ContentCompression(); - ~ContentCompression(); - - unsigned long long algo; - unsigned char* settings; - long long settings_len; - }; - - // ContentEncAESSettings element names - struct ContentEncAESSettings { - ContentEncAESSettings() : cipher_mode(kCTR) {} - ~ContentEncAESSettings() {} - - unsigned long long cipher_mode; - }; - - // ContentEncryption element names - struct ContentEncryption { - ContentEncryption(); - ~ContentEncryption(); - - unsigned long long algo; - unsigned char* key_id; - long long key_id_len; - unsigned char* signature; - long long signature_len; - unsigned char* sig_key_id; - long long sig_key_id_len; - unsigned long long sig_algo; - unsigned long long sig_hash_algo; - - ContentEncAESSettings aes_settings; - }; - - // Returns ContentCompression represented by |idx|. Returns NULL if |idx| - // is out of bounds. - const ContentCompression* GetCompressionByIndex(unsigned long idx) const; - - // Returns number of ContentCompression elements in this ContentEncoding - // element. - unsigned long GetCompressionCount() const; - - // Parses the ContentCompression element from |pReader|. |start| is the - // starting offset of the ContentCompression payload. |size| is the size in - // bytes of the ContentCompression payload. |compression| is where the parsed - // values will be stored. - long ParseCompressionEntry(long long start, long long size, - IMkvReader* pReader, - ContentCompression* compression); - - // Returns ContentEncryption represented by |idx|. Returns NULL if |idx| - // is out of bounds. - const ContentEncryption* GetEncryptionByIndex(unsigned long idx) const; - - // Returns number of ContentEncryption elements in this ContentEncoding - // element. - unsigned long GetEncryptionCount() const; - - // Parses the ContentEncAESSettings element from |pReader|. |start| is the - // starting offset of the ContentEncAESSettings payload. |size| is the - // size in bytes of the ContentEncAESSettings payload. |encryption| is - // where the parsed values will be stored. - long ParseContentEncAESSettingsEntry(long long start, long long size, - IMkvReader* pReader, - ContentEncAESSettings* aes); - - // Parses the ContentEncoding element from |pReader|. |start| is the - // starting offset of the ContentEncoding payload. |size| is the size in - // bytes of the ContentEncoding payload. Returns true on success. - long ParseContentEncodingEntry(long long start, long long size, - IMkvReader* pReader); - - // Parses the ContentEncryption element from |pReader|. |start| is the - // starting offset of the ContentEncryption payload. |size| is the size in - // bytes of the ContentEncryption payload. |encryption| is where the parsed - // values will be stored. - long ParseEncryptionEntry(long long start, long long size, - IMkvReader* pReader, ContentEncryption* encryption); - - unsigned long long encoding_order() const { return encoding_order_; } - unsigned long long encoding_scope() const { return encoding_scope_; } - unsigned long long encoding_type() const { return encoding_type_; } - - private: - // Member variables for list of ContentCompression elements. - ContentCompression** compression_entries_; - ContentCompression** compression_entries_end_; - - // Member variables for list of ContentEncryption elements. - ContentEncryption** encryption_entries_; - ContentEncryption** encryption_entries_end_; - - // ContentEncoding element names - unsigned long long encoding_order_; - unsigned long long encoding_scope_; - unsigned long long encoding_type_; - - // LIBWEBM_DISALLOW_COPY_AND_ASSIGN(ContentEncoding); - ContentEncoding(const ContentEncoding&); - ContentEncoding& operator=(const ContentEncoding&); -}; - -class Track { - Track(const Track&); - Track& operator=(const Track&); - - public: - class Info; - static long Create(Segment*, const Info&, long long element_start, - long long element_size, Track*&); - - enum Type { kVideo = 1, kAudio = 2, kSubtitle = 0x11, kMetadata = 0x21 }; - - Segment* const m_pSegment; - const long long m_element_start; - const long long m_element_size; - virtual ~Track(); - - long GetType() const; - long GetNumber() const; - unsigned long long GetUid() const; - const char* GetNameAsUTF8() const; - const char* GetLanguage() const; - const char* GetCodecNameAsUTF8() const; - const char* GetCodecId() const; - const unsigned char* GetCodecPrivate(size_t&) const; - bool GetLacing() const; - unsigned long long GetDefaultDuration() const; - unsigned long long GetCodecDelay() const; - unsigned long long GetSeekPreRoll() const; - - const BlockEntry* GetEOS() const; - - struct Settings { - long long start; - long long size; - }; - - class Info { - public: - Info(); - ~Info(); - int Copy(Info&) const; - void Clear(); - long type; - long number; - unsigned long long uid; - unsigned long long defaultDuration; - unsigned long long codecDelay; - unsigned long long seekPreRoll; - char* nameAsUTF8; - char* language; - char* codecId; - char* codecNameAsUTF8; - unsigned char* codecPrivate; - size_t codecPrivateSize; - bool lacing; - Settings settings; - - private: - Info(const Info&); - Info& operator=(const Info&); - int CopyStr(char* Info::*str, Info&) const; - }; - - long GetFirst(const BlockEntry*&) const; - long GetNext(const BlockEntry* pCurr, const BlockEntry*& pNext) const; - virtual bool VetEntry(const BlockEntry*) const; - virtual long Seek(long long time_ns, const BlockEntry*&) const; - - const ContentEncoding* GetContentEncodingByIndex(unsigned long idx) const; - unsigned long GetContentEncodingCount() const; - - long ParseContentEncodingsEntry(long long start, long long size); - - protected: - Track(Segment*, long long element_start, long long element_size); - - Info m_info; - - class EOSBlock : public BlockEntry { - public: - EOSBlock(); - - Kind GetKind() const; - const Block* GetBlock() const; - }; - - EOSBlock m_eos; - - private: - ContentEncoding** content_encoding_entries_; - ContentEncoding** content_encoding_entries_end_; -}; - -struct PrimaryChromaticity { - PrimaryChromaticity() : x(0), y(0) {} - ~PrimaryChromaticity() {} - static bool Parse(IMkvReader* reader, long long read_pos, - long long value_size, bool is_x, - PrimaryChromaticity** chromaticity); - float x; - float y; -}; - -struct MasteringMetadata { - static const float kValueNotPresent; - - MasteringMetadata() - : r(NULL), - g(NULL), - b(NULL), - white_point(NULL), - luminance_max(kValueNotPresent), - luminance_min(kValueNotPresent) {} - ~MasteringMetadata() { - delete r; - delete g; - delete b; - delete white_point; - } - - static bool Parse(IMkvReader* reader, long long element_start, - long long element_size, - MasteringMetadata** mastering_metadata); - - PrimaryChromaticity* r; - PrimaryChromaticity* g; - PrimaryChromaticity* b; - PrimaryChromaticity* white_point; - float luminance_max; - float luminance_min; -}; - -struct Colour { - static const long long kValueNotPresent; - - // Unless otherwise noted all values assigned upon construction are the - // equivalent of unspecified/default. - Colour() - : matrix_coefficients(kValueNotPresent), - bits_per_channel(kValueNotPresent), - chroma_subsampling_horz(kValueNotPresent), - chroma_subsampling_vert(kValueNotPresent), - cb_subsampling_horz(kValueNotPresent), - cb_subsampling_vert(kValueNotPresent), - chroma_siting_horz(kValueNotPresent), - chroma_siting_vert(kValueNotPresent), - range(kValueNotPresent), - transfer_characteristics(kValueNotPresent), - primaries(kValueNotPresent), - max_cll(kValueNotPresent), - max_fall(kValueNotPresent), - mastering_metadata(NULL) {} - ~Colour() { - delete mastering_metadata; - mastering_metadata = NULL; - } - - static bool Parse(IMkvReader* reader, long long element_start, - long long element_size, Colour** colour); - - long long matrix_coefficients; - long long bits_per_channel; - long long chroma_subsampling_horz; - long long chroma_subsampling_vert; - long long cb_subsampling_horz; - long long cb_subsampling_vert; - long long chroma_siting_horz; - long long chroma_siting_vert; - long long range; - long long transfer_characteristics; - long long primaries; - long long max_cll; - long long max_fall; - - MasteringMetadata* mastering_metadata; -}; - -struct Projection { - enum ProjectionType { - kTypeNotPresent = -1, - kRectangular = 0, - kEquirectangular = 1, - kCubeMap = 2, - kMesh = 3, - }; - static const float kValueNotPresent; - Projection() - : type(kTypeNotPresent), - private_data(NULL), - private_data_length(0), - pose_yaw(kValueNotPresent), - pose_pitch(kValueNotPresent), - pose_roll(kValueNotPresent) {} - ~Projection() { delete[] private_data; } - static bool Parse(IMkvReader* reader, long long element_start, - long long element_size, Projection** projection); - - ProjectionType type; - unsigned char* private_data; - size_t private_data_length; - float pose_yaw; - float pose_pitch; - float pose_roll; -}; - -class VideoTrack : public Track { - VideoTrack(const VideoTrack&); - VideoTrack& operator=(const VideoTrack&); - - VideoTrack(Segment*, long long element_start, long long element_size); - - public: - virtual ~VideoTrack(); - static long Parse(Segment*, const Info&, long long element_start, - long long element_size, VideoTrack*&); - - long long GetWidth() const; - long long GetHeight() const; - long long GetDisplayWidth() const; - long long GetDisplayHeight() const; - long long GetDisplayUnit() const; - long long GetStereoMode() const; - double GetFrameRate() const; - - bool VetEntry(const BlockEntry*) const; - long Seek(long long time_ns, const BlockEntry*&) const; - - Colour* GetColour() const; - - Projection* GetProjection() const; - - const char* GetColourSpace() const { return m_colour_space; } - - private: - long long m_width; - long long m_height; - long long m_display_width; - long long m_display_height; - long long m_display_unit; - long long m_stereo_mode; - char* m_colour_space; - double m_rate; - - Colour* m_colour; - Projection* m_projection; -}; - -class AudioTrack : public Track { - AudioTrack(const AudioTrack&); - AudioTrack& operator=(const AudioTrack&); - - AudioTrack(Segment*, long long element_start, long long element_size); - - public: - static long Parse(Segment*, const Info&, long long element_start, - long long element_size, AudioTrack*&); - - double GetSamplingRate() const; - long long GetChannels() const; - long long GetBitDepth() const; - - private: - double m_rate; - long long m_channels; - long long m_bitDepth; -}; - -class Tracks { - Tracks(const Tracks&); - Tracks& operator=(const Tracks&); - - public: - Segment* const m_pSegment; - const long long m_start; - const long long m_size; - const long long m_element_start; - const long long m_element_size; - - Tracks(Segment*, long long start, long long size, long long element_start, - long long element_size); - - ~Tracks(); - - long Parse(); - - unsigned long GetTracksCount() const; - - const Track* GetTrackByNumber(long tn) const; - const Track* GetTrackByIndex(unsigned long idx) const; - - private: - Track** m_trackEntries; - Track** m_trackEntriesEnd; - - long ParseTrackEntry(long long payload_start, long long payload_size, - long long element_start, long long element_size, - Track*&) const; -}; - -class Chapters { - Chapters(const Chapters&); - Chapters& operator=(const Chapters&); - - public: - Segment* const m_pSegment; - const long long m_start; - const long long m_size; - const long long m_element_start; - const long long m_element_size; - - Chapters(Segment*, long long payload_start, long long payload_size, - long long element_start, long long element_size); - - ~Chapters(); - - long Parse(); - - class Atom; - class Edition; - - class Display { - friend class Atom; - Display(); - Display(const Display&); - ~Display(); - Display& operator=(const Display&); - - public: - const char* GetString() const; - const char* GetLanguage() const; - const char* GetCountry() const; - - private: - void Init(); - void ShallowCopy(Display&) const; - void Clear(); - long Parse(IMkvReader*, long long pos, long long size); - - char* m_string; - char* m_language; - char* m_country; - }; - - class Atom { - friend class Edition; - Atom(); - Atom(const Atom&); - ~Atom(); - Atom& operator=(const Atom&); - - public: - unsigned long long GetUID() const; - const char* GetStringUID() const; - - long long GetStartTimecode() const; - long long GetStopTimecode() const; - - long long GetStartTime(const Chapters*) const; - long long GetStopTime(const Chapters*) const; - - int GetDisplayCount() const; - const Display* GetDisplay(int index) const; - - private: - void Init(); - void ShallowCopy(Atom&) const; - void Clear(); - long Parse(IMkvReader*, long long pos, long long size); - static long long GetTime(const Chapters*, long long timecode); - - long ParseDisplay(IMkvReader*, long long pos, long long size); - bool ExpandDisplaysArray(); - - char* m_string_uid; - unsigned long long m_uid; - long long m_start_timecode; - long long m_stop_timecode; - - Display* m_displays; - int m_displays_size; - int m_displays_count; - }; - - class Edition { - friend class Chapters; - Edition(); - Edition(const Edition&); - ~Edition(); - Edition& operator=(const Edition&); - - public: - int GetAtomCount() const; - const Atom* GetAtom(int index) const; - - private: - void Init(); - void ShallowCopy(Edition&) const; - void Clear(); - long Parse(IMkvReader*, long long pos, long long size); - - long ParseAtom(IMkvReader*, long long pos, long long size); - bool ExpandAtomsArray(); - - Atom* m_atoms; - int m_atoms_size; - int m_atoms_count; - }; - - int GetEditionCount() const; - const Edition* GetEdition(int index) const; - - private: - long ParseEdition(long long pos, long long size); - bool ExpandEditionsArray(); - - Edition* m_editions; - int m_editions_size; - int m_editions_count; -}; - -class Tags { - Tags(const Tags&); - Tags& operator=(const Tags&); - - public: - Segment* const m_pSegment; - const long long m_start; - const long long m_size; - const long long m_element_start; - const long long m_element_size; - - Tags(Segment*, long long payload_start, long long payload_size, - long long element_start, long long element_size); - - ~Tags(); - - long Parse(); - - class Tag; - class SimpleTag; - - class SimpleTag { - friend class Tag; - SimpleTag(); - SimpleTag(const SimpleTag&); - ~SimpleTag(); - SimpleTag& operator=(const SimpleTag&); - - public: - const char* GetTagName() const; - const char* GetTagString() const; - - private: - void Init(); - void ShallowCopy(SimpleTag&) const; - void Clear(); - long Parse(IMkvReader*, long long pos, long long size); - - char* m_tag_name; - char* m_tag_string; - }; - - class Tag { - friend class Tags; - Tag(); - Tag(const Tag&); - ~Tag(); - Tag& operator=(const Tag&); - - public: - int GetSimpleTagCount() const; - const SimpleTag* GetSimpleTag(int index) const; - - private: - void Init(); - void ShallowCopy(Tag&) const; - void Clear(); - long Parse(IMkvReader*, long long pos, long long size); - - long ParseSimpleTag(IMkvReader*, long long pos, long long size); - bool ExpandSimpleTagsArray(); - - SimpleTag* m_simple_tags; - int m_simple_tags_size; - int m_simple_tags_count; - }; - - int GetTagCount() const; - const Tag* GetTag(int index) const; - - private: - long ParseTag(long long pos, long long size); - bool ExpandTagsArray(); - - Tag* m_tags; - int m_tags_size; - int m_tags_count; -}; - -class SegmentInfo { - SegmentInfo(const SegmentInfo&); - SegmentInfo& operator=(const SegmentInfo&); - - public: - Segment* const m_pSegment; - const long long m_start; - const long long m_size; - const long long m_element_start; - const long long m_element_size; - - SegmentInfo(Segment*, long long start, long long size, - long long element_start, long long element_size); - - ~SegmentInfo(); - - long Parse(); - - long long GetTimeCodeScale() const; - long long GetDuration() const; // scaled - const char* GetMuxingAppAsUTF8() const; - const char* GetWritingAppAsUTF8() const; - const char* GetTitleAsUTF8() const; - - private: - long long m_timecodeScale; - double m_duration; - char* m_pMuxingAppAsUTF8; - char* m_pWritingAppAsUTF8; - char* m_pTitleAsUTF8; -}; - -class SeekHead { - SeekHead(const SeekHead&); - SeekHead& operator=(const SeekHead&); - - public: - Segment* const m_pSegment; - const long long m_start; - const long long m_size; - const long long m_element_start; - const long long m_element_size; - - SeekHead(Segment*, long long start, long long size, long long element_start, - long long element_size); - - ~SeekHead(); - - long Parse(); - - struct Entry { - Entry(); - - // the SeekHead entry payload - long long id; - long long pos; - - // absolute pos of SeekEntry ID - long long element_start; - - // SeekEntry ID size + size size + payload - long long element_size; - }; - - int GetCount() const; - const Entry* GetEntry(int idx) const; - - struct VoidElement { - // absolute pos of Void ID - long long element_start; - - // ID size + size size + payload size - long long element_size; - }; - - int GetVoidElementCount() const; - const VoidElement* GetVoidElement(int idx) const; - - private: - Entry* m_entries; - int m_entry_count; - - VoidElement* m_void_elements; - int m_void_element_count; - - static bool ParseEntry(IMkvReader*, - long long pos, // payload - long long size, Entry*); -}; - -class Cues; -class CuePoint { - friend class Cues; - - CuePoint(long, long long); - ~CuePoint(); - - CuePoint(const CuePoint&); - CuePoint& operator=(const CuePoint&); - - public: - long long m_element_start; - long long m_element_size; - - bool Load(IMkvReader*); - - long long GetTimeCode() const; // absolute but unscaled - long long GetTime(const Segment*) const; // absolute and scaled (ns units) - - struct TrackPosition { - long long m_track; - long long m_pos; // of cluster - long long m_block; - // codec_state //defaults to 0 - // reference = clusters containing req'd referenced blocks - // reftime = timecode of the referenced block - - bool Parse(IMkvReader*, long long, long long); - }; - - const TrackPosition* Find(const Track*) const; - - private: - const long m_index; - long long m_timecode; - TrackPosition* m_track_positions; - size_t m_track_positions_count; -}; - -class Cues { - friend class Segment; - - Cues(Segment*, long long start, long long size, long long element_start, - long long element_size); - ~Cues(); - - Cues(const Cues&); - Cues& operator=(const Cues&); - - public: - Segment* const m_pSegment; - const long long m_start; - const long long m_size; - const long long m_element_start; - const long long m_element_size; - - bool Find( // lower bound of time_ns - long long time_ns, const Track*, const CuePoint*&, - const CuePoint::TrackPosition*&) const; - - const CuePoint* GetFirst() const; - const CuePoint* GetLast() const; - const CuePoint* GetNext(const CuePoint*) const; - - const BlockEntry* GetBlock(const CuePoint*, - const CuePoint::TrackPosition*) const; - - bool LoadCuePoint() const; - long GetCount() const; // loaded only - // long GetTotal() const; //loaded + preloaded - bool DoneParsing() const; - - private: - bool Init() const; - bool PreloadCuePoint(long&, long long) const; - - mutable CuePoint** m_cue_points; - mutable long m_count; - mutable long m_preload_count; - mutable long long m_pos; -}; - -class Cluster { - friend class Segment; - - Cluster(const Cluster&); - Cluster& operator=(const Cluster&); - - public: - Segment* const m_pSegment; - - public: - static Cluster* Create(Segment*, - long index, // index in segment - long long off); // offset relative to segment - // long long element_size); - - Cluster(); // EndOfStream - ~Cluster(); - - bool EOS() const; - - long long GetTimeCode() const; // absolute, but not scaled - long long GetTime() const; // absolute, and scaled (nanosecond units) - long long GetFirstTime() const; // time (ns) of first (earliest) block - long long GetLastTime() const; // time (ns) of last (latest) block - - long GetFirst(const BlockEntry*&) const; - long GetLast(const BlockEntry*&) const; - long GetNext(const BlockEntry* curr, const BlockEntry*& next) const; - - const BlockEntry* GetEntry(const Track*, long long ns = -1) const; - const BlockEntry* GetEntry(const CuePoint&, - const CuePoint::TrackPosition&) const; - // const BlockEntry* GetMaxKey(const VideoTrack*) const; - - // static bool HasBlockEntries(const Segment*, long long); - - static long HasBlockEntries(const Segment*, long long idoff, long long& pos, - long& size); - - long GetEntryCount() const; - - long Load(long long& pos, long& size) const; - - long Parse(long long& pos, long& size) const; - long GetEntry(long index, const mkvparser::BlockEntry*&) const; - - protected: - Cluster(Segment*, long index, long long element_start); - // long long element_size); - - public: - const long long m_element_start; - long long GetPosition() const; // offset relative to segment - - long GetIndex() const; - long long GetElementSize() const; - // long long GetPayloadSize() const; - - // long long Unparsed() const; - - private: - long m_index; - mutable long long m_pos; - // mutable long long m_size; - mutable long long m_element_size; - mutable long long m_timecode; - mutable BlockEntry** m_entries; - mutable long m_entries_size; - mutable long m_entries_count; - - long ParseSimpleBlock(long long, long long&, long&); - long ParseBlockGroup(long long, long long&, long&); - - long CreateBlock(long long id, long long pos, long long size, - long long discard_padding); - long CreateBlockGroup(long long start_offset, long long size, - long long discard_padding); - long CreateSimpleBlock(long long, long long); -}; - -class Segment { - friend class Cues; - friend class Track; - friend class VideoTrack; - - Segment(const Segment&); - Segment& operator=(const Segment&); - - private: - Segment(IMkvReader*, long long elem_start, - // long long elem_size, - long long pos, long long size); - - public: - IMkvReader* const m_pReader; - const long long m_element_start; - // const long long m_element_size; - const long long m_start; // posn of segment payload - const long long m_size; // size of segment payload - Cluster m_eos; // TODO: make private? - - static long long CreateInstance(IMkvReader*, long long, Segment*&); - ~Segment(); - - long Load(); // loads headers and all clusters - - // for incremental loading - // long long Unparsed() const; - bool DoneParsing() const; - long long ParseHeaders(); // stops when first cluster is found - // long FindNextCluster(long long& pos, long& size) const; - long LoadCluster(long long& pos, long& size); // load one cluster - long LoadCluster(); - - long ParseNext(const Cluster* pCurr, const Cluster*& pNext, long long& pos, - long& size); - - const SeekHead* GetSeekHead() const; - const Tracks* GetTracks() const; - const SegmentInfo* GetInfo() const; - const Cues* GetCues() const; - const Chapters* GetChapters() const; - const Tags* GetTags() const; - - long long GetDuration() const; - - unsigned long GetCount() const; - const Cluster* GetFirst() const; - const Cluster* GetLast() const; - const Cluster* GetNext(const Cluster*); - - const Cluster* FindCluster(long long time_nanoseconds) const; - // const BlockEntry* Seek(long long time_nanoseconds, const Track*) const; - - const Cluster* FindOrPreloadCluster(long long pos); - - long ParseCues(long long cues_off, // offset relative to start of segment - long long& parse_pos, long& parse_len); - - private: - long long m_pos; // absolute file posn; what has been consumed so far - Cluster* m_pUnknownSize; - - SeekHead* m_pSeekHead; - SegmentInfo* m_pInfo; - Tracks* m_pTracks; - Cues* m_pCues; - Chapters* m_pChapters; - Tags* m_pTags; - Cluster** m_clusters; - long m_clusterCount; // number of entries for which m_index >= 0 - long m_clusterPreloadCount; // number of entries for which m_index < 0 - long m_clusterSize; // array size - - long DoLoadCluster(long long&, long&); - long DoLoadClusterUnknownSize(long long&, long&); - long DoParseNext(const Cluster*&, long long&, long&); - - bool AppendCluster(Cluster*); - bool PreloadCluster(Cluster*, ptrdiff_t); - - // void ParseSeekHead(long long pos, long long size); - // void ParseSeekEntry(long long pos, long long size); - // void ParseCues(long long); - - const BlockEntry* GetBlock(const CuePoint&, const CuePoint::TrackPosition&); -}; - -} // namespace mkvparser - -inline long mkvparser::Segment::LoadCluster() { - long long pos; - long size; - - return LoadCluster(pos, size); -} - -#endif // MKVPARSER_MKVPARSER_H_ diff --git a/vpx-encoder/android_libs/arm64-v8a/include/mkvparser/mkvreader.h b/vpx-encoder/android_libs/arm64-v8a/include/mkvparser/mkvreader.h deleted file mode 100644 index 9831ecf6..00000000 --- a/vpx-encoder/android_libs/arm64-v8a/include/mkvparser/mkvreader.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) 2010 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -#ifndef MKVPARSER_MKVREADER_H_ -#define MKVPARSER_MKVREADER_H_ - -#include - -#include "mkvparser/mkvparser.h" - -namespace mkvparser { - -class MkvReader : public IMkvReader { - public: - MkvReader(); - explicit MkvReader(FILE* fp); - virtual ~MkvReader(); - - int Open(const char*); - void Close(); - - virtual int Read(long long position, long length, unsigned char* buffer); - virtual int Length(long long* total, long long* available); - - private: - MkvReader(const MkvReader&); - MkvReader& operator=(const MkvReader&); - - // Determines the size of the file. This is called either by the constructor - // or by the Open function depending on file ownership. Returns true on - // success. - bool GetFileSize(); - - long long m_length; - FILE* m_file; - bool reader_owns_file_; -}; - -} // namespace mkvparser - -#endif // MKVPARSER_MKVREADER_H_ diff --git a/vpx-encoder/android_libs/arm64-v8a/include/vpx/vp8.h b/vpx-encoder/android_libs/arm64-v8a/include/vpx/vp8.h deleted file mode 100644 index f30dafed..00000000 --- a/vpx-encoder/android_libs/arm64-v8a/include/vpx/vp8.h +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -/*!\defgroup vp8 VP8 - * \ingroup codecs - * VP8 is a video compression algorithm that uses motion - * compensated prediction, Discrete Cosine Transform (DCT) coding of the - * prediction error signal and context dependent entropy coding techniques - * based on arithmetic principles. It features: - * - YUV 4:2:0 image format - * - Macro-block based coding (16x16 luma plus two 8x8 chroma) - * - 1/4 (1/8) pixel accuracy motion compensated prediction - * - 4x4 DCT transform - * - 128 level linear quantizer - * - In loop deblocking filter - * - Context-based entropy coding - * - * @{ - */ -/*!\file - * \brief Provides controls common to both the VP8 encoder and decoder. - */ -#ifndef VPX_VPX_VP8_H_ -#define VPX_VPX_VP8_H_ - -#include "./vpx_codec.h" -#include "./vpx_image.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/*!\brief Control functions - * - * The set of macros define the control functions of VP8 interface - */ -enum vp8_com_control_id { - /*!\brief pass in an external frame into decoder to be used as reference frame - */ - VP8_SET_REFERENCE = 1, - VP8_COPY_REFERENCE = 2, /**< get a copy of reference frame from the decoder */ - VP8_SET_POSTPROC = 3, /**< set the decoder's post processing settings */ - - /* TODO(jkoleszar): The encoder incorrectly reuses some of these values (5+) - * for its control ids. These should be migrated to something like the - * VP8_DECODER_CTRL_ID_START range next time we're ready to break the ABI. - */ - VP9_GET_REFERENCE = 128, /**< get a pointer to a reference frame */ - VP8_COMMON_CTRL_ID_MAX, - VP8_DECODER_CTRL_ID_START = 256 -}; - -/*!\brief post process flags - * - * The set of macros define VP8 decoder post processing flags - */ -enum vp8_postproc_level { - VP8_NOFILTERING = 0, - VP8_DEBLOCK = 1 << 0, - VP8_DEMACROBLOCK = 1 << 1, - VP8_ADDNOISE = 1 << 2, - VP8_MFQE = 1 << 3 -}; - -/*!\brief post process flags - * - * This define a structure that describe the post processing settings. For - * the best objective measure (using the PSNR metric) set post_proc_flag - * to VP8_DEBLOCK and deblocking_level to 1. - */ - -typedef struct vp8_postproc_cfg { - /*!\brief the types of post processing to be done, should be combination of - * "vp8_postproc_level" */ - int post_proc_flag; - int deblocking_level; /**< the strength of deblocking, valid range [0, 16] */ - int noise_level; /**< the strength of additive noise, valid range [0, 16] */ -} vp8_postproc_cfg_t; - -/*!\brief reference frame type - * - * The set of macros define the type of VP8 reference frames - */ -typedef enum vpx_ref_frame_type { - VP8_LAST_FRAME = 1, - VP8_GOLD_FRAME = 2, - VP8_ALTR_FRAME = 4 -} vpx_ref_frame_type_t; - -/*!\brief reference frame data struct - * - * Define the data struct to access vp8 reference frames. - */ -typedef struct vpx_ref_frame { - vpx_ref_frame_type_t frame_type; /**< which reference frame */ - vpx_image_t img; /**< reference frame data in image format */ -} vpx_ref_frame_t; - -/*!\brief VP9 specific reference frame data struct - * - * Define the data struct to access vp9 reference frames. - */ -typedef struct vp9_ref_frame { - int idx; /**< frame index to get (input) */ - vpx_image_t img; /**< img structure to populate (output) */ -} vp9_ref_frame_t; - -/*!\cond */ -/*!\brief vp8 decoder control function parameter type - * - * defines the data type for each of VP8 decoder control function requires - */ -VPX_CTRL_USE_TYPE(VP8_SET_REFERENCE, vpx_ref_frame_t *) -#define VPX_CTRL_VP8_SET_REFERENCE -VPX_CTRL_USE_TYPE(VP8_COPY_REFERENCE, vpx_ref_frame_t *) -#define VPX_CTRL_VP8_COPY_REFERENCE -VPX_CTRL_USE_TYPE(VP8_SET_POSTPROC, vp8_postproc_cfg_t *) -#define VPX_CTRL_VP8_SET_POSTPROC -VPX_CTRL_USE_TYPE(VP9_GET_REFERENCE, vp9_ref_frame_t *) -#define VPX_CTRL_VP9_GET_REFERENCE - -/*!\endcond */ -/*! @} - end defgroup vp8 */ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // VPX_VPX_VP8_H_ diff --git a/vpx-encoder/android_libs/arm64-v8a/include/vpx/vp8cx.h b/vpx-encoder/android_libs/arm64-v8a/include/vpx/vp8cx.h deleted file mode 100644 index b2d57dce..00000000 --- a/vpx-encoder/android_libs/arm64-v8a/include/vpx/vp8cx.h +++ /dev/null @@ -1,1027 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ -#ifndef VPX_VPX_VP8CX_H_ -#define VPX_VPX_VP8CX_H_ - -/*!\defgroup vp8_encoder WebM VP8/VP9 Encoder - * \ingroup vp8 - * - * @{ - */ -#include "./vp8.h" -#include "./vpx_encoder.h" - -/*!\file - * \brief Provides definitions for using VP8 or VP9 encoder algorithm within the - * vpx Codec Interface. - */ - -#ifdef __cplusplus -extern "C" { -#endif - -/*!\name Algorithm interface for VP8 - * - * This interface provides the capability to encode raw VP8 streams. - * @{ - */ -extern vpx_codec_iface_t vpx_codec_vp8_cx_algo; -extern vpx_codec_iface_t *vpx_codec_vp8_cx(void); -/*!@} - end algorithm interface member group*/ - -/*!\name Algorithm interface for VP9 - * - * This interface provides the capability to encode raw VP9 streams. - * @{ - */ -extern vpx_codec_iface_t vpx_codec_vp9_cx_algo; -extern vpx_codec_iface_t *vpx_codec_vp9_cx(void); -/*!@} - end algorithm interface member group*/ - -/* - * Algorithm Flags - */ - -/*!\brief Don't reference the last frame - * - * When this flag is set, the encoder will not use the last frame as a - * predictor. When not set, the encoder will choose whether to use the - * last frame or not automatically. - */ -#define VP8_EFLAG_NO_REF_LAST (1 << 16) - -/*!\brief Don't reference the golden frame - * - * When this flag is set, the encoder will not use the golden frame as a - * predictor. When not set, the encoder will choose whether to use the - * golden frame or not automatically. - */ -#define VP8_EFLAG_NO_REF_GF (1 << 17) - -/*!\brief Don't reference the alternate reference frame - * - * When this flag is set, the encoder will not use the alt ref frame as a - * predictor. When not set, the encoder will choose whether to use the - * alt ref frame or not automatically. - */ -#define VP8_EFLAG_NO_REF_ARF (1 << 21) - -/*!\brief Don't update the last frame - * - * When this flag is set, the encoder will not update the last frame with - * the contents of the current frame. - */ -#define VP8_EFLAG_NO_UPD_LAST (1 << 18) - -/*!\brief Don't update the golden frame - * - * When this flag is set, the encoder will not update the golden frame with - * the contents of the current frame. - */ -#define VP8_EFLAG_NO_UPD_GF (1 << 22) - -/*!\brief Don't update the alternate reference frame - * - * When this flag is set, the encoder will not update the alt ref frame with - * the contents of the current frame. - */ -#define VP8_EFLAG_NO_UPD_ARF (1 << 23) - -/*!\brief Force golden frame update - * - * When this flag is set, the encoder copy the contents of the current frame - * to the golden frame buffer. - */ -#define VP8_EFLAG_FORCE_GF (1 << 19) - -/*!\brief Force alternate reference frame update - * - * When this flag is set, the encoder copy the contents of the current frame - * to the alternate reference frame buffer. - */ -#define VP8_EFLAG_FORCE_ARF (1 << 24) - -/*!\brief Disable entropy update - * - * When this flag is set, the encoder will not update its internal entropy - * model based on the entropy of this frame. - */ -#define VP8_EFLAG_NO_UPD_ENTROPY (1 << 20) - -/*!\brief VPx encoder control functions - * - * This set of macros define the control functions available for VPx - * encoder interface. - * - * \sa #vpx_codec_control - */ -enum vp8e_enc_control_id { - /*!\brief Codec control function to pass an ROI map to encoder. - * - * Supported in codecs: VP8 - */ - VP8E_SET_ROI_MAP = 8, - - /*!\brief Codec control function to pass an Active map to encoder. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_ACTIVEMAP, - - /*!\brief Codec control function to set encoder scaling mode. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_SCALEMODE = 11, - - /*!\brief Codec control function to set encoder internal speed settings. - * - * Changes in this value influences, among others, the encoder's selection - * of motion estimation methods. Values greater than 0 will increase encoder - * speed at the expense of quality. - * - * \note Valid range for VP8: -16..16 - * \note Valid range for VP9: -8..8 - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_CPUUSED = 13, - - /*!\brief Codec control function to enable automatic use of arf frames. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_ENABLEAUTOALTREF, - - /*!\brief control function to set noise sensitivity - * - * 0: off, 1: OnYOnly, 2: OnYUV, - * 3: OnYUVAggressive, 4: Adaptive - * - * Supported in codecs: VP8 - */ - VP8E_SET_NOISE_SENSITIVITY, - - /*!\brief Codec control function to set higher sharpness at the expense - * of a lower PSNR. - * - * \note Valid range: 0..7 - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_SHARPNESS, - - /*!\brief Codec control function to set the threshold for MBs treated static. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_STATIC_THRESHOLD, - - /*!\brief Codec control function to set the number of token partitions. - * - * Supported in codecs: VP8 - */ - VP8E_SET_TOKEN_PARTITIONS, - - /*!\brief Codec control function to get last quantizer chosen by the encoder. - * - * Return value uses internal quantizer scale defined by the codec. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_GET_LAST_QUANTIZER, - - /*!\brief Codec control function to get last quantizer chosen by the encoder. - * - * Return value uses the 0..63 scale as used by the rc_*_quantizer config - * parameters. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_GET_LAST_QUANTIZER_64, - - /*!\brief Codec control function to set the max no of frames to create arf. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_ARNR_MAXFRAMES, - - /*!\brief Codec control function to set the filter strength for the arf. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_ARNR_STRENGTH, - - /*!\deprecated control function to set the filter type to use for the arf. */ - VP8E_SET_ARNR_TYPE, - - /*!\brief Codec control function to set visual tuning. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_TUNING, - - /*!\brief Codec control function to set constrained quality level. - * - * \attention For this value to be used vpx_codec_enc_cfg_t::rc_end_usage must - * be set to #VPX_CQ - * \note Valid range: 0..63 - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_CQ_LEVEL, - - /*!\brief Codec control function to set Max data rate for Intra frames. - * - * This value controls additional clamping on the maximum size of a - * keyframe. It is expressed as a percentage of the average - * per-frame bitrate, with the special (and default) value 0 meaning - * unlimited, or no additional clamping beyond the codec's built-in - * algorithm. - * - * For example, to allocate no more than 4.5 frames worth of bitrate - * to a keyframe, set this to 450. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_MAX_INTRA_BITRATE_PCT, - - /*!\brief Codec control function to set reference and update frame flags. - * - * Supported in codecs: VP8 - */ - VP8E_SET_FRAME_FLAGS, - - /*!\brief Codec control function to set max data rate for Inter frames. - * - * This value controls additional clamping on the maximum size of an - * inter frame. It is expressed as a percentage of the average - * per-frame bitrate, with the special (and default) value 0 meaning - * unlimited, or no additional clamping beyond the codec's built-in - * algorithm. - * - * For example, to allow no more than 4.5 frames worth of bitrate - * to an inter frame, set this to 450. - * - * Supported in codecs: VP9 - */ - VP9E_SET_MAX_INTER_BITRATE_PCT, - - /*!\brief Boost percentage for Golden Frame in CBR mode. - * - * This value controls the amount of boost given to Golden Frame in - * CBR mode. It is expressed as a percentage of the average - * per-frame bitrate, with the special (and default) value 0 meaning - * the feature is off, i.e., no golden frame boost in CBR mode and - * average bitrate target is used. - * - * For example, to allow 100% more bits, i.e, 2X, in a golden frame - * than average frame, set this to 100. - * - * Supported in codecs: VP9 - */ - VP9E_SET_GF_CBR_BOOST_PCT, - - /*!\brief Codec control function to set the temporal layer id. - * - * For temporal scalability: this control allows the application to set the - * layer id for each frame to be encoded. Note that this control must be set - * for every frame prior to encoding. The usage of this control function - * supersedes the internal temporal pattern counter, which is now deprecated. - * - * Supported in codecs: VP8 - */ - VP8E_SET_TEMPORAL_LAYER_ID, - - /*!\brief Codec control function to set encoder screen content mode. - * - * 0: off, 1: On, 2: On with more aggressive rate control. - * - * Supported in codecs: VP8 - */ - VP8E_SET_SCREEN_CONTENT_MODE, - - /*!\brief Codec control function to set lossless encoding mode. - * - * VP9 can operate in lossless encoding mode, in which the bitstream - * produced will be able to decode and reconstruct a perfect copy of - * input source. This control function provides a mean to switch encoder - * into lossless coding mode(1) or normal coding mode(0) that may be lossy. - * 0 = lossy coding mode - * 1 = lossless coding mode - * - * By default, encoder operates in normal coding mode (maybe lossy). - * - * Supported in codecs: VP9 - */ - VP9E_SET_LOSSLESS, - - /*!\brief Codec control function to set number of tile columns. - * - * In encoding and decoding, VP9 allows an input image frame be partitioned - * into separated vertical tile columns, which can be encoded or decoded - * independently. This enables easy implementation of parallel encoding and - * decoding. This control requests the encoder to use column tiles in - * encoding an input frame, with number of tile columns (in Log2 unit) as - * the parameter: - * 0 = 1 tile column - * 1 = 2 tile columns - * 2 = 4 tile columns - * ..... - * n = 2**n tile columns - * The requested tile columns will be capped by the encoder based on image - * size limitations (The minimum width of a tile column is 256 pixels, the - * maximum is 4096). - * - * By default, the value is 6, i.e., the maximum number of tiles supported by - * the resolution. - * - * Supported in codecs: VP9 - */ - VP9E_SET_TILE_COLUMNS, - - /*!\brief Codec control function to set number of tile rows. - * - * In encoding and decoding, VP9 allows an input image frame be partitioned - * into separated horizontal tile rows. Tile rows are encoded or decoded - * sequentially. Even though encoding/decoding of later tile rows depends on - * earlier ones, this allows the encoder to output data packets for tile rows - * prior to completely processing all tile rows in a frame, thereby reducing - * the latency in processing between input and output. The parameter - * for this control describes the number of tile rows, which has a valid - * range [0, 2]: - * 0 = 1 tile row - * 1 = 2 tile rows - * 2 = 4 tile rows - * - * By default, the value is 0, i.e. one single row tile for entire image. - * - * Supported in codecs: VP9 - */ - VP9E_SET_TILE_ROWS, - - /*!\brief Codec control function to enable frame parallel decoding feature. - * - * VP9 has a bitstream feature to reduce decoding dependency between frames - * by turning off backward update of probability context used in encoding - * and decoding. This allows staged parallel processing of more than one - * video frame in the decoder. This control function provides a means to - * turn this feature on or off for bitstreams produced by encoder. - * - * By default, this feature is on. - * - * Supported in codecs: VP9 - */ - VP9E_SET_FRAME_PARALLEL_DECODING, - - /*!\brief Codec control function to set adaptive quantization mode. - * - * VP9 has a segment based feature that allows encoder to adaptively change - * quantization parameter for each segment within a frame to improve the - * subjective quality. This control makes encoder operate in one of the - * several AQ_modes supported. - * - * By default, encoder operates with AQ_Mode 0(adaptive quantization off). - * - * Supported in codecs: VP9 - */ - VP9E_SET_AQ_MODE, - - /*!\brief Codec control function to enable/disable periodic Q boost. - * - * One VP9 encoder speed feature is to enable quality boost by lowering - * frame level Q periodically. This control function provides a mean to - * turn on/off this feature. - * 0 = off - * 1 = on - * - * By default, the encoder is allowed to use this feature for appropriate - * encoding modes. - * - * Supported in codecs: VP9 - */ - VP9E_SET_FRAME_PERIODIC_BOOST, - - /*!\brief Codec control function to set noise sensitivity. - * - * 0: off, 1: On(YOnly), 2: For SVC only, on top two spatial layers(YOnly) - * - * Supported in codecs: VP9 - */ - VP9E_SET_NOISE_SENSITIVITY, - - /*!\brief Codec control function to turn on/off SVC in encoder. - * \note Return value is VPX_CODEC_INVALID_PARAM if the encoder does not - * support SVC in its current encoding mode - * 0: off, 1: on - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC, - - /*!\brief Codec control function to pass an ROI map to encoder. - * - * Supported in codecs: VP9 - */ - VP9E_SET_ROI_MAP, - - /*!\brief Codec control function to set parameters for SVC. - * \note Parameters contain min_q, max_q, scaling factor for each of the - * SVC layers. - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_PARAMETERS, - - /*!\brief Codec control function to set svc layer for spatial and temporal. - * \note Valid ranges: 0..#vpx_codec_enc_cfg::ss_number_layers for spatial - * layer and 0..#vpx_codec_enc_cfg::ts_number_layers for - * temporal layer. - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_LAYER_ID, - - /*!\brief Codec control function to set content type. - * \note Valid parameter range: - * VP9E_CONTENT_DEFAULT = Regular video content (Default) - * VP9E_CONTENT_SCREEN = Screen capture content - * VP9E_CONTENT_FILM = Film content: improves grain retention - * - * Supported in codecs: VP9 - */ - VP9E_SET_TUNE_CONTENT, - - /*!\brief Codec control function to get svc layer ID. - * \note The layer ID returned is for the data packet from the registered - * callback function. - * - * Supported in codecs: VP9 - */ - VP9E_GET_SVC_LAYER_ID, - - /*!\brief Codec control function to register callback to get per layer packet. - * \note Parameter for this control function is a structure with a callback - * function and a pointer to private data used by the callback. - * - * Supported in codecs: VP9 - */ - VP9E_REGISTER_CX_CALLBACK, - - /*!\brief Codec control function to set color space info. - * \note Valid ranges: 0..7, default is "UNKNOWN". - * 0 = UNKNOWN, - * 1 = BT_601 - * 2 = BT_709 - * 3 = SMPTE_170 - * 4 = SMPTE_240 - * 5 = BT_2020 - * 6 = RESERVED - * 7 = SRGB - * - * Supported in codecs: VP9 - */ - VP9E_SET_COLOR_SPACE, - - /*!\brief Codec control function to set temporal layering mode. - * \note Valid ranges: 0..3, default is "0" - * (VP9E_TEMPORAL_LAYERING_MODE_NOLAYERING). - * 0 = VP9E_TEMPORAL_LAYERING_MODE_NOLAYERING - * 1 = VP9E_TEMPORAL_LAYERING_MODE_BYPASS - * 2 = VP9E_TEMPORAL_LAYERING_MODE_0101 - * 3 = VP9E_TEMPORAL_LAYERING_MODE_0212 - * - * Supported in codecs: VP9 - */ - VP9E_SET_TEMPORAL_LAYERING_MODE, - - /*!\brief Codec control function to set minimum interval between GF/ARF frames - * - * By default the value is set as 4. - * - * Supported in codecs: VP9 - */ - VP9E_SET_MIN_GF_INTERVAL, - - /*!\brief Codec control function to set minimum interval between GF/ARF frames - * - * By default the value is set as 16. - * - * Supported in codecs: VP9 - */ - VP9E_SET_MAX_GF_INTERVAL, - - /*!\brief Codec control function to get an Active map back from the encoder. - * - * Supported in codecs: VP9 - */ - VP9E_GET_ACTIVEMAP, - - /*!\brief Codec control function to set color range bit. - * \note Valid ranges: 0..1, default is 0 - * 0 = Limited range (16..235 or HBD equivalent) - * 1 = Full range (0..255 or HBD equivalent) - * - * Supported in codecs: VP9 - */ - VP9E_SET_COLOR_RANGE, - - /*!\brief Codec control function to set the frame flags and buffer indices - * for spatial layers. The frame flags and buffer indices are set using the - * struct #vpx_svc_ref_frame_config defined below. - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_REF_FRAME_CONFIG, - - /*!\brief Codec control function to set intended rendering image size. - * - * By default, this is identical to the image size in pixels. - * - * Supported in codecs: VP9 - */ - VP9E_SET_RENDER_SIZE, - - /*!\brief Codec control function to set target level. - * - * 255: off (default); 0: only keep level stats; 10: target for level 1.0; - * 11: target for level 1.1; ... 62: target for level 6.2 - * - * Supported in codecs: VP9 - */ - VP9E_SET_TARGET_LEVEL, - - /*!\brief Codec control function to set row level multi-threading. - * - * 0 : off, 1 : on - * - * Supported in codecs: VP9 - */ - VP9E_SET_ROW_MT, - - /*!\brief Codec control function to get bitstream level. - * - * Supported in codecs: VP9 - */ - VP9E_GET_LEVEL, - - /*!\brief Codec control function to enable/disable special mode for altref - * adaptive quantization. You can use it with --aq-mode concurrently. - * - * Enable special adaptive quantization for altref frames based on their - * expected prediction quality for the future frames. - * - * Supported in codecs: VP9 - */ - VP9E_SET_ALT_REF_AQ, - - /*!\brief Boost percentage for Golden Frame in CBR mode. - * - * This value controls the amount of boost given to Golden Frame in - * CBR mode. It is expressed as a percentage of the average - * per-frame bitrate, with the special (and default) value 0 meaning - * the feature is off, i.e., no golden frame boost in CBR mode and - * average bitrate target is used. - * - * For example, to allow 100% more bits, i.e, 2X, in a golden frame - * than average frame, set this to 100. - * - * Supported in codecs: VP8 - */ - VP8E_SET_GF_CBR_BOOST_PCT, - - /*!\brief Codec control function to enable the extreme motion vector unit test - * in VP9. Please note that this is only used in motion vector unit test. - * - * 0 : off, 1 : MAX_EXTREME_MV, 2 : MIN_EXTREME_MV - * - * Supported in codecs: VP9 - */ - VP9E_ENABLE_MOTION_VECTOR_UNIT_TEST, - - /*!\brief Codec control function to constrain the inter-layer prediction - * (prediction of lower spatial resolution) in VP9 SVC. - * - * 0 : inter-layer prediction on, 1 : off, 2 : off only on non-key frames - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_INTER_LAYER_PRED, - - /*!\brief Codec control function to set mode and thresholds for frame - * dropping in SVC. Drop frame thresholds are set per-layer. Mode is set as: - * 0 : layer-dependent dropping, 1 : constrained dropping, current layer drop - * forces drop on all upper layers. Default mode is 0. - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_FRAME_DROP_LAYER, - - /*!\brief Codec control function to get the refresh and reference flags and - * the buffer indices, up to the last encoded spatial layer. - * - * Supported in codecs: VP9 - */ - VP9E_GET_SVC_REF_FRAME_CONFIG, - - /*!\brief Codec control function to enable/disable use of golden reference as - * a second temporal reference for SVC. Only used when inter-layer prediction - * is disabled on INTER frames. - * - * 0: Off, 1: Enabled (default) - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_GF_TEMPORAL_REF, - - /*!\brief Codec control function to enable spatial layer sync frame, for any - * spatial layer. Enabling it for layer k means spatial layer k will disable - * all temporal prediction, but keep the inter-layer prediction. It will - * refresh any temporal reference buffer for that layer, and reset the - * temporal layer for the superframe to 0. Setting the layer sync for base - * spatial layer forces a key frame. Default is off (0) for all spatial - * layers. Spatial layer sync flag is reset to 0 after each encoded layer, - * so when control is invoked it is only used for the current superframe. - * - * 0: Off (default), 1: Enabled - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_SPATIAL_LAYER_SYNC, - - /*!\brief Codec control function to enable temporal dependency model. - * - * Vp9 allows the encoder to run temporal dependency model and use it to - * improve the compression performance. To enable, set this parameter to be - * 1. The default value is set to be 1. - */ - VP9E_SET_TPL, - - /*!\brief Codec control function to enable postencode frame drop. - * - * This will allow encoder to drop frame after it's encoded. - * - * 0: Off (default), 1: Enabled - * - * Supported in codecs: VP9 - */ - VP9E_SET_POSTENCODE_DROP, -}; - -/*!\brief vpx 1-D scaling mode - * - * This set of constants define 1-D vpx scaling modes - */ -typedef enum vpx_scaling_mode_1d { - VP8E_NORMAL = 0, - VP8E_FOURFIVE = 1, - VP8E_THREEFIVE = 2, - VP8E_ONETWO = 3 -} VPX_SCALING_MODE; - -/*!\brief Temporal layering mode enum for VP9 SVC. - * - * This set of macros define the different temporal layering modes. - * Supported codecs: VP9 (in SVC mode) - * - */ -typedef enum vp9e_temporal_layering_mode { - /*!\brief No temporal layering. - * Used when only spatial layering is used. - */ - VP9E_TEMPORAL_LAYERING_MODE_NOLAYERING = 0, - - /*!\brief Bypass mode. - * Used when application needs to control temporal layering. - * This will only work when the number of spatial layers equals 1. - */ - VP9E_TEMPORAL_LAYERING_MODE_BYPASS = 1, - - /*!\brief 0-1-0-1... temporal layering scheme with two temporal layers. - */ - VP9E_TEMPORAL_LAYERING_MODE_0101 = 2, - - /*!\brief 0-2-1-2... temporal layering scheme with three temporal layers. - */ - VP9E_TEMPORAL_LAYERING_MODE_0212 = 3 -} VP9E_TEMPORAL_LAYERING_MODE; - -/*!\brief vpx region of interest map - * - * These defines the data structures for the region of interest map - * - */ - -typedef struct vpx_roi_map { - /*! If ROI is enabled. */ - uint8_t enabled; - /*! An id between 0-3 (0-7 for vp9) for each 16x16 (8x8 for VP9) - * region within a frame. */ - unsigned char *roi_map; - unsigned int rows; /**< Number of rows. */ - unsigned int cols; /**< Number of columns. */ - /*! VP8 only uses the first 4 segments. VP9 uses 8 segments. */ - int delta_q[8]; /**< Quantizer deltas. */ - int delta_lf[8]; /**< Loop filter deltas. */ - /*! skip and ref frame segment is only used in VP9. */ - int skip[8]; /**< Skip this block. */ - int ref_frame[8]; /**< Reference frame for this block. */ - /*! Static breakout threshold for each segment. Only used in VP8. */ - unsigned int static_threshold[4]; -} vpx_roi_map_t; - -/*!\brief vpx active region map - * - * These defines the data structures for active region map - * - */ - -typedef struct vpx_active_map { - /*!\brief specify an on (1) or off (0) each 16x16 region within a frame */ - unsigned char *active_map; - unsigned int rows; /**< number of rows */ - unsigned int cols; /**< number of cols */ -} vpx_active_map_t; - -/*!\brief vpx image scaling mode - * - * This defines the data structure for image scaling mode - * - */ -typedef struct vpx_scaling_mode { - VPX_SCALING_MODE h_scaling_mode; /**< horizontal scaling mode */ - VPX_SCALING_MODE v_scaling_mode; /**< vertical scaling mode */ -} vpx_scaling_mode_t; - -/*!\brief VP8 token partition mode - * - * This defines VP8 partitioning mode for compressed data, i.e., the number of - * sub-streams in the bitstream. Used for parallelized decoding. - * - */ - -typedef enum { - VP8_ONE_TOKENPARTITION = 0, - VP8_TWO_TOKENPARTITION = 1, - VP8_FOUR_TOKENPARTITION = 2, - VP8_EIGHT_TOKENPARTITION = 3 -} vp8e_token_partitions; - -/*!brief VP9 encoder content type */ -typedef enum { - VP9E_CONTENT_DEFAULT, - VP9E_CONTENT_SCREEN, - VP9E_CONTENT_FILM, - VP9E_CONTENT_INVALID -} vp9e_tune_content; - -/*!\brief VP8 model tuning parameters - * - * Changes the encoder to tune for certain types of input material. - * - */ -typedef enum { VP8_TUNE_PSNR, VP8_TUNE_SSIM } vp8e_tuning; - -/*!\brief vp9 svc layer parameters - * - * This defines the spatial and temporal layer id numbers for svc encoding. - * This is used with the #VP9E_SET_SVC_LAYER_ID control to set the spatial and - * temporal layer id for the current frame. - * - */ -typedef struct vpx_svc_layer_id { - int spatial_layer_id; /**< First spatial layer to start encoding. */ - // TODO(jianj): Deprecated, to be removed. - int temporal_layer_id; /**< Temporal layer id number. */ - int temporal_layer_id_per_spatial[VPX_SS_MAX_LAYERS]; /**< Temp layer id. */ -} vpx_svc_layer_id_t; - -/*!\brief vp9 svc frame flag parameters. - * - * This defines the frame flags and buffer indices for each spatial layer for - * svc encoding. - * This is used with the #VP9E_SET_SVC_REF_FRAME_CONFIG control to set frame - * flags and buffer indices for each spatial layer for the current (super)frame. - * - */ -typedef struct vpx_svc_ref_frame_config { - int lst_fb_idx[VPX_SS_MAX_LAYERS]; /**< Last buffer index. */ - int gld_fb_idx[VPX_SS_MAX_LAYERS]; /**< Golden buffer index. */ - int alt_fb_idx[VPX_SS_MAX_LAYERS]; /**< Altref buffer index. */ - int update_buffer_slot[VPX_SS_MAX_LAYERS]; /**< Update reference frames. */ - // TODO(jianj): Remove update_last/golden/alt_ref, these are deprecated. - int update_last[VPX_SS_MAX_LAYERS]; /**< Update last. */ - int update_golden[VPX_SS_MAX_LAYERS]; /**< Update golden. */ - int update_alt_ref[VPX_SS_MAX_LAYERS]; /**< Update altref. */ - int reference_last[VPX_SS_MAX_LAYERS]; /**< Last as reference. */ - int reference_golden[VPX_SS_MAX_LAYERS]; /**< Golden as reference. */ - int reference_alt_ref[VPX_SS_MAX_LAYERS]; /**< Altref as reference. */ - int64_t duration[VPX_SS_MAX_LAYERS]; /**< Duration per spatial layer. */ -} vpx_svc_ref_frame_config_t; - -/*!\brief VP9 svc frame dropping mode. - * - * This defines the frame drop mode for SVC. - * - */ -typedef enum { - CONSTRAINED_LAYER_DROP, - /**< Upper layers are constrained to drop if current layer drops. */ - LAYER_DROP, /**< Any spatial layer can drop. */ - FULL_SUPERFRAME_DROP, /**< Only full superframe can drop. */ -} SVC_LAYER_DROP_MODE; - -/*!\brief vp9 svc frame dropping parameters. - * - * This defines the frame drop thresholds for each spatial layer, and - * the frame dropping mode: 0 = layer based frame dropping (default), - * 1 = constrained dropping where current layer drop forces all upper - * spatial layers to drop. - */ -typedef struct vpx_svc_frame_drop { - int framedrop_thresh[VPX_SS_MAX_LAYERS]; /**< Frame drop thresholds */ - SVC_LAYER_DROP_MODE - framedrop_mode; /**< Layer-based or constrained dropping. */ - int max_consec_drop; /**< Maximum consecutive drops, for any layer. */ -} vpx_svc_frame_drop_t; - -/*!\brief vp9 svc spatial layer sync parameters. - * - * This defines the spatial layer sync flag, defined per spatial layer. - * - */ -typedef struct vpx_svc_spatial_layer_sync { - int spatial_layer_sync[VPX_SS_MAX_LAYERS]; /**< Sync layer flags */ - int base_layer_intra_only; /**< Flag for setting Intra-only frame on base */ -} vpx_svc_spatial_layer_sync_t; - -/*!\cond */ -/*!\brief VP8 encoder control function parameter type - * - * Defines the data types that VP8E control functions take. Note that - * additional common controls are defined in vp8.h - * - */ - -VPX_CTRL_USE_TYPE(VP8E_SET_FRAME_FLAGS, int) -#define VPX_CTRL_VP8E_SET_FRAME_FLAGS -VPX_CTRL_USE_TYPE(VP8E_SET_TEMPORAL_LAYER_ID, int) -#define VPX_CTRL_VP8E_SET_TEMPORAL_LAYER_ID -VPX_CTRL_USE_TYPE(VP8E_SET_ROI_MAP, vpx_roi_map_t *) -#define VPX_CTRL_VP8E_SET_ROI_MAP -VPX_CTRL_USE_TYPE(VP9E_SET_ROI_MAP, vpx_roi_map_t *) -#define VPX_CTRL_VP9E_SET_ROI_MAP -VPX_CTRL_USE_TYPE(VP8E_SET_ACTIVEMAP, vpx_active_map_t *) -#define VPX_CTRL_VP8E_SET_ACTIVEMAP -VPX_CTRL_USE_TYPE(VP8E_SET_SCALEMODE, vpx_scaling_mode_t *) -#define VPX_CTRL_VP8E_SET_SCALEMODE - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC, int) -#define VPX_CTRL_VP9E_SET_SVC -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_PARAMETERS, void *) -#define VPX_CTRL_VP9E_SET_SVC_PARAMETERS -VPX_CTRL_USE_TYPE(VP9E_REGISTER_CX_CALLBACK, void *) -#define VPX_CTRL_VP9E_REGISTER_CX_CALLBACK -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_LAYER_ID, vpx_svc_layer_id_t *) -#define VPX_CTRL_VP9E_SET_SVC_LAYER_ID - -VPX_CTRL_USE_TYPE(VP8E_SET_CPUUSED, int) -#define VPX_CTRL_VP8E_SET_CPUUSED -VPX_CTRL_USE_TYPE(VP8E_SET_ENABLEAUTOALTREF, unsigned int) -#define VPX_CTRL_VP8E_SET_ENABLEAUTOALTREF -VPX_CTRL_USE_TYPE(VP8E_SET_NOISE_SENSITIVITY, unsigned int) -#define VPX_CTRL_VP8E_SET_NOISE_SENSITIVITY -VPX_CTRL_USE_TYPE(VP8E_SET_SHARPNESS, unsigned int) -#define VPX_CTRL_VP8E_SET_SHARPNESS -VPX_CTRL_USE_TYPE(VP8E_SET_STATIC_THRESHOLD, unsigned int) -#define VPX_CTRL_VP8E_SET_STATIC_THRESHOLD -VPX_CTRL_USE_TYPE(VP8E_SET_TOKEN_PARTITIONS, int) /* vp8e_token_partitions */ -#define VPX_CTRL_VP8E_SET_TOKEN_PARTITIONS - -VPX_CTRL_USE_TYPE(VP8E_SET_ARNR_MAXFRAMES, unsigned int) -#define VPX_CTRL_VP8E_SET_ARNR_MAXFRAMES -VPX_CTRL_USE_TYPE(VP8E_SET_ARNR_STRENGTH, unsigned int) -#define VPX_CTRL_VP8E_SET_ARNR_STRENGTH -VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_SET_ARNR_TYPE, unsigned int) -#define VPX_CTRL_VP8E_SET_ARNR_TYPE -VPX_CTRL_USE_TYPE(VP8E_SET_TUNING, int) /* vp8e_tuning */ -#define VPX_CTRL_VP8E_SET_TUNING -VPX_CTRL_USE_TYPE(VP8E_SET_CQ_LEVEL, unsigned int) -#define VPX_CTRL_VP8E_SET_CQ_LEVEL - -VPX_CTRL_USE_TYPE(VP9E_SET_TILE_COLUMNS, int) -#define VPX_CTRL_VP9E_SET_TILE_COLUMNS -VPX_CTRL_USE_TYPE(VP9E_SET_TILE_ROWS, int) -#define VPX_CTRL_VP9E_SET_TILE_ROWS - -VPX_CTRL_USE_TYPE(VP9E_SET_TPL, int) -#define VPX_CTRL_VP9E_SET_TPL - -VPX_CTRL_USE_TYPE(VP8E_GET_LAST_QUANTIZER, int *) -#define VPX_CTRL_VP8E_GET_LAST_QUANTIZER -VPX_CTRL_USE_TYPE(VP8E_GET_LAST_QUANTIZER_64, int *) -#define VPX_CTRL_VP8E_GET_LAST_QUANTIZER_64 -VPX_CTRL_USE_TYPE(VP9E_GET_SVC_LAYER_ID, vpx_svc_layer_id_t *) -#define VPX_CTRL_VP9E_GET_SVC_LAYER_ID - -VPX_CTRL_USE_TYPE(VP8E_SET_MAX_INTRA_BITRATE_PCT, unsigned int) -#define VPX_CTRL_VP8E_SET_MAX_INTRA_BITRATE_PCT -VPX_CTRL_USE_TYPE(VP8E_SET_MAX_INTER_BITRATE_PCT, unsigned int) -#define VPX_CTRL_VP8E_SET_MAX_INTER_BITRATE_PCT - -VPX_CTRL_USE_TYPE(VP8E_SET_GF_CBR_BOOST_PCT, unsigned int) -#define VPX_CTRL_VP8E_SET_GF_CBR_BOOST_PCT - -VPX_CTRL_USE_TYPE(VP8E_SET_SCREEN_CONTENT_MODE, unsigned int) -#define VPX_CTRL_VP8E_SET_SCREEN_CONTENT_MODE - -VPX_CTRL_USE_TYPE(VP9E_SET_GF_CBR_BOOST_PCT, unsigned int) -#define VPX_CTRL_VP9E_SET_GF_CBR_BOOST_PCT - -VPX_CTRL_USE_TYPE(VP9E_SET_LOSSLESS, unsigned int) -#define VPX_CTRL_VP9E_SET_LOSSLESS - -VPX_CTRL_USE_TYPE(VP9E_SET_FRAME_PARALLEL_DECODING, unsigned int) -#define VPX_CTRL_VP9E_SET_FRAME_PARALLEL_DECODING - -VPX_CTRL_USE_TYPE(VP9E_SET_AQ_MODE, unsigned int) -#define VPX_CTRL_VP9E_SET_AQ_MODE - -VPX_CTRL_USE_TYPE(VP9E_SET_ALT_REF_AQ, int) -#define VPX_CTRL_VP9E_SET_ALT_REF_AQ - -VPX_CTRL_USE_TYPE(VP9E_SET_FRAME_PERIODIC_BOOST, unsigned int) -#define VPX_CTRL_VP9E_SET_FRAME_PERIODIC_BOOST - -VPX_CTRL_USE_TYPE(VP9E_SET_NOISE_SENSITIVITY, unsigned int) -#define VPX_CTRL_VP9E_SET_NOISE_SENSITIVITY - -VPX_CTRL_USE_TYPE(VP9E_SET_TUNE_CONTENT, int) /* vp9e_tune_content */ -#define VPX_CTRL_VP9E_SET_TUNE_CONTENT - -VPX_CTRL_USE_TYPE(VP9E_SET_COLOR_SPACE, int) -#define VPX_CTRL_VP9E_SET_COLOR_SPACE - -VPX_CTRL_USE_TYPE(VP9E_SET_MIN_GF_INTERVAL, unsigned int) -#define VPX_CTRL_VP9E_SET_MIN_GF_INTERVAL - -VPX_CTRL_USE_TYPE(VP9E_SET_MAX_GF_INTERVAL, unsigned int) -#define VPX_CTRL_VP9E_SET_MAX_GF_INTERVAL - -VPX_CTRL_USE_TYPE(VP9E_GET_ACTIVEMAP, vpx_active_map_t *) -#define VPX_CTRL_VP9E_GET_ACTIVEMAP - -VPX_CTRL_USE_TYPE(VP9E_SET_COLOR_RANGE, int) -#define VPX_CTRL_VP9E_SET_COLOR_RANGE - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_REF_FRAME_CONFIG, vpx_svc_ref_frame_config_t *) -#define VPX_CTRL_VP9E_SET_SVC_REF_FRAME_CONFIG - -VPX_CTRL_USE_TYPE(VP9E_SET_RENDER_SIZE, int *) -#define VPX_CTRL_VP9E_SET_RENDER_SIZE - -VPX_CTRL_USE_TYPE(VP9E_SET_TARGET_LEVEL, unsigned int) -#define VPX_CTRL_VP9E_SET_TARGET_LEVEL - -VPX_CTRL_USE_TYPE(VP9E_SET_ROW_MT, unsigned int) -#define VPX_CTRL_VP9E_SET_ROW_MT - -VPX_CTRL_USE_TYPE(VP9E_GET_LEVEL, int *) -#define VPX_CTRL_VP9E_GET_LEVEL - -VPX_CTRL_USE_TYPE(VP9E_ENABLE_MOTION_VECTOR_UNIT_TEST, unsigned int) -#define VPX_CTRL_VP9E_ENABLE_MOTION_VECTOR_UNIT_TEST - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_INTER_LAYER_PRED, unsigned int) -#define VPX_CTRL_VP9E_SET_SVC_INTER_LAYER_PRED - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_FRAME_DROP_LAYER, vpx_svc_frame_drop_t *) -#define VPX_CTRL_VP9E_SET_SVC_FRAME_DROP_LAYER - -VPX_CTRL_USE_TYPE(VP9E_GET_SVC_REF_FRAME_CONFIG, vpx_svc_ref_frame_config_t *) -#define VPX_CTRL_VP9E_GET_SVC_REF_FRAME_CONFIG - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_GF_TEMPORAL_REF, unsigned int) -#define VPX_CTRL_VP9E_SET_SVC_GF_TEMPORAL_REF - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_SPATIAL_LAYER_SYNC, - vpx_svc_spatial_layer_sync_t *) -#define VPX_CTRL_VP9E_SET_SVC_SPATIAL_LAYER_SYNC - -VPX_CTRL_USE_TYPE(VP9E_SET_POSTENCODE_DROP, unsigned int) -#define VPX_CTRL_VP9E_SET_POSTENCODE_DROP - -/*!\endcond */ -/*! @} - end defgroup vp8_encoder */ -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // VPX_VPX_VP8CX_H_ diff --git a/vpx-encoder/android_libs/arm64-v8a/include/vpx/vp8dx.h b/vpx-encoder/android_libs/arm64-v8a/include/vpx/vp8dx.h deleted file mode 100644 index af92f21a..00000000 --- a/vpx-encoder/android_libs/arm64-v8a/include/vpx/vp8dx.h +++ /dev/null @@ -1,210 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -/*!\defgroup vp8_decoder WebM VP8/VP9 Decoder - * \ingroup vp8 - * - * @{ - */ -/*!\file - * \brief Provides definitions for using VP8 or VP9 within the vpx Decoder - * interface. - */ -#ifndef VPX_VPX_VP8DX_H_ -#define VPX_VPX_VP8DX_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Include controls common to both the encoder and decoder */ -#include "./vp8.h" - -/*!\name Algorithm interface for VP8 - * - * This interface provides the capability to decode VP8 streams. - * @{ - */ -extern vpx_codec_iface_t vpx_codec_vp8_dx_algo; -extern vpx_codec_iface_t *vpx_codec_vp8_dx(void); -/*!@} - end algorithm interface member group*/ - -/*!\name Algorithm interface for VP9 - * - * This interface provides the capability to decode VP9 streams. - * @{ - */ -extern vpx_codec_iface_t vpx_codec_vp9_dx_algo; -extern vpx_codec_iface_t *vpx_codec_vp9_dx(void); -/*!@} - end algorithm interface member group*/ - -/*!\enum vp8_dec_control_id - * \brief VP8 decoder control functions - * - * This set of macros define the control functions available for the VP8 - * decoder interface. - * - * \sa #vpx_codec_control - */ -enum vp8_dec_control_id { - /** control function to get info on which reference frames were updated - * by the last decode - */ - VP8D_GET_LAST_REF_UPDATES = VP8_DECODER_CTRL_ID_START, - - /** check if the indicated frame is corrupted */ - VP8D_GET_FRAME_CORRUPTED, - - /** control function to get info on which reference frames were used - * by the last decode - */ - VP8D_GET_LAST_REF_USED, - - /** decryption function to decrypt encoded buffer data immediately - * before decoding. Takes a vpx_decrypt_init, which contains - * a callback function and opaque context pointer. - */ - VPXD_SET_DECRYPTOR, - VP8D_SET_DECRYPTOR = VPXD_SET_DECRYPTOR, - - /** control function to get the dimensions that the current frame is decoded - * at. This may be different to the intended display size for the frame as - * specified in the wrapper or frame header (see VP9D_GET_DISPLAY_SIZE). */ - VP9D_GET_FRAME_SIZE, - - /** control function to get the current frame's intended display dimensions - * (as specified in the wrapper or frame header). This may be different to - * the decoded dimensions of this frame (see VP9D_GET_FRAME_SIZE). */ - VP9D_GET_DISPLAY_SIZE, - - /** control function to get the bit depth of the stream. */ - VP9D_GET_BIT_DEPTH, - - /** control function to set the byte alignment of the planes in the reference - * buffers. Valid values are power of 2, from 32 to 1024. A value of 0 sets - * legacy alignment. I.e. Y plane is aligned to 32 bytes, U plane directly - * follows Y plane, and V plane directly follows U plane. Default value is 0. - */ - VP9_SET_BYTE_ALIGNMENT, - - /** control function to invert the decoding order to from right to left. The - * function is used in a test to confirm the decoding independence of tile - * columns. The function may be used in application where this order - * of decoding is desired. - * - * TODO(yaowu): Rework the unit test that uses this control, and in a future - * release, this test-only control shall be removed. - */ - VP9_INVERT_TILE_DECODE_ORDER, - - /** control function to set the skip loop filter flag. Valid values are - * integers. The decoder will skip the loop filter when its value is set to - * nonzero. If the loop filter is skipped the decoder may accumulate decode - * artifacts. The default value is 0. - */ - VP9_SET_SKIP_LOOP_FILTER, - - /** control function to decode SVC stream up to the x spatial layers, - * where x is passed in through the control, and is 0 for base layer. - */ - VP9_DECODE_SVC_SPATIAL_LAYER, - - /*!\brief Codec control function to get last decoded frame quantizer. - * - * Return value uses internal quantizer scale defined by the codec. - * - * Supported in codecs: VP8, VP9 - */ - VPXD_GET_LAST_QUANTIZER, - - /*!\brief Codec control function to set row level multi-threading. - * - * 0 : off, 1 : on - * - * Supported in codecs: VP9 - */ - VP9D_SET_ROW_MT, - - /*!\brief Codec control function to set loopfilter optimization. - * - * 0 : off, Loop filter is done after all tiles have been decoded - * 1 : on, Loop filter is done immediately after decode without - * waiting for all threads to sync. - * - * Supported in codecs: VP9 - */ - VP9D_SET_LOOP_FILTER_OPT, - - VP8_DECODER_CTRL_ID_MAX -}; - -/** Decrypt n bytes of data from input -> output, using the decrypt_state - * passed in VPXD_SET_DECRYPTOR. - */ -typedef void (*vpx_decrypt_cb)(void *decrypt_state, const unsigned char *input, - unsigned char *output, int count); - -/*!\brief Structure to hold decryption state - * - * Defines a structure to hold the decryption state and access function. - */ -typedef struct vpx_decrypt_init { - /*! Decrypt callback. */ - vpx_decrypt_cb decrypt_cb; - - /*! Decryption state. */ - void *decrypt_state; -} vpx_decrypt_init; - -/*!\cond */ -/*!\brief VP8 decoder control function parameter type - * - * Defines the data types that VP8D control functions take. Note that - * additional common controls are defined in vp8.h - * - */ - -VPX_CTRL_USE_TYPE(VP8D_GET_LAST_REF_UPDATES, int *) -#define VPX_CTRL_VP8D_GET_LAST_REF_UPDATES -VPX_CTRL_USE_TYPE(VP8D_GET_FRAME_CORRUPTED, int *) -#define VPX_CTRL_VP8D_GET_FRAME_CORRUPTED -VPX_CTRL_USE_TYPE(VP8D_GET_LAST_REF_USED, int *) -#define VPX_CTRL_VP8D_GET_LAST_REF_USED -VPX_CTRL_USE_TYPE(VPXD_GET_LAST_QUANTIZER, int *) -#define VPX_CTRL_VPXD_GET_LAST_QUANTIZER -VPX_CTRL_USE_TYPE(VPXD_SET_DECRYPTOR, vpx_decrypt_init *) -#define VPX_CTRL_VPXD_SET_DECRYPTOR -VPX_CTRL_USE_TYPE(VP8D_SET_DECRYPTOR, vpx_decrypt_init *) -#define VPX_CTRL_VP8D_SET_DECRYPTOR -VPX_CTRL_USE_TYPE(VP9D_GET_DISPLAY_SIZE, int *) -#define VPX_CTRL_VP9D_GET_DISPLAY_SIZE -VPX_CTRL_USE_TYPE(VP9D_GET_BIT_DEPTH, unsigned int *) -#define VPX_CTRL_VP9D_GET_BIT_DEPTH -VPX_CTRL_USE_TYPE(VP9D_GET_FRAME_SIZE, int *) -#define VPX_CTRL_VP9D_GET_FRAME_SIZE -VPX_CTRL_USE_TYPE(VP9_INVERT_TILE_DECODE_ORDER, int) -#define VPX_CTRL_VP9_INVERT_TILE_DECODE_ORDER -#define VPX_CTRL_VP9_DECODE_SVC_SPATIAL_LAYER -VPX_CTRL_USE_TYPE(VP9_DECODE_SVC_SPATIAL_LAYER, int) -#define VPX_CTRL_VP9_SET_SKIP_LOOP_FILTER -VPX_CTRL_USE_TYPE(VP9_SET_SKIP_LOOP_FILTER, int) -#define VPX_CTRL_VP9_DECODE_SET_ROW_MT -VPX_CTRL_USE_TYPE(VP9D_SET_ROW_MT, int) -#define VPX_CTRL_VP9_SET_LOOP_FILTER_OPT -VPX_CTRL_USE_TYPE(VP9D_SET_LOOP_FILTER_OPT, int) - -/*!\endcond */ -/*! @} - end defgroup vp8_decoder */ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // VPX_VPX_VP8DX_H_ diff --git a/vpx-encoder/android_libs/arm64-v8a/include/vpx/vpx_codec.h b/vpx-encoder/android_libs/arm64-v8a/include/vpx/vpx_codec.h deleted file mode 100644 index 0f8d7851..00000000 --- a/vpx-encoder/android_libs/arm64-v8a/include/vpx/vpx_codec.h +++ /dev/null @@ -1,468 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -/*!\defgroup codec Common Algorithm Interface - * This abstraction allows applications to easily support multiple video - * formats with minimal code duplication. This section describes the interface - * common to all codecs (both encoders and decoders). - * @{ - */ - -/*!\file - * \brief Describes the codec algorithm interface to applications. - * - * This file describes the interface between an application and a - * video codec algorithm. - * - * An application instantiates a specific codec instance by using - * vpx_codec_init() and a pointer to the algorithm's interface structure: - *
- *     my_app.c:
- *       extern vpx_codec_iface_t my_codec;
- *       {
- *           vpx_codec_ctx_t algo;
- *           res = vpx_codec_init(&algo, &my_codec);
- *       }
- *     
- * - * Once initialized, the instance is manged using other functions from - * the vpx_codec_* family. - */ -#ifndef VPX_VPX_VPX_CODEC_H_ -#define VPX_VPX_VPX_CODEC_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "./vpx_image.h" -#include "./vpx_integer.h" - -/*!\brief Decorator indicating a function is deprecated */ -#ifndef VPX_DEPRECATED -#if defined(__GNUC__) && __GNUC__ -#define VPX_DEPRECATED __attribute__((deprecated)) -#elif defined(_MSC_VER) -#define VPX_DEPRECATED -#else -#define VPX_DEPRECATED -#endif -#endif /* VPX_DEPRECATED */ - -#ifndef VPX_DECLSPEC_DEPRECATED -#if defined(__GNUC__) && __GNUC__ -#define VPX_DECLSPEC_DEPRECATED /**< \copydoc #VPX_DEPRECATED */ -#elif defined(_MSC_VER) -/*!\brief \copydoc #VPX_DEPRECATED */ -#define VPX_DECLSPEC_DEPRECATED __declspec(deprecated) -#else -#define VPX_DECLSPEC_DEPRECATED /**< \copydoc #VPX_DEPRECATED */ -#endif -#endif /* VPX_DECLSPEC_DEPRECATED */ - -/*!\brief Decorator indicating a function is potentially unused */ -#ifndef VPX_UNUSED -#if defined(__GNUC__) || defined(__clang__) -#define VPX_UNUSED __attribute__((unused)) -#else -#define VPX_UNUSED -#endif -#endif /* VPX_UNUSED */ - -/*!\brief Current ABI version number - * - * \internal - * If this file is altered in any way that changes the ABI, this value - * must be bumped. Examples include, but are not limited to, changing - * types, removing or reassigning enums, adding/removing/rearranging - * fields to structures - */ -#define VPX_CODEC_ABI_VERSION (4 + VPX_IMAGE_ABI_VERSION) /**<\hideinitializer*/ - -/*!\brief Algorithm return codes */ -typedef enum { - /*!\brief Operation completed without error */ - VPX_CODEC_OK, - - /*!\brief Unspecified error */ - VPX_CODEC_ERROR, - - /*!\brief Memory operation failed */ - VPX_CODEC_MEM_ERROR, - - /*!\brief ABI version mismatch */ - VPX_CODEC_ABI_MISMATCH, - - /*!\brief Algorithm does not have required capability */ - VPX_CODEC_INCAPABLE, - - /*!\brief The given bitstream is not supported. - * - * The bitstream was unable to be parsed at the highest level. The decoder - * is unable to proceed. This error \ref SHOULD be treated as fatal to the - * stream. */ - VPX_CODEC_UNSUP_BITSTREAM, - - /*!\brief Encoded bitstream uses an unsupported feature - * - * The decoder does not implement a feature required by the encoder. This - * return code should only be used for features that prevent future - * pictures from being properly decoded. This error \ref MAY be treated as - * fatal to the stream or \ref MAY be treated as fatal to the current GOP. - */ - VPX_CODEC_UNSUP_FEATURE, - - /*!\brief The coded data for this stream is corrupt or incomplete - * - * There was a problem decoding the current frame. This return code - * should only be used for failures that prevent future pictures from - * being properly decoded. This error \ref MAY be treated as fatal to the - * stream or \ref MAY be treated as fatal to the current GOP. If decoding - * is continued for the current GOP, artifacts may be present. - */ - VPX_CODEC_CORRUPT_FRAME, - - /*!\brief An application-supplied parameter is not valid. - * - */ - VPX_CODEC_INVALID_PARAM, - - /*!\brief An iterator reached the end of list. - * - */ - VPX_CODEC_LIST_END - -} vpx_codec_err_t; - -/*! \brief Codec capabilities bitfield - * - * Each codec advertises the capabilities it supports as part of its - * ::vpx_codec_iface_t interface structure. Capabilities are extra interfaces - * or functionality, and are not required to be supported. - * - * The available flags are specified by VPX_CODEC_CAP_* defines. - */ -typedef long vpx_codec_caps_t; -#define VPX_CODEC_CAP_DECODER 0x1 /**< Is a decoder */ -#define VPX_CODEC_CAP_ENCODER 0x2 /**< Is an encoder */ - -/*! Can support images at greater than 8 bitdepth. - */ -#define VPX_CODEC_CAP_HIGHBITDEPTH 0x4 - -/*! \brief Initialization-time Feature Enabling - * - * Certain codec features must be known at initialization time, to allow for - * proper memory allocation. - * - * The available flags are specified by VPX_CODEC_USE_* defines. - */ -typedef long vpx_codec_flags_t; - -/*!\brief Codec interface structure. - * - * Contains function pointers and other data private to the codec - * implementation. This structure is opaque to the application. - */ -typedef const struct vpx_codec_iface vpx_codec_iface_t; - -/*!\brief Codec private data structure. - * - * Contains data private to the codec implementation. This structure is opaque - * to the application. - */ -typedef struct vpx_codec_priv vpx_codec_priv_t; - -/*!\brief Iterator - * - * Opaque storage used for iterating over lists. - */ -typedef const void *vpx_codec_iter_t; - -/*!\brief Codec context structure - * - * All codecs \ref MUST support this context structure fully. In general, - * this data should be considered private to the codec algorithm, and - * not be manipulated or examined by the calling application. Applications - * may reference the 'name' member to get a printable description of the - * algorithm. - */ -typedef struct vpx_codec_ctx { - const char *name; /**< Printable interface name */ - vpx_codec_iface_t *iface; /**< Interface pointers */ - vpx_codec_err_t err; /**< Last returned error */ - const char *err_detail; /**< Detailed info, if available */ - vpx_codec_flags_t init_flags; /**< Flags passed at init time */ - union { - /**< Decoder Configuration Pointer */ - const struct vpx_codec_dec_cfg *dec; - /**< Encoder Configuration Pointer */ - const struct vpx_codec_enc_cfg *enc; - const void *raw; - } config; /**< Configuration pointer aliasing union */ - vpx_codec_priv_t *priv; /**< Algorithm private storage */ -} vpx_codec_ctx_t; - -/*!\brief Bit depth for codec - * * - * This enumeration determines the bit depth of the codec. - */ -typedef enum vpx_bit_depth { - VPX_BITS_8 = 8, /**< 8 bits */ - VPX_BITS_10 = 10, /**< 10 bits */ - VPX_BITS_12 = 12, /**< 12 bits */ -} vpx_bit_depth_t; - -/* - * Library Version Number Interface - * - * For example, see the following sample return values: - * vpx_codec_version() (1<<16 | 2<<8 | 3) - * vpx_codec_version_str() "v1.2.3-rc1-16-gec6a1ba" - * vpx_codec_version_extra_str() "rc1-16-gec6a1ba" - */ - -/*!\brief Return the version information (as an integer) - * - * Returns a packed encoding of the library version number. This will only - * include - * the major.minor.patch component of the version number. Note that this encoded - * value should be accessed through the macros provided, as the encoding may - * change - * in the future. - * - */ -int vpx_codec_version(void); -#define VPX_VERSION_MAJOR(v) \ - ((v >> 16) & 0xff) /**< extract major from packed version */ -#define VPX_VERSION_MINOR(v) \ - ((v >> 8) & 0xff) /**< extract minor from packed version */ -#define VPX_VERSION_PATCH(v) \ - ((v >> 0) & 0xff) /**< extract patch from packed version */ - -/*!\brief Return the version major number */ -#define vpx_codec_version_major() ((vpx_codec_version() >> 16) & 0xff) - -/*!\brief Return the version minor number */ -#define vpx_codec_version_minor() ((vpx_codec_version() >> 8) & 0xff) - -/*!\brief Return the version patch number */ -#define vpx_codec_version_patch() ((vpx_codec_version() >> 0) & 0xff) - -/*!\brief Return the version information (as a string) - * - * Returns a printable string containing the full library version number. This - * may - * contain additional text following the three digit version number, as to - * indicate - * release candidates, prerelease versions, etc. - * - */ -const char *vpx_codec_version_str(void); - -/*!\brief Return the version information (as a string) - * - * Returns a printable "extra string". This is the component of the string - * returned - * by vpx_codec_version_str() following the three digit version number. - * - */ -const char *vpx_codec_version_extra_str(void); - -/*!\brief Return the build configuration - * - * Returns a printable string containing an encoded version of the build - * configuration. This may be useful to vpx support. - * - */ -const char *vpx_codec_build_config(void); - -/*!\brief Return the name for a given interface - * - * Returns a human readable string for name of the given codec interface. - * - * \param[in] iface Interface pointer - * - */ -const char *vpx_codec_iface_name(vpx_codec_iface_t *iface); - -/*!\brief Convert error number to printable string - * - * Returns a human readable string for the last error returned by the - * algorithm. The returned error will be one line and will not contain - * any newline characters. - * - * - * \param[in] err Error number. - * - */ -const char *vpx_codec_err_to_string(vpx_codec_err_t err); - -/*!\brief Retrieve error synopsis for codec context - * - * Returns a human readable string for the last error returned by the - * algorithm. The returned error will be one line and will not contain - * any newline characters. - * - * - * \param[in] ctx Pointer to this instance's context. - * - */ -const char *vpx_codec_error(vpx_codec_ctx_t *ctx); - -/*!\brief Retrieve detailed error information for codec context - * - * Returns a human readable string providing detailed information about - * the last error. - * - * \param[in] ctx Pointer to this instance's context. - * - * \retval NULL - * No detailed information is available. - */ -const char *vpx_codec_error_detail(vpx_codec_ctx_t *ctx); - -/* REQUIRED FUNCTIONS - * - * The following functions are required to be implemented for all codecs. - * They represent the base case functionality expected of all codecs. - */ - -/*!\brief Destroy a codec instance - * - * Destroys a codec context, freeing any associated memory buffers. - * - * \param[in] ctx Pointer to this instance's context - * - * \retval #VPX_CODEC_OK - * The codec algorithm initialized. - * \retval #VPX_CODEC_MEM_ERROR - * Memory allocation failed. - */ -vpx_codec_err_t vpx_codec_destroy(vpx_codec_ctx_t *ctx); - -/*!\brief Get the capabilities of an algorithm. - * - * Retrieves the capabilities bitfield from the algorithm's interface. - * - * \param[in] iface Pointer to the algorithm interface - * - */ -vpx_codec_caps_t vpx_codec_get_caps(vpx_codec_iface_t *iface); - -/*!\brief Control algorithm - * - * This function is used to exchange algorithm specific data with the codec - * instance. This can be used to implement features specific to a particular - * algorithm. - * - * This wrapper function dispatches the request to the helper function - * associated with the given ctrl_id. It tries to call this function - * transparently, but will return #VPX_CODEC_ERROR if the request could not - * be dispatched. - * - * Note that this function should not be used directly. Call the - * #vpx_codec_control wrapper macro instead. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] ctrl_id Algorithm specific control identifier - * - * \retval #VPX_CODEC_OK - * The control request was processed. - * \retval #VPX_CODEC_ERROR - * The control request was not processed. - * \retval #VPX_CODEC_INVALID_PARAM - * The data was not valid. - */ -vpx_codec_err_t vpx_codec_control_(vpx_codec_ctx_t *ctx, int ctrl_id, ...); -#if defined(VPX_DISABLE_CTRL_TYPECHECKS) && VPX_DISABLE_CTRL_TYPECHECKS -#define vpx_codec_control(ctx, id, data) vpx_codec_control_(ctx, id, data) -#define VPX_CTRL_USE_TYPE(id, typ) -#define VPX_CTRL_USE_TYPE_DEPRECATED(id, typ) -#define VPX_CTRL_VOID(id, typ) - -#else -/*!\brief vpx_codec_control wrapper macro - * - * This macro allows for type safe conversions across the variadic parameter - * to vpx_codec_control_(). - * - * \internal - * It works by dispatching the call to the control function through a wrapper - * function named with the id parameter. - */ -#define vpx_codec_control(ctx, id, data) \ - vpx_codec_control_##id(ctx, id, data) /**<\hideinitializer*/ - -/*!\brief vpx_codec_control type definition macro - * - * This macro allows for type safe conversions across the variadic parameter - * to vpx_codec_control_(). It defines the type of the argument for a given - * control identifier. - * - * \internal - * It defines a static function with - * the correctly typed arguments as a wrapper to the type-unsafe internal - * function. - */ -#define VPX_CTRL_USE_TYPE(id, typ) \ - static vpx_codec_err_t vpx_codec_control_##id(vpx_codec_ctx_t *, int, typ) \ - VPX_UNUSED; \ - \ - static vpx_codec_err_t vpx_codec_control_##id(vpx_codec_ctx_t *ctx, \ - int ctrl_id, typ data) { \ - return vpx_codec_control_(ctx, ctrl_id, data); \ - } /**<\hideinitializer*/ - -/*!\brief vpx_codec_control deprecated type definition macro - * - * Like #VPX_CTRL_USE_TYPE, but indicates that the specified control is - * deprecated and should not be used. Consult the documentation for your - * codec for more information. - * - * \internal - * It defines a static function with the correctly typed arguments as a - * wrapper to the type-unsafe internal function. - */ -#define VPX_CTRL_USE_TYPE_DEPRECATED(id, typ) \ - VPX_DECLSPEC_DEPRECATED static vpx_codec_err_t vpx_codec_control_##id( \ - vpx_codec_ctx_t *, int, typ) VPX_DEPRECATED VPX_UNUSED; \ - \ - VPX_DECLSPEC_DEPRECATED static vpx_codec_err_t vpx_codec_control_##id( \ - vpx_codec_ctx_t *ctx, int ctrl_id, typ data) { \ - return vpx_codec_control_(ctx, ctrl_id, data); \ - } /**<\hideinitializer*/ - -/*!\brief vpx_codec_control void type definition macro - * - * This macro allows for type safe conversions across the variadic parameter - * to vpx_codec_control_(). It indicates that a given control identifier takes - * no argument. - * - * \internal - * It defines a static function without a data argument as a wrapper to the - * type-unsafe internal function. - */ -#define VPX_CTRL_VOID(id) \ - static vpx_codec_err_t vpx_codec_control_##id(vpx_codec_ctx_t *, int) \ - VPX_UNUSED; \ - \ - static vpx_codec_err_t vpx_codec_control_##id(vpx_codec_ctx_t *ctx, \ - int ctrl_id) { \ - return vpx_codec_control_(ctx, ctrl_id); \ - } /**<\hideinitializer*/ - -#endif - -/*!@} - end defgroup codec*/ -#ifdef __cplusplus -} -#endif -#endif // VPX_VPX_VPX_CODEC_H_ diff --git a/vpx-encoder/android_libs/arm64-v8a/include/vpx/vpx_decoder.h b/vpx-encoder/android_libs/arm64-v8a/include/vpx/vpx_decoder.h deleted file mode 100644 index f113f719..00000000 --- a/vpx-encoder/android_libs/arm64-v8a/include/vpx/vpx_decoder.h +++ /dev/null @@ -1,365 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ -#ifndef VPX_VPX_VPX_DECODER_H_ -#define VPX_VPX_VPX_DECODER_H_ - -/*!\defgroup decoder Decoder Algorithm Interface - * \ingroup codec - * This abstraction allows applications using this decoder to easily support - * multiple video formats with minimal code duplication. This section describes - * the interface common to all decoders. - * @{ - */ - -/*!\file - * \brief Describes the decoder algorithm interface to applications. - * - * This file describes the interface between an application and a - * video decoder algorithm. - * - */ -#ifdef __cplusplus -extern "C" { -#endif - -#include "./vpx_codec.h" -#include "./vpx_frame_buffer.h" - -/*!\brief Current ABI version number - * - * \internal - * If this file is altered in any way that changes the ABI, this value - * must be bumped. Examples include, but are not limited to, changing - * types, removing or reassigning enums, adding/removing/rearranging - * fields to structures - */ -#define VPX_DECODER_ABI_VERSION \ - (3 + VPX_CODEC_ABI_VERSION) /**<\hideinitializer*/ - -/*! \brief Decoder capabilities bitfield - * - * Each decoder advertises the capabilities it supports as part of its - * ::vpx_codec_iface_t interface structure. Capabilities are extra interfaces - * or functionality, and are not required to be supported by a decoder. - * - * The available flags are specified by VPX_CODEC_CAP_* defines. - */ -#define VPX_CODEC_CAP_PUT_SLICE 0x10000 /**< Will issue put_slice callbacks */ -#define VPX_CODEC_CAP_PUT_FRAME 0x20000 /**< Will issue put_frame callbacks */ -#define VPX_CODEC_CAP_POSTPROC 0x40000 /**< Can postprocess decoded frame */ -/*!\brief Can conceal errors due to packet loss */ -#define VPX_CODEC_CAP_ERROR_CONCEALMENT 0x80000 -/*!\brief Can receive encoded frames one fragment at a time */ -#define VPX_CODEC_CAP_INPUT_FRAGMENTS 0x100000 - -/*! \brief Initialization-time Feature Enabling - * - * Certain codec features must be known at initialization time, to allow for - * proper memory allocation. - * - * The available flags are specified by VPX_CODEC_USE_* defines. - */ -/*!\brief Can support frame-based multi-threading */ -#define VPX_CODEC_CAP_FRAME_THREADING 0x200000 -/*!brief Can support external frame buffers */ -#define VPX_CODEC_CAP_EXTERNAL_FRAME_BUFFER 0x400000 - -#define VPX_CODEC_USE_POSTPROC 0x10000 /**< Postprocess decoded frame */ -/*!\brief Conceal errors in decoded frames */ -#define VPX_CODEC_USE_ERROR_CONCEALMENT 0x20000 -/*!\brief The input frame should be passed to the decoder one fragment at a - * time */ -#define VPX_CODEC_USE_INPUT_FRAGMENTS 0x40000 -/*!\brief Enable frame-based multi-threading */ -#define VPX_CODEC_USE_FRAME_THREADING 0x80000 - -/*!\brief Stream properties - * - * This structure is used to query or set properties of the decoded - * stream. Algorithms may extend this structure with data specific - * to their bitstream by setting the sz member appropriately. - */ -typedef struct vpx_codec_stream_info { - unsigned int sz; /**< Size of this structure */ - unsigned int w; /**< Width (or 0 for unknown/default) */ - unsigned int h; /**< Height (or 0 for unknown/default) */ - unsigned int is_kf; /**< Current frame is a keyframe */ -} vpx_codec_stream_info_t; - -/* REQUIRED FUNCTIONS - * - * The following functions are required to be implemented for all decoders. - * They represent the base case functionality expected of all decoders. - */ - -/*!\brief Initialization Configurations - * - * This structure is used to pass init time configuration options to the - * decoder. - */ -typedef struct vpx_codec_dec_cfg { - unsigned int threads; /**< Maximum number of threads to use, default 1 */ - unsigned int w; /**< Width */ - unsigned int h; /**< Height */ -} vpx_codec_dec_cfg_t; /**< alias for struct vpx_codec_dec_cfg */ - -/*!\brief Initialize a decoder instance - * - * Initializes a decoder context using the given interface. Applications - * should call the vpx_codec_dec_init convenience macro instead of this - * function directly, to ensure that the ABI version number parameter - * is properly initialized. - * - * If the library was configured with --disable-multithread, this call - * is not thread safe and should be guarded with a lock if being used - * in a multithreaded context. - * - * \param[in] ctx Pointer to this instance's context. - * \param[in] iface Pointer to the algorithm interface to use. - * \param[in] cfg Configuration to use, if known. May be NULL. - * \param[in] flags Bitfield of VPX_CODEC_USE_* flags - * \param[in] ver ABI version number. Must be set to - * VPX_DECODER_ABI_VERSION - * \retval #VPX_CODEC_OK - * The decoder algorithm initialized. - * \retval #VPX_CODEC_MEM_ERROR - * Memory allocation failed. - */ -vpx_codec_err_t vpx_codec_dec_init_ver(vpx_codec_ctx_t *ctx, - vpx_codec_iface_t *iface, - const vpx_codec_dec_cfg_t *cfg, - vpx_codec_flags_t flags, int ver); - -/*!\brief Convenience macro for vpx_codec_dec_init_ver() - * - * Ensures the ABI version parameter is properly set. - */ -#define vpx_codec_dec_init(ctx, iface, cfg, flags) \ - vpx_codec_dec_init_ver(ctx, iface, cfg, flags, VPX_DECODER_ABI_VERSION) - -/*!\brief Parse stream info from a buffer - * - * Performs high level parsing of the bitstream. Construction of a decoder - * context is not necessary. Can be used to determine if the bitstream is - * of the proper format, and to extract information from the stream. - * - * \param[in] iface Pointer to the algorithm interface - * \param[in] data Pointer to a block of data to parse - * \param[in] data_sz Size of the data buffer - * \param[in,out] si Pointer to stream info to update. The size member - * \ref MUST be properly initialized, but \ref MAY be - * clobbered by the algorithm. This parameter \ref MAY - * be NULL. - * - * \retval #VPX_CODEC_OK - * Bitstream is parsable and stream information updated - */ -vpx_codec_err_t vpx_codec_peek_stream_info(vpx_codec_iface_t *iface, - const uint8_t *data, - unsigned int data_sz, - vpx_codec_stream_info_t *si); - -/*!\brief Return information about the current stream. - * - * Returns information about the stream that has been parsed during decoding. - * - * \param[in] ctx Pointer to this instance's context - * \param[in,out] si Pointer to stream info to update. The size member - * \ref MUST be properly initialized, but \ref MAY be - * clobbered by the algorithm. This parameter \ref MAY - * be NULL. - * - * \retval #VPX_CODEC_OK - * Bitstream is parsable and stream information updated - */ -vpx_codec_err_t vpx_codec_get_stream_info(vpx_codec_ctx_t *ctx, - vpx_codec_stream_info_t *si); - -/*!\brief Decode data - * - * Processes a buffer of coded data. If the processing results in a new - * decoded frame becoming available, PUT_SLICE and PUT_FRAME events may be - * generated, as appropriate. Encoded data \ref MUST be passed in DTS (decode - * time stamp) order. Frames produced will always be in PTS (presentation - * time stamp) order. - * If the decoder is configured with VPX_CODEC_USE_INPUT_FRAGMENTS enabled, - * data and data_sz can contain a fragment of the encoded frame. Fragment - * \#n must contain at least partition \#n, but can also contain subsequent - * partitions (\#n+1 - \#n+i), and if so, fragments \#n+1, .., \#n+i must - * be empty. When no more data is available, this function should be called - * with NULL as data and 0 as data_sz. The memory passed to this function - * must be available until the frame has been decoded. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] data Pointer to this block of new coded data. If - * NULL, a VPX_CODEC_CB_PUT_FRAME event is posted - * for the previously decoded frame. - * \param[in] data_sz Size of the coded data, in bytes. - * \param[in] user_priv Application specific data to associate with - * this frame. - * \param[in] deadline Soft deadline the decoder should attempt to meet, - * in us. Set to zero for unlimited. - * - * \return Returns #VPX_CODEC_OK if the coded data was processed completely - * and future pictures can be decoded without error. Otherwise, - * see the descriptions of the other error codes in ::vpx_codec_err_t - * for recoverability capabilities. - */ -vpx_codec_err_t vpx_codec_decode(vpx_codec_ctx_t *ctx, const uint8_t *data, - unsigned int data_sz, void *user_priv, - long deadline); - -/*!\brief Decoded frames iterator - * - * Iterates over a list of the frames available for display. The iterator - * storage should be initialized to NULL to start the iteration. Iteration is - * complete when this function returns NULL. - * - * The list of available frames becomes valid upon completion of the - * vpx_codec_decode call, and remains valid until the next call to - * vpx_codec_decode. - * - * \param[in] ctx Pointer to this instance's context - * \param[in,out] iter Iterator storage, initialized to NULL - * - * \return Returns a pointer to an image, if one is ready for display. Frames - * produced will always be in PTS (presentation time stamp) order. - */ -vpx_image_t *vpx_codec_get_frame(vpx_codec_ctx_t *ctx, vpx_codec_iter_t *iter); - -/*!\defgroup cap_put_frame Frame-Based Decoding Functions - * - * The following functions are required to be implemented for all decoders - * that advertise the VPX_CODEC_CAP_PUT_FRAME capability. Calling these - * functions - * for codecs that don't advertise this capability will result in an error - * code being returned, usually VPX_CODEC_ERROR - * @{ - */ - -/*!\brief put frame callback prototype - * - * This callback is invoked by the decoder to notify the application of - * the availability of decoded image data. - */ -typedef void (*vpx_codec_put_frame_cb_fn_t)(void *user_priv, - const vpx_image_t *img); - -/*!\brief Register for notification of frame completion. - * - * Registers a given function to be called when a decoded frame is - * available. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] cb Pointer to the callback function - * \param[in] user_priv User's private data - * - * \retval #VPX_CODEC_OK - * Callback successfully registered. - * \retval #VPX_CODEC_ERROR - * Decoder context not initialized, or algorithm not capable of - * posting slice completion. - */ -vpx_codec_err_t vpx_codec_register_put_frame_cb(vpx_codec_ctx_t *ctx, - vpx_codec_put_frame_cb_fn_t cb, - void *user_priv); - -/*!@} - end defgroup cap_put_frame */ - -/*!\defgroup cap_put_slice Slice-Based Decoding Functions - * - * The following functions are required to be implemented for all decoders - * that advertise the VPX_CODEC_CAP_PUT_SLICE capability. Calling these - * functions - * for codecs that don't advertise this capability will result in an error - * code being returned, usually VPX_CODEC_ERROR - * @{ - */ - -/*!\brief put slice callback prototype - * - * This callback is invoked by the decoder to notify the application of - * the availability of partially decoded image data. The - */ -typedef void (*vpx_codec_put_slice_cb_fn_t)(void *user_priv, - const vpx_image_t *img, - const vpx_image_rect_t *valid, - const vpx_image_rect_t *update); - -/*!\brief Register for notification of slice completion. - * - * Registers a given function to be called when a decoded slice is - * available. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] cb Pointer to the callback function - * \param[in] user_priv User's private data - * - * \retval #VPX_CODEC_OK - * Callback successfully registered. - * \retval #VPX_CODEC_ERROR - * Decoder context not initialized, or algorithm not capable of - * posting slice completion. - */ -vpx_codec_err_t vpx_codec_register_put_slice_cb(vpx_codec_ctx_t *ctx, - vpx_codec_put_slice_cb_fn_t cb, - void *user_priv); - -/*!@} - end defgroup cap_put_slice*/ - -/*!\defgroup cap_external_frame_buffer External Frame Buffer Functions - * - * The following section is required to be implemented for all decoders - * that advertise the VPX_CODEC_CAP_EXTERNAL_FRAME_BUFFER capability. - * Calling this function for codecs that don't advertise this capability - * will result in an error code being returned, usually VPX_CODEC_ERROR. - * - * \note - * Currently this only works with VP9. - * @{ - */ - -/*!\brief Pass in external frame buffers for the decoder to use. - * - * Registers functions to be called when libvpx needs a frame buffer - * to decode the current frame and a function to be called when libvpx does - * not internally reference the frame buffer. This set function must - * be called before the first call to decode or libvpx will assume the - * default behavior of allocating frame buffers internally. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] cb_get Pointer to the get callback function - * \param[in] cb_release Pointer to the release callback function - * \param[in] cb_priv Callback's private data - * - * \retval #VPX_CODEC_OK - * External frame buffers will be used by libvpx. - * \retval #VPX_CODEC_INVALID_PARAM - * One or more of the callbacks were NULL. - * \retval #VPX_CODEC_ERROR - * Decoder context not initialized, or algorithm not capable of - * using external frame buffers. - * - * \note - * When decoding VP9, the application may be required to pass in at least - * #VP9_MAXIMUM_REF_BUFFERS + #VPX_MAXIMUM_WORK_BUFFERS external frame - * buffers. - */ -vpx_codec_err_t vpx_codec_set_frame_buffer_functions( - vpx_codec_ctx_t *ctx, vpx_get_frame_buffer_cb_fn_t cb_get, - vpx_release_frame_buffer_cb_fn_t cb_release, void *cb_priv); - -/*!@} - end defgroup cap_external_frame_buffer */ - -/*!@} - end defgroup decoder*/ -#ifdef __cplusplus -} -#endif -#endif // VPX_VPX_VPX_DECODER_H_ diff --git a/vpx-encoder/android_libs/arm64-v8a/include/vpx/vpx_encoder.h b/vpx-encoder/android_libs/arm64-v8a/include/vpx/vpx_encoder.h deleted file mode 100644 index c18de703..00000000 --- a/vpx-encoder/android_libs/arm64-v8a/include/vpx/vpx_encoder.h +++ /dev/null @@ -1,968 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ -#ifndef VPX_VPX_VPX_ENCODER_H_ -#define VPX_VPX_VPX_ENCODER_H_ - -/*!\defgroup encoder Encoder Algorithm Interface - * \ingroup codec - * This abstraction allows applications using this encoder to easily support - * multiple video formats with minimal code duplication. This section describes - * the interface common to all encoders. - * @{ - */ - -/*!\file - * \brief Describes the encoder algorithm interface to applications. - * - * This file describes the interface between an application and a - * video encoder algorithm. - * - */ -#ifdef __cplusplus -extern "C" { -#endif - -#include "./vpx_codec.h" - -/*! Temporal Scalability: Maximum length of the sequence defining frame - * layer membership - */ -#define VPX_TS_MAX_PERIODICITY 16 - -/*! Temporal Scalability: Maximum number of coding layers */ -#define VPX_TS_MAX_LAYERS 5 - -/*! Temporal+Spatial Scalability: Maximum number of coding layers */ -#define VPX_MAX_LAYERS 12 // 3 temporal + 4 spatial layers are allowed. - -/*! Spatial Scalability: Maximum number of coding layers */ -#define VPX_SS_MAX_LAYERS 5 - -/*! Spatial Scalability: Default number of coding layers */ -#define VPX_SS_DEFAULT_LAYERS 1 - -/*!\brief Current ABI version number - * - * \internal - * If this file is altered in any way that changes the ABI, this value - * must be bumped. Examples include, but are not limited to, changing - * types, removing or reassigning enums, adding/removing/rearranging - * fields to structures - */ -#define VPX_ENCODER_ABI_VERSION \ - (14 + VPX_CODEC_ABI_VERSION) /**<\hideinitializer*/ - -/*! \brief Encoder capabilities bitfield - * - * Each encoder advertises the capabilities it supports as part of its - * ::vpx_codec_iface_t interface structure. Capabilities are extra - * interfaces or functionality, and are not required to be supported - * by an encoder. - * - * The available flags are specified by VPX_CODEC_CAP_* defines. - */ -#define VPX_CODEC_CAP_PSNR 0x10000 /**< Can issue PSNR packets */ - -/*! Can output one partition at a time. Each partition is returned in its - * own VPX_CODEC_CX_FRAME_PKT, with the FRAME_IS_FRAGMENT flag set for - * every partition but the last. In this mode all frames are always - * returned partition by partition. - */ -#define VPX_CODEC_CAP_OUTPUT_PARTITION 0x20000 - -/*! \brief Initialization-time Feature Enabling - * - * Certain codec features must be known at initialization time, to allow - * for proper memory allocation. - * - * The available flags are specified by VPX_CODEC_USE_* defines. - */ -#define VPX_CODEC_USE_PSNR 0x10000 /**< Calculate PSNR on each frame */ -/*!\brief Make the encoder output one partition at a time. */ -#define VPX_CODEC_USE_OUTPUT_PARTITION 0x20000 -#define VPX_CODEC_USE_HIGHBITDEPTH 0x40000 /**< Use high bitdepth */ - -/*!\brief Generic fixed size buffer structure - * - * This structure is able to hold a reference to any fixed size buffer. - */ -typedef struct vpx_fixed_buf { - void *buf; /**< Pointer to the data */ - size_t sz; /**< Length of the buffer, in chars */ -} vpx_fixed_buf_t; /**< alias for struct vpx_fixed_buf */ - -/*!\brief Time Stamp Type - * - * An integer, which when multiplied by the stream's time base, provides - * the absolute time of a sample. - */ -typedef int64_t vpx_codec_pts_t; - -/*!\brief Compressed Frame Flags - * - * This type represents a bitfield containing information about a compressed - * frame that may be useful to an application. The most significant 16 bits - * can be used by an algorithm to provide additional detail, for example to - * support frame types that are codec specific (MPEG-1 D-frames for example) - */ -typedef uint32_t vpx_codec_frame_flags_t; -#define VPX_FRAME_IS_KEY 0x1 /**< frame is the start of a GOP */ -/*!\brief frame can be dropped without affecting the stream (no future frame - * depends on this one) */ -#define VPX_FRAME_IS_DROPPABLE 0x2 -/*!\brief frame should be decoded but will not be shown */ -#define VPX_FRAME_IS_INVISIBLE 0x4 -/*!\brief this is a fragment of the encoded frame */ -#define VPX_FRAME_IS_FRAGMENT 0x8 - -/*!\brief Error Resilient flags - * - * These flags define which error resilient features to enable in the - * encoder. The flags are specified through the - * vpx_codec_enc_cfg::g_error_resilient variable. - */ -typedef uint32_t vpx_codec_er_flags_t; -/*!\brief Improve resiliency against losses of whole frames */ -#define VPX_ERROR_RESILIENT_DEFAULT 0x1 -/*!\brief The frame partitions are independently decodable by the bool decoder, - * meaning that partitions can be decoded even though earlier partitions have - * been lost. Note that intra prediction is still done over the partition - * boundary. */ -#define VPX_ERROR_RESILIENT_PARTITIONS 0x2 - -/*!\brief Encoder output packet variants - * - * This enumeration lists the different kinds of data packets that can be - * returned by calls to vpx_codec_get_cx_data(). Algorithms \ref MAY - * extend this list to provide additional functionality. - */ -enum vpx_codec_cx_pkt_kind { - VPX_CODEC_CX_FRAME_PKT, /**< Compressed video frame */ - VPX_CODEC_STATS_PKT, /**< Two-pass statistics for this frame */ - VPX_CODEC_FPMB_STATS_PKT, /**< first pass mb statistics for this frame */ - VPX_CODEC_PSNR_PKT, /**< PSNR statistics for this frame */ - VPX_CODEC_CUSTOM_PKT = 256 /**< Algorithm extensions */ -}; - -/*!\brief Encoder output packet - * - * This structure contains the different kinds of output data the encoder - * may produce while compressing a frame. - */ -typedef struct vpx_codec_cx_pkt { - enum vpx_codec_cx_pkt_kind kind; /**< packet variant */ - union { - struct { - void *buf; /**< compressed data buffer */ - size_t sz; /**< length of compressed data */ - /*!\brief time stamp to show frame (in timebase units) */ - vpx_codec_pts_t pts; - /*!\brief duration to show frame (in timebase units) */ - unsigned long duration; - vpx_codec_frame_flags_t flags; /**< flags for this frame */ - /*!\brief the partition id defines the decoding order of the partitions. - * Only applicable when "output partition" mode is enabled. First - * partition has id 0.*/ - int partition_id; - /*!\brief Width and height of frames in this packet. VP8 will only use the - * first one.*/ - unsigned int width[VPX_SS_MAX_LAYERS]; /**< frame width */ - unsigned int height[VPX_SS_MAX_LAYERS]; /**< frame height */ - /*!\brief Flag to indicate if spatial layer frame in this packet is - * encoded or dropped. VP8 will always be set to 1.*/ - uint8_t spatial_layer_encoded[VPX_SS_MAX_LAYERS]; - } frame; /**< data for compressed frame packet */ - vpx_fixed_buf_t twopass_stats; /**< data for two-pass packet */ - vpx_fixed_buf_t firstpass_mb_stats; /**< first pass mb packet */ - struct vpx_psnr_pkt { - unsigned int samples[4]; /**< Number of samples, total/y/u/v */ - uint64_t sse[4]; /**< sum squared error, total/y/u/v */ - double psnr[4]; /**< PSNR, total/y/u/v */ - } psnr; /**< data for PSNR packet */ - vpx_fixed_buf_t raw; /**< data for arbitrary packets */ - - /* This packet size is fixed to allow codecs to extend this - * interface without having to manage storage for raw packets, - * i.e., if it's smaller than 128 bytes, you can store in the - * packet list directly. - */ - char pad[128 - sizeof(enum vpx_codec_cx_pkt_kind)]; /**< fixed sz */ - } data; /**< packet data */ -} vpx_codec_cx_pkt_t; /**< alias for struct vpx_codec_cx_pkt */ - -/*!\brief Encoder return output buffer callback - * - * This callback function, when registered, returns with packets when each - * spatial layer is encoded. - */ -typedef void (*vpx_codec_enc_output_cx_pkt_cb_fn_t)(vpx_codec_cx_pkt_t *pkt, - void *user_data); - -/*!\brief Callback function pointer / user data pair storage */ -typedef struct vpx_codec_enc_output_cx_cb_pair { - vpx_codec_enc_output_cx_pkt_cb_fn_t output_cx_pkt; /**< Callback function */ - void *user_priv; /**< Pointer to private data */ -} vpx_codec_priv_output_cx_pkt_cb_pair_t; - -/*!\brief Rational Number - * - * This structure holds a fractional value. - */ -typedef struct vpx_rational { - int num; /**< fraction numerator */ - int den; /**< fraction denominator */ -} vpx_rational_t; /**< alias for struct vpx_rational */ - -/*!\brief Multi-pass Encoding Pass */ -enum vpx_enc_pass { - VPX_RC_ONE_PASS, /**< Single pass mode */ - VPX_RC_FIRST_PASS, /**< First pass of multi-pass mode */ - VPX_RC_LAST_PASS /**< Final pass of multi-pass mode */ -}; - -/*!\brief Rate control mode */ -enum vpx_rc_mode { - VPX_VBR, /**< Variable Bit Rate (VBR) mode */ - VPX_CBR, /**< Constant Bit Rate (CBR) mode */ - VPX_CQ, /**< Constrained Quality (CQ) mode */ - VPX_Q, /**< Constant Quality (Q) mode */ -}; - -/*!\brief Keyframe placement mode. - * - * This enumeration determines whether keyframes are placed automatically by - * the encoder or whether this behavior is disabled. Older releases of this - * SDK were implemented such that VPX_KF_FIXED meant keyframes were disabled. - * This name is confusing for this behavior, so the new symbols to be used - * are VPX_KF_AUTO and VPX_KF_DISABLED. - */ -enum vpx_kf_mode { - VPX_KF_FIXED, /**< deprecated, implies VPX_KF_DISABLED */ - VPX_KF_AUTO, /**< Encoder determines optimal placement automatically */ - VPX_KF_DISABLED = 0 /**< Encoder does not place keyframes. */ -}; - -/*!\brief Encoded Frame Flags - * - * This type indicates a bitfield to be passed to vpx_codec_encode(), defining - * per-frame boolean values. By convention, bits common to all codecs will be - * named VPX_EFLAG_*, and bits specific to an algorithm will be named - * /algo/_eflag_*. The lower order 16 bits are reserved for common use. - */ -typedef long vpx_enc_frame_flags_t; -#define VPX_EFLAG_FORCE_KF (1 << 0) /**< Force this frame to be a keyframe */ - -/*!\brief Encoder configuration structure - * - * This structure contains the encoder settings that have common representations - * across all codecs. This doesn't imply that all codecs support all features, - * however. - */ -typedef struct vpx_codec_enc_cfg { - /* - * generic settings (g) - */ - - /*!\brief Deprecated: Algorithm specific "usage" value - * - * This value must be zero. - */ - unsigned int g_usage; - - /*!\brief Maximum number of threads to use - * - * For multi-threaded implementations, use no more than this number of - * threads. The codec may use fewer threads than allowed. The value - * 0 is equivalent to the value 1. - */ - unsigned int g_threads; - - /*!\brief Bitstream profile to use - * - * Some codecs support a notion of multiple bitstream profiles. Typically - * this maps to a set of features that are turned on or off. Often the - * profile to use is determined by the features of the intended decoder. - * Consult the documentation for the codec to determine the valid values - * for this parameter, or set to zero for a sane default. - */ - unsigned int g_profile; /**< profile of bitstream to use */ - - /*!\brief Width of the frame - * - * This value identifies the presentation resolution of the frame, - * in pixels. Note that the frames passed as input to the encoder must - * have this resolution. Frames will be presented by the decoder in this - * resolution, independent of any spatial resampling the encoder may do. - */ - unsigned int g_w; - - /*!\brief Height of the frame - * - * This value identifies the presentation resolution of the frame, - * in pixels. Note that the frames passed as input to the encoder must - * have this resolution. Frames will be presented by the decoder in this - * resolution, independent of any spatial resampling the encoder may do. - */ - unsigned int g_h; - - /*!\brief Bit-depth of the codec - * - * This value identifies the bit_depth of the codec, - * Only certain bit-depths are supported as identified in the - * vpx_bit_depth_t enum. - */ - vpx_bit_depth_t g_bit_depth; - - /*!\brief Bit-depth of the input frames - * - * This value identifies the bit_depth of the input frames in bits. - * Note that the frames passed as input to the encoder must have - * this bit-depth. - */ - unsigned int g_input_bit_depth; - - /*!\brief Stream timebase units - * - * Indicates the smallest interval of time, in seconds, used by the stream. - * For fixed frame rate material, or variable frame rate material where - * frames are timed at a multiple of a given clock (ex: video capture), - * the \ref RECOMMENDED method is to set the timebase to the reciprocal - * of the frame rate (ex: 1001/30000 for 29.970 Hz NTSC). This allows the - * pts to correspond to the frame number, which can be handy. For - * re-encoding video from containers with absolute time timestamps, the - * \ref RECOMMENDED method is to set the timebase to that of the parent - * container or multimedia framework (ex: 1/1000 for ms, as in FLV). - */ - struct vpx_rational g_timebase; - - /*!\brief Enable error resilient modes. - * - * The error resilient bitfield indicates to the encoder which features - * it should enable to take measures for streaming over lossy or noisy - * links. - */ - vpx_codec_er_flags_t g_error_resilient; - - /*!\brief Multi-pass Encoding Mode - * - * This value should be set to the current phase for multi-pass encoding. - * For single pass, set to #VPX_RC_ONE_PASS. - */ - enum vpx_enc_pass g_pass; - - /*!\brief Allow lagged encoding - * - * If set, this value allows the encoder to consume a number of input - * frames before producing output frames. This allows the encoder to - * base decisions for the current frame on future frames. This does - * increase the latency of the encoding pipeline, so it is not appropriate - * in all situations (ex: realtime encoding). - * - * Note that this is a maximum value -- the encoder may produce frames - * sooner than the given limit. Set this value to 0 to disable this - * feature. - */ - unsigned int g_lag_in_frames; - - /* - * rate control settings (rc) - */ - - /*!\brief Temporal resampling configuration, if supported by the codec. - * - * Temporal resampling allows the codec to "drop" frames as a strategy to - * meet its target data rate. This can cause temporal discontinuities in - * the encoded video, which may appear as stuttering during playback. This - * trade-off is often acceptable, but for many applications is not. It can - * be disabled in these cases. - * - * This threshold is described as a percentage of the target data buffer. - * When the data buffer falls below this percentage of fullness, a - * dropped frame is indicated. Set the threshold to zero (0) to disable - * this feature. - */ - unsigned int rc_dropframe_thresh; - - /*!\brief Enable/disable spatial resampling, if supported by the codec. - * - * Spatial resampling allows the codec to compress a lower resolution - * version of the frame, which is then upscaled by the encoder to the - * correct presentation resolution. This increases visual quality at - * low data rates, at the expense of CPU time on the encoder/decoder. - */ - unsigned int rc_resize_allowed; - - /*!\brief Internal coded frame width. - * - * If spatial resampling is enabled this specifies the width of the - * encoded frame. - */ - unsigned int rc_scaled_width; - - /*!\brief Internal coded frame height. - * - * If spatial resampling is enabled this specifies the height of the - * encoded frame. - */ - unsigned int rc_scaled_height; - - /*!\brief Spatial resampling up watermark. - * - * This threshold is described as a percentage of the target data buffer. - * When the data buffer rises above this percentage of fullness, the - * encoder will step up to a higher resolution version of the frame. - */ - unsigned int rc_resize_up_thresh; - - /*!\brief Spatial resampling down watermark. - * - * This threshold is described as a percentage of the target data buffer. - * When the data buffer falls below this percentage of fullness, the - * encoder will step down to a lower resolution version of the frame. - */ - unsigned int rc_resize_down_thresh; - - /*!\brief Rate control algorithm to use. - * - * Indicates whether the end usage of this stream is to be streamed over - * a bandwidth constrained link, indicating that Constant Bit Rate (CBR) - * mode should be used, or whether it will be played back on a high - * bandwidth link, as from a local disk, where higher variations in - * bitrate are acceptable. - */ - enum vpx_rc_mode rc_end_usage; - - /*!\brief Two-pass stats buffer. - * - * A buffer containing all of the stats packets produced in the first - * pass, concatenated. - */ - vpx_fixed_buf_t rc_twopass_stats_in; - - /*!\brief first pass mb stats buffer. - * - * A buffer containing all of the first pass mb stats packets produced - * in the first pass, concatenated. - */ - vpx_fixed_buf_t rc_firstpass_mb_stats_in; - - /*!\brief Target data rate - * - * Target bandwidth to use for this stream, in kilobits per second. - */ - unsigned int rc_target_bitrate; - - /* - * quantizer settings - */ - - /*!\brief Minimum (Best Quality) Quantizer - * - * The quantizer is the most direct control over the quality of the - * encoded image. The range of valid values for the quantizer is codec - * specific. Consult the documentation for the codec to determine the - * values to use. - */ - unsigned int rc_min_quantizer; - - /*!\brief Maximum (Worst Quality) Quantizer - * - * The quantizer is the most direct control over the quality of the - * encoded image. The range of valid values for the quantizer is codec - * specific. Consult the documentation for the codec to determine the - * values to use. - */ - unsigned int rc_max_quantizer; - - /* - * bitrate tolerance - */ - - /*!\brief Rate control adaptation undershoot control - * - * VP8: Expressed as a percentage of the target bitrate, - * controls the maximum allowed adaptation speed of the codec. - * This factor controls the maximum amount of bits that can - * be subtracted from the target bitrate in order to compensate - * for prior overshoot. - * VP9: Expressed as a percentage of the target bitrate, a threshold - * undershoot level (current rate vs target) beyond which more aggressive - * corrective measures are taken. - * * - * Valid values in the range VP8:0-1000 VP9: 0-100. - */ - unsigned int rc_undershoot_pct; - - /*!\brief Rate control adaptation overshoot control - * - * VP8: Expressed as a percentage of the target bitrate, - * controls the maximum allowed adaptation speed of the codec. - * This factor controls the maximum amount of bits that can - * be added to the target bitrate in order to compensate for - * prior undershoot. - * VP9: Expressed as a percentage of the target bitrate, a threshold - * overshoot level (current rate vs target) beyond which more aggressive - * corrective measures are taken. - * - * Valid values in the range VP8:0-1000 VP9: 0-100. - */ - unsigned int rc_overshoot_pct; - - /* - * decoder buffer model parameters - */ - - /*!\brief Decoder Buffer Size - * - * This value indicates the amount of data that may be buffered by the - * decoding application. Note that this value is expressed in units of - * time (milliseconds). For example, a value of 5000 indicates that the - * client will buffer (at least) 5000ms worth of encoded data. Use the - * target bitrate (#rc_target_bitrate) to convert to bits/bytes, if - * necessary. - */ - unsigned int rc_buf_sz; - - /*!\brief Decoder Buffer Initial Size - * - * This value indicates the amount of data that will be buffered by the - * decoding application prior to beginning playback. This value is - * expressed in units of time (milliseconds). Use the target bitrate - * (#rc_target_bitrate) to convert to bits/bytes, if necessary. - */ - unsigned int rc_buf_initial_sz; - - /*!\brief Decoder Buffer Optimal Size - * - * This value indicates the amount of data that the encoder should try - * to maintain in the decoder's buffer. This value is expressed in units - * of time (milliseconds). Use the target bitrate (#rc_target_bitrate) - * to convert to bits/bytes, if necessary. - */ - unsigned int rc_buf_optimal_sz; - - /* - * 2 pass rate control parameters - */ - - /*!\brief Two-pass mode CBR/VBR bias - * - * Bias, expressed on a scale of 0 to 100, for determining target size - * for the current frame. The value 0 indicates the optimal CBR mode - * value should be used. The value 100 indicates the optimal VBR mode - * value should be used. Values in between indicate which way the - * encoder should "lean." - */ - unsigned int rc_2pass_vbr_bias_pct; - - /*!\brief Two-pass mode per-GOP minimum bitrate - * - * This value, expressed as a percentage of the target bitrate, indicates - * the minimum bitrate to be used for a single GOP (aka "section") - */ - unsigned int rc_2pass_vbr_minsection_pct; - - /*!\brief Two-pass mode per-GOP maximum bitrate - * - * This value, expressed as a percentage of the target bitrate, indicates - * the maximum bitrate to be used for a single GOP (aka "section") - */ - unsigned int rc_2pass_vbr_maxsection_pct; - - /*!\brief Two-pass corpus vbr mode complexity control - * Used only in VP9: A value representing the corpus midpoint complexity - * for corpus vbr mode. This value defaults to 0 which disables corpus vbr - * mode in favour of normal vbr mode. - */ - unsigned int rc_2pass_vbr_corpus_complexity; - - /* - * keyframing settings (kf) - */ - - /*!\brief Keyframe placement mode - * - * This value indicates whether the encoder should place keyframes at a - * fixed interval, or determine the optimal placement automatically - * (as governed by the #kf_min_dist and #kf_max_dist parameters) - */ - enum vpx_kf_mode kf_mode; - - /*!\brief Keyframe minimum interval - * - * This value, expressed as a number of frames, prevents the encoder from - * placing a keyframe nearer than kf_min_dist to the previous keyframe. At - * least kf_min_dist frames non-keyframes will be coded before the next - * keyframe. Set kf_min_dist equal to kf_max_dist for a fixed interval. - */ - unsigned int kf_min_dist; - - /*!\brief Keyframe maximum interval - * - * This value, expressed as a number of frames, forces the encoder to code - * a keyframe if one has not been coded in the last kf_max_dist frames. - * A value of 0 implies all frames will be keyframes. Set kf_min_dist - * equal to kf_max_dist for a fixed interval. - */ - unsigned int kf_max_dist; - - /* - * Spatial scalability settings (ss) - */ - - /*!\brief Number of spatial coding layers. - * - * This value specifies the number of spatial coding layers to be used. - */ - unsigned int ss_number_layers; - - /*!\brief Enable auto alt reference flags for each spatial layer. - * - * These values specify if auto alt reference frame is enabled for each - * spatial layer. - */ - int ss_enable_auto_alt_ref[VPX_SS_MAX_LAYERS]; - - /*!\brief Target bitrate for each spatial layer. - * - * These values specify the target coding bitrate to be used for each - * spatial layer. - */ - unsigned int ss_target_bitrate[VPX_SS_MAX_LAYERS]; - - /*!\brief Number of temporal coding layers. - * - * This value specifies the number of temporal layers to be used. - */ - unsigned int ts_number_layers; - - /*!\brief Target bitrate for each temporal layer. - * - * These values specify the target coding bitrate to be used for each - * temporal layer. - */ - unsigned int ts_target_bitrate[VPX_TS_MAX_LAYERS]; - - /*!\brief Frame rate decimation factor for each temporal layer. - * - * These values specify the frame rate decimation factors to apply - * to each temporal layer. - */ - unsigned int ts_rate_decimator[VPX_TS_MAX_LAYERS]; - - /*!\brief Length of the sequence defining frame temporal layer membership. - * - * This value specifies the length of the sequence that defines the - * membership of frames to temporal layers. For example, if the - * ts_periodicity = 8, then the frames are assigned to coding layers with a - * repeated sequence of length 8. - */ - unsigned int ts_periodicity; - - /*!\brief Template defining the membership of frames to temporal layers. - * - * This array defines the membership of frames to temporal coding layers. - * For a 2-layer encoding that assigns even numbered frames to one temporal - * layer (0) and odd numbered frames to a second temporal layer (1) with - * ts_periodicity=8, then ts_layer_id = (0,1,0,1,0,1,0,1). - */ - unsigned int ts_layer_id[VPX_TS_MAX_PERIODICITY]; - - /*!\brief Target bitrate for each spatial/temporal layer. - * - * These values specify the target coding bitrate to be used for each - * spatial/temporal layer. - * - */ - unsigned int layer_target_bitrate[VPX_MAX_LAYERS]; - - /*!\brief Temporal layering mode indicating which temporal layering scheme to - * use. - * - * The value (refer to VP9E_TEMPORAL_LAYERING_MODE) specifies the - * temporal layering mode to use. - * - */ - int temporal_layering_mode; -} vpx_codec_enc_cfg_t; /**< alias for struct vpx_codec_enc_cfg */ - -/*!\brief vp9 svc extra configure parameters - * - * This defines max/min quantizers and scale factors for each layer - * - */ -typedef struct vpx_svc_parameters { - int max_quantizers[VPX_MAX_LAYERS]; /**< Max Q for each layer */ - int min_quantizers[VPX_MAX_LAYERS]; /**< Min Q for each layer */ - int scaling_factor_num[VPX_MAX_LAYERS]; /**< Scaling factor-numerator */ - int scaling_factor_den[VPX_MAX_LAYERS]; /**< Scaling factor-denominator */ - int speed_per_layer[VPX_MAX_LAYERS]; /**< Speed setting for each sl */ - int temporal_layering_mode; /**< Temporal layering mode */ -} vpx_svc_extra_cfg_t; - -/*!\brief Initialize an encoder instance - * - * Initializes a encoder context using the given interface. Applications - * should call the vpx_codec_enc_init convenience macro instead of this - * function directly, to ensure that the ABI version number parameter - * is properly initialized. - * - * If the library was configured with --disable-multithread, this call - * is not thread safe and should be guarded with a lock if being used - * in a multithreaded context. - * - * \param[in] ctx Pointer to this instance's context. - * \param[in] iface Pointer to the algorithm interface to use. - * \param[in] cfg Configuration to use, if known. May be NULL. - * \param[in] flags Bitfield of VPX_CODEC_USE_* flags - * \param[in] ver ABI version number. Must be set to - * VPX_ENCODER_ABI_VERSION - * \retval #VPX_CODEC_OK - * The decoder algorithm initialized. - * \retval #VPX_CODEC_MEM_ERROR - * Memory allocation failed. - */ -vpx_codec_err_t vpx_codec_enc_init_ver(vpx_codec_ctx_t *ctx, - vpx_codec_iface_t *iface, - const vpx_codec_enc_cfg_t *cfg, - vpx_codec_flags_t flags, int ver); - -/*!\brief Convenience macro for vpx_codec_enc_init_ver() - * - * Ensures the ABI version parameter is properly set. - */ -#define vpx_codec_enc_init(ctx, iface, cfg, flags) \ - vpx_codec_enc_init_ver(ctx, iface, cfg, flags, VPX_ENCODER_ABI_VERSION) - -/*!\brief Initialize multi-encoder instance - * - * Initializes multi-encoder context using the given interface. - * Applications should call the vpx_codec_enc_init_multi convenience macro - * instead of this function directly, to ensure that the ABI version number - * parameter is properly initialized. - * - * \param[in] ctx Pointer to this instance's context. - * \param[in] iface Pointer to the algorithm interface to use. - * \param[in] cfg Configuration to use, if known. May be NULL. - * \param[in] num_enc Total number of encoders. - * \param[in] flags Bitfield of VPX_CODEC_USE_* flags - * \param[in] dsf Pointer to down-sampling factors. - * \param[in] ver ABI version number. Must be set to - * VPX_ENCODER_ABI_VERSION - * \retval #VPX_CODEC_OK - * The decoder algorithm initialized. - * \retval #VPX_CODEC_MEM_ERROR - * Memory allocation failed. - */ -vpx_codec_err_t vpx_codec_enc_init_multi_ver( - vpx_codec_ctx_t *ctx, vpx_codec_iface_t *iface, vpx_codec_enc_cfg_t *cfg, - int num_enc, vpx_codec_flags_t flags, vpx_rational_t *dsf, int ver); - -/*!\brief Convenience macro for vpx_codec_enc_init_multi_ver() - * - * Ensures the ABI version parameter is properly set. - */ -#define vpx_codec_enc_init_multi(ctx, iface, cfg, num_enc, flags, dsf) \ - vpx_codec_enc_init_multi_ver(ctx, iface, cfg, num_enc, flags, dsf, \ - VPX_ENCODER_ABI_VERSION) - -/*!\brief Get a default configuration - * - * Initializes a encoder configuration structure with default values. Supports - * the notion of "usages" so that an algorithm may offer different default - * settings depending on the user's intended goal. This function \ref SHOULD - * be called by all applications to initialize the configuration structure - * before specializing the configuration with application specific values. - * - * \param[in] iface Pointer to the algorithm interface to use. - * \param[out] cfg Configuration buffer to populate. - * \param[in] usage Must be set to 0. - * - * \retval #VPX_CODEC_OK - * The configuration was populated. - * \retval #VPX_CODEC_INCAPABLE - * Interface is not an encoder interface. - * \retval #VPX_CODEC_INVALID_PARAM - * A parameter was NULL, or the usage value was not recognized. - */ -vpx_codec_err_t vpx_codec_enc_config_default(vpx_codec_iface_t *iface, - vpx_codec_enc_cfg_t *cfg, - unsigned int usage); - -/*!\brief Set or change configuration - * - * Reconfigures an encoder instance according to the given configuration. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] cfg Configuration buffer to use - * - * \retval #VPX_CODEC_OK - * The configuration was populated. - * \retval #VPX_CODEC_INCAPABLE - * Interface is not an encoder interface. - * \retval #VPX_CODEC_INVALID_PARAM - * A parameter was NULL, or the usage value was not recognized. - */ -vpx_codec_err_t vpx_codec_enc_config_set(vpx_codec_ctx_t *ctx, - const vpx_codec_enc_cfg_t *cfg); - -/*!\brief Get global stream headers - * - * Retrieves a stream level global header packet, if supported by the codec. - * - * \param[in] ctx Pointer to this instance's context - * - * \retval NULL - * Encoder does not support global header - * \retval Non-NULL - * Pointer to buffer containing global header packet - */ -vpx_fixed_buf_t *vpx_codec_get_global_headers(vpx_codec_ctx_t *ctx); - -/*!\brief deadline parameter analogous to VPx REALTIME mode. */ -#define VPX_DL_REALTIME (1) -/*!\brief deadline parameter analogous to VPx GOOD QUALITY mode. */ -#define VPX_DL_GOOD_QUALITY (1000000) -/*!\brief deadline parameter analogous to VPx BEST QUALITY mode. */ -#define VPX_DL_BEST_QUALITY (0) -/*!\brief Encode a frame - * - * Encodes a video frame at the given "presentation time." The presentation - * time stamp (PTS) \ref MUST be strictly increasing. - * - * The encoder supports the notion of a soft real-time deadline. Given a - * non-zero value to the deadline parameter, the encoder will make a "best - * effort" guarantee to return before the given time slice expires. It is - * implicit that limiting the available time to encode will degrade the - * output quality. The encoder can be given an unlimited time to produce the - * best possible frame by specifying a deadline of '0'. This deadline - * supersedes the VPx notion of "best quality, good quality, realtime". - * Applications that wish to map these former settings to the new deadline - * based system can use the symbols #VPX_DL_REALTIME, #VPX_DL_GOOD_QUALITY, - * and #VPX_DL_BEST_QUALITY. - * - * When the last frame has been passed to the encoder, this function should - * continue to be called, with the img parameter set to NULL. This will - * signal the end-of-stream condition to the encoder and allow it to encode - * any held buffers. Encoding is complete when vpx_codec_encode() is called - * and vpx_codec_get_cx_data() returns no data. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] img Image data to encode, NULL to flush. - * \param[in] pts Presentation time stamp, in timebase units. - * \param[in] duration Duration to show frame, in timebase units. - * \param[in] flags Flags to use for encoding this frame. - * \param[in] deadline Time to spend encoding, in microseconds. (0=infinite) - * - * \retval #VPX_CODEC_OK - * The configuration was populated. - * \retval #VPX_CODEC_INCAPABLE - * Interface is not an encoder interface. - * \retval #VPX_CODEC_INVALID_PARAM - * A parameter was NULL, the image format is unsupported, etc. - */ -vpx_codec_err_t vpx_codec_encode(vpx_codec_ctx_t *ctx, const vpx_image_t *img, - vpx_codec_pts_t pts, unsigned long duration, - vpx_enc_frame_flags_t flags, - unsigned long deadline); - -/*!\brief Set compressed data output buffer - * - * Sets the buffer that the codec should output the compressed data - * into. This call effectively sets the buffer pointer returned in the - * next VPX_CODEC_CX_FRAME_PKT packet. Subsequent packets will be - * appended into this buffer. The buffer is preserved across frames, - * so applications must periodically call this function after flushing - * the accumulated compressed data to disk or to the network to reset - * the pointer to the buffer's head. - * - * `pad_before` bytes will be skipped before writing the compressed - * data, and `pad_after` bytes will be appended to the packet. The size - * of the packet will be the sum of the size of the actual compressed - * data, pad_before, and pad_after. The padding bytes will be preserved - * (not overwritten). - * - * Note that calling this function does not guarantee that the returned - * compressed data will be placed into the specified buffer. In the - * event that the encoded data will not fit into the buffer provided, - * the returned packet \ref MAY point to an internal buffer, as it would - * if this call were never used. In this event, the output packet will - * NOT have any padding, and the application must free space and copy it - * to the proper place. This is of particular note in configurations - * that may output multiple packets for a single encoded frame (e.g., lagged - * encoding) or if the application does not reset the buffer periodically. - * - * Applications may restore the default behavior of the codec providing - * the compressed data buffer by calling this function with a NULL - * buffer. - * - * Applications \ref MUSTNOT call this function during iteration of - * vpx_codec_get_cx_data(). - * - * \param[in] ctx Pointer to this instance's context - * \param[in] buf Buffer to store compressed data into - * \param[in] pad_before Bytes to skip before writing compressed data - * \param[in] pad_after Bytes to skip after writing compressed data - * - * \retval #VPX_CODEC_OK - * The buffer was set successfully. - * \retval #VPX_CODEC_INVALID_PARAM - * A parameter was NULL, the image format is unsupported, etc. - */ -vpx_codec_err_t vpx_codec_set_cx_data_buf(vpx_codec_ctx_t *ctx, - const vpx_fixed_buf_t *buf, - unsigned int pad_before, - unsigned int pad_after); - -/*!\brief Encoded data iterator - * - * Iterates over a list of data packets to be passed from the encoder to the - * application. The different kinds of packets available are enumerated in - * #vpx_codec_cx_pkt_kind. - * - * #VPX_CODEC_CX_FRAME_PKT packets should be passed to the application's - * muxer. Multiple compressed frames may be in the list. - * #VPX_CODEC_STATS_PKT packets should be appended to a global buffer. - * - * The application \ref MUST silently ignore any packet kinds that it does - * not recognize or support. - * - * The data buffers returned from this function are only guaranteed to be - * valid until the application makes another call to any vpx_codec_* function. - * - * \param[in] ctx Pointer to this instance's context - * \param[in,out] iter Iterator storage, initialized to NULL - * - * \return Returns a pointer to an output data packet (compressed frame data, - * two-pass statistics, etc.) or NULL to signal end-of-list. - * - */ -const vpx_codec_cx_pkt_t *vpx_codec_get_cx_data(vpx_codec_ctx_t *ctx, - vpx_codec_iter_t *iter); - -/*!\brief Get Preview Frame - * - * Returns an image that can be used as a preview. Shows the image as it would - * exist at the decompressor. The application \ref MUST NOT write into this - * image buffer. - * - * \param[in] ctx Pointer to this instance's context - * - * \return Returns a pointer to a preview image, or NULL if no image is - * available. - * - */ -const vpx_image_t *vpx_codec_get_preview_frame(vpx_codec_ctx_t *ctx); - -/*!@} - end defgroup encoder*/ -#ifdef __cplusplus -} -#endif -#endif // VPX_VPX_VPX_ENCODER_H_ diff --git a/vpx-encoder/android_libs/arm64-v8a/include/vpx/vpx_frame_buffer.h b/vpx-encoder/android_libs/arm64-v8a/include/vpx/vpx_frame_buffer.h deleted file mode 100644 index 2813ca6d..00000000 --- a/vpx-encoder/android_libs/arm64-v8a/include/vpx/vpx_frame_buffer.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2014 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef VPX_VPX_VPX_FRAME_BUFFER_H_ -#define VPX_VPX_VPX_FRAME_BUFFER_H_ - -/*!\file - * \brief Describes the decoder external frame buffer interface. - */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "./vpx_integer.h" - -/*!\brief The maximum number of work buffers used by libvpx. - * Support maximum 4 threads to decode video in parallel. - * Each thread will use one work buffer. - * TODO(hkuang): Add support to set number of worker threads dynamically. - */ -#define VPX_MAXIMUM_WORK_BUFFERS 8 - -/*!\brief The maximum number of reference buffers that a VP9 encoder may use. - */ -#define VP9_MAXIMUM_REF_BUFFERS 8 - -/*!\brief External frame buffer - * - * This structure holds allocated frame buffers used by the decoder. - */ -typedef struct vpx_codec_frame_buffer { - uint8_t *data; /**< Pointer to the data buffer */ - size_t size; /**< Size of data in bytes */ - void *priv; /**< Frame's private data */ -} vpx_codec_frame_buffer_t; - -/*!\brief get frame buffer callback prototype - * - * This callback is invoked by the decoder to retrieve data for the frame - * buffer in order for the decode call to complete. The callback must - * allocate at least min_size in bytes and assign it to fb->data. The callback - * must zero out all the data allocated. Then the callback must set fb->size - * to the allocated size. The application does not need to align the allocated - * data. The callback is triggered when the decoder needs a frame buffer to - * decode a compressed image into. This function may be called more than once - * for every call to vpx_codec_decode. The application may set fb->priv to - * some data which will be passed back in the ximage and the release function - * call. |fb| is guaranteed to not be NULL. On success the callback must - * return 0. Any failure the callback must return a value less than 0. - * - * \param[in] priv Callback's private data - * \param[in] min_size Size in bytes needed by the buffer - * \param[in,out] fb Pointer to vpx_codec_frame_buffer_t - */ -typedef int (*vpx_get_frame_buffer_cb_fn_t)(void *priv, size_t min_size, - vpx_codec_frame_buffer_t *fb); - -/*!\brief release frame buffer callback prototype - * - * This callback is invoked by the decoder when the frame buffer is not - * referenced by any other buffers. |fb| is guaranteed to not be NULL. On - * success the callback must return 0. Any failure the callback must return - * a value less than 0. - * - * \param[in] priv Callback's private data - * \param[in] fb Pointer to vpx_codec_frame_buffer_t - */ -typedef int (*vpx_release_frame_buffer_cb_fn_t)(void *priv, - vpx_codec_frame_buffer_t *fb); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // VPX_VPX_VPX_FRAME_BUFFER_H_ diff --git a/vpx-encoder/android_libs/arm64-v8a/include/vpx/vpx_image.h b/vpx-encoder/android_libs/arm64-v8a/include/vpx/vpx_image.h deleted file mode 100644 index 98be5966..00000000 --- a/vpx-encoder/android_libs/arm64-v8a/include/vpx/vpx_image.h +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -/*!\file - * \brief Describes the vpx image descriptor and associated operations - * - */ -#ifndef VPX_VPX_VPX_IMAGE_H_ -#define VPX_VPX_VPX_IMAGE_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*!\brief Current ABI version number - * - * \internal - * If this file is altered in any way that changes the ABI, this value - * must be bumped. Examples include, but are not limited to, changing - * types, removing or reassigning enums, adding/removing/rearranging - * fields to structures - */ -#define VPX_IMAGE_ABI_VERSION (5) /**<\hideinitializer*/ - -#define VPX_IMG_FMT_PLANAR 0x100 /**< Image is a planar format. */ -#define VPX_IMG_FMT_UV_FLIP 0x200 /**< V plane precedes U in memory. */ -#define VPX_IMG_FMT_HAS_ALPHA 0x400 /**< Image has an alpha channel. */ -#define VPX_IMG_FMT_HIGHBITDEPTH 0x800 /**< Image uses 16bit framebuffer. */ - -/*!\brief List of supported image formats */ -typedef enum vpx_img_fmt { - VPX_IMG_FMT_NONE, - VPX_IMG_FMT_YV12 = - VPX_IMG_FMT_PLANAR | VPX_IMG_FMT_UV_FLIP | 1, /**< planar YVU */ - VPX_IMG_FMT_I420 = VPX_IMG_FMT_PLANAR | 2, - VPX_IMG_FMT_I422 = VPX_IMG_FMT_PLANAR | 5, - VPX_IMG_FMT_I444 = VPX_IMG_FMT_PLANAR | 6, - VPX_IMG_FMT_I440 = VPX_IMG_FMT_PLANAR | 7, - VPX_IMG_FMT_I42016 = VPX_IMG_FMT_I420 | VPX_IMG_FMT_HIGHBITDEPTH, - VPX_IMG_FMT_I42216 = VPX_IMG_FMT_I422 | VPX_IMG_FMT_HIGHBITDEPTH, - VPX_IMG_FMT_I44416 = VPX_IMG_FMT_I444 | VPX_IMG_FMT_HIGHBITDEPTH, - VPX_IMG_FMT_I44016 = VPX_IMG_FMT_I440 | VPX_IMG_FMT_HIGHBITDEPTH -} vpx_img_fmt_t; /**< alias for enum vpx_img_fmt */ - -/*!\brief List of supported color spaces */ -typedef enum vpx_color_space { - VPX_CS_UNKNOWN = 0, /**< Unknown */ - VPX_CS_BT_601 = 1, /**< BT.601 */ - VPX_CS_BT_709 = 2, /**< BT.709 */ - VPX_CS_SMPTE_170 = 3, /**< SMPTE.170 */ - VPX_CS_SMPTE_240 = 4, /**< SMPTE.240 */ - VPX_CS_BT_2020 = 5, /**< BT.2020 */ - VPX_CS_RESERVED = 6, /**< Reserved */ - VPX_CS_SRGB = 7 /**< sRGB */ -} vpx_color_space_t; /**< alias for enum vpx_color_space */ - -/*!\brief List of supported color range */ -typedef enum vpx_color_range { - VPX_CR_STUDIO_RANGE = 0, /**< Y [16..235], UV [16..240] */ - VPX_CR_FULL_RANGE = 1 /**< YUV/RGB [0..255] */ -} vpx_color_range_t; /**< alias for enum vpx_color_range */ - -/**\brief Image Descriptor */ -typedef struct vpx_image { - vpx_img_fmt_t fmt; /**< Image Format */ - vpx_color_space_t cs; /**< Color Space */ - vpx_color_range_t range; /**< Color Range */ - - /* Image storage dimensions */ - unsigned int w; /**< Stored image width */ - unsigned int h; /**< Stored image height */ - unsigned int bit_depth; /**< Stored image bit-depth */ - - /* Image display dimensions */ - unsigned int d_w; /**< Displayed image width */ - unsigned int d_h; /**< Displayed image height */ - - /* Image intended rendering dimensions */ - unsigned int r_w; /**< Intended rendering image width */ - unsigned int r_h; /**< Intended rendering image height */ - - /* Chroma subsampling info */ - unsigned int x_chroma_shift; /**< subsampling order, X */ - unsigned int y_chroma_shift; /**< subsampling order, Y */ - -/* Image data pointers. */ -#define VPX_PLANE_PACKED 0 /**< To be used for all packed formats */ -#define VPX_PLANE_Y 0 /**< Y (Luminance) plane */ -#define VPX_PLANE_U 1 /**< U (Chroma) plane */ -#define VPX_PLANE_V 2 /**< V (Chroma) plane */ -#define VPX_PLANE_ALPHA 3 /**< A (Transparency) plane */ - unsigned char *planes[4]; /**< pointer to the top left pixel for each plane */ - int stride[4]; /**< stride between rows for each plane */ - - int bps; /**< bits per sample (for packed formats) */ - - /*!\brief The following member may be set by the application to associate - * data with this image. - */ - void *user_priv; - - /* The following members should be treated as private. */ - unsigned char *img_data; /**< private */ - int img_data_owner; /**< private */ - int self_allocd; /**< private */ - - void *fb_priv; /**< Frame buffer data associated with the image. */ -} vpx_image_t; /**< alias for struct vpx_image */ - -/**\brief Representation of a rectangle on a surface */ -typedef struct vpx_image_rect { - unsigned int x; /**< leftmost column */ - unsigned int y; /**< topmost row */ - unsigned int w; /**< width */ - unsigned int h; /**< height */ -} vpx_image_rect_t; /**< alias for struct vpx_image_rect */ - -/*!\brief Open a descriptor, allocating storage for the underlying image - * - * Returns a descriptor for storing an image of the given format. The - * storage for the descriptor is allocated on the heap. - * - * \param[in] img Pointer to storage for descriptor. If this parameter - * is NULL, the storage for the descriptor will be - * allocated on the heap. - * \param[in] fmt Format for the image - * \param[in] d_w Width of the image - * \param[in] d_h Height of the image - * \param[in] align Alignment, in bytes, of the image buffer and - * each row in the image(stride). - * - * \return Returns a pointer to the initialized image descriptor. If the img - * parameter is non-null, the value of the img parameter will be - * returned. - */ -vpx_image_t *vpx_img_alloc(vpx_image_t *img, vpx_img_fmt_t fmt, - unsigned int d_w, unsigned int d_h, - unsigned int align); - -/*!\brief Open a descriptor, using existing storage for the underlying image - * - * Returns a descriptor for storing an image of the given format. The - * storage for descriptor has been allocated elsewhere, and a descriptor is - * desired to "wrap" that storage. - * - * \param[in] img Pointer to storage for descriptor. If this - * parameter is NULL, the storage for the descriptor - * will be allocated on the heap. - * \param[in] fmt Format for the image - * \param[in] d_w Width of the image - * \param[in] d_h Height of the image - * \param[in] stride_align Alignment, in bytes, of each row in the image. - * \param[in] img_data Storage to use for the image - * - * \return Returns a pointer to the initialized image descriptor. If the img - * parameter is non-null, the value of the img parameter will be - * returned. - */ -vpx_image_t *vpx_img_wrap(vpx_image_t *img, vpx_img_fmt_t fmt, unsigned int d_w, - unsigned int d_h, unsigned int stride_align, - unsigned char *img_data); - -/*!\brief Set the rectangle identifying the displayed portion of the image - * - * Updates the displayed rectangle (aka viewport) on the image surface to - * match the specified coordinates and size. - * - * \param[in] img Image descriptor - * \param[in] x leftmost column - * \param[in] y topmost row - * \param[in] w width - * \param[in] h height - * - * \return 0 if the requested rectangle is valid, nonzero otherwise. - */ -int vpx_img_set_rect(vpx_image_t *img, unsigned int x, unsigned int y, - unsigned int w, unsigned int h); - -/*!\brief Flip the image vertically (top for bottom) - * - * Adjusts the image descriptor's pointers and strides to make the image - * be referenced upside-down. - * - * \param[in] img Image descriptor - */ -void vpx_img_flip(vpx_image_t *img); - -/*!\brief Close an image descriptor - * - * Frees all allocated storage associated with an image descriptor. - * - * \param[in] img Image descriptor - */ -void vpx_img_free(vpx_image_t *img); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // VPX_VPX_VPX_IMAGE_H_ diff --git a/vpx-encoder/android_libs/arm64-v8a/include/vpx/vpx_integer.h b/vpx-encoder/android_libs/arm64-v8a/include/vpx/vpx_integer.h deleted file mode 100644 index 4129d156..00000000 --- a/vpx-encoder/android_libs/arm64-v8a/include/vpx/vpx_integer.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef VPX_VPX_VPX_INTEGER_H_ -#define VPX_VPX_VPX_INTEGER_H_ - -/* get ptrdiff_t, size_t, wchar_t, NULL */ -#include - -#if defined(_MSC_VER) -#define VPX_FORCE_INLINE __forceinline -#define VPX_INLINE __inline -#else -#define VPX_FORCE_INLINE __inline__ __attribute__((always_inline)) -// TODO(jbb): Allow a way to force inline off for older compilers. -#define VPX_INLINE inline -#endif - -/* Assume platforms have the C99 standard integer types. */ - -#if defined(__cplusplus) -#if !defined(__STDC_FORMAT_MACROS) -#define __STDC_FORMAT_MACROS -#endif -#if !defined(__STDC_LIMIT_MACROS) -#define __STDC_LIMIT_MACROS -#endif -#endif // __cplusplus - -#include -#include - -#endif // VPX_VPX_VPX_INTEGER_H_ diff --git a/vpx-encoder/android_libs/arm64-v8a/lib/libvpx.a b/vpx-encoder/android_libs/arm64-v8a/lib/libvpx.a deleted file mode 100644 index 6914a4bd..00000000 Binary files a/vpx-encoder/android_libs/arm64-v8a/lib/libvpx.a and /dev/null differ diff --git a/vpx-encoder/android_libs/arm64-v8a/lib/pkgconfig/vpx.pc b/vpx-encoder/android_libs/arm64-v8a/lib/pkgconfig/vpx.pc deleted file mode 100644 index f112ce2c..00000000 --- a/vpx-encoder/android_libs/arm64-v8a/lib/pkgconfig/vpx.pc +++ /dev/null @@ -1,14 +0,0 @@ -# pkg-config file from libvpx v1.8.0 -prefix=/Users/andy/go/src/github.com/webmproject/jni/vpx-android/output/android/arm64-v8a -exec_prefix=${prefix} -libdir=${prefix}/lib -includedir=${prefix}/include - -Name: vpx -Description: WebM Project VPx codec implementation -Version: 1.8.0 -Requires: -Conflicts: -Libs: -L${libdir} -lvpx -lm -Libs.private: -lm -Cflags: -I${includedir} diff --git a/vpx-encoder/android_libs/armeabi-v7a/include/common/file_util.h b/vpx-encoder/android_libs/armeabi-v7a/include/common/file_util.h deleted file mode 100644 index a8737346..00000000 --- a/vpx-encoder/android_libs/armeabi-v7a/include/common/file_util.h +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) 2016 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -#ifndef LIBWEBM_COMMON_FILE_UTIL_H_ -#define LIBWEBM_COMMON_FILE_UTIL_H_ - -#include - -#include - -#include "mkvmuxer/mkvmuxertypes.h" // LIBWEBM_DISALLOW_COPY_AND_ASSIGN() - -namespace libwebm { - -// Returns a temporary file name. -std::string GetTempFileName(); - -// Returns size of file specified by |file_name|, or 0 upon failure. -uint64_t GetFileSize(const std::string& file_name); - -// Gets the contents file_name as a string. Returns false on error. -bool GetFileContents(const std::string& file_name, std::string* contents); - -// Manages life of temporary file specified at time of construction. Deletes -// file upon destruction. -class TempFileDeleter { - public: - TempFileDeleter(); - explicit TempFileDeleter(std::string file_name) : file_name_(file_name) {} - ~TempFileDeleter(); - const std::string& name() const { return file_name_; } - - private: - std::string file_name_; - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(TempFileDeleter); -}; - -} // namespace libwebm - -#endif // LIBWEBM_COMMON_FILE_UTIL_H_ diff --git a/vpx-encoder/android_libs/armeabi-v7a/include/common/hdr_util.h b/vpx-encoder/android_libs/armeabi-v7a/include/common/hdr_util.h deleted file mode 100644 index 78e2eeb7..00000000 --- a/vpx-encoder/android_libs/armeabi-v7a/include/common/hdr_util.h +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (c) 2016 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -#ifndef LIBWEBM_COMMON_HDR_UTIL_H_ -#define LIBWEBM_COMMON_HDR_UTIL_H_ - -#include - -#include - -#include "mkvmuxer/mkvmuxer.h" - -namespace mkvparser { -struct Colour; -struct MasteringMetadata; -struct PrimaryChromaticity; -} // namespace mkvparser - -namespace libwebm { -// Utility types and functions for working with the Colour element and its -// children. Copiers return true upon success. Presence functions return true -// when the specified element is present. - -// TODO(tomfinegan): These should be moved to libwebm_utils once c++11 is -// required by libwebm. - -// Features of the VP9 codec that may be set in the CodecPrivate of a VP9 video -// stream. A value of kValueNotPresent represents that the value was not set in -// the CodecPrivate. -struct Vp9CodecFeatures { - static const int kValueNotPresent; - - Vp9CodecFeatures() - : profile(kValueNotPresent), - level(kValueNotPresent), - bit_depth(kValueNotPresent), - chroma_subsampling(kValueNotPresent) {} - ~Vp9CodecFeatures() {} - - int profile; - int level; - int bit_depth; - int chroma_subsampling; -}; - -typedef std::unique_ptr PrimaryChromaticityPtr; - -bool CopyPrimaryChromaticity(const mkvparser::PrimaryChromaticity& parser_pc, - PrimaryChromaticityPtr* muxer_pc); - -bool MasteringMetadataValuePresent(double value); - -bool CopyMasteringMetadata(const mkvparser::MasteringMetadata& parser_mm, - mkvmuxer::MasteringMetadata* muxer_mm); - -bool ColourValuePresent(long long value); - -bool CopyColour(const mkvparser::Colour& parser_colour, - mkvmuxer::Colour* muxer_colour); - -// Returns true if |features| is set to one or more valid values. -bool ParseVpxCodecPrivate(const uint8_t* private_data, int32_t length, - Vp9CodecFeatures* features); - -} // namespace libwebm - -#endif // LIBWEBM_COMMON_HDR_UTIL_H_ diff --git a/vpx-encoder/android_libs/armeabi-v7a/include/common/webmids.h b/vpx-encoder/android_libs/armeabi-v7a/include/common/webmids.h deleted file mode 100644 index fc0c2081..00000000 --- a/vpx-encoder/android_libs/armeabi-v7a/include/common/webmids.h +++ /dev/null @@ -1,193 +0,0 @@ -// Copyright (c) 2012 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. - -#ifndef COMMON_WEBMIDS_H_ -#define COMMON_WEBMIDS_H_ - -namespace libwebm { - -enum MkvId { - kMkvEBML = 0x1A45DFA3, - kMkvEBMLVersion = 0x4286, - kMkvEBMLReadVersion = 0x42F7, - kMkvEBMLMaxIDLength = 0x42F2, - kMkvEBMLMaxSizeLength = 0x42F3, - kMkvDocType = 0x4282, - kMkvDocTypeVersion = 0x4287, - kMkvDocTypeReadVersion = 0x4285, - kMkvVoid = 0xEC, - kMkvSignatureSlot = 0x1B538667, - kMkvSignatureAlgo = 0x7E8A, - kMkvSignatureHash = 0x7E9A, - kMkvSignaturePublicKey = 0x7EA5, - kMkvSignature = 0x7EB5, - kMkvSignatureElements = 0x7E5B, - kMkvSignatureElementList = 0x7E7B, - kMkvSignedElement = 0x6532, - // segment - kMkvSegment = 0x18538067, - // Meta Seek Information - kMkvSeekHead = 0x114D9B74, - kMkvSeek = 0x4DBB, - kMkvSeekID = 0x53AB, - kMkvSeekPosition = 0x53AC, - // Segment Information - kMkvInfo = 0x1549A966, - kMkvTimecodeScale = 0x2AD7B1, - kMkvDuration = 0x4489, - kMkvDateUTC = 0x4461, - kMkvTitle = 0x7BA9, - kMkvMuxingApp = 0x4D80, - kMkvWritingApp = 0x5741, - // Cluster - kMkvCluster = 0x1F43B675, - kMkvTimecode = 0xE7, - kMkvPrevSize = 0xAB, - kMkvBlockGroup = 0xA0, - kMkvBlock = 0xA1, - kMkvBlockDuration = 0x9B, - kMkvReferenceBlock = 0xFB, - kMkvLaceNumber = 0xCC, - kMkvSimpleBlock = 0xA3, - kMkvBlockAdditions = 0x75A1, - kMkvBlockMore = 0xA6, - kMkvBlockAddID = 0xEE, - kMkvBlockAdditional = 0xA5, - kMkvDiscardPadding = 0x75A2, - // Track - kMkvTracks = 0x1654AE6B, - kMkvTrackEntry = 0xAE, - kMkvTrackNumber = 0xD7, - kMkvTrackUID = 0x73C5, - kMkvTrackType = 0x83, - kMkvFlagEnabled = 0xB9, - kMkvFlagDefault = 0x88, - kMkvFlagForced = 0x55AA, - kMkvFlagLacing = 0x9C, - kMkvDefaultDuration = 0x23E383, - kMkvMaxBlockAdditionID = 0x55EE, - kMkvName = 0x536E, - kMkvLanguage = 0x22B59C, - kMkvCodecID = 0x86, - kMkvCodecPrivate = 0x63A2, - kMkvCodecName = 0x258688, - kMkvCodecDelay = 0x56AA, - kMkvSeekPreRoll = 0x56BB, - // video - kMkvVideo = 0xE0, - kMkvFlagInterlaced = 0x9A, - kMkvStereoMode = 0x53B8, - kMkvAlphaMode = 0x53C0, - kMkvPixelWidth = 0xB0, - kMkvPixelHeight = 0xBA, - kMkvPixelCropBottom = 0x54AA, - kMkvPixelCropTop = 0x54BB, - kMkvPixelCropLeft = 0x54CC, - kMkvPixelCropRight = 0x54DD, - kMkvDisplayWidth = 0x54B0, - kMkvDisplayHeight = 0x54BA, - kMkvDisplayUnit = 0x54B2, - kMkvAspectRatioType = 0x54B3, - kMkvColourSpace = 0x2EB524, - kMkvFrameRate = 0x2383E3, - // end video - // colour - kMkvColour = 0x55B0, - kMkvMatrixCoefficients = 0x55B1, - kMkvBitsPerChannel = 0x55B2, - kMkvChromaSubsamplingHorz = 0x55B3, - kMkvChromaSubsamplingVert = 0x55B4, - kMkvCbSubsamplingHorz = 0x55B5, - kMkvCbSubsamplingVert = 0x55B6, - kMkvChromaSitingHorz = 0x55B7, - kMkvChromaSitingVert = 0x55B8, - kMkvRange = 0x55B9, - kMkvTransferCharacteristics = 0x55BA, - kMkvPrimaries = 0x55BB, - kMkvMaxCLL = 0x55BC, - kMkvMaxFALL = 0x55BD, - // mastering metadata - kMkvMasteringMetadata = 0x55D0, - kMkvPrimaryRChromaticityX = 0x55D1, - kMkvPrimaryRChromaticityY = 0x55D2, - kMkvPrimaryGChromaticityX = 0x55D3, - kMkvPrimaryGChromaticityY = 0x55D4, - kMkvPrimaryBChromaticityX = 0x55D5, - kMkvPrimaryBChromaticityY = 0x55D6, - kMkvWhitePointChromaticityX = 0x55D7, - kMkvWhitePointChromaticityY = 0x55D8, - kMkvLuminanceMax = 0x55D9, - kMkvLuminanceMin = 0x55DA, - // end mastering metadata - // end colour - // projection - kMkvProjection = 0x7670, - kMkvProjectionType = 0x7671, - kMkvProjectionPrivate = 0x7672, - kMkvProjectionPoseYaw = 0x7673, - kMkvProjectionPosePitch = 0x7674, - kMkvProjectionPoseRoll = 0x7675, - // end projection - // audio - kMkvAudio = 0xE1, - kMkvSamplingFrequency = 0xB5, - kMkvOutputSamplingFrequency = 0x78B5, - kMkvChannels = 0x9F, - kMkvBitDepth = 0x6264, - // end audio - // ContentEncodings - kMkvContentEncodings = 0x6D80, - kMkvContentEncoding = 0x6240, - kMkvContentEncodingOrder = 0x5031, - kMkvContentEncodingScope = 0x5032, - kMkvContentEncodingType = 0x5033, - kMkvContentCompression = 0x5034, - kMkvContentCompAlgo = 0x4254, - kMkvContentCompSettings = 0x4255, - kMkvContentEncryption = 0x5035, - kMkvContentEncAlgo = 0x47E1, - kMkvContentEncKeyID = 0x47E2, - kMkvContentSignature = 0x47E3, - kMkvContentSigKeyID = 0x47E4, - kMkvContentSigAlgo = 0x47E5, - kMkvContentSigHashAlgo = 0x47E6, - kMkvContentEncAESSettings = 0x47E7, - kMkvAESSettingsCipherMode = 0x47E8, - kMkvAESSettingsCipherInitData = 0x47E9, - // end ContentEncodings - // Cueing Data - kMkvCues = 0x1C53BB6B, - kMkvCuePoint = 0xBB, - kMkvCueTime = 0xB3, - kMkvCueTrackPositions = 0xB7, - kMkvCueTrack = 0xF7, - kMkvCueClusterPosition = 0xF1, - kMkvCueBlockNumber = 0x5378, - // Chapters - kMkvChapters = 0x1043A770, - kMkvEditionEntry = 0x45B9, - kMkvChapterAtom = 0xB6, - kMkvChapterUID = 0x73C4, - kMkvChapterStringUID = 0x5654, - kMkvChapterTimeStart = 0x91, - kMkvChapterTimeEnd = 0x92, - kMkvChapterDisplay = 0x80, - kMkvChapString = 0x85, - kMkvChapLanguage = 0x437C, - kMkvChapCountry = 0x437E, - // Tags - kMkvTags = 0x1254C367, - kMkvTag = 0x7373, - kMkvSimpleTag = 0x67C8, - kMkvTagName = 0x45A3, - kMkvTagString = 0x4487 -}; - -} // namespace libwebm - -#endif // COMMON_WEBMIDS_H_ diff --git a/vpx-encoder/android_libs/armeabi-v7a/include/mkvmuxer/mkvmuxer.h b/vpx-encoder/android_libs/armeabi-v7a/include/mkvmuxer/mkvmuxer.h deleted file mode 100644 index f2db3771..00000000 --- a/vpx-encoder/android_libs/armeabi-v7a/include/mkvmuxer/mkvmuxer.h +++ /dev/null @@ -1,1924 +0,0 @@ -// Copyright (c) 2012 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. - -#ifndef MKVMUXER_MKVMUXER_H_ -#define MKVMUXER_MKVMUXER_H_ - -#include - -#include -#include -#include - -#include "common/webmids.h" -#include "mkvmuxer/mkvmuxertypes.h" - -// For a description of the WebM elements see -// http://www.webmproject.org/code/specs/container/. - -namespace mkvparser { -class IMkvReader; -} // namespace mkvparser - -namespace mkvmuxer { - -class MkvWriter; -class Segment; - -const uint64_t kMaxTrackNumber = 126; - -/////////////////////////////////////////////////////////////// -// Interface used by the mkvmuxer to write out the Mkv data. -class IMkvWriter { - public: - // Writes out |len| bytes of |buf|. Returns 0 on success. - virtual int32 Write(const void* buf, uint32 len) = 0; - - // Returns the offset of the output position from the beginning of the - // output. - virtual int64 Position() const = 0; - - // Set the current File position. Returns 0 on success. - virtual int32 Position(int64 position) = 0; - - // Returns true if the writer is seekable. - virtual bool Seekable() const = 0; - - // Element start notification. Called whenever an element identifier is about - // to be written to the stream. |element_id| is the element identifier, and - // |position| is the location in the WebM stream where the first octet of the - // element identifier will be written. - // Note: the |MkvId| enumeration in webmids.hpp defines element values. - virtual void ElementStartNotify(uint64 element_id, int64 position) = 0; - - protected: - IMkvWriter(); - virtual ~IMkvWriter(); - - private: - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(IMkvWriter); -}; - -// Writes out the EBML header for a WebM file, but allows caller to specify -// DocType. This function must be called before any other libwebm writing -// functions are called. -bool WriteEbmlHeader(IMkvWriter* writer, uint64_t doc_type_version, - const char* const doc_type); - -// Writes out the EBML header for a WebM file. This function must be called -// before any other libwebm writing functions are called. -bool WriteEbmlHeader(IMkvWriter* writer, uint64_t doc_type_version); - -// Deprecated. Writes out EBML header with doc_type_version as -// kDefaultDocTypeVersion. Exists for backward compatibility. -bool WriteEbmlHeader(IMkvWriter* writer); - -// Copies in Chunk from source to destination between the given byte positions -bool ChunkedCopy(mkvparser::IMkvReader* source, IMkvWriter* dst, int64_t start, - int64_t size); - -/////////////////////////////////////////////////////////////// -// Class to hold data the will be written to a block. -class Frame { - public: - Frame(); - ~Frame(); - - // Sets this frame's contents based on |frame|. Returns true on success. On - // failure, this frame's existing contents may be lost. - bool CopyFrom(const Frame& frame); - - // Copies |frame| data into |frame_|. Returns true on success. - bool Init(const uint8_t* frame, uint64_t length); - - // Copies |additional| data into |additional_|. Returns true on success. - bool AddAdditionalData(const uint8_t* additional, uint64_t length, - uint64_t add_id); - - // Returns true if the frame has valid parameters. - bool IsValid() const; - - // Returns true if the frame can be written as a SimpleBlock based on current - // parameters. - bool CanBeSimpleBlock() const; - - uint64_t add_id() const { return add_id_; } - const uint8_t* additional() const { return additional_; } - uint64_t additional_length() const { return additional_length_; } - void set_duration(uint64_t duration); - uint64_t duration() const { return duration_; } - bool duration_set() const { return duration_set_; } - const uint8_t* frame() const { return frame_; } - void set_is_key(bool key) { is_key_ = key; } - bool is_key() const { return is_key_; } - uint64_t length() const { return length_; } - void set_track_number(uint64_t track_number) { track_number_ = track_number; } - uint64_t track_number() const { return track_number_; } - void set_timestamp(uint64_t timestamp) { timestamp_ = timestamp; } - uint64_t timestamp() const { return timestamp_; } - void set_discard_padding(int64_t discard_padding) { - discard_padding_ = discard_padding; - } - int64_t discard_padding() const { return discard_padding_; } - void set_reference_block_timestamp(int64_t reference_block_timestamp); - int64_t reference_block_timestamp() const { - return reference_block_timestamp_; - } - bool reference_block_timestamp_set() const { - return reference_block_timestamp_set_; - } - - private: - // Id of the Additional data. - uint64_t add_id_; - - // Pointer to additional data. Owned by this class. - uint8_t* additional_; - - // Length of the additional data. - uint64_t additional_length_; - - // Duration of the frame in nanoseconds. - uint64_t duration_; - - // Flag indicating that |duration_| has been set. Setting duration causes the - // frame to be written out as a Block with BlockDuration instead of as a - // SimpleBlock. - bool duration_set_; - - // Pointer to the data. Owned by this class. - uint8_t* frame_; - - // Flag telling if the data should set the key flag of a block. - bool is_key_; - - // Length of the data. - uint64_t length_; - - // Mkv track number the data is associated with. - uint64_t track_number_; - - // Timestamp of the data in nanoseconds. - uint64_t timestamp_; - - // Discard padding for the frame. - int64_t discard_padding_; - - // Reference block timestamp. - int64_t reference_block_timestamp_; - - // Flag indicating if |reference_block_timestamp_| has been set. - bool reference_block_timestamp_set_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Frame); -}; - -/////////////////////////////////////////////////////////////// -// Class to hold one cue point in a Cues element. -class CuePoint { - public: - CuePoint(); - ~CuePoint(); - - // Returns the size in bytes for the entire CuePoint element. - uint64_t Size() const; - - // Output the CuePoint element to the writer. Returns true on success. - bool Write(IMkvWriter* writer) const; - - void set_time(uint64_t time) { time_ = time; } - uint64_t time() const { return time_; } - void set_track(uint64_t track) { track_ = track; } - uint64_t track() const { return track_; } - void set_cluster_pos(uint64_t cluster_pos) { cluster_pos_ = cluster_pos; } - uint64_t cluster_pos() const { return cluster_pos_; } - void set_block_number(uint64_t block_number) { block_number_ = block_number; } - uint64_t block_number() const { return block_number_; } - void set_output_block_number(bool output_block_number) { - output_block_number_ = output_block_number; - } - bool output_block_number() const { return output_block_number_; } - - private: - // Returns the size in bytes for the payload of the CuePoint element. - uint64_t PayloadSize() const; - - // Absolute timecode according to the segment time base. - uint64_t time_; - - // The Track element associated with the CuePoint. - uint64_t track_; - - // The position of the Cluster containing the Block. - uint64_t cluster_pos_; - - // Number of the Block within the Cluster, starting from 1. - uint64_t block_number_; - - // If true the muxer will write out the block number for the cue if the - // block number is different than the default of 1. Default is set to true. - bool output_block_number_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(CuePoint); -}; - -/////////////////////////////////////////////////////////////// -// Cues element. -class Cues { - public: - Cues(); - ~Cues(); - - // Adds a cue point to the Cues element. Returns true on success. - bool AddCue(CuePoint* cue); - - // Returns the cue point by index. Returns NULL if there is no cue point - // match. - CuePoint* GetCueByIndex(int32_t index) const; - - // Returns the total size of the Cues element - uint64_t Size(); - - // Output the Cues element to the writer. Returns true on success. - bool Write(IMkvWriter* writer) const; - - int32_t cue_entries_size() const { return cue_entries_size_; } - void set_output_block_number(bool output_block_number) { - output_block_number_ = output_block_number; - } - bool output_block_number() const { return output_block_number_; } - - private: - // Number of allocated elements in |cue_entries_|. - int32_t cue_entries_capacity_; - - // Number of CuePoints in |cue_entries_|. - int32_t cue_entries_size_; - - // CuePoint list. - CuePoint** cue_entries_; - - // If true the muxer will write out the block number for the cue if the - // block number is different than the default of 1. Default is set to true. - bool output_block_number_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Cues); -}; - -/////////////////////////////////////////////////////////////// -// ContentEncAESSettings element -class ContentEncAESSettings { - public: - enum { kCTR = 1 }; - - ContentEncAESSettings(); - ~ContentEncAESSettings() {} - - // Returns the size in bytes for the ContentEncAESSettings element. - uint64_t Size() const; - - // Writes out the ContentEncAESSettings element to |writer|. Returns true on - // success. - bool Write(IMkvWriter* writer) const; - - uint64_t cipher_mode() const { return cipher_mode_; } - - private: - // Returns the size in bytes for the payload of the ContentEncAESSettings - // element. - uint64_t PayloadSize() const; - - // Sub elements - uint64_t cipher_mode_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(ContentEncAESSettings); -}; - -/////////////////////////////////////////////////////////////// -// ContentEncoding element -// Elements used to describe if the track data has been encrypted or -// compressed with zlib or header stripping. -// Currently only whole frames can be encrypted with AES. This dictates that -// ContentEncodingOrder will be 0, ContentEncodingScope will be 1, -// ContentEncodingType will be 1, and ContentEncAlgo will be 5. -class ContentEncoding { - public: - ContentEncoding(); - ~ContentEncoding(); - - // Sets the content encryption id. Copies |length| bytes from |id| to - // |enc_key_id_|. Returns true on success. - bool SetEncryptionID(const uint8_t* id, uint64_t length); - - // Returns the size in bytes for the ContentEncoding element. - uint64_t Size() const; - - // Writes out the ContentEncoding element to |writer|. Returns true on - // success. - bool Write(IMkvWriter* writer) const; - - uint64_t enc_algo() const { return enc_algo_; } - uint64_t encoding_order() const { return encoding_order_; } - uint64_t encoding_scope() const { return encoding_scope_; } - uint64_t encoding_type() const { return encoding_type_; } - ContentEncAESSettings* enc_aes_settings() { return &enc_aes_settings_; } - - private: - // Returns the size in bytes for the encoding elements. - uint64_t EncodingSize(uint64_t compresion_size, - uint64_t encryption_size) const; - - // Returns the size in bytes for the encryption elements. - uint64_t EncryptionSize() const; - - // Track element names - uint64_t enc_algo_; - uint8_t* enc_key_id_; - uint64_t encoding_order_; - uint64_t encoding_scope_; - uint64_t encoding_type_; - - // ContentEncAESSettings element. - ContentEncAESSettings enc_aes_settings_; - - // Size of the ContentEncKeyID data in bytes. - uint64_t enc_key_id_length_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(ContentEncoding); -}; - -/////////////////////////////////////////////////////////////// -// Colour element. -class PrimaryChromaticity { - public: - static const float kChromaticityMin; - static const float kChromaticityMax; - - PrimaryChromaticity(float x_val, float y_val) : x_(x_val), y_(y_val) {} - PrimaryChromaticity() : x_(0), y_(0) {} - ~PrimaryChromaticity() {} - - // Returns sum of |x_id| and |y_id| element id sizes and payload sizes. - uint64_t PrimaryChromaticitySize(libwebm::MkvId x_id, - libwebm::MkvId y_id) const; - bool Valid() const; - bool Write(IMkvWriter* writer, libwebm::MkvId x_id, - libwebm::MkvId y_id) const; - - float x() const { return x_; } - void set_x(float new_x) { x_ = new_x; } - float y() const { return y_; } - void set_y(float new_y) { y_ = new_y; } - - private: - float x_; - float y_; -}; - -class MasteringMetadata { - public: - static const float kValueNotPresent; - static const float kMinLuminance; - static const float kMinLuminanceMax; - static const float kMaxLuminanceMax; - - MasteringMetadata() - : luminance_max_(kValueNotPresent), - luminance_min_(kValueNotPresent), - r_(NULL), - g_(NULL), - b_(NULL), - white_point_(NULL) {} - ~MasteringMetadata() { - delete r_; - delete g_; - delete b_; - delete white_point_; - } - - // Returns total size of the MasteringMetadata element. - uint64_t MasteringMetadataSize() const; - bool Valid() const; - bool Write(IMkvWriter* writer) const; - - // Copies non-null chromaticity. - bool SetChromaticity(const PrimaryChromaticity* r, - const PrimaryChromaticity* g, - const PrimaryChromaticity* b, - const PrimaryChromaticity* white_point); - const PrimaryChromaticity* r() const { return r_; } - const PrimaryChromaticity* g() const { return g_; } - const PrimaryChromaticity* b() const { return b_; } - const PrimaryChromaticity* white_point() const { return white_point_; } - - float luminance_max() const { return luminance_max_; } - void set_luminance_max(float luminance_max) { - luminance_max_ = luminance_max; - } - float luminance_min() const { return luminance_min_; } - void set_luminance_min(float luminance_min) { - luminance_min_ = luminance_min; - } - - private: - // Returns size of MasteringMetadata child elements. - uint64_t PayloadSize() const; - - float luminance_max_; - float luminance_min_; - PrimaryChromaticity* r_; - PrimaryChromaticity* g_; - PrimaryChromaticity* b_; - PrimaryChromaticity* white_point_; -}; - -class Colour { - public: - enum MatrixCoefficients { - kGbr = 0, - kBt709 = 1, - kUnspecifiedMc = 2, - kReserved = 3, - kFcc = 4, - kBt470bg = 5, - kSmpte170MMc = 6, - kSmpte240MMc = 7, - kYcocg = 8, - kBt2020NonConstantLuminance = 9, - kBt2020ConstantLuminance = 10, - }; - enum ChromaSitingHorz { - kUnspecifiedCsh = 0, - kLeftCollocated = 1, - kHalfCsh = 2, - }; - enum ChromaSitingVert { - kUnspecifiedCsv = 0, - kTopCollocated = 1, - kHalfCsv = 2, - }; - enum Range { - kUnspecifiedCr = 0, - kBroadcastRange = 1, - kFullRange = 2, - kMcTcDefined = 3, // Defined by MatrixCoefficients/TransferCharacteristics. - }; - enum TransferCharacteristics { - kIturBt709Tc = 1, - kUnspecifiedTc = 2, - kReservedTc = 3, - kGamma22Curve = 4, - kGamma28Curve = 5, - kSmpte170MTc = 6, - kSmpte240MTc = 7, - kLinear = 8, - kLog = 9, - kLogSqrt = 10, - kIec6196624 = 11, - kIturBt1361ExtendedColourGamut = 12, - kIec6196621 = 13, - kIturBt202010bit = 14, - kIturBt202012bit = 15, - kSmpteSt2084 = 16, - kSmpteSt4281Tc = 17, - kAribStdB67Hlg = 18, - }; - enum Primaries { - kReservedP0 = 0, - kIturBt709P = 1, - kUnspecifiedP = 2, - kReservedP3 = 3, - kIturBt470M = 4, - kIturBt470Bg = 5, - kSmpte170MP = 6, - kSmpte240MP = 7, - kFilm = 8, - kIturBt2020 = 9, - kSmpteSt4281P = 10, - kJedecP22Phosphors = 22, - }; - static const uint64_t kValueNotPresent; - Colour() - : matrix_coefficients_(kValueNotPresent), - bits_per_channel_(kValueNotPresent), - chroma_subsampling_horz_(kValueNotPresent), - chroma_subsampling_vert_(kValueNotPresent), - cb_subsampling_horz_(kValueNotPresent), - cb_subsampling_vert_(kValueNotPresent), - chroma_siting_horz_(kValueNotPresent), - chroma_siting_vert_(kValueNotPresent), - range_(kValueNotPresent), - transfer_characteristics_(kValueNotPresent), - primaries_(kValueNotPresent), - max_cll_(kValueNotPresent), - max_fall_(kValueNotPresent), - mastering_metadata_(NULL) {} - ~Colour() { delete mastering_metadata_; } - - // Returns total size of the Colour element. - uint64_t ColourSize() const; - bool Valid() const; - bool Write(IMkvWriter* writer) const; - - // Deep copies |mastering_metadata|. - bool SetMasteringMetadata(const MasteringMetadata& mastering_metadata); - - const MasteringMetadata* mastering_metadata() const { - return mastering_metadata_; - } - - uint64_t matrix_coefficients() const { return matrix_coefficients_; } - void set_matrix_coefficients(uint64_t matrix_coefficients) { - matrix_coefficients_ = matrix_coefficients; - } - uint64_t bits_per_channel() const { return bits_per_channel_; } - void set_bits_per_channel(uint64_t bits_per_channel) { - bits_per_channel_ = bits_per_channel; - } - uint64_t chroma_subsampling_horz() const { return chroma_subsampling_horz_; } - void set_chroma_subsampling_horz(uint64_t chroma_subsampling_horz) { - chroma_subsampling_horz_ = chroma_subsampling_horz; - } - uint64_t chroma_subsampling_vert() const { return chroma_subsampling_vert_; } - void set_chroma_subsampling_vert(uint64_t chroma_subsampling_vert) { - chroma_subsampling_vert_ = chroma_subsampling_vert; - } - uint64_t cb_subsampling_horz() const { return cb_subsampling_horz_; } - void set_cb_subsampling_horz(uint64_t cb_subsampling_horz) { - cb_subsampling_horz_ = cb_subsampling_horz; - } - uint64_t cb_subsampling_vert() const { return cb_subsampling_vert_; } - void set_cb_subsampling_vert(uint64_t cb_subsampling_vert) { - cb_subsampling_vert_ = cb_subsampling_vert; - } - uint64_t chroma_siting_horz() const { return chroma_siting_horz_; } - void set_chroma_siting_horz(uint64_t chroma_siting_horz) { - chroma_siting_horz_ = chroma_siting_horz; - } - uint64_t chroma_siting_vert() const { return chroma_siting_vert_; } - void set_chroma_siting_vert(uint64_t chroma_siting_vert) { - chroma_siting_vert_ = chroma_siting_vert; - } - uint64_t range() const { return range_; } - void set_range(uint64_t range) { range_ = range; } - uint64_t transfer_characteristics() const { - return transfer_characteristics_; - } - void set_transfer_characteristics(uint64_t transfer_characteristics) { - transfer_characteristics_ = transfer_characteristics; - } - uint64_t primaries() const { return primaries_; } - void set_primaries(uint64_t primaries) { primaries_ = primaries; } - uint64_t max_cll() const { return max_cll_; } - void set_max_cll(uint64_t max_cll) { max_cll_ = max_cll; } - uint64_t max_fall() const { return max_fall_; } - void set_max_fall(uint64_t max_fall) { max_fall_ = max_fall; } - - private: - // Returns size of Colour child elements. - uint64_t PayloadSize() const; - - uint64_t matrix_coefficients_; - uint64_t bits_per_channel_; - uint64_t chroma_subsampling_horz_; - uint64_t chroma_subsampling_vert_; - uint64_t cb_subsampling_horz_; - uint64_t cb_subsampling_vert_; - uint64_t chroma_siting_horz_; - uint64_t chroma_siting_vert_; - uint64_t range_; - uint64_t transfer_characteristics_; - uint64_t primaries_; - uint64_t max_cll_; - uint64_t max_fall_; - - MasteringMetadata* mastering_metadata_; -}; - -/////////////////////////////////////////////////////////////// -// Projection element. -class Projection { - public: - enum ProjectionType { - kTypeNotPresent = -1, - kRectangular = 0, - kEquirectangular = 1, - kCubeMap = 2, - kMesh = 3, - }; - static const uint64_t kValueNotPresent; - Projection() - : type_(kRectangular), - pose_yaw_(0.0), - pose_pitch_(0.0), - pose_roll_(0.0), - private_data_(NULL), - private_data_length_(0) {} - ~Projection() { delete[] private_data_; } - - uint64_t ProjectionSize() const; - bool Write(IMkvWriter* writer) const; - - bool SetProjectionPrivate(const uint8_t* private_data, - uint64_t private_data_length); - - ProjectionType type() const { return type_; } - void set_type(ProjectionType type) { type_ = type; } - float pose_yaw() const { return pose_yaw_; } - void set_pose_yaw(float pose_yaw) { pose_yaw_ = pose_yaw; } - float pose_pitch() const { return pose_pitch_; } - void set_pose_pitch(float pose_pitch) { pose_pitch_ = pose_pitch; } - float pose_roll() const { return pose_roll_; } - void set_pose_roll(float pose_roll) { pose_roll_ = pose_roll; } - uint8_t* private_data() const { return private_data_; } - uint64_t private_data_length() const { return private_data_length_; } - - private: - // Returns size of VideoProjection child elements. - uint64_t PayloadSize() const; - - ProjectionType type_; - float pose_yaw_; - float pose_pitch_; - float pose_roll_; - uint8_t* private_data_; - uint64_t private_data_length_; -}; - -/////////////////////////////////////////////////////////////// -// Track element. -class Track { - public: - // The |seed| parameter is used to synthesize a UID for the track. - explicit Track(unsigned int* seed); - virtual ~Track(); - - // Adds a ContentEncoding element to the Track. Returns true on success. - virtual bool AddContentEncoding(); - - // Returns the ContentEncoding by index. Returns NULL if there is no - // ContentEncoding match. - ContentEncoding* GetContentEncodingByIndex(uint32_t index) const; - - // Returns the size in bytes for the payload of the Track element. - virtual uint64_t PayloadSize() const; - - // Returns the size in bytes of the Track element. - virtual uint64_t Size() const; - - // Output the Track element to the writer. Returns true on success. - virtual bool Write(IMkvWriter* writer) const; - - // Sets the CodecPrivate element of the Track element. Copies |length| - // bytes from |codec_private| to |codec_private_|. Returns true on success. - bool SetCodecPrivate(const uint8_t* codec_private, uint64_t length); - - void set_codec_id(const char* codec_id); - const char* codec_id() const { return codec_id_; } - const uint8_t* codec_private() const { return codec_private_; } - void set_language(const char* language); - const char* language() const { return language_; } - void set_max_block_additional_id(uint64_t max_block_additional_id) { - max_block_additional_id_ = max_block_additional_id; - } - uint64_t max_block_additional_id() const { return max_block_additional_id_; } - void set_name(const char* name); - const char* name() const { return name_; } - void set_number(uint64_t number) { number_ = number; } - uint64_t number() const { return number_; } - void set_type(uint64_t type) { type_ = type; } - uint64_t type() const { return type_; } - void set_uid(uint64_t uid) { uid_ = uid; } - uint64_t uid() const { return uid_; } - void set_codec_delay(uint64_t codec_delay) { codec_delay_ = codec_delay; } - uint64_t codec_delay() const { return codec_delay_; } - void set_seek_pre_roll(uint64_t seek_pre_roll) { - seek_pre_roll_ = seek_pre_roll; - } - uint64_t seek_pre_roll() const { return seek_pre_roll_; } - void set_default_duration(uint64_t default_duration) { - default_duration_ = default_duration; - } - uint64_t default_duration() const { return default_duration_; } - - uint64_t codec_private_length() const { return codec_private_length_; } - uint32_t content_encoding_entries_size() const { - return content_encoding_entries_size_; - } - - private: - // Track element names. - char* codec_id_; - uint8_t* codec_private_; - char* language_; - uint64_t max_block_additional_id_; - char* name_; - uint64_t number_; - uint64_t type_; - uint64_t uid_; - uint64_t codec_delay_; - uint64_t seek_pre_roll_; - uint64_t default_duration_; - - // Size of the CodecPrivate data in bytes. - uint64_t codec_private_length_; - - // ContentEncoding element list. - ContentEncoding** content_encoding_entries_; - - // Number of ContentEncoding elements added. - uint32_t content_encoding_entries_size_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Track); -}; - -/////////////////////////////////////////////////////////////// -// Track that has video specific elements. -class VideoTrack : public Track { - public: - // Supported modes for stereo 3D. - enum StereoMode { - kMono = 0, - kSideBySideLeftIsFirst = 1, - kTopBottomRightIsFirst = 2, - kTopBottomLeftIsFirst = 3, - kSideBySideRightIsFirst = 11 - }; - - enum AlphaMode { kNoAlpha = 0, kAlpha = 1 }; - - // The |seed| parameter is used to synthesize a UID for the track. - explicit VideoTrack(unsigned int* seed); - virtual ~VideoTrack(); - - // Returns the size in bytes for the payload of the Track element plus the - // video specific elements. - virtual uint64_t PayloadSize() const; - - // Output the VideoTrack element to the writer. Returns true on success. - virtual bool Write(IMkvWriter* writer) const; - - // Sets the video's stereo mode. Returns true on success. - bool SetStereoMode(uint64_t stereo_mode); - - // Sets the video's alpha mode. Returns true on success. - bool SetAlphaMode(uint64_t alpha_mode); - - void set_display_height(uint64_t height) { display_height_ = height; } - uint64_t display_height() const { return display_height_; } - void set_display_width(uint64_t width) { display_width_ = width; } - uint64_t display_width() const { return display_width_; } - void set_pixel_height(uint64_t height) { pixel_height_ = height; } - uint64_t pixel_height() const { return pixel_height_; } - void set_pixel_width(uint64_t width) { pixel_width_ = width; } - uint64_t pixel_width() const { return pixel_width_; } - - void set_crop_left(uint64_t crop_left) { crop_left_ = crop_left; } - uint64_t crop_left() const { return crop_left_; } - void set_crop_right(uint64_t crop_right) { crop_right_ = crop_right; } - uint64_t crop_right() const { return crop_right_; } - void set_crop_top(uint64_t crop_top) { crop_top_ = crop_top; } - uint64_t crop_top() const { return crop_top_; } - void set_crop_bottom(uint64_t crop_bottom) { crop_bottom_ = crop_bottom; } - uint64_t crop_bottom() const { return crop_bottom_; } - - void set_frame_rate(double frame_rate) { frame_rate_ = frame_rate; } - double frame_rate() const { return frame_rate_; } - void set_height(uint64_t height) { height_ = height; } - uint64_t height() const { return height_; } - uint64_t stereo_mode() { return stereo_mode_; } - uint64_t alpha_mode() { return alpha_mode_; } - void set_width(uint64_t width) { width_ = width; } - uint64_t width() const { return width_; } - void set_colour_space(const char* colour_space); - const char* colour_space() const { return colour_space_; } - - Colour* colour() { return colour_; } - - // Deep copies |colour|. - bool SetColour(const Colour& colour); - - Projection* projection() { return projection_; } - - // Deep copies |projection|. - bool SetProjection(const Projection& projection); - - private: - // Returns the size in bytes of the Video element. - uint64_t VideoPayloadSize() const; - - // Video track element names. - uint64_t display_height_; - uint64_t display_width_; - uint64_t pixel_height_; - uint64_t pixel_width_; - uint64_t crop_left_; - uint64_t crop_right_; - uint64_t crop_top_; - uint64_t crop_bottom_; - double frame_rate_; - uint64_t height_; - uint64_t stereo_mode_; - uint64_t alpha_mode_; - uint64_t width_; - char* colour_space_; - - Colour* colour_; - Projection* projection_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(VideoTrack); -}; - -/////////////////////////////////////////////////////////////// -// Track that has audio specific elements. -class AudioTrack : public Track { - public: - // The |seed| parameter is used to synthesize a UID for the track. - explicit AudioTrack(unsigned int* seed); - virtual ~AudioTrack(); - - // Returns the size in bytes for the payload of the Track element plus the - // audio specific elements. - virtual uint64_t PayloadSize() const; - - // Output the AudioTrack element to the writer. Returns true on success. - virtual bool Write(IMkvWriter* writer) const; - - void set_bit_depth(uint64_t bit_depth) { bit_depth_ = bit_depth; } - uint64_t bit_depth() const { return bit_depth_; } - void set_channels(uint64_t channels) { channels_ = channels; } - uint64_t channels() const { return channels_; } - void set_sample_rate(double sample_rate) { sample_rate_ = sample_rate; } - double sample_rate() const { return sample_rate_; } - - private: - // Audio track element names. - uint64_t bit_depth_; - uint64_t channels_; - double sample_rate_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(AudioTrack); -}; - -/////////////////////////////////////////////////////////////// -// Tracks element -class Tracks { - public: - // Audio and video type defined by the Matroska specs. - enum { kVideo = 0x1, kAudio = 0x2 }; - - static const char kOpusCodecId[]; - static const char kVorbisCodecId[]; - static const char kAv1CodecId[]; - static const char kVp8CodecId[]; - static const char kVp9CodecId[]; - static const char kWebVttCaptionsId[]; - static const char kWebVttDescriptionsId[]; - static const char kWebVttMetadataId[]; - static const char kWebVttSubtitlesId[]; - - Tracks(); - ~Tracks(); - - // Adds a Track element to the Tracks object. |track| will be owned and - // deleted by the Tracks object. Returns true on success. |number| is the - // number to use for the track. |number| must be >= 0. If |number| == 0 - // then the muxer will decide on the track number. - bool AddTrack(Track* track, int32_t number); - - // Returns the track by index. Returns NULL if there is no track match. - const Track* GetTrackByIndex(uint32_t idx) const; - - // Search the Tracks and return the track that matches |tn|. Returns NULL - // if there is no track match. - Track* GetTrackByNumber(uint64_t track_number) const; - - // Returns true if the track number is an audio track. - bool TrackIsAudio(uint64_t track_number) const; - - // Returns true if the track number is a video track. - bool TrackIsVideo(uint64_t track_number) const; - - // Output the Tracks element to the writer. Returns true on success. - bool Write(IMkvWriter* writer) const; - - uint32_t track_entries_size() const { return track_entries_size_; } - - private: - // Track element list. - Track** track_entries_; - - // Number of Track elements added. - uint32_t track_entries_size_; - - // Whether or not Tracks element has already been written via IMkvWriter. - mutable bool wrote_tracks_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Tracks); -}; - -/////////////////////////////////////////////////////////////// -// Chapter element -// -class Chapter { - public: - // Set the identifier for this chapter. (This corresponds to the - // Cue Identifier line in WebVTT.) - // TODO(matthewjheaney): the actual serialization of this item in - // MKV is pending. - bool set_id(const char* id); - - // Converts the nanosecond start and stop times of this chapter to - // their corresponding timecode values, and stores them that way. - void set_time(const Segment& segment, uint64_t start_time_ns, - uint64_t end_time_ns); - - // Sets the uid for this chapter. Primarily used to enable - // deterministic output from the muxer. - void set_uid(const uint64_t uid) { uid_ = uid; } - - // Add a title string to this chapter, per the semantics described - // here: - // http://www.matroska.org/technical/specs/index.html - // - // The title ("chapter string") is a UTF-8 string. - // - // The language has ISO 639-2 representation, described here: - // http://www.loc.gov/standards/iso639-2/englangn.html - // http://www.loc.gov/standards/iso639-2/php/English_list.php - // If you specify NULL as the language value, this implies - // English ("eng"). - // - // The country value corresponds to the codes listed here: - // http://www.iana.org/domains/root/db/ - // - // The function returns false if the string could not be allocated. - bool add_string(const char* title, const char* language, const char* country); - - private: - friend class Chapters; - - // For storage of chapter titles that differ by language. - class Display { - public: - // Establish representation invariant for new Display object. - void Init(); - - // Reclaim resources, in anticipation of destruction. - void Clear(); - - // Copies the title to the |title_| member. Returns false on - // error. - bool set_title(const char* title); - - // Copies the language to the |language_| member. Returns false - // on error. - bool set_language(const char* language); - - // Copies the country to the |country_| member. Returns false on - // error. - bool set_country(const char* country); - - // If |writer| is non-NULL, serialize the Display sub-element of - // the Atom into the stream. Returns the Display element size on - // success, 0 if error. - uint64_t WriteDisplay(IMkvWriter* writer) const; - - private: - char* title_; - char* language_; - char* country_; - }; - - Chapter(); - ~Chapter(); - - // Establish the representation invariant for a newly-created - // Chapter object. The |seed| parameter is used to create the UID - // for this chapter atom. - void Init(unsigned int* seed); - - // Copies this Chapter object to a different one. This is used when - // expanding a plain array of Chapter objects (see Chapters). - void ShallowCopy(Chapter* dst) const; - - // Reclaim resources used by this Chapter object, pending its - // destruction. - void Clear(); - - // If there is no storage remaining on the |displays_| array for a - // new display object, creates a new, longer array and copies the - // existing Display objects to the new array. Returns false if the - // array cannot be expanded. - bool ExpandDisplaysArray(); - - // If |writer| is non-NULL, serialize the Atom sub-element into the - // stream. Returns the total size of the element on success, 0 if - // error. - uint64_t WriteAtom(IMkvWriter* writer) const; - - // The string identifier for this chapter (corresponds to WebVTT cue - // identifier). - char* id_; - - // Start timecode of the chapter. - uint64_t start_timecode_; - - // Stop timecode of the chapter. - uint64_t end_timecode_; - - // The binary identifier for this chapter. - uint64_t uid_; - - // The Atom element can contain multiple Display sub-elements, as - // the same logical title can be rendered in different languages. - Display* displays_; - - // The physical length (total size) of the |displays_| array. - int displays_size_; - - // The logical length (number of active elements) on the |displays_| - // array. - int displays_count_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Chapter); -}; - -/////////////////////////////////////////////////////////////// -// Chapters element -// -class Chapters { - public: - Chapters(); - ~Chapters(); - - Chapter* AddChapter(unsigned int* seed); - - // Returns the number of chapters that have been added. - int Count() const; - - // Output the Chapters element to the writer. Returns true on success. - bool Write(IMkvWriter* writer) const; - - private: - // Expands the chapters_ array if there is not enough space to contain - // another chapter object. Returns true on success. - bool ExpandChaptersArray(); - - // If |writer| is non-NULL, serialize the Edition sub-element of the - // Chapters element into the stream. Returns the Edition element - // size on success, 0 if error. - uint64_t WriteEdition(IMkvWriter* writer) const; - - // Total length of the chapters_ array. - int chapters_size_; - - // Number of active chapters on the chapters_ array. - int chapters_count_; - - // Array for storage of chapter objects. - Chapter* chapters_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Chapters); -}; - -/////////////////////////////////////////////////////////////// -// Tag element -// -class Tag { - public: - bool add_simple_tag(const char* tag_name, const char* tag_string); - - private: - // Tags calls Clear and the destructor of Tag - friend class Tags; - - // For storage of simple tags - class SimpleTag { - public: - // Establish representation invariant for new SimpleTag object. - void Init(); - - // Reclaim resources, in anticipation of destruction. - void Clear(); - - // Copies the title to the |tag_name_| member. Returns false on - // error. - bool set_tag_name(const char* tag_name); - - // Copies the language to the |tag_string_| member. Returns false - // on error. - bool set_tag_string(const char* tag_string); - - // If |writer| is non-NULL, serialize the SimpleTag sub-element of - // the Atom into the stream. Returns the SimpleTag element size on - // success, 0 if error. - uint64_t Write(IMkvWriter* writer) const; - - private: - char* tag_name_; - char* tag_string_; - }; - - Tag(); - ~Tag(); - - // Copies this Tag object to a different one. This is used when - // expanding a plain array of Tag objects (see Tags). - void ShallowCopy(Tag* dst) const; - - // Reclaim resources used by this Tag object, pending its - // destruction. - void Clear(); - - // If there is no storage remaining on the |simple_tags_| array for a - // new display object, creates a new, longer array and copies the - // existing SimpleTag objects to the new array. Returns false if the - // array cannot be expanded. - bool ExpandSimpleTagsArray(); - - // If |writer| is non-NULL, serialize the Tag sub-element into the - // stream. Returns the total size of the element on success, 0 if - // error. - uint64_t Write(IMkvWriter* writer) const; - - // The Atom element can contain multiple SimpleTag sub-elements - SimpleTag* simple_tags_; - - // The physical length (total size) of the |simple_tags_| array. - int simple_tags_size_; - - // The logical length (number of active elements) on the |simple_tags_| - // array. - int simple_tags_count_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Tag); -}; - -/////////////////////////////////////////////////////////////// -// Tags element -// -class Tags { - public: - Tags(); - ~Tags(); - - Tag* AddTag(); - - // Returns the number of tags that have been added. - int Count() const; - - // Output the Tags element to the writer. Returns true on success. - bool Write(IMkvWriter* writer) const; - - private: - // Expands the tags_ array if there is not enough space to contain - // another tag object. Returns true on success. - bool ExpandTagsArray(); - - // Total length of the tags_ array. - int tags_size_; - - // Number of active tags on the tags_ array. - int tags_count_; - - // Array for storage of tag objects. - Tag* tags_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Tags); -}; - -/////////////////////////////////////////////////////////////// -// Cluster element -// -// Notes: -// |Init| must be called before any other method in this class. -class Cluster { - public: - // |timecode| is the absolute timecode of the cluster. |cues_pos| is the - // position for the cluster within the segment that should be written in - // the cues element. |timecode_scale| is the timecode scale of the segment. - Cluster(uint64_t timecode, int64_t cues_pos, uint64_t timecode_scale, - bool write_last_frame_with_duration = false, - bool fixed_size_timecode = false); - ~Cluster(); - - bool Init(IMkvWriter* ptr_writer); - - // Adds a frame to be output in the file. The frame is written out through - // |writer_| if successful. Returns true on success. - bool AddFrame(const Frame* frame); - - // Adds a frame to be output in the file. The frame is written out through - // |writer_| if successful. Returns true on success. - // Inputs: - // data: Pointer to the data - // length: Length of the data - // track_number: Track to add the data to. Value returned by Add track - // functions. The range of allowed values is [1, 126]. - // timecode: Absolute (not relative to cluster) timestamp of the - // frame, expressed in timecode units. - // is_key: Flag telling whether or not this frame is a key frame. - bool AddFrame(const uint8_t* data, uint64_t length, uint64_t track_number, - uint64_t timecode, // timecode units (absolute) - bool is_key); - - // Adds a frame to be output in the file. The frame is written out through - // |writer_| if successful. Returns true on success. - // Inputs: - // data: Pointer to the data - // length: Length of the data - // additional: Pointer to the additional data - // additional_length: Length of the additional data - // add_id: Value of BlockAddID element - // track_number: Track to add the data to. Value returned by Add track - // functions. The range of allowed values is [1, 126]. - // abs_timecode: Absolute (not relative to cluster) timestamp of the - // frame, expressed in timecode units. - // is_key: Flag telling whether or not this frame is a key frame. - bool AddFrameWithAdditional(const uint8_t* data, uint64_t length, - const uint8_t* additional, - uint64_t additional_length, uint64_t add_id, - uint64_t track_number, uint64_t abs_timecode, - bool is_key); - - // Adds a frame to be output in the file. The frame is written out through - // |writer_| if successful. Returns true on success. - // Inputs: - // data: Pointer to the data. - // length: Length of the data. - // discard_padding: DiscardPadding element value. - // track_number: Track to add the data to. Value returned by Add track - // functions. The range of allowed values is [1, 126]. - // abs_timecode: Absolute (not relative to cluster) timestamp of the - // frame, expressed in timecode units. - // is_key: Flag telling whether or not this frame is a key frame. - bool AddFrameWithDiscardPadding(const uint8_t* data, uint64_t length, - int64_t discard_padding, - uint64_t track_number, uint64_t abs_timecode, - bool is_key); - - // Writes a frame of metadata to the output medium; returns true on - // success. - // Inputs: - // data: Pointer to the data - // length: Length of the data - // track_number: Track to add the data to. Value returned by Add track - // functions. The range of allowed values is [1, 126]. - // timecode: Absolute (not relative to cluster) timestamp of the - // metadata frame, expressed in timecode units. - // duration: Duration of metadata frame, in timecode units. - // - // The metadata frame is written as a block group, with a duration - // sub-element but no reference time sub-elements (indicating that - // it is considered a keyframe, per Matroska semantics). - bool AddMetadata(const uint8_t* data, uint64_t length, uint64_t track_number, - uint64_t timecode, uint64_t duration); - - // Increments the size of the cluster's data in bytes. - void AddPayloadSize(uint64_t size); - - // Closes the cluster so no more data can be written to it. Will update the - // cluster's size if |writer_| is seekable. Returns true on success. This - // variant of Finalize() fails when |write_last_frame_with_duration_| is set - // to true. - bool Finalize(); - - // Closes the cluster so no more data can be written to it. Will update the - // cluster's size if |writer_| is seekable. Returns true on success. - // Inputs: - // set_last_frame_duration: Boolean indicating whether or not the duration - // of the last frame should be set. If set to - // false, the |duration| value is ignored and - // |write_last_frame_with_duration_| will not be - // honored. - // duration: Duration of the Cluster in timecode scale. - bool Finalize(bool set_last_frame_duration, uint64_t duration); - - // Returns the size in bytes for the entire Cluster element. - uint64_t Size() const; - - // Given |abs_timecode|, calculates timecode relative to most recent timecode. - // Returns -1 on failure, or a relative timecode. - int64_t GetRelativeTimecode(int64_t abs_timecode) const; - - int64_t size_position() const { return size_position_; } - int32_t blocks_added() const { return blocks_added_; } - uint64_t payload_size() const { return payload_size_; } - int64_t position_for_cues() const { return position_for_cues_; } - uint64_t timecode() const { return timecode_; } - uint64_t timecode_scale() const { return timecode_scale_; } - void set_write_last_frame_with_duration(bool write_last_frame_with_duration) { - write_last_frame_with_duration_ = write_last_frame_with_duration; - } - bool write_last_frame_with_duration() const { - return write_last_frame_with_duration_; - } - - private: - // Iterator type for the |stored_frames_| map. - typedef std::map >::iterator FrameMapIterator; - - // Utility method that confirms that blocks can still be added, and that the - // cluster header has been written. Used by |DoWriteFrame*|. Returns true - // when successful. - bool PreWriteBlock(); - - // Utility method used by the |DoWriteFrame*| methods that handles the book - // keeping required after each block is written. - void PostWriteBlock(uint64_t element_size); - - // Does some verification and calls WriteFrame. - bool DoWriteFrame(const Frame* const frame); - - // Either holds back the given frame, or writes it out depending on whether or - // not |write_last_frame_with_duration_| is set. - bool QueueOrWriteFrame(const Frame* const frame); - - // Outputs the Cluster header to |writer_|. Returns true on success. - bool WriteClusterHeader(); - - // Number of blocks added to the cluster. - int32_t blocks_added_; - - // Flag telling if the cluster has been closed. - bool finalized_; - - // Flag indicating whether the cluster's timecode will always be written out - // using 8 bytes. - bool fixed_size_timecode_; - - // Flag telling if the cluster's header has been written. - bool header_written_; - - // The size of the cluster elements in bytes. - uint64_t payload_size_; - - // The file position used for cue points. - const int64_t position_for_cues_; - - // The file position of the cluster's size element. - int64_t size_position_; - - // The absolute timecode of the cluster. - const uint64_t timecode_; - - // The timecode scale of the Segment containing the cluster. - const uint64_t timecode_scale_; - - // Flag indicating whether the last frame of the cluster should be written as - // a Block with Duration. If set to true, then it will result in holding back - // of frames and the parameterized version of Finalize() must be called to - // finish writing the Cluster. - bool write_last_frame_with_duration_; - - // Map used to hold back frames, if required. Track number is the key. - std::map > stored_frames_; - - // Map from track number to the timestamp of the last block written for that - // track. - std::map last_block_timestamp_; - - // Pointer to the writer object. Not owned by this class. - IMkvWriter* writer_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Cluster); -}; - -/////////////////////////////////////////////////////////////// -// SeekHead element -class SeekHead { - public: - SeekHead(); - ~SeekHead(); - - // TODO(fgalligan): Change this to reserve a certain size. Then check how - // big the seek entry to be added is as not every seek entry will be the - // maximum size it could be. - // Adds a seek entry to be written out when the element is finalized. |id| - // must be the coded mkv element id. |pos| is the file position of the - // element. Returns true on success. - bool AddSeekEntry(uint32_t id, uint64_t pos); - - // Writes out SeekHead and SeekEntry elements. Returns true on success. - bool Finalize(IMkvWriter* writer) const; - - // Returns the id of the Seek Entry at the given index. Returns -1 if index is - // out of range. - uint32_t GetId(int index) const; - - // Returns the position of the Seek Entry at the given index. Returns -1 if - // index is out of range. - uint64_t GetPosition(int index) const; - - // Sets the Seek Entry id and position at given index. - // Returns true on success. - bool SetSeekEntry(int index, uint32_t id, uint64_t position); - - // Reserves space by writing out a Void element which will be updated with - // a SeekHead element later. Returns true on success. - bool Write(IMkvWriter* writer); - - // We are going to put a cap on the number of Seek Entries. - const static int32_t kSeekEntryCount = 5; - - private: - // Returns the maximum size in bytes of one seek entry. - uint64_t MaxEntrySize() const; - - // Seek entry id element list. - uint32_t seek_entry_id_[kSeekEntryCount]; - - // Seek entry pos element list. - uint64_t seek_entry_pos_[kSeekEntryCount]; - - // The file position of SeekHead element. - int64_t start_pos_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(SeekHead); -}; - -/////////////////////////////////////////////////////////////// -// Segment Information element -class SegmentInfo { - public: - SegmentInfo(); - ~SegmentInfo(); - - // Will update the duration if |duration_| is > 0.0. Returns true on success. - bool Finalize(IMkvWriter* writer) const; - - // Sets |muxing_app_| and |writing_app_|. - bool Init(); - - // Output the Segment Information element to the writer. Returns true on - // success. - bool Write(IMkvWriter* writer); - - void set_duration(double duration) { duration_ = duration; } - double duration() const { return duration_; } - void set_muxing_app(const char* app); - const char* muxing_app() const { return muxing_app_; } - void set_timecode_scale(uint64_t scale) { timecode_scale_ = scale; } - uint64_t timecode_scale() const { return timecode_scale_; } - void set_writing_app(const char* app); - const char* writing_app() const { return writing_app_; } - void set_date_utc(int64_t date_utc) { date_utc_ = date_utc; } - int64_t date_utc() const { return date_utc_; } - - private: - // Segment Information element names. - // Initially set to -1 to signify that a duration has not been set and should - // not be written out. - double duration_; - // Set to libwebm-%d.%d.%d.%d, major, minor, build, revision. - char* muxing_app_; - uint64_t timecode_scale_; - // Initially set to libwebm-%d.%d.%d.%d, major, minor, build, revision. - char* writing_app_; - // LLONG_MIN when DateUTC is not set. - int64_t date_utc_; - - // The file position of the duration element. - int64_t duration_pos_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(SegmentInfo); -}; - -/////////////////////////////////////////////////////////////// -// This class represents the main segment in a WebM file. Currently only -// supports one Segment element. -// -// Notes: -// |Init| must be called before any other method in this class. -class Segment { - public: - enum Mode { kLive = 0x1, kFile = 0x2 }; - - enum CuesPosition { - kAfterClusters = 0x0, // Position Cues after Clusters - Default - kBeforeClusters = 0x1 // Position Cues before Clusters - }; - - static const uint32_t kDefaultDocTypeVersion = 4; - static const uint64_t kDefaultMaxClusterDuration = 30000000000ULL; - - Segment(); - ~Segment(); - - // Initializes |SegmentInfo| and returns result. Always returns false when - // |ptr_writer| is NULL. - bool Init(IMkvWriter* ptr_writer); - - // Adds a generic track to the segment. Returns the newly-allocated - // track object (which is owned by the segment) on success, NULL on - // error. |number| is the number to use for the track. |number| - // must be >= 0. If |number| == 0 then the muxer will decide on the - // track number. - Track* AddTrack(int32_t number); - - // Adds a Vorbis audio track to the segment. Returns the number of the track - // on success, 0 on error. |number| is the number to use for the audio track. - // |number| must be >= 0. If |number| == 0 then the muxer will decide on - // the track number. - uint64_t AddAudioTrack(int32_t sample_rate, int32_t channels, int32_t number); - - // Adds an empty chapter to the chapters of this segment. Returns - // non-NULL on success. After adding the chapter, the caller should - // populate its fields via the Chapter member functions. - Chapter* AddChapter(); - - // Adds an empty tag to the tags of this segment. Returns - // non-NULL on success. After adding the tag, the caller should - // populate its fields via the Tag member functions. - Tag* AddTag(); - - // Adds a cue point to the Cues element. |timestamp| is the time in - // nanoseconds of the cue's time. |track| is the Track of the Cue. This - // function must be called after AddFrame to calculate the correct - // BlockNumber for the CuePoint. Returns true on success. - bool AddCuePoint(uint64_t timestamp, uint64_t track); - - // Adds a frame to be output in the file. Returns true on success. - // Inputs: - // data: Pointer to the data - // length: Length of the data - // track_number: Track to add the data to. Value returned by Add track - // functions. - // timestamp: Timestamp of the frame in nanoseconds from 0. - // is_key: Flag telling whether or not this frame is a key frame. - bool AddFrame(const uint8_t* data, uint64_t length, uint64_t track_number, - uint64_t timestamp_ns, bool is_key); - - // Writes a frame of metadata to the output medium; returns true on - // success. - // Inputs: - // data: Pointer to the data - // length: Length of the data - // track_number: Track to add the data to. Value returned by Add track - // functions. - // timecode: Absolute timestamp of the metadata frame, expressed - // in nanosecond units. - // duration: Duration of metadata frame, in nanosecond units. - // - // The metadata frame is written as a block group, with a duration - // sub-element but no reference time sub-elements (indicating that - // it is considered a keyframe, per Matroska semantics). - bool AddMetadata(const uint8_t* data, uint64_t length, uint64_t track_number, - uint64_t timestamp_ns, uint64_t duration_ns); - - // Writes a frame with additional data to the output medium; returns true on - // success. - // Inputs: - // data: Pointer to the data. - // length: Length of the data. - // additional: Pointer to additional data. - // additional_length: Length of additional data. - // add_id: Additional ID which identifies the type of additional data. - // track_number: Track to add the data to. Value returned by Add track - // functions. - // timestamp: Absolute timestamp of the frame, expressed in nanosecond - // units. - // is_key: Flag telling whether or not this frame is a key frame. - bool AddFrameWithAdditional(const uint8_t* data, uint64_t length, - const uint8_t* additional, - uint64_t additional_length, uint64_t add_id, - uint64_t track_number, uint64_t timestamp, - bool is_key); - - // Writes a frame with DiscardPadding to the output medium; returns true on - // success. - // Inputs: - // data: Pointer to the data. - // length: Length of the data. - // discard_padding: DiscardPadding element value. - // track_number: Track to add the data to. Value returned by Add track - // functions. - // timestamp: Absolute timestamp of the frame, expressed in nanosecond - // units. - // is_key: Flag telling whether or not this frame is a key frame. - bool AddFrameWithDiscardPadding(const uint8_t* data, uint64_t length, - int64_t discard_padding, - uint64_t track_number, uint64_t timestamp, - bool is_key); - - // Writes a Frame to the output medium. Chooses the correct way of writing - // the frame (Block vs SimpleBlock) based on the parameters passed. - // Inputs: - // frame: frame object - bool AddGenericFrame(const Frame* frame); - - // Adds a VP8 video track to the segment. Returns the number of the track on - // success, 0 on error. |number| is the number to use for the video track. - // |number| must be >= 0. If |number| == 0 then the muxer will decide on - // the track number. - uint64_t AddVideoTrack(int32_t width, int32_t height, int32_t number); - - // This function must be called after Finalize() if you need a copy of the - // output with Cues written before the Clusters. It will return false if the - // writer is not seekable of if chunking is set to true. - // Input parameters: - // reader - an IMkvReader object created with the same underlying file of the - // current writer object. Make sure to close the existing writer - // object before creating this so that all the data is properly - // flushed and available for reading. - // writer - an IMkvWriter object pointing to a *different* file than the one - // pointed by the current writer object. This file will contain the - // Cues element before the Clusters. - bool CopyAndMoveCuesBeforeClusters(mkvparser::IMkvReader* reader, - IMkvWriter* writer); - - // Sets which track to use for the Cues element. Must have added the track - // before calling this function. Returns true on success. |track_number| is - // returned by the Add track functions. - bool CuesTrack(uint64_t track_number); - - // This will force the muxer to create a new Cluster when the next frame is - // added. - void ForceNewClusterOnNextFrame(); - - // Writes out any frames that have not been written out. Finalizes the last - // cluster. May update the size and duration of the segment. May output the - // Cues element. May finalize the SeekHead element. Returns true on success. - bool Finalize(); - - // Returns the Cues object. - Cues* GetCues() { return &cues_; } - - // Returns the Segment Information object. - const SegmentInfo* GetSegmentInfo() const { return &segment_info_; } - SegmentInfo* GetSegmentInfo() { return &segment_info_; } - - // Search the Tracks and return the track that matches |track_number|. - // Returns NULL if there is no track match. - Track* GetTrackByNumber(uint64_t track_number) const; - - // Toggles whether to output a cues element. - void OutputCues(bool output_cues); - - // Toggles whether to write the last frame in each Cluster with Duration. - void AccurateClusterDuration(bool accurate_cluster_duration); - - // Toggles whether to write the Cluster Timecode using exactly 8 bytes. - void UseFixedSizeClusterTimecode(bool fixed_size_cluster_timecode); - - // Sets if the muxer will output files in chunks or not. |chunking| is a - // flag telling whether or not to turn on chunking. |filename| is the base - // filename for the chunk files. The header chunk file will be named - // |filename|.hdr and the data chunks will be named - // |filename|_XXXXXX.chk. Chunking implies that the muxer will be writing - // to files so the muxer will use the default MkvWriter class to control - // what data is written to what files. Returns true on success. - // TODO: Should we change the IMkvWriter Interface to add Open and Close? - // That will force the interface to be dependent on files. - bool SetChunking(bool chunking, const char* filename); - - bool chunking() const { return chunking_; } - uint64_t cues_track() const { return cues_track_; } - void set_max_cluster_duration(uint64_t max_cluster_duration) { - max_cluster_duration_ = max_cluster_duration; - } - uint64_t max_cluster_duration() const { return max_cluster_duration_; } - void set_max_cluster_size(uint64_t max_cluster_size) { - max_cluster_size_ = max_cluster_size; - } - uint64_t max_cluster_size() const { return max_cluster_size_; } - void set_mode(Mode mode) { mode_ = mode; } - Mode mode() const { return mode_; } - CuesPosition cues_position() const { return cues_position_; } - bool output_cues() const { return output_cues_; } - void set_estimate_file_duration(bool estimate_duration) { - estimate_file_duration_ = estimate_duration; - } - bool estimate_file_duration() const { return estimate_file_duration_; } - const SegmentInfo* segment_info() const { return &segment_info_; } - void set_duration(double duration) { duration_ = duration; } - double duration() const { return duration_; } - - // Returns true when codec IDs are valid for WebM. - bool DocTypeIsWebm() const; - - private: - // Checks if header information has been output and initialized. If not it - // will output the Segment element and initialize the SeekHead elment and - // Cues elements. - bool CheckHeaderInfo(); - - // Sets |doc_type_version_| based on the current element requirements. - void UpdateDocTypeVersion(); - - // Sets |name| according to how many chunks have been written. |ext| is the - // file extension. |name| must be deleted by the calling app. Returns true - // on success. - bool UpdateChunkName(const char* ext, char** name) const; - - // Returns the maximum offset within the segment's payload. When chunking - // this function is needed to determine offsets of elements within the - // chunked files. Returns -1 on error. - int64_t MaxOffset(); - - // Adds the frame to our frame array. - bool QueueFrame(Frame* frame); - - // Output all frames that are queued. Returns -1 on error, otherwise - // it returns the number of frames written. - int WriteFramesAll(); - - // Output all frames that are queued that have an end time that is less - // then |timestamp|. Returns true on success and if there are no frames - // queued. - bool WriteFramesLessThan(uint64_t timestamp); - - // Outputs the segment header, Segment Information element, SeekHead element, - // and Tracks element to |writer_|. - bool WriteSegmentHeader(); - - // Given a frame with the specified timestamp (nanosecond units) and - // keyframe status, determine whether a new cluster should be - // created, before writing enqueued frames and the frame itself. The - // function returns one of the following values: - // -1 = error: an out-of-order frame was detected - // 0 = do not create a new cluster, and write frame to the existing cluster - // 1 = create a new cluster, and write frame to that new cluster - // 2 = create a new cluster, and re-run test - int TestFrame(uint64_t track_num, uint64_t timestamp_ns, bool key) const; - - // Create a new cluster, using the earlier of the first enqueued - // frame, or the indicated time. Returns true on success. - bool MakeNewCluster(uint64_t timestamp_ns); - - // Checks whether a new cluster needs to be created, and if so - // creates a new cluster. Returns false if creation of a new cluster - // was necessary but creation was not successful. - bool DoNewClusterProcessing(uint64_t track_num, uint64_t timestamp_ns, - bool key); - - // Adjusts Cue Point values (to place Cues before Clusters) so that they - // reflect the correct offsets. - void MoveCuesBeforeClusters(); - - // This function recursively computes the correct cluster offsets (this is - // done to move the Cues before Clusters). It recursively updates the change - // in size (which indicates a change in cluster offset) until no sizes change. - // Parameters: - // diff - indicates the difference in size of the Cues element that needs to - // accounted for. - // index - index in the list of Cues which is currently being adjusted. - // cue_size - sum of size of all the CuePoint elements. - void MoveCuesBeforeClustersHelper(uint64_t diff, int index, - uint64_t* cue_size); - - // Seeds the random number generator used to make UIDs. - unsigned int seed_; - - // WebM elements - Cues cues_; - SeekHead seek_head_; - SegmentInfo segment_info_; - Tracks tracks_; - Chapters chapters_; - Tags tags_; - - // Number of chunks written. - int chunk_count_; - - // Current chunk filename. - char* chunk_name_; - - // Default MkvWriter object created by this class used for writing clusters - // out in separate files. - MkvWriter* chunk_writer_cluster_; - - // Default MkvWriter object created by this class used for writing Cues - // element out to a file. - MkvWriter* chunk_writer_cues_; - - // Default MkvWriter object created by this class used for writing the - // Matroska header out to a file. - MkvWriter* chunk_writer_header_; - - // Flag telling whether or not the muxer is chunking output to multiple - // files. - bool chunking_; - - // Base filename for the chunked files. - char* chunking_base_name_; - - // File position offset where the Clusters end. - int64_t cluster_end_offset_; - - // List of clusters. - Cluster** cluster_list_; - - // Number of cluster pointers allocated in the cluster list. - int32_t cluster_list_capacity_; - - // Number of clusters in the cluster list. - int32_t cluster_list_size_; - - // Indicates whether Cues should be written before or after Clusters - CuesPosition cues_position_; - - // Track number that is associated with the cues element for this segment. - uint64_t cues_track_; - - // Tells the muxer to force a new cluster on the next Block. - bool force_new_cluster_; - - // List of stored audio frames. These variables are used to store frames so - // the muxer can follow the guideline "Audio blocks that contain the video - // key frame's timecode should be in the same cluster as the video key frame - // block." - Frame** frames_; - - // Number of frame pointers allocated in the frame list. - int32_t frames_capacity_; - - // Number of frames in the frame list. - int32_t frames_size_; - - // Flag telling if a video track has been added to the segment. - bool has_video_; - - // Flag telling if the segment's header has been written. - bool header_written_; - - // Duration of the last block in nanoseconds. - uint64_t last_block_duration_; - - // Last timestamp in nanoseconds added to a cluster. - uint64_t last_timestamp_; - - // Last timestamp in nanoseconds by track number added to a cluster. - uint64_t last_track_timestamp_[kMaxTrackNumber]; - - // Number of frames written per track. - uint64_t track_frames_written_[kMaxTrackNumber]; - - // Maximum time in nanoseconds for a cluster duration. This variable is a - // guideline and some clusters may have a longer duration. Default is 30 - // seconds. - uint64_t max_cluster_duration_; - - // Maximum size in bytes for a cluster. This variable is a guideline and - // some clusters may have a larger size. Default is 0 which signifies that - // the muxer will decide the size. - uint64_t max_cluster_size_; - - // The mode that segment is in. If set to |kLive| the writer must not - // seek backwards. - Mode mode_; - - // Flag telling the muxer that a new cue point should be added. - bool new_cuepoint_; - - // TODO(fgalligan): Should we add support for more than one Cues element? - // Flag whether or not the muxer should output a Cues element. - bool output_cues_; - - // Flag whether or not the last frame in each Cluster will have a Duration - // element in it. - bool accurate_cluster_duration_; - - // Flag whether or not to write the Cluster Timecode using exactly 8 bytes. - bool fixed_size_cluster_timecode_; - - // Flag whether or not to estimate the file duration. - bool estimate_file_duration_; - - // The size of the EBML header, used to validate the header if - // WriteEbmlHeader() is called more than once. - int32_t ebml_header_size_; - - // The file position of the segment's payload. - int64_t payload_pos_; - - // The file position of the element's size. - int64_t size_position_; - - // Current DocTypeVersion (|doc_type_version_|) and that written in - // WriteSegmentHeader(). - // WriteEbmlHeader() will be called from Finalize() if |doc_type_version_| - // differs from |doc_type_version_written_|. - uint32_t doc_type_version_; - uint32_t doc_type_version_written_; - - // If |duration_| is > 0, then explicitly set the duration of the segment. - double duration_; - - // Pointer to the writer objects. Not owned by this class. - IMkvWriter* writer_cluster_; - IMkvWriter* writer_cues_; - IMkvWriter* writer_header_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Segment); -}; - -} // namespace mkvmuxer - -#endif // MKVMUXER_MKVMUXER_H_ diff --git a/vpx-encoder/android_libs/armeabi-v7a/include/mkvmuxer/mkvmuxertypes.h b/vpx-encoder/android_libs/armeabi-v7a/include/mkvmuxer/mkvmuxertypes.h deleted file mode 100644 index e5db1216..00000000 --- a/vpx-encoder/android_libs/armeabi-v7a/include/mkvmuxer/mkvmuxertypes.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) 2012 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. - -#ifndef MKVMUXER_MKVMUXERTYPES_H_ -#define MKVMUXER_MKVMUXERTYPES_H_ - -namespace mkvmuxer { -typedef unsigned char uint8; -typedef short int16; -typedef int int32; -typedef unsigned int uint32; -typedef long long int64; -typedef unsigned long long uint64; -} // namespace mkvmuxer - -// Copied from Chromium basictypes.h -// A macro to disallow the copy constructor and operator= functions -// This should be used in the private: declarations for a class -#define LIBWEBM_DISALLOW_COPY_AND_ASSIGN(TypeName) \ - TypeName(const TypeName&); \ - void operator=(const TypeName&) - -#endif // MKVMUXER_MKVMUXERTYPES_HPP_ diff --git a/vpx-encoder/android_libs/armeabi-v7a/include/mkvmuxer/mkvmuxerutil.h b/vpx-encoder/android_libs/armeabi-v7a/include/mkvmuxer/mkvmuxerutil.h deleted file mode 100644 index 132388da..00000000 --- a/vpx-encoder/android_libs/armeabi-v7a/include/mkvmuxer/mkvmuxerutil.h +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright (c) 2012 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -#ifndef MKVMUXER_MKVMUXERUTIL_H_ -#define MKVMUXER_MKVMUXERUTIL_H_ - -#include "mkvmuxertypes.h" - -#include "stdint.h" - -namespace mkvmuxer { -class Cluster; -class Frame; -class IMkvWriter; - -// TODO(tomfinegan): mkvmuxer:: integer types continue to be used here because -// changing them causes pain for downstream projects. It would be nice if a -// solution that allows removal of the mkvmuxer:: integer types while avoiding -// pain for downstream users of libwebm. Considering that mkvmuxerutil.{cc,h} -// are really, for the great majority of cases, EBML size calculation and writer -// functions, perhaps a more EBML focused utility would be the way to go as a -// first step. - -const uint64 kEbmlUnknownValue = 0x01FFFFFFFFFFFFFFULL; -const int64 kMaxBlockTimecode = 0x07FFFLL; - -// Writes out |value| in Big Endian order. Returns 0 on success. -int32 SerializeInt(IMkvWriter* writer, int64 value, int32 size); - -// Returns the size in bytes of the element. -int32 GetUIntSize(uint64 value); -int32 GetIntSize(int64 value); -int32 GetCodedUIntSize(uint64 value); -uint64 EbmlMasterElementSize(uint64 type, uint64 value); -uint64 EbmlElementSize(uint64 type, int64 value); -uint64 EbmlElementSize(uint64 type, uint64 value); -uint64 EbmlElementSize(uint64 type, float value); -uint64 EbmlElementSize(uint64 type, const char* value); -uint64 EbmlElementSize(uint64 type, const uint8* value, uint64 size); -uint64 EbmlDateElementSize(uint64 type); - -// Returns the size in bytes of the element assuming that the element was -// written using |fixed_size| bytes. If |fixed_size| is set to zero, then it -// computes the necessary number of bytes based on |value|. -uint64 EbmlElementSize(uint64 type, uint64 value, uint64 fixed_size); - -// Creates an EBML coded number from |value| and writes it out. The size of -// the coded number is determined by the value of |value|. |value| must not -// be in a coded form. Returns 0 on success. -int32 WriteUInt(IMkvWriter* writer, uint64 value); - -// Creates an EBML coded number from |value| and writes it out. The size of -// the coded number is determined by the value of |size|. |value| must not -// be in a coded form. Returns 0 on success. -int32 WriteUIntSize(IMkvWriter* writer, uint64 value, int32 size); - -// Output an Mkv master element. Returns true if the element was written. -bool WriteEbmlMasterElement(IMkvWriter* writer, uint64 value, uint64 size); - -// Outputs an Mkv ID, calls |IMkvWriter::ElementStartNotify|, and passes the -// ID to |SerializeInt|. Returns 0 on success. -int32 WriteID(IMkvWriter* writer, uint64 type); - -// Output an Mkv non-master element. Returns true if the element was written. -bool WriteEbmlElement(IMkvWriter* writer, uint64 type, uint64 value); -bool WriteEbmlElement(IMkvWriter* writer, uint64 type, int64 value); -bool WriteEbmlElement(IMkvWriter* writer, uint64 type, float value); -bool WriteEbmlElement(IMkvWriter* writer, uint64 type, const char* value); -bool WriteEbmlElement(IMkvWriter* writer, uint64 type, const uint8* value, - uint64 size); -bool WriteEbmlDateElement(IMkvWriter* writer, uint64 type, int64 value); - -// Output an Mkv non-master element using fixed size. The element will be -// written out using exactly |fixed_size| bytes. If |fixed_size| is set to zero -// then it computes the necessary number of bytes based on |value|. Returns true -// if the element was written. -bool WriteEbmlElement(IMkvWriter* writer, uint64 type, uint64 value, - uint64 fixed_size); - -// Output a Mkv Frame. It decides the correct element to write (Block vs -// SimpleBlock) based on the parameters of the Frame. -uint64 WriteFrame(IMkvWriter* writer, const Frame* const frame, - Cluster* cluster); - -// Output a void element. |size| must be the entire size in bytes that will be -// void. The function will calculate the size of the void header and subtract -// it from |size|. -uint64 WriteVoidElement(IMkvWriter* writer, uint64 size); - -// Returns the version number of the muxer in |major|, |minor|, |build|, -// and |revision|. -void GetVersion(int32* major, int32* minor, int32* build, int32* revision); - -// Returns a random number to be used for UID, using |seed| to seed -// the random-number generator (see POSIX rand_r() for semantics). -uint64 MakeUID(unsigned int* seed); - -// Colour field validation helpers. All return true when |value| is valid. -bool IsMatrixCoefficientsValueValid(uint64_t value); -bool IsChromaSitingHorzValueValid(uint64_t value); -bool IsChromaSitingVertValueValid(uint64_t value); -bool IsColourRangeValueValid(uint64_t value); -bool IsTransferCharacteristicsValueValid(uint64_t value); -bool IsPrimariesValueValid(uint64_t value); - -} // namespace mkvmuxer - -#endif // MKVMUXER_MKVMUXERUTIL_H_ diff --git a/vpx-encoder/android_libs/armeabi-v7a/include/mkvmuxer/mkvwriter.h b/vpx-encoder/android_libs/armeabi-v7a/include/mkvmuxer/mkvwriter.h deleted file mode 100644 index 4227c637..00000000 --- a/vpx-encoder/android_libs/armeabi-v7a/include/mkvmuxer/mkvwriter.h +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c) 2012 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. - -#ifndef MKVMUXER_MKVWRITER_H_ -#define MKVMUXER_MKVWRITER_H_ - -#include - -#include "mkvmuxer/mkvmuxer.h" -#include "mkvmuxer/mkvmuxertypes.h" - -namespace mkvmuxer { - -// Default implementation of the IMkvWriter interface on Windows. -class MkvWriter : public IMkvWriter { - public: - MkvWriter(); - explicit MkvWriter(FILE* fp); - virtual ~MkvWriter(); - - // IMkvWriter interface - virtual int64 Position() const; - virtual int32 Position(int64 position); - virtual bool Seekable() const; - virtual int32 Write(const void* buffer, uint32 length); - virtual void ElementStartNotify(uint64 element_id, int64 position); - - // Creates and opens a file for writing. |filename| is the name of the file - // to open. This function will overwrite the contents of |filename|. Returns - // true on success. - bool Open(const char* filename); - - // Closes an opened file. - void Close(); - - private: - // File handle to output file. - FILE* file_; - bool writer_owns_file_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(MkvWriter); -}; - -} // namespace mkvmuxer - -#endif // MKVMUXER_MKVWRITER_H_ diff --git a/vpx-encoder/android_libs/armeabi-v7a/include/mkvparser/mkvparser.h b/vpx-encoder/android_libs/armeabi-v7a/include/mkvparser/mkvparser.h deleted file mode 100644 index 848d01f0..00000000 --- a/vpx-encoder/android_libs/armeabi-v7a/include/mkvparser/mkvparser.h +++ /dev/null @@ -1,1147 +0,0 @@ -// Copyright (c) 2012 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -#ifndef MKVPARSER_MKVPARSER_H_ -#define MKVPARSER_MKVPARSER_H_ - -#include - -namespace mkvparser { - -const int E_PARSE_FAILED = -1; -const int E_FILE_FORMAT_INVALID = -2; -const int E_BUFFER_NOT_FULL = -3; - -class IMkvReader { - public: - virtual int Read(long long pos, long len, unsigned char* buf) = 0; - virtual int Length(long long* total, long long* available) = 0; - - protected: - virtual ~IMkvReader() {} -}; - -template -Type* SafeArrayAlloc(unsigned long long num_elements, - unsigned long long element_size); -long long GetUIntLength(IMkvReader*, long long, long&); -long long ReadUInt(IMkvReader*, long long, long&); -long long ReadID(IMkvReader* pReader, long long pos, long& len); -long long UnserializeUInt(IMkvReader*, long long pos, long long size); - -long UnserializeFloat(IMkvReader*, long long pos, long long size, double&); -long UnserializeInt(IMkvReader*, long long pos, long long size, - long long& result); - -long UnserializeString(IMkvReader*, long long pos, long long size, char*& str); - -long ParseElementHeader(IMkvReader* pReader, - long long& pos, // consume id and size fields - long long stop, // if you know size of element's parent - long long& id, long long& size); - -bool Match(IMkvReader*, long long&, unsigned long, long long&); -bool Match(IMkvReader*, long long&, unsigned long, unsigned char*&, size_t&); - -void GetVersion(int& major, int& minor, int& build, int& revision); - -struct EBMLHeader { - EBMLHeader(); - ~EBMLHeader(); - long long m_version; - long long m_readVersion; - long long m_maxIdLength; - long long m_maxSizeLength; - char* m_docType; - long long m_docTypeVersion; - long long m_docTypeReadVersion; - - long long Parse(IMkvReader*, long long&); - void Init(); -}; - -class Segment; -class Track; -class Cluster; - -class Block { - Block(const Block&); - Block& operator=(const Block&); - - public: - const long long m_start; - const long long m_size; - - Block(long long start, long long size, long long discard_padding); - ~Block(); - - long Parse(const Cluster*); - - long long GetTrackNumber() const; - long long GetTimeCode(const Cluster*) const; // absolute, but not scaled - long long GetTime(const Cluster*) const; // absolute, and scaled (ns) - bool IsKey() const; - void SetKey(bool); - bool IsInvisible() const; - - enum Lacing { kLacingNone, kLacingXiph, kLacingFixed, kLacingEbml }; - Lacing GetLacing() const; - - int GetFrameCount() const; // to index frames: [0, count) - - struct Frame { - long long pos; // absolute offset - long len; - - long Read(IMkvReader*, unsigned char*) const; - }; - - const Frame& GetFrame(int frame_index) const; - - long long GetDiscardPadding() const; - - private: - long long m_track; // Track::Number() - short m_timecode; // relative to cluster - unsigned char m_flags; - - Frame* m_frames; - int m_frame_count; - - protected: - const long long m_discard_padding; -}; - -class BlockEntry { - BlockEntry(const BlockEntry&); - BlockEntry& operator=(const BlockEntry&); - - protected: - BlockEntry(Cluster*, long index); - - public: - virtual ~BlockEntry(); - - bool EOS() const { return (GetKind() == kBlockEOS); } - const Cluster* GetCluster() const; - long GetIndex() const; - virtual const Block* GetBlock() const = 0; - - enum Kind { kBlockEOS, kBlockSimple, kBlockGroup }; - virtual Kind GetKind() const = 0; - - protected: - Cluster* const m_pCluster; - const long m_index; -}; - -class SimpleBlock : public BlockEntry { - SimpleBlock(const SimpleBlock&); - SimpleBlock& operator=(const SimpleBlock&); - - public: - SimpleBlock(Cluster*, long index, long long start, long long size); - long Parse(); - - Kind GetKind() const; - const Block* GetBlock() const; - - protected: - Block m_block; -}; - -class BlockGroup : public BlockEntry { - BlockGroup(const BlockGroup&); - BlockGroup& operator=(const BlockGroup&); - - public: - BlockGroup(Cluster*, long index, - long long block_start, // absolute pos of block's payload - long long block_size, // size of block's payload - long long prev, long long next, long long duration, - long long discard_padding); - - long Parse(); - - Kind GetKind() const; - const Block* GetBlock() const; - - long long GetPrevTimeCode() const; // relative to block's time - long long GetNextTimeCode() const; // as above - long long GetDurationTimeCode() const; - - private: - Block m_block; - const long long m_prev; - const long long m_next; - const long long m_duration; -}; - -/////////////////////////////////////////////////////////////// -// ContentEncoding element -// Elements used to describe if the track data has been encrypted or -// compressed with zlib or header stripping. -class ContentEncoding { - public: - enum { kCTR = 1 }; - - ContentEncoding(); - ~ContentEncoding(); - - // ContentCompression element names - struct ContentCompression { - ContentCompression(); - ~ContentCompression(); - - unsigned long long algo; - unsigned char* settings; - long long settings_len; - }; - - // ContentEncAESSettings element names - struct ContentEncAESSettings { - ContentEncAESSettings() : cipher_mode(kCTR) {} - ~ContentEncAESSettings() {} - - unsigned long long cipher_mode; - }; - - // ContentEncryption element names - struct ContentEncryption { - ContentEncryption(); - ~ContentEncryption(); - - unsigned long long algo; - unsigned char* key_id; - long long key_id_len; - unsigned char* signature; - long long signature_len; - unsigned char* sig_key_id; - long long sig_key_id_len; - unsigned long long sig_algo; - unsigned long long sig_hash_algo; - - ContentEncAESSettings aes_settings; - }; - - // Returns ContentCompression represented by |idx|. Returns NULL if |idx| - // is out of bounds. - const ContentCompression* GetCompressionByIndex(unsigned long idx) const; - - // Returns number of ContentCompression elements in this ContentEncoding - // element. - unsigned long GetCompressionCount() const; - - // Parses the ContentCompression element from |pReader|. |start| is the - // starting offset of the ContentCompression payload. |size| is the size in - // bytes of the ContentCompression payload. |compression| is where the parsed - // values will be stored. - long ParseCompressionEntry(long long start, long long size, - IMkvReader* pReader, - ContentCompression* compression); - - // Returns ContentEncryption represented by |idx|. Returns NULL if |idx| - // is out of bounds. - const ContentEncryption* GetEncryptionByIndex(unsigned long idx) const; - - // Returns number of ContentEncryption elements in this ContentEncoding - // element. - unsigned long GetEncryptionCount() const; - - // Parses the ContentEncAESSettings element from |pReader|. |start| is the - // starting offset of the ContentEncAESSettings payload. |size| is the - // size in bytes of the ContentEncAESSettings payload. |encryption| is - // where the parsed values will be stored. - long ParseContentEncAESSettingsEntry(long long start, long long size, - IMkvReader* pReader, - ContentEncAESSettings* aes); - - // Parses the ContentEncoding element from |pReader|. |start| is the - // starting offset of the ContentEncoding payload. |size| is the size in - // bytes of the ContentEncoding payload. Returns true on success. - long ParseContentEncodingEntry(long long start, long long size, - IMkvReader* pReader); - - // Parses the ContentEncryption element from |pReader|. |start| is the - // starting offset of the ContentEncryption payload. |size| is the size in - // bytes of the ContentEncryption payload. |encryption| is where the parsed - // values will be stored. - long ParseEncryptionEntry(long long start, long long size, - IMkvReader* pReader, ContentEncryption* encryption); - - unsigned long long encoding_order() const { return encoding_order_; } - unsigned long long encoding_scope() const { return encoding_scope_; } - unsigned long long encoding_type() const { return encoding_type_; } - - private: - // Member variables for list of ContentCompression elements. - ContentCompression** compression_entries_; - ContentCompression** compression_entries_end_; - - // Member variables for list of ContentEncryption elements. - ContentEncryption** encryption_entries_; - ContentEncryption** encryption_entries_end_; - - // ContentEncoding element names - unsigned long long encoding_order_; - unsigned long long encoding_scope_; - unsigned long long encoding_type_; - - // LIBWEBM_DISALLOW_COPY_AND_ASSIGN(ContentEncoding); - ContentEncoding(const ContentEncoding&); - ContentEncoding& operator=(const ContentEncoding&); -}; - -class Track { - Track(const Track&); - Track& operator=(const Track&); - - public: - class Info; - static long Create(Segment*, const Info&, long long element_start, - long long element_size, Track*&); - - enum Type { kVideo = 1, kAudio = 2, kSubtitle = 0x11, kMetadata = 0x21 }; - - Segment* const m_pSegment; - const long long m_element_start; - const long long m_element_size; - virtual ~Track(); - - long GetType() const; - long GetNumber() const; - unsigned long long GetUid() const; - const char* GetNameAsUTF8() const; - const char* GetLanguage() const; - const char* GetCodecNameAsUTF8() const; - const char* GetCodecId() const; - const unsigned char* GetCodecPrivate(size_t&) const; - bool GetLacing() const; - unsigned long long GetDefaultDuration() const; - unsigned long long GetCodecDelay() const; - unsigned long long GetSeekPreRoll() const; - - const BlockEntry* GetEOS() const; - - struct Settings { - long long start; - long long size; - }; - - class Info { - public: - Info(); - ~Info(); - int Copy(Info&) const; - void Clear(); - long type; - long number; - unsigned long long uid; - unsigned long long defaultDuration; - unsigned long long codecDelay; - unsigned long long seekPreRoll; - char* nameAsUTF8; - char* language; - char* codecId; - char* codecNameAsUTF8; - unsigned char* codecPrivate; - size_t codecPrivateSize; - bool lacing; - Settings settings; - - private: - Info(const Info&); - Info& operator=(const Info&); - int CopyStr(char* Info::*str, Info&) const; - }; - - long GetFirst(const BlockEntry*&) const; - long GetNext(const BlockEntry* pCurr, const BlockEntry*& pNext) const; - virtual bool VetEntry(const BlockEntry*) const; - virtual long Seek(long long time_ns, const BlockEntry*&) const; - - const ContentEncoding* GetContentEncodingByIndex(unsigned long idx) const; - unsigned long GetContentEncodingCount() const; - - long ParseContentEncodingsEntry(long long start, long long size); - - protected: - Track(Segment*, long long element_start, long long element_size); - - Info m_info; - - class EOSBlock : public BlockEntry { - public: - EOSBlock(); - - Kind GetKind() const; - const Block* GetBlock() const; - }; - - EOSBlock m_eos; - - private: - ContentEncoding** content_encoding_entries_; - ContentEncoding** content_encoding_entries_end_; -}; - -struct PrimaryChromaticity { - PrimaryChromaticity() : x(0), y(0) {} - ~PrimaryChromaticity() {} - static bool Parse(IMkvReader* reader, long long read_pos, - long long value_size, bool is_x, - PrimaryChromaticity** chromaticity); - float x; - float y; -}; - -struct MasteringMetadata { - static const float kValueNotPresent; - - MasteringMetadata() - : r(NULL), - g(NULL), - b(NULL), - white_point(NULL), - luminance_max(kValueNotPresent), - luminance_min(kValueNotPresent) {} - ~MasteringMetadata() { - delete r; - delete g; - delete b; - delete white_point; - } - - static bool Parse(IMkvReader* reader, long long element_start, - long long element_size, - MasteringMetadata** mastering_metadata); - - PrimaryChromaticity* r; - PrimaryChromaticity* g; - PrimaryChromaticity* b; - PrimaryChromaticity* white_point; - float luminance_max; - float luminance_min; -}; - -struct Colour { - static const long long kValueNotPresent; - - // Unless otherwise noted all values assigned upon construction are the - // equivalent of unspecified/default. - Colour() - : matrix_coefficients(kValueNotPresent), - bits_per_channel(kValueNotPresent), - chroma_subsampling_horz(kValueNotPresent), - chroma_subsampling_vert(kValueNotPresent), - cb_subsampling_horz(kValueNotPresent), - cb_subsampling_vert(kValueNotPresent), - chroma_siting_horz(kValueNotPresent), - chroma_siting_vert(kValueNotPresent), - range(kValueNotPresent), - transfer_characteristics(kValueNotPresent), - primaries(kValueNotPresent), - max_cll(kValueNotPresent), - max_fall(kValueNotPresent), - mastering_metadata(NULL) {} - ~Colour() { - delete mastering_metadata; - mastering_metadata = NULL; - } - - static bool Parse(IMkvReader* reader, long long element_start, - long long element_size, Colour** colour); - - long long matrix_coefficients; - long long bits_per_channel; - long long chroma_subsampling_horz; - long long chroma_subsampling_vert; - long long cb_subsampling_horz; - long long cb_subsampling_vert; - long long chroma_siting_horz; - long long chroma_siting_vert; - long long range; - long long transfer_characteristics; - long long primaries; - long long max_cll; - long long max_fall; - - MasteringMetadata* mastering_metadata; -}; - -struct Projection { - enum ProjectionType { - kTypeNotPresent = -1, - kRectangular = 0, - kEquirectangular = 1, - kCubeMap = 2, - kMesh = 3, - }; - static const float kValueNotPresent; - Projection() - : type(kTypeNotPresent), - private_data(NULL), - private_data_length(0), - pose_yaw(kValueNotPresent), - pose_pitch(kValueNotPresent), - pose_roll(kValueNotPresent) {} - ~Projection() { delete[] private_data; } - static bool Parse(IMkvReader* reader, long long element_start, - long long element_size, Projection** projection); - - ProjectionType type; - unsigned char* private_data; - size_t private_data_length; - float pose_yaw; - float pose_pitch; - float pose_roll; -}; - -class VideoTrack : public Track { - VideoTrack(const VideoTrack&); - VideoTrack& operator=(const VideoTrack&); - - VideoTrack(Segment*, long long element_start, long long element_size); - - public: - virtual ~VideoTrack(); - static long Parse(Segment*, const Info&, long long element_start, - long long element_size, VideoTrack*&); - - long long GetWidth() const; - long long GetHeight() const; - long long GetDisplayWidth() const; - long long GetDisplayHeight() const; - long long GetDisplayUnit() const; - long long GetStereoMode() const; - double GetFrameRate() const; - - bool VetEntry(const BlockEntry*) const; - long Seek(long long time_ns, const BlockEntry*&) const; - - Colour* GetColour() const; - - Projection* GetProjection() const; - - const char* GetColourSpace() const { return m_colour_space; } - - private: - long long m_width; - long long m_height; - long long m_display_width; - long long m_display_height; - long long m_display_unit; - long long m_stereo_mode; - char* m_colour_space; - double m_rate; - - Colour* m_colour; - Projection* m_projection; -}; - -class AudioTrack : public Track { - AudioTrack(const AudioTrack&); - AudioTrack& operator=(const AudioTrack&); - - AudioTrack(Segment*, long long element_start, long long element_size); - - public: - static long Parse(Segment*, const Info&, long long element_start, - long long element_size, AudioTrack*&); - - double GetSamplingRate() const; - long long GetChannels() const; - long long GetBitDepth() const; - - private: - double m_rate; - long long m_channels; - long long m_bitDepth; -}; - -class Tracks { - Tracks(const Tracks&); - Tracks& operator=(const Tracks&); - - public: - Segment* const m_pSegment; - const long long m_start; - const long long m_size; - const long long m_element_start; - const long long m_element_size; - - Tracks(Segment*, long long start, long long size, long long element_start, - long long element_size); - - ~Tracks(); - - long Parse(); - - unsigned long GetTracksCount() const; - - const Track* GetTrackByNumber(long tn) const; - const Track* GetTrackByIndex(unsigned long idx) const; - - private: - Track** m_trackEntries; - Track** m_trackEntriesEnd; - - long ParseTrackEntry(long long payload_start, long long payload_size, - long long element_start, long long element_size, - Track*&) const; -}; - -class Chapters { - Chapters(const Chapters&); - Chapters& operator=(const Chapters&); - - public: - Segment* const m_pSegment; - const long long m_start; - const long long m_size; - const long long m_element_start; - const long long m_element_size; - - Chapters(Segment*, long long payload_start, long long payload_size, - long long element_start, long long element_size); - - ~Chapters(); - - long Parse(); - - class Atom; - class Edition; - - class Display { - friend class Atom; - Display(); - Display(const Display&); - ~Display(); - Display& operator=(const Display&); - - public: - const char* GetString() const; - const char* GetLanguage() const; - const char* GetCountry() const; - - private: - void Init(); - void ShallowCopy(Display&) const; - void Clear(); - long Parse(IMkvReader*, long long pos, long long size); - - char* m_string; - char* m_language; - char* m_country; - }; - - class Atom { - friend class Edition; - Atom(); - Atom(const Atom&); - ~Atom(); - Atom& operator=(const Atom&); - - public: - unsigned long long GetUID() const; - const char* GetStringUID() const; - - long long GetStartTimecode() const; - long long GetStopTimecode() const; - - long long GetStartTime(const Chapters*) const; - long long GetStopTime(const Chapters*) const; - - int GetDisplayCount() const; - const Display* GetDisplay(int index) const; - - private: - void Init(); - void ShallowCopy(Atom&) const; - void Clear(); - long Parse(IMkvReader*, long long pos, long long size); - static long long GetTime(const Chapters*, long long timecode); - - long ParseDisplay(IMkvReader*, long long pos, long long size); - bool ExpandDisplaysArray(); - - char* m_string_uid; - unsigned long long m_uid; - long long m_start_timecode; - long long m_stop_timecode; - - Display* m_displays; - int m_displays_size; - int m_displays_count; - }; - - class Edition { - friend class Chapters; - Edition(); - Edition(const Edition&); - ~Edition(); - Edition& operator=(const Edition&); - - public: - int GetAtomCount() const; - const Atom* GetAtom(int index) const; - - private: - void Init(); - void ShallowCopy(Edition&) const; - void Clear(); - long Parse(IMkvReader*, long long pos, long long size); - - long ParseAtom(IMkvReader*, long long pos, long long size); - bool ExpandAtomsArray(); - - Atom* m_atoms; - int m_atoms_size; - int m_atoms_count; - }; - - int GetEditionCount() const; - const Edition* GetEdition(int index) const; - - private: - long ParseEdition(long long pos, long long size); - bool ExpandEditionsArray(); - - Edition* m_editions; - int m_editions_size; - int m_editions_count; -}; - -class Tags { - Tags(const Tags&); - Tags& operator=(const Tags&); - - public: - Segment* const m_pSegment; - const long long m_start; - const long long m_size; - const long long m_element_start; - const long long m_element_size; - - Tags(Segment*, long long payload_start, long long payload_size, - long long element_start, long long element_size); - - ~Tags(); - - long Parse(); - - class Tag; - class SimpleTag; - - class SimpleTag { - friend class Tag; - SimpleTag(); - SimpleTag(const SimpleTag&); - ~SimpleTag(); - SimpleTag& operator=(const SimpleTag&); - - public: - const char* GetTagName() const; - const char* GetTagString() const; - - private: - void Init(); - void ShallowCopy(SimpleTag&) const; - void Clear(); - long Parse(IMkvReader*, long long pos, long long size); - - char* m_tag_name; - char* m_tag_string; - }; - - class Tag { - friend class Tags; - Tag(); - Tag(const Tag&); - ~Tag(); - Tag& operator=(const Tag&); - - public: - int GetSimpleTagCount() const; - const SimpleTag* GetSimpleTag(int index) const; - - private: - void Init(); - void ShallowCopy(Tag&) const; - void Clear(); - long Parse(IMkvReader*, long long pos, long long size); - - long ParseSimpleTag(IMkvReader*, long long pos, long long size); - bool ExpandSimpleTagsArray(); - - SimpleTag* m_simple_tags; - int m_simple_tags_size; - int m_simple_tags_count; - }; - - int GetTagCount() const; - const Tag* GetTag(int index) const; - - private: - long ParseTag(long long pos, long long size); - bool ExpandTagsArray(); - - Tag* m_tags; - int m_tags_size; - int m_tags_count; -}; - -class SegmentInfo { - SegmentInfo(const SegmentInfo&); - SegmentInfo& operator=(const SegmentInfo&); - - public: - Segment* const m_pSegment; - const long long m_start; - const long long m_size; - const long long m_element_start; - const long long m_element_size; - - SegmentInfo(Segment*, long long start, long long size, - long long element_start, long long element_size); - - ~SegmentInfo(); - - long Parse(); - - long long GetTimeCodeScale() const; - long long GetDuration() const; // scaled - const char* GetMuxingAppAsUTF8() const; - const char* GetWritingAppAsUTF8() const; - const char* GetTitleAsUTF8() const; - - private: - long long m_timecodeScale; - double m_duration; - char* m_pMuxingAppAsUTF8; - char* m_pWritingAppAsUTF8; - char* m_pTitleAsUTF8; -}; - -class SeekHead { - SeekHead(const SeekHead&); - SeekHead& operator=(const SeekHead&); - - public: - Segment* const m_pSegment; - const long long m_start; - const long long m_size; - const long long m_element_start; - const long long m_element_size; - - SeekHead(Segment*, long long start, long long size, long long element_start, - long long element_size); - - ~SeekHead(); - - long Parse(); - - struct Entry { - Entry(); - - // the SeekHead entry payload - long long id; - long long pos; - - // absolute pos of SeekEntry ID - long long element_start; - - // SeekEntry ID size + size size + payload - long long element_size; - }; - - int GetCount() const; - const Entry* GetEntry(int idx) const; - - struct VoidElement { - // absolute pos of Void ID - long long element_start; - - // ID size + size size + payload size - long long element_size; - }; - - int GetVoidElementCount() const; - const VoidElement* GetVoidElement(int idx) const; - - private: - Entry* m_entries; - int m_entry_count; - - VoidElement* m_void_elements; - int m_void_element_count; - - static bool ParseEntry(IMkvReader*, - long long pos, // payload - long long size, Entry*); -}; - -class Cues; -class CuePoint { - friend class Cues; - - CuePoint(long, long long); - ~CuePoint(); - - CuePoint(const CuePoint&); - CuePoint& operator=(const CuePoint&); - - public: - long long m_element_start; - long long m_element_size; - - bool Load(IMkvReader*); - - long long GetTimeCode() const; // absolute but unscaled - long long GetTime(const Segment*) const; // absolute and scaled (ns units) - - struct TrackPosition { - long long m_track; - long long m_pos; // of cluster - long long m_block; - // codec_state //defaults to 0 - // reference = clusters containing req'd referenced blocks - // reftime = timecode of the referenced block - - bool Parse(IMkvReader*, long long, long long); - }; - - const TrackPosition* Find(const Track*) const; - - private: - const long m_index; - long long m_timecode; - TrackPosition* m_track_positions; - size_t m_track_positions_count; -}; - -class Cues { - friend class Segment; - - Cues(Segment*, long long start, long long size, long long element_start, - long long element_size); - ~Cues(); - - Cues(const Cues&); - Cues& operator=(const Cues&); - - public: - Segment* const m_pSegment; - const long long m_start; - const long long m_size; - const long long m_element_start; - const long long m_element_size; - - bool Find( // lower bound of time_ns - long long time_ns, const Track*, const CuePoint*&, - const CuePoint::TrackPosition*&) const; - - const CuePoint* GetFirst() const; - const CuePoint* GetLast() const; - const CuePoint* GetNext(const CuePoint*) const; - - const BlockEntry* GetBlock(const CuePoint*, - const CuePoint::TrackPosition*) const; - - bool LoadCuePoint() const; - long GetCount() const; // loaded only - // long GetTotal() const; //loaded + preloaded - bool DoneParsing() const; - - private: - bool Init() const; - bool PreloadCuePoint(long&, long long) const; - - mutable CuePoint** m_cue_points; - mutable long m_count; - mutable long m_preload_count; - mutable long long m_pos; -}; - -class Cluster { - friend class Segment; - - Cluster(const Cluster&); - Cluster& operator=(const Cluster&); - - public: - Segment* const m_pSegment; - - public: - static Cluster* Create(Segment*, - long index, // index in segment - long long off); // offset relative to segment - // long long element_size); - - Cluster(); // EndOfStream - ~Cluster(); - - bool EOS() const; - - long long GetTimeCode() const; // absolute, but not scaled - long long GetTime() const; // absolute, and scaled (nanosecond units) - long long GetFirstTime() const; // time (ns) of first (earliest) block - long long GetLastTime() const; // time (ns) of last (latest) block - - long GetFirst(const BlockEntry*&) const; - long GetLast(const BlockEntry*&) const; - long GetNext(const BlockEntry* curr, const BlockEntry*& next) const; - - const BlockEntry* GetEntry(const Track*, long long ns = -1) const; - const BlockEntry* GetEntry(const CuePoint&, - const CuePoint::TrackPosition&) const; - // const BlockEntry* GetMaxKey(const VideoTrack*) const; - - // static bool HasBlockEntries(const Segment*, long long); - - static long HasBlockEntries(const Segment*, long long idoff, long long& pos, - long& size); - - long GetEntryCount() const; - - long Load(long long& pos, long& size) const; - - long Parse(long long& pos, long& size) const; - long GetEntry(long index, const mkvparser::BlockEntry*&) const; - - protected: - Cluster(Segment*, long index, long long element_start); - // long long element_size); - - public: - const long long m_element_start; - long long GetPosition() const; // offset relative to segment - - long GetIndex() const; - long long GetElementSize() const; - // long long GetPayloadSize() const; - - // long long Unparsed() const; - - private: - long m_index; - mutable long long m_pos; - // mutable long long m_size; - mutable long long m_element_size; - mutable long long m_timecode; - mutable BlockEntry** m_entries; - mutable long m_entries_size; - mutable long m_entries_count; - - long ParseSimpleBlock(long long, long long&, long&); - long ParseBlockGroup(long long, long long&, long&); - - long CreateBlock(long long id, long long pos, long long size, - long long discard_padding); - long CreateBlockGroup(long long start_offset, long long size, - long long discard_padding); - long CreateSimpleBlock(long long, long long); -}; - -class Segment { - friend class Cues; - friend class Track; - friend class VideoTrack; - - Segment(const Segment&); - Segment& operator=(const Segment&); - - private: - Segment(IMkvReader*, long long elem_start, - // long long elem_size, - long long pos, long long size); - - public: - IMkvReader* const m_pReader; - const long long m_element_start; - // const long long m_element_size; - const long long m_start; // posn of segment payload - const long long m_size; // size of segment payload - Cluster m_eos; // TODO: make private? - - static long long CreateInstance(IMkvReader*, long long, Segment*&); - ~Segment(); - - long Load(); // loads headers and all clusters - - // for incremental loading - // long long Unparsed() const; - bool DoneParsing() const; - long long ParseHeaders(); // stops when first cluster is found - // long FindNextCluster(long long& pos, long& size) const; - long LoadCluster(long long& pos, long& size); // load one cluster - long LoadCluster(); - - long ParseNext(const Cluster* pCurr, const Cluster*& pNext, long long& pos, - long& size); - - const SeekHead* GetSeekHead() const; - const Tracks* GetTracks() const; - const SegmentInfo* GetInfo() const; - const Cues* GetCues() const; - const Chapters* GetChapters() const; - const Tags* GetTags() const; - - long long GetDuration() const; - - unsigned long GetCount() const; - const Cluster* GetFirst() const; - const Cluster* GetLast() const; - const Cluster* GetNext(const Cluster*); - - const Cluster* FindCluster(long long time_nanoseconds) const; - // const BlockEntry* Seek(long long time_nanoseconds, const Track*) const; - - const Cluster* FindOrPreloadCluster(long long pos); - - long ParseCues(long long cues_off, // offset relative to start of segment - long long& parse_pos, long& parse_len); - - private: - long long m_pos; // absolute file posn; what has been consumed so far - Cluster* m_pUnknownSize; - - SeekHead* m_pSeekHead; - SegmentInfo* m_pInfo; - Tracks* m_pTracks; - Cues* m_pCues; - Chapters* m_pChapters; - Tags* m_pTags; - Cluster** m_clusters; - long m_clusterCount; // number of entries for which m_index >= 0 - long m_clusterPreloadCount; // number of entries for which m_index < 0 - long m_clusterSize; // array size - - long DoLoadCluster(long long&, long&); - long DoLoadClusterUnknownSize(long long&, long&); - long DoParseNext(const Cluster*&, long long&, long&); - - bool AppendCluster(Cluster*); - bool PreloadCluster(Cluster*, ptrdiff_t); - - // void ParseSeekHead(long long pos, long long size); - // void ParseSeekEntry(long long pos, long long size); - // void ParseCues(long long); - - const BlockEntry* GetBlock(const CuePoint&, const CuePoint::TrackPosition&); -}; - -} // namespace mkvparser - -inline long mkvparser::Segment::LoadCluster() { - long long pos; - long size; - - return LoadCluster(pos, size); -} - -#endif // MKVPARSER_MKVPARSER_H_ diff --git a/vpx-encoder/android_libs/armeabi-v7a/include/mkvparser/mkvreader.h b/vpx-encoder/android_libs/armeabi-v7a/include/mkvparser/mkvreader.h deleted file mode 100644 index 9831ecf6..00000000 --- a/vpx-encoder/android_libs/armeabi-v7a/include/mkvparser/mkvreader.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) 2010 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -#ifndef MKVPARSER_MKVREADER_H_ -#define MKVPARSER_MKVREADER_H_ - -#include - -#include "mkvparser/mkvparser.h" - -namespace mkvparser { - -class MkvReader : public IMkvReader { - public: - MkvReader(); - explicit MkvReader(FILE* fp); - virtual ~MkvReader(); - - int Open(const char*); - void Close(); - - virtual int Read(long long position, long length, unsigned char* buffer); - virtual int Length(long long* total, long long* available); - - private: - MkvReader(const MkvReader&); - MkvReader& operator=(const MkvReader&); - - // Determines the size of the file. This is called either by the constructor - // or by the Open function depending on file ownership. Returns true on - // success. - bool GetFileSize(); - - long long m_length; - FILE* m_file; - bool reader_owns_file_; -}; - -} // namespace mkvparser - -#endif // MKVPARSER_MKVREADER_H_ diff --git a/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vp8.h b/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vp8.h deleted file mode 100644 index f30dafed..00000000 --- a/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vp8.h +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -/*!\defgroup vp8 VP8 - * \ingroup codecs - * VP8 is a video compression algorithm that uses motion - * compensated prediction, Discrete Cosine Transform (DCT) coding of the - * prediction error signal and context dependent entropy coding techniques - * based on arithmetic principles. It features: - * - YUV 4:2:0 image format - * - Macro-block based coding (16x16 luma plus two 8x8 chroma) - * - 1/4 (1/8) pixel accuracy motion compensated prediction - * - 4x4 DCT transform - * - 128 level linear quantizer - * - In loop deblocking filter - * - Context-based entropy coding - * - * @{ - */ -/*!\file - * \brief Provides controls common to both the VP8 encoder and decoder. - */ -#ifndef VPX_VPX_VP8_H_ -#define VPX_VPX_VP8_H_ - -#include "./vpx_codec.h" -#include "./vpx_image.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/*!\brief Control functions - * - * The set of macros define the control functions of VP8 interface - */ -enum vp8_com_control_id { - /*!\brief pass in an external frame into decoder to be used as reference frame - */ - VP8_SET_REFERENCE = 1, - VP8_COPY_REFERENCE = 2, /**< get a copy of reference frame from the decoder */ - VP8_SET_POSTPROC = 3, /**< set the decoder's post processing settings */ - - /* TODO(jkoleszar): The encoder incorrectly reuses some of these values (5+) - * for its control ids. These should be migrated to something like the - * VP8_DECODER_CTRL_ID_START range next time we're ready to break the ABI. - */ - VP9_GET_REFERENCE = 128, /**< get a pointer to a reference frame */ - VP8_COMMON_CTRL_ID_MAX, - VP8_DECODER_CTRL_ID_START = 256 -}; - -/*!\brief post process flags - * - * The set of macros define VP8 decoder post processing flags - */ -enum vp8_postproc_level { - VP8_NOFILTERING = 0, - VP8_DEBLOCK = 1 << 0, - VP8_DEMACROBLOCK = 1 << 1, - VP8_ADDNOISE = 1 << 2, - VP8_MFQE = 1 << 3 -}; - -/*!\brief post process flags - * - * This define a structure that describe the post processing settings. For - * the best objective measure (using the PSNR metric) set post_proc_flag - * to VP8_DEBLOCK and deblocking_level to 1. - */ - -typedef struct vp8_postproc_cfg { - /*!\brief the types of post processing to be done, should be combination of - * "vp8_postproc_level" */ - int post_proc_flag; - int deblocking_level; /**< the strength of deblocking, valid range [0, 16] */ - int noise_level; /**< the strength of additive noise, valid range [0, 16] */ -} vp8_postproc_cfg_t; - -/*!\brief reference frame type - * - * The set of macros define the type of VP8 reference frames - */ -typedef enum vpx_ref_frame_type { - VP8_LAST_FRAME = 1, - VP8_GOLD_FRAME = 2, - VP8_ALTR_FRAME = 4 -} vpx_ref_frame_type_t; - -/*!\brief reference frame data struct - * - * Define the data struct to access vp8 reference frames. - */ -typedef struct vpx_ref_frame { - vpx_ref_frame_type_t frame_type; /**< which reference frame */ - vpx_image_t img; /**< reference frame data in image format */ -} vpx_ref_frame_t; - -/*!\brief VP9 specific reference frame data struct - * - * Define the data struct to access vp9 reference frames. - */ -typedef struct vp9_ref_frame { - int idx; /**< frame index to get (input) */ - vpx_image_t img; /**< img structure to populate (output) */ -} vp9_ref_frame_t; - -/*!\cond */ -/*!\brief vp8 decoder control function parameter type - * - * defines the data type for each of VP8 decoder control function requires - */ -VPX_CTRL_USE_TYPE(VP8_SET_REFERENCE, vpx_ref_frame_t *) -#define VPX_CTRL_VP8_SET_REFERENCE -VPX_CTRL_USE_TYPE(VP8_COPY_REFERENCE, vpx_ref_frame_t *) -#define VPX_CTRL_VP8_COPY_REFERENCE -VPX_CTRL_USE_TYPE(VP8_SET_POSTPROC, vp8_postproc_cfg_t *) -#define VPX_CTRL_VP8_SET_POSTPROC -VPX_CTRL_USE_TYPE(VP9_GET_REFERENCE, vp9_ref_frame_t *) -#define VPX_CTRL_VP9_GET_REFERENCE - -/*!\endcond */ -/*! @} - end defgroup vp8 */ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // VPX_VPX_VP8_H_ diff --git a/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vp8cx.h b/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vp8cx.h deleted file mode 100644 index b2d57dce..00000000 --- a/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vp8cx.h +++ /dev/null @@ -1,1027 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ -#ifndef VPX_VPX_VP8CX_H_ -#define VPX_VPX_VP8CX_H_ - -/*!\defgroup vp8_encoder WebM VP8/VP9 Encoder - * \ingroup vp8 - * - * @{ - */ -#include "./vp8.h" -#include "./vpx_encoder.h" - -/*!\file - * \brief Provides definitions for using VP8 or VP9 encoder algorithm within the - * vpx Codec Interface. - */ - -#ifdef __cplusplus -extern "C" { -#endif - -/*!\name Algorithm interface for VP8 - * - * This interface provides the capability to encode raw VP8 streams. - * @{ - */ -extern vpx_codec_iface_t vpx_codec_vp8_cx_algo; -extern vpx_codec_iface_t *vpx_codec_vp8_cx(void); -/*!@} - end algorithm interface member group*/ - -/*!\name Algorithm interface for VP9 - * - * This interface provides the capability to encode raw VP9 streams. - * @{ - */ -extern vpx_codec_iface_t vpx_codec_vp9_cx_algo; -extern vpx_codec_iface_t *vpx_codec_vp9_cx(void); -/*!@} - end algorithm interface member group*/ - -/* - * Algorithm Flags - */ - -/*!\brief Don't reference the last frame - * - * When this flag is set, the encoder will not use the last frame as a - * predictor. When not set, the encoder will choose whether to use the - * last frame or not automatically. - */ -#define VP8_EFLAG_NO_REF_LAST (1 << 16) - -/*!\brief Don't reference the golden frame - * - * When this flag is set, the encoder will not use the golden frame as a - * predictor. When not set, the encoder will choose whether to use the - * golden frame or not automatically. - */ -#define VP8_EFLAG_NO_REF_GF (1 << 17) - -/*!\brief Don't reference the alternate reference frame - * - * When this flag is set, the encoder will not use the alt ref frame as a - * predictor. When not set, the encoder will choose whether to use the - * alt ref frame or not automatically. - */ -#define VP8_EFLAG_NO_REF_ARF (1 << 21) - -/*!\brief Don't update the last frame - * - * When this flag is set, the encoder will not update the last frame with - * the contents of the current frame. - */ -#define VP8_EFLAG_NO_UPD_LAST (1 << 18) - -/*!\brief Don't update the golden frame - * - * When this flag is set, the encoder will not update the golden frame with - * the contents of the current frame. - */ -#define VP8_EFLAG_NO_UPD_GF (1 << 22) - -/*!\brief Don't update the alternate reference frame - * - * When this flag is set, the encoder will not update the alt ref frame with - * the contents of the current frame. - */ -#define VP8_EFLAG_NO_UPD_ARF (1 << 23) - -/*!\brief Force golden frame update - * - * When this flag is set, the encoder copy the contents of the current frame - * to the golden frame buffer. - */ -#define VP8_EFLAG_FORCE_GF (1 << 19) - -/*!\brief Force alternate reference frame update - * - * When this flag is set, the encoder copy the contents of the current frame - * to the alternate reference frame buffer. - */ -#define VP8_EFLAG_FORCE_ARF (1 << 24) - -/*!\brief Disable entropy update - * - * When this flag is set, the encoder will not update its internal entropy - * model based on the entropy of this frame. - */ -#define VP8_EFLAG_NO_UPD_ENTROPY (1 << 20) - -/*!\brief VPx encoder control functions - * - * This set of macros define the control functions available for VPx - * encoder interface. - * - * \sa #vpx_codec_control - */ -enum vp8e_enc_control_id { - /*!\brief Codec control function to pass an ROI map to encoder. - * - * Supported in codecs: VP8 - */ - VP8E_SET_ROI_MAP = 8, - - /*!\brief Codec control function to pass an Active map to encoder. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_ACTIVEMAP, - - /*!\brief Codec control function to set encoder scaling mode. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_SCALEMODE = 11, - - /*!\brief Codec control function to set encoder internal speed settings. - * - * Changes in this value influences, among others, the encoder's selection - * of motion estimation methods. Values greater than 0 will increase encoder - * speed at the expense of quality. - * - * \note Valid range for VP8: -16..16 - * \note Valid range for VP9: -8..8 - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_CPUUSED = 13, - - /*!\brief Codec control function to enable automatic use of arf frames. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_ENABLEAUTOALTREF, - - /*!\brief control function to set noise sensitivity - * - * 0: off, 1: OnYOnly, 2: OnYUV, - * 3: OnYUVAggressive, 4: Adaptive - * - * Supported in codecs: VP8 - */ - VP8E_SET_NOISE_SENSITIVITY, - - /*!\brief Codec control function to set higher sharpness at the expense - * of a lower PSNR. - * - * \note Valid range: 0..7 - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_SHARPNESS, - - /*!\brief Codec control function to set the threshold for MBs treated static. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_STATIC_THRESHOLD, - - /*!\brief Codec control function to set the number of token partitions. - * - * Supported in codecs: VP8 - */ - VP8E_SET_TOKEN_PARTITIONS, - - /*!\brief Codec control function to get last quantizer chosen by the encoder. - * - * Return value uses internal quantizer scale defined by the codec. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_GET_LAST_QUANTIZER, - - /*!\brief Codec control function to get last quantizer chosen by the encoder. - * - * Return value uses the 0..63 scale as used by the rc_*_quantizer config - * parameters. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_GET_LAST_QUANTIZER_64, - - /*!\brief Codec control function to set the max no of frames to create arf. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_ARNR_MAXFRAMES, - - /*!\brief Codec control function to set the filter strength for the arf. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_ARNR_STRENGTH, - - /*!\deprecated control function to set the filter type to use for the arf. */ - VP8E_SET_ARNR_TYPE, - - /*!\brief Codec control function to set visual tuning. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_TUNING, - - /*!\brief Codec control function to set constrained quality level. - * - * \attention For this value to be used vpx_codec_enc_cfg_t::rc_end_usage must - * be set to #VPX_CQ - * \note Valid range: 0..63 - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_CQ_LEVEL, - - /*!\brief Codec control function to set Max data rate for Intra frames. - * - * This value controls additional clamping on the maximum size of a - * keyframe. It is expressed as a percentage of the average - * per-frame bitrate, with the special (and default) value 0 meaning - * unlimited, or no additional clamping beyond the codec's built-in - * algorithm. - * - * For example, to allocate no more than 4.5 frames worth of bitrate - * to a keyframe, set this to 450. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_MAX_INTRA_BITRATE_PCT, - - /*!\brief Codec control function to set reference and update frame flags. - * - * Supported in codecs: VP8 - */ - VP8E_SET_FRAME_FLAGS, - - /*!\brief Codec control function to set max data rate for Inter frames. - * - * This value controls additional clamping on the maximum size of an - * inter frame. It is expressed as a percentage of the average - * per-frame bitrate, with the special (and default) value 0 meaning - * unlimited, or no additional clamping beyond the codec's built-in - * algorithm. - * - * For example, to allow no more than 4.5 frames worth of bitrate - * to an inter frame, set this to 450. - * - * Supported in codecs: VP9 - */ - VP9E_SET_MAX_INTER_BITRATE_PCT, - - /*!\brief Boost percentage for Golden Frame in CBR mode. - * - * This value controls the amount of boost given to Golden Frame in - * CBR mode. It is expressed as a percentage of the average - * per-frame bitrate, with the special (and default) value 0 meaning - * the feature is off, i.e., no golden frame boost in CBR mode and - * average bitrate target is used. - * - * For example, to allow 100% more bits, i.e, 2X, in a golden frame - * than average frame, set this to 100. - * - * Supported in codecs: VP9 - */ - VP9E_SET_GF_CBR_BOOST_PCT, - - /*!\brief Codec control function to set the temporal layer id. - * - * For temporal scalability: this control allows the application to set the - * layer id for each frame to be encoded. Note that this control must be set - * for every frame prior to encoding. The usage of this control function - * supersedes the internal temporal pattern counter, which is now deprecated. - * - * Supported in codecs: VP8 - */ - VP8E_SET_TEMPORAL_LAYER_ID, - - /*!\brief Codec control function to set encoder screen content mode. - * - * 0: off, 1: On, 2: On with more aggressive rate control. - * - * Supported in codecs: VP8 - */ - VP8E_SET_SCREEN_CONTENT_MODE, - - /*!\brief Codec control function to set lossless encoding mode. - * - * VP9 can operate in lossless encoding mode, in which the bitstream - * produced will be able to decode and reconstruct a perfect copy of - * input source. This control function provides a mean to switch encoder - * into lossless coding mode(1) or normal coding mode(0) that may be lossy. - * 0 = lossy coding mode - * 1 = lossless coding mode - * - * By default, encoder operates in normal coding mode (maybe lossy). - * - * Supported in codecs: VP9 - */ - VP9E_SET_LOSSLESS, - - /*!\brief Codec control function to set number of tile columns. - * - * In encoding and decoding, VP9 allows an input image frame be partitioned - * into separated vertical tile columns, which can be encoded or decoded - * independently. This enables easy implementation of parallel encoding and - * decoding. This control requests the encoder to use column tiles in - * encoding an input frame, with number of tile columns (in Log2 unit) as - * the parameter: - * 0 = 1 tile column - * 1 = 2 tile columns - * 2 = 4 tile columns - * ..... - * n = 2**n tile columns - * The requested tile columns will be capped by the encoder based on image - * size limitations (The minimum width of a tile column is 256 pixels, the - * maximum is 4096). - * - * By default, the value is 6, i.e., the maximum number of tiles supported by - * the resolution. - * - * Supported in codecs: VP9 - */ - VP9E_SET_TILE_COLUMNS, - - /*!\brief Codec control function to set number of tile rows. - * - * In encoding and decoding, VP9 allows an input image frame be partitioned - * into separated horizontal tile rows. Tile rows are encoded or decoded - * sequentially. Even though encoding/decoding of later tile rows depends on - * earlier ones, this allows the encoder to output data packets for tile rows - * prior to completely processing all tile rows in a frame, thereby reducing - * the latency in processing between input and output. The parameter - * for this control describes the number of tile rows, which has a valid - * range [0, 2]: - * 0 = 1 tile row - * 1 = 2 tile rows - * 2 = 4 tile rows - * - * By default, the value is 0, i.e. one single row tile for entire image. - * - * Supported in codecs: VP9 - */ - VP9E_SET_TILE_ROWS, - - /*!\brief Codec control function to enable frame parallel decoding feature. - * - * VP9 has a bitstream feature to reduce decoding dependency between frames - * by turning off backward update of probability context used in encoding - * and decoding. This allows staged parallel processing of more than one - * video frame in the decoder. This control function provides a means to - * turn this feature on or off for bitstreams produced by encoder. - * - * By default, this feature is on. - * - * Supported in codecs: VP9 - */ - VP9E_SET_FRAME_PARALLEL_DECODING, - - /*!\brief Codec control function to set adaptive quantization mode. - * - * VP9 has a segment based feature that allows encoder to adaptively change - * quantization parameter for each segment within a frame to improve the - * subjective quality. This control makes encoder operate in one of the - * several AQ_modes supported. - * - * By default, encoder operates with AQ_Mode 0(adaptive quantization off). - * - * Supported in codecs: VP9 - */ - VP9E_SET_AQ_MODE, - - /*!\brief Codec control function to enable/disable periodic Q boost. - * - * One VP9 encoder speed feature is to enable quality boost by lowering - * frame level Q periodically. This control function provides a mean to - * turn on/off this feature. - * 0 = off - * 1 = on - * - * By default, the encoder is allowed to use this feature for appropriate - * encoding modes. - * - * Supported in codecs: VP9 - */ - VP9E_SET_FRAME_PERIODIC_BOOST, - - /*!\brief Codec control function to set noise sensitivity. - * - * 0: off, 1: On(YOnly), 2: For SVC only, on top two spatial layers(YOnly) - * - * Supported in codecs: VP9 - */ - VP9E_SET_NOISE_SENSITIVITY, - - /*!\brief Codec control function to turn on/off SVC in encoder. - * \note Return value is VPX_CODEC_INVALID_PARAM if the encoder does not - * support SVC in its current encoding mode - * 0: off, 1: on - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC, - - /*!\brief Codec control function to pass an ROI map to encoder. - * - * Supported in codecs: VP9 - */ - VP9E_SET_ROI_MAP, - - /*!\brief Codec control function to set parameters for SVC. - * \note Parameters contain min_q, max_q, scaling factor for each of the - * SVC layers. - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_PARAMETERS, - - /*!\brief Codec control function to set svc layer for spatial and temporal. - * \note Valid ranges: 0..#vpx_codec_enc_cfg::ss_number_layers for spatial - * layer and 0..#vpx_codec_enc_cfg::ts_number_layers for - * temporal layer. - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_LAYER_ID, - - /*!\brief Codec control function to set content type. - * \note Valid parameter range: - * VP9E_CONTENT_DEFAULT = Regular video content (Default) - * VP9E_CONTENT_SCREEN = Screen capture content - * VP9E_CONTENT_FILM = Film content: improves grain retention - * - * Supported in codecs: VP9 - */ - VP9E_SET_TUNE_CONTENT, - - /*!\brief Codec control function to get svc layer ID. - * \note The layer ID returned is for the data packet from the registered - * callback function. - * - * Supported in codecs: VP9 - */ - VP9E_GET_SVC_LAYER_ID, - - /*!\brief Codec control function to register callback to get per layer packet. - * \note Parameter for this control function is a structure with a callback - * function and a pointer to private data used by the callback. - * - * Supported in codecs: VP9 - */ - VP9E_REGISTER_CX_CALLBACK, - - /*!\brief Codec control function to set color space info. - * \note Valid ranges: 0..7, default is "UNKNOWN". - * 0 = UNKNOWN, - * 1 = BT_601 - * 2 = BT_709 - * 3 = SMPTE_170 - * 4 = SMPTE_240 - * 5 = BT_2020 - * 6 = RESERVED - * 7 = SRGB - * - * Supported in codecs: VP9 - */ - VP9E_SET_COLOR_SPACE, - - /*!\brief Codec control function to set temporal layering mode. - * \note Valid ranges: 0..3, default is "0" - * (VP9E_TEMPORAL_LAYERING_MODE_NOLAYERING). - * 0 = VP9E_TEMPORAL_LAYERING_MODE_NOLAYERING - * 1 = VP9E_TEMPORAL_LAYERING_MODE_BYPASS - * 2 = VP9E_TEMPORAL_LAYERING_MODE_0101 - * 3 = VP9E_TEMPORAL_LAYERING_MODE_0212 - * - * Supported in codecs: VP9 - */ - VP9E_SET_TEMPORAL_LAYERING_MODE, - - /*!\brief Codec control function to set minimum interval between GF/ARF frames - * - * By default the value is set as 4. - * - * Supported in codecs: VP9 - */ - VP9E_SET_MIN_GF_INTERVAL, - - /*!\brief Codec control function to set minimum interval between GF/ARF frames - * - * By default the value is set as 16. - * - * Supported in codecs: VP9 - */ - VP9E_SET_MAX_GF_INTERVAL, - - /*!\brief Codec control function to get an Active map back from the encoder. - * - * Supported in codecs: VP9 - */ - VP9E_GET_ACTIVEMAP, - - /*!\brief Codec control function to set color range bit. - * \note Valid ranges: 0..1, default is 0 - * 0 = Limited range (16..235 or HBD equivalent) - * 1 = Full range (0..255 or HBD equivalent) - * - * Supported in codecs: VP9 - */ - VP9E_SET_COLOR_RANGE, - - /*!\brief Codec control function to set the frame flags and buffer indices - * for spatial layers. The frame flags and buffer indices are set using the - * struct #vpx_svc_ref_frame_config defined below. - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_REF_FRAME_CONFIG, - - /*!\brief Codec control function to set intended rendering image size. - * - * By default, this is identical to the image size in pixels. - * - * Supported in codecs: VP9 - */ - VP9E_SET_RENDER_SIZE, - - /*!\brief Codec control function to set target level. - * - * 255: off (default); 0: only keep level stats; 10: target for level 1.0; - * 11: target for level 1.1; ... 62: target for level 6.2 - * - * Supported in codecs: VP9 - */ - VP9E_SET_TARGET_LEVEL, - - /*!\brief Codec control function to set row level multi-threading. - * - * 0 : off, 1 : on - * - * Supported in codecs: VP9 - */ - VP9E_SET_ROW_MT, - - /*!\brief Codec control function to get bitstream level. - * - * Supported in codecs: VP9 - */ - VP9E_GET_LEVEL, - - /*!\brief Codec control function to enable/disable special mode for altref - * adaptive quantization. You can use it with --aq-mode concurrently. - * - * Enable special adaptive quantization for altref frames based on their - * expected prediction quality for the future frames. - * - * Supported in codecs: VP9 - */ - VP9E_SET_ALT_REF_AQ, - - /*!\brief Boost percentage for Golden Frame in CBR mode. - * - * This value controls the amount of boost given to Golden Frame in - * CBR mode. It is expressed as a percentage of the average - * per-frame bitrate, with the special (and default) value 0 meaning - * the feature is off, i.e., no golden frame boost in CBR mode and - * average bitrate target is used. - * - * For example, to allow 100% more bits, i.e, 2X, in a golden frame - * than average frame, set this to 100. - * - * Supported in codecs: VP8 - */ - VP8E_SET_GF_CBR_BOOST_PCT, - - /*!\brief Codec control function to enable the extreme motion vector unit test - * in VP9. Please note that this is only used in motion vector unit test. - * - * 0 : off, 1 : MAX_EXTREME_MV, 2 : MIN_EXTREME_MV - * - * Supported in codecs: VP9 - */ - VP9E_ENABLE_MOTION_VECTOR_UNIT_TEST, - - /*!\brief Codec control function to constrain the inter-layer prediction - * (prediction of lower spatial resolution) in VP9 SVC. - * - * 0 : inter-layer prediction on, 1 : off, 2 : off only on non-key frames - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_INTER_LAYER_PRED, - - /*!\brief Codec control function to set mode and thresholds for frame - * dropping in SVC. Drop frame thresholds are set per-layer. Mode is set as: - * 0 : layer-dependent dropping, 1 : constrained dropping, current layer drop - * forces drop on all upper layers. Default mode is 0. - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_FRAME_DROP_LAYER, - - /*!\brief Codec control function to get the refresh and reference flags and - * the buffer indices, up to the last encoded spatial layer. - * - * Supported in codecs: VP9 - */ - VP9E_GET_SVC_REF_FRAME_CONFIG, - - /*!\brief Codec control function to enable/disable use of golden reference as - * a second temporal reference for SVC. Only used when inter-layer prediction - * is disabled on INTER frames. - * - * 0: Off, 1: Enabled (default) - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_GF_TEMPORAL_REF, - - /*!\brief Codec control function to enable spatial layer sync frame, for any - * spatial layer. Enabling it for layer k means spatial layer k will disable - * all temporal prediction, but keep the inter-layer prediction. It will - * refresh any temporal reference buffer for that layer, and reset the - * temporal layer for the superframe to 0. Setting the layer sync for base - * spatial layer forces a key frame. Default is off (0) for all spatial - * layers. Spatial layer sync flag is reset to 0 after each encoded layer, - * so when control is invoked it is only used for the current superframe. - * - * 0: Off (default), 1: Enabled - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_SPATIAL_LAYER_SYNC, - - /*!\brief Codec control function to enable temporal dependency model. - * - * Vp9 allows the encoder to run temporal dependency model and use it to - * improve the compression performance. To enable, set this parameter to be - * 1. The default value is set to be 1. - */ - VP9E_SET_TPL, - - /*!\brief Codec control function to enable postencode frame drop. - * - * This will allow encoder to drop frame after it's encoded. - * - * 0: Off (default), 1: Enabled - * - * Supported in codecs: VP9 - */ - VP9E_SET_POSTENCODE_DROP, -}; - -/*!\brief vpx 1-D scaling mode - * - * This set of constants define 1-D vpx scaling modes - */ -typedef enum vpx_scaling_mode_1d { - VP8E_NORMAL = 0, - VP8E_FOURFIVE = 1, - VP8E_THREEFIVE = 2, - VP8E_ONETWO = 3 -} VPX_SCALING_MODE; - -/*!\brief Temporal layering mode enum for VP9 SVC. - * - * This set of macros define the different temporal layering modes. - * Supported codecs: VP9 (in SVC mode) - * - */ -typedef enum vp9e_temporal_layering_mode { - /*!\brief No temporal layering. - * Used when only spatial layering is used. - */ - VP9E_TEMPORAL_LAYERING_MODE_NOLAYERING = 0, - - /*!\brief Bypass mode. - * Used when application needs to control temporal layering. - * This will only work when the number of spatial layers equals 1. - */ - VP9E_TEMPORAL_LAYERING_MODE_BYPASS = 1, - - /*!\brief 0-1-0-1... temporal layering scheme with two temporal layers. - */ - VP9E_TEMPORAL_LAYERING_MODE_0101 = 2, - - /*!\brief 0-2-1-2... temporal layering scheme with three temporal layers. - */ - VP9E_TEMPORAL_LAYERING_MODE_0212 = 3 -} VP9E_TEMPORAL_LAYERING_MODE; - -/*!\brief vpx region of interest map - * - * These defines the data structures for the region of interest map - * - */ - -typedef struct vpx_roi_map { - /*! If ROI is enabled. */ - uint8_t enabled; - /*! An id between 0-3 (0-7 for vp9) for each 16x16 (8x8 for VP9) - * region within a frame. */ - unsigned char *roi_map; - unsigned int rows; /**< Number of rows. */ - unsigned int cols; /**< Number of columns. */ - /*! VP8 only uses the first 4 segments. VP9 uses 8 segments. */ - int delta_q[8]; /**< Quantizer deltas. */ - int delta_lf[8]; /**< Loop filter deltas. */ - /*! skip and ref frame segment is only used in VP9. */ - int skip[8]; /**< Skip this block. */ - int ref_frame[8]; /**< Reference frame for this block. */ - /*! Static breakout threshold for each segment. Only used in VP8. */ - unsigned int static_threshold[4]; -} vpx_roi_map_t; - -/*!\brief vpx active region map - * - * These defines the data structures for active region map - * - */ - -typedef struct vpx_active_map { - /*!\brief specify an on (1) or off (0) each 16x16 region within a frame */ - unsigned char *active_map; - unsigned int rows; /**< number of rows */ - unsigned int cols; /**< number of cols */ -} vpx_active_map_t; - -/*!\brief vpx image scaling mode - * - * This defines the data structure for image scaling mode - * - */ -typedef struct vpx_scaling_mode { - VPX_SCALING_MODE h_scaling_mode; /**< horizontal scaling mode */ - VPX_SCALING_MODE v_scaling_mode; /**< vertical scaling mode */ -} vpx_scaling_mode_t; - -/*!\brief VP8 token partition mode - * - * This defines VP8 partitioning mode for compressed data, i.e., the number of - * sub-streams in the bitstream. Used for parallelized decoding. - * - */ - -typedef enum { - VP8_ONE_TOKENPARTITION = 0, - VP8_TWO_TOKENPARTITION = 1, - VP8_FOUR_TOKENPARTITION = 2, - VP8_EIGHT_TOKENPARTITION = 3 -} vp8e_token_partitions; - -/*!brief VP9 encoder content type */ -typedef enum { - VP9E_CONTENT_DEFAULT, - VP9E_CONTENT_SCREEN, - VP9E_CONTENT_FILM, - VP9E_CONTENT_INVALID -} vp9e_tune_content; - -/*!\brief VP8 model tuning parameters - * - * Changes the encoder to tune for certain types of input material. - * - */ -typedef enum { VP8_TUNE_PSNR, VP8_TUNE_SSIM } vp8e_tuning; - -/*!\brief vp9 svc layer parameters - * - * This defines the spatial and temporal layer id numbers for svc encoding. - * This is used with the #VP9E_SET_SVC_LAYER_ID control to set the spatial and - * temporal layer id for the current frame. - * - */ -typedef struct vpx_svc_layer_id { - int spatial_layer_id; /**< First spatial layer to start encoding. */ - // TODO(jianj): Deprecated, to be removed. - int temporal_layer_id; /**< Temporal layer id number. */ - int temporal_layer_id_per_spatial[VPX_SS_MAX_LAYERS]; /**< Temp layer id. */ -} vpx_svc_layer_id_t; - -/*!\brief vp9 svc frame flag parameters. - * - * This defines the frame flags and buffer indices for each spatial layer for - * svc encoding. - * This is used with the #VP9E_SET_SVC_REF_FRAME_CONFIG control to set frame - * flags and buffer indices for each spatial layer for the current (super)frame. - * - */ -typedef struct vpx_svc_ref_frame_config { - int lst_fb_idx[VPX_SS_MAX_LAYERS]; /**< Last buffer index. */ - int gld_fb_idx[VPX_SS_MAX_LAYERS]; /**< Golden buffer index. */ - int alt_fb_idx[VPX_SS_MAX_LAYERS]; /**< Altref buffer index. */ - int update_buffer_slot[VPX_SS_MAX_LAYERS]; /**< Update reference frames. */ - // TODO(jianj): Remove update_last/golden/alt_ref, these are deprecated. - int update_last[VPX_SS_MAX_LAYERS]; /**< Update last. */ - int update_golden[VPX_SS_MAX_LAYERS]; /**< Update golden. */ - int update_alt_ref[VPX_SS_MAX_LAYERS]; /**< Update altref. */ - int reference_last[VPX_SS_MAX_LAYERS]; /**< Last as reference. */ - int reference_golden[VPX_SS_MAX_LAYERS]; /**< Golden as reference. */ - int reference_alt_ref[VPX_SS_MAX_LAYERS]; /**< Altref as reference. */ - int64_t duration[VPX_SS_MAX_LAYERS]; /**< Duration per spatial layer. */ -} vpx_svc_ref_frame_config_t; - -/*!\brief VP9 svc frame dropping mode. - * - * This defines the frame drop mode for SVC. - * - */ -typedef enum { - CONSTRAINED_LAYER_DROP, - /**< Upper layers are constrained to drop if current layer drops. */ - LAYER_DROP, /**< Any spatial layer can drop. */ - FULL_SUPERFRAME_DROP, /**< Only full superframe can drop. */ -} SVC_LAYER_DROP_MODE; - -/*!\brief vp9 svc frame dropping parameters. - * - * This defines the frame drop thresholds for each spatial layer, and - * the frame dropping mode: 0 = layer based frame dropping (default), - * 1 = constrained dropping where current layer drop forces all upper - * spatial layers to drop. - */ -typedef struct vpx_svc_frame_drop { - int framedrop_thresh[VPX_SS_MAX_LAYERS]; /**< Frame drop thresholds */ - SVC_LAYER_DROP_MODE - framedrop_mode; /**< Layer-based or constrained dropping. */ - int max_consec_drop; /**< Maximum consecutive drops, for any layer. */ -} vpx_svc_frame_drop_t; - -/*!\brief vp9 svc spatial layer sync parameters. - * - * This defines the spatial layer sync flag, defined per spatial layer. - * - */ -typedef struct vpx_svc_spatial_layer_sync { - int spatial_layer_sync[VPX_SS_MAX_LAYERS]; /**< Sync layer flags */ - int base_layer_intra_only; /**< Flag for setting Intra-only frame on base */ -} vpx_svc_spatial_layer_sync_t; - -/*!\cond */ -/*!\brief VP8 encoder control function parameter type - * - * Defines the data types that VP8E control functions take. Note that - * additional common controls are defined in vp8.h - * - */ - -VPX_CTRL_USE_TYPE(VP8E_SET_FRAME_FLAGS, int) -#define VPX_CTRL_VP8E_SET_FRAME_FLAGS -VPX_CTRL_USE_TYPE(VP8E_SET_TEMPORAL_LAYER_ID, int) -#define VPX_CTRL_VP8E_SET_TEMPORAL_LAYER_ID -VPX_CTRL_USE_TYPE(VP8E_SET_ROI_MAP, vpx_roi_map_t *) -#define VPX_CTRL_VP8E_SET_ROI_MAP -VPX_CTRL_USE_TYPE(VP9E_SET_ROI_MAP, vpx_roi_map_t *) -#define VPX_CTRL_VP9E_SET_ROI_MAP -VPX_CTRL_USE_TYPE(VP8E_SET_ACTIVEMAP, vpx_active_map_t *) -#define VPX_CTRL_VP8E_SET_ACTIVEMAP -VPX_CTRL_USE_TYPE(VP8E_SET_SCALEMODE, vpx_scaling_mode_t *) -#define VPX_CTRL_VP8E_SET_SCALEMODE - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC, int) -#define VPX_CTRL_VP9E_SET_SVC -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_PARAMETERS, void *) -#define VPX_CTRL_VP9E_SET_SVC_PARAMETERS -VPX_CTRL_USE_TYPE(VP9E_REGISTER_CX_CALLBACK, void *) -#define VPX_CTRL_VP9E_REGISTER_CX_CALLBACK -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_LAYER_ID, vpx_svc_layer_id_t *) -#define VPX_CTRL_VP9E_SET_SVC_LAYER_ID - -VPX_CTRL_USE_TYPE(VP8E_SET_CPUUSED, int) -#define VPX_CTRL_VP8E_SET_CPUUSED -VPX_CTRL_USE_TYPE(VP8E_SET_ENABLEAUTOALTREF, unsigned int) -#define VPX_CTRL_VP8E_SET_ENABLEAUTOALTREF -VPX_CTRL_USE_TYPE(VP8E_SET_NOISE_SENSITIVITY, unsigned int) -#define VPX_CTRL_VP8E_SET_NOISE_SENSITIVITY -VPX_CTRL_USE_TYPE(VP8E_SET_SHARPNESS, unsigned int) -#define VPX_CTRL_VP8E_SET_SHARPNESS -VPX_CTRL_USE_TYPE(VP8E_SET_STATIC_THRESHOLD, unsigned int) -#define VPX_CTRL_VP8E_SET_STATIC_THRESHOLD -VPX_CTRL_USE_TYPE(VP8E_SET_TOKEN_PARTITIONS, int) /* vp8e_token_partitions */ -#define VPX_CTRL_VP8E_SET_TOKEN_PARTITIONS - -VPX_CTRL_USE_TYPE(VP8E_SET_ARNR_MAXFRAMES, unsigned int) -#define VPX_CTRL_VP8E_SET_ARNR_MAXFRAMES -VPX_CTRL_USE_TYPE(VP8E_SET_ARNR_STRENGTH, unsigned int) -#define VPX_CTRL_VP8E_SET_ARNR_STRENGTH -VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_SET_ARNR_TYPE, unsigned int) -#define VPX_CTRL_VP8E_SET_ARNR_TYPE -VPX_CTRL_USE_TYPE(VP8E_SET_TUNING, int) /* vp8e_tuning */ -#define VPX_CTRL_VP8E_SET_TUNING -VPX_CTRL_USE_TYPE(VP8E_SET_CQ_LEVEL, unsigned int) -#define VPX_CTRL_VP8E_SET_CQ_LEVEL - -VPX_CTRL_USE_TYPE(VP9E_SET_TILE_COLUMNS, int) -#define VPX_CTRL_VP9E_SET_TILE_COLUMNS -VPX_CTRL_USE_TYPE(VP9E_SET_TILE_ROWS, int) -#define VPX_CTRL_VP9E_SET_TILE_ROWS - -VPX_CTRL_USE_TYPE(VP9E_SET_TPL, int) -#define VPX_CTRL_VP9E_SET_TPL - -VPX_CTRL_USE_TYPE(VP8E_GET_LAST_QUANTIZER, int *) -#define VPX_CTRL_VP8E_GET_LAST_QUANTIZER -VPX_CTRL_USE_TYPE(VP8E_GET_LAST_QUANTIZER_64, int *) -#define VPX_CTRL_VP8E_GET_LAST_QUANTIZER_64 -VPX_CTRL_USE_TYPE(VP9E_GET_SVC_LAYER_ID, vpx_svc_layer_id_t *) -#define VPX_CTRL_VP9E_GET_SVC_LAYER_ID - -VPX_CTRL_USE_TYPE(VP8E_SET_MAX_INTRA_BITRATE_PCT, unsigned int) -#define VPX_CTRL_VP8E_SET_MAX_INTRA_BITRATE_PCT -VPX_CTRL_USE_TYPE(VP8E_SET_MAX_INTER_BITRATE_PCT, unsigned int) -#define VPX_CTRL_VP8E_SET_MAX_INTER_BITRATE_PCT - -VPX_CTRL_USE_TYPE(VP8E_SET_GF_CBR_BOOST_PCT, unsigned int) -#define VPX_CTRL_VP8E_SET_GF_CBR_BOOST_PCT - -VPX_CTRL_USE_TYPE(VP8E_SET_SCREEN_CONTENT_MODE, unsigned int) -#define VPX_CTRL_VP8E_SET_SCREEN_CONTENT_MODE - -VPX_CTRL_USE_TYPE(VP9E_SET_GF_CBR_BOOST_PCT, unsigned int) -#define VPX_CTRL_VP9E_SET_GF_CBR_BOOST_PCT - -VPX_CTRL_USE_TYPE(VP9E_SET_LOSSLESS, unsigned int) -#define VPX_CTRL_VP9E_SET_LOSSLESS - -VPX_CTRL_USE_TYPE(VP9E_SET_FRAME_PARALLEL_DECODING, unsigned int) -#define VPX_CTRL_VP9E_SET_FRAME_PARALLEL_DECODING - -VPX_CTRL_USE_TYPE(VP9E_SET_AQ_MODE, unsigned int) -#define VPX_CTRL_VP9E_SET_AQ_MODE - -VPX_CTRL_USE_TYPE(VP9E_SET_ALT_REF_AQ, int) -#define VPX_CTRL_VP9E_SET_ALT_REF_AQ - -VPX_CTRL_USE_TYPE(VP9E_SET_FRAME_PERIODIC_BOOST, unsigned int) -#define VPX_CTRL_VP9E_SET_FRAME_PERIODIC_BOOST - -VPX_CTRL_USE_TYPE(VP9E_SET_NOISE_SENSITIVITY, unsigned int) -#define VPX_CTRL_VP9E_SET_NOISE_SENSITIVITY - -VPX_CTRL_USE_TYPE(VP9E_SET_TUNE_CONTENT, int) /* vp9e_tune_content */ -#define VPX_CTRL_VP9E_SET_TUNE_CONTENT - -VPX_CTRL_USE_TYPE(VP9E_SET_COLOR_SPACE, int) -#define VPX_CTRL_VP9E_SET_COLOR_SPACE - -VPX_CTRL_USE_TYPE(VP9E_SET_MIN_GF_INTERVAL, unsigned int) -#define VPX_CTRL_VP9E_SET_MIN_GF_INTERVAL - -VPX_CTRL_USE_TYPE(VP9E_SET_MAX_GF_INTERVAL, unsigned int) -#define VPX_CTRL_VP9E_SET_MAX_GF_INTERVAL - -VPX_CTRL_USE_TYPE(VP9E_GET_ACTIVEMAP, vpx_active_map_t *) -#define VPX_CTRL_VP9E_GET_ACTIVEMAP - -VPX_CTRL_USE_TYPE(VP9E_SET_COLOR_RANGE, int) -#define VPX_CTRL_VP9E_SET_COLOR_RANGE - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_REF_FRAME_CONFIG, vpx_svc_ref_frame_config_t *) -#define VPX_CTRL_VP9E_SET_SVC_REF_FRAME_CONFIG - -VPX_CTRL_USE_TYPE(VP9E_SET_RENDER_SIZE, int *) -#define VPX_CTRL_VP9E_SET_RENDER_SIZE - -VPX_CTRL_USE_TYPE(VP9E_SET_TARGET_LEVEL, unsigned int) -#define VPX_CTRL_VP9E_SET_TARGET_LEVEL - -VPX_CTRL_USE_TYPE(VP9E_SET_ROW_MT, unsigned int) -#define VPX_CTRL_VP9E_SET_ROW_MT - -VPX_CTRL_USE_TYPE(VP9E_GET_LEVEL, int *) -#define VPX_CTRL_VP9E_GET_LEVEL - -VPX_CTRL_USE_TYPE(VP9E_ENABLE_MOTION_VECTOR_UNIT_TEST, unsigned int) -#define VPX_CTRL_VP9E_ENABLE_MOTION_VECTOR_UNIT_TEST - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_INTER_LAYER_PRED, unsigned int) -#define VPX_CTRL_VP9E_SET_SVC_INTER_LAYER_PRED - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_FRAME_DROP_LAYER, vpx_svc_frame_drop_t *) -#define VPX_CTRL_VP9E_SET_SVC_FRAME_DROP_LAYER - -VPX_CTRL_USE_TYPE(VP9E_GET_SVC_REF_FRAME_CONFIG, vpx_svc_ref_frame_config_t *) -#define VPX_CTRL_VP9E_GET_SVC_REF_FRAME_CONFIG - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_GF_TEMPORAL_REF, unsigned int) -#define VPX_CTRL_VP9E_SET_SVC_GF_TEMPORAL_REF - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_SPATIAL_LAYER_SYNC, - vpx_svc_spatial_layer_sync_t *) -#define VPX_CTRL_VP9E_SET_SVC_SPATIAL_LAYER_SYNC - -VPX_CTRL_USE_TYPE(VP9E_SET_POSTENCODE_DROP, unsigned int) -#define VPX_CTRL_VP9E_SET_POSTENCODE_DROP - -/*!\endcond */ -/*! @} - end defgroup vp8_encoder */ -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // VPX_VPX_VP8CX_H_ diff --git a/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vp8dx.h b/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vp8dx.h deleted file mode 100644 index af92f21a..00000000 --- a/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vp8dx.h +++ /dev/null @@ -1,210 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -/*!\defgroup vp8_decoder WebM VP8/VP9 Decoder - * \ingroup vp8 - * - * @{ - */ -/*!\file - * \brief Provides definitions for using VP8 or VP9 within the vpx Decoder - * interface. - */ -#ifndef VPX_VPX_VP8DX_H_ -#define VPX_VPX_VP8DX_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Include controls common to both the encoder and decoder */ -#include "./vp8.h" - -/*!\name Algorithm interface for VP8 - * - * This interface provides the capability to decode VP8 streams. - * @{ - */ -extern vpx_codec_iface_t vpx_codec_vp8_dx_algo; -extern vpx_codec_iface_t *vpx_codec_vp8_dx(void); -/*!@} - end algorithm interface member group*/ - -/*!\name Algorithm interface for VP9 - * - * This interface provides the capability to decode VP9 streams. - * @{ - */ -extern vpx_codec_iface_t vpx_codec_vp9_dx_algo; -extern vpx_codec_iface_t *vpx_codec_vp9_dx(void); -/*!@} - end algorithm interface member group*/ - -/*!\enum vp8_dec_control_id - * \brief VP8 decoder control functions - * - * This set of macros define the control functions available for the VP8 - * decoder interface. - * - * \sa #vpx_codec_control - */ -enum vp8_dec_control_id { - /** control function to get info on which reference frames were updated - * by the last decode - */ - VP8D_GET_LAST_REF_UPDATES = VP8_DECODER_CTRL_ID_START, - - /** check if the indicated frame is corrupted */ - VP8D_GET_FRAME_CORRUPTED, - - /** control function to get info on which reference frames were used - * by the last decode - */ - VP8D_GET_LAST_REF_USED, - - /** decryption function to decrypt encoded buffer data immediately - * before decoding. Takes a vpx_decrypt_init, which contains - * a callback function and opaque context pointer. - */ - VPXD_SET_DECRYPTOR, - VP8D_SET_DECRYPTOR = VPXD_SET_DECRYPTOR, - - /** control function to get the dimensions that the current frame is decoded - * at. This may be different to the intended display size for the frame as - * specified in the wrapper or frame header (see VP9D_GET_DISPLAY_SIZE). */ - VP9D_GET_FRAME_SIZE, - - /** control function to get the current frame's intended display dimensions - * (as specified in the wrapper or frame header). This may be different to - * the decoded dimensions of this frame (see VP9D_GET_FRAME_SIZE). */ - VP9D_GET_DISPLAY_SIZE, - - /** control function to get the bit depth of the stream. */ - VP9D_GET_BIT_DEPTH, - - /** control function to set the byte alignment of the planes in the reference - * buffers. Valid values are power of 2, from 32 to 1024. A value of 0 sets - * legacy alignment. I.e. Y plane is aligned to 32 bytes, U plane directly - * follows Y plane, and V plane directly follows U plane. Default value is 0. - */ - VP9_SET_BYTE_ALIGNMENT, - - /** control function to invert the decoding order to from right to left. The - * function is used in a test to confirm the decoding independence of tile - * columns. The function may be used in application where this order - * of decoding is desired. - * - * TODO(yaowu): Rework the unit test that uses this control, and in a future - * release, this test-only control shall be removed. - */ - VP9_INVERT_TILE_DECODE_ORDER, - - /** control function to set the skip loop filter flag. Valid values are - * integers. The decoder will skip the loop filter when its value is set to - * nonzero. If the loop filter is skipped the decoder may accumulate decode - * artifacts. The default value is 0. - */ - VP9_SET_SKIP_LOOP_FILTER, - - /** control function to decode SVC stream up to the x spatial layers, - * where x is passed in through the control, and is 0 for base layer. - */ - VP9_DECODE_SVC_SPATIAL_LAYER, - - /*!\brief Codec control function to get last decoded frame quantizer. - * - * Return value uses internal quantizer scale defined by the codec. - * - * Supported in codecs: VP8, VP9 - */ - VPXD_GET_LAST_QUANTIZER, - - /*!\brief Codec control function to set row level multi-threading. - * - * 0 : off, 1 : on - * - * Supported in codecs: VP9 - */ - VP9D_SET_ROW_MT, - - /*!\brief Codec control function to set loopfilter optimization. - * - * 0 : off, Loop filter is done after all tiles have been decoded - * 1 : on, Loop filter is done immediately after decode without - * waiting for all threads to sync. - * - * Supported in codecs: VP9 - */ - VP9D_SET_LOOP_FILTER_OPT, - - VP8_DECODER_CTRL_ID_MAX -}; - -/** Decrypt n bytes of data from input -> output, using the decrypt_state - * passed in VPXD_SET_DECRYPTOR. - */ -typedef void (*vpx_decrypt_cb)(void *decrypt_state, const unsigned char *input, - unsigned char *output, int count); - -/*!\brief Structure to hold decryption state - * - * Defines a structure to hold the decryption state and access function. - */ -typedef struct vpx_decrypt_init { - /*! Decrypt callback. */ - vpx_decrypt_cb decrypt_cb; - - /*! Decryption state. */ - void *decrypt_state; -} vpx_decrypt_init; - -/*!\cond */ -/*!\brief VP8 decoder control function parameter type - * - * Defines the data types that VP8D control functions take. Note that - * additional common controls are defined in vp8.h - * - */ - -VPX_CTRL_USE_TYPE(VP8D_GET_LAST_REF_UPDATES, int *) -#define VPX_CTRL_VP8D_GET_LAST_REF_UPDATES -VPX_CTRL_USE_TYPE(VP8D_GET_FRAME_CORRUPTED, int *) -#define VPX_CTRL_VP8D_GET_FRAME_CORRUPTED -VPX_CTRL_USE_TYPE(VP8D_GET_LAST_REF_USED, int *) -#define VPX_CTRL_VP8D_GET_LAST_REF_USED -VPX_CTRL_USE_TYPE(VPXD_GET_LAST_QUANTIZER, int *) -#define VPX_CTRL_VPXD_GET_LAST_QUANTIZER -VPX_CTRL_USE_TYPE(VPXD_SET_DECRYPTOR, vpx_decrypt_init *) -#define VPX_CTRL_VPXD_SET_DECRYPTOR -VPX_CTRL_USE_TYPE(VP8D_SET_DECRYPTOR, vpx_decrypt_init *) -#define VPX_CTRL_VP8D_SET_DECRYPTOR -VPX_CTRL_USE_TYPE(VP9D_GET_DISPLAY_SIZE, int *) -#define VPX_CTRL_VP9D_GET_DISPLAY_SIZE -VPX_CTRL_USE_TYPE(VP9D_GET_BIT_DEPTH, unsigned int *) -#define VPX_CTRL_VP9D_GET_BIT_DEPTH -VPX_CTRL_USE_TYPE(VP9D_GET_FRAME_SIZE, int *) -#define VPX_CTRL_VP9D_GET_FRAME_SIZE -VPX_CTRL_USE_TYPE(VP9_INVERT_TILE_DECODE_ORDER, int) -#define VPX_CTRL_VP9_INVERT_TILE_DECODE_ORDER -#define VPX_CTRL_VP9_DECODE_SVC_SPATIAL_LAYER -VPX_CTRL_USE_TYPE(VP9_DECODE_SVC_SPATIAL_LAYER, int) -#define VPX_CTRL_VP9_SET_SKIP_LOOP_FILTER -VPX_CTRL_USE_TYPE(VP9_SET_SKIP_LOOP_FILTER, int) -#define VPX_CTRL_VP9_DECODE_SET_ROW_MT -VPX_CTRL_USE_TYPE(VP9D_SET_ROW_MT, int) -#define VPX_CTRL_VP9_SET_LOOP_FILTER_OPT -VPX_CTRL_USE_TYPE(VP9D_SET_LOOP_FILTER_OPT, int) - -/*!\endcond */ -/*! @} - end defgroup vp8_decoder */ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // VPX_VPX_VP8DX_H_ diff --git a/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vpx_codec.h b/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vpx_codec.h deleted file mode 100644 index 0f8d7851..00000000 --- a/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vpx_codec.h +++ /dev/null @@ -1,468 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -/*!\defgroup codec Common Algorithm Interface - * This abstraction allows applications to easily support multiple video - * formats with minimal code duplication. This section describes the interface - * common to all codecs (both encoders and decoders). - * @{ - */ - -/*!\file - * \brief Describes the codec algorithm interface to applications. - * - * This file describes the interface between an application and a - * video codec algorithm. - * - * An application instantiates a specific codec instance by using - * vpx_codec_init() and a pointer to the algorithm's interface structure: - *
- *     my_app.c:
- *       extern vpx_codec_iface_t my_codec;
- *       {
- *           vpx_codec_ctx_t algo;
- *           res = vpx_codec_init(&algo, &my_codec);
- *       }
- *     
- * - * Once initialized, the instance is manged using other functions from - * the vpx_codec_* family. - */ -#ifndef VPX_VPX_VPX_CODEC_H_ -#define VPX_VPX_VPX_CODEC_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "./vpx_image.h" -#include "./vpx_integer.h" - -/*!\brief Decorator indicating a function is deprecated */ -#ifndef VPX_DEPRECATED -#if defined(__GNUC__) && __GNUC__ -#define VPX_DEPRECATED __attribute__((deprecated)) -#elif defined(_MSC_VER) -#define VPX_DEPRECATED -#else -#define VPX_DEPRECATED -#endif -#endif /* VPX_DEPRECATED */ - -#ifndef VPX_DECLSPEC_DEPRECATED -#if defined(__GNUC__) && __GNUC__ -#define VPX_DECLSPEC_DEPRECATED /**< \copydoc #VPX_DEPRECATED */ -#elif defined(_MSC_VER) -/*!\brief \copydoc #VPX_DEPRECATED */ -#define VPX_DECLSPEC_DEPRECATED __declspec(deprecated) -#else -#define VPX_DECLSPEC_DEPRECATED /**< \copydoc #VPX_DEPRECATED */ -#endif -#endif /* VPX_DECLSPEC_DEPRECATED */ - -/*!\brief Decorator indicating a function is potentially unused */ -#ifndef VPX_UNUSED -#if defined(__GNUC__) || defined(__clang__) -#define VPX_UNUSED __attribute__((unused)) -#else -#define VPX_UNUSED -#endif -#endif /* VPX_UNUSED */ - -/*!\brief Current ABI version number - * - * \internal - * If this file is altered in any way that changes the ABI, this value - * must be bumped. Examples include, but are not limited to, changing - * types, removing or reassigning enums, adding/removing/rearranging - * fields to structures - */ -#define VPX_CODEC_ABI_VERSION (4 + VPX_IMAGE_ABI_VERSION) /**<\hideinitializer*/ - -/*!\brief Algorithm return codes */ -typedef enum { - /*!\brief Operation completed without error */ - VPX_CODEC_OK, - - /*!\brief Unspecified error */ - VPX_CODEC_ERROR, - - /*!\brief Memory operation failed */ - VPX_CODEC_MEM_ERROR, - - /*!\brief ABI version mismatch */ - VPX_CODEC_ABI_MISMATCH, - - /*!\brief Algorithm does not have required capability */ - VPX_CODEC_INCAPABLE, - - /*!\brief The given bitstream is not supported. - * - * The bitstream was unable to be parsed at the highest level. The decoder - * is unable to proceed. This error \ref SHOULD be treated as fatal to the - * stream. */ - VPX_CODEC_UNSUP_BITSTREAM, - - /*!\brief Encoded bitstream uses an unsupported feature - * - * The decoder does not implement a feature required by the encoder. This - * return code should only be used for features that prevent future - * pictures from being properly decoded. This error \ref MAY be treated as - * fatal to the stream or \ref MAY be treated as fatal to the current GOP. - */ - VPX_CODEC_UNSUP_FEATURE, - - /*!\brief The coded data for this stream is corrupt or incomplete - * - * There was a problem decoding the current frame. This return code - * should only be used for failures that prevent future pictures from - * being properly decoded. This error \ref MAY be treated as fatal to the - * stream or \ref MAY be treated as fatal to the current GOP. If decoding - * is continued for the current GOP, artifacts may be present. - */ - VPX_CODEC_CORRUPT_FRAME, - - /*!\brief An application-supplied parameter is not valid. - * - */ - VPX_CODEC_INVALID_PARAM, - - /*!\brief An iterator reached the end of list. - * - */ - VPX_CODEC_LIST_END - -} vpx_codec_err_t; - -/*! \brief Codec capabilities bitfield - * - * Each codec advertises the capabilities it supports as part of its - * ::vpx_codec_iface_t interface structure. Capabilities are extra interfaces - * or functionality, and are not required to be supported. - * - * The available flags are specified by VPX_CODEC_CAP_* defines. - */ -typedef long vpx_codec_caps_t; -#define VPX_CODEC_CAP_DECODER 0x1 /**< Is a decoder */ -#define VPX_CODEC_CAP_ENCODER 0x2 /**< Is an encoder */ - -/*! Can support images at greater than 8 bitdepth. - */ -#define VPX_CODEC_CAP_HIGHBITDEPTH 0x4 - -/*! \brief Initialization-time Feature Enabling - * - * Certain codec features must be known at initialization time, to allow for - * proper memory allocation. - * - * The available flags are specified by VPX_CODEC_USE_* defines. - */ -typedef long vpx_codec_flags_t; - -/*!\brief Codec interface structure. - * - * Contains function pointers and other data private to the codec - * implementation. This structure is opaque to the application. - */ -typedef const struct vpx_codec_iface vpx_codec_iface_t; - -/*!\brief Codec private data structure. - * - * Contains data private to the codec implementation. This structure is opaque - * to the application. - */ -typedef struct vpx_codec_priv vpx_codec_priv_t; - -/*!\brief Iterator - * - * Opaque storage used for iterating over lists. - */ -typedef const void *vpx_codec_iter_t; - -/*!\brief Codec context structure - * - * All codecs \ref MUST support this context structure fully. In general, - * this data should be considered private to the codec algorithm, and - * not be manipulated or examined by the calling application. Applications - * may reference the 'name' member to get a printable description of the - * algorithm. - */ -typedef struct vpx_codec_ctx { - const char *name; /**< Printable interface name */ - vpx_codec_iface_t *iface; /**< Interface pointers */ - vpx_codec_err_t err; /**< Last returned error */ - const char *err_detail; /**< Detailed info, if available */ - vpx_codec_flags_t init_flags; /**< Flags passed at init time */ - union { - /**< Decoder Configuration Pointer */ - const struct vpx_codec_dec_cfg *dec; - /**< Encoder Configuration Pointer */ - const struct vpx_codec_enc_cfg *enc; - const void *raw; - } config; /**< Configuration pointer aliasing union */ - vpx_codec_priv_t *priv; /**< Algorithm private storage */ -} vpx_codec_ctx_t; - -/*!\brief Bit depth for codec - * * - * This enumeration determines the bit depth of the codec. - */ -typedef enum vpx_bit_depth { - VPX_BITS_8 = 8, /**< 8 bits */ - VPX_BITS_10 = 10, /**< 10 bits */ - VPX_BITS_12 = 12, /**< 12 bits */ -} vpx_bit_depth_t; - -/* - * Library Version Number Interface - * - * For example, see the following sample return values: - * vpx_codec_version() (1<<16 | 2<<8 | 3) - * vpx_codec_version_str() "v1.2.3-rc1-16-gec6a1ba" - * vpx_codec_version_extra_str() "rc1-16-gec6a1ba" - */ - -/*!\brief Return the version information (as an integer) - * - * Returns a packed encoding of the library version number. This will only - * include - * the major.minor.patch component of the version number. Note that this encoded - * value should be accessed through the macros provided, as the encoding may - * change - * in the future. - * - */ -int vpx_codec_version(void); -#define VPX_VERSION_MAJOR(v) \ - ((v >> 16) & 0xff) /**< extract major from packed version */ -#define VPX_VERSION_MINOR(v) \ - ((v >> 8) & 0xff) /**< extract minor from packed version */ -#define VPX_VERSION_PATCH(v) \ - ((v >> 0) & 0xff) /**< extract patch from packed version */ - -/*!\brief Return the version major number */ -#define vpx_codec_version_major() ((vpx_codec_version() >> 16) & 0xff) - -/*!\brief Return the version minor number */ -#define vpx_codec_version_minor() ((vpx_codec_version() >> 8) & 0xff) - -/*!\brief Return the version patch number */ -#define vpx_codec_version_patch() ((vpx_codec_version() >> 0) & 0xff) - -/*!\brief Return the version information (as a string) - * - * Returns a printable string containing the full library version number. This - * may - * contain additional text following the three digit version number, as to - * indicate - * release candidates, prerelease versions, etc. - * - */ -const char *vpx_codec_version_str(void); - -/*!\brief Return the version information (as a string) - * - * Returns a printable "extra string". This is the component of the string - * returned - * by vpx_codec_version_str() following the three digit version number. - * - */ -const char *vpx_codec_version_extra_str(void); - -/*!\brief Return the build configuration - * - * Returns a printable string containing an encoded version of the build - * configuration. This may be useful to vpx support. - * - */ -const char *vpx_codec_build_config(void); - -/*!\brief Return the name for a given interface - * - * Returns a human readable string for name of the given codec interface. - * - * \param[in] iface Interface pointer - * - */ -const char *vpx_codec_iface_name(vpx_codec_iface_t *iface); - -/*!\brief Convert error number to printable string - * - * Returns a human readable string for the last error returned by the - * algorithm. The returned error will be one line and will not contain - * any newline characters. - * - * - * \param[in] err Error number. - * - */ -const char *vpx_codec_err_to_string(vpx_codec_err_t err); - -/*!\brief Retrieve error synopsis for codec context - * - * Returns a human readable string for the last error returned by the - * algorithm. The returned error will be one line and will not contain - * any newline characters. - * - * - * \param[in] ctx Pointer to this instance's context. - * - */ -const char *vpx_codec_error(vpx_codec_ctx_t *ctx); - -/*!\brief Retrieve detailed error information for codec context - * - * Returns a human readable string providing detailed information about - * the last error. - * - * \param[in] ctx Pointer to this instance's context. - * - * \retval NULL - * No detailed information is available. - */ -const char *vpx_codec_error_detail(vpx_codec_ctx_t *ctx); - -/* REQUIRED FUNCTIONS - * - * The following functions are required to be implemented for all codecs. - * They represent the base case functionality expected of all codecs. - */ - -/*!\brief Destroy a codec instance - * - * Destroys a codec context, freeing any associated memory buffers. - * - * \param[in] ctx Pointer to this instance's context - * - * \retval #VPX_CODEC_OK - * The codec algorithm initialized. - * \retval #VPX_CODEC_MEM_ERROR - * Memory allocation failed. - */ -vpx_codec_err_t vpx_codec_destroy(vpx_codec_ctx_t *ctx); - -/*!\brief Get the capabilities of an algorithm. - * - * Retrieves the capabilities bitfield from the algorithm's interface. - * - * \param[in] iface Pointer to the algorithm interface - * - */ -vpx_codec_caps_t vpx_codec_get_caps(vpx_codec_iface_t *iface); - -/*!\brief Control algorithm - * - * This function is used to exchange algorithm specific data with the codec - * instance. This can be used to implement features specific to a particular - * algorithm. - * - * This wrapper function dispatches the request to the helper function - * associated with the given ctrl_id. It tries to call this function - * transparently, but will return #VPX_CODEC_ERROR if the request could not - * be dispatched. - * - * Note that this function should not be used directly. Call the - * #vpx_codec_control wrapper macro instead. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] ctrl_id Algorithm specific control identifier - * - * \retval #VPX_CODEC_OK - * The control request was processed. - * \retval #VPX_CODEC_ERROR - * The control request was not processed. - * \retval #VPX_CODEC_INVALID_PARAM - * The data was not valid. - */ -vpx_codec_err_t vpx_codec_control_(vpx_codec_ctx_t *ctx, int ctrl_id, ...); -#if defined(VPX_DISABLE_CTRL_TYPECHECKS) && VPX_DISABLE_CTRL_TYPECHECKS -#define vpx_codec_control(ctx, id, data) vpx_codec_control_(ctx, id, data) -#define VPX_CTRL_USE_TYPE(id, typ) -#define VPX_CTRL_USE_TYPE_DEPRECATED(id, typ) -#define VPX_CTRL_VOID(id, typ) - -#else -/*!\brief vpx_codec_control wrapper macro - * - * This macro allows for type safe conversions across the variadic parameter - * to vpx_codec_control_(). - * - * \internal - * It works by dispatching the call to the control function through a wrapper - * function named with the id parameter. - */ -#define vpx_codec_control(ctx, id, data) \ - vpx_codec_control_##id(ctx, id, data) /**<\hideinitializer*/ - -/*!\brief vpx_codec_control type definition macro - * - * This macro allows for type safe conversions across the variadic parameter - * to vpx_codec_control_(). It defines the type of the argument for a given - * control identifier. - * - * \internal - * It defines a static function with - * the correctly typed arguments as a wrapper to the type-unsafe internal - * function. - */ -#define VPX_CTRL_USE_TYPE(id, typ) \ - static vpx_codec_err_t vpx_codec_control_##id(vpx_codec_ctx_t *, int, typ) \ - VPX_UNUSED; \ - \ - static vpx_codec_err_t vpx_codec_control_##id(vpx_codec_ctx_t *ctx, \ - int ctrl_id, typ data) { \ - return vpx_codec_control_(ctx, ctrl_id, data); \ - } /**<\hideinitializer*/ - -/*!\brief vpx_codec_control deprecated type definition macro - * - * Like #VPX_CTRL_USE_TYPE, but indicates that the specified control is - * deprecated and should not be used. Consult the documentation for your - * codec for more information. - * - * \internal - * It defines a static function with the correctly typed arguments as a - * wrapper to the type-unsafe internal function. - */ -#define VPX_CTRL_USE_TYPE_DEPRECATED(id, typ) \ - VPX_DECLSPEC_DEPRECATED static vpx_codec_err_t vpx_codec_control_##id( \ - vpx_codec_ctx_t *, int, typ) VPX_DEPRECATED VPX_UNUSED; \ - \ - VPX_DECLSPEC_DEPRECATED static vpx_codec_err_t vpx_codec_control_##id( \ - vpx_codec_ctx_t *ctx, int ctrl_id, typ data) { \ - return vpx_codec_control_(ctx, ctrl_id, data); \ - } /**<\hideinitializer*/ - -/*!\brief vpx_codec_control void type definition macro - * - * This macro allows for type safe conversions across the variadic parameter - * to vpx_codec_control_(). It indicates that a given control identifier takes - * no argument. - * - * \internal - * It defines a static function without a data argument as a wrapper to the - * type-unsafe internal function. - */ -#define VPX_CTRL_VOID(id) \ - static vpx_codec_err_t vpx_codec_control_##id(vpx_codec_ctx_t *, int) \ - VPX_UNUSED; \ - \ - static vpx_codec_err_t vpx_codec_control_##id(vpx_codec_ctx_t *ctx, \ - int ctrl_id) { \ - return vpx_codec_control_(ctx, ctrl_id); \ - } /**<\hideinitializer*/ - -#endif - -/*!@} - end defgroup codec*/ -#ifdef __cplusplus -} -#endif -#endif // VPX_VPX_VPX_CODEC_H_ diff --git a/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vpx_decoder.h b/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vpx_decoder.h deleted file mode 100644 index f113f719..00000000 --- a/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vpx_decoder.h +++ /dev/null @@ -1,365 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ -#ifndef VPX_VPX_VPX_DECODER_H_ -#define VPX_VPX_VPX_DECODER_H_ - -/*!\defgroup decoder Decoder Algorithm Interface - * \ingroup codec - * This abstraction allows applications using this decoder to easily support - * multiple video formats with minimal code duplication. This section describes - * the interface common to all decoders. - * @{ - */ - -/*!\file - * \brief Describes the decoder algorithm interface to applications. - * - * This file describes the interface between an application and a - * video decoder algorithm. - * - */ -#ifdef __cplusplus -extern "C" { -#endif - -#include "./vpx_codec.h" -#include "./vpx_frame_buffer.h" - -/*!\brief Current ABI version number - * - * \internal - * If this file is altered in any way that changes the ABI, this value - * must be bumped. Examples include, but are not limited to, changing - * types, removing or reassigning enums, adding/removing/rearranging - * fields to structures - */ -#define VPX_DECODER_ABI_VERSION \ - (3 + VPX_CODEC_ABI_VERSION) /**<\hideinitializer*/ - -/*! \brief Decoder capabilities bitfield - * - * Each decoder advertises the capabilities it supports as part of its - * ::vpx_codec_iface_t interface structure. Capabilities are extra interfaces - * or functionality, and are not required to be supported by a decoder. - * - * The available flags are specified by VPX_CODEC_CAP_* defines. - */ -#define VPX_CODEC_CAP_PUT_SLICE 0x10000 /**< Will issue put_slice callbacks */ -#define VPX_CODEC_CAP_PUT_FRAME 0x20000 /**< Will issue put_frame callbacks */ -#define VPX_CODEC_CAP_POSTPROC 0x40000 /**< Can postprocess decoded frame */ -/*!\brief Can conceal errors due to packet loss */ -#define VPX_CODEC_CAP_ERROR_CONCEALMENT 0x80000 -/*!\brief Can receive encoded frames one fragment at a time */ -#define VPX_CODEC_CAP_INPUT_FRAGMENTS 0x100000 - -/*! \brief Initialization-time Feature Enabling - * - * Certain codec features must be known at initialization time, to allow for - * proper memory allocation. - * - * The available flags are specified by VPX_CODEC_USE_* defines. - */ -/*!\brief Can support frame-based multi-threading */ -#define VPX_CODEC_CAP_FRAME_THREADING 0x200000 -/*!brief Can support external frame buffers */ -#define VPX_CODEC_CAP_EXTERNAL_FRAME_BUFFER 0x400000 - -#define VPX_CODEC_USE_POSTPROC 0x10000 /**< Postprocess decoded frame */ -/*!\brief Conceal errors in decoded frames */ -#define VPX_CODEC_USE_ERROR_CONCEALMENT 0x20000 -/*!\brief The input frame should be passed to the decoder one fragment at a - * time */ -#define VPX_CODEC_USE_INPUT_FRAGMENTS 0x40000 -/*!\brief Enable frame-based multi-threading */ -#define VPX_CODEC_USE_FRAME_THREADING 0x80000 - -/*!\brief Stream properties - * - * This structure is used to query or set properties of the decoded - * stream. Algorithms may extend this structure with data specific - * to their bitstream by setting the sz member appropriately. - */ -typedef struct vpx_codec_stream_info { - unsigned int sz; /**< Size of this structure */ - unsigned int w; /**< Width (or 0 for unknown/default) */ - unsigned int h; /**< Height (or 0 for unknown/default) */ - unsigned int is_kf; /**< Current frame is a keyframe */ -} vpx_codec_stream_info_t; - -/* REQUIRED FUNCTIONS - * - * The following functions are required to be implemented for all decoders. - * They represent the base case functionality expected of all decoders. - */ - -/*!\brief Initialization Configurations - * - * This structure is used to pass init time configuration options to the - * decoder. - */ -typedef struct vpx_codec_dec_cfg { - unsigned int threads; /**< Maximum number of threads to use, default 1 */ - unsigned int w; /**< Width */ - unsigned int h; /**< Height */ -} vpx_codec_dec_cfg_t; /**< alias for struct vpx_codec_dec_cfg */ - -/*!\brief Initialize a decoder instance - * - * Initializes a decoder context using the given interface. Applications - * should call the vpx_codec_dec_init convenience macro instead of this - * function directly, to ensure that the ABI version number parameter - * is properly initialized. - * - * If the library was configured with --disable-multithread, this call - * is not thread safe and should be guarded with a lock if being used - * in a multithreaded context. - * - * \param[in] ctx Pointer to this instance's context. - * \param[in] iface Pointer to the algorithm interface to use. - * \param[in] cfg Configuration to use, if known. May be NULL. - * \param[in] flags Bitfield of VPX_CODEC_USE_* flags - * \param[in] ver ABI version number. Must be set to - * VPX_DECODER_ABI_VERSION - * \retval #VPX_CODEC_OK - * The decoder algorithm initialized. - * \retval #VPX_CODEC_MEM_ERROR - * Memory allocation failed. - */ -vpx_codec_err_t vpx_codec_dec_init_ver(vpx_codec_ctx_t *ctx, - vpx_codec_iface_t *iface, - const vpx_codec_dec_cfg_t *cfg, - vpx_codec_flags_t flags, int ver); - -/*!\brief Convenience macro for vpx_codec_dec_init_ver() - * - * Ensures the ABI version parameter is properly set. - */ -#define vpx_codec_dec_init(ctx, iface, cfg, flags) \ - vpx_codec_dec_init_ver(ctx, iface, cfg, flags, VPX_DECODER_ABI_VERSION) - -/*!\brief Parse stream info from a buffer - * - * Performs high level parsing of the bitstream. Construction of a decoder - * context is not necessary. Can be used to determine if the bitstream is - * of the proper format, and to extract information from the stream. - * - * \param[in] iface Pointer to the algorithm interface - * \param[in] data Pointer to a block of data to parse - * \param[in] data_sz Size of the data buffer - * \param[in,out] si Pointer to stream info to update. The size member - * \ref MUST be properly initialized, but \ref MAY be - * clobbered by the algorithm. This parameter \ref MAY - * be NULL. - * - * \retval #VPX_CODEC_OK - * Bitstream is parsable and stream information updated - */ -vpx_codec_err_t vpx_codec_peek_stream_info(vpx_codec_iface_t *iface, - const uint8_t *data, - unsigned int data_sz, - vpx_codec_stream_info_t *si); - -/*!\brief Return information about the current stream. - * - * Returns information about the stream that has been parsed during decoding. - * - * \param[in] ctx Pointer to this instance's context - * \param[in,out] si Pointer to stream info to update. The size member - * \ref MUST be properly initialized, but \ref MAY be - * clobbered by the algorithm. This parameter \ref MAY - * be NULL. - * - * \retval #VPX_CODEC_OK - * Bitstream is parsable and stream information updated - */ -vpx_codec_err_t vpx_codec_get_stream_info(vpx_codec_ctx_t *ctx, - vpx_codec_stream_info_t *si); - -/*!\brief Decode data - * - * Processes a buffer of coded data. If the processing results in a new - * decoded frame becoming available, PUT_SLICE and PUT_FRAME events may be - * generated, as appropriate. Encoded data \ref MUST be passed in DTS (decode - * time stamp) order. Frames produced will always be in PTS (presentation - * time stamp) order. - * If the decoder is configured with VPX_CODEC_USE_INPUT_FRAGMENTS enabled, - * data and data_sz can contain a fragment of the encoded frame. Fragment - * \#n must contain at least partition \#n, but can also contain subsequent - * partitions (\#n+1 - \#n+i), and if so, fragments \#n+1, .., \#n+i must - * be empty. When no more data is available, this function should be called - * with NULL as data and 0 as data_sz. The memory passed to this function - * must be available until the frame has been decoded. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] data Pointer to this block of new coded data. If - * NULL, a VPX_CODEC_CB_PUT_FRAME event is posted - * for the previously decoded frame. - * \param[in] data_sz Size of the coded data, in bytes. - * \param[in] user_priv Application specific data to associate with - * this frame. - * \param[in] deadline Soft deadline the decoder should attempt to meet, - * in us. Set to zero for unlimited. - * - * \return Returns #VPX_CODEC_OK if the coded data was processed completely - * and future pictures can be decoded without error. Otherwise, - * see the descriptions of the other error codes in ::vpx_codec_err_t - * for recoverability capabilities. - */ -vpx_codec_err_t vpx_codec_decode(vpx_codec_ctx_t *ctx, const uint8_t *data, - unsigned int data_sz, void *user_priv, - long deadline); - -/*!\brief Decoded frames iterator - * - * Iterates over a list of the frames available for display. The iterator - * storage should be initialized to NULL to start the iteration. Iteration is - * complete when this function returns NULL. - * - * The list of available frames becomes valid upon completion of the - * vpx_codec_decode call, and remains valid until the next call to - * vpx_codec_decode. - * - * \param[in] ctx Pointer to this instance's context - * \param[in,out] iter Iterator storage, initialized to NULL - * - * \return Returns a pointer to an image, if one is ready for display. Frames - * produced will always be in PTS (presentation time stamp) order. - */ -vpx_image_t *vpx_codec_get_frame(vpx_codec_ctx_t *ctx, vpx_codec_iter_t *iter); - -/*!\defgroup cap_put_frame Frame-Based Decoding Functions - * - * The following functions are required to be implemented for all decoders - * that advertise the VPX_CODEC_CAP_PUT_FRAME capability. Calling these - * functions - * for codecs that don't advertise this capability will result in an error - * code being returned, usually VPX_CODEC_ERROR - * @{ - */ - -/*!\brief put frame callback prototype - * - * This callback is invoked by the decoder to notify the application of - * the availability of decoded image data. - */ -typedef void (*vpx_codec_put_frame_cb_fn_t)(void *user_priv, - const vpx_image_t *img); - -/*!\brief Register for notification of frame completion. - * - * Registers a given function to be called when a decoded frame is - * available. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] cb Pointer to the callback function - * \param[in] user_priv User's private data - * - * \retval #VPX_CODEC_OK - * Callback successfully registered. - * \retval #VPX_CODEC_ERROR - * Decoder context not initialized, or algorithm not capable of - * posting slice completion. - */ -vpx_codec_err_t vpx_codec_register_put_frame_cb(vpx_codec_ctx_t *ctx, - vpx_codec_put_frame_cb_fn_t cb, - void *user_priv); - -/*!@} - end defgroup cap_put_frame */ - -/*!\defgroup cap_put_slice Slice-Based Decoding Functions - * - * The following functions are required to be implemented for all decoders - * that advertise the VPX_CODEC_CAP_PUT_SLICE capability. Calling these - * functions - * for codecs that don't advertise this capability will result in an error - * code being returned, usually VPX_CODEC_ERROR - * @{ - */ - -/*!\brief put slice callback prototype - * - * This callback is invoked by the decoder to notify the application of - * the availability of partially decoded image data. The - */ -typedef void (*vpx_codec_put_slice_cb_fn_t)(void *user_priv, - const vpx_image_t *img, - const vpx_image_rect_t *valid, - const vpx_image_rect_t *update); - -/*!\brief Register for notification of slice completion. - * - * Registers a given function to be called when a decoded slice is - * available. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] cb Pointer to the callback function - * \param[in] user_priv User's private data - * - * \retval #VPX_CODEC_OK - * Callback successfully registered. - * \retval #VPX_CODEC_ERROR - * Decoder context not initialized, or algorithm not capable of - * posting slice completion. - */ -vpx_codec_err_t vpx_codec_register_put_slice_cb(vpx_codec_ctx_t *ctx, - vpx_codec_put_slice_cb_fn_t cb, - void *user_priv); - -/*!@} - end defgroup cap_put_slice*/ - -/*!\defgroup cap_external_frame_buffer External Frame Buffer Functions - * - * The following section is required to be implemented for all decoders - * that advertise the VPX_CODEC_CAP_EXTERNAL_FRAME_BUFFER capability. - * Calling this function for codecs that don't advertise this capability - * will result in an error code being returned, usually VPX_CODEC_ERROR. - * - * \note - * Currently this only works with VP9. - * @{ - */ - -/*!\brief Pass in external frame buffers for the decoder to use. - * - * Registers functions to be called when libvpx needs a frame buffer - * to decode the current frame and a function to be called when libvpx does - * not internally reference the frame buffer. This set function must - * be called before the first call to decode or libvpx will assume the - * default behavior of allocating frame buffers internally. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] cb_get Pointer to the get callback function - * \param[in] cb_release Pointer to the release callback function - * \param[in] cb_priv Callback's private data - * - * \retval #VPX_CODEC_OK - * External frame buffers will be used by libvpx. - * \retval #VPX_CODEC_INVALID_PARAM - * One or more of the callbacks were NULL. - * \retval #VPX_CODEC_ERROR - * Decoder context not initialized, or algorithm not capable of - * using external frame buffers. - * - * \note - * When decoding VP9, the application may be required to pass in at least - * #VP9_MAXIMUM_REF_BUFFERS + #VPX_MAXIMUM_WORK_BUFFERS external frame - * buffers. - */ -vpx_codec_err_t vpx_codec_set_frame_buffer_functions( - vpx_codec_ctx_t *ctx, vpx_get_frame_buffer_cb_fn_t cb_get, - vpx_release_frame_buffer_cb_fn_t cb_release, void *cb_priv); - -/*!@} - end defgroup cap_external_frame_buffer */ - -/*!@} - end defgroup decoder*/ -#ifdef __cplusplus -} -#endif -#endif // VPX_VPX_VPX_DECODER_H_ diff --git a/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vpx_encoder.h b/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vpx_encoder.h deleted file mode 100644 index c18de703..00000000 --- a/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vpx_encoder.h +++ /dev/null @@ -1,968 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ -#ifndef VPX_VPX_VPX_ENCODER_H_ -#define VPX_VPX_VPX_ENCODER_H_ - -/*!\defgroup encoder Encoder Algorithm Interface - * \ingroup codec - * This abstraction allows applications using this encoder to easily support - * multiple video formats with minimal code duplication. This section describes - * the interface common to all encoders. - * @{ - */ - -/*!\file - * \brief Describes the encoder algorithm interface to applications. - * - * This file describes the interface between an application and a - * video encoder algorithm. - * - */ -#ifdef __cplusplus -extern "C" { -#endif - -#include "./vpx_codec.h" - -/*! Temporal Scalability: Maximum length of the sequence defining frame - * layer membership - */ -#define VPX_TS_MAX_PERIODICITY 16 - -/*! Temporal Scalability: Maximum number of coding layers */ -#define VPX_TS_MAX_LAYERS 5 - -/*! Temporal+Spatial Scalability: Maximum number of coding layers */ -#define VPX_MAX_LAYERS 12 // 3 temporal + 4 spatial layers are allowed. - -/*! Spatial Scalability: Maximum number of coding layers */ -#define VPX_SS_MAX_LAYERS 5 - -/*! Spatial Scalability: Default number of coding layers */ -#define VPX_SS_DEFAULT_LAYERS 1 - -/*!\brief Current ABI version number - * - * \internal - * If this file is altered in any way that changes the ABI, this value - * must be bumped. Examples include, but are not limited to, changing - * types, removing or reassigning enums, adding/removing/rearranging - * fields to structures - */ -#define VPX_ENCODER_ABI_VERSION \ - (14 + VPX_CODEC_ABI_VERSION) /**<\hideinitializer*/ - -/*! \brief Encoder capabilities bitfield - * - * Each encoder advertises the capabilities it supports as part of its - * ::vpx_codec_iface_t interface structure. Capabilities are extra - * interfaces or functionality, and are not required to be supported - * by an encoder. - * - * The available flags are specified by VPX_CODEC_CAP_* defines. - */ -#define VPX_CODEC_CAP_PSNR 0x10000 /**< Can issue PSNR packets */ - -/*! Can output one partition at a time. Each partition is returned in its - * own VPX_CODEC_CX_FRAME_PKT, with the FRAME_IS_FRAGMENT flag set for - * every partition but the last. In this mode all frames are always - * returned partition by partition. - */ -#define VPX_CODEC_CAP_OUTPUT_PARTITION 0x20000 - -/*! \brief Initialization-time Feature Enabling - * - * Certain codec features must be known at initialization time, to allow - * for proper memory allocation. - * - * The available flags are specified by VPX_CODEC_USE_* defines. - */ -#define VPX_CODEC_USE_PSNR 0x10000 /**< Calculate PSNR on each frame */ -/*!\brief Make the encoder output one partition at a time. */ -#define VPX_CODEC_USE_OUTPUT_PARTITION 0x20000 -#define VPX_CODEC_USE_HIGHBITDEPTH 0x40000 /**< Use high bitdepth */ - -/*!\brief Generic fixed size buffer structure - * - * This structure is able to hold a reference to any fixed size buffer. - */ -typedef struct vpx_fixed_buf { - void *buf; /**< Pointer to the data */ - size_t sz; /**< Length of the buffer, in chars */ -} vpx_fixed_buf_t; /**< alias for struct vpx_fixed_buf */ - -/*!\brief Time Stamp Type - * - * An integer, which when multiplied by the stream's time base, provides - * the absolute time of a sample. - */ -typedef int64_t vpx_codec_pts_t; - -/*!\brief Compressed Frame Flags - * - * This type represents a bitfield containing information about a compressed - * frame that may be useful to an application. The most significant 16 bits - * can be used by an algorithm to provide additional detail, for example to - * support frame types that are codec specific (MPEG-1 D-frames for example) - */ -typedef uint32_t vpx_codec_frame_flags_t; -#define VPX_FRAME_IS_KEY 0x1 /**< frame is the start of a GOP */ -/*!\brief frame can be dropped without affecting the stream (no future frame - * depends on this one) */ -#define VPX_FRAME_IS_DROPPABLE 0x2 -/*!\brief frame should be decoded but will not be shown */ -#define VPX_FRAME_IS_INVISIBLE 0x4 -/*!\brief this is a fragment of the encoded frame */ -#define VPX_FRAME_IS_FRAGMENT 0x8 - -/*!\brief Error Resilient flags - * - * These flags define which error resilient features to enable in the - * encoder. The flags are specified through the - * vpx_codec_enc_cfg::g_error_resilient variable. - */ -typedef uint32_t vpx_codec_er_flags_t; -/*!\brief Improve resiliency against losses of whole frames */ -#define VPX_ERROR_RESILIENT_DEFAULT 0x1 -/*!\brief The frame partitions are independently decodable by the bool decoder, - * meaning that partitions can be decoded even though earlier partitions have - * been lost. Note that intra prediction is still done over the partition - * boundary. */ -#define VPX_ERROR_RESILIENT_PARTITIONS 0x2 - -/*!\brief Encoder output packet variants - * - * This enumeration lists the different kinds of data packets that can be - * returned by calls to vpx_codec_get_cx_data(). Algorithms \ref MAY - * extend this list to provide additional functionality. - */ -enum vpx_codec_cx_pkt_kind { - VPX_CODEC_CX_FRAME_PKT, /**< Compressed video frame */ - VPX_CODEC_STATS_PKT, /**< Two-pass statistics for this frame */ - VPX_CODEC_FPMB_STATS_PKT, /**< first pass mb statistics for this frame */ - VPX_CODEC_PSNR_PKT, /**< PSNR statistics for this frame */ - VPX_CODEC_CUSTOM_PKT = 256 /**< Algorithm extensions */ -}; - -/*!\brief Encoder output packet - * - * This structure contains the different kinds of output data the encoder - * may produce while compressing a frame. - */ -typedef struct vpx_codec_cx_pkt { - enum vpx_codec_cx_pkt_kind kind; /**< packet variant */ - union { - struct { - void *buf; /**< compressed data buffer */ - size_t sz; /**< length of compressed data */ - /*!\brief time stamp to show frame (in timebase units) */ - vpx_codec_pts_t pts; - /*!\brief duration to show frame (in timebase units) */ - unsigned long duration; - vpx_codec_frame_flags_t flags; /**< flags for this frame */ - /*!\brief the partition id defines the decoding order of the partitions. - * Only applicable when "output partition" mode is enabled. First - * partition has id 0.*/ - int partition_id; - /*!\brief Width and height of frames in this packet. VP8 will only use the - * first one.*/ - unsigned int width[VPX_SS_MAX_LAYERS]; /**< frame width */ - unsigned int height[VPX_SS_MAX_LAYERS]; /**< frame height */ - /*!\brief Flag to indicate if spatial layer frame in this packet is - * encoded or dropped. VP8 will always be set to 1.*/ - uint8_t spatial_layer_encoded[VPX_SS_MAX_LAYERS]; - } frame; /**< data for compressed frame packet */ - vpx_fixed_buf_t twopass_stats; /**< data for two-pass packet */ - vpx_fixed_buf_t firstpass_mb_stats; /**< first pass mb packet */ - struct vpx_psnr_pkt { - unsigned int samples[4]; /**< Number of samples, total/y/u/v */ - uint64_t sse[4]; /**< sum squared error, total/y/u/v */ - double psnr[4]; /**< PSNR, total/y/u/v */ - } psnr; /**< data for PSNR packet */ - vpx_fixed_buf_t raw; /**< data for arbitrary packets */ - - /* This packet size is fixed to allow codecs to extend this - * interface without having to manage storage for raw packets, - * i.e., if it's smaller than 128 bytes, you can store in the - * packet list directly. - */ - char pad[128 - sizeof(enum vpx_codec_cx_pkt_kind)]; /**< fixed sz */ - } data; /**< packet data */ -} vpx_codec_cx_pkt_t; /**< alias for struct vpx_codec_cx_pkt */ - -/*!\brief Encoder return output buffer callback - * - * This callback function, when registered, returns with packets when each - * spatial layer is encoded. - */ -typedef void (*vpx_codec_enc_output_cx_pkt_cb_fn_t)(vpx_codec_cx_pkt_t *pkt, - void *user_data); - -/*!\brief Callback function pointer / user data pair storage */ -typedef struct vpx_codec_enc_output_cx_cb_pair { - vpx_codec_enc_output_cx_pkt_cb_fn_t output_cx_pkt; /**< Callback function */ - void *user_priv; /**< Pointer to private data */ -} vpx_codec_priv_output_cx_pkt_cb_pair_t; - -/*!\brief Rational Number - * - * This structure holds a fractional value. - */ -typedef struct vpx_rational { - int num; /**< fraction numerator */ - int den; /**< fraction denominator */ -} vpx_rational_t; /**< alias for struct vpx_rational */ - -/*!\brief Multi-pass Encoding Pass */ -enum vpx_enc_pass { - VPX_RC_ONE_PASS, /**< Single pass mode */ - VPX_RC_FIRST_PASS, /**< First pass of multi-pass mode */ - VPX_RC_LAST_PASS /**< Final pass of multi-pass mode */ -}; - -/*!\brief Rate control mode */ -enum vpx_rc_mode { - VPX_VBR, /**< Variable Bit Rate (VBR) mode */ - VPX_CBR, /**< Constant Bit Rate (CBR) mode */ - VPX_CQ, /**< Constrained Quality (CQ) mode */ - VPX_Q, /**< Constant Quality (Q) mode */ -}; - -/*!\brief Keyframe placement mode. - * - * This enumeration determines whether keyframes are placed automatically by - * the encoder or whether this behavior is disabled. Older releases of this - * SDK were implemented such that VPX_KF_FIXED meant keyframes were disabled. - * This name is confusing for this behavior, so the new symbols to be used - * are VPX_KF_AUTO and VPX_KF_DISABLED. - */ -enum vpx_kf_mode { - VPX_KF_FIXED, /**< deprecated, implies VPX_KF_DISABLED */ - VPX_KF_AUTO, /**< Encoder determines optimal placement automatically */ - VPX_KF_DISABLED = 0 /**< Encoder does not place keyframes. */ -}; - -/*!\brief Encoded Frame Flags - * - * This type indicates a bitfield to be passed to vpx_codec_encode(), defining - * per-frame boolean values. By convention, bits common to all codecs will be - * named VPX_EFLAG_*, and bits specific to an algorithm will be named - * /algo/_eflag_*. The lower order 16 bits are reserved for common use. - */ -typedef long vpx_enc_frame_flags_t; -#define VPX_EFLAG_FORCE_KF (1 << 0) /**< Force this frame to be a keyframe */ - -/*!\brief Encoder configuration structure - * - * This structure contains the encoder settings that have common representations - * across all codecs. This doesn't imply that all codecs support all features, - * however. - */ -typedef struct vpx_codec_enc_cfg { - /* - * generic settings (g) - */ - - /*!\brief Deprecated: Algorithm specific "usage" value - * - * This value must be zero. - */ - unsigned int g_usage; - - /*!\brief Maximum number of threads to use - * - * For multi-threaded implementations, use no more than this number of - * threads. The codec may use fewer threads than allowed. The value - * 0 is equivalent to the value 1. - */ - unsigned int g_threads; - - /*!\brief Bitstream profile to use - * - * Some codecs support a notion of multiple bitstream profiles. Typically - * this maps to a set of features that are turned on or off. Often the - * profile to use is determined by the features of the intended decoder. - * Consult the documentation for the codec to determine the valid values - * for this parameter, or set to zero for a sane default. - */ - unsigned int g_profile; /**< profile of bitstream to use */ - - /*!\brief Width of the frame - * - * This value identifies the presentation resolution of the frame, - * in pixels. Note that the frames passed as input to the encoder must - * have this resolution. Frames will be presented by the decoder in this - * resolution, independent of any spatial resampling the encoder may do. - */ - unsigned int g_w; - - /*!\brief Height of the frame - * - * This value identifies the presentation resolution of the frame, - * in pixels. Note that the frames passed as input to the encoder must - * have this resolution. Frames will be presented by the decoder in this - * resolution, independent of any spatial resampling the encoder may do. - */ - unsigned int g_h; - - /*!\brief Bit-depth of the codec - * - * This value identifies the bit_depth of the codec, - * Only certain bit-depths are supported as identified in the - * vpx_bit_depth_t enum. - */ - vpx_bit_depth_t g_bit_depth; - - /*!\brief Bit-depth of the input frames - * - * This value identifies the bit_depth of the input frames in bits. - * Note that the frames passed as input to the encoder must have - * this bit-depth. - */ - unsigned int g_input_bit_depth; - - /*!\brief Stream timebase units - * - * Indicates the smallest interval of time, in seconds, used by the stream. - * For fixed frame rate material, or variable frame rate material where - * frames are timed at a multiple of a given clock (ex: video capture), - * the \ref RECOMMENDED method is to set the timebase to the reciprocal - * of the frame rate (ex: 1001/30000 for 29.970 Hz NTSC). This allows the - * pts to correspond to the frame number, which can be handy. For - * re-encoding video from containers with absolute time timestamps, the - * \ref RECOMMENDED method is to set the timebase to that of the parent - * container or multimedia framework (ex: 1/1000 for ms, as in FLV). - */ - struct vpx_rational g_timebase; - - /*!\brief Enable error resilient modes. - * - * The error resilient bitfield indicates to the encoder which features - * it should enable to take measures for streaming over lossy or noisy - * links. - */ - vpx_codec_er_flags_t g_error_resilient; - - /*!\brief Multi-pass Encoding Mode - * - * This value should be set to the current phase for multi-pass encoding. - * For single pass, set to #VPX_RC_ONE_PASS. - */ - enum vpx_enc_pass g_pass; - - /*!\brief Allow lagged encoding - * - * If set, this value allows the encoder to consume a number of input - * frames before producing output frames. This allows the encoder to - * base decisions for the current frame on future frames. This does - * increase the latency of the encoding pipeline, so it is not appropriate - * in all situations (ex: realtime encoding). - * - * Note that this is a maximum value -- the encoder may produce frames - * sooner than the given limit. Set this value to 0 to disable this - * feature. - */ - unsigned int g_lag_in_frames; - - /* - * rate control settings (rc) - */ - - /*!\brief Temporal resampling configuration, if supported by the codec. - * - * Temporal resampling allows the codec to "drop" frames as a strategy to - * meet its target data rate. This can cause temporal discontinuities in - * the encoded video, which may appear as stuttering during playback. This - * trade-off is often acceptable, but for many applications is not. It can - * be disabled in these cases. - * - * This threshold is described as a percentage of the target data buffer. - * When the data buffer falls below this percentage of fullness, a - * dropped frame is indicated. Set the threshold to zero (0) to disable - * this feature. - */ - unsigned int rc_dropframe_thresh; - - /*!\brief Enable/disable spatial resampling, if supported by the codec. - * - * Spatial resampling allows the codec to compress a lower resolution - * version of the frame, which is then upscaled by the encoder to the - * correct presentation resolution. This increases visual quality at - * low data rates, at the expense of CPU time on the encoder/decoder. - */ - unsigned int rc_resize_allowed; - - /*!\brief Internal coded frame width. - * - * If spatial resampling is enabled this specifies the width of the - * encoded frame. - */ - unsigned int rc_scaled_width; - - /*!\brief Internal coded frame height. - * - * If spatial resampling is enabled this specifies the height of the - * encoded frame. - */ - unsigned int rc_scaled_height; - - /*!\brief Spatial resampling up watermark. - * - * This threshold is described as a percentage of the target data buffer. - * When the data buffer rises above this percentage of fullness, the - * encoder will step up to a higher resolution version of the frame. - */ - unsigned int rc_resize_up_thresh; - - /*!\brief Spatial resampling down watermark. - * - * This threshold is described as a percentage of the target data buffer. - * When the data buffer falls below this percentage of fullness, the - * encoder will step down to a lower resolution version of the frame. - */ - unsigned int rc_resize_down_thresh; - - /*!\brief Rate control algorithm to use. - * - * Indicates whether the end usage of this stream is to be streamed over - * a bandwidth constrained link, indicating that Constant Bit Rate (CBR) - * mode should be used, or whether it will be played back on a high - * bandwidth link, as from a local disk, where higher variations in - * bitrate are acceptable. - */ - enum vpx_rc_mode rc_end_usage; - - /*!\brief Two-pass stats buffer. - * - * A buffer containing all of the stats packets produced in the first - * pass, concatenated. - */ - vpx_fixed_buf_t rc_twopass_stats_in; - - /*!\brief first pass mb stats buffer. - * - * A buffer containing all of the first pass mb stats packets produced - * in the first pass, concatenated. - */ - vpx_fixed_buf_t rc_firstpass_mb_stats_in; - - /*!\brief Target data rate - * - * Target bandwidth to use for this stream, in kilobits per second. - */ - unsigned int rc_target_bitrate; - - /* - * quantizer settings - */ - - /*!\brief Minimum (Best Quality) Quantizer - * - * The quantizer is the most direct control over the quality of the - * encoded image. The range of valid values for the quantizer is codec - * specific. Consult the documentation for the codec to determine the - * values to use. - */ - unsigned int rc_min_quantizer; - - /*!\brief Maximum (Worst Quality) Quantizer - * - * The quantizer is the most direct control over the quality of the - * encoded image. The range of valid values for the quantizer is codec - * specific. Consult the documentation for the codec to determine the - * values to use. - */ - unsigned int rc_max_quantizer; - - /* - * bitrate tolerance - */ - - /*!\brief Rate control adaptation undershoot control - * - * VP8: Expressed as a percentage of the target bitrate, - * controls the maximum allowed adaptation speed of the codec. - * This factor controls the maximum amount of bits that can - * be subtracted from the target bitrate in order to compensate - * for prior overshoot. - * VP9: Expressed as a percentage of the target bitrate, a threshold - * undershoot level (current rate vs target) beyond which more aggressive - * corrective measures are taken. - * * - * Valid values in the range VP8:0-1000 VP9: 0-100. - */ - unsigned int rc_undershoot_pct; - - /*!\brief Rate control adaptation overshoot control - * - * VP8: Expressed as a percentage of the target bitrate, - * controls the maximum allowed adaptation speed of the codec. - * This factor controls the maximum amount of bits that can - * be added to the target bitrate in order to compensate for - * prior undershoot. - * VP9: Expressed as a percentage of the target bitrate, a threshold - * overshoot level (current rate vs target) beyond which more aggressive - * corrective measures are taken. - * - * Valid values in the range VP8:0-1000 VP9: 0-100. - */ - unsigned int rc_overshoot_pct; - - /* - * decoder buffer model parameters - */ - - /*!\brief Decoder Buffer Size - * - * This value indicates the amount of data that may be buffered by the - * decoding application. Note that this value is expressed in units of - * time (milliseconds). For example, a value of 5000 indicates that the - * client will buffer (at least) 5000ms worth of encoded data. Use the - * target bitrate (#rc_target_bitrate) to convert to bits/bytes, if - * necessary. - */ - unsigned int rc_buf_sz; - - /*!\brief Decoder Buffer Initial Size - * - * This value indicates the amount of data that will be buffered by the - * decoding application prior to beginning playback. This value is - * expressed in units of time (milliseconds). Use the target bitrate - * (#rc_target_bitrate) to convert to bits/bytes, if necessary. - */ - unsigned int rc_buf_initial_sz; - - /*!\brief Decoder Buffer Optimal Size - * - * This value indicates the amount of data that the encoder should try - * to maintain in the decoder's buffer. This value is expressed in units - * of time (milliseconds). Use the target bitrate (#rc_target_bitrate) - * to convert to bits/bytes, if necessary. - */ - unsigned int rc_buf_optimal_sz; - - /* - * 2 pass rate control parameters - */ - - /*!\brief Two-pass mode CBR/VBR bias - * - * Bias, expressed on a scale of 0 to 100, for determining target size - * for the current frame. The value 0 indicates the optimal CBR mode - * value should be used. The value 100 indicates the optimal VBR mode - * value should be used. Values in between indicate which way the - * encoder should "lean." - */ - unsigned int rc_2pass_vbr_bias_pct; - - /*!\brief Two-pass mode per-GOP minimum bitrate - * - * This value, expressed as a percentage of the target bitrate, indicates - * the minimum bitrate to be used for a single GOP (aka "section") - */ - unsigned int rc_2pass_vbr_minsection_pct; - - /*!\brief Two-pass mode per-GOP maximum bitrate - * - * This value, expressed as a percentage of the target bitrate, indicates - * the maximum bitrate to be used for a single GOP (aka "section") - */ - unsigned int rc_2pass_vbr_maxsection_pct; - - /*!\brief Two-pass corpus vbr mode complexity control - * Used only in VP9: A value representing the corpus midpoint complexity - * for corpus vbr mode. This value defaults to 0 which disables corpus vbr - * mode in favour of normal vbr mode. - */ - unsigned int rc_2pass_vbr_corpus_complexity; - - /* - * keyframing settings (kf) - */ - - /*!\brief Keyframe placement mode - * - * This value indicates whether the encoder should place keyframes at a - * fixed interval, or determine the optimal placement automatically - * (as governed by the #kf_min_dist and #kf_max_dist parameters) - */ - enum vpx_kf_mode kf_mode; - - /*!\brief Keyframe minimum interval - * - * This value, expressed as a number of frames, prevents the encoder from - * placing a keyframe nearer than kf_min_dist to the previous keyframe. At - * least kf_min_dist frames non-keyframes will be coded before the next - * keyframe. Set kf_min_dist equal to kf_max_dist for a fixed interval. - */ - unsigned int kf_min_dist; - - /*!\brief Keyframe maximum interval - * - * This value, expressed as a number of frames, forces the encoder to code - * a keyframe if one has not been coded in the last kf_max_dist frames. - * A value of 0 implies all frames will be keyframes. Set kf_min_dist - * equal to kf_max_dist for a fixed interval. - */ - unsigned int kf_max_dist; - - /* - * Spatial scalability settings (ss) - */ - - /*!\brief Number of spatial coding layers. - * - * This value specifies the number of spatial coding layers to be used. - */ - unsigned int ss_number_layers; - - /*!\brief Enable auto alt reference flags for each spatial layer. - * - * These values specify if auto alt reference frame is enabled for each - * spatial layer. - */ - int ss_enable_auto_alt_ref[VPX_SS_MAX_LAYERS]; - - /*!\brief Target bitrate for each spatial layer. - * - * These values specify the target coding bitrate to be used for each - * spatial layer. - */ - unsigned int ss_target_bitrate[VPX_SS_MAX_LAYERS]; - - /*!\brief Number of temporal coding layers. - * - * This value specifies the number of temporal layers to be used. - */ - unsigned int ts_number_layers; - - /*!\brief Target bitrate for each temporal layer. - * - * These values specify the target coding bitrate to be used for each - * temporal layer. - */ - unsigned int ts_target_bitrate[VPX_TS_MAX_LAYERS]; - - /*!\brief Frame rate decimation factor for each temporal layer. - * - * These values specify the frame rate decimation factors to apply - * to each temporal layer. - */ - unsigned int ts_rate_decimator[VPX_TS_MAX_LAYERS]; - - /*!\brief Length of the sequence defining frame temporal layer membership. - * - * This value specifies the length of the sequence that defines the - * membership of frames to temporal layers. For example, if the - * ts_periodicity = 8, then the frames are assigned to coding layers with a - * repeated sequence of length 8. - */ - unsigned int ts_periodicity; - - /*!\brief Template defining the membership of frames to temporal layers. - * - * This array defines the membership of frames to temporal coding layers. - * For a 2-layer encoding that assigns even numbered frames to one temporal - * layer (0) and odd numbered frames to a second temporal layer (1) with - * ts_periodicity=8, then ts_layer_id = (0,1,0,1,0,1,0,1). - */ - unsigned int ts_layer_id[VPX_TS_MAX_PERIODICITY]; - - /*!\brief Target bitrate for each spatial/temporal layer. - * - * These values specify the target coding bitrate to be used for each - * spatial/temporal layer. - * - */ - unsigned int layer_target_bitrate[VPX_MAX_LAYERS]; - - /*!\brief Temporal layering mode indicating which temporal layering scheme to - * use. - * - * The value (refer to VP9E_TEMPORAL_LAYERING_MODE) specifies the - * temporal layering mode to use. - * - */ - int temporal_layering_mode; -} vpx_codec_enc_cfg_t; /**< alias for struct vpx_codec_enc_cfg */ - -/*!\brief vp9 svc extra configure parameters - * - * This defines max/min quantizers and scale factors for each layer - * - */ -typedef struct vpx_svc_parameters { - int max_quantizers[VPX_MAX_LAYERS]; /**< Max Q for each layer */ - int min_quantizers[VPX_MAX_LAYERS]; /**< Min Q for each layer */ - int scaling_factor_num[VPX_MAX_LAYERS]; /**< Scaling factor-numerator */ - int scaling_factor_den[VPX_MAX_LAYERS]; /**< Scaling factor-denominator */ - int speed_per_layer[VPX_MAX_LAYERS]; /**< Speed setting for each sl */ - int temporal_layering_mode; /**< Temporal layering mode */ -} vpx_svc_extra_cfg_t; - -/*!\brief Initialize an encoder instance - * - * Initializes a encoder context using the given interface. Applications - * should call the vpx_codec_enc_init convenience macro instead of this - * function directly, to ensure that the ABI version number parameter - * is properly initialized. - * - * If the library was configured with --disable-multithread, this call - * is not thread safe and should be guarded with a lock if being used - * in a multithreaded context. - * - * \param[in] ctx Pointer to this instance's context. - * \param[in] iface Pointer to the algorithm interface to use. - * \param[in] cfg Configuration to use, if known. May be NULL. - * \param[in] flags Bitfield of VPX_CODEC_USE_* flags - * \param[in] ver ABI version number. Must be set to - * VPX_ENCODER_ABI_VERSION - * \retval #VPX_CODEC_OK - * The decoder algorithm initialized. - * \retval #VPX_CODEC_MEM_ERROR - * Memory allocation failed. - */ -vpx_codec_err_t vpx_codec_enc_init_ver(vpx_codec_ctx_t *ctx, - vpx_codec_iface_t *iface, - const vpx_codec_enc_cfg_t *cfg, - vpx_codec_flags_t flags, int ver); - -/*!\brief Convenience macro for vpx_codec_enc_init_ver() - * - * Ensures the ABI version parameter is properly set. - */ -#define vpx_codec_enc_init(ctx, iface, cfg, flags) \ - vpx_codec_enc_init_ver(ctx, iface, cfg, flags, VPX_ENCODER_ABI_VERSION) - -/*!\brief Initialize multi-encoder instance - * - * Initializes multi-encoder context using the given interface. - * Applications should call the vpx_codec_enc_init_multi convenience macro - * instead of this function directly, to ensure that the ABI version number - * parameter is properly initialized. - * - * \param[in] ctx Pointer to this instance's context. - * \param[in] iface Pointer to the algorithm interface to use. - * \param[in] cfg Configuration to use, if known. May be NULL. - * \param[in] num_enc Total number of encoders. - * \param[in] flags Bitfield of VPX_CODEC_USE_* flags - * \param[in] dsf Pointer to down-sampling factors. - * \param[in] ver ABI version number. Must be set to - * VPX_ENCODER_ABI_VERSION - * \retval #VPX_CODEC_OK - * The decoder algorithm initialized. - * \retval #VPX_CODEC_MEM_ERROR - * Memory allocation failed. - */ -vpx_codec_err_t vpx_codec_enc_init_multi_ver( - vpx_codec_ctx_t *ctx, vpx_codec_iface_t *iface, vpx_codec_enc_cfg_t *cfg, - int num_enc, vpx_codec_flags_t flags, vpx_rational_t *dsf, int ver); - -/*!\brief Convenience macro for vpx_codec_enc_init_multi_ver() - * - * Ensures the ABI version parameter is properly set. - */ -#define vpx_codec_enc_init_multi(ctx, iface, cfg, num_enc, flags, dsf) \ - vpx_codec_enc_init_multi_ver(ctx, iface, cfg, num_enc, flags, dsf, \ - VPX_ENCODER_ABI_VERSION) - -/*!\brief Get a default configuration - * - * Initializes a encoder configuration structure with default values. Supports - * the notion of "usages" so that an algorithm may offer different default - * settings depending on the user's intended goal. This function \ref SHOULD - * be called by all applications to initialize the configuration structure - * before specializing the configuration with application specific values. - * - * \param[in] iface Pointer to the algorithm interface to use. - * \param[out] cfg Configuration buffer to populate. - * \param[in] usage Must be set to 0. - * - * \retval #VPX_CODEC_OK - * The configuration was populated. - * \retval #VPX_CODEC_INCAPABLE - * Interface is not an encoder interface. - * \retval #VPX_CODEC_INVALID_PARAM - * A parameter was NULL, or the usage value was not recognized. - */ -vpx_codec_err_t vpx_codec_enc_config_default(vpx_codec_iface_t *iface, - vpx_codec_enc_cfg_t *cfg, - unsigned int usage); - -/*!\brief Set or change configuration - * - * Reconfigures an encoder instance according to the given configuration. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] cfg Configuration buffer to use - * - * \retval #VPX_CODEC_OK - * The configuration was populated. - * \retval #VPX_CODEC_INCAPABLE - * Interface is not an encoder interface. - * \retval #VPX_CODEC_INVALID_PARAM - * A parameter was NULL, or the usage value was not recognized. - */ -vpx_codec_err_t vpx_codec_enc_config_set(vpx_codec_ctx_t *ctx, - const vpx_codec_enc_cfg_t *cfg); - -/*!\brief Get global stream headers - * - * Retrieves a stream level global header packet, if supported by the codec. - * - * \param[in] ctx Pointer to this instance's context - * - * \retval NULL - * Encoder does not support global header - * \retval Non-NULL - * Pointer to buffer containing global header packet - */ -vpx_fixed_buf_t *vpx_codec_get_global_headers(vpx_codec_ctx_t *ctx); - -/*!\brief deadline parameter analogous to VPx REALTIME mode. */ -#define VPX_DL_REALTIME (1) -/*!\brief deadline parameter analogous to VPx GOOD QUALITY mode. */ -#define VPX_DL_GOOD_QUALITY (1000000) -/*!\brief deadline parameter analogous to VPx BEST QUALITY mode. */ -#define VPX_DL_BEST_QUALITY (0) -/*!\brief Encode a frame - * - * Encodes a video frame at the given "presentation time." The presentation - * time stamp (PTS) \ref MUST be strictly increasing. - * - * The encoder supports the notion of a soft real-time deadline. Given a - * non-zero value to the deadline parameter, the encoder will make a "best - * effort" guarantee to return before the given time slice expires. It is - * implicit that limiting the available time to encode will degrade the - * output quality. The encoder can be given an unlimited time to produce the - * best possible frame by specifying a deadline of '0'. This deadline - * supersedes the VPx notion of "best quality, good quality, realtime". - * Applications that wish to map these former settings to the new deadline - * based system can use the symbols #VPX_DL_REALTIME, #VPX_DL_GOOD_QUALITY, - * and #VPX_DL_BEST_QUALITY. - * - * When the last frame has been passed to the encoder, this function should - * continue to be called, with the img parameter set to NULL. This will - * signal the end-of-stream condition to the encoder and allow it to encode - * any held buffers. Encoding is complete when vpx_codec_encode() is called - * and vpx_codec_get_cx_data() returns no data. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] img Image data to encode, NULL to flush. - * \param[in] pts Presentation time stamp, in timebase units. - * \param[in] duration Duration to show frame, in timebase units. - * \param[in] flags Flags to use for encoding this frame. - * \param[in] deadline Time to spend encoding, in microseconds. (0=infinite) - * - * \retval #VPX_CODEC_OK - * The configuration was populated. - * \retval #VPX_CODEC_INCAPABLE - * Interface is not an encoder interface. - * \retval #VPX_CODEC_INVALID_PARAM - * A parameter was NULL, the image format is unsupported, etc. - */ -vpx_codec_err_t vpx_codec_encode(vpx_codec_ctx_t *ctx, const vpx_image_t *img, - vpx_codec_pts_t pts, unsigned long duration, - vpx_enc_frame_flags_t flags, - unsigned long deadline); - -/*!\brief Set compressed data output buffer - * - * Sets the buffer that the codec should output the compressed data - * into. This call effectively sets the buffer pointer returned in the - * next VPX_CODEC_CX_FRAME_PKT packet. Subsequent packets will be - * appended into this buffer. The buffer is preserved across frames, - * so applications must periodically call this function after flushing - * the accumulated compressed data to disk or to the network to reset - * the pointer to the buffer's head. - * - * `pad_before` bytes will be skipped before writing the compressed - * data, and `pad_after` bytes will be appended to the packet. The size - * of the packet will be the sum of the size of the actual compressed - * data, pad_before, and pad_after. The padding bytes will be preserved - * (not overwritten). - * - * Note that calling this function does not guarantee that the returned - * compressed data will be placed into the specified buffer. In the - * event that the encoded data will not fit into the buffer provided, - * the returned packet \ref MAY point to an internal buffer, as it would - * if this call were never used. In this event, the output packet will - * NOT have any padding, and the application must free space and copy it - * to the proper place. This is of particular note in configurations - * that may output multiple packets for a single encoded frame (e.g., lagged - * encoding) or if the application does not reset the buffer periodically. - * - * Applications may restore the default behavior of the codec providing - * the compressed data buffer by calling this function with a NULL - * buffer. - * - * Applications \ref MUSTNOT call this function during iteration of - * vpx_codec_get_cx_data(). - * - * \param[in] ctx Pointer to this instance's context - * \param[in] buf Buffer to store compressed data into - * \param[in] pad_before Bytes to skip before writing compressed data - * \param[in] pad_after Bytes to skip after writing compressed data - * - * \retval #VPX_CODEC_OK - * The buffer was set successfully. - * \retval #VPX_CODEC_INVALID_PARAM - * A parameter was NULL, the image format is unsupported, etc. - */ -vpx_codec_err_t vpx_codec_set_cx_data_buf(vpx_codec_ctx_t *ctx, - const vpx_fixed_buf_t *buf, - unsigned int pad_before, - unsigned int pad_after); - -/*!\brief Encoded data iterator - * - * Iterates over a list of data packets to be passed from the encoder to the - * application. The different kinds of packets available are enumerated in - * #vpx_codec_cx_pkt_kind. - * - * #VPX_CODEC_CX_FRAME_PKT packets should be passed to the application's - * muxer. Multiple compressed frames may be in the list. - * #VPX_CODEC_STATS_PKT packets should be appended to a global buffer. - * - * The application \ref MUST silently ignore any packet kinds that it does - * not recognize or support. - * - * The data buffers returned from this function are only guaranteed to be - * valid until the application makes another call to any vpx_codec_* function. - * - * \param[in] ctx Pointer to this instance's context - * \param[in,out] iter Iterator storage, initialized to NULL - * - * \return Returns a pointer to an output data packet (compressed frame data, - * two-pass statistics, etc.) or NULL to signal end-of-list. - * - */ -const vpx_codec_cx_pkt_t *vpx_codec_get_cx_data(vpx_codec_ctx_t *ctx, - vpx_codec_iter_t *iter); - -/*!\brief Get Preview Frame - * - * Returns an image that can be used as a preview. Shows the image as it would - * exist at the decompressor. The application \ref MUST NOT write into this - * image buffer. - * - * \param[in] ctx Pointer to this instance's context - * - * \return Returns a pointer to a preview image, or NULL if no image is - * available. - * - */ -const vpx_image_t *vpx_codec_get_preview_frame(vpx_codec_ctx_t *ctx); - -/*!@} - end defgroup encoder*/ -#ifdef __cplusplus -} -#endif -#endif // VPX_VPX_VPX_ENCODER_H_ diff --git a/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vpx_frame_buffer.h b/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vpx_frame_buffer.h deleted file mode 100644 index 2813ca6d..00000000 --- a/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vpx_frame_buffer.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2014 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef VPX_VPX_VPX_FRAME_BUFFER_H_ -#define VPX_VPX_VPX_FRAME_BUFFER_H_ - -/*!\file - * \brief Describes the decoder external frame buffer interface. - */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "./vpx_integer.h" - -/*!\brief The maximum number of work buffers used by libvpx. - * Support maximum 4 threads to decode video in parallel. - * Each thread will use one work buffer. - * TODO(hkuang): Add support to set number of worker threads dynamically. - */ -#define VPX_MAXIMUM_WORK_BUFFERS 8 - -/*!\brief The maximum number of reference buffers that a VP9 encoder may use. - */ -#define VP9_MAXIMUM_REF_BUFFERS 8 - -/*!\brief External frame buffer - * - * This structure holds allocated frame buffers used by the decoder. - */ -typedef struct vpx_codec_frame_buffer { - uint8_t *data; /**< Pointer to the data buffer */ - size_t size; /**< Size of data in bytes */ - void *priv; /**< Frame's private data */ -} vpx_codec_frame_buffer_t; - -/*!\brief get frame buffer callback prototype - * - * This callback is invoked by the decoder to retrieve data for the frame - * buffer in order for the decode call to complete. The callback must - * allocate at least min_size in bytes and assign it to fb->data. The callback - * must zero out all the data allocated. Then the callback must set fb->size - * to the allocated size. The application does not need to align the allocated - * data. The callback is triggered when the decoder needs a frame buffer to - * decode a compressed image into. This function may be called more than once - * for every call to vpx_codec_decode. The application may set fb->priv to - * some data which will be passed back in the ximage and the release function - * call. |fb| is guaranteed to not be NULL. On success the callback must - * return 0. Any failure the callback must return a value less than 0. - * - * \param[in] priv Callback's private data - * \param[in] min_size Size in bytes needed by the buffer - * \param[in,out] fb Pointer to vpx_codec_frame_buffer_t - */ -typedef int (*vpx_get_frame_buffer_cb_fn_t)(void *priv, size_t min_size, - vpx_codec_frame_buffer_t *fb); - -/*!\brief release frame buffer callback prototype - * - * This callback is invoked by the decoder when the frame buffer is not - * referenced by any other buffers. |fb| is guaranteed to not be NULL. On - * success the callback must return 0. Any failure the callback must return - * a value less than 0. - * - * \param[in] priv Callback's private data - * \param[in] fb Pointer to vpx_codec_frame_buffer_t - */ -typedef int (*vpx_release_frame_buffer_cb_fn_t)(void *priv, - vpx_codec_frame_buffer_t *fb); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // VPX_VPX_VPX_FRAME_BUFFER_H_ diff --git a/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vpx_image.h b/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vpx_image.h deleted file mode 100644 index 98be5966..00000000 --- a/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vpx_image.h +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -/*!\file - * \brief Describes the vpx image descriptor and associated operations - * - */ -#ifndef VPX_VPX_VPX_IMAGE_H_ -#define VPX_VPX_VPX_IMAGE_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*!\brief Current ABI version number - * - * \internal - * If this file is altered in any way that changes the ABI, this value - * must be bumped. Examples include, but are not limited to, changing - * types, removing or reassigning enums, adding/removing/rearranging - * fields to structures - */ -#define VPX_IMAGE_ABI_VERSION (5) /**<\hideinitializer*/ - -#define VPX_IMG_FMT_PLANAR 0x100 /**< Image is a planar format. */ -#define VPX_IMG_FMT_UV_FLIP 0x200 /**< V plane precedes U in memory. */ -#define VPX_IMG_FMT_HAS_ALPHA 0x400 /**< Image has an alpha channel. */ -#define VPX_IMG_FMT_HIGHBITDEPTH 0x800 /**< Image uses 16bit framebuffer. */ - -/*!\brief List of supported image formats */ -typedef enum vpx_img_fmt { - VPX_IMG_FMT_NONE, - VPX_IMG_FMT_YV12 = - VPX_IMG_FMT_PLANAR | VPX_IMG_FMT_UV_FLIP | 1, /**< planar YVU */ - VPX_IMG_FMT_I420 = VPX_IMG_FMT_PLANAR | 2, - VPX_IMG_FMT_I422 = VPX_IMG_FMT_PLANAR | 5, - VPX_IMG_FMT_I444 = VPX_IMG_FMT_PLANAR | 6, - VPX_IMG_FMT_I440 = VPX_IMG_FMT_PLANAR | 7, - VPX_IMG_FMT_I42016 = VPX_IMG_FMT_I420 | VPX_IMG_FMT_HIGHBITDEPTH, - VPX_IMG_FMT_I42216 = VPX_IMG_FMT_I422 | VPX_IMG_FMT_HIGHBITDEPTH, - VPX_IMG_FMT_I44416 = VPX_IMG_FMT_I444 | VPX_IMG_FMT_HIGHBITDEPTH, - VPX_IMG_FMT_I44016 = VPX_IMG_FMT_I440 | VPX_IMG_FMT_HIGHBITDEPTH -} vpx_img_fmt_t; /**< alias for enum vpx_img_fmt */ - -/*!\brief List of supported color spaces */ -typedef enum vpx_color_space { - VPX_CS_UNKNOWN = 0, /**< Unknown */ - VPX_CS_BT_601 = 1, /**< BT.601 */ - VPX_CS_BT_709 = 2, /**< BT.709 */ - VPX_CS_SMPTE_170 = 3, /**< SMPTE.170 */ - VPX_CS_SMPTE_240 = 4, /**< SMPTE.240 */ - VPX_CS_BT_2020 = 5, /**< BT.2020 */ - VPX_CS_RESERVED = 6, /**< Reserved */ - VPX_CS_SRGB = 7 /**< sRGB */ -} vpx_color_space_t; /**< alias for enum vpx_color_space */ - -/*!\brief List of supported color range */ -typedef enum vpx_color_range { - VPX_CR_STUDIO_RANGE = 0, /**< Y [16..235], UV [16..240] */ - VPX_CR_FULL_RANGE = 1 /**< YUV/RGB [0..255] */ -} vpx_color_range_t; /**< alias for enum vpx_color_range */ - -/**\brief Image Descriptor */ -typedef struct vpx_image { - vpx_img_fmt_t fmt; /**< Image Format */ - vpx_color_space_t cs; /**< Color Space */ - vpx_color_range_t range; /**< Color Range */ - - /* Image storage dimensions */ - unsigned int w; /**< Stored image width */ - unsigned int h; /**< Stored image height */ - unsigned int bit_depth; /**< Stored image bit-depth */ - - /* Image display dimensions */ - unsigned int d_w; /**< Displayed image width */ - unsigned int d_h; /**< Displayed image height */ - - /* Image intended rendering dimensions */ - unsigned int r_w; /**< Intended rendering image width */ - unsigned int r_h; /**< Intended rendering image height */ - - /* Chroma subsampling info */ - unsigned int x_chroma_shift; /**< subsampling order, X */ - unsigned int y_chroma_shift; /**< subsampling order, Y */ - -/* Image data pointers. */ -#define VPX_PLANE_PACKED 0 /**< To be used for all packed formats */ -#define VPX_PLANE_Y 0 /**< Y (Luminance) plane */ -#define VPX_PLANE_U 1 /**< U (Chroma) plane */ -#define VPX_PLANE_V 2 /**< V (Chroma) plane */ -#define VPX_PLANE_ALPHA 3 /**< A (Transparency) plane */ - unsigned char *planes[4]; /**< pointer to the top left pixel for each plane */ - int stride[4]; /**< stride between rows for each plane */ - - int bps; /**< bits per sample (for packed formats) */ - - /*!\brief The following member may be set by the application to associate - * data with this image. - */ - void *user_priv; - - /* The following members should be treated as private. */ - unsigned char *img_data; /**< private */ - int img_data_owner; /**< private */ - int self_allocd; /**< private */ - - void *fb_priv; /**< Frame buffer data associated with the image. */ -} vpx_image_t; /**< alias for struct vpx_image */ - -/**\brief Representation of a rectangle on a surface */ -typedef struct vpx_image_rect { - unsigned int x; /**< leftmost column */ - unsigned int y; /**< topmost row */ - unsigned int w; /**< width */ - unsigned int h; /**< height */ -} vpx_image_rect_t; /**< alias for struct vpx_image_rect */ - -/*!\brief Open a descriptor, allocating storage for the underlying image - * - * Returns a descriptor for storing an image of the given format. The - * storage for the descriptor is allocated on the heap. - * - * \param[in] img Pointer to storage for descriptor. If this parameter - * is NULL, the storage for the descriptor will be - * allocated on the heap. - * \param[in] fmt Format for the image - * \param[in] d_w Width of the image - * \param[in] d_h Height of the image - * \param[in] align Alignment, in bytes, of the image buffer and - * each row in the image(stride). - * - * \return Returns a pointer to the initialized image descriptor. If the img - * parameter is non-null, the value of the img parameter will be - * returned. - */ -vpx_image_t *vpx_img_alloc(vpx_image_t *img, vpx_img_fmt_t fmt, - unsigned int d_w, unsigned int d_h, - unsigned int align); - -/*!\brief Open a descriptor, using existing storage for the underlying image - * - * Returns a descriptor for storing an image of the given format. The - * storage for descriptor has been allocated elsewhere, and a descriptor is - * desired to "wrap" that storage. - * - * \param[in] img Pointer to storage for descriptor. If this - * parameter is NULL, the storage for the descriptor - * will be allocated on the heap. - * \param[in] fmt Format for the image - * \param[in] d_w Width of the image - * \param[in] d_h Height of the image - * \param[in] stride_align Alignment, in bytes, of each row in the image. - * \param[in] img_data Storage to use for the image - * - * \return Returns a pointer to the initialized image descriptor. If the img - * parameter is non-null, the value of the img parameter will be - * returned. - */ -vpx_image_t *vpx_img_wrap(vpx_image_t *img, vpx_img_fmt_t fmt, unsigned int d_w, - unsigned int d_h, unsigned int stride_align, - unsigned char *img_data); - -/*!\brief Set the rectangle identifying the displayed portion of the image - * - * Updates the displayed rectangle (aka viewport) on the image surface to - * match the specified coordinates and size. - * - * \param[in] img Image descriptor - * \param[in] x leftmost column - * \param[in] y topmost row - * \param[in] w width - * \param[in] h height - * - * \return 0 if the requested rectangle is valid, nonzero otherwise. - */ -int vpx_img_set_rect(vpx_image_t *img, unsigned int x, unsigned int y, - unsigned int w, unsigned int h); - -/*!\brief Flip the image vertically (top for bottom) - * - * Adjusts the image descriptor's pointers and strides to make the image - * be referenced upside-down. - * - * \param[in] img Image descriptor - */ -void vpx_img_flip(vpx_image_t *img); - -/*!\brief Close an image descriptor - * - * Frees all allocated storage associated with an image descriptor. - * - * \param[in] img Image descriptor - */ -void vpx_img_free(vpx_image_t *img); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // VPX_VPX_VPX_IMAGE_H_ diff --git a/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vpx_integer.h b/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vpx_integer.h deleted file mode 100644 index 4129d156..00000000 --- a/vpx-encoder/android_libs/armeabi-v7a/include/vpx/vpx_integer.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef VPX_VPX_VPX_INTEGER_H_ -#define VPX_VPX_VPX_INTEGER_H_ - -/* get ptrdiff_t, size_t, wchar_t, NULL */ -#include - -#if defined(_MSC_VER) -#define VPX_FORCE_INLINE __forceinline -#define VPX_INLINE __inline -#else -#define VPX_FORCE_INLINE __inline__ __attribute__((always_inline)) -// TODO(jbb): Allow a way to force inline off for older compilers. -#define VPX_INLINE inline -#endif - -/* Assume platforms have the C99 standard integer types. */ - -#if defined(__cplusplus) -#if !defined(__STDC_FORMAT_MACROS) -#define __STDC_FORMAT_MACROS -#endif -#if !defined(__STDC_LIMIT_MACROS) -#define __STDC_LIMIT_MACROS -#endif -#endif // __cplusplus - -#include -#include - -#endif // VPX_VPX_VPX_INTEGER_H_ diff --git a/vpx-encoder/android_libs/armeabi-v7a/lib/libvpx.a b/vpx-encoder/android_libs/armeabi-v7a/lib/libvpx.a deleted file mode 100644 index 78cb3640..00000000 Binary files a/vpx-encoder/android_libs/armeabi-v7a/lib/libvpx.a and /dev/null differ diff --git a/vpx-encoder/android_libs/armeabi-v7a/lib/pkgconfig/vpx.pc b/vpx-encoder/android_libs/armeabi-v7a/lib/pkgconfig/vpx.pc deleted file mode 100644 index d1b771cc..00000000 --- a/vpx-encoder/android_libs/armeabi-v7a/lib/pkgconfig/vpx.pc +++ /dev/null @@ -1,14 +0,0 @@ -# pkg-config file from libvpx v1.8.0 -prefix=/Users/andy/go/src/github.com/webmproject/jni/vpx-android/output/android/armeabi-v7a -exec_prefix=${prefix} -libdir=${prefix}/lib -includedir=${prefix}/include - -Name: vpx -Description: WebM Project VPx codec implementation -Version: 1.8.0 -Requires: -Conflicts: -Libs: -L${libdir} -lvpx -lm -Libs.private: -lm -Cflags: -I${includedir} diff --git a/vpx-encoder/android_libs/x86/include/common/file_util.h b/vpx-encoder/android_libs/x86/include/common/file_util.h deleted file mode 100644 index a8737346..00000000 --- a/vpx-encoder/android_libs/x86/include/common/file_util.h +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) 2016 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -#ifndef LIBWEBM_COMMON_FILE_UTIL_H_ -#define LIBWEBM_COMMON_FILE_UTIL_H_ - -#include - -#include - -#include "mkvmuxer/mkvmuxertypes.h" // LIBWEBM_DISALLOW_COPY_AND_ASSIGN() - -namespace libwebm { - -// Returns a temporary file name. -std::string GetTempFileName(); - -// Returns size of file specified by |file_name|, or 0 upon failure. -uint64_t GetFileSize(const std::string& file_name); - -// Gets the contents file_name as a string. Returns false on error. -bool GetFileContents(const std::string& file_name, std::string* contents); - -// Manages life of temporary file specified at time of construction. Deletes -// file upon destruction. -class TempFileDeleter { - public: - TempFileDeleter(); - explicit TempFileDeleter(std::string file_name) : file_name_(file_name) {} - ~TempFileDeleter(); - const std::string& name() const { return file_name_; } - - private: - std::string file_name_; - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(TempFileDeleter); -}; - -} // namespace libwebm - -#endif // LIBWEBM_COMMON_FILE_UTIL_H_ diff --git a/vpx-encoder/android_libs/x86/include/common/hdr_util.h b/vpx-encoder/android_libs/x86/include/common/hdr_util.h deleted file mode 100644 index 78e2eeb7..00000000 --- a/vpx-encoder/android_libs/x86/include/common/hdr_util.h +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (c) 2016 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -#ifndef LIBWEBM_COMMON_HDR_UTIL_H_ -#define LIBWEBM_COMMON_HDR_UTIL_H_ - -#include - -#include - -#include "mkvmuxer/mkvmuxer.h" - -namespace mkvparser { -struct Colour; -struct MasteringMetadata; -struct PrimaryChromaticity; -} // namespace mkvparser - -namespace libwebm { -// Utility types and functions for working with the Colour element and its -// children. Copiers return true upon success. Presence functions return true -// when the specified element is present. - -// TODO(tomfinegan): These should be moved to libwebm_utils once c++11 is -// required by libwebm. - -// Features of the VP9 codec that may be set in the CodecPrivate of a VP9 video -// stream. A value of kValueNotPresent represents that the value was not set in -// the CodecPrivate. -struct Vp9CodecFeatures { - static const int kValueNotPresent; - - Vp9CodecFeatures() - : profile(kValueNotPresent), - level(kValueNotPresent), - bit_depth(kValueNotPresent), - chroma_subsampling(kValueNotPresent) {} - ~Vp9CodecFeatures() {} - - int profile; - int level; - int bit_depth; - int chroma_subsampling; -}; - -typedef std::unique_ptr PrimaryChromaticityPtr; - -bool CopyPrimaryChromaticity(const mkvparser::PrimaryChromaticity& parser_pc, - PrimaryChromaticityPtr* muxer_pc); - -bool MasteringMetadataValuePresent(double value); - -bool CopyMasteringMetadata(const mkvparser::MasteringMetadata& parser_mm, - mkvmuxer::MasteringMetadata* muxer_mm); - -bool ColourValuePresent(long long value); - -bool CopyColour(const mkvparser::Colour& parser_colour, - mkvmuxer::Colour* muxer_colour); - -// Returns true if |features| is set to one or more valid values. -bool ParseVpxCodecPrivate(const uint8_t* private_data, int32_t length, - Vp9CodecFeatures* features); - -} // namespace libwebm - -#endif // LIBWEBM_COMMON_HDR_UTIL_H_ diff --git a/vpx-encoder/android_libs/x86/include/common/webmids.h b/vpx-encoder/android_libs/x86/include/common/webmids.h deleted file mode 100644 index fc0c2081..00000000 --- a/vpx-encoder/android_libs/x86/include/common/webmids.h +++ /dev/null @@ -1,193 +0,0 @@ -// Copyright (c) 2012 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. - -#ifndef COMMON_WEBMIDS_H_ -#define COMMON_WEBMIDS_H_ - -namespace libwebm { - -enum MkvId { - kMkvEBML = 0x1A45DFA3, - kMkvEBMLVersion = 0x4286, - kMkvEBMLReadVersion = 0x42F7, - kMkvEBMLMaxIDLength = 0x42F2, - kMkvEBMLMaxSizeLength = 0x42F3, - kMkvDocType = 0x4282, - kMkvDocTypeVersion = 0x4287, - kMkvDocTypeReadVersion = 0x4285, - kMkvVoid = 0xEC, - kMkvSignatureSlot = 0x1B538667, - kMkvSignatureAlgo = 0x7E8A, - kMkvSignatureHash = 0x7E9A, - kMkvSignaturePublicKey = 0x7EA5, - kMkvSignature = 0x7EB5, - kMkvSignatureElements = 0x7E5B, - kMkvSignatureElementList = 0x7E7B, - kMkvSignedElement = 0x6532, - // segment - kMkvSegment = 0x18538067, - // Meta Seek Information - kMkvSeekHead = 0x114D9B74, - kMkvSeek = 0x4DBB, - kMkvSeekID = 0x53AB, - kMkvSeekPosition = 0x53AC, - // Segment Information - kMkvInfo = 0x1549A966, - kMkvTimecodeScale = 0x2AD7B1, - kMkvDuration = 0x4489, - kMkvDateUTC = 0x4461, - kMkvTitle = 0x7BA9, - kMkvMuxingApp = 0x4D80, - kMkvWritingApp = 0x5741, - // Cluster - kMkvCluster = 0x1F43B675, - kMkvTimecode = 0xE7, - kMkvPrevSize = 0xAB, - kMkvBlockGroup = 0xA0, - kMkvBlock = 0xA1, - kMkvBlockDuration = 0x9B, - kMkvReferenceBlock = 0xFB, - kMkvLaceNumber = 0xCC, - kMkvSimpleBlock = 0xA3, - kMkvBlockAdditions = 0x75A1, - kMkvBlockMore = 0xA6, - kMkvBlockAddID = 0xEE, - kMkvBlockAdditional = 0xA5, - kMkvDiscardPadding = 0x75A2, - // Track - kMkvTracks = 0x1654AE6B, - kMkvTrackEntry = 0xAE, - kMkvTrackNumber = 0xD7, - kMkvTrackUID = 0x73C5, - kMkvTrackType = 0x83, - kMkvFlagEnabled = 0xB9, - kMkvFlagDefault = 0x88, - kMkvFlagForced = 0x55AA, - kMkvFlagLacing = 0x9C, - kMkvDefaultDuration = 0x23E383, - kMkvMaxBlockAdditionID = 0x55EE, - kMkvName = 0x536E, - kMkvLanguage = 0x22B59C, - kMkvCodecID = 0x86, - kMkvCodecPrivate = 0x63A2, - kMkvCodecName = 0x258688, - kMkvCodecDelay = 0x56AA, - kMkvSeekPreRoll = 0x56BB, - // video - kMkvVideo = 0xE0, - kMkvFlagInterlaced = 0x9A, - kMkvStereoMode = 0x53B8, - kMkvAlphaMode = 0x53C0, - kMkvPixelWidth = 0xB0, - kMkvPixelHeight = 0xBA, - kMkvPixelCropBottom = 0x54AA, - kMkvPixelCropTop = 0x54BB, - kMkvPixelCropLeft = 0x54CC, - kMkvPixelCropRight = 0x54DD, - kMkvDisplayWidth = 0x54B0, - kMkvDisplayHeight = 0x54BA, - kMkvDisplayUnit = 0x54B2, - kMkvAspectRatioType = 0x54B3, - kMkvColourSpace = 0x2EB524, - kMkvFrameRate = 0x2383E3, - // end video - // colour - kMkvColour = 0x55B0, - kMkvMatrixCoefficients = 0x55B1, - kMkvBitsPerChannel = 0x55B2, - kMkvChromaSubsamplingHorz = 0x55B3, - kMkvChromaSubsamplingVert = 0x55B4, - kMkvCbSubsamplingHorz = 0x55B5, - kMkvCbSubsamplingVert = 0x55B6, - kMkvChromaSitingHorz = 0x55B7, - kMkvChromaSitingVert = 0x55B8, - kMkvRange = 0x55B9, - kMkvTransferCharacteristics = 0x55BA, - kMkvPrimaries = 0x55BB, - kMkvMaxCLL = 0x55BC, - kMkvMaxFALL = 0x55BD, - // mastering metadata - kMkvMasteringMetadata = 0x55D0, - kMkvPrimaryRChromaticityX = 0x55D1, - kMkvPrimaryRChromaticityY = 0x55D2, - kMkvPrimaryGChromaticityX = 0x55D3, - kMkvPrimaryGChromaticityY = 0x55D4, - kMkvPrimaryBChromaticityX = 0x55D5, - kMkvPrimaryBChromaticityY = 0x55D6, - kMkvWhitePointChromaticityX = 0x55D7, - kMkvWhitePointChromaticityY = 0x55D8, - kMkvLuminanceMax = 0x55D9, - kMkvLuminanceMin = 0x55DA, - // end mastering metadata - // end colour - // projection - kMkvProjection = 0x7670, - kMkvProjectionType = 0x7671, - kMkvProjectionPrivate = 0x7672, - kMkvProjectionPoseYaw = 0x7673, - kMkvProjectionPosePitch = 0x7674, - kMkvProjectionPoseRoll = 0x7675, - // end projection - // audio - kMkvAudio = 0xE1, - kMkvSamplingFrequency = 0xB5, - kMkvOutputSamplingFrequency = 0x78B5, - kMkvChannels = 0x9F, - kMkvBitDepth = 0x6264, - // end audio - // ContentEncodings - kMkvContentEncodings = 0x6D80, - kMkvContentEncoding = 0x6240, - kMkvContentEncodingOrder = 0x5031, - kMkvContentEncodingScope = 0x5032, - kMkvContentEncodingType = 0x5033, - kMkvContentCompression = 0x5034, - kMkvContentCompAlgo = 0x4254, - kMkvContentCompSettings = 0x4255, - kMkvContentEncryption = 0x5035, - kMkvContentEncAlgo = 0x47E1, - kMkvContentEncKeyID = 0x47E2, - kMkvContentSignature = 0x47E3, - kMkvContentSigKeyID = 0x47E4, - kMkvContentSigAlgo = 0x47E5, - kMkvContentSigHashAlgo = 0x47E6, - kMkvContentEncAESSettings = 0x47E7, - kMkvAESSettingsCipherMode = 0x47E8, - kMkvAESSettingsCipherInitData = 0x47E9, - // end ContentEncodings - // Cueing Data - kMkvCues = 0x1C53BB6B, - kMkvCuePoint = 0xBB, - kMkvCueTime = 0xB3, - kMkvCueTrackPositions = 0xB7, - kMkvCueTrack = 0xF7, - kMkvCueClusterPosition = 0xF1, - kMkvCueBlockNumber = 0x5378, - // Chapters - kMkvChapters = 0x1043A770, - kMkvEditionEntry = 0x45B9, - kMkvChapterAtom = 0xB6, - kMkvChapterUID = 0x73C4, - kMkvChapterStringUID = 0x5654, - kMkvChapterTimeStart = 0x91, - kMkvChapterTimeEnd = 0x92, - kMkvChapterDisplay = 0x80, - kMkvChapString = 0x85, - kMkvChapLanguage = 0x437C, - kMkvChapCountry = 0x437E, - // Tags - kMkvTags = 0x1254C367, - kMkvTag = 0x7373, - kMkvSimpleTag = 0x67C8, - kMkvTagName = 0x45A3, - kMkvTagString = 0x4487 -}; - -} // namespace libwebm - -#endif // COMMON_WEBMIDS_H_ diff --git a/vpx-encoder/android_libs/x86/include/mkvmuxer/mkvmuxer.h b/vpx-encoder/android_libs/x86/include/mkvmuxer/mkvmuxer.h deleted file mode 100644 index f2db3771..00000000 --- a/vpx-encoder/android_libs/x86/include/mkvmuxer/mkvmuxer.h +++ /dev/null @@ -1,1924 +0,0 @@ -// Copyright (c) 2012 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. - -#ifndef MKVMUXER_MKVMUXER_H_ -#define MKVMUXER_MKVMUXER_H_ - -#include - -#include -#include -#include - -#include "common/webmids.h" -#include "mkvmuxer/mkvmuxertypes.h" - -// For a description of the WebM elements see -// http://www.webmproject.org/code/specs/container/. - -namespace mkvparser { -class IMkvReader; -} // namespace mkvparser - -namespace mkvmuxer { - -class MkvWriter; -class Segment; - -const uint64_t kMaxTrackNumber = 126; - -/////////////////////////////////////////////////////////////// -// Interface used by the mkvmuxer to write out the Mkv data. -class IMkvWriter { - public: - // Writes out |len| bytes of |buf|. Returns 0 on success. - virtual int32 Write(const void* buf, uint32 len) = 0; - - // Returns the offset of the output position from the beginning of the - // output. - virtual int64 Position() const = 0; - - // Set the current File position. Returns 0 on success. - virtual int32 Position(int64 position) = 0; - - // Returns true if the writer is seekable. - virtual bool Seekable() const = 0; - - // Element start notification. Called whenever an element identifier is about - // to be written to the stream. |element_id| is the element identifier, and - // |position| is the location in the WebM stream where the first octet of the - // element identifier will be written. - // Note: the |MkvId| enumeration in webmids.hpp defines element values. - virtual void ElementStartNotify(uint64 element_id, int64 position) = 0; - - protected: - IMkvWriter(); - virtual ~IMkvWriter(); - - private: - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(IMkvWriter); -}; - -// Writes out the EBML header for a WebM file, but allows caller to specify -// DocType. This function must be called before any other libwebm writing -// functions are called. -bool WriteEbmlHeader(IMkvWriter* writer, uint64_t doc_type_version, - const char* const doc_type); - -// Writes out the EBML header for a WebM file. This function must be called -// before any other libwebm writing functions are called. -bool WriteEbmlHeader(IMkvWriter* writer, uint64_t doc_type_version); - -// Deprecated. Writes out EBML header with doc_type_version as -// kDefaultDocTypeVersion. Exists for backward compatibility. -bool WriteEbmlHeader(IMkvWriter* writer); - -// Copies in Chunk from source to destination between the given byte positions -bool ChunkedCopy(mkvparser::IMkvReader* source, IMkvWriter* dst, int64_t start, - int64_t size); - -/////////////////////////////////////////////////////////////// -// Class to hold data the will be written to a block. -class Frame { - public: - Frame(); - ~Frame(); - - // Sets this frame's contents based on |frame|. Returns true on success. On - // failure, this frame's existing contents may be lost. - bool CopyFrom(const Frame& frame); - - // Copies |frame| data into |frame_|. Returns true on success. - bool Init(const uint8_t* frame, uint64_t length); - - // Copies |additional| data into |additional_|. Returns true on success. - bool AddAdditionalData(const uint8_t* additional, uint64_t length, - uint64_t add_id); - - // Returns true if the frame has valid parameters. - bool IsValid() const; - - // Returns true if the frame can be written as a SimpleBlock based on current - // parameters. - bool CanBeSimpleBlock() const; - - uint64_t add_id() const { return add_id_; } - const uint8_t* additional() const { return additional_; } - uint64_t additional_length() const { return additional_length_; } - void set_duration(uint64_t duration); - uint64_t duration() const { return duration_; } - bool duration_set() const { return duration_set_; } - const uint8_t* frame() const { return frame_; } - void set_is_key(bool key) { is_key_ = key; } - bool is_key() const { return is_key_; } - uint64_t length() const { return length_; } - void set_track_number(uint64_t track_number) { track_number_ = track_number; } - uint64_t track_number() const { return track_number_; } - void set_timestamp(uint64_t timestamp) { timestamp_ = timestamp; } - uint64_t timestamp() const { return timestamp_; } - void set_discard_padding(int64_t discard_padding) { - discard_padding_ = discard_padding; - } - int64_t discard_padding() const { return discard_padding_; } - void set_reference_block_timestamp(int64_t reference_block_timestamp); - int64_t reference_block_timestamp() const { - return reference_block_timestamp_; - } - bool reference_block_timestamp_set() const { - return reference_block_timestamp_set_; - } - - private: - // Id of the Additional data. - uint64_t add_id_; - - // Pointer to additional data. Owned by this class. - uint8_t* additional_; - - // Length of the additional data. - uint64_t additional_length_; - - // Duration of the frame in nanoseconds. - uint64_t duration_; - - // Flag indicating that |duration_| has been set. Setting duration causes the - // frame to be written out as a Block with BlockDuration instead of as a - // SimpleBlock. - bool duration_set_; - - // Pointer to the data. Owned by this class. - uint8_t* frame_; - - // Flag telling if the data should set the key flag of a block. - bool is_key_; - - // Length of the data. - uint64_t length_; - - // Mkv track number the data is associated with. - uint64_t track_number_; - - // Timestamp of the data in nanoseconds. - uint64_t timestamp_; - - // Discard padding for the frame. - int64_t discard_padding_; - - // Reference block timestamp. - int64_t reference_block_timestamp_; - - // Flag indicating if |reference_block_timestamp_| has been set. - bool reference_block_timestamp_set_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Frame); -}; - -/////////////////////////////////////////////////////////////// -// Class to hold one cue point in a Cues element. -class CuePoint { - public: - CuePoint(); - ~CuePoint(); - - // Returns the size in bytes for the entire CuePoint element. - uint64_t Size() const; - - // Output the CuePoint element to the writer. Returns true on success. - bool Write(IMkvWriter* writer) const; - - void set_time(uint64_t time) { time_ = time; } - uint64_t time() const { return time_; } - void set_track(uint64_t track) { track_ = track; } - uint64_t track() const { return track_; } - void set_cluster_pos(uint64_t cluster_pos) { cluster_pos_ = cluster_pos; } - uint64_t cluster_pos() const { return cluster_pos_; } - void set_block_number(uint64_t block_number) { block_number_ = block_number; } - uint64_t block_number() const { return block_number_; } - void set_output_block_number(bool output_block_number) { - output_block_number_ = output_block_number; - } - bool output_block_number() const { return output_block_number_; } - - private: - // Returns the size in bytes for the payload of the CuePoint element. - uint64_t PayloadSize() const; - - // Absolute timecode according to the segment time base. - uint64_t time_; - - // The Track element associated with the CuePoint. - uint64_t track_; - - // The position of the Cluster containing the Block. - uint64_t cluster_pos_; - - // Number of the Block within the Cluster, starting from 1. - uint64_t block_number_; - - // If true the muxer will write out the block number for the cue if the - // block number is different than the default of 1. Default is set to true. - bool output_block_number_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(CuePoint); -}; - -/////////////////////////////////////////////////////////////// -// Cues element. -class Cues { - public: - Cues(); - ~Cues(); - - // Adds a cue point to the Cues element. Returns true on success. - bool AddCue(CuePoint* cue); - - // Returns the cue point by index. Returns NULL if there is no cue point - // match. - CuePoint* GetCueByIndex(int32_t index) const; - - // Returns the total size of the Cues element - uint64_t Size(); - - // Output the Cues element to the writer. Returns true on success. - bool Write(IMkvWriter* writer) const; - - int32_t cue_entries_size() const { return cue_entries_size_; } - void set_output_block_number(bool output_block_number) { - output_block_number_ = output_block_number; - } - bool output_block_number() const { return output_block_number_; } - - private: - // Number of allocated elements in |cue_entries_|. - int32_t cue_entries_capacity_; - - // Number of CuePoints in |cue_entries_|. - int32_t cue_entries_size_; - - // CuePoint list. - CuePoint** cue_entries_; - - // If true the muxer will write out the block number for the cue if the - // block number is different than the default of 1. Default is set to true. - bool output_block_number_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Cues); -}; - -/////////////////////////////////////////////////////////////// -// ContentEncAESSettings element -class ContentEncAESSettings { - public: - enum { kCTR = 1 }; - - ContentEncAESSettings(); - ~ContentEncAESSettings() {} - - // Returns the size in bytes for the ContentEncAESSettings element. - uint64_t Size() const; - - // Writes out the ContentEncAESSettings element to |writer|. Returns true on - // success. - bool Write(IMkvWriter* writer) const; - - uint64_t cipher_mode() const { return cipher_mode_; } - - private: - // Returns the size in bytes for the payload of the ContentEncAESSettings - // element. - uint64_t PayloadSize() const; - - // Sub elements - uint64_t cipher_mode_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(ContentEncAESSettings); -}; - -/////////////////////////////////////////////////////////////// -// ContentEncoding element -// Elements used to describe if the track data has been encrypted or -// compressed with zlib or header stripping. -// Currently only whole frames can be encrypted with AES. This dictates that -// ContentEncodingOrder will be 0, ContentEncodingScope will be 1, -// ContentEncodingType will be 1, and ContentEncAlgo will be 5. -class ContentEncoding { - public: - ContentEncoding(); - ~ContentEncoding(); - - // Sets the content encryption id. Copies |length| bytes from |id| to - // |enc_key_id_|. Returns true on success. - bool SetEncryptionID(const uint8_t* id, uint64_t length); - - // Returns the size in bytes for the ContentEncoding element. - uint64_t Size() const; - - // Writes out the ContentEncoding element to |writer|. Returns true on - // success. - bool Write(IMkvWriter* writer) const; - - uint64_t enc_algo() const { return enc_algo_; } - uint64_t encoding_order() const { return encoding_order_; } - uint64_t encoding_scope() const { return encoding_scope_; } - uint64_t encoding_type() const { return encoding_type_; } - ContentEncAESSettings* enc_aes_settings() { return &enc_aes_settings_; } - - private: - // Returns the size in bytes for the encoding elements. - uint64_t EncodingSize(uint64_t compresion_size, - uint64_t encryption_size) const; - - // Returns the size in bytes for the encryption elements. - uint64_t EncryptionSize() const; - - // Track element names - uint64_t enc_algo_; - uint8_t* enc_key_id_; - uint64_t encoding_order_; - uint64_t encoding_scope_; - uint64_t encoding_type_; - - // ContentEncAESSettings element. - ContentEncAESSettings enc_aes_settings_; - - // Size of the ContentEncKeyID data in bytes. - uint64_t enc_key_id_length_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(ContentEncoding); -}; - -/////////////////////////////////////////////////////////////// -// Colour element. -class PrimaryChromaticity { - public: - static const float kChromaticityMin; - static const float kChromaticityMax; - - PrimaryChromaticity(float x_val, float y_val) : x_(x_val), y_(y_val) {} - PrimaryChromaticity() : x_(0), y_(0) {} - ~PrimaryChromaticity() {} - - // Returns sum of |x_id| and |y_id| element id sizes and payload sizes. - uint64_t PrimaryChromaticitySize(libwebm::MkvId x_id, - libwebm::MkvId y_id) const; - bool Valid() const; - bool Write(IMkvWriter* writer, libwebm::MkvId x_id, - libwebm::MkvId y_id) const; - - float x() const { return x_; } - void set_x(float new_x) { x_ = new_x; } - float y() const { return y_; } - void set_y(float new_y) { y_ = new_y; } - - private: - float x_; - float y_; -}; - -class MasteringMetadata { - public: - static const float kValueNotPresent; - static const float kMinLuminance; - static const float kMinLuminanceMax; - static const float kMaxLuminanceMax; - - MasteringMetadata() - : luminance_max_(kValueNotPresent), - luminance_min_(kValueNotPresent), - r_(NULL), - g_(NULL), - b_(NULL), - white_point_(NULL) {} - ~MasteringMetadata() { - delete r_; - delete g_; - delete b_; - delete white_point_; - } - - // Returns total size of the MasteringMetadata element. - uint64_t MasteringMetadataSize() const; - bool Valid() const; - bool Write(IMkvWriter* writer) const; - - // Copies non-null chromaticity. - bool SetChromaticity(const PrimaryChromaticity* r, - const PrimaryChromaticity* g, - const PrimaryChromaticity* b, - const PrimaryChromaticity* white_point); - const PrimaryChromaticity* r() const { return r_; } - const PrimaryChromaticity* g() const { return g_; } - const PrimaryChromaticity* b() const { return b_; } - const PrimaryChromaticity* white_point() const { return white_point_; } - - float luminance_max() const { return luminance_max_; } - void set_luminance_max(float luminance_max) { - luminance_max_ = luminance_max; - } - float luminance_min() const { return luminance_min_; } - void set_luminance_min(float luminance_min) { - luminance_min_ = luminance_min; - } - - private: - // Returns size of MasteringMetadata child elements. - uint64_t PayloadSize() const; - - float luminance_max_; - float luminance_min_; - PrimaryChromaticity* r_; - PrimaryChromaticity* g_; - PrimaryChromaticity* b_; - PrimaryChromaticity* white_point_; -}; - -class Colour { - public: - enum MatrixCoefficients { - kGbr = 0, - kBt709 = 1, - kUnspecifiedMc = 2, - kReserved = 3, - kFcc = 4, - kBt470bg = 5, - kSmpte170MMc = 6, - kSmpte240MMc = 7, - kYcocg = 8, - kBt2020NonConstantLuminance = 9, - kBt2020ConstantLuminance = 10, - }; - enum ChromaSitingHorz { - kUnspecifiedCsh = 0, - kLeftCollocated = 1, - kHalfCsh = 2, - }; - enum ChromaSitingVert { - kUnspecifiedCsv = 0, - kTopCollocated = 1, - kHalfCsv = 2, - }; - enum Range { - kUnspecifiedCr = 0, - kBroadcastRange = 1, - kFullRange = 2, - kMcTcDefined = 3, // Defined by MatrixCoefficients/TransferCharacteristics. - }; - enum TransferCharacteristics { - kIturBt709Tc = 1, - kUnspecifiedTc = 2, - kReservedTc = 3, - kGamma22Curve = 4, - kGamma28Curve = 5, - kSmpte170MTc = 6, - kSmpte240MTc = 7, - kLinear = 8, - kLog = 9, - kLogSqrt = 10, - kIec6196624 = 11, - kIturBt1361ExtendedColourGamut = 12, - kIec6196621 = 13, - kIturBt202010bit = 14, - kIturBt202012bit = 15, - kSmpteSt2084 = 16, - kSmpteSt4281Tc = 17, - kAribStdB67Hlg = 18, - }; - enum Primaries { - kReservedP0 = 0, - kIturBt709P = 1, - kUnspecifiedP = 2, - kReservedP3 = 3, - kIturBt470M = 4, - kIturBt470Bg = 5, - kSmpte170MP = 6, - kSmpte240MP = 7, - kFilm = 8, - kIturBt2020 = 9, - kSmpteSt4281P = 10, - kJedecP22Phosphors = 22, - }; - static const uint64_t kValueNotPresent; - Colour() - : matrix_coefficients_(kValueNotPresent), - bits_per_channel_(kValueNotPresent), - chroma_subsampling_horz_(kValueNotPresent), - chroma_subsampling_vert_(kValueNotPresent), - cb_subsampling_horz_(kValueNotPresent), - cb_subsampling_vert_(kValueNotPresent), - chroma_siting_horz_(kValueNotPresent), - chroma_siting_vert_(kValueNotPresent), - range_(kValueNotPresent), - transfer_characteristics_(kValueNotPresent), - primaries_(kValueNotPresent), - max_cll_(kValueNotPresent), - max_fall_(kValueNotPresent), - mastering_metadata_(NULL) {} - ~Colour() { delete mastering_metadata_; } - - // Returns total size of the Colour element. - uint64_t ColourSize() const; - bool Valid() const; - bool Write(IMkvWriter* writer) const; - - // Deep copies |mastering_metadata|. - bool SetMasteringMetadata(const MasteringMetadata& mastering_metadata); - - const MasteringMetadata* mastering_metadata() const { - return mastering_metadata_; - } - - uint64_t matrix_coefficients() const { return matrix_coefficients_; } - void set_matrix_coefficients(uint64_t matrix_coefficients) { - matrix_coefficients_ = matrix_coefficients; - } - uint64_t bits_per_channel() const { return bits_per_channel_; } - void set_bits_per_channel(uint64_t bits_per_channel) { - bits_per_channel_ = bits_per_channel; - } - uint64_t chroma_subsampling_horz() const { return chroma_subsampling_horz_; } - void set_chroma_subsampling_horz(uint64_t chroma_subsampling_horz) { - chroma_subsampling_horz_ = chroma_subsampling_horz; - } - uint64_t chroma_subsampling_vert() const { return chroma_subsampling_vert_; } - void set_chroma_subsampling_vert(uint64_t chroma_subsampling_vert) { - chroma_subsampling_vert_ = chroma_subsampling_vert; - } - uint64_t cb_subsampling_horz() const { return cb_subsampling_horz_; } - void set_cb_subsampling_horz(uint64_t cb_subsampling_horz) { - cb_subsampling_horz_ = cb_subsampling_horz; - } - uint64_t cb_subsampling_vert() const { return cb_subsampling_vert_; } - void set_cb_subsampling_vert(uint64_t cb_subsampling_vert) { - cb_subsampling_vert_ = cb_subsampling_vert; - } - uint64_t chroma_siting_horz() const { return chroma_siting_horz_; } - void set_chroma_siting_horz(uint64_t chroma_siting_horz) { - chroma_siting_horz_ = chroma_siting_horz; - } - uint64_t chroma_siting_vert() const { return chroma_siting_vert_; } - void set_chroma_siting_vert(uint64_t chroma_siting_vert) { - chroma_siting_vert_ = chroma_siting_vert; - } - uint64_t range() const { return range_; } - void set_range(uint64_t range) { range_ = range; } - uint64_t transfer_characteristics() const { - return transfer_characteristics_; - } - void set_transfer_characteristics(uint64_t transfer_characteristics) { - transfer_characteristics_ = transfer_characteristics; - } - uint64_t primaries() const { return primaries_; } - void set_primaries(uint64_t primaries) { primaries_ = primaries; } - uint64_t max_cll() const { return max_cll_; } - void set_max_cll(uint64_t max_cll) { max_cll_ = max_cll; } - uint64_t max_fall() const { return max_fall_; } - void set_max_fall(uint64_t max_fall) { max_fall_ = max_fall; } - - private: - // Returns size of Colour child elements. - uint64_t PayloadSize() const; - - uint64_t matrix_coefficients_; - uint64_t bits_per_channel_; - uint64_t chroma_subsampling_horz_; - uint64_t chroma_subsampling_vert_; - uint64_t cb_subsampling_horz_; - uint64_t cb_subsampling_vert_; - uint64_t chroma_siting_horz_; - uint64_t chroma_siting_vert_; - uint64_t range_; - uint64_t transfer_characteristics_; - uint64_t primaries_; - uint64_t max_cll_; - uint64_t max_fall_; - - MasteringMetadata* mastering_metadata_; -}; - -/////////////////////////////////////////////////////////////// -// Projection element. -class Projection { - public: - enum ProjectionType { - kTypeNotPresent = -1, - kRectangular = 0, - kEquirectangular = 1, - kCubeMap = 2, - kMesh = 3, - }; - static const uint64_t kValueNotPresent; - Projection() - : type_(kRectangular), - pose_yaw_(0.0), - pose_pitch_(0.0), - pose_roll_(0.0), - private_data_(NULL), - private_data_length_(0) {} - ~Projection() { delete[] private_data_; } - - uint64_t ProjectionSize() const; - bool Write(IMkvWriter* writer) const; - - bool SetProjectionPrivate(const uint8_t* private_data, - uint64_t private_data_length); - - ProjectionType type() const { return type_; } - void set_type(ProjectionType type) { type_ = type; } - float pose_yaw() const { return pose_yaw_; } - void set_pose_yaw(float pose_yaw) { pose_yaw_ = pose_yaw; } - float pose_pitch() const { return pose_pitch_; } - void set_pose_pitch(float pose_pitch) { pose_pitch_ = pose_pitch; } - float pose_roll() const { return pose_roll_; } - void set_pose_roll(float pose_roll) { pose_roll_ = pose_roll; } - uint8_t* private_data() const { return private_data_; } - uint64_t private_data_length() const { return private_data_length_; } - - private: - // Returns size of VideoProjection child elements. - uint64_t PayloadSize() const; - - ProjectionType type_; - float pose_yaw_; - float pose_pitch_; - float pose_roll_; - uint8_t* private_data_; - uint64_t private_data_length_; -}; - -/////////////////////////////////////////////////////////////// -// Track element. -class Track { - public: - // The |seed| parameter is used to synthesize a UID for the track. - explicit Track(unsigned int* seed); - virtual ~Track(); - - // Adds a ContentEncoding element to the Track. Returns true on success. - virtual bool AddContentEncoding(); - - // Returns the ContentEncoding by index. Returns NULL if there is no - // ContentEncoding match. - ContentEncoding* GetContentEncodingByIndex(uint32_t index) const; - - // Returns the size in bytes for the payload of the Track element. - virtual uint64_t PayloadSize() const; - - // Returns the size in bytes of the Track element. - virtual uint64_t Size() const; - - // Output the Track element to the writer. Returns true on success. - virtual bool Write(IMkvWriter* writer) const; - - // Sets the CodecPrivate element of the Track element. Copies |length| - // bytes from |codec_private| to |codec_private_|. Returns true on success. - bool SetCodecPrivate(const uint8_t* codec_private, uint64_t length); - - void set_codec_id(const char* codec_id); - const char* codec_id() const { return codec_id_; } - const uint8_t* codec_private() const { return codec_private_; } - void set_language(const char* language); - const char* language() const { return language_; } - void set_max_block_additional_id(uint64_t max_block_additional_id) { - max_block_additional_id_ = max_block_additional_id; - } - uint64_t max_block_additional_id() const { return max_block_additional_id_; } - void set_name(const char* name); - const char* name() const { return name_; } - void set_number(uint64_t number) { number_ = number; } - uint64_t number() const { return number_; } - void set_type(uint64_t type) { type_ = type; } - uint64_t type() const { return type_; } - void set_uid(uint64_t uid) { uid_ = uid; } - uint64_t uid() const { return uid_; } - void set_codec_delay(uint64_t codec_delay) { codec_delay_ = codec_delay; } - uint64_t codec_delay() const { return codec_delay_; } - void set_seek_pre_roll(uint64_t seek_pre_roll) { - seek_pre_roll_ = seek_pre_roll; - } - uint64_t seek_pre_roll() const { return seek_pre_roll_; } - void set_default_duration(uint64_t default_duration) { - default_duration_ = default_duration; - } - uint64_t default_duration() const { return default_duration_; } - - uint64_t codec_private_length() const { return codec_private_length_; } - uint32_t content_encoding_entries_size() const { - return content_encoding_entries_size_; - } - - private: - // Track element names. - char* codec_id_; - uint8_t* codec_private_; - char* language_; - uint64_t max_block_additional_id_; - char* name_; - uint64_t number_; - uint64_t type_; - uint64_t uid_; - uint64_t codec_delay_; - uint64_t seek_pre_roll_; - uint64_t default_duration_; - - // Size of the CodecPrivate data in bytes. - uint64_t codec_private_length_; - - // ContentEncoding element list. - ContentEncoding** content_encoding_entries_; - - // Number of ContentEncoding elements added. - uint32_t content_encoding_entries_size_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Track); -}; - -/////////////////////////////////////////////////////////////// -// Track that has video specific elements. -class VideoTrack : public Track { - public: - // Supported modes for stereo 3D. - enum StereoMode { - kMono = 0, - kSideBySideLeftIsFirst = 1, - kTopBottomRightIsFirst = 2, - kTopBottomLeftIsFirst = 3, - kSideBySideRightIsFirst = 11 - }; - - enum AlphaMode { kNoAlpha = 0, kAlpha = 1 }; - - // The |seed| parameter is used to synthesize a UID for the track. - explicit VideoTrack(unsigned int* seed); - virtual ~VideoTrack(); - - // Returns the size in bytes for the payload of the Track element plus the - // video specific elements. - virtual uint64_t PayloadSize() const; - - // Output the VideoTrack element to the writer. Returns true on success. - virtual bool Write(IMkvWriter* writer) const; - - // Sets the video's stereo mode. Returns true on success. - bool SetStereoMode(uint64_t stereo_mode); - - // Sets the video's alpha mode. Returns true on success. - bool SetAlphaMode(uint64_t alpha_mode); - - void set_display_height(uint64_t height) { display_height_ = height; } - uint64_t display_height() const { return display_height_; } - void set_display_width(uint64_t width) { display_width_ = width; } - uint64_t display_width() const { return display_width_; } - void set_pixel_height(uint64_t height) { pixel_height_ = height; } - uint64_t pixel_height() const { return pixel_height_; } - void set_pixel_width(uint64_t width) { pixel_width_ = width; } - uint64_t pixel_width() const { return pixel_width_; } - - void set_crop_left(uint64_t crop_left) { crop_left_ = crop_left; } - uint64_t crop_left() const { return crop_left_; } - void set_crop_right(uint64_t crop_right) { crop_right_ = crop_right; } - uint64_t crop_right() const { return crop_right_; } - void set_crop_top(uint64_t crop_top) { crop_top_ = crop_top; } - uint64_t crop_top() const { return crop_top_; } - void set_crop_bottom(uint64_t crop_bottom) { crop_bottom_ = crop_bottom; } - uint64_t crop_bottom() const { return crop_bottom_; } - - void set_frame_rate(double frame_rate) { frame_rate_ = frame_rate; } - double frame_rate() const { return frame_rate_; } - void set_height(uint64_t height) { height_ = height; } - uint64_t height() const { return height_; } - uint64_t stereo_mode() { return stereo_mode_; } - uint64_t alpha_mode() { return alpha_mode_; } - void set_width(uint64_t width) { width_ = width; } - uint64_t width() const { return width_; } - void set_colour_space(const char* colour_space); - const char* colour_space() const { return colour_space_; } - - Colour* colour() { return colour_; } - - // Deep copies |colour|. - bool SetColour(const Colour& colour); - - Projection* projection() { return projection_; } - - // Deep copies |projection|. - bool SetProjection(const Projection& projection); - - private: - // Returns the size in bytes of the Video element. - uint64_t VideoPayloadSize() const; - - // Video track element names. - uint64_t display_height_; - uint64_t display_width_; - uint64_t pixel_height_; - uint64_t pixel_width_; - uint64_t crop_left_; - uint64_t crop_right_; - uint64_t crop_top_; - uint64_t crop_bottom_; - double frame_rate_; - uint64_t height_; - uint64_t stereo_mode_; - uint64_t alpha_mode_; - uint64_t width_; - char* colour_space_; - - Colour* colour_; - Projection* projection_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(VideoTrack); -}; - -/////////////////////////////////////////////////////////////// -// Track that has audio specific elements. -class AudioTrack : public Track { - public: - // The |seed| parameter is used to synthesize a UID for the track. - explicit AudioTrack(unsigned int* seed); - virtual ~AudioTrack(); - - // Returns the size in bytes for the payload of the Track element plus the - // audio specific elements. - virtual uint64_t PayloadSize() const; - - // Output the AudioTrack element to the writer. Returns true on success. - virtual bool Write(IMkvWriter* writer) const; - - void set_bit_depth(uint64_t bit_depth) { bit_depth_ = bit_depth; } - uint64_t bit_depth() const { return bit_depth_; } - void set_channels(uint64_t channels) { channels_ = channels; } - uint64_t channels() const { return channels_; } - void set_sample_rate(double sample_rate) { sample_rate_ = sample_rate; } - double sample_rate() const { return sample_rate_; } - - private: - // Audio track element names. - uint64_t bit_depth_; - uint64_t channels_; - double sample_rate_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(AudioTrack); -}; - -/////////////////////////////////////////////////////////////// -// Tracks element -class Tracks { - public: - // Audio and video type defined by the Matroska specs. - enum { kVideo = 0x1, kAudio = 0x2 }; - - static const char kOpusCodecId[]; - static const char kVorbisCodecId[]; - static const char kAv1CodecId[]; - static const char kVp8CodecId[]; - static const char kVp9CodecId[]; - static const char kWebVttCaptionsId[]; - static const char kWebVttDescriptionsId[]; - static const char kWebVttMetadataId[]; - static const char kWebVttSubtitlesId[]; - - Tracks(); - ~Tracks(); - - // Adds a Track element to the Tracks object. |track| will be owned and - // deleted by the Tracks object. Returns true on success. |number| is the - // number to use for the track. |number| must be >= 0. If |number| == 0 - // then the muxer will decide on the track number. - bool AddTrack(Track* track, int32_t number); - - // Returns the track by index. Returns NULL if there is no track match. - const Track* GetTrackByIndex(uint32_t idx) const; - - // Search the Tracks and return the track that matches |tn|. Returns NULL - // if there is no track match. - Track* GetTrackByNumber(uint64_t track_number) const; - - // Returns true if the track number is an audio track. - bool TrackIsAudio(uint64_t track_number) const; - - // Returns true if the track number is a video track. - bool TrackIsVideo(uint64_t track_number) const; - - // Output the Tracks element to the writer. Returns true on success. - bool Write(IMkvWriter* writer) const; - - uint32_t track_entries_size() const { return track_entries_size_; } - - private: - // Track element list. - Track** track_entries_; - - // Number of Track elements added. - uint32_t track_entries_size_; - - // Whether or not Tracks element has already been written via IMkvWriter. - mutable bool wrote_tracks_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Tracks); -}; - -/////////////////////////////////////////////////////////////// -// Chapter element -// -class Chapter { - public: - // Set the identifier for this chapter. (This corresponds to the - // Cue Identifier line in WebVTT.) - // TODO(matthewjheaney): the actual serialization of this item in - // MKV is pending. - bool set_id(const char* id); - - // Converts the nanosecond start and stop times of this chapter to - // their corresponding timecode values, and stores them that way. - void set_time(const Segment& segment, uint64_t start_time_ns, - uint64_t end_time_ns); - - // Sets the uid for this chapter. Primarily used to enable - // deterministic output from the muxer. - void set_uid(const uint64_t uid) { uid_ = uid; } - - // Add a title string to this chapter, per the semantics described - // here: - // http://www.matroska.org/technical/specs/index.html - // - // The title ("chapter string") is a UTF-8 string. - // - // The language has ISO 639-2 representation, described here: - // http://www.loc.gov/standards/iso639-2/englangn.html - // http://www.loc.gov/standards/iso639-2/php/English_list.php - // If you specify NULL as the language value, this implies - // English ("eng"). - // - // The country value corresponds to the codes listed here: - // http://www.iana.org/domains/root/db/ - // - // The function returns false if the string could not be allocated. - bool add_string(const char* title, const char* language, const char* country); - - private: - friend class Chapters; - - // For storage of chapter titles that differ by language. - class Display { - public: - // Establish representation invariant for new Display object. - void Init(); - - // Reclaim resources, in anticipation of destruction. - void Clear(); - - // Copies the title to the |title_| member. Returns false on - // error. - bool set_title(const char* title); - - // Copies the language to the |language_| member. Returns false - // on error. - bool set_language(const char* language); - - // Copies the country to the |country_| member. Returns false on - // error. - bool set_country(const char* country); - - // If |writer| is non-NULL, serialize the Display sub-element of - // the Atom into the stream. Returns the Display element size on - // success, 0 if error. - uint64_t WriteDisplay(IMkvWriter* writer) const; - - private: - char* title_; - char* language_; - char* country_; - }; - - Chapter(); - ~Chapter(); - - // Establish the representation invariant for a newly-created - // Chapter object. The |seed| parameter is used to create the UID - // for this chapter atom. - void Init(unsigned int* seed); - - // Copies this Chapter object to a different one. This is used when - // expanding a plain array of Chapter objects (see Chapters). - void ShallowCopy(Chapter* dst) const; - - // Reclaim resources used by this Chapter object, pending its - // destruction. - void Clear(); - - // If there is no storage remaining on the |displays_| array for a - // new display object, creates a new, longer array and copies the - // existing Display objects to the new array. Returns false if the - // array cannot be expanded. - bool ExpandDisplaysArray(); - - // If |writer| is non-NULL, serialize the Atom sub-element into the - // stream. Returns the total size of the element on success, 0 if - // error. - uint64_t WriteAtom(IMkvWriter* writer) const; - - // The string identifier for this chapter (corresponds to WebVTT cue - // identifier). - char* id_; - - // Start timecode of the chapter. - uint64_t start_timecode_; - - // Stop timecode of the chapter. - uint64_t end_timecode_; - - // The binary identifier for this chapter. - uint64_t uid_; - - // The Atom element can contain multiple Display sub-elements, as - // the same logical title can be rendered in different languages. - Display* displays_; - - // The physical length (total size) of the |displays_| array. - int displays_size_; - - // The logical length (number of active elements) on the |displays_| - // array. - int displays_count_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Chapter); -}; - -/////////////////////////////////////////////////////////////// -// Chapters element -// -class Chapters { - public: - Chapters(); - ~Chapters(); - - Chapter* AddChapter(unsigned int* seed); - - // Returns the number of chapters that have been added. - int Count() const; - - // Output the Chapters element to the writer. Returns true on success. - bool Write(IMkvWriter* writer) const; - - private: - // Expands the chapters_ array if there is not enough space to contain - // another chapter object. Returns true on success. - bool ExpandChaptersArray(); - - // If |writer| is non-NULL, serialize the Edition sub-element of the - // Chapters element into the stream. Returns the Edition element - // size on success, 0 if error. - uint64_t WriteEdition(IMkvWriter* writer) const; - - // Total length of the chapters_ array. - int chapters_size_; - - // Number of active chapters on the chapters_ array. - int chapters_count_; - - // Array for storage of chapter objects. - Chapter* chapters_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Chapters); -}; - -/////////////////////////////////////////////////////////////// -// Tag element -// -class Tag { - public: - bool add_simple_tag(const char* tag_name, const char* tag_string); - - private: - // Tags calls Clear and the destructor of Tag - friend class Tags; - - // For storage of simple tags - class SimpleTag { - public: - // Establish representation invariant for new SimpleTag object. - void Init(); - - // Reclaim resources, in anticipation of destruction. - void Clear(); - - // Copies the title to the |tag_name_| member. Returns false on - // error. - bool set_tag_name(const char* tag_name); - - // Copies the language to the |tag_string_| member. Returns false - // on error. - bool set_tag_string(const char* tag_string); - - // If |writer| is non-NULL, serialize the SimpleTag sub-element of - // the Atom into the stream. Returns the SimpleTag element size on - // success, 0 if error. - uint64_t Write(IMkvWriter* writer) const; - - private: - char* tag_name_; - char* tag_string_; - }; - - Tag(); - ~Tag(); - - // Copies this Tag object to a different one. This is used when - // expanding a plain array of Tag objects (see Tags). - void ShallowCopy(Tag* dst) const; - - // Reclaim resources used by this Tag object, pending its - // destruction. - void Clear(); - - // If there is no storage remaining on the |simple_tags_| array for a - // new display object, creates a new, longer array and copies the - // existing SimpleTag objects to the new array. Returns false if the - // array cannot be expanded. - bool ExpandSimpleTagsArray(); - - // If |writer| is non-NULL, serialize the Tag sub-element into the - // stream. Returns the total size of the element on success, 0 if - // error. - uint64_t Write(IMkvWriter* writer) const; - - // The Atom element can contain multiple SimpleTag sub-elements - SimpleTag* simple_tags_; - - // The physical length (total size) of the |simple_tags_| array. - int simple_tags_size_; - - // The logical length (number of active elements) on the |simple_tags_| - // array. - int simple_tags_count_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Tag); -}; - -/////////////////////////////////////////////////////////////// -// Tags element -// -class Tags { - public: - Tags(); - ~Tags(); - - Tag* AddTag(); - - // Returns the number of tags that have been added. - int Count() const; - - // Output the Tags element to the writer. Returns true on success. - bool Write(IMkvWriter* writer) const; - - private: - // Expands the tags_ array if there is not enough space to contain - // another tag object. Returns true on success. - bool ExpandTagsArray(); - - // Total length of the tags_ array. - int tags_size_; - - // Number of active tags on the tags_ array. - int tags_count_; - - // Array for storage of tag objects. - Tag* tags_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Tags); -}; - -/////////////////////////////////////////////////////////////// -// Cluster element -// -// Notes: -// |Init| must be called before any other method in this class. -class Cluster { - public: - // |timecode| is the absolute timecode of the cluster. |cues_pos| is the - // position for the cluster within the segment that should be written in - // the cues element. |timecode_scale| is the timecode scale of the segment. - Cluster(uint64_t timecode, int64_t cues_pos, uint64_t timecode_scale, - bool write_last_frame_with_duration = false, - bool fixed_size_timecode = false); - ~Cluster(); - - bool Init(IMkvWriter* ptr_writer); - - // Adds a frame to be output in the file. The frame is written out through - // |writer_| if successful. Returns true on success. - bool AddFrame(const Frame* frame); - - // Adds a frame to be output in the file. The frame is written out through - // |writer_| if successful. Returns true on success. - // Inputs: - // data: Pointer to the data - // length: Length of the data - // track_number: Track to add the data to. Value returned by Add track - // functions. The range of allowed values is [1, 126]. - // timecode: Absolute (not relative to cluster) timestamp of the - // frame, expressed in timecode units. - // is_key: Flag telling whether or not this frame is a key frame. - bool AddFrame(const uint8_t* data, uint64_t length, uint64_t track_number, - uint64_t timecode, // timecode units (absolute) - bool is_key); - - // Adds a frame to be output in the file. The frame is written out through - // |writer_| if successful. Returns true on success. - // Inputs: - // data: Pointer to the data - // length: Length of the data - // additional: Pointer to the additional data - // additional_length: Length of the additional data - // add_id: Value of BlockAddID element - // track_number: Track to add the data to. Value returned by Add track - // functions. The range of allowed values is [1, 126]. - // abs_timecode: Absolute (not relative to cluster) timestamp of the - // frame, expressed in timecode units. - // is_key: Flag telling whether or not this frame is a key frame. - bool AddFrameWithAdditional(const uint8_t* data, uint64_t length, - const uint8_t* additional, - uint64_t additional_length, uint64_t add_id, - uint64_t track_number, uint64_t abs_timecode, - bool is_key); - - // Adds a frame to be output in the file. The frame is written out through - // |writer_| if successful. Returns true on success. - // Inputs: - // data: Pointer to the data. - // length: Length of the data. - // discard_padding: DiscardPadding element value. - // track_number: Track to add the data to. Value returned by Add track - // functions. The range of allowed values is [1, 126]. - // abs_timecode: Absolute (not relative to cluster) timestamp of the - // frame, expressed in timecode units. - // is_key: Flag telling whether or not this frame is a key frame. - bool AddFrameWithDiscardPadding(const uint8_t* data, uint64_t length, - int64_t discard_padding, - uint64_t track_number, uint64_t abs_timecode, - bool is_key); - - // Writes a frame of metadata to the output medium; returns true on - // success. - // Inputs: - // data: Pointer to the data - // length: Length of the data - // track_number: Track to add the data to. Value returned by Add track - // functions. The range of allowed values is [1, 126]. - // timecode: Absolute (not relative to cluster) timestamp of the - // metadata frame, expressed in timecode units. - // duration: Duration of metadata frame, in timecode units. - // - // The metadata frame is written as a block group, with a duration - // sub-element but no reference time sub-elements (indicating that - // it is considered a keyframe, per Matroska semantics). - bool AddMetadata(const uint8_t* data, uint64_t length, uint64_t track_number, - uint64_t timecode, uint64_t duration); - - // Increments the size of the cluster's data in bytes. - void AddPayloadSize(uint64_t size); - - // Closes the cluster so no more data can be written to it. Will update the - // cluster's size if |writer_| is seekable. Returns true on success. This - // variant of Finalize() fails when |write_last_frame_with_duration_| is set - // to true. - bool Finalize(); - - // Closes the cluster so no more data can be written to it. Will update the - // cluster's size if |writer_| is seekable. Returns true on success. - // Inputs: - // set_last_frame_duration: Boolean indicating whether or not the duration - // of the last frame should be set. If set to - // false, the |duration| value is ignored and - // |write_last_frame_with_duration_| will not be - // honored. - // duration: Duration of the Cluster in timecode scale. - bool Finalize(bool set_last_frame_duration, uint64_t duration); - - // Returns the size in bytes for the entire Cluster element. - uint64_t Size() const; - - // Given |abs_timecode|, calculates timecode relative to most recent timecode. - // Returns -1 on failure, or a relative timecode. - int64_t GetRelativeTimecode(int64_t abs_timecode) const; - - int64_t size_position() const { return size_position_; } - int32_t blocks_added() const { return blocks_added_; } - uint64_t payload_size() const { return payload_size_; } - int64_t position_for_cues() const { return position_for_cues_; } - uint64_t timecode() const { return timecode_; } - uint64_t timecode_scale() const { return timecode_scale_; } - void set_write_last_frame_with_duration(bool write_last_frame_with_duration) { - write_last_frame_with_duration_ = write_last_frame_with_duration; - } - bool write_last_frame_with_duration() const { - return write_last_frame_with_duration_; - } - - private: - // Iterator type for the |stored_frames_| map. - typedef std::map >::iterator FrameMapIterator; - - // Utility method that confirms that blocks can still be added, and that the - // cluster header has been written. Used by |DoWriteFrame*|. Returns true - // when successful. - bool PreWriteBlock(); - - // Utility method used by the |DoWriteFrame*| methods that handles the book - // keeping required after each block is written. - void PostWriteBlock(uint64_t element_size); - - // Does some verification and calls WriteFrame. - bool DoWriteFrame(const Frame* const frame); - - // Either holds back the given frame, or writes it out depending on whether or - // not |write_last_frame_with_duration_| is set. - bool QueueOrWriteFrame(const Frame* const frame); - - // Outputs the Cluster header to |writer_|. Returns true on success. - bool WriteClusterHeader(); - - // Number of blocks added to the cluster. - int32_t blocks_added_; - - // Flag telling if the cluster has been closed. - bool finalized_; - - // Flag indicating whether the cluster's timecode will always be written out - // using 8 bytes. - bool fixed_size_timecode_; - - // Flag telling if the cluster's header has been written. - bool header_written_; - - // The size of the cluster elements in bytes. - uint64_t payload_size_; - - // The file position used for cue points. - const int64_t position_for_cues_; - - // The file position of the cluster's size element. - int64_t size_position_; - - // The absolute timecode of the cluster. - const uint64_t timecode_; - - // The timecode scale of the Segment containing the cluster. - const uint64_t timecode_scale_; - - // Flag indicating whether the last frame of the cluster should be written as - // a Block with Duration. If set to true, then it will result in holding back - // of frames and the parameterized version of Finalize() must be called to - // finish writing the Cluster. - bool write_last_frame_with_duration_; - - // Map used to hold back frames, if required. Track number is the key. - std::map > stored_frames_; - - // Map from track number to the timestamp of the last block written for that - // track. - std::map last_block_timestamp_; - - // Pointer to the writer object. Not owned by this class. - IMkvWriter* writer_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Cluster); -}; - -/////////////////////////////////////////////////////////////// -// SeekHead element -class SeekHead { - public: - SeekHead(); - ~SeekHead(); - - // TODO(fgalligan): Change this to reserve a certain size. Then check how - // big the seek entry to be added is as not every seek entry will be the - // maximum size it could be. - // Adds a seek entry to be written out when the element is finalized. |id| - // must be the coded mkv element id. |pos| is the file position of the - // element. Returns true on success. - bool AddSeekEntry(uint32_t id, uint64_t pos); - - // Writes out SeekHead and SeekEntry elements. Returns true on success. - bool Finalize(IMkvWriter* writer) const; - - // Returns the id of the Seek Entry at the given index. Returns -1 if index is - // out of range. - uint32_t GetId(int index) const; - - // Returns the position of the Seek Entry at the given index. Returns -1 if - // index is out of range. - uint64_t GetPosition(int index) const; - - // Sets the Seek Entry id and position at given index. - // Returns true on success. - bool SetSeekEntry(int index, uint32_t id, uint64_t position); - - // Reserves space by writing out a Void element which will be updated with - // a SeekHead element later. Returns true on success. - bool Write(IMkvWriter* writer); - - // We are going to put a cap on the number of Seek Entries. - const static int32_t kSeekEntryCount = 5; - - private: - // Returns the maximum size in bytes of one seek entry. - uint64_t MaxEntrySize() const; - - // Seek entry id element list. - uint32_t seek_entry_id_[kSeekEntryCount]; - - // Seek entry pos element list. - uint64_t seek_entry_pos_[kSeekEntryCount]; - - // The file position of SeekHead element. - int64_t start_pos_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(SeekHead); -}; - -/////////////////////////////////////////////////////////////// -// Segment Information element -class SegmentInfo { - public: - SegmentInfo(); - ~SegmentInfo(); - - // Will update the duration if |duration_| is > 0.0. Returns true on success. - bool Finalize(IMkvWriter* writer) const; - - // Sets |muxing_app_| and |writing_app_|. - bool Init(); - - // Output the Segment Information element to the writer. Returns true on - // success. - bool Write(IMkvWriter* writer); - - void set_duration(double duration) { duration_ = duration; } - double duration() const { return duration_; } - void set_muxing_app(const char* app); - const char* muxing_app() const { return muxing_app_; } - void set_timecode_scale(uint64_t scale) { timecode_scale_ = scale; } - uint64_t timecode_scale() const { return timecode_scale_; } - void set_writing_app(const char* app); - const char* writing_app() const { return writing_app_; } - void set_date_utc(int64_t date_utc) { date_utc_ = date_utc; } - int64_t date_utc() const { return date_utc_; } - - private: - // Segment Information element names. - // Initially set to -1 to signify that a duration has not been set and should - // not be written out. - double duration_; - // Set to libwebm-%d.%d.%d.%d, major, minor, build, revision. - char* muxing_app_; - uint64_t timecode_scale_; - // Initially set to libwebm-%d.%d.%d.%d, major, minor, build, revision. - char* writing_app_; - // LLONG_MIN when DateUTC is not set. - int64_t date_utc_; - - // The file position of the duration element. - int64_t duration_pos_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(SegmentInfo); -}; - -/////////////////////////////////////////////////////////////// -// This class represents the main segment in a WebM file. Currently only -// supports one Segment element. -// -// Notes: -// |Init| must be called before any other method in this class. -class Segment { - public: - enum Mode { kLive = 0x1, kFile = 0x2 }; - - enum CuesPosition { - kAfterClusters = 0x0, // Position Cues after Clusters - Default - kBeforeClusters = 0x1 // Position Cues before Clusters - }; - - static const uint32_t kDefaultDocTypeVersion = 4; - static const uint64_t kDefaultMaxClusterDuration = 30000000000ULL; - - Segment(); - ~Segment(); - - // Initializes |SegmentInfo| and returns result. Always returns false when - // |ptr_writer| is NULL. - bool Init(IMkvWriter* ptr_writer); - - // Adds a generic track to the segment. Returns the newly-allocated - // track object (which is owned by the segment) on success, NULL on - // error. |number| is the number to use for the track. |number| - // must be >= 0. If |number| == 0 then the muxer will decide on the - // track number. - Track* AddTrack(int32_t number); - - // Adds a Vorbis audio track to the segment. Returns the number of the track - // on success, 0 on error. |number| is the number to use for the audio track. - // |number| must be >= 0. If |number| == 0 then the muxer will decide on - // the track number. - uint64_t AddAudioTrack(int32_t sample_rate, int32_t channels, int32_t number); - - // Adds an empty chapter to the chapters of this segment. Returns - // non-NULL on success. After adding the chapter, the caller should - // populate its fields via the Chapter member functions. - Chapter* AddChapter(); - - // Adds an empty tag to the tags of this segment. Returns - // non-NULL on success. After adding the tag, the caller should - // populate its fields via the Tag member functions. - Tag* AddTag(); - - // Adds a cue point to the Cues element. |timestamp| is the time in - // nanoseconds of the cue's time. |track| is the Track of the Cue. This - // function must be called after AddFrame to calculate the correct - // BlockNumber for the CuePoint. Returns true on success. - bool AddCuePoint(uint64_t timestamp, uint64_t track); - - // Adds a frame to be output in the file. Returns true on success. - // Inputs: - // data: Pointer to the data - // length: Length of the data - // track_number: Track to add the data to. Value returned by Add track - // functions. - // timestamp: Timestamp of the frame in nanoseconds from 0. - // is_key: Flag telling whether or not this frame is a key frame. - bool AddFrame(const uint8_t* data, uint64_t length, uint64_t track_number, - uint64_t timestamp_ns, bool is_key); - - // Writes a frame of metadata to the output medium; returns true on - // success. - // Inputs: - // data: Pointer to the data - // length: Length of the data - // track_number: Track to add the data to. Value returned by Add track - // functions. - // timecode: Absolute timestamp of the metadata frame, expressed - // in nanosecond units. - // duration: Duration of metadata frame, in nanosecond units. - // - // The metadata frame is written as a block group, with a duration - // sub-element but no reference time sub-elements (indicating that - // it is considered a keyframe, per Matroska semantics). - bool AddMetadata(const uint8_t* data, uint64_t length, uint64_t track_number, - uint64_t timestamp_ns, uint64_t duration_ns); - - // Writes a frame with additional data to the output medium; returns true on - // success. - // Inputs: - // data: Pointer to the data. - // length: Length of the data. - // additional: Pointer to additional data. - // additional_length: Length of additional data. - // add_id: Additional ID which identifies the type of additional data. - // track_number: Track to add the data to. Value returned by Add track - // functions. - // timestamp: Absolute timestamp of the frame, expressed in nanosecond - // units. - // is_key: Flag telling whether or not this frame is a key frame. - bool AddFrameWithAdditional(const uint8_t* data, uint64_t length, - const uint8_t* additional, - uint64_t additional_length, uint64_t add_id, - uint64_t track_number, uint64_t timestamp, - bool is_key); - - // Writes a frame with DiscardPadding to the output medium; returns true on - // success. - // Inputs: - // data: Pointer to the data. - // length: Length of the data. - // discard_padding: DiscardPadding element value. - // track_number: Track to add the data to. Value returned by Add track - // functions. - // timestamp: Absolute timestamp of the frame, expressed in nanosecond - // units. - // is_key: Flag telling whether or not this frame is a key frame. - bool AddFrameWithDiscardPadding(const uint8_t* data, uint64_t length, - int64_t discard_padding, - uint64_t track_number, uint64_t timestamp, - bool is_key); - - // Writes a Frame to the output medium. Chooses the correct way of writing - // the frame (Block vs SimpleBlock) based on the parameters passed. - // Inputs: - // frame: frame object - bool AddGenericFrame(const Frame* frame); - - // Adds a VP8 video track to the segment. Returns the number of the track on - // success, 0 on error. |number| is the number to use for the video track. - // |number| must be >= 0. If |number| == 0 then the muxer will decide on - // the track number. - uint64_t AddVideoTrack(int32_t width, int32_t height, int32_t number); - - // This function must be called after Finalize() if you need a copy of the - // output with Cues written before the Clusters. It will return false if the - // writer is not seekable of if chunking is set to true. - // Input parameters: - // reader - an IMkvReader object created with the same underlying file of the - // current writer object. Make sure to close the existing writer - // object before creating this so that all the data is properly - // flushed and available for reading. - // writer - an IMkvWriter object pointing to a *different* file than the one - // pointed by the current writer object. This file will contain the - // Cues element before the Clusters. - bool CopyAndMoveCuesBeforeClusters(mkvparser::IMkvReader* reader, - IMkvWriter* writer); - - // Sets which track to use for the Cues element. Must have added the track - // before calling this function. Returns true on success. |track_number| is - // returned by the Add track functions. - bool CuesTrack(uint64_t track_number); - - // This will force the muxer to create a new Cluster when the next frame is - // added. - void ForceNewClusterOnNextFrame(); - - // Writes out any frames that have not been written out. Finalizes the last - // cluster. May update the size and duration of the segment. May output the - // Cues element. May finalize the SeekHead element. Returns true on success. - bool Finalize(); - - // Returns the Cues object. - Cues* GetCues() { return &cues_; } - - // Returns the Segment Information object. - const SegmentInfo* GetSegmentInfo() const { return &segment_info_; } - SegmentInfo* GetSegmentInfo() { return &segment_info_; } - - // Search the Tracks and return the track that matches |track_number|. - // Returns NULL if there is no track match. - Track* GetTrackByNumber(uint64_t track_number) const; - - // Toggles whether to output a cues element. - void OutputCues(bool output_cues); - - // Toggles whether to write the last frame in each Cluster with Duration. - void AccurateClusterDuration(bool accurate_cluster_duration); - - // Toggles whether to write the Cluster Timecode using exactly 8 bytes. - void UseFixedSizeClusterTimecode(bool fixed_size_cluster_timecode); - - // Sets if the muxer will output files in chunks or not. |chunking| is a - // flag telling whether or not to turn on chunking. |filename| is the base - // filename for the chunk files. The header chunk file will be named - // |filename|.hdr and the data chunks will be named - // |filename|_XXXXXX.chk. Chunking implies that the muxer will be writing - // to files so the muxer will use the default MkvWriter class to control - // what data is written to what files. Returns true on success. - // TODO: Should we change the IMkvWriter Interface to add Open and Close? - // That will force the interface to be dependent on files. - bool SetChunking(bool chunking, const char* filename); - - bool chunking() const { return chunking_; } - uint64_t cues_track() const { return cues_track_; } - void set_max_cluster_duration(uint64_t max_cluster_duration) { - max_cluster_duration_ = max_cluster_duration; - } - uint64_t max_cluster_duration() const { return max_cluster_duration_; } - void set_max_cluster_size(uint64_t max_cluster_size) { - max_cluster_size_ = max_cluster_size; - } - uint64_t max_cluster_size() const { return max_cluster_size_; } - void set_mode(Mode mode) { mode_ = mode; } - Mode mode() const { return mode_; } - CuesPosition cues_position() const { return cues_position_; } - bool output_cues() const { return output_cues_; } - void set_estimate_file_duration(bool estimate_duration) { - estimate_file_duration_ = estimate_duration; - } - bool estimate_file_duration() const { return estimate_file_duration_; } - const SegmentInfo* segment_info() const { return &segment_info_; } - void set_duration(double duration) { duration_ = duration; } - double duration() const { return duration_; } - - // Returns true when codec IDs are valid for WebM. - bool DocTypeIsWebm() const; - - private: - // Checks if header information has been output and initialized. If not it - // will output the Segment element and initialize the SeekHead elment and - // Cues elements. - bool CheckHeaderInfo(); - - // Sets |doc_type_version_| based on the current element requirements. - void UpdateDocTypeVersion(); - - // Sets |name| according to how many chunks have been written. |ext| is the - // file extension. |name| must be deleted by the calling app. Returns true - // on success. - bool UpdateChunkName(const char* ext, char** name) const; - - // Returns the maximum offset within the segment's payload. When chunking - // this function is needed to determine offsets of elements within the - // chunked files. Returns -1 on error. - int64_t MaxOffset(); - - // Adds the frame to our frame array. - bool QueueFrame(Frame* frame); - - // Output all frames that are queued. Returns -1 on error, otherwise - // it returns the number of frames written. - int WriteFramesAll(); - - // Output all frames that are queued that have an end time that is less - // then |timestamp|. Returns true on success and if there are no frames - // queued. - bool WriteFramesLessThan(uint64_t timestamp); - - // Outputs the segment header, Segment Information element, SeekHead element, - // and Tracks element to |writer_|. - bool WriteSegmentHeader(); - - // Given a frame with the specified timestamp (nanosecond units) and - // keyframe status, determine whether a new cluster should be - // created, before writing enqueued frames and the frame itself. The - // function returns one of the following values: - // -1 = error: an out-of-order frame was detected - // 0 = do not create a new cluster, and write frame to the existing cluster - // 1 = create a new cluster, and write frame to that new cluster - // 2 = create a new cluster, and re-run test - int TestFrame(uint64_t track_num, uint64_t timestamp_ns, bool key) const; - - // Create a new cluster, using the earlier of the first enqueued - // frame, or the indicated time. Returns true on success. - bool MakeNewCluster(uint64_t timestamp_ns); - - // Checks whether a new cluster needs to be created, and if so - // creates a new cluster. Returns false if creation of a new cluster - // was necessary but creation was not successful. - bool DoNewClusterProcessing(uint64_t track_num, uint64_t timestamp_ns, - bool key); - - // Adjusts Cue Point values (to place Cues before Clusters) so that they - // reflect the correct offsets. - void MoveCuesBeforeClusters(); - - // This function recursively computes the correct cluster offsets (this is - // done to move the Cues before Clusters). It recursively updates the change - // in size (which indicates a change in cluster offset) until no sizes change. - // Parameters: - // diff - indicates the difference in size of the Cues element that needs to - // accounted for. - // index - index in the list of Cues which is currently being adjusted. - // cue_size - sum of size of all the CuePoint elements. - void MoveCuesBeforeClustersHelper(uint64_t diff, int index, - uint64_t* cue_size); - - // Seeds the random number generator used to make UIDs. - unsigned int seed_; - - // WebM elements - Cues cues_; - SeekHead seek_head_; - SegmentInfo segment_info_; - Tracks tracks_; - Chapters chapters_; - Tags tags_; - - // Number of chunks written. - int chunk_count_; - - // Current chunk filename. - char* chunk_name_; - - // Default MkvWriter object created by this class used for writing clusters - // out in separate files. - MkvWriter* chunk_writer_cluster_; - - // Default MkvWriter object created by this class used for writing Cues - // element out to a file. - MkvWriter* chunk_writer_cues_; - - // Default MkvWriter object created by this class used for writing the - // Matroska header out to a file. - MkvWriter* chunk_writer_header_; - - // Flag telling whether or not the muxer is chunking output to multiple - // files. - bool chunking_; - - // Base filename for the chunked files. - char* chunking_base_name_; - - // File position offset where the Clusters end. - int64_t cluster_end_offset_; - - // List of clusters. - Cluster** cluster_list_; - - // Number of cluster pointers allocated in the cluster list. - int32_t cluster_list_capacity_; - - // Number of clusters in the cluster list. - int32_t cluster_list_size_; - - // Indicates whether Cues should be written before or after Clusters - CuesPosition cues_position_; - - // Track number that is associated with the cues element for this segment. - uint64_t cues_track_; - - // Tells the muxer to force a new cluster on the next Block. - bool force_new_cluster_; - - // List of stored audio frames. These variables are used to store frames so - // the muxer can follow the guideline "Audio blocks that contain the video - // key frame's timecode should be in the same cluster as the video key frame - // block." - Frame** frames_; - - // Number of frame pointers allocated in the frame list. - int32_t frames_capacity_; - - // Number of frames in the frame list. - int32_t frames_size_; - - // Flag telling if a video track has been added to the segment. - bool has_video_; - - // Flag telling if the segment's header has been written. - bool header_written_; - - // Duration of the last block in nanoseconds. - uint64_t last_block_duration_; - - // Last timestamp in nanoseconds added to a cluster. - uint64_t last_timestamp_; - - // Last timestamp in nanoseconds by track number added to a cluster. - uint64_t last_track_timestamp_[kMaxTrackNumber]; - - // Number of frames written per track. - uint64_t track_frames_written_[kMaxTrackNumber]; - - // Maximum time in nanoseconds for a cluster duration. This variable is a - // guideline and some clusters may have a longer duration. Default is 30 - // seconds. - uint64_t max_cluster_duration_; - - // Maximum size in bytes for a cluster. This variable is a guideline and - // some clusters may have a larger size. Default is 0 which signifies that - // the muxer will decide the size. - uint64_t max_cluster_size_; - - // The mode that segment is in. If set to |kLive| the writer must not - // seek backwards. - Mode mode_; - - // Flag telling the muxer that a new cue point should be added. - bool new_cuepoint_; - - // TODO(fgalligan): Should we add support for more than one Cues element? - // Flag whether or not the muxer should output a Cues element. - bool output_cues_; - - // Flag whether or not the last frame in each Cluster will have a Duration - // element in it. - bool accurate_cluster_duration_; - - // Flag whether or not to write the Cluster Timecode using exactly 8 bytes. - bool fixed_size_cluster_timecode_; - - // Flag whether or not to estimate the file duration. - bool estimate_file_duration_; - - // The size of the EBML header, used to validate the header if - // WriteEbmlHeader() is called more than once. - int32_t ebml_header_size_; - - // The file position of the segment's payload. - int64_t payload_pos_; - - // The file position of the element's size. - int64_t size_position_; - - // Current DocTypeVersion (|doc_type_version_|) and that written in - // WriteSegmentHeader(). - // WriteEbmlHeader() will be called from Finalize() if |doc_type_version_| - // differs from |doc_type_version_written_|. - uint32_t doc_type_version_; - uint32_t doc_type_version_written_; - - // If |duration_| is > 0, then explicitly set the duration of the segment. - double duration_; - - // Pointer to the writer objects. Not owned by this class. - IMkvWriter* writer_cluster_; - IMkvWriter* writer_cues_; - IMkvWriter* writer_header_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Segment); -}; - -} // namespace mkvmuxer - -#endif // MKVMUXER_MKVMUXER_H_ diff --git a/vpx-encoder/android_libs/x86/include/mkvmuxer/mkvmuxertypes.h b/vpx-encoder/android_libs/x86/include/mkvmuxer/mkvmuxertypes.h deleted file mode 100644 index e5db1216..00000000 --- a/vpx-encoder/android_libs/x86/include/mkvmuxer/mkvmuxertypes.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) 2012 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. - -#ifndef MKVMUXER_MKVMUXERTYPES_H_ -#define MKVMUXER_MKVMUXERTYPES_H_ - -namespace mkvmuxer { -typedef unsigned char uint8; -typedef short int16; -typedef int int32; -typedef unsigned int uint32; -typedef long long int64; -typedef unsigned long long uint64; -} // namespace mkvmuxer - -// Copied from Chromium basictypes.h -// A macro to disallow the copy constructor and operator= functions -// This should be used in the private: declarations for a class -#define LIBWEBM_DISALLOW_COPY_AND_ASSIGN(TypeName) \ - TypeName(const TypeName&); \ - void operator=(const TypeName&) - -#endif // MKVMUXER_MKVMUXERTYPES_HPP_ diff --git a/vpx-encoder/android_libs/x86/include/mkvmuxer/mkvmuxerutil.h b/vpx-encoder/android_libs/x86/include/mkvmuxer/mkvmuxerutil.h deleted file mode 100644 index 132388da..00000000 --- a/vpx-encoder/android_libs/x86/include/mkvmuxer/mkvmuxerutil.h +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright (c) 2012 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -#ifndef MKVMUXER_MKVMUXERUTIL_H_ -#define MKVMUXER_MKVMUXERUTIL_H_ - -#include "mkvmuxertypes.h" - -#include "stdint.h" - -namespace mkvmuxer { -class Cluster; -class Frame; -class IMkvWriter; - -// TODO(tomfinegan): mkvmuxer:: integer types continue to be used here because -// changing them causes pain for downstream projects. It would be nice if a -// solution that allows removal of the mkvmuxer:: integer types while avoiding -// pain for downstream users of libwebm. Considering that mkvmuxerutil.{cc,h} -// are really, for the great majority of cases, EBML size calculation and writer -// functions, perhaps a more EBML focused utility would be the way to go as a -// first step. - -const uint64 kEbmlUnknownValue = 0x01FFFFFFFFFFFFFFULL; -const int64 kMaxBlockTimecode = 0x07FFFLL; - -// Writes out |value| in Big Endian order. Returns 0 on success. -int32 SerializeInt(IMkvWriter* writer, int64 value, int32 size); - -// Returns the size in bytes of the element. -int32 GetUIntSize(uint64 value); -int32 GetIntSize(int64 value); -int32 GetCodedUIntSize(uint64 value); -uint64 EbmlMasterElementSize(uint64 type, uint64 value); -uint64 EbmlElementSize(uint64 type, int64 value); -uint64 EbmlElementSize(uint64 type, uint64 value); -uint64 EbmlElementSize(uint64 type, float value); -uint64 EbmlElementSize(uint64 type, const char* value); -uint64 EbmlElementSize(uint64 type, const uint8* value, uint64 size); -uint64 EbmlDateElementSize(uint64 type); - -// Returns the size in bytes of the element assuming that the element was -// written using |fixed_size| bytes. If |fixed_size| is set to zero, then it -// computes the necessary number of bytes based on |value|. -uint64 EbmlElementSize(uint64 type, uint64 value, uint64 fixed_size); - -// Creates an EBML coded number from |value| and writes it out. The size of -// the coded number is determined by the value of |value|. |value| must not -// be in a coded form. Returns 0 on success. -int32 WriteUInt(IMkvWriter* writer, uint64 value); - -// Creates an EBML coded number from |value| and writes it out. The size of -// the coded number is determined by the value of |size|. |value| must not -// be in a coded form. Returns 0 on success. -int32 WriteUIntSize(IMkvWriter* writer, uint64 value, int32 size); - -// Output an Mkv master element. Returns true if the element was written. -bool WriteEbmlMasterElement(IMkvWriter* writer, uint64 value, uint64 size); - -// Outputs an Mkv ID, calls |IMkvWriter::ElementStartNotify|, and passes the -// ID to |SerializeInt|. Returns 0 on success. -int32 WriteID(IMkvWriter* writer, uint64 type); - -// Output an Mkv non-master element. Returns true if the element was written. -bool WriteEbmlElement(IMkvWriter* writer, uint64 type, uint64 value); -bool WriteEbmlElement(IMkvWriter* writer, uint64 type, int64 value); -bool WriteEbmlElement(IMkvWriter* writer, uint64 type, float value); -bool WriteEbmlElement(IMkvWriter* writer, uint64 type, const char* value); -bool WriteEbmlElement(IMkvWriter* writer, uint64 type, const uint8* value, - uint64 size); -bool WriteEbmlDateElement(IMkvWriter* writer, uint64 type, int64 value); - -// Output an Mkv non-master element using fixed size. The element will be -// written out using exactly |fixed_size| bytes. If |fixed_size| is set to zero -// then it computes the necessary number of bytes based on |value|. Returns true -// if the element was written. -bool WriteEbmlElement(IMkvWriter* writer, uint64 type, uint64 value, - uint64 fixed_size); - -// Output a Mkv Frame. It decides the correct element to write (Block vs -// SimpleBlock) based on the parameters of the Frame. -uint64 WriteFrame(IMkvWriter* writer, const Frame* const frame, - Cluster* cluster); - -// Output a void element. |size| must be the entire size in bytes that will be -// void. The function will calculate the size of the void header and subtract -// it from |size|. -uint64 WriteVoidElement(IMkvWriter* writer, uint64 size); - -// Returns the version number of the muxer in |major|, |minor|, |build|, -// and |revision|. -void GetVersion(int32* major, int32* minor, int32* build, int32* revision); - -// Returns a random number to be used for UID, using |seed| to seed -// the random-number generator (see POSIX rand_r() for semantics). -uint64 MakeUID(unsigned int* seed); - -// Colour field validation helpers. All return true when |value| is valid. -bool IsMatrixCoefficientsValueValid(uint64_t value); -bool IsChromaSitingHorzValueValid(uint64_t value); -bool IsChromaSitingVertValueValid(uint64_t value); -bool IsColourRangeValueValid(uint64_t value); -bool IsTransferCharacteristicsValueValid(uint64_t value); -bool IsPrimariesValueValid(uint64_t value); - -} // namespace mkvmuxer - -#endif // MKVMUXER_MKVMUXERUTIL_H_ diff --git a/vpx-encoder/android_libs/x86/include/mkvmuxer/mkvwriter.h b/vpx-encoder/android_libs/x86/include/mkvmuxer/mkvwriter.h deleted file mode 100644 index 4227c637..00000000 --- a/vpx-encoder/android_libs/x86/include/mkvmuxer/mkvwriter.h +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c) 2012 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. - -#ifndef MKVMUXER_MKVWRITER_H_ -#define MKVMUXER_MKVWRITER_H_ - -#include - -#include "mkvmuxer/mkvmuxer.h" -#include "mkvmuxer/mkvmuxertypes.h" - -namespace mkvmuxer { - -// Default implementation of the IMkvWriter interface on Windows. -class MkvWriter : public IMkvWriter { - public: - MkvWriter(); - explicit MkvWriter(FILE* fp); - virtual ~MkvWriter(); - - // IMkvWriter interface - virtual int64 Position() const; - virtual int32 Position(int64 position); - virtual bool Seekable() const; - virtual int32 Write(const void* buffer, uint32 length); - virtual void ElementStartNotify(uint64 element_id, int64 position); - - // Creates and opens a file for writing. |filename| is the name of the file - // to open. This function will overwrite the contents of |filename|. Returns - // true on success. - bool Open(const char* filename); - - // Closes an opened file. - void Close(); - - private: - // File handle to output file. - FILE* file_; - bool writer_owns_file_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(MkvWriter); -}; - -} // namespace mkvmuxer - -#endif // MKVMUXER_MKVWRITER_H_ diff --git a/vpx-encoder/android_libs/x86/include/mkvparser/mkvparser.h b/vpx-encoder/android_libs/x86/include/mkvparser/mkvparser.h deleted file mode 100644 index 848d01f0..00000000 --- a/vpx-encoder/android_libs/x86/include/mkvparser/mkvparser.h +++ /dev/null @@ -1,1147 +0,0 @@ -// Copyright (c) 2012 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -#ifndef MKVPARSER_MKVPARSER_H_ -#define MKVPARSER_MKVPARSER_H_ - -#include - -namespace mkvparser { - -const int E_PARSE_FAILED = -1; -const int E_FILE_FORMAT_INVALID = -2; -const int E_BUFFER_NOT_FULL = -3; - -class IMkvReader { - public: - virtual int Read(long long pos, long len, unsigned char* buf) = 0; - virtual int Length(long long* total, long long* available) = 0; - - protected: - virtual ~IMkvReader() {} -}; - -template -Type* SafeArrayAlloc(unsigned long long num_elements, - unsigned long long element_size); -long long GetUIntLength(IMkvReader*, long long, long&); -long long ReadUInt(IMkvReader*, long long, long&); -long long ReadID(IMkvReader* pReader, long long pos, long& len); -long long UnserializeUInt(IMkvReader*, long long pos, long long size); - -long UnserializeFloat(IMkvReader*, long long pos, long long size, double&); -long UnserializeInt(IMkvReader*, long long pos, long long size, - long long& result); - -long UnserializeString(IMkvReader*, long long pos, long long size, char*& str); - -long ParseElementHeader(IMkvReader* pReader, - long long& pos, // consume id and size fields - long long stop, // if you know size of element's parent - long long& id, long long& size); - -bool Match(IMkvReader*, long long&, unsigned long, long long&); -bool Match(IMkvReader*, long long&, unsigned long, unsigned char*&, size_t&); - -void GetVersion(int& major, int& minor, int& build, int& revision); - -struct EBMLHeader { - EBMLHeader(); - ~EBMLHeader(); - long long m_version; - long long m_readVersion; - long long m_maxIdLength; - long long m_maxSizeLength; - char* m_docType; - long long m_docTypeVersion; - long long m_docTypeReadVersion; - - long long Parse(IMkvReader*, long long&); - void Init(); -}; - -class Segment; -class Track; -class Cluster; - -class Block { - Block(const Block&); - Block& operator=(const Block&); - - public: - const long long m_start; - const long long m_size; - - Block(long long start, long long size, long long discard_padding); - ~Block(); - - long Parse(const Cluster*); - - long long GetTrackNumber() const; - long long GetTimeCode(const Cluster*) const; // absolute, but not scaled - long long GetTime(const Cluster*) const; // absolute, and scaled (ns) - bool IsKey() const; - void SetKey(bool); - bool IsInvisible() const; - - enum Lacing { kLacingNone, kLacingXiph, kLacingFixed, kLacingEbml }; - Lacing GetLacing() const; - - int GetFrameCount() const; // to index frames: [0, count) - - struct Frame { - long long pos; // absolute offset - long len; - - long Read(IMkvReader*, unsigned char*) const; - }; - - const Frame& GetFrame(int frame_index) const; - - long long GetDiscardPadding() const; - - private: - long long m_track; // Track::Number() - short m_timecode; // relative to cluster - unsigned char m_flags; - - Frame* m_frames; - int m_frame_count; - - protected: - const long long m_discard_padding; -}; - -class BlockEntry { - BlockEntry(const BlockEntry&); - BlockEntry& operator=(const BlockEntry&); - - protected: - BlockEntry(Cluster*, long index); - - public: - virtual ~BlockEntry(); - - bool EOS() const { return (GetKind() == kBlockEOS); } - const Cluster* GetCluster() const; - long GetIndex() const; - virtual const Block* GetBlock() const = 0; - - enum Kind { kBlockEOS, kBlockSimple, kBlockGroup }; - virtual Kind GetKind() const = 0; - - protected: - Cluster* const m_pCluster; - const long m_index; -}; - -class SimpleBlock : public BlockEntry { - SimpleBlock(const SimpleBlock&); - SimpleBlock& operator=(const SimpleBlock&); - - public: - SimpleBlock(Cluster*, long index, long long start, long long size); - long Parse(); - - Kind GetKind() const; - const Block* GetBlock() const; - - protected: - Block m_block; -}; - -class BlockGroup : public BlockEntry { - BlockGroup(const BlockGroup&); - BlockGroup& operator=(const BlockGroup&); - - public: - BlockGroup(Cluster*, long index, - long long block_start, // absolute pos of block's payload - long long block_size, // size of block's payload - long long prev, long long next, long long duration, - long long discard_padding); - - long Parse(); - - Kind GetKind() const; - const Block* GetBlock() const; - - long long GetPrevTimeCode() const; // relative to block's time - long long GetNextTimeCode() const; // as above - long long GetDurationTimeCode() const; - - private: - Block m_block; - const long long m_prev; - const long long m_next; - const long long m_duration; -}; - -/////////////////////////////////////////////////////////////// -// ContentEncoding element -// Elements used to describe if the track data has been encrypted or -// compressed with zlib or header stripping. -class ContentEncoding { - public: - enum { kCTR = 1 }; - - ContentEncoding(); - ~ContentEncoding(); - - // ContentCompression element names - struct ContentCompression { - ContentCompression(); - ~ContentCompression(); - - unsigned long long algo; - unsigned char* settings; - long long settings_len; - }; - - // ContentEncAESSettings element names - struct ContentEncAESSettings { - ContentEncAESSettings() : cipher_mode(kCTR) {} - ~ContentEncAESSettings() {} - - unsigned long long cipher_mode; - }; - - // ContentEncryption element names - struct ContentEncryption { - ContentEncryption(); - ~ContentEncryption(); - - unsigned long long algo; - unsigned char* key_id; - long long key_id_len; - unsigned char* signature; - long long signature_len; - unsigned char* sig_key_id; - long long sig_key_id_len; - unsigned long long sig_algo; - unsigned long long sig_hash_algo; - - ContentEncAESSettings aes_settings; - }; - - // Returns ContentCompression represented by |idx|. Returns NULL if |idx| - // is out of bounds. - const ContentCompression* GetCompressionByIndex(unsigned long idx) const; - - // Returns number of ContentCompression elements in this ContentEncoding - // element. - unsigned long GetCompressionCount() const; - - // Parses the ContentCompression element from |pReader|. |start| is the - // starting offset of the ContentCompression payload. |size| is the size in - // bytes of the ContentCompression payload. |compression| is where the parsed - // values will be stored. - long ParseCompressionEntry(long long start, long long size, - IMkvReader* pReader, - ContentCompression* compression); - - // Returns ContentEncryption represented by |idx|. Returns NULL if |idx| - // is out of bounds. - const ContentEncryption* GetEncryptionByIndex(unsigned long idx) const; - - // Returns number of ContentEncryption elements in this ContentEncoding - // element. - unsigned long GetEncryptionCount() const; - - // Parses the ContentEncAESSettings element from |pReader|. |start| is the - // starting offset of the ContentEncAESSettings payload. |size| is the - // size in bytes of the ContentEncAESSettings payload. |encryption| is - // where the parsed values will be stored. - long ParseContentEncAESSettingsEntry(long long start, long long size, - IMkvReader* pReader, - ContentEncAESSettings* aes); - - // Parses the ContentEncoding element from |pReader|. |start| is the - // starting offset of the ContentEncoding payload. |size| is the size in - // bytes of the ContentEncoding payload. Returns true on success. - long ParseContentEncodingEntry(long long start, long long size, - IMkvReader* pReader); - - // Parses the ContentEncryption element from |pReader|. |start| is the - // starting offset of the ContentEncryption payload. |size| is the size in - // bytes of the ContentEncryption payload. |encryption| is where the parsed - // values will be stored. - long ParseEncryptionEntry(long long start, long long size, - IMkvReader* pReader, ContentEncryption* encryption); - - unsigned long long encoding_order() const { return encoding_order_; } - unsigned long long encoding_scope() const { return encoding_scope_; } - unsigned long long encoding_type() const { return encoding_type_; } - - private: - // Member variables for list of ContentCompression elements. - ContentCompression** compression_entries_; - ContentCompression** compression_entries_end_; - - // Member variables for list of ContentEncryption elements. - ContentEncryption** encryption_entries_; - ContentEncryption** encryption_entries_end_; - - // ContentEncoding element names - unsigned long long encoding_order_; - unsigned long long encoding_scope_; - unsigned long long encoding_type_; - - // LIBWEBM_DISALLOW_COPY_AND_ASSIGN(ContentEncoding); - ContentEncoding(const ContentEncoding&); - ContentEncoding& operator=(const ContentEncoding&); -}; - -class Track { - Track(const Track&); - Track& operator=(const Track&); - - public: - class Info; - static long Create(Segment*, const Info&, long long element_start, - long long element_size, Track*&); - - enum Type { kVideo = 1, kAudio = 2, kSubtitle = 0x11, kMetadata = 0x21 }; - - Segment* const m_pSegment; - const long long m_element_start; - const long long m_element_size; - virtual ~Track(); - - long GetType() const; - long GetNumber() const; - unsigned long long GetUid() const; - const char* GetNameAsUTF8() const; - const char* GetLanguage() const; - const char* GetCodecNameAsUTF8() const; - const char* GetCodecId() const; - const unsigned char* GetCodecPrivate(size_t&) const; - bool GetLacing() const; - unsigned long long GetDefaultDuration() const; - unsigned long long GetCodecDelay() const; - unsigned long long GetSeekPreRoll() const; - - const BlockEntry* GetEOS() const; - - struct Settings { - long long start; - long long size; - }; - - class Info { - public: - Info(); - ~Info(); - int Copy(Info&) const; - void Clear(); - long type; - long number; - unsigned long long uid; - unsigned long long defaultDuration; - unsigned long long codecDelay; - unsigned long long seekPreRoll; - char* nameAsUTF8; - char* language; - char* codecId; - char* codecNameAsUTF8; - unsigned char* codecPrivate; - size_t codecPrivateSize; - bool lacing; - Settings settings; - - private: - Info(const Info&); - Info& operator=(const Info&); - int CopyStr(char* Info::*str, Info&) const; - }; - - long GetFirst(const BlockEntry*&) const; - long GetNext(const BlockEntry* pCurr, const BlockEntry*& pNext) const; - virtual bool VetEntry(const BlockEntry*) const; - virtual long Seek(long long time_ns, const BlockEntry*&) const; - - const ContentEncoding* GetContentEncodingByIndex(unsigned long idx) const; - unsigned long GetContentEncodingCount() const; - - long ParseContentEncodingsEntry(long long start, long long size); - - protected: - Track(Segment*, long long element_start, long long element_size); - - Info m_info; - - class EOSBlock : public BlockEntry { - public: - EOSBlock(); - - Kind GetKind() const; - const Block* GetBlock() const; - }; - - EOSBlock m_eos; - - private: - ContentEncoding** content_encoding_entries_; - ContentEncoding** content_encoding_entries_end_; -}; - -struct PrimaryChromaticity { - PrimaryChromaticity() : x(0), y(0) {} - ~PrimaryChromaticity() {} - static bool Parse(IMkvReader* reader, long long read_pos, - long long value_size, bool is_x, - PrimaryChromaticity** chromaticity); - float x; - float y; -}; - -struct MasteringMetadata { - static const float kValueNotPresent; - - MasteringMetadata() - : r(NULL), - g(NULL), - b(NULL), - white_point(NULL), - luminance_max(kValueNotPresent), - luminance_min(kValueNotPresent) {} - ~MasteringMetadata() { - delete r; - delete g; - delete b; - delete white_point; - } - - static bool Parse(IMkvReader* reader, long long element_start, - long long element_size, - MasteringMetadata** mastering_metadata); - - PrimaryChromaticity* r; - PrimaryChromaticity* g; - PrimaryChromaticity* b; - PrimaryChromaticity* white_point; - float luminance_max; - float luminance_min; -}; - -struct Colour { - static const long long kValueNotPresent; - - // Unless otherwise noted all values assigned upon construction are the - // equivalent of unspecified/default. - Colour() - : matrix_coefficients(kValueNotPresent), - bits_per_channel(kValueNotPresent), - chroma_subsampling_horz(kValueNotPresent), - chroma_subsampling_vert(kValueNotPresent), - cb_subsampling_horz(kValueNotPresent), - cb_subsampling_vert(kValueNotPresent), - chroma_siting_horz(kValueNotPresent), - chroma_siting_vert(kValueNotPresent), - range(kValueNotPresent), - transfer_characteristics(kValueNotPresent), - primaries(kValueNotPresent), - max_cll(kValueNotPresent), - max_fall(kValueNotPresent), - mastering_metadata(NULL) {} - ~Colour() { - delete mastering_metadata; - mastering_metadata = NULL; - } - - static bool Parse(IMkvReader* reader, long long element_start, - long long element_size, Colour** colour); - - long long matrix_coefficients; - long long bits_per_channel; - long long chroma_subsampling_horz; - long long chroma_subsampling_vert; - long long cb_subsampling_horz; - long long cb_subsampling_vert; - long long chroma_siting_horz; - long long chroma_siting_vert; - long long range; - long long transfer_characteristics; - long long primaries; - long long max_cll; - long long max_fall; - - MasteringMetadata* mastering_metadata; -}; - -struct Projection { - enum ProjectionType { - kTypeNotPresent = -1, - kRectangular = 0, - kEquirectangular = 1, - kCubeMap = 2, - kMesh = 3, - }; - static const float kValueNotPresent; - Projection() - : type(kTypeNotPresent), - private_data(NULL), - private_data_length(0), - pose_yaw(kValueNotPresent), - pose_pitch(kValueNotPresent), - pose_roll(kValueNotPresent) {} - ~Projection() { delete[] private_data; } - static bool Parse(IMkvReader* reader, long long element_start, - long long element_size, Projection** projection); - - ProjectionType type; - unsigned char* private_data; - size_t private_data_length; - float pose_yaw; - float pose_pitch; - float pose_roll; -}; - -class VideoTrack : public Track { - VideoTrack(const VideoTrack&); - VideoTrack& operator=(const VideoTrack&); - - VideoTrack(Segment*, long long element_start, long long element_size); - - public: - virtual ~VideoTrack(); - static long Parse(Segment*, const Info&, long long element_start, - long long element_size, VideoTrack*&); - - long long GetWidth() const; - long long GetHeight() const; - long long GetDisplayWidth() const; - long long GetDisplayHeight() const; - long long GetDisplayUnit() const; - long long GetStereoMode() const; - double GetFrameRate() const; - - bool VetEntry(const BlockEntry*) const; - long Seek(long long time_ns, const BlockEntry*&) const; - - Colour* GetColour() const; - - Projection* GetProjection() const; - - const char* GetColourSpace() const { return m_colour_space; } - - private: - long long m_width; - long long m_height; - long long m_display_width; - long long m_display_height; - long long m_display_unit; - long long m_stereo_mode; - char* m_colour_space; - double m_rate; - - Colour* m_colour; - Projection* m_projection; -}; - -class AudioTrack : public Track { - AudioTrack(const AudioTrack&); - AudioTrack& operator=(const AudioTrack&); - - AudioTrack(Segment*, long long element_start, long long element_size); - - public: - static long Parse(Segment*, const Info&, long long element_start, - long long element_size, AudioTrack*&); - - double GetSamplingRate() const; - long long GetChannels() const; - long long GetBitDepth() const; - - private: - double m_rate; - long long m_channels; - long long m_bitDepth; -}; - -class Tracks { - Tracks(const Tracks&); - Tracks& operator=(const Tracks&); - - public: - Segment* const m_pSegment; - const long long m_start; - const long long m_size; - const long long m_element_start; - const long long m_element_size; - - Tracks(Segment*, long long start, long long size, long long element_start, - long long element_size); - - ~Tracks(); - - long Parse(); - - unsigned long GetTracksCount() const; - - const Track* GetTrackByNumber(long tn) const; - const Track* GetTrackByIndex(unsigned long idx) const; - - private: - Track** m_trackEntries; - Track** m_trackEntriesEnd; - - long ParseTrackEntry(long long payload_start, long long payload_size, - long long element_start, long long element_size, - Track*&) const; -}; - -class Chapters { - Chapters(const Chapters&); - Chapters& operator=(const Chapters&); - - public: - Segment* const m_pSegment; - const long long m_start; - const long long m_size; - const long long m_element_start; - const long long m_element_size; - - Chapters(Segment*, long long payload_start, long long payload_size, - long long element_start, long long element_size); - - ~Chapters(); - - long Parse(); - - class Atom; - class Edition; - - class Display { - friend class Atom; - Display(); - Display(const Display&); - ~Display(); - Display& operator=(const Display&); - - public: - const char* GetString() const; - const char* GetLanguage() const; - const char* GetCountry() const; - - private: - void Init(); - void ShallowCopy(Display&) const; - void Clear(); - long Parse(IMkvReader*, long long pos, long long size); - - char* m_string; - char* m_language; - char* m_country; - }; - - class Atom { - friend class Edition; - Atom(); - Atom(const Atom&); - ~Atom(); - Atom& operator=(const Atom&); - - public: - unsigned long long GetUID() const; - const char* GetStringUID() const; - - long long GetStartTimecode() const; - long long GetStopTimecode() const; - - long long GetStartTime(const Chapters*) const; - long long GetStopTime(const Chapters*) const; - - int GetDisplayCount() const; - const Display* GetDisplay(int index) const; - - private: - void Init(); - void ShallowCopy(Atom&) const; - void Clear(); - long Parse(IMkvReader*, long long pos, long long size); - static long long GetTime(const Chapters*, long long timecode); - - long ParseDisplay(IMkvReader*, long long pos, long long size); - bool ExpandDisplaysArray(); - - char* m_string_uid; - unsigned long long m_uid; - long long m_start_timecode; - long long m_stop_timecode; - - Display* m_displays; - int m_displays_size; - int m_displays_count; - }; - - class Edition { - friend class Chapters; - Edition(); - Edition(const Edition&); - ~Edition(); - Edition& operator=(const Edition&); - - public: - int GetAtomCount() const; - const Atom* GetAtom(int index) const; - - private: - void Init(); - void ShallowCopy(Edition&) const; - void Clear(); - long Parse(IMkvReader*, long long pos, long long size); - - long ParseAtom(IMkvReader*, long long pos, long long size); - bool ExpandAtomsArray(); - - Atom* m_atoms; - int m_atoms_size; - int m_atoms_count; - }; - - int GetEditionCount() const; - const Edition* GetEdition(int index) const; - - private: - long ParseEdition(long long pos, long long size); - bool ExpandEditionsArray(); - - Edition* m_editions; - int m_editions_size; - int m_editions_count; -}; - -class Tags { - Tags(const Tags&); - Tags& operator=(const Tags&); - - public: - Segment* const m_pSegment; - const long long m_start; - const long long m_size; - const long long m_element_start; - const long long m_element_size; - - Tags(Segment*, long long payload_start, long long payload_size, - long long element_start, long long element_size); - - ~Tags(); - - long Parse(); - - class Tag; - class SimpleTag; - - class SimpleTag { - friend class Tag; - SimpleTag(); - SimpleTag(const SimpleTag&); - ~SimpleTag(); - SimpleTag& operator=(const SimpleTag&); - - public: - const char* GetTagName() const; - const char* GetTagString() const; - - private: - void Init(); - void ShallowCopy(SimpleTag&) const; - void Clear(); - long Parse(IMkvReader*, long long pos, long long size); - - char* m_tag_name; - char* m_tag_string; - }; - - class Tag { - friend class Tags; - Tag(); - Tag(const Tag&); - ~Tag(); - Tag& operator=(const Tag&); - - public: - int GetSimpleTagCount() const; - const SimpleTag* GetSimpleTag(int index) const; - - private: - void Init(); - void ShallowCopy(Tag&) const; - void Clear(); - long Parse(IMkvReader*, long long pos, long long size); - - long ParseSimpleTag(IMkvReader*, long long pos, long long size); - bool ExpandSimpleTagsArray(); - - SimpleTag* m_simple_tags; - int m_simple_tags_size; - int m_simple_tags_count; - }; - - int GetTagCount() const; - const Tag* GetTag(int index) const; - - private: - long ParseTag(long long pos, long long size); - bool ExpandTagsArray(); - - Tag* m_tags; - int m_tags_size; - int m_tags_count; -}; - -class SegmentInfo { - SegmentInfo(const SegmentInfo&); - SegmentInfo& operator=(const SegmentInfo&); - - public: - Segment* const m_pSegment; - const long long m_start; - const long long m_size; - const long long m_element_start; - const long long m_element_size; - - SegmentInfo(Segment*, long long start, long long size, - long long element_start, long long element_size); - - ~SegmentInfo(); - - long Parse(); - - long long GetTimeCodeScale() const; - long long GetDuration() const; // scaled - const char* GetMuxingAppAsUTF8() const; - const char* GetWritingAppAsUTF8() const; - const char* GetTitleAsUTF8() const; - - private: - long long m_timecodeScale; - double m_duration; - char* m_pMuxingAppAsUTF8; - char* m_pWritingAppAsUTF8; - char* m_pTitleAsUTF8; -}; - -class SeekHead { - SeekHead(const SeekHead&); - SeekHead& operator=(const SeekHead&); - - public: - Segment* const m_pSegment; - const long long m_start; - const long long m_size; - const long long m_element_start; - const long long m_element_size; - - SeekHead(Segment*, long long start, long long size, long long element_start, - long long element_size); - - ~SeekHead(); - - long Parse(); - - struct Entry { - Entry(); - - // the SeekHead entry payload - long long id; - long long pos; - - // absolute pos of SeekEntry ID - long long element_start; - - // SeekEntry ID size + size size + payload - long long element_size; - }; - - int GetCount() const; - const Entry* GetEntry(int idx) const; - - struct VoidElement { - // absolute pos of Void ID - long long element_start; - - // ID size + size size + payload size - long long element_size; - }; - - int GetVoidElementCount() const; - const VoidElement* GetVoidElement(int idx) const; - - private: - Entry* m_entries; - int m_entry_count; - - VoidElement* m_void_elements; - int m_void_element_count; - - static bool ParseEntry(IMkvReader*, - long long pos, // payload - long long size, Entry*); -}; - -class Cues; -class CuePoint { - friend class Cues; - - CuePoint(long, long long); - ~CuePoint(); - - CuePoint(const CuePoint&); - CuePoint& operator=(const CuePoint&); - - public: - long long m_element_start; - long long m_element_size; - - bool Load(IMkvReader*); - - long long GetTimeCode() const; // absolute but unscaled - long long GetTime(const Segment*) const; // absolute and scaled (ns units) - - struct TrackPosition { - long long m_track; - long long m_pos; // of cluster - long long m_block; - // codec_state //defaults to 0 - // reference = clusters containing req'd referenced blocks - // reftime = timecode of the referenced block - - bool Parse(IMkvReader*, long long, long long); - }; - - const TrackPosition* Find(const Track*) const; - - private: - const long m_index; - long long m_timecode; - TrackPosition* m_track_positions; - size_t m_track_positions_count; -}; - -class Cues { - friend class Segment; - - Cues(Segment*, long long start, long long size, long long element_start, - long long element_size); - ~Cues(); - - Cues(const Cues&); - Cues& operator=(const Cues&); - - public: - Segment* const m_pSegment; - const long long m_start; - const long long m_size; - const long long m_element_start; - const long long m_element_size; - - bool Find( // lower bound of time_ns - long long time_ns, const Track*, const CuePoint*&, - const CuePoint::TrackPosition*&) const; - - const CuePoint* GetFirst() const; - const CuePoint* GetLast() const; - const CuePoint* GetNext(const CuePoint*) const; - - const BlockEntry* GetBlock(const CuePoint*, - const CuePoint::TrackPosition*) const; - - bool LoadCuePoint() const; - long GetCount() const; // loaded only - // long GetTotal() const; //loaded + preloaded - bool DoneParsing() const; - - private: - bool Init() const; - bool PreloadCuePoint(long&, long long) const; - - mutable CuePoint** m_cue_points; - mutable long m_count; - mutable long m_preload_count; - mutable long long m_pos; -}; - -class Cluster { - friend class Segment; - - Cluster(const Cluster&); - Cluster& operator=(const Cluster&); - - public: - Segment* const m_pSegment; - - public: - static Cluster* Create(Segment*, - long index, // index in segment - long long off); // offset relative to segment - // long long element_size); - - Cluster(); // EndOfStream - ~Cluster(); - - bool EOS() const; - - long long GetTimeCode() const; // absolute, but not scaled - long long GetTime() const; // absolute, and scaled (nanosecond units) - long long GetFirstTime() const; // time (ns) of first (earliest) block - long long GetLastTime() const; // time (ns) of last (latest) block - - long GetFirst(const BlockEntry*&) const; - long GetLast(const BlockEntry*&) const; - long GetNext(const BlockEntry* curr, const BlockEntry*& next) const; - - const BlockEntry* GetEntry(const Track*, long long ns = -1) const; - const BlockEntry* GetEntry(const CuePoint&, - const CuePoint::TrackPosition&) const; - // const BlockEntry* GetMaxKey(const VideoTrack*) const; - - // static bool HasBlockEntries(const Segment*, long long); - - static long HasBlockEntries(const Segment*, long long idoff, long long& pos, - long& size); - - long GetEntryCount() const; - - long Load(long long& pos, long& size) const; - - long Parse(long long& pos, long& size) const; - long GetEntry(long index, const mkvparser::BlockEntry*&) const; - - protected: - Cluster(Segment*, long index, long long element_start); - // long long element_size); - - public: - const long long m_element_start; - long long GetPosition() const; // offset relative to segment - - long GetIndex() const; - long long GetElementSize() const; - // long long GetPayloadSize() const; - - // long long Unparsed() const; - - private: - long m_index; - mutable long long m_pos; - // mutable long long m_size; - mutable long long m_element_size; - mutable long long m_timecode; - mutable BlockEntry** m_entries; - mutable long m_entries_size; - mutable long m_entries_count; - - long ParseSimpleBlock(long long, long long&, long&); - long ParseBlockGroup(long long, long long&, long&); - - long CreateBlock(long long id, long long pos, long long size, - long long discard_padding); - long CreateBlockGroup(long long start_offset, long long size, - long long discard_padding); - long CreateSimpleBlock(long long, long long); -}; - -class Segment { - friend class Cues; - friend class Track; - friend class VideoTrack; - - Segment(const Segment&); - Segment& operator=(const Segment&); - - private: - Segment(IMkvReader*, long long elem_start, - // long long elem_size, - long long pos, long long size); - - public: - IMkvReader* const m_pReader; - const long long m_element_start; - // const long long m_element_size; - const long long m_start; // posn of segment payload - const long long m_size; // size of segment payload - Cluster m_eos; // TODO: make private? - - static long long CreateInstance(IMkvReader*, long long, Segment*&); - ~Segment(); - - long Load(); // loads headers and all clusters - - // for incremental loading - // long long Unparsed() const; - bool DoneParsing() const; - long long ParseHeaders(); // stops when first cluster is found - // long FindNextCluster(long long& pos, long& size) const; - long LoadCluster(long long& pos, long& size); // load one cluster - long LoadCluster(); - - long ParseNext(const Cluster* pCurr, const Cluster*& pNext, long long& pos, - long& size); - - const SeekHead* GetSeekHead() const; - const Tracks* GetTracks() const; - const SegmentInfo* GetInfo() const; - const Cues* GetCues() const; - const Chapters* GetChapters() const; - const Tags* GetTags() const; - - long long GetDuration() const; - - unsigned long GetCount() const; - const Cluster* GetFirst() const; - const Cluster* GetLast() const; - const Cluster* GetNext(const Cluster*); - - const Cluster* FindCluster(long long time_nanoseconds) const; - // const BlockEntry* Seek(long long time_nanoseconds, const Track*) const; - - const Cluster* FindOrPreloadCluster(long long pos); - - long ParseCues(long long cues_off, // offset relative to start of segment - long long& parse_pos, long& parse_len); - - private: - long long m_pos; // absolute file posn; what has been consumed so far - Cluster* m_pUnknownSize; - - SeekHead* m_pSeekHead; - SegmentInfo* m_pInfo; - Tracks* m_pTracks; - Cues* m_pCues; - Chapters* m_pChapters; - Tags* m_pTags; - Cluster** m_clusters; - long m_clusterCount; // number of entries for which m_index >= 0 - long m_clusterPreloadCount; // number of entries for which m_index < 0 - long m_clusterSize; // array size - - long DoLoadCluster(long long&, long&); - long DoLoadClusterUnknownSize(long long&, long&); - long DoParseNext(const Cluster*&, long long&, long&); - - bool AppendCluster(Cluster*); - bool PreloadCluster(Cluster*, ptrdiff_t); - - // void ParseSeekHead(long long pos, long long size); - // void ParseSeekEntry(long long pos, long long size); - // void ParseCues(long long); - - const BlockEntry* GetBlock(const CuePoint&, const CuePoint::TrackPosition&); -}; - -} // namespace mkvparser - -inline long mkvparser::Segment::LoadCluster() { - long long pos; - long size; - - return LoadCluster(pos, size); -} - -#endif // MKVPARSER_MKVPARSER_H_ diff --git a/vpx-encoder/android_libs/x86/include/mkvparser/mkvreader.h b/vpx-encoder/android_libs/x86/include/mkvparser/mkvreader.h deleted file mode 100644 index 9831ecf6..00000000 --- a/vpx-encoder/android_libs/x86/include/mkvparser/mkvreader.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) 2010 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -#ifndef MKVPARSER_MKVREADER_H_ -#define MKVPARSER_MKVREADER_H_ - -#include - -#include "mkvparser/mkvparser.h" - -namespace mkvparser { - -class MkvReader : public IMkvReader { - public: - MkvReader(); - explicit MkvReader(FILE* fp); - virtual ~MkvReader(); - - int Open(const char*); - void Close(); - - virtual int Read(long long position, long length, unsigned char* buffer); - virtual int Length(long long* total, long long* available); - - private: - MkvReader(const MkvReader&); - MkvReader& operator=(const MkvReader&); - - // Determines the size of the file. This is called either by the constructor - // or by the Open function depending on file ownership. Returns true on - // success. - bool GetFileSize(); - - long long m_length; - FILE* m_file; - bool reader_owns_file_; -}; - -} // namespace mkvparser - -#endif // MKVPARSER_MKVREADER_H_ diff --git a/vpx-encoder/android_libs/x86/include/vpx/vp8.h b/vpx-encoder/android_libs/x86/include/vpx/vp8.h deleted file mode 100644 index f30dafed..00000000 --- a/vpx-encoder/android_libs/x86/include/vpx/vp8.h +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -/*!\defgroup vp8 VP8 - * \ingroup codecs - * VP8 is a video compression algorithm that uses motion - * compensated prediction, Discrete Cosine Transform (DCT) coding of the - * prediction error signal and context dependent entropy coding techniques - * based on arithmetic principles. It features: - * - YUV 4:2:0 image format - * - Macro-block based coding (16x16 luma plus two 8x8 chroma) - * - 1/4 (1/8) pixel accuracy motion compensated prediction - * - 4x4 DCT transform - * - 128 level linear quantizer - * - In loop deblocking filter - * - Context-based entropy coding - * - * @{ - */ -/*!\file - * \brief Provides controls common to both the VP8 encoder and decoder. - */ -#ifndef VPX_VPX_VP8_H_ -#define VPX_VPX_VP8_H_ - -#include "./vpx_codec.h" -#include "./vpx_image.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/*!\brief Control functions - * - * The set of macros define the control functions of VP8 interface - */ -enum vp8_com_control_id { - /*!\brief pass in an external frame into decoder to be used as reference frame - */ - VP8_SET_REFERENCE = 1, - VP8_COPY_REFERENCE = 2, /**< get a copy of reference frame from the decoder */ - VP8_SET_POSTPROC = 3, /**< set the decoder's post processing settings */ - - /* TODO(jkoleszar): The encoder incorrectly reuses some of these values (5+) - * for its control ids. These should be migrated to something like the - * VP8_DECODER_CTRL_ID_START range next time we're ready to break the ABI. - */ - VP9_GET_REFERENCE = 128, /**< get a pointer to a reference frame */ - VP8_COMMON_CTRL_ID_MAX, - VP8_DECODER_CTRL_ID_START = 256 -}; - -/*!\brief post process flags - * - * The set of macros define VP8 decoder post processing flags - */ -enum vp8_postproc_level { - VP8_NOFILTERING = 0, - VP8_DEBLOCK = 1 << 0, - VP8_DEMACROBLOCK = 1 << 1, - VP8_ADDNOISE = 1 << 2, - VP8_MFQE = 1 << 3 -}; - -/*!\brief post process flags - * - * This define a structure that describe the post processing settings. For - * the best objective measure (using the PSNR metric) set post_proc_flag - * to VP8_DEBLOCK and deblocking_level to 1. - */ - -typedef struct vp8_postproc_cfg { - /*!\brief the types of post processing to be done, should be combination of - * "vp8_postproc_level" */ - int post_proc_flag; - int deblocking_level; /**< the strength of deblocking, valid range [0, 16] */ - int noise_level; /**< the strength of additive noise, valid range [0, 16] */ -} vp8_postproc_cfg_t; - -/*!\brief reference frame type - * - * The set of macros define the type of VP8 reference frames - */ -typedef enum vpx_ref_frame_type { - VP8_LAST_FRAME = 1, - VP8_GOLD_FRAME = 2, - VP8_ALTR_FRAME = 4 -} vpx_ref_frame_type_t; - -/*!\brief reference frame data struct - * - * Define the data struct to access vp8 reference frames. - */ -typedef struct vpx_ref_frame { - vpx_ref_frame_type_t frame_type; /**< which reference frame */ - vpx_image_t img; /**< reference frame data in image format */ -} vpx_ref_frame_t; - -/*!\brief VP9 specific reference frame data struct - * - * Define the data struct to access vp9 reference frames. - */ -typedef struct vp9_ref_frame { - int idx; /**< frame index to get (input) */ - vpx_image_t img; /**< img structure to populate (output) */ -} vp9_ref_frame_t; - -/*!\cond */ -/*!\brief vp8 decoder control function parameter type - * - * defines the data type for each of VP8 decoder control function requires - */ -VPX_CTRL_USE_TYPE(VP8_SET_REFERENCE, vpx_ref_frame_t *) -#define VPX_CTRL_VP8_SET_REFERENCE -VPX_CTRL_USE_TYPE(VP8_COPY_REFERENCE, vpx_ref_frame_t *) -#define VPX_CTRL_VP8_COPY_REFERENCE -VPX_CTRL_USE_TYPE(VP8_SET_POSTPROC, vp8_postproc_cfg_t *) -#define VPX_CTRL_VP8_SET_POSTPROC -VPX_CTRL_USE_TYPE(VP9_GET_REFERENCE, vp9_ref_frame_t *) -#define VPX_CTRL_VP9_GET_REFERENCE - -/*!\endcond */ -/*! @} - end defgroup vp8 */ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // VPX_VPX_VP8_H_ diff --git a/vpx-encoder/android_libs/x86/include/vpx/vp8cx.h b/vpx-encoder/android_libs/x86/include/vpx/vp8cx.h deleted file mode 100644 index b2d57dce..00000000 --- a/vpx-encoder/android_libs/x86/include/vpx/vp8cx.h +++ /dev/null @@ -1,1027 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ -#ifndef VPX_VPX_VP8CX_H_ -#define VPX_VPX_VP8CX_H_ - -/*!\defgroup vp8_encoder WebM VP8/VP9 Encoder - * \ingroup vp8 - * - * @{ - */ -#include "./vp8.h" -#include "./vpx_encoder.h" - -/*!\file - * \brief Provides definitions for using VP8 or VP9 encoder algorithm within the - * vpx Codec Interface. - */ - -#ifdef __cplusplus -extern "C" { -#endif - -/*!\name Algorithm interface for VP8 - * - * This interface provides the capability to encode raw VP8 streams. - * @{ - */ -extern vpx_codec_iface_t vpx_codec_vp8_cx_algo; -extern vpx_codec_iface_t *vpx_codec_vp8_cx(void); -/*!@} - end algorithm interface member group*/ - -/*!\name Algorithm interface for VP9 - * - * This interface provides the capability to encode raw VP9 streams. - * @{ - */ -extern vpx_codec_iface_t vpx_codec_vp9_cx_algo; -extern vpx_codec_iface_t *vpx_codec_vp9_cx(void); -/*!@} - end algorithm interface member group*/ - -/* - * Algorithm Flags - */ - -/*!\brief Don't reference the last frame - * - * When this flag is set, the encoder will not use the last frame as a - * predictor. When not set, the encoder will choose whether to use the - * last frame or not automatically. - */ -#define VP8_EFLAG_NO_REF_LAST (1 << 16) - -/*!\brief Don't reference the golden frame - * - * When this flag is set, the encoder will not use the golden frame as a - * predictor. When not set, the encoder will choose whether to use the - * golden frame or not automatically. - */ -#define VP8_EFLAG_NO_REF_GF (1 << 17) - -/*!\brief Don't reference the alternate reference frame - * - * When this flag is set, the encoder will not use the alt ref frame as a - * predictor. When not set, the encoder will choose whether to use the - * alt ref frame or not automatically. - */ -#define VP8_EFLAG_NO_REF_ARF (1 << 21) - -/*!\brief Don't update the last frame - * - * When this flag is set, the encoder will not update the last frame with - * the contents of the current frame. - */ -#define VP8_EFLAG_NO_UPD_LAST (1 << 18) - -/*!\brief Don't update the golden frame - * - * When this flag is set, the encoder will not update the golden frame with - * the contents of the current frame. - */ -#define VP8_EFLAG_NO_UPD_GF (1 << 22) - -/*!\brief Don't update the alternate reference frame - * - * When this flag is set, the encoder will not update the alt ref frame with - * the contents of the current frame. - */ -#define VP8_EFLAG_NO_UPD_ARF (1 << 23) - -/*!\brief Force golden frame update - * - * When this flag is set, the encoder copy the contents of the current frame - * to the golden frame buffer. - */ -#define VP8_EFLAG_FORCE_GF (1 << 19) - -/*!\brief Force alternate reference frame update - * - * When this flag is set, the encoder copy the contents of the current frame - * to the alternate reference frame buffer. - */ -#define VP8_EFLAG_FORCE_ARF (1 << 24) - -/*!\brief Disable entropy update - * - * When this flag is set, the encoder will not update its internal entropy - * model based on the entropy of this frame. - */ -#define VP8_EFLAG_NO_UPD_ENTROPY (1 << 20) - -/*!\brief VPx encoder control functions - * - * This set of macros define the control functions available for VPx - * encoder interface. - * - * \sa #vpx_codec_control - */ -enum vp8e_enc_control_id { - /*!\brief Codec control function to pass an ROI map to encoder. - * - * Supported in codecs: VP8 - */ - VP8E_SET_ROI_MAP = 8, - - /*!\brief Codec control function to pass an Active map to encoder. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_ACTIVEMAP, - - /*!\brief Codec control function to set encoder scaling mode. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_SCALEMODE = 11, - - /*!\brief Codec control function to set encoder internal speed settings. - * - * Changes in this value influences, among others, the encoder's selection - * of motion estimation methods. Values greater than 0 will increase encoder - * speed at the expense of quality. - * - * \note Valid range for VP8: -16..16 - * \note Valid range for VP9: -8..8 - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_CPUUSED = 13, - - /*!\brief Codec control function to enable automatic use of arf frames. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_ENABLEAUTOALTREF, - - /*!\brief control function to set noise sensitivity - * - * 0: off, 1: OnYOnly, 2: OnYUV, - * 3: OnYUVAggressive, 4: Adaptive - * - * Supported in codecs: VP8 - */ - VP8E_SET_NOISE_SENSITIVITY, - - /*!\brief Codec control function to set higher sharpness at the expense - * of a lower PSNR. - * - * \note Valid range: 0..7 - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_SHARPNESS, - - /*!\brief Codec control function to set the threshold for MBs treated static. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_STATIC_THRESHOLD, - - /*!\brief Codec control function to set the number of token partitions. - * - * Supported in codecs: VP8 - */ - VP8E_SET_TOKEN_PARTITIONS, - - /*!\brief Codec control function to get last quantizer chosen by the encoder. - * - * Return value uses internal quantizer scale defined by the codec. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_GET_LAST_QUANTIZER, - - /*!\brief Codec control function to get last quantizer chosen by the encoder. - * - * Return value uses the 0..63 scale as used by the rc_*_quantizer config - * parameters. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_GET_LAST_QUANTIZER_64, - - /*!\brief Codec control function to set the max no of frames to create arf. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_ARNR_MAXFRAMES, - - /*!\brief Codec control function to set the filter strength for the arf. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_ARNR_STRENGTH, - - /*!\deprecated control function to set the filter type to use for the arf. */ - VP8E_SET_ARNR_TYPE, - - /*!\brief Codec control function to set visual tuning. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_TUNING, - - /*!\brief Codec control function to set constrained quality level. - * - * \attention For this value to be used vpx_codec_enc_cfg_t::rc_end_usage must - * be set to #VPX_CQ - * \note Valid range: 0..63 - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_CQ_LEVEL, - - /*!\brief Codec control function to set Max data rate for Intra frames. - * - * This value controls additional clamping on the maximum size of a - * keyframe. It is expressed as a percentage of the average - * per-frame bitrate, with the special (and default) value 0 meaning - * unlimited, or no additional clamping beyond the codec's built-in - * algorithm. - * - * For example, to allocate no more than 4.5 frames worth of bitrate - * to a keyframe, set this to 450. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_MAX_INTRA_BITRATE_PCT, - - /*!\brief Codec control function to set reference and update frame flags. - * - * Supported in codecs: VP8 - */ - VP8E_SET_FRAME_FLAGS, - - /*!\brief Codec control function to set max data rate for Inter frames. - * - * This value controls additional clamping on the maximum size of an - * inter frame. It is expressed as a percentage of the average - * per-frame bitrate, with the special (and default) value 0 meaning - * unlimited, or no additional clamping beyond the codec's built-in - * algorithm. - * - * For example, to allow no more than 4.5 frames worth of bitrate - * to an inter frame, set this to 450. - * - * Supported in codecs: VP9 - */ - VP9E_SET_MAX_INTER_BITRATE_PCT, - - /*!\brief Boost percentage for Golden Frame in CBR mode. - * - * This value controls the amount of boost given to Golden Frame in - * CBR mode. It is expressed as a percentage of the average - * per-frame bitrate, with the special (and default) value 0 meaning - * the feature is off, i.e., no golden frame boost in CBR mode and - * average bitrate target is used. - * - * For example, to allow 100% more bits, i.e, 2X, in a golden frame - * than average frame, set this to 100. - * - * Supported in codecs: VP9 - */ - VP9E_SET_GF_CBR_BOOST_PCT, - - /*!\brief Codec control function to set the temporal layer id. - * - * For temporal scalability: this control allows the application to set the - * layer id for each frame to be encoded. Note that this control must be set - * for every frame prior to encoding. The usage of this control function - * supersedes the internal temporal pattern counter, which is now deprecated. - * - * Supported in codecs: VP8 - */ - VP8E_SET_TEMPORAL_LAYER_ID, - - /*!\brief Codec control function to set encoder screen content mode. - * - * 0: off, 1: On, 2: On with more aggressive rate control. - * - * Supported in codecs: VP8 - */ - VP8E_SET_SCREEN_CONTENT_MODE, - - /*!\brief Codec control function to set lossless encoding mode. - * - * VP9 can operate in lossless encoding mode, in which the bitstream - * produced will be able to decode and reconstruct a perfect copy of - * input source. This control function provides a mean to switch encoder - * into lossless coding mode(1) or normal coding mode(0) that may be lossy. - * 0 = lossy coding mode - * 1 = lossless coding mode - * - * By default, encoder operates in normal coding mode (maybe lossy). - * - * Supported in codecs: VP9 - */ - VP9E_SET_LOSSLESS, - - /*!\brief Codec control function to set number of tile columns. - * - * In encoding and decoding, VP9 allows an input image frame be partitioned - * into separated vertical tile columns, which can be encoded or decoded - * independently. This enables easy implementation of parallel encoding and - * decoding. This control requests the encoder to use column tiles in - * encoding an input frame, with number of tile columns (in Log2 unit) as - * the parameter: - * 0 = 1 tile column - * 1 = 2 tile columns - * 2 = 4 tile columns - * ..... - * n = 2**n tile columns - * The requested tile columns will be capped by the encoder based on image - * size limitations (The minimum width of a tile column is 256 pixels, the - * maximum is 4096). - * - * By default, the value is 6, i.e., the maximum number of tiles supported by - * the resolution. - * - * Supported in codecs: VP9 - */ - VP9E_SET_TILE_COLUMNS, - - /*!\brief Codec control function to set number of tile rows. - * - * In encoding and decoding, VP9 allows an input image frame be partitioned - * into separated horizontal tile rows. Tile rows are encoded or decoded - * sequentially. Even though encoding/decoding of later tile rows depends on - * earlier ones, this allows the encoder to output data packets for tile rows - * prior to completely processing all tile rows in a frame, thereby reducing - * the latency in processing between input and output. The parameter - * for this control describes the number of tile rows, which has a valid - * range [0, 2]: - * 0 = 1 tile row - * 1 = 2 tile rows - * 2 = 4 tile rows - * - * By default, the value is 0, i.e. one single row tile for entire image. - * - * Supported in codecs: VP9 - */ - VP9E_SET_TILE_ROWS, - - /*!\brief Codec control function to enable frame parallel decoding feature. - * - * VP9 has a bitstream feature to reduce decoding dependency between frames - * by turning off backward update of probability context used in encoding - * and decoding. This allows staged parallel processing of more than one - * video frame in the decoder. This control function provides a means to - * turn this feature on or off for bitstreams produced by encoder. - * - * By default, this feature is on. - * - * Supported in codecs: VP9 - */ - VP9E_SET_FRAME_PARALLEL_DECODING, - - /*!\brief Codec control function to set adaptive quantization mode. - * - * VP9 has a segment based feature that allows encoder to adaptively change - * quantization parameter for each segment within a frame to improve the - * subjective quality. This control makes encoder operate in one of the - * several AQ_modes supported. - * - * By default, encoder operates with AQ_Mode 0(adaptive quantization off). - * - * Supported in codecs: VP9 - */ - VP9E_SET_AQ_MODE, - - /*!\brief Codec control function to enable/disable periodic Q boost. - * - * One VP9 encoder speed feature is to enable quality boost by lowering - * frame level Q periodically. This control function provides a mean to - * turn on/off this feature. - * 0 = off - * 1 = on - * - * By default, the encoder is allowed to use this feature for appropriate - * encoding modes. - * - * Supported in codecs: VP9 - */ - VP9E_SET_FRAME_PERIODIC_BOOST, - - /*!\brief Codec control function to set noise sensitivity. - * - * 0: off, 1: On(YOnly), 2: For SVC only, on top two spatial layers(YOnly) - * - * Supported in codecs: VP9 - */ - VP9E_SET_NOISE_SENSITIVITY, - - /*!\brief Codec control function to turn on/off SVC in encoder. - * \note Return value is VPX_CODEC_INVALID_PARAM if the encoder does not - * support SVC in its current encoding mode - * 0: off, 1: on - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC, - - /*!\brief Codec control function to pass an ROI map to encoder. - * - * Supported in codecs: VP9 - */ - VP9E_SET_ROI_MAP, - - /*!\brief Codec control function to set parameters for SVC. - * \note Parameters contain min_q, max_q, scaling factor for each of the - * SVC layers. - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_PARAMETERS, - - /*!\brief Codec control function to set svc layer for spatial and temporal. - * \note Valid ranges: 0..#vpx_codec_enc_cfg::ss_number_layers for spatial - * layer and 0..#vpx_codec_enc_cfg::ts_number_layers for - * temporal layer. - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_LAYER_ID, - - /*!\brief Codec control function to set content type. - * \note Valid parameter range: - * VP9E_CONTENT_DEFAULT = Regular video content (Default) - * VP9E_CONTENT_SCREEN = Screen capture content - * VP9E_CONTENT_FILM = Film content: improves grain retention - * - * Supported in codecs: VP9 - */ - VP9E_SET_TUNE_CONTENT, - - /*!\brief Codec control function to get svc layer ID. - * \note The layer ID returned is for the data packet from the registered - * callback function. - * - * Supported in codecs: VP9 - */ - VP9E_GET_SVC_LAYER_ID, - - /*!\brief Codec control function to register callback to get per layer packet. - * \note Parameter for this control function is a structure with a callback - * function and a pointer to private data used by the callback. - * - * Supported in codecs: VP9 - */ - VP9E_REGISTER_CX_CALLBACK, - - /*!\brief Codec control function to set color space info. - * \note Valid ranges: 0..7, default is "UNKNOWN". - * 0 = UNKNOWN, - * 1 = BT_601 - * 2 = BT_709 - * 3 = SMPTE_170 - * 4 = SMPTE_240 - * 5 = BT_2020 - * 6 = RESERVED - * 7 = SRGB - * - * Supported in codecs: VP9 - */ - VP9E_SET_COLOR_SPACE, - - /*!\brief Codec control function to set temporal layering mode. - * \note Valid ranges: 0..3, default is "0" - * (VP9E_TEMPORAL_LAYERING_MODE_NOLAYERING). - * 0 = VP9E_TEMPORAL_LAYERING_MODE_NOLAYERING - * 1 = VP9E_TEMPORAL_LAYERING_MODE_BYPASS - * 2 = VP9E_TEMPORAL_LAYERING_MODE_0101 - * 3 = VP9E_TEMPORAL_LAYERING_MODE_0212 - * - * Supported in codecs: VP9 - */ - VP9E_SET_TEMPORAL_LAYERING_MODE, - - /*!\brief Codec control function to set minimum interval between GF/ARF frames - * - * By default the value is set as 4. - * - * Supported in codecs: VP9 - */ - VP9E_SET_MIN_GF_INTERVAL, - - /*!\brief Codec control function to set minimum interval between GF/ARF frames - * - * By default the value is set as 16. - * - * Supported in codecs: VP9 - */ - VP9E_SET_MAX_GF_INTERVAL, - - /*!\brief Codec control function to get an Active map back from the encoder. - * - * Supported in codecs: VP9 - */ - VP9E_GET_ACTIVEMAP, - - /*!\brief Codec control function to set color range bit. - * \note Valid ranges: 0..1, default is 0 - * 0 = Limited range (16..235 or HBD equivalent) - * 1 = Full range (0..255 or HBD equivalent) - * - * Supported in codecs: VP9 - */ - VP9E_SET_COLOR_RANGE, - - /*!\brief Codec control function to set the frame flags and buffer indices - * for spatial layers. The frame flags and buffer indices are set using the - * struct #vpx_svc_ref_frame_config defined below. - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_REF_FRAME_CONFIG, - - /*!\brief Codec control function to set intended rendering image size. - * - * By default, this is identical to the image size in pixels. - * - * Supported in codecs: VP9 - */ - VP9E_SET_RENDER_SIZE, - - /*!\brief Codec control function to set target level. - * - * 255: off (default); 0: only keep level stats; 10: target for level 1.0; - * 11: target for level 1.1; ... 62: target for level 6.2 - * - * Supported in codecs: VP9 - */ - VP9E_SET_TARGET_LEVEL, - - /*!\brief Codec control function to set row level multi-threading. - * - * 0 : off, 1 : on - * - * Supported in codecs: VP9 - */ - VP9E_SET_ROW_MT, - - /*!\brief Codec control function to get bitstream level. - * - * Supported in codecs: VP9 - */ - VP9E_GET_LEVEL, - - /*!\brief Codec control function to enable/disable special mode for altref - * adaptive quantization. You can use it with --aq-mode concurrently. - * - * Enable special adaptive quantization for altref frames based on their - * expected prediction quality for the future frames. - * - * Supported in codecs: VP9 - */ - VP9E_SET_ALT_REF_AQ, - - /*!\brief Boost percentage for Golden Frame in CBR mode. - * - * This value controls the amount of boost given to Golden Frame in - * CBR mode. It is expressed as a percentage of the average - * per-frame bitrate, with the special (and default) value 0 meaning - * the feature is off, i.e., no golden frame boost in CBR mode and - * average bitrate target is used. - * - * For example, to allow 100% more bits, i.e, 2X, in a golden frame - * than average frame, set this to 100. - * - * Supported in codecs: VP8 - */ - VP8E_SET_GF_CBR_BOOST_PCT, - - /*!\brief Codec control function to enable the extreme motion vector unit test - * in VP9. Please note that this is only used in motion vector unit test. - * - * 0 : off, 1 : MAX_EXTREME_MV, 2 : MIN_EXTREME_MV - * - * Supported in codecs: VP9 - */ - VP9E_ENABLE_MOTION_VECTOR_UNIT_TEST, - - /*!\brief Codec control function to constrain the inter-layer prediction - * (prediction of lower spatial resolution) in VP9 SVC. - * - * 0 : inter-layer prediction on, 1 : off, 2 : off only on non-key frames - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_INTER_LAYER_PRED, - - /*!\brief Codec control function to set mode and thresholds for frame - * dropping in SVC. Drop frame thresholds are set per-layer. Mode is set as: - * 0 : layer-dependent dropping, 1 : constrained dropping, current layer drop - * forces drop on all upper layers. Default mode is 0. - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_FRAME_DROP_LAYER, - - /*!\brief Codec control function to get the refresh and reference flags and - * the buffer indices, up to the last encoded spatial layer. - * - * Supported in codecs: VP9 - */ - VP9E_GET_SVC_REF_FRAME_CONFIG, - - /*!\brief Codec control function to enable/disable use of golden reference as - * a second temporal reference for SVC. Only used when inter-layer prediction - * is disabled on INTER frames. - * - * 0: Off, 1: Enabled (default) - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_GF_TEMPORAL_REF, - - /*!\brief Codec control function to enable spatial layer sync frame, for any - * spatial layer. Enabling it for layer k means spatial layer k will disable - * all temporal prediction, but keep the inter-layer prediction. It will - * refresh any temporal reference buffer for that layer, and reset the - * temporal layer for the superframe to 0. Setting the layer sync for base - * spatial layer forces a key frame. Default is off (0) for all spatial - * layers. Spatial layer sync flag is reset to 0 after each encoded layer, - * so when control is invoked it is only used for the current superframe. - * - * 0: Off (default), 1: Enabled - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_SPATIAL_LAYER_SYNC, - - /*!\brief Codec control function to enable temporal dependency model. - * - * Vp9 allows the encoder to run temporal dependency model and use it to - * improve the compression performance. To enable, set this parameter to be - * 1. The default value is set to be 1. - */ - VP9E_SET_TPL, - - /*!\brief Codec control function to enable postencode frame drop. - * - * This will allow encoder to drop frame after it's encoded. - * - * 0: Off (default), 1: Enabled - * - * Supported in codecs: VP9 - */ - VP9E_SET_POSTENCODE_DROP, -}; - -/*!\brief vpx 1-D scaling mode - * - * This set of constants define 1-D vpx scaling modes - */ -typedef enum vpx_scaling_mode_1d { - VP8E_NORMAL = 0, - VP8E_FOURFIVE = 1, - VP8E_THREEFIVE = 2, - VP8E_ONETWO = 3 -} VPX_SCALING_MODE; - -/*!\brief Temporal layering mode enum for VP9 SVC. - * - * This set of macros define the different temporal layering modes. - * Supported codecs: VP9 (in SVC mode) - * - */ -typedef enum vp9e_temporal_layering_mode { - /*!\brief No temporal layering. - * Used when only spatial layering is used. - */ - VP9E_TEMPORAL_LAYERING_MODE_NOLAYERING = 0, - - /*!\brief Bypass mode. - * Used when application needs to control temporal layering. - * This will only work when the number of spatial layers equals 1. - */ - VP9E_TEMPORAL_LAYERING_MODE_BYPASS = 1, - - /*!\brief 0-1-0-1... temporal layering scheme with two temporal layers. - */ - VP9E_TEMPORAL_LAYERING_MODE_0101 = 2, - - /*!\brief 0-2-1-2... temporal layering scheme with three temporal layers. - */ - VP9E_TEMPORAL_LAYERING_MODE_0212 = 3 -} VP9E_TEMPORAL_LAYERING_MODE; - -/*!\brief vpx region of interest map - * - * These defines the data structures for the region of interest map - * - */ - -typedef struct vpx_roi_map { - /*! If ROI is enabled. */ - uint8_t enabled; - /*! An id between 0-3 (0-7 for vp9) for each 16x16 (8x8 for VP9) - * region within a frame. */ - unsigned char *roi_map; - unsigned int rows; /**< Number of rows. */ - unsigned int cols; /**< Number of columns. */ - /*! VP8 only uses the first 4 segments. VP9 uses 8 segments. */ - int delta_q[8]; /**< Quantizer deltas. */ - int delta_lf[8]; /**< Loop filter deltas. */ - /*! skip and ref frame segment is only used in VP9. */ - int skip[8]; /**< Skip this block. */ - int ref_frame[8]; /**< Reference frame for this block. */ - /*! Static breakout threshold for each segment. Only used in VP8. */ - unsigned int static_threshold[4]; -} vpx_roi_map_t; - -/*!\brief vpx active region map - * - * These defines the data structures for active region map - * - */ - -typedef struct vpx_active_map { - /*!\brief specify an on (1) or off (0) each 16x16 region within a frame */ - unsigned char *active_map; - unsigned int rows; /**< number of rows */ - unsigned int cols; /**< number of cols */ -} vpx_active_map_t; - -/*!\brief vpx image scaling mode - * - * This defines the data structure for image scaling mode - * - */ -typedef struct vpx_scaling_mode { - VPX_SCALING_MODE h_scaling_mode; /**< horizontal scaling mode */ - VPX_SCALING_MODE v_scaling_mode; /**< vertical scaling mode */ -} vpx_scaling_mode_t; - -/*!\brief VP8 token partition mode - * - * This defines VP8 partitioning mode for compressed data, i.e., the number of - * sub-streams in the bitstream. Used for parallelized decoding. - * - */ - -typedef enum { - VP8_ONE_TOKENPARTITION = 0, - VP8_TWO_TOKENPARTITION = 1, - VP8_FOUR_TOKENPARTITION = 2, - VP8_EIGHT_TOKENPARTITION = 3 -} vp8e_token_partitions; - -/*!brief VP9 encoder content type */ -typedef enum { - VP9E_CONTENT_DEFAULT, - VP9E_CONTENT_SCREEN, - VP9E_CONTENT_FILM, - VP9E_CONTENT_INVALID -} vp9e_tune_content; - -/*!\brief VP8 model tuning parameters - * - * Changes the encoder to tune for certain types of input material. - * - */ -typedef enum { VP8_TUNE_PSNR, VP8_TUNE_SSIM } vp8e_tuning; - -/*!\brief vp9 svc layer parameters - * - * This defines the spatial and temporal layer id numbers for svc encoding. - * This is used with the #VP9E_SET_SVC_LAYER_ID control to set the spatial and - * temporal layer id for the current frame. - * - */ -typedef struct vpx_svc_layer_id { - int spatial_layer_id; /**< First spatial layer to start encoding. */ - // TODO(jianj): Deprecated, to be removed. - int temporal_layer_id; /**< Temporal layer id number. */ - int temporal_layer_id_per_spatial[VPX_SS_MAX_LAYERS]; /**< Temp layer id. */ -} vpx_svc_layer_id_t; - -/*!\brief vp9 svc frame flag parameters. - * - * This defines the frame flags and buffer indices for each spatial layer for - * svc encoding. - * This is used with the #VP9E_SET_SVC_REF_FRAME_CONFIG control to set frame - * flags and buffer indices for each spatial layer for the current (super)frame. - * - */ -typedef struct vpx_svc_ref_frame_config { - int lst_fb_idx[VPX_SS_MAX_LAYERS]; /**< Last buffer index. */ - int gld_fb_idx[VPX_SS_MAX_LAYERS]; /**< Golden buffer index. */ - int alt_fb_idx[VPX_SS_MAX_LAYERS]; /**< Altref buffer index. */ - int update_buffer_slot[VPX_SS_MAX_LAYERS]; /**< Update reference frames. */ - // TODO(jianj): Remove update_last/golden/alt_ref, these are deprecated. - int update_last[VPX_SS_MAX_LAYERS]; /**< Update last. */ - int update_golden[VPX_SS_MAX_LAYERS]; /**< Update golden. */ - int update_alt_ref[VPX_SS_MAX_LAYERS]; /**< Update altref. */ - int reference_last[VPX_SS_MAX_LAYERS]; /**< Last as reference. */ - int reference_golden[VPX_SS_MAX_LAYERS]; /**< Golden as reference. */ - int reference_alt_ref[VPX_SS_MAX_LAYERS]; /**< Altref as reference. */ - int64_t duration[VPX_SS_MAX_LAYERS]; /**< Duration per spatial layer. */ -} vpx_svc_ref_frame_config_t; - -/*!\brief VP9 svc frame dropping mode. - * - * This defines the frame drop mode for SVC. - * - */ -typedef enum { - CONSTRAINED_LAYER_DROP, - /**< Upper layers are constrained to drop if current layer drops. */ - LAYER_DROP, /**< Any spatial layer can drop. */ - FULL_SUPERFRAME_DROP, /**< Only full superframe can drop. */ -} SVC_LAYER_DROP_MODE; - -/*!\brief vp9 svc frame dropping parameters. - * - * This defines the frame drop thresholds for each spatial layer, and - * the frame dropping mode: 0 = layer based frame dropping (default), - * 1 = constrained dropping where current layer drop forces all upper - * spatial layers to drop. - */ -typedef struct vpx_svc_frame_drop { - int framedrop_thresh[VPX_SS_MAX_LAYERS]; /**< Frame drop thresholds */ - SVC_LAYER_DROP_MODE - framedrop_mode; /**< Layer-based or constrained dropping. */ - int max_consec_drop; /**< Maximum consecutive drops, for any layer. */ -} vpx_svc_frame_drop_t; - -/*!\brief vp9 svc spatial layer sync parameters. - * - * This defines the spatial layer sync flag, defined per spatial layer. - * - */ -typedef struct vpx_svc_spatial_layer_sync { - int spatial_layer_sync[VPX_SS_MAX_LAYERS]; /**< Sync layer flags */ - int base_layer_intra_only; /**< Flag for setting Intra-only frame on base */ -} vpx_svc_spatial_layer_sync_t; - -/*!\cond */ -/*!\brief VP8 encoder control function parameter type - * - * Defines the data types that VP8E control functions take. Note that - * additional common controls are defined in vp8.h - * - */ - -VPX_CTRL_USE_TYPE(VP8E_SET_FRAME_FLAGS, int) -#define VPX_CTRL_VP8E_SET_FRAME_FLAGS -VPX_CTRL_USE_TYPE(VP8E_SET_TEMPORAL_LAYER_ID, int) -#define VPX_CTRL_VP8E_SET_TEMPORAL_LAYER_ID -VPX_CTRL_USE_TYPE(VP8E_SET_ROI_MAP, vpx_roi_map_t *) -#define VPX_CTRL_VP8E_SET_ROI_MAP -VPX_CTRL_USE_TYPE(VP9E_SET_ROI_MAP, vpx_roi_map_t *) -#define VPX_CTRL_VP9E_SET_ROI_MAP -VPX_CTRL_USE_TYPE(VP8E_SET_ACTIVEMAP, vpx_active_map_t *) -#define VPX_CTRL_VP8E_SET_ACTIVEMAP -VPX_CTRL_USE_TYPE(VP8E_SET_SCALEMODE, vpx_scaling_mode_t *) -#define VPX_CTRL_VP8E_SET_SCALEMODE - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC, int) -#define VPX_CTRL_VP9E_SET_SVC -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_PARAMETERS, void *) -#define VPX_CTRL_VP9E_SET_SVC_PARAMETERS -VPX_CTRL_USE_TYPE(VP9E_REGISTER_CX_CALLBACK, void *) -#define VPX_CTRL_VP9E_REGISTER_CX_CALLBACK -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_LAYER_ID, vpx_svc_layer_id_t *) -#define VPX_CTRL_VP9E_SET_SVC_LAYER_ID - -VPX_CTRL_USE_TYPE(VP8E_SET_CPUUSED, int) -#define VPX_CTRL_VP8E_SET_CPUUSED -VPX_CTRL_USE_TYPE(VP8E_SET_ENABLEAUTOALTREF, unsigned int) -#define VPX_CTRL_VP8E_SET_ENABLEAUTOALTREF -VPX_CTRL_USE_TYPE(VP8E_SET_NOISE_SENSITIVITY, unsigned int) -#define VPX_CTRL_VP8E_SET_NOISE_SENSITIVITY -VPX_CTRL_USE_TYPE(VP8E_SET_SHARPNESS, unsigned int) -#define VPX_CTRL_VP8E_SET_SHARPNESS -VPX_CTRL_USE_TYPE(VP8E_SET_STATIC_THRESHOLD, unsigned int) -#define VPX_CTRL_VP8E_SET_STATIC_THRESHOLD -VPX_CTRL_USE_TYPE(VP8E_SET_TOKEN_PARTITIONS, int) /* vp8e_token_partitions */ -#define VPX_CTRL_VP8E_SET_TOKEN_PARTITIONS - -VPX_CTRL_USE_TYPE(VP8E_SET_ARNR_MAXFRAMES, unsigned int) -#define VPX_CTRL_VP8E_SET_ARNR_MAXFRAMES -VPX_CTRL_USE_TYPE(VP8E_SET_ARNR_STRENGTH, unsigned int) -#define VPX_CTRL_VP8E_SET_ARNR_STRENGTH -VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_SET_ARNR_TYPE, unsigned int) -#define VPX_CTRL_VP8E_SET_ARNR_TYPE -VPX_CTRL_USE_TYPE(VP8E_SET_TUNING, int) /* vp8e_tuning */ -#define VPX_CTRL_VP8E_SET_TUNING -VPX_CTRL_USE_TYPE(VP8E_SET_CQ_LEVEL, unsigned int) -#define VPX_CTRL_VP8E_SET_CQ_LEVEL - -VPX_CTRL_USE_TYPE(VP9E_SET_TILE_COLUMNS, int) -#define VPX_CTRL_VP9E_SET_TILE_COLUMNS -VPX_CTRL_USE_TYPE(VP9E_SET_TILE_ROWS, int) -#define VPX_CTRL_VP9E_SET_TILE_ROWS - -VPX_CTRL_USE_TYPE(VP9E_SET_TPL, int) -#define VPX_CTRL_VP9E_SET_TPL - -VPX_CTRL_USE_TYPE(VP8E_GET_LAST_QUANTIZER, int *) -#define VPX_CTRL_VP8E_GET_LAST_QUANTIZER -VPX_CTRL_USE_TYPE(VP8E_GET_LAST_QUANTIZER_64, int *) -#define VPX_CTRL_VP8E_GET_LAST_QUANTIZER_64 -VPX_CTRL_USE_TYPE(VP9E_GET_SVC_LAYER_ID, vpx_svc_layer_id_t *) -#define VPX_CTRL_VP9E_GET_SVC_LAYER_ID - -VPX_CTRL_USE_TYPE(VP8E_SET_MAX_INTRA_BITRATE_PCT, unsigned int) -#define VPX_CTRL_VP8E_SET_MAX_INTRA_BITRATE_PCT -VPX_CTRL_USE_TYPE(VP8E_SET_MAX_INTER_BITRATE_PCT, unsigned int) -#define VPX_CTRL_VP8E_SET_MAX_INTER_BITRATE_PCT - -VPX_CTRL_USE_TYPE(VP8E_SET_GF_CBR_BOOST_PCT, unsigned int) -#define VPX_CTRL_VP8E_SET_GF_CBR_BOOST_PCT - -VPX_CTRL_USE_TYPE(VP8E_SET_SCREEN_CONTENT_MODE, unsigned int) -#define VPX_CTRL_VP8E_SET_SCREEN_CONTENT_MODE - -VPX_CTRL_USE_TYPE(VP9E_SET_GF_CBR_BOOST_PCT, unsigned int) -#define VPX_CTRL_VP9E_SET_GF_CBR_BOOST_PCT - -VPX_CTRL_USE_TYPE(VP9E_SET_LOSSLESS, unsigned int) -#define VPX_CTRL_VP9E_SET_LOSSLESS - -VPX_CTRL_USE_TYPE(VP9E_SET_FRAME_PARALLEL_DECODING, unsigned int) -#define VPX_CTRL_VP9E_SET_FRAME_PARALLEL_DECODING - -VPX_CTRL_USE_TYPE(VP9E_SET_AQ_MODE, unsigned int) -#define VPX_CTRL_VP9E_SET_AQ_MODE - -VPX_CTRL_USE_TYPE(VP9E_SET_ALT_REF_AQ, int) -#define VPX_CTRL_VP9E_SET_ALT_REF_AQ - -VPX_CTRL_USE_TYPE(VP9E_SET_FRAME_PERIODIC_BOOST, unsigned int) -#define VPX_CTRL_VP9E_SET_FRAME_PERIODIC_BOOST - -VPX_CTRL_USE_TYPE(VP9E_SET_NOISE_SENSITIVITY, unsigned int) -#define VPX_CTRL_VP9E_SET_NOISE_SENSITIVITY - -VPX_CTRL_USE_TYPE(VP9E_SET_TUNE_CONTENT, int) /* vp9e_tune_content */ -#define VPX_CTRL_VP9E_SET_TUNE_CONTENT - -VPX_CTRL_USE_TYPE(VP9E_SET_COLOR_SPACE, int) -#define VPX_CTRL_VP9E_SET_COLOR_SPACE - -VPX_CTRL_USE_TYPE(VP9E_SET_MIN_GF_INTERVAL, unsigned int) -#define VPX_CTRL_VP9E_SET_MIN_GF_INTERVAL - -VPX_CTRL_USE_TYPE(VP9E_SET_MAX_GF_INTERVAL, unsigned int) -#define VPX_CTRL_VP9E_SET_MAX_GF_INTERVAL - -VPX_CTRL_USE_TYPE(VP9E_GET_ACTIVEMAP, vpx_active_map_t *) -#define VPX_CTRL_VP9E_GET_ACTIVEMAP - -VPX_CTRL_USE_TYPE(VP9E_SET_COLOR_RANGE, int) -#define VPX_CTRL_VP9E_SET_COLOR_RANGE - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_REF_FRAME_CONFIG, vpx_svc_ref_frame_config_t *) -#define VPX_CTRL_VP9E_SET_SVC_REF_FRAME_CONFIG - -VPX_CTRL_USE_TYPE(VP9E_SET_RENDER_SIZE, int *) -#define VPX_CTRL_VP9E_SET_RENDER_SIZE - -VPX_CTRL_USE_TYPE(VP9E_SET_TARGET_LEVEL, unsigned int) -#define VPX_CTRL_VP9E_SET_TARGET_LEVEL - -VPX_CTRL_USE_TYPE(VP9E_SET_ROW_MT, unsigned int) -#define VPX_CTRL_VP9E_SET_ROW_MT - -VPX_CTRL_USE_TYPE(VP9E_GET_LEVEL, int *) -#define VPX_CTRL_VP9E_GET_LEVEL - -VPX_CTRL_USE_TYPE(VP9E_ENABLE_MOTION_VECTOR_UNIT_TEST, unsigned int) -#define VPX_CTRL_VP9E_ENABLE_MOTION_VECTOR_UNIT_TEST - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_INTER_LAYER_PRED, unsigned int) -#define VPX_CTRL_VP9E_SET_SVC_INTER_LAYER_PRED - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_FRAME_DROP_LAYER, vpx_svc_frame_drop_t *) -#define VPX_CTRL_VP9E_SET_SVC_FRAME_DROP_LAYER - -VPX_CTRL_USE_TYPE(VP9E_GET_SVC_REF_FRAME_CONFIG, vpx_svc_ref_frame_config_t *) -#define VPX_CTRL_VP9E_GET_SVC_REF_FRAME_CONFIG - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_GF_TEMPORAL_REF, unsigned int) -#define VPX_CTRL_VP9E_SET_SVC_GF_TEMPORAL_REF - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_SPATIAL_LAYER_SYNC, - vpx_svc_spatial_layer_sync_t *) -#define VPX_CTRL_VP9E_SET_SVC_SPATIAL_LAYER_SYNC - -VPX_CTRL_USE_TYPE(VP9E_SET_POSTENCODE_DROP, unsigned int) -#define VPX_CTRL_VP9E_SET_POSTENCODE_DROP - -/*!\endcond */ -/*! @} - end defgroup vp8_encoder */ -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // VPX_VPX_VP8CX_H_ diff --git a/vpx-encoder/android_libs/x86/include/vpx/vp8dx.h b/vpx-encoder/android_libs/x86/include/vpx/vp8dx.h deleted file mode 100644 index af92f21a..00000000 --- a/vpx-encoder/android_libs/x86/include/vpx/vp8dx.h +++ /dev/null @@ -1,210 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -/*!\defgroup vp8_decoder WebM VP8/VP9 Decoder - * \ingroup vp8 - * - * @{ - */ -/*!\file - * \brief Provides definitions for using VP8 or VP9 within the vpx Decoder - * interface. - */ -#ifndef VPX_VPX_VP8DX_H_ -#define VPX_VPX_VP8DX_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Include controls common to both the encoder and decoder */ -#include "./vp8.h" - -/*!\name Algorithm interface for VP8 - * - * This interface provides the capability to decode VP8 streams. - * @{ - */ -extern vpx_codec_iface_t vpx_codec_vp8_dx_algo; -extern vpx_codec_iface_t *vpx_codec_vp8_dx(void); -/*!@} - end algorithm interface member group*/ - -/*!\name Algorithm interface for VP9 - * - * This interface provides the capability to decode VP9 streams. - * @{ - */ -extern vpx_codec_iface_t vpx_codec_vp9_dx_algo; -extern vpx_codec_iface_t *vpx_codec_vp9_dx(void); -/*!@} - end algorithm interface member group*/ - -/*!\enum vp8_dec_control_id - * \brief VP8 decoder control functions - * - * This set of macros define the control functions available for the VP8 - * decoder interface. - * - * \sa #vpx_codec_control - */ -enum vp8_dec_control_id { - /** control function to get info on which reference frames were updated - * by the last decode - */ - VP8D_GET_LAST_REF_UPDATES = VP8_DECODER_CTRL_ID_START, - - /** check if the indicated frame is corrupted */ - VP8D_GET_FRAME_CORRUPTED, - - /** control function to get info on which reference frames were used - * by the last decode - */ - VP8D_GET_LAST_REF_USED, - - /** decryption function to decrypt encoded buffer data immediately - * before decoding. Takes a vpx_decrypt_init, which contains - * a callback function and opaque context pointer. - */ - VPXD_SET_DECRYPTOR, - VP8D_SET_DECRYPTOR = VPXD_SET_DECRYPTOR, - - /** control function to get the dimensions that the current frame is decoded - * at. This may be different to the intended display size for the frame as - * specified in the wrapper or frame header (see VP9D_GET_DISPLAY_SIZE). */ - VP9D_GET_FRAME_SIZE, - - /** control function to get the current frame's intended display dimensions - * (as specified in the wrapper or frame header). This may be different to - * the decoded dimensions of this frame (see VP9D_GET_FRAME_SIZE). */ - VP9D_GET_DISPLAY_SIZE, - - /** control function to get the bit depth of the stream. */ - VP9D_GET_BIT_DEPTH, - - /** control function to set the byte alignment of the planes in the reference - * buffers. Valid values are power of 2, from 32 to 1024. A value of 0 sets - * legacy alignment. I.e. Y plane is aligned to 32 bytes, U plane directly - * follows Y plane, and V plane directly follows U plane. Default value is 0. - */ - VP9_SET_BYTE_ALIGNMENT, - - /** control function to invert the decoding order to from right to left. The - * function is used in a test to confirm the decoding independence of tile - * columns. The function may be used in application where this order - * of decoding is desired. - * - * TODO(yaowu): Rework the unit test that uses this control, and in a future - * release, this test-only control shall be removed. - */ - VP9_INVERT_TILE_DECODE_ORDER, - - /** control function to set the skip loop filter flag. Valid values are - * integers. The decoder will skip the loop filter when its value is set to - * nonzero. If the loop filter is skipped the decoder may accumulate decode - * artifacts. The default value is 0. - */ - VP9_SET_SKIP_LOOP_FILTER, - - /** control function to decode SVC stream up to the x spatial layers, - * where x is passed in through the control, and is 0 for base layer. - */ - VP9_DECODE_SVC_SPATIAL_LAYER, - - /*!\brief Codec control function to get last decoded frame quantizer. - * - * Return value uses internal quantizer scale defined by the codec. - * - * Supported in codecs: VP8, VP9 - */ - VPXD_GET_LAST_QUANTIZER, - - /*!\brief Codec control function to set row level multi-threading. - * - * 0 : off, 1 : on - * - * Supported in codecs: VP9 - */ - VP9D_SET_ROW_MT, - - /*!\brief Codec control function to set loopfilter optimization. - * - * 0 : off, Loop filter is done after all tiles have been decoded - * 1 : on, Loop filter is done immediately after decode without - * waiting for all threads to sync. - * - * Supported in codecs: VP9 - */ - VP9D_SET_LOOP_FILTER_OPT, - - VP8_DECODER_CTRL_ID_MAX -}; - -/** Decrypt n bytes of data from input -> output, using the decrypt_state - * passed in VPXD_SET_DECRYPTOR. - */ -typedef void (*vpx_decrypt_cb)(void *decrypt_state, const unsigned char *input, - unsigned char *output, int count); - -/*!\brief Structure to hold decryption state - * - * Defines a structure to hold the decryption state and access function. - */ -typedef struct vpx_decrypt_init { - /*! Decrypt callback. */ - vpx_decrypt_cb decrypt_cb; - - /*! Decryption state. */ - void *decrypt_state; -} vpx_decrypt_init; - -/*!\cond */ -/*!\brief VP8 decoder control function parameter type - * - * Defines the data types that VP8D control functions take. Note that - * additional common controls are defined in vp8.h - * - */ - -VPX_CTRL_USE_TYPE(VP8D_GET_LAST_REF_UPDATES, int *) -#define VPX_CTRL_VP8D_GET_LAST_REF_UPDATES -VPX_CTRL_USE_TYPE(VP8D_GET_FRAME_CORRUPTED, int *) -#define VPX_CTRL_VP8D_GET_FRAME_CORRUPTED -VPX_CTRL_USE_TYPE(VP8D_GET_LAST_REF_USED, int *) -#define VPX_CTRL_VP8D_GET_LAST_REF_USED -VPX_CTRL_USE_TYPE(VPXD_GET_LAST_QUANTIZER, int *) -#define VPX_CTRL_VPXD_GET_LAST_QUANTIZER -VPX_CTRL_USE_TYPE(VPXD_SET_DECRYPTOR, vpx_decrypt_init *) -#define VPX_CTRL_VPXD_SET_DECRYPTOR -VPX_CTRL_USE_TYPE(VP8D_SET_DECRYPTOR, vpx_decrypt_init *) -#define VPX_CTRL_VP8D_SET_DECRYPTOR -VPX_CTRL_USE_TYPE(VP9D_GET_DISPLAY_SIZE, int *) -#define VPX_CTRL_VP9D_GET_DISPLAY_SIZE -VPX_CTRL_USE_TYPE(VP9D_GET_BIT_DEPTH, unsigned int *) -#define VPX_CTRL_VP9D_GET_BIT_DEPTH -VPX_CTRL_USE_TYPE(VP9D_GET_FRAME_SIZE, int *) -#define VPX_CTRL_VP9D_GET_FRAME_SIZE -VPX_CTRL_USE_TYPE(VP9_INVERT_TILE_DECODE_ORDER, int) -#define VPX_CTRL_VP9_INVERT_TILE_DECODE_ORDER -#define VPX_CTRL_VP9_DECODE_SVC_SPATIAL_LAYER -VPX_CTRL_USE_TYPE(VP9_DECODE_SVC_SPATIAL_LAYER, int) -#define VPX_CTRL_VP9_SET_SKIP_LOOP_FILTER -VPX_CTRL_USE_TYPE(VP9_SET_SKIP_LOOP_FILTER, int) -#define VPX_CTRL_VP9_DECODE_SET_ROW_MT -VPX_CTRL_USE_TYPE(VP9D_SET_ROW_MT, int) -#define VPX_CTRL_VP9_SET_LOOP_FILTER_OPT -VPX_CTRL_USE_TYPE(VP9D_SET_LOOP_FILTER_OPT, int) - -/*!\endcond */ -/*! @} - end defgroup vp8_decoder */ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // VPX_VPX_VP8DX_H_ diff --git a/vpx-encoder/android_libs/x86/include/vpx/vpx_codec.h b/vpx-encoder/android_libs/x86/include/vpx/vpx_codec.h deleted file mode 100644 index 0f8d7851..00000000 --- a/vpx-encoder/android_libs/x86/include/vpx/vpx_codec.h +++ /dev/null @@ -1,468 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -/*!\defgroup codec Common Algorithm Interface - * This abstraction allows applications to easily support multiple video - * formats with minimal code duplication. This section describes the interface - * common to all codecs (both encoders and decoders). - * @{ - */ - -/*!\file - * \brief Describes the codec algorithm interface to applications. - * - * This file describes the interface between an application and a - * video codec algorithm. - * - * An application instantiates a specific codec instance by using - * vpx_codec_init() and a pointer to the algorithm's interface structure: - *
- *     my_app.c:
- *       extern vpx_codec_iface_t my_codec;
- *       {
- *           vpx_codec_ctx_t algo;
- *           res = vpx_codec_init(&algo, &my_codec);
- *       }
- *     
- * - * Once initialized, the instance is manged using other functions from - * the vpx_codec_* family. - */ -#ifndef VPX_VPX_VPX_CODEC_H_ -#define VPX_VPX_VPX_CODEC_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "./vpx_image.h" -#include "./vpx_integer.h" - -/*!\brief Decorator indicating a function is deprecated */ -#ifndef VPX_DEPRECATED -#if defined(__GNUC__) && __GNUC__ -#define VPX_DEPRECATED __attribute__((deprecated)) -#elif defined(_MSC_VER) -#define VPX_DEPRECATED -#else -#define VPX_DEPRECATED -#endif -#endif /* VPX_DEPRECATED */ - -#ifndef VPX_DECLSPEC_DEPRECATED -#if defined(__GNUC__) && __GNUC__ -#define VPX_DECLSPEC_DEPRECATED /**< \copydoc #VPX_DEPRECATED */ -#elif defined(_MSC_VER) -/*!\brief \copydoc #VPX_DEPRECATED */ -#define VPX_DECLSPEC_DEPRECATED __declspec(deprecated) -#else -#define VPX_DECLSPEC_DEPRECATED /**< \copydoc #VPX_DEPRECATED */ -#endif -#endif /* VPX_DECLSPEC_DEPRECATED */ - -/*!\brief Decorator indicating a function is potentially unused */ -#ifndef VPX_UNUSED -#if defined(__GNUC__) || defined(__clang__) -#define VPX_UNUSED __attribute__((unused)) -#else -#define VPX_UNUSED -#endif -#endif /* VPX_UNUSED */ - -/*!\brief Current ABI version number - * - * \internal - * If this file is altered in any way that changes the ABI, this value - * must be bumped. Examples include, but are not limited to, changing - * types, removing or reassigning enums, adding/removing/rearranging - * fields to structures - */ -#define VPX_CODEC_ABI_VERSION (4 + VPX_IMAGE_ABI_VERSION) /**<\hideinitializer*/ - -/*!\brief Algorithm return codes */ -typedef enum { - /*!\brief Operation completed without error */ - VPX_CODEC_OK, - - /*!\brief Unspecified error */ - VPX_CODEC_ERROR, - - /*!\brief Memory operation failed */ - VPX_CODEC_MEM_ERROR, - - /*!\brief ABI version mismatch */ - VPX_CODEC_ABI_MISMATCH, - - /*!\brief Algorithm does not have required capability */ - VPX_CODEC_INCAPABLE, - - /*!\brief The given bitstream is not supported. - * - * The bitstream was unable to be parsed at the highest level. The decoder - * is unable to proceed. This error \ref SHOULD be treated as fatal to the - * stream. */ - VPX_CODEC_UNSUP_BITSTREAM, - - /*!\brief Encoded bitstream uses an unsupported feature - * - * The decoder does not implement a feature required by the encoder. This - * return code should only be used for features that prevent future - * pictures from being properly decoded. This error \ref MAY be treated as - * fatal to the stream or \ref MAY be treated as fatal to the current GOP. - */ - VPX_CODEC_UNSUP_FEATURE, - - /*!\brief The coded data for this stream is corrupt or incomplete - * - * There was a problem decoding the current frame. This return code - * should only be used for failures that prevent future pictures from - * being properly decoded. This error \ref MAY be treated as fatal to the - * stream or \ref MAY be treated as fatal to the current GOP. If decoding - * is continued for the current GOP, artifacts may be present. - */ - VPX_CODEC_CORRUPT_FRAME, - - /*!\brief An application-supplied parameter is not valid. - * - */ - VPX_CODEC_INVALID_PARAM, - - /*!\brief An iterator reached the end of list. - * - */ - VPX_CODEC_LIST_END - -} vpx_codec_err_t; - -/*! \brief Codec capabilities bitfield - * - * Each codec advertises the capabilities it supports as part of its - * ::vpx_codec_iface_t interface structure. Capabilities are extra interfaces - * or functionality, and are not required to be supported. - * - * The available flags are specified by VPX_CODEC_CAP_* defines. - */ -typedef long vpx_codec_caps_t; -#define VPX_CODEC_CAP_DECODER 0x1 /**< Is a decoder */ -#define VPX_CODEC_CAP_ENCODER 0x2 /**< Is an encoder */ - -/*! Can support images at greater than 8 bitdepth. - */ -#define VPX_CODEC_CAP_HIGHBITDEPTH 0x4 - -/*! \brief Initialization-time Feature Enabling - * - * Certain codec features must be known at initialization time, to allow for - * proper memory allocation. - * - * The available flags are specified by VPX_CODEC_USE_* defines. - */ -typedef long vpx_codec_flags_t; - -/*!\brief Codec interface structure. - * - * Contains function pointers and other data private to the codec - * implementation. This structure is opaque to the application. - */ -typedef const struct vpx_codec_iface vpx_codec_iface_t; - -/*!\brief Codec private data structure. - * - * Contains data private to the codec implementation. This structure is opaque - * to the application. - */ -typedef struct vpx_codec_priv vpx_codec_priv_t; - -/*!\brief Iterator - * - * Opaque storage used for iterating over lists. - */ -typedef const void *vpx_codec_iter_t; - -/*!\brief Codec context structure - * - * All codecs \ref MUST support this context structure fully. In general, - * this data should be considered private to the codec algorithm, and - * not be manipulated or examined by the calling application. Applications - * may reference the 'name' member to get a printable description of the - * algorithm. - */ -typedef struct vpx_codec_ctx { - const char *name; /**< Printable interface name */ - vpx_codec_iface_t *iface; /**< Interface pointers */ - vpx_codec_err_t err; /**< Last returned error */ - const char *err_detail; /**< Detailed info, if available */ - vpx_codec_flags_t init_flags; /**< Flags passed at init time */ - union { - /**< Decoder Configuration Pointer */ - const struct vpx_codec_dec_cfg *dec; - /**< Encoder Configuration Pointer */ - const struct vpx_codec_enc_cfg *enc; - const void *raw; - } config; /**< Configuration pointer aliasing union */ - vpx_codec_priv_t *priv; /**< Algorithm private storage */ -} vpx_codec_ctx_t; - -/*!\brief Bit depth for codec - * * - * This enumeration determines the bit depth of the codec. - */ -typedef enum vpx_bit_depth { - VPX_BITS_8 = 8, /**< 8 bits */ - VPX_BITS_10 = 10, /**< 10 bits */ - VPX_BITS_12 = 12, /**< 12 bits */ -} vpx_bit_depth_t; - -/* - * Library Version Number Interface - * - * For example, see the following sample return values: - * vpx_codec_version() (1<<16 | 2<<8 | 3) - * vpx_codec_version_str() "v1.2.3-rc1-16-gec6a1ba" - * vpx_codec_version_extra_str() "rc1-16-gec6a1ba" - */ - -/*!\brief Return the version information (as an integer) - * - * Returns a packed encoding of the library version number. This will only - * include - * the major.minor.patch component of the version number. Note that this encoded - * value should be accessed through the macros provided, as the encoding may - * change - * in the future. - * - */ -int vpx_codec_version(void); -#define VPX_VERSION_MAJOR(v) \ - ((v >> 16) & 0xff) /**< extract major from packed version */ -#define VPX_VERSION_MINOR(v) \ - ((v >> 8) & 0xff) /**< extract minor from packed version */ -#define VPX_VERSION_PATCH(v) \ - ((v >> 0) & 0xff) /**< extract patch from packed version */ - -/*!\brief Return the version major number */ -#define vpx_codec_version_major() ((vpx_codec_version() >> 16) & 0xff) - -/*!\brief Return the version minor number */ -#define vpx_codec_version_minor() ((vpx_codec_version() >> 8) & 0xff) - -/*!\brief Return the version patch number */ -#define vpx_codec_version_patch() ((vpx_codec_version() >> 0) & 0xff) - -/*!\brief Return the version information (as a string) - * - * Returns a printable string containing the full library version number. This - * may - * contain additional text following the three digit version number, as to - * indicate - * release candidates, prerelease versions, etc. - * - */ -const char *vpx_codec_version_str(void); - -/*!\brief Return the version information (as a string) - * - * Returns a printable "extra string". This is the component of the string - * returned - * by vpx_codec_version_str() following the three digit version number. - * - */ -const char *vpx_codec_version_extra_str(void); - -/*!\brief Return the build configuration - * - * Returns a printable string containing an encoded version of the build - * configuration. This may be useful to vpx support. - * - */ -const char *vpx_codec_build_config(void); - -/*!\brief Return the name for a given interface - * - * Returns a human readable string for name of the given codec interface. - * - * \param[in] iface Interface pointer - * - */ -const char *vpx_codec_iface_name(vpx_codec_iface_t *iface); - -/*!\brief Convert error number to printable string - * - * Returns a human readable string for the last error returned by the - * algorithm. The returned error will be one line and will not contain - * any newline characters. - * - * - * \param[in] err Error number. - * - */ -const char *vpx_codec_err_to_string(vpx_codec_err_t err); - -/*!\brief Retrieve error synopsis for codec context - * - * Returns a human readable string for the last error returned by the - * algorithm. The returned error will be one line and will not contain - * any newline characters. - * - * - * \param[in] ctx Pointer to this instance's context. - * - */ -const char *vpx_codec_error(vpx_codec_ctx_t *ctx); - -/*!\brief Retrieve detailed error information for codec context - * - * Returns a human readable string providing detailed information about - * the last error. - * - * \param[in] ctx Pointer to this instance's context. - * - * \retval NULL - * No detailed information is available. - */ -const char *vpx_codec_error_detail(vpx_codec_ctx_t *ctx); - -/* REQUIRED FUNCTIONS - * - * The following functions are required to be implemented for all codecs. - * They represent the base case functionality expected of all codecs. - */ - -/*!\brief Destroy a codec instance - * - * Destroys a codec context, freeing any associated memory buffers. - * - * \param[in] ctx Pointer to this instance's context - * - * \retval #VPX_CODEC_OK - * The codec algorithm initialized. - * \retval #VPX_CODEC_MEM_ERROR - * Memory allocation failed. - */ -vpx_codec_err_t vpx_codec_destroy(vpx_codec_ctx_t *ctx); - -/*!\brief Get the capabilities of an algorithm. - * - * Retrieves the capabilities bitfield from the algorithm's interface. - * - * \param[in] iface Pointer to the algorithm interface - * - */ -vpx_codec_caps_t vpx_codec_get_caps(vpx_codec_iface_t *iface); - -/*!\brief Control algorithm - * - * This function is used to exchange algorithm specific data with the codec - * instance. This can be used to implement features specific to a particular - * algorithm. - * - * This wrapper function dispatches the request to the helper function - * associated with the given ctrl_id. It tries to call this function - * transparently, but will return #VPX_CODEC_ERROR if the request could not - * be dispatched. - * - * Note that this function should not be used directly. Call the - * #vpx_codec_control wrapper macro instead. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] ctrl_id Algorithm specific control identifier - * - * \retval #VPX_CODEC_OK - * The control request was processed. - * \retval #VPX_CODEC_ERROR - * The control request was not processed. - * \retval #VPX_CODEC_INVALID_PARAM - * The data was not valid. - */ -vpx_codec_err_t vpx_codec_control_(vpx_codec_ctx_t *ctx, int ctrl_id, ...); -#if defined(VPX_DISABLE_CTRL_TYPECHECKS) && VPX_DISABLE_CTRL_TYPECHECKS -#define vpx_codec_control(ctx, id, data) vpx_codec_control_(ctx, id, data) -#define VPX_CTRL_USE_TYPE(id, typ) -#define VPX_CTRL_USE_TYPE_DEPRECATED(id, typ) -#define VPX_CTRL_VOID(id, typ) - -#else -/*!\brief vpx_codec_control wrapper macro - * - * This macro allows for type safe conversions across the variadic parameter - * to vpx_codec_control_(). - * - * \internal - * It works by dispatching the call to the control function through a wrapper - * function named with the id parameter. - */ -#define vpx_codec_control(ctx, id, data) \ - vpx_codec_control_##id(ctx, id, data) /**<\hideinitializer*/ - -/*!\brief vpx_codec_control type definition macro - * - * This macro allows for type safe conversions across the variadic parameter - * to vpx_codec_control_(). It defines the type of the argument for a given - * control identifier. - * - * \internal - * It defines a static function with - * the correctly typed arguments as a wrapper to the type-unsafe internal - * function. - */ -#define VPX_CTRL_USE_TYPE(id, typ) \ - static vpx_codec_err_t vpx_codec_control_##id(vpx_codec_ctx_t *, int, typ) \ - VPX_UNUSED; \ - \ - static vpx_codec_err_t vpx_codec_control_##id(vpx_codec_ctx_t *ctx, \ - int ctrl_id, typ data) { \ - return vpx_codec_control_(ctx, ctrl_id, data); \ - } /**<\hideinitializer*/ - -/*!\brief vpx_codec_control deprecated type definition macro - * - * Like #VPX_CTRL_USE_TYPE, but indicates that the specified control is - * deprecated and should not be used. Consult the documentation for your - * codec for more information. - * - * \internal - * It defines a static function with the correctly typed arguments as a - * wrapper to the type-unsafe internal function. - */ -#define VPX_CTRL_USE_TYPE_DEPRECATED(id, typ) \ - VPX_DECLSPEC_DEPRECATED static vpx_codec_err_t vpx_codec_control_##id( \ - vpx_codec_ctx_t *, int, typ) VPX_DEPRECATED VPX_UNUSED; \ - \ - VPX_DECLSPEC_DEPRECATED static vpx_codec_err_t vpx_codec_control_##id( \ - vpx_codec_ctx_t *ctx, int ctrl_id, typ data) { \ - return vpx_codec_control_(ctx, ctrl_id, data); \ - } /**<\hideinitializer*/ - -/*!\brief vpx_codec_control void type definition macro - * - * This macro allows for type safe conversions across the variadic parameter - * to vpx_codec_control_(). It indicates that a given control identifier takes - * no argument. - * - * \internal - * It defines a static function without a data argument as a wrapper to the - * type-unsafe internal function. - */ -#define VPX_CTRL_VOID(id) \ - static vpx_codec_err_t vpx_codec_control_##id(vpx_codec_ctx_t *, int) \ - VPX_UNUSED; \ - \ - static vpx_codec_err_t vpx_codec_control_##id(vpx_codec_ctx_t *ctx, \ - int ctrl_id) { \ - return vpx_codec_control_(ctx, ctrl_id); \ - } /**<\hideinitializer*/ - -#endif - -/*!@} - end defgroup codec*/ -#ifdef __cplusplus -} -#endif -#endif // VPX_VPX_VPX_CODEC_H_ diff --git a/vpx-encoder/android_libs/x86/include/vpx/vpx_decoder.h b/vpx-encoder/android_libs/x86/include/vpx/vpx_decoder.h deleted file mode 100644 index f113f719..00000000 --- a/vpx-encoder/android_libs/x86/include/vpx/vpx_decoder.h +++ /dev/null @@ -1,365 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ -#ifndef VPX_VPX_VPX_DECODER_H_ -#define VPX_VPX_VPX_DECODER_H_ - -/*!\defgroup decoder Decoder Algorithm Interface - * \ingroup codec - * This abstraction allows applications using this decoder to easily support - * multiple video formats with minimal code duplication. This section describes - * the interface common to all decoders. - * @{ - */ - -/*!\file - * \brief Describes the decoder algorithm interface to applications. - * - * This file describes the interface between an application and a - * video decoder algorithm. - * - */ -#ifdef __cplusplus -extern "C" { -#endif - -#include "./vpx_codec.h" -#include "./vpx_frame_buffer.h" - -/*!\brief Current ABI version number - * - * \internal - * If this file is altered in any way that changes the ABI, this value - * must be bumped. Examples include, but are not limited to, changing - * types, removing or reassigning enums, adding/removing/rearranging - * fields to structures - */ -#define VPX_DECODER_ABI_VERSION \ - (3 + VPX_CODEC_ABI_VERSION) /**<\hideinitializer*/ - -/*! \brief Decoder capabilities bitfield - * - * Each decoder advertises the capabilities it supports as part of its - * ::vpx_codec_iface_t interface structure. Capabilities are extra interfaces - * or functionality, and are not required to be supported by a decoder. - * - * The available flags are specified by VPX_CODEC_CAP_* defines. - */ -#define VPX_CODEC_CAP_PUT_SLICE 0x10000 /**< Will issue put_slice callbacks */ -#define VPX_CODEC_CAP_PUT_FRAME 0x20000 /**< Will issue put_frame callbacks */ -#define VPX_CODEC_CAP_POSTPROC 0x40000 /**< Can postprocess decoded frame */ -/*!\brief Can conceal errors due to packet loss */ -#define VPX_CODEC_CAP_ERROR_CONCEALMENT 0x80000 -/*!\brief Can receive encoded frames one fragment at a time */ -#define VPX_CODEC_CAP_INPUT_FRAGMENTS 0x100000 - -/*! \brief Initialization-time Feature Enabling - * - * Certain codec features must be known at initialization time, to allow for - * proper memory allocation. - * - * The available flags are specified by VPX_CODEC_USE_* defines. - */ -/*!\brief Can support frame-based multi-threading */ -#define VPX_CODEC_CAP_FRAME_THREADING 0x200000 -/*!brief Can support external frame buffers */ -#define VPX_CODEC_CAP_EXTERNAL_FRAME_BUFFER 0x400000 - -#define VPX_CODEC_USE_POSTPROC 0x10000 /**< Postprocess decoded frame */ -/*!\brief Conceal errors in decoded frames */ -#define VPX_CODEC_USE_ERROR_CONCEALMENT 0x20000 -/*!\brief The input frame should be passed to the decoder one fragment at a - * time */ -#define VPX_CODEC_USE_INPUT_FRAGMENTS 0x40000 -/*!\brief Enable frame-based multi-threading */ -#define VPX_CODEC_USE_FRAME_THREADING 0x80000 - -/*!\brief Stream properties - * - * This structure is used to query or set properties of the decoded - * stream. Algorithms may extend this structure with data specific - * to their bitstream by setting the sz member appropriately. - */ -typedef struct vpx_codec_stream_info { - unsigned int sz; /**< Size of this structure */ - unsigned int w; /**< Width (or 0 for unknown/default) */ - unsigned int h; /**< Height (or 0 for unknown/default) */ - unsigned int is_kf; /**< Current frame is a keyframe */ -} vpx_codec_stream_info_t; - -/* REQUIRED FUNCTIONS - * - * The following functions are required to be implemented for all decoders. - * They represent the base case functionality expected of all decoders. - */ - -/*!\brief Initialization Configurations - * - * This structure is used to pass init time configuration options to the - * decoder. - */ -typedef struct vpx_codec_dec_cfg { - unsigned int threads; /**< Maximum number of threads to use, default 1 */ - unsigned int w; /**< Width */ - unsigned int h; /**< Height */ -} vpx_codec_dec_cfg_t; /**< alias for struct vpx_codec_dec_cfg */ - -/*!\brief Initialize a decoder instance - * - * Initializes a decoder context using the given interface. Applications - * should call the vpx_codec_dec_init convenience macro instead of this - * function directly, to ensure that the ABI version number parameter - * is properly initialized. - * - * If the library was configured with --disable-multithread, this call - * is not thread safe and should be guarded with a lock if being used - * in a multithreaded context. - * - * \param[in] ctx Pointer to this instance's context. - * \param[in] iface Pointer to the algorithm interface to use. - * \param[in] cfg Configuration to use, if known. May be NULL. - * \param[in] flags Bitfield of VPX_CODEC_USE_* flags - * \param[in] ver ABI version number. Must be set to - * VPX_DECODER_ABI_VERSION - * \retval #VPX_CODEC_OK - * The decoder algorithm initialized. - * \retval #VPX_CODEC_MEM_ERROR - * Memory allocation failed. - */ -vpx_codec_err_t vpx_codec_dec_init_ver(vpx_codec_ctx_t *ctx, - vpx_codec_iface_t *iface, - const vpx_codec_dec_cfg_t *cfg, - vpx_codec_flags_t flags, int ver); - -/*!\brief Convenience macro for vpx_codec_dec_init_ver() - * - * Ensures the ABI version parameter is properly set. - */ -#define vpx_codec_dec_init(ctx, iface, cfg, flags) \ - vpx_codec_dec_init_ver(ctx, iface, cfg, flags, VPX_DECODER_ABI_VERSION) - -/*!\brief Parse stream info from a buffer - * - * Performs high level parsing of the bitstream. Construction of a decoder - * context is not necessary. Can be used to determine if the bitstream is - * of the proper format, and to extract information from the stream. - * - * \param[in] iface Pointer to the algorithm interface - * \param[in] data Pointer to a block of data to parse - * \param[in] data_sz Size of the data buffer - * \param[in,out] si Pointer to stream info to update. The size member - * \ref MUST be properly initialized, but \ref MAY be - * clobbered by the algorithm. This parameter \ref MAY - * be NULL. - * - * \retval #VPX_CODEC_OK - * Bitstream is parsable and stream information updated - */ -vpx_codec_err_t vpx_codec_peek_stream_info(vpx_codec_iface_t *iface, - const uint8_t *data, - unsigned int data_sz, - vpx_codec_stream_info_t *si); - -/*!\brief Return information about the current stream. - * - * Returns information about the stream that has been parsed during decoding. - * - * \param[in] ctx Pointer to this instance's context - * \param[in,out] si Pointer to stream info to update. The size member - * \ref MUST be properly initialized, but \ref MAY be - * clobbered by the algorithm. This parameter \ref MAY - * be NULL. - * - * \retval #VPX_CODEC_OK - * Bitstream is parsable and stream information updated - */ -vpx_codec_err_t vpx_codec_get_stream_info(vpx_codec_ctx_t *ctx, - vpx_codec_stream_info_t *si); - -/*!\brief Decode data - * - * Processes a buffer of coded data. If the processing results in a new - * decoded frame becoming available, PUT_SLICE and PUT_FRAME events may be - * generated, as appropriate. Encoded data \ref MUST be passed in DTS (decode - * time stamp) order. Frames produced will always be in PTS (presentation - * time stamp) order. - * If the decoder is configured with VPX_CODEC_USE_INPUT_FRAGMENTS enabled, - * data and data_sz can contain a fragment of the encoded frame. Fragment - * \#n must contain at least partition \#n, but can also contain subsequent - * partitions (\#n+1 - \#n+i), and if so, fragments \#n+1, .., \#n+i must - * be empty. When no more data is available, this function should be called - * with NULL as data and 0 as data_sz. The memory passed to this function - * must be available until the frame has been decoded. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] data Pointer to this block of new coded data. If - * NULL, a VPX_CODEC_CB_PUT_FRAME event is posted - * for the previously decoded frame. - * \param[in] data_sz Size of the coded data, in bytes. - * \param[in] user_priv Application specific data to associate with - * this frame. - * \param[in] deadline Soft deadline the decoder should attempt to meet, - * in us. Set to zero for unlimited. - * - * \return Returns #VPX_CODEC_OK if the coded data was processed completely - * and future pictures can be decoded without error. Otherwise, - * see the descriptions of the other error codes in ::vpx_codec_err_t - * for recoverability capabilities. - */ -vpx_codec_err_t vpx_codec_decode(vpx_codec_ctx_t *ctx, const uint8_t *data, - unsigned int data_sz, void *user_priv, - long deadline); - -/*!\brief Decoded frames iterator - * - * Iterates over a list of the frames available for display. The iterator - * storage should be initialized to NULL to start the iteration. Iteration is - * complete when this function returns NULL. - * - * The list of available frames becomes valid upon completion of the - * vpx_codec_decode call, and remains valid until the next call to - * vpx_codec_decode. - * - * \param[in] ctx Pointer to this instance's context - * \param[in,out] iter Iterator storage, initialized to NULL - * - * \return Returns a pointer to an image, if one is ready for display. Frames - * produced will always be in PTS (presentation time stamp) order. - */ -vpx_image_t *vpx_codec_get_frame(vpx_codec_ctx_t *ctx, vpx_codec_iter_t *iter); - -/*!\defgroup cap_put_frame Frame-Based Decoding Functions - * - * The following functions are required to be implemented for all decoders - * that advertise the VPX_CODEC_CAP_PUT_FRAME capability. Calling these - * functions - * for codecs that don't advertise this capability will result in an error - * code being returned, usually VPX_CODEC_ERROR - * @{ - */ - -/*!\brief put frame callback prototype - * - * This callback is invoked by the decoder to notify the application of - * the availability of decoded image data. - */ -typedef void (*vpx_codec_put_frame_cb_fn_t)(void *user_priv, - const vpx_image_t *img); - -/*!\brief Register for notification of frame completion. - * - * Registers a given function to be called when a decoded frame is - * available. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] cb Pointer to the callback function - * \param[in] user_priv User's private data - * - * \retval #VPX_CODEC_OK - * Callback successfully registered. - * \retval #VPX_CODEC_ERROR - * Decoder context not initialized, or algorithm not capable of - * posting slice completion. - */ -vpx_codec_err_t vpx_codec_register_put_frame_cb(vpx_codec_ctx_t *ctx, - vpx_codec_put_frame_cb_fn_t cb, - void *user_priv); - -/*!@} - end defgroup cap_put_frame */ - -/*!\defgroup cap_put_slice Slice-Based Decoding Functions - * - * The following functions are required to be implemented for all decoders - * that advertise the VPX_CODEC_CAP_PUT_SLICE capability. Calling these - * functions - * for codecs that don't advertise this capability will result in an error - * code being returned, usually VPX_CODEC_ERROR - * @{ - */ - -/*!\brief put slice callback prototype - * - * This callback is invoked by the decoder to notify the application of - * the availability of partially decoded image data. The - */ -typedef void (*vpx_codec_put_slice_cb_fn_t)(void *user_priv, - const vpx_image_t *img, - const vpx_image_rect_t *valid, - const vpx_image_rect_t *update); - -/*!\brief Register for notification of slice completion. - * - * Registers a given function to be called when a decoded slice is - * available. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] cb Pointer to the callback function - * \param[in] user_priv User's private data - * - * \retval #VPX_CODEC_OK - * Callback successfully registered. - * \retval #VPX_CODEC_ERROR - * Decoder context not initialized, or algorithm not capable of - * posting slice completion. - */ -vpx_codec_err_t vpx_codec_register_put_slice_cb(vpx_codec_ctx_t *ctx, - vpx_codec_put_slice_cb_fn_t cb, - void *user_priv); - -/*!@} - end defgroup cap_put_slice*/ - -/*!\defgroup cap_external_frame_buffer External Frame Buffer Functions - * - * The following section is required to be implemented for all decoders - * that advertise the VPX_CODEC_CAP_EXTERNAL_FRAME_BUFFER capability. - * Calling this function for codecs that don't advertise this capability - * will result in an error code being returned, usually VPX_CODEC_ERROR. - * - * \note - * Currently this only works with VP9. - * @{ - */ - -/*!\brief Pass in external frame buffers for the decoder to use. - * - * Registers functions to be called when libvpx needs a frame buffer - * to decode the current frame and a function to be called when libvpx does - * not internally reference the frame buffer. This set function must - * be called before the first call to decode or libvpx will assume the - * default behavior of allocating frame buffers internally. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] cb_get Pointer to the get callback function - * \param[in] cb_release Pointer to the release callback function - * \param[in] cb_priv Callback's private data - * - * \retval #VPX_CODEC_OK - * External frame buffers will be used by libvpx. - * \retval #VPX_CODEC_INVALID_PARAM - * One or more of the callbacks were NULL. - * \retval #VPX_CODEC_ERROR - * Decoder context not initialized, or algorithm not capable of - * using external frame buffers. - * - * \note - * When decoding VP9, the application may be required to pass in at least - * #VP9_MAXIMUM_REF_BUFFERS + #VPX_MAXIMUM_WORK_BUFFERS external frame - * buffers. - */ -vpx_codec_err_t vpx_codec_set_frame_buffer_functions( - vpx_codec_ctx_t *ctx, vpx_get_frame_buffer_cb_fn_t cb_get, - vpx_release_frame_buffer_cb_fn_t cb_release, void *cb_priv); - -/*!@} - end defgroup cap_external_frame_buffer */ - -/*!@} - end defgroup decoder*/ -#ifdef __cplusplus -} -#endif -#endif // VPX_VPX_VPX_DECODER_H_ diff --git a/vpx-encoder/android_libs/x86/include/vpx/vpx_encoder.h b/vpx-encoder/android_libs/x86/include/vpx/vpx_encoder.h deleted file mode 100644 index c18de703..00000000 --- a/vpx-encoder/android_libs/x86/include/vpx/vpx_encoder.h +++ /dev/null @@ -1,968 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ -#ifndef VPX_VPX_VPX_ENCODER_H_ -#define VPX_VPX_VPX_ENCODER_H_ - -/*!\defgroup encoder Encoder Algorithm Interface - * \ingroup codec - * This abstraction allows applications using this encoder to easily support - * multiple video formats with minimal code duplication. This section describes - * the interface common to all encoders. - * @{ - */ - -/*!\file - * \brief Describes the encoder algorithm interface to applications. - * - * This file describes the interface between an application and a - * video encoder algorithm. - * - */ -#ifdef __cplusplus -extern "C" { -#endif - -#include "./vpx_codec.h" - -/*! Temporal Scalability: Maximum length of the sequence defining frame - * layer membership - */ -#define VPX_TS_MAX_PERIODICITY 16 - -/*! Temporal Scalability: Maximum number of coding layers */ -#define VPX_TS_MAX_LAYERS 5 - -/*! Temporal+Spatial Scalability: Maximum number of coding layers */ -#define VPX_MAX_LAYERS 12 // 3 temporal + 4 spatial layers are allowed. - -/*! Spatial Scalability: Maximum number of coding layers */ -#define VPX_SS_MAX_LAYERS 5 - -/*! Spatial Scalability: Default number of coding layers */ -#define VPX_SS_DEFAULT_LAYERS 1 - -/*!\brief Current ABI version number - * - * \internal - * If this file is altered in any way that changes the ABI, this value - * must be bumped. Examples include, but are not limited to, changing - * types, removing or reassigning enums, adding/removing/rearranging - * fields to structures - */ -#define VPX_ENCODER_ABI_VERSION \ - (14 + VPX_CODEC_ABI_VERSION) /**<\hideinitializer*/ - -/*! \brief Encoder capabilities bitfield - * - * Each encoder advertises the capabilities it supports as part of its - * ::vpx_codec_iface_t interface structure. Capabilities are extra - * interfaces or functionality, and are not required to be supported - * by an encoder. - * - * The available flags are specified by VPX_CODEC_CAP_* defines. - */ -#define VPX_CODEC_CAP_PSNR 0x10000 /**< Can issue PSNR packets */ - -/*! Can output one partition at a time. Each partition is returned in its - * own VPX_CODEC_CX_FRAME_PKT, with the FRAME_IS_FRAGMENT flag set for - * every partition but the last. In this mode all frames are always - * returned partition by partition. - */ -#define VPX_CODEC_CAP_OUTPUT_PARTITION 0x20000 - -/*! \brief Initialization-time Feature Enabling - * - * Certain codec features must be known at initialization time, to allow - * for proper memory allocation. - * - * The available flags are specified by VPX_CODEC_USE_* defines. - */ -#define VPX_CODEC_USE_PSNR 0x10000 /**< Calculate PSNR on each frame */ -/*!\brief Make the encoder output one partition at a time. */ -#define VPX_CODEC_USE_OUTPUT_PARTITION 0x20000 -#define VPX_CODEC_USE_HIGHBITDEPTH 0x40000 /**< Use high bitdepth */ - -/*!\brief Generic fixed size buffer structure - * - * This structure is able to hold a reference to any fixed size buffer. - */ -typedef struct vpx_fixed_buf { - void *buf; /**< Pointer to the data */ - size_t sz; /**< Length of the buffer, in chars */ -} vpx_fixed_buf_t; /**< alias for struct vpx_fixed_buf */ - -/*!\brief Time Stamp Type - * - * An integer, which when multiplied by the stream's time base, provides - * the absolute time of a sample. - */ -typedef int64_t vpx_codec_pts_t; - -/*!\brief Compressed Frame Flags - * - * This type represents a bitfield containing information about a compressed - * frame that may be useful to an application. The most significant 16 bits - * can be used by an algorithm to provide additional detail, for example to - * support frame types that are codec specific (MPEG-1 D-frames for example) - */ -typedef uint32_t vpx_codec_frame_flags_t; -#define VPX_FRAME_IS_KEY 0x1 /**< frame is the start of a GOP */ -/*!\brief frame can be dropped without affecting the stream (no future frame - * depends on this one) */ -#define VPX_FRAME_IS_DROPPABLE 0x2 -/*!\brief frame should be decoded but will not be shown */ -#define VPX_FRAME_IS_INVISIBLE 0x4 -/*!\brief this is a fragment of the encoded frame */ -#define VPX_FRAME_IS_FRAGMENT 0x8 - -/*!\brief Error Resilient flags - * - * These flags define which error resilient features to enable in the - * encoder. The flags are specified through the - * vpx_codec_enc_cfg::g_error_resilient variable. - */ -typedef uint32_t vpx_codec_er_flags_t; -/*!\brief Improve resiliency against losses of whole frames */ -#define VPX_ERROR_RESILIENT_DEFAULT 0x1 -/*!\brief The frame partitions are independently decodable by the bool decoder, - * meaning that partitions can be decoded even though earlier partitions have - * been lost. Note that intra prediction is still done over the partition - * boundary. */ -#define VPX_ERROR_RESILIENT_PARTITIONS 0x2 - -/*!\brief Encoder output packet variants - * - * This enumeration lists the different kinds of data packets that can be - * returned by calls to vpx_codec_get_cx_data(). Algorithms \ref MAY - * extend this list to provide additional functionality. - */ -enum vpx_codec_cx_pkt_kind { - VPX_CODEC_CX_FRAME_PKT, /**< Compressed video frame */ - VPX_CODEC_STATS_PKT, /**< Two-pass statistics for this frame */ - VPX_CODEC_FPMB_STATS_PKT, /**< first pass mb statistics for this frame */ - VPX_CODEC_PSNR_PKT, /**< PSNR statistics for this frame */ - VPX_CODEC_CUSTOM_PKT = 256 /**< Algorithm extensions */ -}; - -/*!\brief Encoder output packet - * - * This structure contains the different kinds of output data the encoder - * may produce while compressing a frame. - */ -typedef struct vpx_codec_cx_pkt { - enum vpx_codec_cx_pkt_kind kind; /**< packet variant */ - union { - struct { - void *buf; /**< compressed data buffer */ - size_t sz; /**< length of compressed data */ - /*!\brief time stamp to show frame (in timebase units) */ - vpx_codec_pts_t pts; - /*!\brief duration to show frame (in timebase units) */ - unsigned long duration; - vpx_codec_frame_flags_t flags; /**< flags for this frame */ - /*!\brief the partition id defines the decoding order of the partitions. - * Only applicable when "output partition" mode is enabled. First - * partition has id 0.*/ - int partition_id; - /*!\brief Width and height of frames in this packet. VP8 will only use the - * first one.*/ - unsigned int width[VPX_SS_MAX_LAYERS]; /**< frame width */ - unsigned int height[VPX_SS_MAX_LAYERS]; /**< frame height */ - /*!\brief Flag to indicate if spatial layer frame in this packet is - * encoded or dropped. VP8 will always be set to 1.*/ - uint8_t spatial_layer_encoded[VPX_SS_MAX_LAYERS]; - } frame; /**< data for compressed frame packet */ - vpx_fixed_buf_t twopass_stats; /**< data for two-pass packet */ - vpx_fixed_buf_t firstpass_mb_stats; /**< first pass mb packet */ - struct vpx_psnr_pkt { - unsigned int samples[4]; /**< Number of samples, total/y/u/v */ - uint64_t sse[4]; /**< sum squared error, total/y/u/v */ - double psnr[4]; /**< PSNR, total/y/u/v */ - } psnr; /**< data for PSNR packet */ - vpx_fixed_buf_t raw; /**< data for arbitrary packets */ - - /* This packet size is fixed to allow codecs to extend this - * interface without having to manage storage for raw packets, - * i.e., if it's smaller than 128 bytes, you can store in the - * packet list directly. - */ - char pad[128 - sizeof(enum vpx_codec_cx_pkt_kind)]; /**< fixed sz */ - } data; /**< packet data */ -} vpx_codec_cx_pkt_t; /**< alias for struct vpx_codec_cx_pkt */ - -/*!\brief Encoder return output buffer callback - * - * This callback function, when registered, returns with packets when each - * spatial layer is encoded. - */ -typedef void (*vpx_codec_enc_output_cx_pkt_cb_fn_t)(vpx_codec_cx_pkt_t *pkt, - void *user_data); - -/*!\brief Callback function pointer / user data pair storage */ -typedef struct vpx_codec_enc_output_cx_cb_pair { - vpx_codec_enc_output_cx_pkt_cb_fn_t output_cx_pkt; /**< Callback function */ - void *user_priv; /**< Pointer to private data */ -} vpx_codec_priv_output_cx_pkt_cb_pair_t; - -/*!\brief Rational Number - * - * This structure holds a fractional value. - */ -typedef struct vpx_rational { - int num; /**< fraction numerator */ - int den; /**< fraction denominator */ -} vpx_rational_t; /**< alias for struct vpx_rational */ - -/*!\brief Multi-pass Encoding Pass */ -enum vpx_enc_pass { - VPX_RC_ONE_PASS, /**< Single pass mode */ - VPX_RC_FIRST_PASS, /**< First pass of multi-pass mode */ - VPX_RC_LAST_PASS /**< Final pass of multi-pass mode */ -}; - -/*!\brief Rate control mode */ -enum vpx_rc_mode { - VPX_VBR, /**< Variable Bit Rate (VBR) mode */ - VPX_CBR, /**< Constant Bit Rate (CBR) mode */ - VPX_CQ, /**< Constrained Quality (CQ) mode */ - VPX_Q, /**< Constant Quality (Q) mode */ -}; - -/*!\brief Keyframe placement mode. - * - * This enumeration determines whether keyframes are placed automatically by - * the encoder or whether this behavior is disabled. Older releases of this - * SDK were implemented such that VPX_KF_FIXED meant keyframes were disabled. - * This name is confusing for this behavior, so the new symbols to be used - * are VPX_KF_AUTO and VPX_KF_DISABLED. - */ -enum vpx_kf_mode { - VPX_KF_FIXED, /**< deprecated, implies VPX_KF_DISABLED */ - VPX_KF_AUTO, /**< Encoder determines optimal placement automatically */ - VPX_KF_DISABLED = 0 /**< Encoder does not place keyframes. */ -}; - -/*!\brief Encoded Frame Flags - * - * This type indicates a bitfield to be passed to vpx_codec_encode(), defining - * per-frame boolean values. By convention, bits common to all codecs will be - * named VPX_EFLAG_*, and bits specific to an algorithm will be named - * /algo/_eflag_*. The lower order 16 bits are reserved for common use. - */ -typedef long vpx_enc_frame_flags_t; -#define VPX_EFLAG_FORCE_KF (1 << 0) /**< Force this frame to be a keyframe */ - -/*!\brief Encoder configuration structure - * - * This structure contains the encoder settings that have common representations - * across all codecs. This doesn't imply that all codecs support all features, - * however. - */ -typedef struct vpx_codec_enc_cfg { - /* - * generic settings (g) - */ - - /*!\brief Deprecated: Algorithm specific "usage" value - * - * This value must be zero. - */ - unsigned int g_usage; - - /*!\brief Maximum number of threads to use - * - * For multi-threaded implementations, use no more than this number of - * threads. The codec may use fewer threads than allowed. The value - * 0 is equivalent to the value 1. - */ - unsigned int g_threads; - - /*!\brief Bitstream profile to use - * - * Some codecs support a notion of multiple bitstream profiles. Typically - * this maps to a set of features that are turned on or off. Often the - * profile to use is determined by the features of the intended decoder. - * Consult the documentation for the codec to determine the valid values - * for this parameter, or set to zero for a sane default. - */ - unsigned int g_profile; /**< profile of bitstream to use */ - - /*!\brief Width of the frame - * - * This value identifies the presentation resolution of the frame, - * in pixels. Note that the frames passed as input to the encoder must - * have this resolution. Frames will be presented by the decoder in this - * resolution, independent of any spatial resampling the encoder may do. - */ - unsigned int g_w; - - /*!\brief Height of the frame - * - * This value identifies the presentation resolution of the frame, - * in pixels. Note that the frames passed as input to the encoder must - * have this resolution. Frames will be presented by the decoder in this - * resolution, independent of any spatial resampling the encoder may do. - */ - unsigned int g_h; - - /*!\brief Bit-depth of the codec - * - * This value identifies the bit_depth of the codec, - * Only certain bit-depths are supported as identified in the - * vpx_bit_depth_t enum. - */ - vpx_bit_depth_t g_bit_depth; - - /*!\brief Bit-depth of the input frames - * - * This value identifies the bit_depth of the input frames in bits. - * Note that the frames passed as input to the encoder must have - * this bit-depth. - */ - unsigned int g_input_bit_depth; - - /*!\brief Stream timebase units - * - * Indicates the smallest interval of time, in seconds, used by the stream. - * For fixed frame rate material, or variable frame rate material where - * frames are timed at a multiple of a given clock (ex: video capture), - * the \ref RECOMMENDED method is to set the timebase to the reciprocal - * of the frame rate (ex: 1001/30000 for 29.970 Hz NTSC). This allows the - * pts to correspond to the frame number, which can be handy. For - * re-encoding video from containers with absolute time timestamps, the - * \ref RECOMMENDED method is to set the timebase to that of the parent - * container or multimedia framework (ex: 1/1000 for ms, as in FLV). - */ - struct vpx_rational g_timebase; - - /*!\brief Enable error resilient modes. - * - * The error resilient bitfield indicates to the encoder which features - * it should enable to take measures for streaming over lossy or noisy - * links. - */ - vpx_codec_er_flags_t g_error_resilient; - - /*!\brief Multi-pass Encoding Mode - * - * This value should be set to the current phase for multi-pass encoding. - * For single pass, set to #VPX_RC_ONE_PASS. - */ - enum vpx_enc_pass g_pass; - - /*!\brief Allow lagged encoding - * - * If set, this value allows the encoder to consume a number of input - * frames before producing output frames. This allows the encoder to - * base decisions for the current frame on future frames. This does - * increase the latency of the encoding pipeline, so it is not appropriate - * in all situations (ex: realtime encoding). - * - * Note that this is a maximum value -- the encoder may produce frames - * sooner than the given limit. Set this value to 0 to disable this - * feature. - */ - unsigned int g_lag_in_frames; - - /* - * rate control settings (rc) - */ - - /*!\brief Temporal resampling configuration, if supported by the codec. - * - * Temporal resampling allows the codec to "drop" frames as a strategy to - * meet its target data rate. This can cause temporal discontinuities in - * the encoded video, which may appear as stuttering during playback. This - * trade-off is often acceptable, but for many applications is not. It can - * be disabled in these cases. - * - * This threshold is described as a percentage of the target data buffer. - * When the data buffer falls below this percentage of fullness, a - * dropped frame is indicated. Set the threshold to zero (0) to disable - * this feature. - */ - unsigned int rc_dropframe_thresh; - - /*!\brief Enable/disable spatial resampling, if supported by the codec. - * - * Spatial resampling allows the codec to compress a lower resolution - * version of the frame, which is then upscaled by the encoder to the - * correct presentation resolution. This increases visual quality at - * low data rates, at the expense of CPU time on the encoder/decoder. - */ - unsigned int rc_resize_allowed; - - /*!\brief Internal coded frame width. - * - * If spatial resampling is enabled this specifies the width of the - * encoded frame. - */ - unsigned int rc_scaled_width; - - /*!\brief Internal coded frame height. - * - * If spatial resampling is enabled this specifies the height of the - * encoded frame. - */ - unsigned int rc_scaled_height; - - /*!\brief Spatial resampling up watermark. - * - * This threshold is described as a percentage of the target data buffer. - * When the data buffer rises above this percentage of fullness, the - * encoder will step up to a higher resolution version of the frame. - */ - unsigned int rc_resize_up_thresh; - - /*!\brief Spatial resampling down watermark. - * - * This threshold is described as a percentage of the target data buffer. - * When the data buffer falls below this percentage of fullness, the - * encoder will step down to a lower resolution version of the frame. - */ - unsigned int rc_resize_down_thresh; - - /*!\brief Rate control algorithm to use. - * - * Indicates whether the end usage of this stream is to be streamed over - * a bandwidth constrained link, indicating that Constant Bit Rate (CBR) - * mode should be used, or whether it will be played back on a high - * bandwidth link, as from a local disk, where higher variations in - * bitrate are acceptable. - */ - enum vpx_rc_mode rc_end_usage; - - /*!\brief Two-pass stats buffer. - * - * A buffer containing all of the stats packets produced in the first - * pass, concatenated. - */ - vpx_fixed_buf_t rc_twopass_stats_in; - - /*!\brief first pass mb stats buffer. - * - * A buffer containing all of the first pass mb stats packets produced - * in the first pass, concatenated. - */ - vpx_fixed_buf_t rc_firstpass_mb_stats_in; - - /*!\brief Target data rate - * - * Target bandwidth to use for this stream, in kilobits per second. - */ - unsigned int rc_target_bitrate; - - /* - * quantizer settings - */ - - /*!\brief Minimum (Best Quality) Quantizer - * - * The quantizer is the most direct control over the quality of the - * encoded image. The range of valid values for the quantizer is codec - * specific. Consult the documentation for the codec to determine the - * values to use. - */ - unsigned int rc_min_quantizer; - - /*!\brief Maximum (Worst Quality) Quantizer - * - * The quantizer is the most direct control over the quality of the - * encoded image. The range of valid values for the quantizer is codec - * specific. Consult the documentation for the codec to determine the - * values to use. - */ - unsigned int rc_max_quantizer; - - /* - * bitrate tolerance - */ - - /*!\brief Rate control adaptation undershoot control - * - * VP8: Expressed as a percentage of the target bitrate, - * controls the maximum allowed adaptation speed of the codec. - * This factor controls the maximum amount of bits that can - * be subtracted from the target bitrate in order to compensate - * for prior overshoot. - * VP9: Expressed as a percentage of the target bitrate, a threshold - * undershoot level (current rate vs target) beyond which more aggressive - * corrective measures are taken. - * * - * Valid values in the range VP8:0-1000 VP9: 0-100. - */ - unsigned int rc_undershoot_pct; - - /*!\brief Rate control adaptation overshoot control - * - * VP8: Expressed as a percentage of the target bitrate, - * controls the maximum allowed adaptation speed of the codec. - * This factor controls the maximum amount of bits that can - * be added to the target bitrate in order to compensate for - * prior undershoot. - * VP9: Expressed as a percentage of the target bitrate, a threshold - * overshoot level (current rate vs target) beyond which more aggressive - * corrective measures are taken. - * - * Valid values in the range VP8:0-1000 VP9: 0-100. - */ - unsigned int rc_overshoot_pct; - - /* - * decoder buffer model parameters - */ - - /*!\brief Decoder Buffer Size - * - * This value indicates the amount of data that may be buffered by the - * decoding application. Note that this value is expressed in units of - * time (milliseconds). For example, a value of 5000 indicates that the - * client will buffer (at least) 5000ms worth of encoded data. Use the - * target bitrate (#rc_target_bitrate) to convert to bits/bytes, if - * necessary. - */ - unsigned int rc_buf_sz; - - /*!\brief Decoder Buffer Initial Size - * - * This value indicates the amount of data that will be buffered by the - * decoding application prior to beginning playback. This value is - * expressed in units of time (milliseconds). Use the target bitrate - * (#rc_target_bitrate) to convert to bits/bytes, if necessary. - */ - unsigned int rc_buf_initial_sz; - - /*!\brief Decoder Buffer Optimal Size - * - * This value indicates the amount of data that the encoder should try - * to maintain in the decoder's buffer. This value is expressed in units - * of time (milliseconds). Use the target bitrate (#rc_target_bitrate) - * to convert to bits/bytes, if necessary. - */ - unsigned int rc_buf_optimal_sz; - - /* - * 2 pass rate control parameters - */ - - /*!\brief Two-pass mode CBR/VBR bias - * - * Bias, expressed on a scale of 0 to 100, for determining target size - * for the current frame. The value 0 indicates the optimal CBR mode - * value should be used. The value 100 indicates the optimal VBR mode - * value should be used. Values in between indicate which way the - * encoder should "lean." - */ - unsigned int rc_2pass_vbr_bias_pct; - - /*!\brief Two-pass mode per-GOP minimum bitrate - * - * This value, expressed as a percentage of the target bitrate, indicates - * the minimum bitrate to be used for a single GOP (aka "section") - */ - unsigned int rc_2pass_vbr_minsection_pct; - - /*!\brief Two-pass mode per-GOP maximum bitrate - * - * This value, expressed as a percentage of the target bitrate, indicates - * the maximum bitrate to be used for a single GOP (aka "section") - */ - unsigned int rc_2pass_vbr_maxsection_pct; - - /*!\brief Two-pass corpus vbr mode complexity control - * Used only in VP9: A value representing the corpus midpoint complexity - * for corpus vbr mode. This value defaults to 0 which disables corpus vbr - * mode in favour of normal vbr mode. - */ - unsigned int rc_2pass_vbr_corpus_complexity; - - /* - * keyframing settings (kf) - */ - - /*!\brief Keyframe placement mode - * - * This value indicates whether the encoder should place keyframes at a - * fixed interval, or determine the optimal placement automatically - * (as governed by the #kf_min_dist and #kf_max_dist parameters) - */ - enum vpx_kf_mode kf_mode; - - /*!\brief Keyframe minimum interval - * - * This value, expressed as a number of frames, prevents the encoder from - * placing a keyframe nearer than kf_min_dist to the previous keyframe. At - * least kf_min_dist frames non-keyframes will be coded before the next - * keyframe. Set kf_min_dist equal to kf_max_dist for a fixed interval. - */ - unsigned int kf_min_dist; - - /*!\brief Keyframe maximum interval - * - * This value, expressed as a number of frames, forces the encoder to code - * a keyframe if one has not been coded in the last kf_max_dist frames. - * A value of 0 implies all frames will be keyframes. Set kf_min_dist - * equal to kf_max_dist for a fixed interval. - */ - unsigned int kf_max_dist; - - /* - * Spatial scalability settings (ss) - */ - - /*!\brief Number of spatial coding layers. - * - * This value specifies the number of spatial coding layers to be used. - */ - unsigned int ss_number_layers; - - /*!\brief Enable auto alt reference flags for each spatial layer. - * - * These values specify if auto alt reference frame is enabled for each - * spatial layer. - */ - int ss_enable_auto_alt_ref[VPX_SS_MAX_LAYERS]; - - /*!\brief Target bitrate for each spatial layer. - * - * These values specify the target coding bitrate to be used for each - * spatial layer. - */ - unsigned int ss_target_bitrate[VPX_SS_MAX_LAYERS]; - - /*!\brief Number of temporal coding layers. - * - * This value specifies the number of temporal layers to be used. - */ - unsigned int ts_number_layers; - - /*!\brief Target bitrate for each temporal layer. - * - * These values specify the target coding bitrate to be used for each - * temporal layer. - */ - unsigned int ts_target_bitrate[VPX_TS_MAX_LAYERS]; - - /*!\brief Frame rate decimation factor for each temporal layer. - * - * These values specify the frame rate decimation factors to apply - * to each temporal layer. - */ - unsigned int ts_rate_decimator[VPX_TS_MAX_LAYERS]; - - /*!\brief Length of the sequence defining frame temporal layer membership. - * - * This value specifies the length of the sequence that defines the - * membership of frames to temporal layers. For example, if the - * ts_periodicity = 8, then the frames are assigned to coding layers with a - * repeated sequence of length 8. - */ - unsigned int ts_periodicity; - - /*!\brief Template defining the membership of frames to temporal layers. - * - * This array defines the membership of frames to temporal coding layers. - * For a 2-layer encoding that assigns even numbered frames to one temporal - * layer (0) and odd numbered frames to a second temporal layer (1) with - * ts_periodicity=8, then ts_layer_id = (0,1,0,1,0,1,0,1). - */ - unsigned int ts_layer_id[VPX_TS_MAX_PERIODICITY]; - - /*!\brief Target bitrate for each spatial/temporal layer. - * - * These values specify the target coding bitrate to be used for each - * spatial/temporal layer. - * - */ - unsigned int layer_target_bitrate[VPX_MAX_LAYERS]; - - /*!\brief Temporal layering mode indicating which temporal layering scheme to - * use. - * - * The value (refer to VP9E_TEMPORAL_LAYERING_MODE) specifies the - * temporal layering mode to use. - * - */ - int temporal_layering_mode; -} vpx_codec_enc_cfg_t; /**< alias for struct vpx_codec_enc_cfg */ - -/*!\brief vp9 svc extra configure parameters - * - * This defines max/min quantizers and scale factors for each layer - * - */ -typedef struct vpx_svc_parameters { - int max_quantizers[VPX_MAX_LAYERS]; /**< Max Q for each layer */ - int min_quantizers[VPX_MAX_LAYERS]; /**< Min Q for each layer */ - int scaling_factor_num[VPX_MAX_LAYERS]; /**< Scaling factor-numerator */ - int scaling_factor_den[VPX_MAX_LAYERS]; /**< Scaling factor-denominator */ - int speed_per_layer[VPX_MAX_LAYERS]; /**< Speed setting for each sl */ - int temporal_layering_mode; /**< Temporal layering mode */ -} vpx_svc_extra_cfg_t; - -/*!\brief Initialize an encoder instance - * - * Initializes a encoder context using the given interface. Applications - * should call the vpx_codec_enc_init convenience macro instead of this - * function directly, to ensure that the ABI version number parameter - * is properly initialized. - * - * If the library was configured with --disable-multithread, this call - * is not thread safe and should be guarded with a lock if being used - * in a multithreaded context. - * - * \param[in] ctx Pointer to this instance's context. - * \param[in] iface Pointer to the algorithm interface to use. - * \param[in] cfg Configuration to use, if known. May be NULL. - * \param[in] flags Bitfield of VPX_CODEC_USE_* flags - * \param[in] ver ABI version number. Must be set to - * VPX_ENCODER_ABI_VERSION - * \retval #VPX_CODEC_OK - * The decoder algorithm initialized. - * \retval #VPX_CODEC_MEM_ERROR - * Memory allocation failed. - */ -vpx_codec_err_t vpx_codec_enc_init_ver(vpx_codec_ctx_t *ctx, - vpx_codec_iface_t *iface, - const vpx_codec_enc_cfg_t *cfg, - vpx_codec_flags_t flags, int ver); - -/*!\brief Convenience macro for vpx_codec_enc_init_ver() - * - * Ensures the ABI version parameter is properly set. - */ -#define vpx_codec_enc_init(ctx, iface, cfg, flags) \ - vpx_codec_enc_init_ver(ctx, iface, cfg, flags, VPX_ENCODER_ABI_VERSION) - -/*!\brief Initialize multi-encoder instance - * - * Initializes multi-encoder context using the given interface. - * Applications should call the vpx_codec_enc_init_multi convenience macro - * instead of this function directly, to ensure that the ABI version number - * parameter is properly initialized. - * - * \param[in] ctx Pointer to this instance's context. - * \param[in] iface Pointer to the algorithm interface to use. - * \param[in] cfg Configuration to use, if known. May be NULL. - * \param[in] num_enc Total number of encoders. - * \param[in] flags Bitfield of VPX_CODEC_USE_* flags - * \param[in] dsf Pointer to down-sampling factors. - * \param[in] ver ABI version number. Must be set to - * VPX_ENCODER_ABI_VERSION - * \retval #VPX_CODEC_OK - * The decoder algorithm initialized. - * \retval #VPX_CODEC_MEM_ERROR - * Memory allocation failed. - */ -vpx_codec_err_t vpx_codec_enc_init_multi_ver( - vpx_codec_ctx_t *ctx, vpx_codec_iface_t *iface, vpx_codec_enc_cfg_t *cfg, - int num_enc, vpx_codec_flags_t flags, vpx_rational_t *dsf, int ver); - -/*!\brief Convenience macro for vpx_codec_enc_init_multi_ver() - * - * Ensures the ABI version parameter is properly set. - */ -#define vpx_codec_enc_init_multi(ctx, iface, cfg, num_enc, flags, dsf) \ - vpx_codec_enc_init_multi_ver(ctx, iface, cfg, num_enc, flags, dsf, \ - VPX_ENCODER_ABI_VERSION) - -/*!\brief Get a default configuration - * - * Initializes a encoder configuration structure with default values. Supports - * the notion of "usages" so that an algorithm may offer different default - * settings depending on the user's intended goal. This function \ref SHOULD - * be called by all applications to initialize the configuration structure - * before specializing the configuration with application specific values. - * - * \param[in] iface Pointer to the algorithm interface to use. - * \param[out] cfg Configuration buffer to populate. - * \param[in] usage Must be set to 0. - * - * \retval #VPX_CODEC_OK - * The configuration was populated. - * \retval #VPX_CODEC_INCAPABLE - * Interface is not an encoder interface. - * \retval #VPX_CODEC_INVALID_PARAM - * A parameter was NULL, or the usage value was not recognized. - */ -vpx_codec_err_t vpx_codec_enc_config_default(vpx_codec_iface_t *iface, - vpx_codec_enc_cfg_t *cfg, - unsigned int usage); - -/*!\brief Set or change configuration - * - * Reconfigures an encoder instance according to the given configuration. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] cfg Configuration buffer to use - * - * \retval #VPX_CODEC_OK - * The configuration was populated. - * \retval #VPX_CODEC_INCAPABLE - * Interface is not an encoder interface. - * \retval #VPX_CODEC_INVALID_PARAM - * A parameter was NULL, or the usage value was not recognized. - */ -vpx_codec_err_t vpx_codec_enc_config_set(vpx_codec_ctx_t *ctx, - const vpx_codec_enc_cfg_t *cfg); - -/*!\brief Get global stream headers - * - * Retrieves a stream level global header packet, if supported by the codec. - * - * \param[in] ctx Pointer to this instance's context - * - * \retval NULL - * Encoder does not support global header - * \retval Non-NULL - * Pointer to buffer containing global header packet - */ -vpx_fixed_buf_t *vpx_codec_get_global_headers(vpx_codec_ctx_t *ctx); - -/*!\brief deadline parameter analogous to VPx REALTIME mode. */ -#define VPX_DL_REALTIME (1) -/*!\brief deadline parameter analogous to VPx GOOD QUALITY mode. */ -#define VPX_DL_GOOD_QUALITY (1000000) -/*!\brief deadline parameter analogous to VPx BEST QUALITY mode. */ -#define VPX_DL_BEST_QUALITY (0) -/*!\brief Encode a frame - * - * Encodes a video frame at the given "presentation time." The presentation - * time stamp (PTS) \ref MUST be strictly increasing. - * - * The encoder supports the notion of a soft real-time deadline. Given a - * non-zero value to the deadline parameter, the encoder will make a "best - * effort" guarantee to return before the given time slice expires. It is - * implicit that limiting the available time to encode will degrade the - * output quality. The encoder can be given an unlimited time to produce the - * best possible frame by specifying a deadline of '0'. This deadline - * supersedes the VPx notion of "best quality, good quality, realtime". - * Applications that wish to map these former settings to the new deadline - * based system can use the symbols #VPX_DL_REALTIME, #VPX_DL_GOOD_QUALITY, - * and #VPX_DL_BEST_QUALITY. - * - * When the last frame has been passed to the encoder, this function should - * continue to be called, with the img parameter set to NULL. This will - * signal the end-of-stream condition to the encoder and allow it to encode - * any held buffers. Encoding is complete when vpx_codec_encode() is called - * and vpx_codec_get_cx_data() returns no data. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] img Image data to encode, NULL to flush. - * \param[in] pts Presentation time stamp, in timebase units. - * \param[in] duration Duration to show frame, in timebase units. - * \param[in] flags Flags to use for encoding this frame. - * \param[in] deadline Time to spend encoding, in microseconds. (0=infinite) - * - * \retval #VPX_CODEC_OK - * The configuration was populated. - * \retval #VPX_CODEC_INCAPABLE - * Interface is not an encoder interface. - * \retval #VPX_CODEC_INVALID_PARAM - * A parameter was NULL, the image format is unsupported, etc. - */ -vpx_codec_err_t vpx_codec_encode(vpx_codec_ctx_t *ctx, const vpx_image_t *img, - vpx_codec_pts_t pts, unsigned long duration, - vpx_enc_frame_flags_t flags, - unsigned long deadline); - -/*!\brief Set compressed data output buffer - * - * Sets the buffer that the codec should output the compressed data - * into. This call effectively sets the buffer pointer returned in the - * next VPX_CODEC_CX_FRAME_PKT packet. Subsequent packets will be - * appended into this buffer. The buffer is preserved across frames, - * so applications must periodically call this function after flushing - * the accumulated compressed data to disk or to the network to reset - * the pointer to the buffer's head. - * - * `pad_before` bytes will be skipped before writing the compressed - * data, and `pad_after` bytes will be appended to the packet. The size - * of the packet will be the sum of the size of the actual compressed - * data, pad_before, and pad_after. The padding bytes will be preserved - * (not overwritten). - * - * Note that calling this function does not guarantee that the returned - * compressed data will be placed into the specified buffer. In the - * event that the encoded data will not fit into the buffer provided, - * the returned packet \ref MAY point to an internal buffer, as it would - * if this call were never used. In this event, the output packet will - * NOT have any padding, and the application must free space and copy it - * to the proper place. This is of particular note in configurations - * that may output multiple packets for a single encoded frame (e.g., lagged - * encoding) or if the application does not reset the buffer periodically. - * - * Applications may restore the default behavior of the codec providing - * the compressed data buffer by calling this function with a NULL - * buffer. - * - * Applications \ref MUSTNOT call this function during iteration of - * vpx_codec_get_cx_data(). - * - * \param[in] ctx Pointer to this instance's context - * \param[in] buf Buffer to store compressed data into - * \param[in] pad_before Bytes to skip before writing compressed data - * \param[in] pad_after Bytes to skip after writing compressed data - * - * \retval #VPX_CODEC_OK - * The buffer was set successfully. - * \retval #VPX_CODEC_INVALID_PARAM - * A parameter was NULL, the image format is unsupported, etc. - */ -vpx_codec_err_t vpx_codec_set_cx_data_buf(vpx_codec_ctx_t *ctx, - const vpx_fixed_buf_t *buf, - unsigned int pad_before, - unsigned int pad_after); - -/*!\brief Encoded data iterator - * - * Iterates over a list of data packets to be passed from the encoder to the - * application. The different kinds of packets available are enumerated in - * #vpx_codec_cx_pkt_kind. - * - * #VPX_CODEC_CX_FRAME_PKT packets should be passed to the application's - * muxer. Multiple compressed frames may be in the list. - * #VPX_CODEC_STATS_PKT packets should be appended to a global buffer. - * - * The application \ref MUST silently ignore any packet kinds that it does - * not recognize or support. - * - * The data buffers returned from this function are only guaranteed to be - * valid until the application makes another call to any vpx_codec_* function. - * - * \param[in] ctx Pointer to this instance's context - * \param[in,out] iter Iterator storage, initialized to NULL - * - * \return Returns a pointer to an output data packet (compressed frame data, - * two-pass statistics, etc.) or NULL to signal end-of-list. - * - */ -const vpx_codec_cx_pkt_t *vpx_codec_get_cx_data(vpx_codec_ctx_t *ctx, - vpx_codec_iter_t *iter); - -/*!\brief Get Preview Frame - * - * Returns an image that can be used as a preview. Shows the image as it would - * exist at the decompressor. The application \ref MUST NOT write into this - * image buffer. - * - * \param[in] ctx Pointer to this instance's context - * - * \return Returns a pointer to a preview image, or NULL if no image is - * available. - * - */ -const vpx_image_t *vpx_codec_get_preview_frame(vpx_codec_ctx_t *ctx); - -/*!@} - end defgroup encoder*/ -#ifdef __cplusplus -} -#endif -#endif // VPX_VPX_VPX_ENCODER_H_ diff --git a/vpx-encoder/android_libs/x86/include/vpx/vpx_frame_buffer.h b/vpx-encoder/android_libs/x86/include/vpx/vpx_frame_buffer.h deleted file mode 100644 index 2813ca6d..00000000 --- a/vpx-encoder/android_libs/x86/include/vpx/vpx_frame_buffer.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2014 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef VPX_VPX_VPX_FRAME_BUFFER_H_ -#define VPX_VPX_VPX_FRAME_BUFFER_H_ - -/*!\file - * \brief Describes the decoder external frame buffer interface. - */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "./vpx_integer.h" - -/*!\brief The maximum number of work buffers used by libvpx. - * Support maximum 4 threads to decode video in parallel. - * Each thread will use one work buffer. - * TODO(hkuang): Add support to set number of worker threads dynamically. - */ -#define VPX_MAXIMUM_WORK_BUFFERS 8 - -/*!\brief The maximum number of reference buffers that a VP9 encoder may use. - */ -#define VP9_MAXIMUM_REF_BUFFERS 8 - -/*!\brief External frame buffer - * - * This structure holds allocated frame buffers used by the decoder. - */ -typedef struct vpx_codec_frame_buffer { - uint8_t *data; /**< Pointer to the data buffer */ - size_t size; /**< Size of data in bytes */ - void *priv; /**< Frame's private data */ -} vpx_codec_frame_buffer_t; - -/*!\brief get frame buffer callback prototype - * - * This callback is invoked by the decoder to retrieve data for the frame - * buffer in order for the decode call to complete. The callback must - * allocate at least min_size in bytes and assign it to fb->data. The callback - * must zero out all the data allocated. Then the callback must set fb->size - * to the allocated size. The application does not need to align the allocated - * data. The callback is triggered when the decoder needs a frame buffer to - * decode a compressed image into. This function may be called more than once - * for every call to vpx_codec_decode. The application may set fb->priv to - * some data which will be passed back in the ximage and the release function - * call. |fb| is guaranteed to not be NULL. On success the callback must - * return 0. Any failure the callback must return a value less than 0. - * - * \param[in] priv Callback's private data - * \param[in] min_size Size in bytes needed by the buffer - * \param[in,out] fb Pointer to vpx_codec_frame_buffer_t - */ -typedef int (*vpx_get_frame_buffer_cb_fn_t)(void *priv, size_t min_size, - vpx_codec_frame_buffer_t *fb); - -/*!\brief release frame buffer callback prototype - * - * This callback is invoked by the decoder when the frame buffer is not - * referenced by any other buffers. |fb| is guaranteed to not be NULL. On - * success the callback must return 0. Any failure the callback must return - * a value less than 0. - * - * \param[in] priv Callback's private data - * \param[in] fb Pointer to vpx_codec_frame_buffer_t - */ -typedef int (*vpx_release_frame_buffer_cb_fn_t)(void *priv, - vpx_codec_frame_buffer_t *fb); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // VPX_VPX_VPX_FRAME_BUFFER_H_ diff --git a/vpx-encoder/android_libs/x86/include/vpx/vpx_image.h b/vpx-encoder/android_libs/x86/include/vpx/vpx_image.h deleted file mode 100644 index 98be5966..00000000 --- a/vpx-encoder/android_libs/x86/include/vpx/vpx_image.h +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -/*!\file - * \brief Describes the vpx image descriptor and associated operations - * - */ -#ifndef VPX_VPX_VPX_IMAGE_H_ -#define VPX_VPX_VPX_IMAGE_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*!\brief Current ABI version number - * - * \internal - * If this file is altered in any way that changes the ABI, this value - * must be bumped. Examples include, but are not limited to, changing - * types, removing or reassigning enums, adding/removing/rearranging - * fields to structures - */ -#define VPX_IMAGE_ABI_VERSION (5) /**<\hideinitializer*/ - -#define VPX_IMG_FMT_PLANAR 0x100 /**< Image is a planar format. */ -#define VPX_IMG_FMT_UV_FLIP 0x200 /**< V plane precedes U in memory. */ -#define VPX_IMG_FMT_HAS_ALPHA 0x400 /**< Image has an alpha channel. */ -#define VPX_IMG_FMT_HIGHBITDEPTH 0x800 /**< Image uses 16bit framebuffer. */ - -/*!\brief List of supported image formats */ -typedef enum vpx_img_fmt { - VPX_IMG_FMT_NONE, - VPX_IMG_FMT_YV12 = - VPX_IMG_FMT_PLANAR | VPX_IMG_FMT_UV_FLIP | 1, /**< planar YVU */ - VPX_IMG_FMT_I420 = VPX_IMG_FMT_PLANAR | 2, - VPX_IMG_FMT_I422 = VPX_IMG_FMT_PLANAR | 5, - VPX_IMG_FMT_I444 = VPX_IMG_FMT_PLANAR | 6, - VPX_IMG_FMT_I440 = VPX_IMG_FMT_PLANAR | 7, - VPX_IMG_FMT_I42016 = VPX_IMG_FMT_I420 | VPX_IMG_FMT_HIGHBITDEPTH, - VPX_IMG_FMT_I42216 = VPX_IMG_FMT_I422 | VPX_IMG_FMT_HIGHBITDEPTH, - VPX_IMG_FMT_I44416 = VPX_IMG_FMT_I444 | VPX_IMG_FMT_HIGHBITDEPTH, - VPX_IMG_FMT_I44016 = VPX_IMG_FMT_I440 | VPX_IMG_FMT_HIGHBITDEPTH -} vpx_img_fmt_t; /**< alias for enum vpx_img_fmt */ - -/*!\brief List of supported color spaces */ -typedef enum vpx_color_space { - VPX_CS_UNKNOWN = 0, /**< Unknown */ - VPX_CS_BT_601 = 1, /**< BT.601 */ - VPX_CS_BT_709 = 2, /**< BT.709 */ - VPX_CS_SMPTE_170 = 3, /**< SMPTE.170 */ - VPX_CS_SMPTE_240 = 4, /**< SMPTE.240 */ - VPX_CS_BT_2020 = 5, /**< BT.2020 */ - VPX_CS_RESERVED = 6, /**< Reserved */ - VPX_CS_SRGB = 7 /**< sRGB */ -} vpx_color_space_t; /**< alias for enum vpx_color_space */ - -/*!\brief List of supported color range */ -typedef enum vpx_color_range { - VPX_CR_STUDIO_RANGE = 0, /**< Y [16..235], UV [16..240] */ - VPX_CR_FULL_RANGE = 1 /**< YUV/RGB [0..255] */ -} vpx_color_range_t; /**< alias for enum vpx_color_range */ - -/**\brief Image Descriptor */ -typedef struct vpx_image { - vpx_img_fmt_t fmt; /**< Image Format */ - vpx_color_space_t cs; /**< Color Space */ - vpx_color_range_t range; /**< Color Range */ - - /* Image storage dimensions */ - unsigned int w; /**< Stored image width */ - unsigned int h; /**< Stored image height */ - unsigned int bit_depth; /**< Stored image bit-depth */ - - /* Image display dimensions */ - unsigned int d_w; /**< Displayed image width */ - unsigned int d_h; /**< Displayed image height */ - - /* Image intended rendering dimensions */ - unsigned int r_w; /**< Intended rendering image width */ - unsigned int r_h; /**< Intended rendering image height */ - - /* Chroma subsampling info */ - unsigned int x_chroma_shift; /**< subsampling order, X */ - unsigned int y_chroma_shift; /**< subsampling order, Y */ - -/* Image data pointers. */ -#define VPX_PLANE_PACKED 0 /**< To be used for all packed formats */ -#define VPX_PLANE_Y 0 /**< Y (Luminance) plane */ -#define VPX_PLANE_U 1 /**< U (Chroma) plane */ -#define VPX_PLANE_V 2 /**< V (Chroma) plane */ -#define VPX_PLANE_ALPHA 3 /**< A (Transparency) plane */ - unsigned char *planes[4]; /**< pointer to the top left pixel for each plane */ - int stride[4]; /**< stride between rows for each plane */ - - int bps; /**< bits per sample (for packed formats) */ - - /*!\brief The following member may be set by the application to associate - * data with this image. - */ - void *user_priv; - - /* The following members should be treated as private. */ - unsigned char *img_data; /**< private */ - int img_data_owner; /**< private */ - int self_allocd; /**< private */ - - void *fb_priv; /**< Frame buffer data associated with the image. */ -} vpx_image_t; /**< alias for struct vpx_image */ - -/**\brief Representation of a rectangle on a surface */ -typedef struct vpx_image_rect { - unsigned int x; /**< leftmost column */ - unsigned int y; /**< topmost row */ - unsigned int w; /**< width */ - unsigned int h; /**< height */ -} vpx_image_rect_t; /**< alias for struct vpx_image_rect */ - -/*!\brief Open a descriptor, allocating storage for the underlying image - * - * Returns a descriptor for storing an image of the given format. The - * storage for the descriptor is allocated on the heap. - * - * \param[in] img Pointer to storage for descriptor. If this parameter - * is NULL, the storage for the descriptor will be - * allocated on the heap. - * \param[in] fmt Format for the image - * \param[in] d_w Width of the image - * \param[in] d_h Height of the image - * \param[in] align Alignment, in bytes, of the image buffer and - * each row in the image(stride). - * - * \return Returns a pointer to the initialized image descriptor. If the img - * parameter is non-null, the value of the img parameter will be - * returned. - */ -vpx_image_t *vpx_img_alloc(vpx_image_t *img, vpx_img_fmt_t fmt, - unsigned int d_w, unsigned int d_h, - unsigned int align); - -/*!\brief Open a descriptor, using existing storage for the underlying image - * - * Returns a descriptor for storing an image of the given format. The - * storage for descriptor has been allocated elsewhere, and a descriptor is - * desired to "wrap" that storage. - * - * \param[in] img Pointer to storage for descriptor. If this - * parameter is NULL, the storage for the descriptor - * will be allocated on the heap. - * \param[in] fmt Format for the image - * \param[in] d_w Width of the image - * \param[in] d_h Height of the image - * \param[in] stride_align Alignment, in bytes, of each row in the image. - * \param[in] img_data Storage to use for the image - * - * \return Returns a pointer to the initialized image descriptor. If the img - * parameter is non-null, the value of the img parameter will be - * returned. - */ -vpx_image_t *vpx_img_wrap(vpx_image_t *img, vpx_img_fmt_t fmt, unsigned int d_w, - unsigned int d_h, unsigned int stride_align, - unsigned char *img_data); - -/*!\brief Set the rectangle identifying the displayed portion of the image - * - * Updates the displayed rectangle (aka viewport) on the image surface to - * match the specified coordinates and size. - * - * \param[in] img Image descriptor - * \param[in] x leftmost column - * \param[in] y topmost row - * \param[in] w width - * \param[in] h height - * - * \return 0 if the requested rectangle is valid, nonzero otherwise. - */ -int vpx_img_set_rect(vpx_image_t *img, unsigned int x, unsigned int y, - unsigned int w, unsigned int h); - -/*!\brief Flip the image vertically (top for bottom) - * - * Adjusts the image descriptor's pointers and strides to make the image - * be referenced upside-down. - * - * \param[in] img Image descriptor - */ -void vpx_img_flip(vpx_image_t *img); - -/*!\brief Close an image descriptor - * - * Frees all allocated storage associated with an image descriptor. - * - * \param[in] img Image descriptor - */ -void vpx_img_free(vpx_image_t *img); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // VPX_VPX_VPX_IMAGE_H_ diff --git a/vpx-encoder/android_libs/x86/include/vpx/vpx_integer.h b/vpx-encoder/android_libs/x86/include/vpx/vpx_integer.h deleted file mode 100644 index 4129d156..00000000 --- a/vpx-encoder/android_libs/x86/include/vpx/vpx_integer.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef VPX_VPX_VPX_INTEGER_H_ -#define VPX_VPX_VPX_INTEGER_H_ - -/* get ptrdiff_t, size_t, wchar_t, NULL */ -#include - -#if defined(_MSC_VER) -#define VPX_FORCE_INLINE __forceinline -#define VPX_INLINE __inline -#else -#define VPX_FORCE_INLINE __inline__ __attribute__((always_inline)) -// TODO(jbb): Allow a way to force inline off for older compilers. -#define VPX_INLINE inline -#endif - -/* Assume platforms have the C99 standard integer types. */ - -#if defined(__cplusplus) -#if !defined(__STDC_FORMAT_MACROS) -#define __STDC_FORMAT_MACROS -#endif -#if !defined(__STDC_LIMIT_MACROS) -#define __STDC_LIMIT_MACROS -#endif -#endif // __cplusplus - -#include -#include - -#endif // VPX_VPX_VPX_INTEGER_H_ diff --git a/vpx-encoder/android_libs/x86/lib/libvpx.a b/vpx-encoder/android_libs/x86/lib/libvpx.a deleted file mode 100644 index 82152362..00000000 Binary files a/vpx-encoder/android_libs/x86/lib/libvpx.a and /dev/null differ diff --git a/vpx-encoder/android_libs/x86/lib/pkgconfig/vpx.pc b/vpx-encoder/android_libs/x86/lib/pkgconfig/vpx.pc deleted file mode 100644 index 48530e16..00000000 --- a/vpx-encoder/android_libs/x86/lib/pkgconfig/vpx.pc +++ /dev/null @@ -1,14 +0,0 @@ -# pkg-config file from libvpx v1.8.0 -prefix=/Users/andy/go/src/github.com/webmproject/jni/vpx-android/output/android/x86 -exec_prefix=${prefix} -libdir=${prefix}/lib -includedir=${prefix}/include - -Name: vpx -Description: WebM Project VPx codec implementation -Version: 1.8.0 -Requires: -Conflicts: -Libs: -L${libdir} -lvpx -lm -Libs.private: -lm -Cflags: -I${includedir} diff --git a/vpx-encoder/android_libs/x86_64/include/common/file_util.h b/vpx-encoder/android_libs/x86_64/include/common/file_util.h deleted file mode 100644 index a8737346..00000000 --- a/vpx-encoder/android_libs/x86_64/include/common/file_util.h +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) 2016 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -#ifndef LIBWEBM_COMMON_FILE_UTIL_H_ -#define LIBWEBM_COMMON_FILE_UTIL_H_ - -#include - -#include - -#include "mkvmuxer/mkvmuxertypes.h" // LIBWEBM_DISALLOW_COPY_AND_ASSIGN() - -namespace libwebm { - -// Returns a temporary file name. -std::string GetTempFileName(); - -// Returns size of file specified by |file_name|, or 0 upon failure. -uint64_t GetFileSize(const std::string& file_name); - -// Gets the contents file_name as a string. Returns false on error. -bool GetFileContents(const std::string& file_name, std::string* contents); - -// Manages life of temporary file specified at time of construction. Deletes -// file upon destruction. -class TempFileDeleter { - public: - TempFileDeleter(); - explicit TempFileDeleter(std::string file_name) : file_name_(file_name) {} - ~TempFileDeleter(); - const std::string& name() const { return file_name_; } - - private: - std::string file_name_; - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(TempFileDeleter); -}; - -} // namespace libwebm - -#endif // LIBWEBM_COMMON_FILE_UTIL_H_ diff --git a/vpx-encoder/android_libs/x86_64/include/common/hdr_util.h b/vpx-encoder/android_libs/x86_64/include/common/hdr_util.h deleted file mode 100644 index 78e2eeb7..00000000 --- a/vpx-encoder/android_libs/x86_64/include/common/hdr_util.h +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (c) 2016 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -#ifndef LIBWEBM_COMMON_HDR_UTIL_H_ -#define LIBWEBM_COMMON_HDR_UTIL_H_ - -#include - -#include - -#include "mkvmuxer/mkvmuxer.h" - -namespace mkvparser { -struct Colour; -struct MasteringMetadata; -struct PrimaryChromaticity; -} // namespace mkvparser - -namespace libwebm { -// Utility types and functions for working with the Colour element and its -// children. Copiers return true upon success. Presence functions return true -// when the specified element is present. - -// TODO(tomfinegan): These should be moved to libwebm_utils once c++11 is -// required by libwebm. - -// Features of the VP9 codec that may be set in the CodecPrivate of a VP9 video -// stream. A value of kValueNotPresent represents that the value was not set in -// the CodecPrivate. -struct Vp9CodecFeatures { - static const int kValueNotPresent; - - Vp9CodecFeatures() - : profile(kValueNotPresent), - level(kValueNotPresent), - bit_depth(kValueNotPresent), - chroma_subsampling(kValueNotPresent) {} - ~Vp9CodecFeatures() {} - - int profile; - int level; - int bit_depth; - int chroma_subsampling; -}; - -typedef std::unique_ptr PrimaryChromaticityPtr; - -bool CopyPrimaryChromaticity(const mkvparser::PrimaryChromaticity& parser_pc, - PrimaryChromaticityPtr* muxer_pc); - -bool MasteringMetadataValuePresent(double value); - -bool CopyMasteringMetadata(const mkvparser::MasteringMetadata& parser_mm, - mkvmuxer::MasteringMetadata* muxer_mm); - -bool ColourValuePresent(long long value); - -bool CopyColour(const mkvparser::Colour& parser_colour, - mkvmuxer::Colour* muxer_colour); - -// Returns true if |features| is set to one or more valid values. -bool ParseVpxCodecPrivate(const uint8_t* private_data, int32_t length, - Vp9CodecFeatures* features); - -} // namespace libwebm - -#endif // LIBWEBM_COMMON_HDR_UTIL_H_ diff --git a/vpx-encoder/android_libs/x86_64/include/common/webmids.h b/vpx-encoder/android_libs/x86_64/include/common/webmids.h deleted file mode 100644 index fc0c2081..00000000 --- a/vpx-encoder/android_libs/x86_64/include/common/webmids.h +++ /dev/null @@ -1,193 +0,0 @@ -// Copyright (c) 2012 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. - -#ifndef COMMON_WEBMIDS_H_ -#define COMMON_WEBMIDS_H_ - -namespace libwebm { - -enum MkvId { - kMkvEBML = 0x1A45DFA3, - kMkvEBMLVersion = 0x4286, - kMkvEBMLReadVersion = 0x42F7, - kMkvEBMLMaxIDLength = 0x42F2, - kMkvEBMLMaxSizeLength = 0x42F3, - kMkvDocType = 0x4282, - kMkvDocTypeVersion = 0x4287, - kMkvDocTypeReadVersion = 0x4285, - kMkvVoid = 0xEC, - kMkvSignatureSlot = 0x1B538667, - kMkvSignatureAlgo = 0x7E8A, - kMkvSignatureHash = 0x7E9A, - kMkvSignaturePublicKey = 0x7EA5, - kMkvSignature = 0x7EB5, - kMkvSignatureElements = 0x7E5B, - kMkvSignatureElementList = 0x7E7B, - kMkvSignedElement = 0x6532, - // segment - kMkvSegment = 0x18538067, - // Meta Seek Information - kMkvSeekHead = 0x114D9B74, - kMkvSeek = 0x4DBB, - kMkvSeekID = 0x53AB, - kMkvSeekPosition = 0x53AC, - // Segment Information - kMkvInfo = 0x1549A966, - kMkvTimecodeScale = 0x2AD7B1, - kMkvDuration = 0x4489, - kMkvDateUTC = 0x4461, - kMkvTitle = 0x7BA9, - kMkvMuxingApp = 0x4D80, - kMkvWritingApp = 0x5741, - // Cluster - kMkvCluster = 0x1F43B675, - kMkvTimecode = 0xE7, - kMkvPrevSize = 0xAB, - kMkvBlockGroup = 0xA0, - kMkvBlock = 0xA1, - kMkvBlockDuration = 0x9B, - kMkvReferenceBlock = 0xFB, - kMkvLaceNumber = 0xCC, - kMkvSimpleBlock = 0xA3, - kMkvBlockAdditions = 0x75A1, - kMkvBlockMore = 0xA6, - kMkvBlockAddID = 0xEE, - kMkvBlockAdditional = 0xA5, - kMkvDiscardPadding = 0x75A2, - // Track - kMkvTracks = 0x1654AE6B, - kMkvTrackEntry = 0xAE, - kMkvTrackNumber = 0xD7, - kMkvTrackUID = 0x73C5, - kMkvTrackType = 0x83, - kMkvFlagEnabled = 0xB9, - kMkvFlagDefault = 0x88, - kMkvFlagForced = 0x55AA, - kMkvFlagLacing = 0x9C, - kMkvDefaultDuration = 0x23E383, - kMkvMaxBlockAdditionID = 0x55EE, - kMkvName = 0x536E, - kMkvLanguage = 0x22B59C, - kMkvCodecID = 0x86, - kMkvCodecPrivate = 0x63A2, - kMkvCodecName = 0x258688, - kMkvCodecDelay = 0x56AA, - kMkvSeekPreRoll = 0x56BB, - // video - kMkvVideo = 0xE0, - kMkvFlagInterlaced = 0x9A, - kMkvStereoMode = 0x53B8, - kMkvAlphaMode = 0x53C0, - kMkvPixelWidth = 0xB0, - kMkvPixelHeight = 0xBA, - kMkvPixelCropBottom = 0x54AA, - kMkvPixelCropTop = 0x54BB, - kMkvPixelCropLeft = 0x54CC, - kMkvPixelCropRight = 0x54DD, - kMkvDisplayWidth = 0x54B0, - kMkvDisplayHeight = 0x54BA, - kMkvDisplayUnit = 0x54B2, - kMkvAspectRatioType = 0x54B3, - kMkvColourSpace = 0x2EB524, - kMkvFrameRate = 0x2383E3, - // end video - // colour - kMkvColour = 0x55B0, - kMkvMatrixCoefficients = 0x55B1, - kMkvBitsPerChannel = 0x55B2, - kMkvChromaSubsamplingHorz = 0x55B3, - kMkvChromaSubsamplingVert = 0x55B4, - kMkvCbSubsamplingHorz = 0x55B5, - kMkvCbSubsamplingVert = 0x55B6, - kMkvChromaSitingHorz = 0x55B7, - kMkvChromaSitingVert = 0x55B8, - kMkvRange = 0x55B9, - kMkvTransferCharacteristics = 0x55BA, - kMkvPrimaries = 0x55BB, - kMkvMaxCLL = 0x55BC, - kMkvMaxFALL = 0x55BD, - // mastering metadata - kMkvMasteringMetadata = 0x55D0, - kMkvPrimaryRChromaticityX = 0x55D1, - kMkvPrimaryRChromaticityY = 0x55D2, - kMkvPrimaryGChromaticityX = 0x55D3, - kMkvPrimaryGChromaticityY = 0x55D4, - kMkvPrimaryBChromaticityX = 0x55D5, - kMkvPrimaryBChromaticityY = 0x55D6, - kMkvWhitePointChromaticityX = 0x55D7, - kMkvWhitePointChromaticityY = 0x55D8, - kMkvLuminanceMax = 0x55D9, - kMkvLuminanceMin = 0x55DA, - // end mastering metadata - // end colour - // projection - kMkvProjection = 0x7670, - kMkvProjectionType = 0x7671, - kMkvProjectionPrivate = 0x7672, - kMkvProjectionPoseYaw = 0x7673, - kMkvProjectionPosePitch = 0x7674, - kMkvProjectionPoseRoll = 0x7675, - // end projection - // audio - kMkvAudio = 0xE1, - kMkvSamplingFrequency = 0xB5, - kMkvOutputSamplingFrequency = 0x78B5, - kMkvChannels = 0x9F, - kMkvBitDepth = 0x6264, - // end audio - // ContentEncodings - kMkvContentEncodings = 0x6D80, - kMkvContentEncoding = 0x6240, - kMkvContentEncodingOrder = 0x5031, - kMkvContentEncodingScope = 0x5032, - kMkvContentEncodingType = 0x5033, - kMkvContentCompression = 0x5034, - kMkvContentCompAlgo = 0x4254, - kMkvContentCompSettings = 0x4255, - kMkvContentEncryption = 0x5035, - kMkvContentEncAlgo = 0x47E1, - kMkvContentEncKeyID = 0x47E2, - kMkvContentSignature = 0x47E3, - kMkvContentSigKeyID = 0x47E4, - kMkvContentSigAlgo = 0x47E5, - kMkvContentSigHashAlgo = 0x47E6, - kMkvContentEncAESSettings = 0x47E7, - kMkvAESSettingsCipherMode = 0x47E8, - kMkvAESSettingsCipherInitData = 0x47E9, - // end ContentEncodings - // Cueing Data - kMkvCues = 0x1C53BB6B, - kMkvCuePoint = 0xBB, - kMkvCueTime = 0xB3, - kMkvCueTrackPositions = 0xB7, - kMkvCueTrack = 0xF7, - kMkvCueClusterPosition = 0xF1, - kMkvCueBlockNumber = 0x5378, - // Chapters - kMkvChapters = 0x1043A770, - kMkvEditionEntry = 0x45B9, - kMkvChapterAtom = 0xB6, - kMkvChapterUID = 0x73C4, - kMkvChapterStringUID = 0x5654, - kMkvChapterTimeStart = 0x91, - kMkvChapterTimeEnd = 0x92, - kMkvChapterDisplay = 0x80, - kMkvChapString = 0x85, - kMkvChapLanguage = 0x437C, - kMkvChapCountry = 0x437E, - // Tags - kMkvTags = 0x1254C367, - kMkvTag = 0x7373, - kMkvSimpleTag = 0x67C8, - kMkvTagName = 0x45A3, - kMkvTagString = 0x4487 -}; - -} // namespace libwebm - -#endif // COMMON_WEBMIDS_H_ diff --git a/vpx-encoder/android_libs/x86_64/include/mkvmuxer/mkvmuxer.h b/vpx-encoder/android_libs/x86_64/include/mkvmuxer/mkvmuxer.h deleted file mode 100644 index f2db3771..00000000 --- a/vpx-encoder/android_libs/x86_64/include/mkvmuxer/mkvmuxer.h +++ /dev/null @@ -1,1924 +0,0 @@ -// Copyright (c) 2012 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. - -#ifndef MKVMUXER_MKVMUXER_H_ -#define MKVMUXER_MKVMUXER_H_ - -#include - -#include -#include -#include - -#include "common/webmids.h" -#include "mkvmuxer/mkvmuxertypes.h" - -// For a description of the WebM elements see -// http://www.webmproject.org/code/specs/container/. - -namespace mkvparser { -class IMkvReader; -} // namespace mkvparser - -namespace mkvmuxer { - -class MkvWriter; -class Segment; - -const uint64_t kMaxTrackNumber = 126; - -/////////////////////////////////////////////////////////////// -// Interface used by the mkvmuxer to write out the Mkv data. -class IMkvWriter { - public: - // Writes out |len| bytes of |buf|. Returns 0 on success. - virtual int32 Write(const void* buf, uint32 len) = 0; - - // Returns the offset of the output position from the beginning of the - // output. - virtual int64 Position() const = 0; - - // Set the current File position. Returns 0 on success. - virtual int32 Position(int64 position) = 0; - - // Returns true if the writer is seekable. - virtual bool Seekable() const = 0; - - // Element start notification. Called whenever an element identifier is about - // to be written to the stream. |element_id| is the element identifier, and - // |position| is the location in the WebM stream where the first octet of the - // element identifier will be written. - // Note: the |MkvId| enumeration in webmids.hpp defines element values. - virtual void ElementStartNotify(uint64 element_id, int64 position) = 0; - - protected: - IMkvWriter(); - virtual ~IMkvWriter(); - - private: - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(IMkvWriter); -}; - -// Writes out the EBML header for a WebM file, but allows caller to specify -// DocType. This function must be called before any other libwebm writing -// functions are called. -bool WriteEbmlHeader(IMkvWriter* writer, uint64_t doc_type_version, - const char* const doc_type); - -// Writes out the EBML header for a WebM file. This function must be called -// before any other libwebm writing functions are called. -bool WriteEbmlHeader(IMkvWriter* writer, uint64_t doc_type_version); - -// Deprecated. Writes out EBML header with doc_type_version as -// kDefaultDocTypeVersion. Exists for backward compatibility. -bool WriteEbmlHeader(IMkvWriter* writer); - -// Copies in Chunk from source to destination between the given byte positions -bool ChunkedCopy(mkvparser::IMkvReader* source, IMkvWriter* dst, int64_t start, - int64_t size); - -/////////////////////////////////////////////////////////////// -// Class to hold data the will be written to a block. -class Frame { - public: - Frame(); - ~Frame(); - - // Sets this frame's contents based on |frame|. Returns true on success. On - // failure, this frame's existing contents may be lost. - bool CopyFrom(const Frame& frame); - - // Copies |frame| data into |frame_|. Returns true on success. - bool Init(const uint8_t* frame, uint64_t length); - - // Copies |additional| data into |additional_|. Returns true on success. - bool AddAdditionalData(const uint8_t* additional, uint64_t length, - uint64_t add_id); - - // Returns true if the frame has valid parameters. - bool IsValid() const; - - // Returns true if the frame can be written as a SimpleBlock based on current - // parameters. - bool CanBeSimpleBlock() const; - - uint64_t add_id() const { return add_id_; } - const uint8_t* additional() const { return additional_; } - uint64_t additional_length() const { return additional_length_; } - void set_duration(uint64_t duration); - uint64_t duration() const { return duration_; } - bool duration_set() const { return duration_set_; } - const uint8_t* frame() const { return frame_; } - void set_is_key(bool key) { is_key_ = key; } - bool is_key() const { return is_key_; } - uint64_t length() const { return length_; } - void set_track_number(uint64_t track_number) { track_number_ = track_number; } - uint64_t track_number() const { return track_number_; } - void set_timestamp(uint64_t timestamp) { timestamp_ = timestamp; } - uint64_t timestamp() const { return timestamp_; } - void set_discard_padding(int64_t discard_padding) { - discard_padding_ = discard_padding; - } - int64_t discard_padding() const { return discard_padding_; } - void set_reference_block_timestamp(int64_t reference_block_timestamp); - int64_t reference_block_timestamp() const { - return reference_block_timestamp_; - } - bool reference_block_timestamp_set() const { - return reference_block_timestamp_set_; - } - - private: - // Id of the Additional data. - uint64_t add_id_; - - // Pointer to additional data. Owned by this class. - uint8_t* additional_; - - // Length of the additional data. - uint64_t additional_length_; - - // Duration of the frame in nanoseconds. - uint64_t duration_; - - // Flag indicating that |duration_| has been set. Setting duration causes the - // frame to be written out as a Block with BlockDuration instead of as a - // SimpleBlock. - bool duration_set_; - - // Pointer to the data. Owned by this class. - uint8_t* frame_; - - // Flag telling if the data should set the key flag of a block. - bool is_key_; - - // Length of the data. - uint64_t length_; - - // Mkv track number the data is associated with. - uint64_t track_number_; - - // Timestamp of the data in nanoseconds. - uint64_t timestamp_; - - // Discard padding for the frame. - int64_t discard_padding_; - - // Reference block timestamp. - int64_t reference_block_timestamp_; - - // Flag indicating if |reference_block_timestamp_| has been set. - bool reference_block_timestamp_set_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Frame); -}; - -/////////////////////////////////////////////////////////////// -// Class to hold one cue point in a Cues element. -class CuePoint { - public: - CuePoint(); - ~CuePoint(); - - // Returns the size in bytes for the entire CuePoint element. - uint64_t Size() const; - - // Output the CuePoint element to the writer. Returns true on success. - bool Write(IMkvWriter* writer) const; - - void set_time(uint64_t time) { time_ = time; } - uint64_t time() const { return time_; } - void set_track(uint64_t track) { track_ = track; } - uint64_t track() const { return track_; } - void set_cluster_pos(uint64_t cluster_pos) { cluster_pos_ = cluster_pos; } - uint64_t cluster_pos() const { return cluster_pos_; } - void set_block_number(uint64_t block_number) { block_number_ = block_number; } - uint64_t block_number() const { return block_number_; } - void set_output_block_number(bool output_block_number) { - output_block_number_ = output_block_number; - } - bool output_block_number() const { return output_block_number_; } - - private: - // Returns the size in bytes for the payload of the CuePoint element. - uint64_t PayloadSize() const; - - // Absolute timecode according to the segment time base. - uint64_t time_; - - // The Track element associated with the CuePoint. - uint64_t track_; - - // The position of the Cluster containing the Block. - uint64_t cluster_pos_; - - // Number of the Block within the Cluster, starting from 1. - uint64_t block_number_; - - // If true the muxer will write out the block number for the cue if the - // block number is different than the default of 1. Default is set to true. - bool output_block_number_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(CuePoint); -}; - -/////////////////////////////////////////////////////////////// -// Cues element. -class Cues { - public: - Cues(); - ~Cues(); - - // Adds a cue point to the Cues element. Returns true on success. - bool AddCue(CuePoint* cue); - - // Returns the cue point by index. Returns NULL if there is no cue point - // match. - CuePoint* GetCueByIndex(int32_t index) const; - - // Returns the total size of the Cues element - uint64_t Size(); - - // Output the Cues element to the writer. Returns true on success. - bool Write(IMkvWriter* writer) const; - - int32_t cue_entries_size() const { return cue_entries_size_; } - void set_output_block_number(bool output_block_number) { - output_block_number_ = output_block_number; - } - bool output_block_number() const { return output_block_number_; } - - private: - // Number of allocated elements in |cue_entries_|. - int32_t cue_entries_capacity_; - - // Number of CuePoints in |cue_entries_|. - int32_t cue_entries_size_; - - // CuePoint list. - CuePoint** cue_entries_; - - // If true the muxer will write out the block number for the cue if the - // block number is different than the default of 1. Default is set to true. - bool output_block_number_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Cues); -}; - -/////////////////////////////////////////////////////////////// -// ContentEncAESSettings element -class ContentEncAESSettings { - public: - enum { kCTR = 1 }; - - ContentEncAESSettings(); - ~ContentEncAESSettings() {} - - // Returns the size in bytes for the ContentEncAESSettings element. - uint64_t Size() const; - - // Writes out the ContentEncAESSettings element to |writer|. Returns true on - // success. - bool Write(IMkvWriter* writer) const; - - uint64_t cipher_mode() const { return cipher_mode_; } - - private: - // Returns the size in bytes for the payload of the ContentEncAESSettings - // element. - uint64_t PayloadSize() const; - - // Sub elements - uint64_t cipher_mode_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(ContentEncAESSettings); -}; - -/////////////////////////////////////////////////////////////// -// ContentEncoding element -// Elements used to describe if the track data has been encrypted or -// compressed with zlib or header stripping. -// Currently only whole frames can be encrypted with AES. This dictates that -// ContentEncodingOrder will be 0, ContentEncodingScope will be 1, -// ContentEncodingType will be 1, and ContentEncAlgo will be 5. -class ContentEncoding { - public: - ContentEncoding(); - ~ContentEncoding(); - - // Sets the content encryption id. Copies |length| bytes from |id| to - // |enc_key_id_|. Returns true on success. - bool SetEncryptionID(const uint8_t* id, uint64_t length); - - // Returns the size in bytes for the ContentEncoding element. - uint64_t Size() const; - - // Writes out the ContentEncoding element to |writer|. Returns true on - // success. - bool Write(IMkvWriter* writer) const; - - uint64_t enc_algo() const { return enc_algo_; } - uint64_t encoding_order() const { return encoding_order_; } - uint64_t encoding_scope() const { return encoding_scope_; } - uint64_t encoding_type() const { return encoding_type_; } - ContentEncAESSettings* enc_aes_settings() { return &enc_aes_settings_; } - - private: - // Returns the size in bytes for the encoding elements. - uint64_t EncodingSize(uint64_t compresion_size, - uint64_t encryption_size) const; - - // Returns the size in bytes for the encryption elements. - uint64_t EncryptionSize() const; - - // Track element names - uint64_t enc_algo_; - uint8_t* enc_key_id_; - uint64_t encoding_order_; - uint64_t encoding_scope_; - uint64_t encoding_type_; - - // ContentEncAESSettings element. - ContentEncAESSettings enc_aes_settings_; - - // Size of the ContentEncKeyID data in bytes. - uint64_t enc_key_id_length_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(ContentEncoding); -}; - -/////////////////////////////////////////////////////////////// -// Colour element. -class PrimaryChromaticity { - public: - static const float kChromaticityMin; - static const float kChromaticityMax; - - PrimaryChromaticity(float x_val, float y_val) : x_(x_val), y_(y_val) {} - PrimaryChromaticity() : x_(0), y_(0) {} - ~PrimaryChromaticity() {} - - // Returns sum of |x_id| and |y_id| element id sizes and payload sizes. - uint64_t PrimaryChromaticitySize(libwebm::MkvId x_id, - libwebm::MkvId y_id) const; - bool Valid() const; - bool Write(IMkvWriter* writer, libwebm::MkvId x_id, - libwebm::MkvId y_id) const; - - float x() const { return x_; } - void set_x(float new_x) { x_ = new_x; } - float y() const { return y_; } - void set_y(float new_y) { y_ = new_y; } - - private: - float x_; - float y_; -}; - -class MasteringMetadata { - public: - static const float kValueNotPresent; - static const float kMinLuminance; - static const float kMinLuminanceMax; - static const float kMaxLuminanceMax; - - MasteringMetadata() - : luminance_max_(kValueNotPresent), - luminance_min_(kValueNotPresent), - r_(NULL), - g_(NULL), - b_(NULL), - white_point_(NULL) {} - ~MasteringMetadata() { - delete r_; - delete g_; - delete b_; - delete white_point_; - } - - // Returns total size of the MasteringMetadata element. - uint64_t MasteringMetadataSize() const; - bool Valid() const; - bool Write(IMkvWriter* writer) const; - - // Copies non-null chromaticity. - bool SetChromaticity(const PrimaryChromaticity* r, - const PrimaryChromaticity* g, - const PrimaryChromaticity* b, - const PrimaryChromaticity* white_point); - const PrimaryChromaticity* r() const { return r_; } - const PrimaryChromaticity* g() const { return g_; } - const PrimaryChromaticity* b() const { return b_; } - const PrimaryChromaticity* white_point() const { return white_point_; } - - float luminance_max() const { return luminance_max_; } - void set_luminance_max(float luminance_max) { - luminance_max_ = luminance_max; - } - float luminance_min() const { return luminance_min_; } - void set_luminance_min(float luminance_min) { - luminance_min_ = luminance_min; - } - - private: - // Returns size of MasteringMetadata child elements. - uint64_t PayloadSize() const; - - float luminance_max_; - float luminance_min_; - PrimaryChromaticity* r_; - PrimaryChromaticity* g_; - PrimaryChromaticity* b_; - PrimaryChromaticity* white_point_; -}; - -class Colour { - public: - enum MatrixCoefficients { - kGbr = 0, - kBt709 = 1, - kUnspecifiedMc = 2, - kReserved = 3, - kFcc = 4, - kBt470bg = 5, - kSmpte170MMc = 6, - kSmpte240MMc = 7, - kYcocg = 8, - kBt2020NonConstantLuminance = 9, - kBt2020ConstantLuminance = 10, - }; - enum ChromaSitingHorz { - kUnspecifiedCsh = 0, - kLeftCollocated = 1, - kHalfCsh = 2, - }; - enum ChromaSitingVert { - kUnspecifiedCsv = 0, - kTopCollocated = 1, - kHalfCsv = 2, - }; - enum Range { - kUnspecifiedCr = 0, - kBroadcastRange = 1, - kFullRange = 2, - kMcTcDefined = 3, // Defined by MatrixCoefficients/TransferCharacteristics. - }; - enum TransferCharacteristics { - kIturBt709Tc = 1, - kUnspecifiedTc = 2, - kReservedTc = 3, - kGamma22Curve = 4, - kGamma28Curve = 5, - kSmpte170MTc = 6, - kSmpte240MTc = 7, - kLinear = 8, - kLog = 9, - kLogSqrt = 10, - kIec6196624 = 11, - kIturBt1361ExtendedColourGamut = 12, - kIec6196621 = 13, - kIturBt202010bit = 14, - kIturBt202012bit = 15, - kSmpteSt2084 = 16, - kSmpteSt4281Tc = 17, - kAribStdB67Hlg = 18, - }; - enum Primaries { - kReservedP0 = 0, - kIturBt709P = 1, - kUnspecifiedP = 2, - kReservedP3 = 3, - kIturBt470M = 4, - kIturBt470Bg = 5, - kSmpte170MP = 6, - kSmpte240MP = 7, - kFilm = 8, - kIturBt2020 = 9, - kSmpteSt4281P = 10, - kJedecP22Phosphors = 22, - }; - static const uint64_t kValueNotPresent; - Colour() - : matrix_coefficients_(kValueNotPresent), - bits_per_channel_(kValueNotPresent), - chroma_subsampling_horz_(kValueNotPresent), - chroma_subsampling_vert_(kValueNotPresent), - cb_subsampling_horz_(kValueNotPresent), - cb_subsampling_vert_(kValueNotPresent), - chroma_siting_horz_(kValueNotPresent), - chroma_siting_vert_(kValueNotPresent), - range_(kValueNotPresent), - transfer_characteristics_(kValueNotPresent), - primaries_(kValueNotPresent), - max_cll_(kValueNotPresent), - max_fall_(kValueNotPresent), - mastering_metadata_(NULL) {} - ~Colour() { delete mastering_metadata_; } - - // Returns total size of the Colour element. - uint64_t ColourSize() const; - bool Valid() const; - bool Write(IMkvWriter* writer) const; - - // Deep copies |mastering_metadata|. - bool SetMasteringMetadata(const MasteringMetadata& mastering_metadata); - - const MasteringMetadata* mastering_metadata() const { - return mastering_metadata_; - } - - uint64_t matrix_coefficients() const { return matrix_coefficients_; } - void set_matrix_coefficients(uint64_t matrix_coefficients) { - matrix_coefficients_ = matrix_coefficients; - } - uint64_t bits_per_channel() const { return bits_per_channel_; } - void set_bits_per_channel(uint64_t bits_per_channel) { - bits_per_channel_ = bits_per_channel; - } - uint64_t chroma_subsampling_horz() const { return chroma_subsampling_horz_; } - void set_chroma_subsampling_horz(uint64_t chroma_subsampling_horz) { - chroma_subsampling_horz_ = chroma_subsampling_horz; - } - uint64_t chroma_subsampling_vert() const { return chroma_subsampling_vert_; } - void set_chroma_subsampling_vert(uint64_t chroma_subsampling_vert) { - chroma_subsampling_vert_ = chroma_subsampling_vert; - } - uint64_t cb_subsampling_horz() const { return cb_subsampling_horz_; } - void set_cb_subsampling_horz(uint64_t cb_subsampling_horz) { - cb_subsampling_horz_ = cb_subsampling_horz; - } - uint64_t cb_subsampling_vert() const { return cb_subsampling_vert_; } - void set_cb_subsampling_vert(uint64_t cb_subsampling_vert) { - cb_subsampling_vert_ = cb_subsampling_vert; - } - uint64_t chroma_siting_horz() const { return chroma_siting_horz_; } - void set_chroma_siting_horz(uint64_t chroma_siting_horz) { - chroma_siting_horz_ = chroma_siting_horz; - } - uint64_t chroma_siting_vert() const { return chroma_siting_vert_; } - void set_chroma_siting_vert(uint64_t chroma_siting_vert) { - chroma_siting_vert_ = chroma_siting_vert; - } - uint64_t range() const { return range_; } - void set_range(uint64_t range) { range_ = range; } - uint64_t transfer_characteristics() const { - return transfer_characteristics_; - } - void set_transfer_characteristics(uint64_t transfer_characteristics) { - transfer_characteristics_ = transfer_characteristics; - } - uint64_t primaries() const { return primaries_; } - void set_primaries(uint64_t primaries) { primaries_ = primaries; } - uint64_t max_cll() const { return max_cll_; } - void set_max_cll(uint64_t max_cll) { max_cll_ = max_cll; } - uint64_t max_fall() const { return max_fall_; } - void set_max_fall(uint64_t max_fall) { max_fall_ = max_fall; } - - private: - // Returns size of Colour child elements. - uint64_t PayloadSize() const; - - uint64_t matrix_coefficients_; - uint64_t bits_per_channel_; - uint64_t chroma_subsampling_horz_; - uint64_t chroma_subsampling_vert_; - uint64_t cb_subsampling_horz_; - uint64_t cb_subsampling_vert_; - uint64_t chroma_siting_horz_; - uint64_t chroma_siting_vert_; - uint64_t range_; - uint64_t transfer_characteristics_; - uint64_t primaries_; - uint64_t max_cll_; - uint64_t max_fall_; - - MasteringMetadata* mastering_metadata_; -}; - -/////////////////////////////////////////////////////////////// -// Projection element. -class Projection { - public: - enum ProjectionType { - kTypeNotPresent = -1, - kRectangular = 0, - kEquirectangular = 1, - kCubeMap = 2, - kMesh = 3, - }; - static const uint64_t kValueNotPresent; - Projection() - : type_(kRectangular), - pose_yaw_(0.0), - pose_pitch_(0.0), - pose_roll_(0.0), - private_data_(NULL), - private_data_length_(0) {} - ~Projection() { delete[] private_data_; } - - uint64_t ProjectionSize() const; - bool Write(IMkvWriter* writer) const; - - bool SetProjectionPrivate(const uint8_t* private_data, - uint64_t private_data_length); - - ProjectionType type() const { return type_; } - void set_type(ProjectionType type) { type_ = type; } - float pose_yaw() const { return pose_yaw_; } - void set_pose_yaw(float pose_yaw) { pose_yaw_ = pose_yaw; } - float pose_pitch() const { return pose_pitch_; } - void set_pose_pitch(float pose_pitch) { pose_pitch_ = pose_pitch; } - float pose_roll() const { return pose_roll_; } - void set_pose_roll(float pose_roll) { pose_roll_ = pose_roll; } - uint8_t* private_data() const { return private_data_; } - uint64_t private_data_length() const { return private_data_length_; } - - private: - // Returns size of VideoProjection child elements. - uint64_t PayloadSize() const; - - ProjectionType type_; - float pose_yaw_; - float pose_pitch_; - float pose_roll_; - uint8_t* private_data_; - uint64_t private_data_length_; -}; - -/////////////////////////////////////////////////////////////// -// Track element. -class Track { - public: - // The |seed| parameter is used to synthesize a UID for the track. - explicit Track(unsigned int* seed); - virtual ~Track(); - - // Adds a ContentEncoding element to the Track. Returns true on success. - virtual bool AddContentEncoding(); - - // Returns the ContentEncoding by index. Returns NULL if there is no - // ContentEncoding match. - ContentEncoding* GetContentEncodingByIndex(uint32_t index) const; - - // Returns the size in bytes for the payload of the Track element. - virtual uint64_t PayloadSize() const; - - // Returns the size in bytes of the Track element. - virtual uint64_t Size() const; - - // Output the Track element to the writer. Returns true on success. - virtual bool Write(IMkvWriter* writer) const; - - // Sets the CodecPrivate element of the Track element. Copies |length| - // bytes from |codec_private| to |codec_private_|. Returns true on success. - bool SetCodecPrivate(const uint8_t* codec_private, uint64_t length); - - void set_codec_id(const char* codec_id); - const char* codec_id() const { return codec_id_; } - const uint8_t* codec_private() const { return codec_private_; } - void set_language(const char* language); - const char* language() const { return language_; } - void set_max_block_additional_id(uint64_t max_block_additional_id) { - max_block_additional_id_ = max_block_additional_id; - } - uint64_t max_block_additional_id() const { return max_block_additional_id_; } - void set_name(const char* name); - const char* name() const { return name_; } - void set_number(uint64_t number) { number_ = number; } - uint64_t number() const { return number_; } - void set_type(uint64_t type) { type_ = type; } - uint64_t type() const { return type_; } - void set_uid(uint64_t uid) { uid_ = uid; } - uint64_t uid() const { return uid_; } - void set_codec_delay(uint64_t codec_delay) { codec_delay_ = codec_delay; } - uint64_t codec_delay() const { return codec_delay_; } - void set_seek_pre_roll(uint64_t seek_pre_roll) { - seek_pre_roll_ = seek_pre_roll; - } - uint64_t seek_pre_roll() const { return seek_pre_roll_; } - void set_default_duration(uint64_t default_duration) { - default_duration_ = default_duration; - } - uint64_t default_duration() const { return default_duration_; } - - uint64_t codec_private_length() const { return codec_private_length_; } - uint32_t content_encoding_entries_size() const { - return content_encoding_entries_size_; - } - - private: - // Track element names. - char* codec_id_; - uint8_t* codec_private_; - char* language_; - uint64_t max_block_additional_id_; - char* name_; - uint64_t number_; - uint64_t type_; - uint64_t uid_; - uint64_t codec_delay_; - uint64_t seek_pre_roll_; - uint64_t default_duration_; - - // Size of the CodecPrivate data in bytes. - uint64_t codec_private_length_; - - // ContentEncoding element list. - ContentEncoding** content_encoding_entries_; - - // Number of ContentEncoding elements added. - uint32_t content_encoding_entries_size_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Track); -}; - -/////////////////////////////////////////////////////////////// -// Track that has video specific elements. -class VideoTrack : public Track { - public: - // Supported modes for stereo 3D. - enum StereoMode { - kMono = 0, - kSideBySideLeftIsFirst = 1, - kTopBottomRightIsFirst = 2, - kTopBottomLeftIsFirst = 3, - kSideBySideRightIsFirst = 11 - }; - - enum AlphaMode { kNoAlpha = 0, kAlpha = 1 }; - - // The |seed| parameter is used to synthesize a UID for the track. - explicit VideoTrack(unsigned int* seed); - virtual ~VideoTrack(); - - // Returns the size in bytes for the payload of the Track element plus the - // video specific elements. - virtual uint64_t PayloadSize() const; - - // Output the VideoTrack element to the writer. Returns true on success. - virtual bool Write(IMkvWriter* writer) const; - - // Sets the video's stereo mode. Returns true on success. - bool SetStereoMode(uint64_t stereo_mode); - - // Sets the video's alpha mode. Returns true on success. - bool SetAlphaMode(uint64_t alpha_mode); - - void set_display_height(uint64_t height) { display_height_ = height; } - uint64_t display_height() const { return display_height_; } - void set_display_width(uint64_t width) { display_width_ = width; } - uint64_t display_width() const { return display_width_; } - void set_pixel_height(uint64_t height) { pixel_height_ = height; } - uint64_t pixel_height() const { return pixel_height_; } - void set_pixel_width(uint64_t width) { pixel_width_ = width; } - uint64_t pixel_width() const { return pixel_width_; } - - void set_crop_left(uint64_t crop_left) { crop_left_ = crop_left; } - uint64_t crop_left() const { return crop_left_; } - void set_crop_right(uint64_t crop_right) { crop_right_ = crop_right; } - uint64_t crop_right() const { return crop_right_; } - void set_crop_top(uint64_t crop_top) { crop_top_ = crop_top; } - uint64_t crop_top() const { return crop_top_; } - void set_crop_bottom(uint64_t crop_bottom) { crop_bottom_ = crop_bottom; } - uint64_t crop_bottom() const { return crop_bottom_; } - - void set_frame_rate(double frame_rate) { frame_rate_ = frame_rate; } - double frame_rate() const { return frame_rate_; } - void set_height(uint64_t height) { height_ = height; } - uint64_t height() const { return height_; } - uint64_t stereo_mode() { return stereo_mode_; } - uint64_t alpha_mode() { return alpha_mode_; } - void set_width(uint64_t width) { width_ = width; } - uint64_t width() const { return width_; } - void set_colour_space(const char* colour_space); - const char* colour_space() const { return colour_space_; } - - Colour* colour() { return colour_; } - - // Deep copies |colour|. - bool SetColour(const Colour& colour); - - Projection* projection() { return projection_; } - - // Deep copies |projection|. - bool SetProjection(const Projection& projection); - - private: - // Returns the size in bytes of the Video element. - uint64_t VideoPayloadSize() const; - - // Video track element names. - uint64_t display_height_; - uint64_t display_width_; - uint64_t pixel_height_; - uint64_t pixel_width_; - uint64_t crop_left_; - uint64_t crop_right_; - uint64_t crop_top_; - uint64_t crop_bottom_; - double frame_rate_; - uint64_t height_; - uint64_t stereo_mode_; - uint64_t alpha_mode_; - uint64_t width_; - char* colour_space_; - - Colour* colour_; - Projection* projection_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(VideoTrack); -}; - -/////////////////////////////////////////////////////////////// -// Track that has audio specific elements. -class AudioTrack : public Track { - public: - // The |seed| parameter is used to synthesize a UID for the track. - explicit AudioTrack(unsigned int* seed); - virtual ~AudioTrack(); - - // Returns the size in bytes for the payload of the Track element plus the - // audio specific elements. - virtual uint64_t PayloadSize() const; - - // Output the AudioTrack element to the writer. Returns true on success. - virtual bool Write(IMkvWriter* writer) const; - - void set_bit_depth(uint64_t bit_depth) { bit_depth_ = bit_depth; } - uint64_t bit_depth() const { return bit_depth_; } - void set_channels(uint64_t channels) { channels_ = channels; } - uint64_t channels() const { return channels_; } - void set_sample_rate(double sample_rate) { sample_rate_ = sample_rate; } - double sample_rate() const { return sample_rate_; } - - private: - // Audio track element names. - uint64_t bit_depth_; - uint64_t channels_; - double sample_rate_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(AudioTrack); -}; - -/////////////////////////////////////////////////////////////// -// Tracks element -class Tracks { - public: - // Audio and video type defined by the Matroska specs. - enum { kVideo = 0x1, kAudio = 0x2 }; - - static const char kOpusCodecId[]; - static const char kVorbisCodecId[]; - static const char kAv1CodecId[]; - static const char kVp8CodecId[]; - static const char kVp9CodecId[]; - static const char kWebVttCaptionsId[]; - static const char kWebVttDescriptionsId[]; - static const char kWebVttMetadataId[]; - static const char kWebVttSubtitlesId[]; - - Tracks(); - ~Tracks(); - - // Adds a Track element to the Tracks object. |track| will be owned and - // deleted by the Tracks object. Returns true on success. |number| is the - // number to use for the track. |number| must be >= 0. If |number| == 0 - // then the muxer will decide on the track number. - bool AddTrack(Track* track, int32_t number); - - // Returns the track by index. Returns NULL if there is no track match. - const Track* GetTrackByIndex(uint32_t idx) const; - - // Search the Tracks and return the track that matches |tn|. Returns NULL - // if there is no track match. - Track* GetTrackByNumber(uint64_t track_number) const; - - // Returns true if the track number is an audio track. - bool TrackIsAudio(uint64_t track_number) const; - - // Returns true if the track number is a video track. - bool TrackIsVideo(uint64_t track_number) const; - - // Output the Tracks element to the writer. Returns true on success. - bool Write(IMkvWriter* writer) const; - - uint32_t track_entries_size() const { return track_entries_size_; } - - private: - // Track element list. - Track** track_entries_; - - // Number of Track elements added. - uint32_t track_entries_size_; - - // Whether or not Tracks element has already been written via IMkvWriter. - mutable bool wrote_tracks_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Tracks); -}; - -/////////////////////////////////////////////////////////////// -// Chapter element -// -class Chapter { - public: - // Set the identifier for this chapter. (This corresponds to the - // Cue Identifier line in WebVTT.) - // TODO(matthewjheaney): the actual serialization of this item in - // MKV is pending. - bool set_id(const char* id); - - // Converts the nanosecond start and stop times of this chapter to - // their corresponding timecode values, and stores them that way. - void set_time(const Segment& segment, uint64_t start_time_ns, - uint64_t end_time_ns); - - // Sets the uid for this chapter. Primarily used to enable - // deterministic output from the muxer. - void set_uid(const uint64_t uid) { uid_ = uid; } - - // Add a title string to this chapter, per the semantics described - // here: - // http://www.matroska.org/technical/specs/index.html - // - // The title ("chapter string") is a UTF-8 string. - // - // The language has ISO 639-2 representation, described here: - // http://www.loc.gov/standards/iso639-2/englangn.html - // http://www.loc.gov/standards/iso639-2/php/English_list.php - // If you specify NULL as the language value, this implies - // English ("eng"). - // - // The country value corresponds to the codes listed here: - // http://www.iana.org/domains/root/db/ - // - // The function returns false if the string could not be allocated. - bool add_string(const char* title, const char* language, const char* country); - - private: - friend class Chapters; - - // For storage of chapter titles that differ by language. - class Display { - public: - // Establish representation invariant for new Display object. - void Init(); - - // Reclaim resources, in anticipation of destruction. - void Clear(); - - // Copies the title to the |title_| member. Returns false on - // error. - bool set_title(const char* title); - - // Copies the language to the |language_| member. Returns false - // on error. - bool set_language(const char* language); - - // Copies the country to the |country_| member. Returns false on - // error. - bool set_country(const char* country); - - // If |writer| is non-NULL, serialize the Display sub-element of - // the Atom into the stream. Returns the Display element size on - // success, 0 if error. - uint64_t WriteDisplay(IMkvWriter* writer) const; - - private: - char* title_; - char* language_; - char* country_; - }; - - Chapter(); - ~Chapter(); - - // Establish the representation invariant for a newly-created - // Chapter object. The |seed| parameter is used to create the UID - // for this chapter atom. - void Init(unsigned int* seed); - - // Copies this Chapter object to a different one. This is used when - // expanding a plain array of Chapter objects (see Chapters). - void ShallowCopy(Chapter* dst) const; - - // Reclaim resources used by this Chapter object, pending its - // destruction. - void Clear(); - - // If there is no storage remaining on the |displays_| array for a - // new display object, creates a new, longer array and copies the - // existing Display objects to the new array. Returns false if the - // array cannot be expanded. - bool ExpandDisplaysArray(); - - // If |writer| is non-NULL, serialize the Atom sub-element into the - // stream. Returns the total size of the element on success, 0 if - // error. - uint64_t WriteAtom(IMkvWriter* writer) const; - - // The string identifier for this chapter (corresponds to WebVTT cue - // identifier). - char* id_; - - // Start timecode of the chapter. - uint64_t start_timecode_; - - // Stop timecode of the chapter. - uint64_t end_timecode_; - - // The binary identifier for this chapter. - uint64_t uid_; - - // The Atom element can contain multiple Display sub-elements, as - // the same logical title can be rendered in different languages. - Display* displays_; - - // The physical length (total size) of the |displays_| array. - int displays_size_; - - // The logical length (number of active elements) on the |displays_| - // array. - int displays_count_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Chapter); -}; - -/////////////////////////////////////////////////////////////// -// Chapters element -// -class Chapters { - public: - Chapters(); - ~Chapters(); - - Chapter* AddChapter(unsigned int* seed); - - // Returns the number of chapters that have been added. - int Count() const; - - // Output the Chapters element to the writer. Returns true on success. - bool Write(IMkvWriter* writer) const; - - private: - // Expands the chapters_ array if there is not enough space to contain - // another chapter object. Returns true on success. - bool ExpandChaptersArray(); - - // If |writer| is non-NULL, serialize the Edition sub-element of the - // Chapters element into the stream. Returns the Edition element - // size on success, 0 if error. - uint64_t WriteEdition(IMkvWriter* writer) const; - - // Total length of the chapters_ array. - int chapters_size_; - - // Number of active chapters on the chapters_ array. - int chapters_count_; - - // Array for storage of chapter objects. - Chapter* chapters_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Chapters); -}; - -/////////////////////////////////////////////////////////////// -// Tag element -// -class Tag { - public: - bool add_simple_tag(const char* tag_name, const char* tag_string); - - private: - // Tags calls Clear and the destructor of Tag - friend class Tags; - - // For storage of simple tags - class SimpleTag { - public: - // Establish representation invariant for new SimpleTag object. - void Init(); - - // Reclaim resources, in anticipation of destruction. - void Clear(); - - // Copies the title to the |tag_name_| member. Returns false on - // error. - bool set_tag_name(const char* tag_name); - - // Copies the language to the |tag_string_| member. Returns false - // on error. - bool set_tag_string(const char* tag_string); - - // If |writer| is non-NULL, serialize the SimpleTag sub-element of - // the Atom into the stream. Returns the SimpleTag element size on - // success, 0 if error. - uint64_t Write(IMkvWriter* writer) const; - - private: - char* tag_name_; - char* tag_string_; - }; - - Tag(); - ~Tag(); - - // Copies this Tag object to a different one. This is used when - // expanding a plain array of Tag objects (see Tags). - void ShallowCopy(Tag* dst) const; - - // Reclaim resources used by this Tag object, pending its - // destruction. - void Clear(); - - // If there is no storage remaining on the |simple_tags_| array for a - // new display object, creates a new, longer array and copies the - // existing SimpleTag objects to the new array. Returns false if the - // array cannot be expanded. - bool ExpandSimpleTagsArray(); - - // If |writer| is non-NULL, serialize the Tag sub-element into the - // stream. Returns the total size of the element on success, 0 if - // error. - uint64_t Write(IMkvWriter* writer) const; - - // The Atom element can contain multiple SimpleTag sub-elements - SimpleTag* simple_tags_; - - // The physical length (total size) of the |simple_tags_| array. - int simple_tags_size_; - - // The logical length (number of active elements) on the |simple_tags_| - // array. - int simple_tags_count_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Tag); -}; - -/////////////////////////////////////////////////////////////// -// Tags element -// -class Tags { - public: - Tags(); - ~Tags(); - - Tag* AddTag(); - - // Returns the number of tags that have been added. - int Count() const; - - // Output the Tags element to the writer. Returns true on success. - bool Write(IMkvWriter* writer) const; - - private: - // Expands the tags_ array if there is not enough space to contain - // another tag object. Returns true on success. - bool ExpandTagsArray(); - - // Total length of the tags_ array. - int tags_size_; - - // Number of active tags on the tags_ array. - int tags_count_; - - // Array for storage of tag objects. - Tag* tags_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Tags); -}; - -/////////////////////////////////////////////////////////////// -// Cluster element -// -// Notes: -// |Init| must be called before any other method in this class. -class Cluster { - public: - // |timecode| is the absolute timecode of the cluster. |cues_pos| is the - // position for the cluster within the segment that should be written in - // the cues element. |timecode_scale| is the timecode scale of the segment. - Cluster(uint64_t timecode, int64_t cues_pos, uint64_t timecode_scale, - bool write_last_frame_with_duration = false, - bool fixed_size_timecode = false); - ~Cluster(); - - bool Init(IMkvWriter* ptr_writer); - - // Adds a frame to be output in the file. The frame is written out through - // |writer_| if successful. Returns true on success. - bool AddFrame(const Frame* frame); - - // Adds a frame to be output in the file. The frame is written out through - // |writer_| if successful. Returns true on success. - // Inputs: - // data: Pointer to the data - // length: Length of the data - // track_number: Track to add the data to. Value returned by Add track - // functions. The range of allowed values is [1, 126]. - // timecode: Absolute (not relative to cluster) timestamp of the - // frame, expressed in timecode units. - // is_key: Flag telling whether or not this frame is a key frame. - bool AddFrame(const uint8_t* data, uint64_t length, uint64_t track_number, - uint64_t timecode, // timecode units (absolute) - bool is_key); - - // Adds a frame to be output in the file. The frame is written out through - // |writer_| if successful. Returns true on success. - // Inputs: - // data: Pointer to the data - // length: Length of the data - // additional: Pointer to the additional data - // additional_length: Length of the additional data - // add_id: Value of BlockAddID element - // track_number: Track to add the data to. Value returned by Add track - // functions. The range of allowed values is [1, 126]. - // abs_timecode: Absolute (not relative to cluster) timestamp of the - // frame, expressed in timecode units. - // is_key: Flag telling whether or not this frame is a key frame. - bool AddFrameWithAdditional(const uint8_t* data, uint64_t length, - const uint8_t* additional, - uint64_t additional_length, uint64_t add_id, - uint64_t track_number, uint64_t abs_timecode, - bool is_key); - - // Adds a frame to be output in the file. The frame is written out through - // |writer_| if successful. Returns true on success. - // Inputs: - // data: Pointer to the data. - // length: Length of the data. - // discard_padding: DiscardPadding element value. - // track_number: Track to add the data to. Value returned by Add track - // functions. The range of allowed values is [1, 126]. - // abs_timecode: Absolute (not relative to cluster) timestamp of the - // frame, expressed in timecode units. - // is_key: Flag telling whether or not this frame is a key frame. - bool AddFrameWithDiscardPadding(const uint8_t* data, uint64_t length, - int64_t discard_padding, - uint64_t track_number, uint64_t abs_timecode, - bool is_key); - - // Writes a frame of metadata to the output medium; returns true on - // success. - // Inputs: - // data: Pointer to the data - // length: Length of the data - // track_number: Track to add the data to. Value returned by Add track - // functions. The range of allowed values is [1, 126]. - // timecode: Absolute (not relative to cluster) timestamp of the - // metadata frame, expressed in timecode units. - // duration: Duration of metadata frame, in timecode units. - // - // The metadata frame is written as a block group, with a duration - // sub-element but no reference time sub-elements (indicating that - // it is considered a keyframe, per Matroska semantics). - bool AddMetadata(const uint8_t* data, uint64_t length, uint64_t track_number, - uint64_t timecode, uint64_t duration); - - // Increments the size of the cluster's data in bytes. - void AddPayloadSize(uint64_t size); - - // Closes the cluster so no more data can be written to it. Will update the - // cluster's size if |writer_| is seekable. Returns true on success. This - // variant of Finalize() fails when |write_last_frame_with_duration_| is set - // to true. - bool Finalize(); - - // Closes the cluster so no more data can be written to it. Will update the - // cluster's size if |writer_| is seekable. Returns true on success. - // Inputs: - // set_last_frame_duration: Boolean indicating whether or not the duration - // of the last frame should be set. If set to - // false, the |duration| value is ignored and - // |write_last_frame_with_duration_| will not be - // honored. - // duration: Duration of the Cluster in timecode scale. - bool Finalize(bool set_last_frame_duration, uint64_t duration); - - // Returns the size in bytes for the entire Cluster element. - uint64_t Size() const; - - // Given |abs_timecode|, calculates timecode relative to most recent timecode. - // Returns -1 on failure, or a relative timecode. - int64_t GetRelativeTimecode(int64_t abs_timecode) const; - - int64_t size_position() const { return size_position_; } - int32_t blocks_added() const { return blocks_added_; } - uint64_t payload_size() const { return payload_size_; } - int64_t position_for_cues() const { return position_for_cues_; } - uint64_t timecode() const { return timecode_; } - uint64_t timecode_scale() const { return timecode_scale_; } - void set_write_last_frame_with_duration(bool write_last_frame_with_duration) { - write_last_frame_with_duration_ = write_last_frame_with_duration; - } - bool write_last_frame_with_duration() const { - return write_last_frame_with_duration_; - } - - private: - // Iterator type for the |stored_frames_| map. - typedef std::map >::iterator FrameMapIterator; - - // Utility method that confirms that blocks can still be added, and that the - // cluster header has been written. Used by |DoWriteFrame*|. Returns true - // when successful. - bool PreWriteBlock(); - - // Utility method used by the |DoWriteFrame*| methods that handles the book - // keeping required after each block is written. - void PostWriteBlock(uint64_t element_size); - - // Does some verification and calls WriteFrame. - bool DoWriteFrame(const Frame* const frame); - - // Either holds back the given frame, or writes it out depending on whether or - // not |write_last_frame_with_duration_| is set. - bool QueueOrWriteFrame(const Frame* const frame); - - // Outputs the Cluster header to |writer_|. Returns true on success. - bool WriteClusterHeader(); - - // Number of blocks added to the cluster. - int32_t blocks_added_; - - // Flag telling if the cluster has been closed. - bool finalized_; - - // Flag indicating whether the cluster's timecode will always be written out - // using 8 bytes. - bool fixed_size_timecode_; - - // Flag telling if the cluster's header has been written. - bool header_written_; - - // The size of the cluster elements in bytes. - uint64_t payload_size_; - - // The file position used for cue points. - const int64_t position_for_cues_; - - // The file position of the cluster's size element. - int64_t size_position_; - - // The absolute timecode of the cluster. - const uint64_t timecode_; - - // The timecode scale of the Segment containing the cluster. - const uint64_t timecode_scale_; - - // Flag indicating whether the last frame of the cluster should be written as - // a Block with Duration. If set to true, then it will result in holding back - // of frames and the parameterized version of Finalize() must be called to - // finish writing the Cluster. - bool write_last_frame_with_duration_; - - // Map used to hold back frames, if required. Track number is the key. - std::map > stored_frames_; - - // Map from track number to the timestamp of the last block written for that - // track. - std::map last_block_timestamp_; - - // Pointer to the writer object. Not owned by this class. - IMkvWriter* writer_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Cluster); -}; - -/////////////////////////////////////////////////////////////// -// SeekHead element -class SeekHead { - public: - SeekHead(); - ~SeekHead(); - - // TODO(fgalligan): Change this to reserve a certain size. Then check how - // big the seek entry to be added is as not every seek entry will be the - // maximum size it could be. - // Adds a seek entry to be written out when the element is finalized. |id| - // must be the coded mkv element id. |pos| is the file position of the - // element. Returns true on success. - bool AddSeekEntry(uint32_t id, uint64_t pos); - - // Writes out SeekHead and SeekEntry elements. Returns true on success. - bool Finalize(IMkvWriter* writer) const; - - // Returns the id of the Seek Entry at the given index. Returns -1 if index is - // out of range. - uint32_t GetId(int index) const; - - // Returns the position of the Seek Entry at the given index. Returns -1 if - // index is out of range. - uint64_t GetPosition(int index) const; - - // Sets the Seek Entry id and position at given index. - // Returns true on success. - bool SetSeekEntry(int index, uint32_t id, uint64_t position); - - // Reserves space by writing out a Void element which will be updated with - // a SeekHead element later. Returns true on success. - bool Write(IMkvWriter* writer); - - // We are going to put a cap on the number of Seek Entries. - const static int32_t kSeekEntryCount = 5; - - private: - // Returns the maximum size in bytes of one seek entry. - uint64_t MaxEntrySize() const; - - // Seek entry id element list. - uint32_t seek_entry_id_[kSeekEntryCount]; - - // Seek entry pos element list. - uint64_t seek_entry_pos_[kSeekEntryCount]; - - // The file position of SeekHead element. - int64_t start_pos_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(SeekHead); -}; - -/////////////////////////////////////////////////////////////// -// Segment Information element -class SegmentInfo { - public: - SegmentInfo(); - ~SegmentInfo(); - - // Will update the duration if |duration_| is > 0.0. Returns true on success. - bool Finalize(IMkvWriter* writer) const; - - // Sets |muxing_app_| and |writing_app_|. - bool Init(); - - // Output the Segment Information element to the writer. Returns true on - // success. - bool Write(IMkvWriter* writer); - - void set_duration(double duration) { duration_ = duration; } - double duration() const { return duration_; } - void set_muxing_app(const char* app); - const char* muxing_app() const { return muxing_app_; } - void set_timecode_scale(uint64_t scale) { timecode_scale_ = scale; } - uint64_t timecode_scale() const { return timecode_scale_; } - void set_writing_app(const char* app); - const char* writing_app() const { return writing_app_; } - void set_date_utc(int64_t date_utc) { date_utc_ = date_utc; } - int64_t date_utc() const { return date_utc_; } - - private: - // Segment Information element names. - // Initially set to -1 to signify that a duration has not been set and should - // not be written out. - double duration_; - // Set to libwebm-%d.%d.%d.%d, major, minor, build, revision. - char* muxing_app_; - uint64_t timecode_scale_; - // Initially set to libwebm-%d.%d.%d.%d, major, minor, build, revision. - char* writing_app_; - // LLONG_MIN when DateUTC is not set. - int64_t date_utc_; - - // The file position of the duration element. - int64_t duration_pos_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(SegmentInfo); -}; - -/////////////////////////////////////////////////////////////// -// This class represents the main segment in a WebM file. Currently only -// supports one Segment element. -// -// Notes: -// |Init| must be called before any other method in this class. -class Segment { - public: - enum Mode { kLive = 0x1, kFile = 0x2 }; - - enum CuesPosition { - kAfterClusters = 0x0, // Position Cues after Clusters - Default - kBeforeClusters = 0x1 // Position Cues before Clusters - }; - - static const uint32_t kDefaultDocTypeVersion = 4; - static const uint64_t kDefaultMaxClusterDuration = 30000000000ULL; - - Segment(); - ~Segment(); - - // Initializes |SegmentInfo| and returns result. Always returns false when - // |ptr_writer| is NULL. - bool Init(IMkvWriter* ptr_writer); - - // Adds a generic track to the segment. Returns the newly-allocated - // track object (which is owned by the segment) on success, NULL on - // error. |number| is the number to use for the track. |number| - // must be >= 0. If |number| == 0 then the muxer will decide on the - // track number. - Track* AddTrack(int32_t number); - - // Adds a Vorbis audio track to the segment. Returns the number of the track - // on success, 0 on error. |number| is the number to use for the audio track. - // |number| must be >= 0. If |number| == 0 then the muxer will decide on - // the track number. - uint64_t AddAudioTrack(int32_t sample_rate, int32_t channels, int32_t number); - - // Adds an empty chapter to the chapters of this segment. Returns - // non-NULL on success. After adding the chapter, the caller should - // populate its fields via the Chapter member functions. - Chapter* AddChapter(); - - // Adds an empty tag to the tags of this segment. Returns - // non-NULL on success. After adding the tag, the caller should - // populate its fields via the Tag member functions. - Tag* AddTag(); - - // Adds a cue point to the Cues element. |timestamp| is the time in - // nanoseconds of the cue's time. |track| is the Track of the Cue. This - // function must be called after AddFrame to calculate the correct - // BlockNumber for the CuePoint. Returns true on success. - bool AddCuePoint(uint64_t timestamp, uint64_t track); - - // Adds a frame to be output in the file. Returns true on success. - // Inputs: - // data: Pointer to the data - // length: Length of the data - // track_number: Track to add the data to. Value returned by Add track - // functions. - // timestamp: Timestamp of the frame in nanoseconds from 0. - // is_key: Flag telling whether or not this frame is a key frame. - bool AddFrame(const uint8_t* data, uint64_t length, uint64_t track_number, - uint64_t timestamp_ns, bool is_key); - - // Writes a frame of metadata to the output medium; returns true on - // success. - // Inputs: - // data: Pointer to the data - // length: Length of the data - // track_number: Track to add the data to. Value returned by Add track - // functions. - // timecode: Absolute timestamp of the metadata frame, expressed - // in nanosecond units. - // duration: Duration of metadata frame, in nanosecond units. - // - // The metadata frame is written as a block group, with a duration - // sub-element but no reference time sub-elements (indicating that - // it is considered a keyframe, per Matroska semantics). - bool AddMetadata(const uint8_t* data, uint64_t length, uint64_t track_number, - uint64_t timestamp_ns, uint64_t duration_ns); - - // Writes a frame with additional data to the output medium; returns true on - // success. - // Inputs: - // data: Pointer to the data. - // length: Length of the data. - // additional: Pointer to additional data. - // additional_length: Length of additional data. - // add_id: Additional ID which identifies the type of additional data. - // track_number: Track to add the data to. Value returned by Add track - // functions. - // timestamp: Absolute timestamp of the frame, expressed in nanosecond - // units. - // is_key: Flag telling whether or not this frame is a key frame. - bool AddFrameWithAdditional(const uint8_t* data, uint64_t length, - const uint8_t* additional, - uint64_t additional_length, uint64_t add_id, - uint64_t track_number, uint64_t timestamp, - bool is_key); - - // Writes a frame with DiscardPadding to the output medium; returns true on - // success. - // Inputs: - // data: Pointer to the data. - // length: Length of the data. - // discard_padding: DiscardPadding element value. - // track_number: Track to add the data to. Value returned by Add track - // functions. - // timestamp: Absolute timestamp of the frame, expressed in nanosecond - // units. - // is_key: Flag telling whether or not this frame is a key frame. - bool AddFrameWithDiscardPadding(const uint8_t* data, uint64_t length, - int64_t discard_padding, - uint64_t track_number, uint64_t timestamp, - bool is_key); - - // Writes a Frame to the output medium. Chooses the correct way of writing - // the frame (Block vs SimpleBlock) based on the parameters passed. - // Inputs: - // frame: frame object - bool AddGenericFrame(const Frame* frame); - - // Adds a VP8 video track to the segment. Returns the number of the track on - // success, 0 on error. |number| is the number to use for the video track. - // |number| must be >= 0. If |number| == 0 then the muxer will decide on - // the track number. - uint64_t AddVideoTrack(int32_t width, int32_t height, int32_t number); - - // This function must be called after Finalize() if you need a copy of the - // output with Cues written before the Clusters. It will return false if the - // writer is not seekable of if chunking is set to true. - // Input parameters: - // reader - an IMkvReader object created with the same underlying file of the - // current writer object. Make sure to close the existing writer - // object before creating this so that all the data is properly - // flushed and available for reading. - // writer - an IMkvWriter object pointing to a *different* file than the one - // pointed by the current writer object. This file will contain the - // Cues element before the Clusters. - bool CopyAndMoveCuesBeforeClusters(mkvparser::IMkvReader* reader, - IMkvWriter* writer); - - // Sets which track to use for the Cues element. Must have added the track - // before calling this function. Returns true on success. |track_number| is - // returned by the Add track functions. - bool CuesTrack(uint64_t track_number); - - // This will force the muxer to create a new Cluster when the next frame is - // added. - void ForceNewClusterOnNextFrame(); - - // Writes out any frames that have not been written out. Finalizes the last - // cluster. May update the size and duration of the segment. May output the - // Cues element. May finalize the SeekHead element. Returns true on success. - bool Finalize(); - - // Returns the Cues object. - Cues* GetCues() { return &cues_; } - - // Returns the Segment Information object. - const SegmentInfo* GetSegmentInfo() const { return &segment_info_; } - SegmentInfo* GetSegmentInfo() { return &segment_info_; } - - // Search the Tracks and return the track that matches |track_number|. - // Returns NULL if there is no track match. - Track* GetTrackByNumber(uint64_t track_number) const; - - // Toggles whether to output a cues element. - void OutputCues(bool output_cues); - - // Toggles whether to write the last frame in each Cluster with Duration. - void AccurateClusterDuration(bool accurate_cluster_duration); - - // Toggles whether to write the Cluster Timecode using exactly 8 bytes. - void UseFixedSizeClusterTimecode(bool fixed_size_cluster_timecode); - - // Sets if the muxer will output files in chunks or not. |chunking| is a - // flag telling whether or not to turn on chunking. |filename| is the base - // filename for the chunk files. The header chunk file will be named - // |filename|.hdr and the data chunks will be named - // |filename|_XXXXXX.chk. Chunking implies that the muxer will be writing - // to files so the muxer will use the default MkvWriter class to control - // what data is written to what files. Returns true on success. - // TODO: Should we change the IMkvWriter Interface to add Open and Close? - // That will force the interface to be dependent on files. - bool SetChunking(bool chunking, const char* filename); - - bool chunking() const { return chunking_; } - uint64_t cues_track() const { return cues_track_; } - void set_max_cluster_duration(uint64_t max_cluster_duration) { - max_cluster_duration_ = max_cluster_duration; - } - uint64_t max_cluster_duration() const { return max_cluster_duration_; } - void set_max_cluster_size(uint64_t max_cluster_size) { - max_cluster_size_ = max_cluster_size; - } - uint64_t max_cluster_size() const { return max_cluster_size_; } - void set_mode(Mode mode) { mode_ = mode; } - Mode mode() const { return mode_; } - CuesPosition cues_position() const { return cues_position_; } - bool output_cues() const { return output_cues_; } - void set_estimate_file_duration(bool estimate_duration) { - estimate_file_duration_ = estimate_duration; - } - bool estimate_file_duration() const { return estimate_file_duration_; } - const SegmentInfo* segment_info() const { return &segment_info_; } - void set_duration(double duration) { duration_ = duration; } - double duration() const { return duration_; } - - // Returns true when codec IDs are valid for WebM. - bool DocTypeIsWebm() const; - - private: - // Checks if header information has been output and initialized. If not it - // will output the Segment element and initialize the SeekHead elment and - // Cues elements. - bool CheckHeaderInfo(); - - // Sets |doc_type_version_| based on the current element requirements. - void UpdateDocTypeVersion(); - - // Sets |name| according to how many chunks have been written. |ext| is the - // file extension. |name| must be deleted by the calling app. Returns true - // on success. - bool UpdateChunkName(const char* ext, char** name) const; - - // Returns the maximum offset within the segment's payload. When chunking - // this function is needed to determine offsets of elements within the - // chunked files. Returns -1 on error. - int64_t MaxOffset(); - - // Adds the frame to our frame array. - bool QueueFrame(Frame* frame); - - // Output all frames that are queued. Returns -1 on error, otherwise - // it returns the number of frames written. - int WriteFramesAll(); - - // Output all frames that are queued that have an end time that is less - // then |timestamp|. Returns true on success and if there are no frames - // queued. - bool WriteFramesLessThan(uint64_t timestamp); - - // Outputs the segment header, Segment Information element, SeekHead element, - // and Tracks element to |writer_|. - bool WriteSegmentHeader(); - - // Given a frame with the specified timestamp (nanosecond units) and - // keyframe status, determine whether a new cluster should be - // created, before writing enqueued frames and the frame itself. The - // function returns one of the following values: - // -1 = error: an out-of-order frame was detected - // 0 = do not create a new cluster, and write frame to the existing cluster - // 1 = create a new cluster, and write frame to that new cluster - // 2 = create a new cluster, and re-run test - int TestFrame(uint64_t track_num, uint64_t timestamp_ns, bool key) const; - - // Create a new cluster, using the earlier of the first enqueued - // frame, or the indicated time. Returns true on success. - bool MakeNewCluster(uint64_t timestamp_ns); - - // Checks whether a new cluster needs to be created, and if so - // creates a new cluster. Returns false if creation of a new cluster - // was necessary but creation was not successful. - bool DoNewClusterProcessing(uint64_t track_num, uint64_t timestamp_ns, - bool key); - - // Adjusts Cue Point values (to place Cues before Clusters) so that they - // reflect the correct offsets. - void MoveCuesBeforeClusters(); - - // This function recursively computes the correct cluster offsets (this is - // done to move the Cues before Clusters). It recursively updates the change - // in size (which indicates a change in cluster offset) until no sizes change. - // Parameters: - // diff - indicates the difference in size of the Cues element that needs to - // accounted for. - // index - index in the list of Cues which is currently being adjusted. - // cue_size - sum of size of all the CuePoint elements. - void MoveCuesBeforeClustersHelper(uint64_t diff, int index, - uint64_t* cue_size); - - // Seeds the random number generator used to make UIDs. - unsigned int seed_; - - // WebM elements - Cues cues_; - SeekHead seek_head_; - SegmentInfo segment_info_; - Tracks tracks_; - Chapters chapters_; - Tags tags_; - - // Number of chunks written. - int chunk_count_; - - // Current chunk filename. - char* chunk_name_; - - // Default MkvWriter object created by this class used for writing clusters - // out in separate files. - MkvWriter* chunk_writer_cluster_; - - // Default MkvWriter object created by this class used for writing Cues - // element out to a file. - MkvWriter* chunk_writer_cues_; - - // Default MkvWriter object created by this class used for writing the - // Matroska header out to a file. - MkvWriter* chunk_writer_header_; - - // Flag telling whether or not the muxer is chunking output to multiple - // files. - bool chunking_; - - // Base filename for the chunked files. - char* chunking_base_name_; - - // File position offset where the Clusters end. - int64_t cluster_end_offset_; - - // List of clusters. - Cluster** cluster_list_; - - // Number of cluster pointers allocated in the cluster list. - int32_t cluster_list_capacity_; - - // Number of clusters in the cluster list. - int32_t cluster_list_size_; - - // Indicates whether Cues should be written before or after Clusters - CuesPosition cues_position_; - - // Track number that is associated with the cues element for this segment. - uint64_t cues_track_; - - // Tells the muxer to force a new cluster on the next Block. - bool force_new_cluster_; - - // List of stored audio frames. These variables are used to store frames so - // the muxer can follow the guideline "Audio blocks that contain the video - // key frame's timecode should be in the same cluster as the video key frame - // block." - Frame** frames_; - - // Number of frame pointers allocated in the frame list. - int32_t frames_capacity_; - - // Number of frames in the frame list. - int32_t frames_size_; - - // Flag telling if a video track has been added to the segment. - bool has_video_; - - // Flag telling if the segment's header has been written. - bool header_written_; - - // Duration of the last block in nanoseconds. - uint64_t last_block_duration_; - - // Last timestamp in nanoseconds added to a cluster. - uint64_t last_timestamp_; - - // Last timestamp in nanoseconds by track number added to a cluster. - uint64_t last_track_timestamp_[kMaxTrackNumber]; - - // Number of frames written per track. - uint64_t track_frames_written_[kMaxTrackNumber]; - - // Maximum time in nanoseconds for a cluster duration. This variable is a - // guideline and some clusters may have a longer duration. Default is 30 - // seconds. - uint64_t max_cluster_duration_; - - // Maximum size in bytes for a cluster. This variable is a guideline and - // some clusters may have a larger size. Default is 0 which signifies that - // the muxer will decide the size. - uint64_t max_cluster_size_; - - // The mode that segment is in. If set to |kLive| the writer must not - // seek backwards. - Mode mode_; - - // Flag telling the muxer that a new cue point should be added. - bool new_cuepoint_; - - // TODO(fgalligan): Should we add support for more than one Cues element? - // Flag whether or not the muxer should output a Cues element. - bool output_cues_; - - // Flag whether or not the last frame in each Cluster will have a Duration - // element in it. - bool accurate_cluster_duration_; - - // Flag whether or not to write the Cluster Timecode using exactly 8 bytes. - bool fixed_size_cluster_timecode_; - - // Flag whether or not to estimate the file duration. - bool estimate_file_duration_; - - // The size of the EBML header, used to validate the header if - // WriteEbmlHeader() is called more than once. - int32_t ebml_header_size_; - - // The file position of the segment's payload. - int64_t payload_pos_; - - // The file position of the element's size. - int64_t size_position_; - - // Current DocTypeVersion (|doc_type_version_|) and that written in - // WriteSegmentHeader(). - // WriteEbmlHeader() will be called from Finalize() if |doc_type_version_| - // differs from |doc_type_version_written_|. - uint32_t doc_type_version_; - uint32_t doc_type_version_written_; - - // If |duration_| is > 0, then explicitly set the duration of the segment. - double duration_; - - // Pointer to the writer objects. Not owned by this class. - IMkvWriter* writer_cluster_; - IMkvWriter* writer_cues_; - IMkvWriter* writer_header_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Segment); -}; - -} // namespace mkvmuxer - -#endif // MKVMUXER_MKVMUXER_H_ diff --git a/vpx-encoder/android_libs/x86_64/include/mkvmuxer/mkvmuxertypes.h b/vpx-encoder/android_libs/x86_64/include/mkvmuxer/mkvmuxertypes.h deleted file mode 100644 index e5db1216..00000000 --- a/vpx-encoder/android_libs/x86_64/include/mkvmuxer/mkvmuxertypes.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) 2012 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. - -#ifndef MKVMUXER_MKVMUXERTYPES_H_ -#define MKVMUXER_MKVMUXERTYPES_H_ - -namespace mkvmuxer { -typedef unsigned char uint8; -typedef short int16; -typedef int int32; -typedef unsigned int uint32; -typedef long long int64; -typedef unsigned long long uint64; -} // namespace mkvmuxer - -// Copied from Chromium basictypes.h -// A macro to disallow the copy constructor and operator= functions -// This should be used in the private: declarations for a class -#define LIBWEBM_DISALLOW_COPY_AND_ASSIGN(TypeName) \ - TypeName(const TypeName&); \ - void operator=(const TypeName&) - -#endif // MKVMUXER_MKVMUXERTYPES_HPP_ diff --git a/vpx-encoder/android_libs/x86_64/include/mkvmuxer/mkvmuxerutil.h b/vpx-encoder/android_libs/x86_64/include/mkvmuxer/mkvmuxerutil.h deleted file mode 100644 index 132388da..00000000 --- a/vpx-encoder/android_libs/x86_64/include/mkvmuxer/mkvmuxerutil.h +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright (c) 2012 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -#ifndef MKVMUXER_MKVMUXERUTIL_H_ -#define MKVMUXER_MKVMUXERUTIL_H_ - -#include "mkvmuxertypes.h" - -#include "stdint.h" - -namespace mkvmuxer { -class Cluster; -class Frame; -class IMkvWriter; - -// TODO(tomfinegan): mkvmuxer:: integer types continue to be used here because -// changing them causes pain for downstream projects. It would be nice if a -// solution that allows removal of the mkvmuxer:: integer types while avoiding -// pain for downstream users of libwebm. Considering that mkvmuxerutil.{cc,h} -// are really, for the great majority of cases, EBML size calculation and writer -// functions, perhaps a more EBML focused utility would be the way to go as a -// first step. - -const uint64 kEbmlUnknownValue = 0x01FFFFFFFFFFFFFFULL; -const int64 kMaxBlockTimecode = 0x07FFFLL; - -// Writes out |value| in Big Endian order. Returns 0 on success. -int32 SerializeInt(IMkvWriter* writer, int64 value, int32 size); - -// Returns the size in bytes of the element. -int32 GetUIntSize(uint64 value); -int32 GetIntSize(int64 value); -int32 GetCodedUIntSize(uint64 value); -uint64 EbmlMasterElementSize(uint64 type, uint64 value); -uint64 EbmlElementSize(uint64 type, int64 value); -uint64 EbmlElementSize(uint64 type, uint64 value); -uint64 EbmlElementSize(uint64 type, float value); -uint64 EbmlElementSize(uint64 type, const char* value); -uint64 EbmlElementSize(uint64 type, const uint8* value, uint64 size); -uint64 EbmlDateElementSize(uint64 type); - -// Returns the size in bytes of the element assuming that the element was -// written using |fixed_size| bytes. If |fixed_size| is set to zero, then it -// computes the necessary number of bytes based on |value|. -uint64 EbmlElementSize(uint64 type, uint64 value, uint64 fixed_size); - -// Creates an EBML coded number from |value| and writes it out. The size of -// the coded number is determined by the value of |value|. |value| must not -// be in a coded form. Returns 0 on success. -int32 WriteUInt(IMkvWriter* writer, uint64 value); - -// Creates an EBML coded number from |value| and writes it out. The size of -// the coded number is determined by the value of |size|. |value| must not -// be in a coded form. Returns 0 on success. -int32 WriteUIntSize(IMkvWriter* writer, uint64 value, int32 size); - -// Output an Mkv master element. Returns true if the element was written. -bool WriteEbmlMasterElement(IMkvWriter* writer, uint64 value, uint64 size); - -// Outputs an Mkv ID, calls |IMkvWriter::ElementStartNotify|, and passes the -// ID to |SerializeInt|. Returns 0 on success. -int32 WriteID(IMkvWriter* writer, uint64 type); - -// Output an Mkv non-master element. Returns true if the element was written. -bool WriteEbmlElement(IMkvWriter* writer, uint64 type, uint64 value); -bool WriteEbmlElement(IMkvWriter* writer, uint64 type, int64 value); -bool WriteEbmlElement(IMkvWriter* writer, uint64 type, float value); -bool WriteEbmlElement(IMkvWriter* writer, uint64 type, const char* value); -bool WriteEbmlElement(IMkvWriter* writer, uint64 type, const uint8* value, - uint64 size); -bool WriteEbmlDateElement(IMkvWriter* writer, uint64 type, int64 value); - -// Output an Mkv non-master element using fixed size. The element will be -// written out using exactly |fixed_size| bytes. If |fixed_size| is set to zero -// then it computes the necessary number of bytes based on |value|. Returns true -// if the element was written. -bool WriteEbmlElement(IMkvWriter* writer, uint64 type, uint64 value, - uint64 fixed_size); - -// Output a Mkv Frame. It decides the correct element to write (Block vs -// SimpleBlock) based on the parameters of the Frame. -uint64 WriteFrame(IMkvWriter* writer, const Frame* const frame, - Cluster* cluster); - -// Output a void element. |size| must be the entire size in bytes that will be -// void. The function will calculate the size of the void header and subtract -// it from |size|. -uint64 WriteVoidElement(IMkvWriter* writer, uint64 size); - -// Returns the version number of the muxer in |major|, |minor|, |build|, -// and |revision|. -void GetVersion(int32* major, int32* minor, int32* build, int32* revision); - -// Returns a random number to be used for UID, using |seed| to seed -// the random-number generator (see POSIX rand_r() for semantics). -uint64 MakeUID(unsigned int* seed); - -// Colour field validation helpers. All return true when |value| is valid. -bool IsMatrixCoefficientsValueValid(uint64_t value); -bool IsChromaSitingHorzValueValid(uint64_t value); -bool IsChromaSitingVertValueValid(uint64_t value); -bool IsColourRangeValueValid(uint64_t value); -bool IsTransferCharacteristicsValueValid(uint64_t value); -bool IsPrimariesValueValid(uint64_t value); - -} // namespace mkvmuxer - -#endif // MKVMUXER_MKVMUXERUTIL_H_ diff --git a/vpx-encoder/android_libs/x86_64/include/mkvmuxer/mkvwriter.h b/vpx-encoder/android_libs/x86_64/include/mkvmuxer/mkvwriter.h deleted file mode 100644 index 4227c637..00000000 --- a/vpx-encoder/android_libs/x86_64/include/mkvmuxer/mkvwriter.h +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c) 2012 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. - -#ifndef MKVMUXER_MKVWRITER_H_ -#define MKVMUXER_MKVWRITER_H_ - -#include - -#include "mkvmuxer/mkvmuxer.h" -#include "mkvmuxer/mkvmuxertypes.h" - -namespace mkvmuxer { - -// Default implementation of the IMkvWriter interface on Windows. -class MkvWriter : public IMkvWriter { - public: - MkvWriter(); - explicit MkvWriter(FILE* fp); - virtual ~MkvWriter(); - - // IMkvWriter interface - virtual int64 Position() const; - virtual int32 Position(int64 position); - virtual bool Seekable() const; - virtual int32 Write(const void* buffer, uint32 length); - virtual void ElementStartNotify(uint64 element_id, int64 position); - - // Creates and opens a file for writing. |filename| is the name of the file - // to open. This function will overwrite the contents of |filename|. Returns - // true on success. - bool Open(const char* filename); - - // Closes an opened file. - void Close(); - - private: - // File handle to output file. - FILE* file_; - bool writer_owns_file_; - - LIBWEBM_DISALLOW_COPY_AND_ASSIGN(MkvWriter); -}; - -} // namespace mkvmuxer - -#endif // MKVMUXER_MKVWRITER_H_ diff --git a/vpx-encoder/android_libs/x86_64/include/mkvparser/mkvparser.h b/vpx-encoder/android_libs/x86_64/include/mkvparser/mkvparser.h deleted file mode 100644 index 848d01f0..00000000 --- a/vpx-encoder/android_libs/x86_64/include/mkvparser/mkvparser.h +++ /dev/null @@ -1,1147 +0,0 @@ -// Copyright (c) 2012 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -#ifndef MKVPARSER_MKVPARSER_H_ -#define MKVPARSER_MKVPARSER_H_ - -#include - -namespace mkvparser { - -const int E_PARSE_FAILED = -1; -const int E_FILE_FORMAT_INVALID = -2; -const int E_BUFFER_NOT_FULL = -3; - -class IMkvReader { - public: - virtual int Read(long long pos, long len, unsigned char* buf) = 0; - virtual int Length(long long* total, long long* available) = 0; - - protected: - virtual ~IMkvReader() {} -}; - -template -Type* SafeArrayAlloc(unsigned long long num_elements, - unsigned long long element_size); -long long GetUIntLength(IMkvReader*, long long, long&); -long long ReadUInt(IMkvReader*, long long, long&); -long long ReadID(IMkvReader* pReader, long long pos, long& len); -long long UnserializeUInt(IMkvReader*, long long pos, long long size); - -long UnserializeFloat(IMkvReader*, long long pos, long long size, double&); -long UnserializeInt(IMkvReader*, long long pos, long long size, - long long& result); - -long UnserializeString(IMkvReader*, long long pos, long long size, char*& str); - -long ParseElementHeader(IMkvReader* pReader, - long long& pos, // consume id and size fields - long long stop, // if you know size of element's parent - long long& id, long long& size); - -bool Match(IMkvReader*, long long&, unsigned long, long long&); -bool Match(IMkvReader*, long long&, unsigned long, unsigned char*&, size_t&); - -void GetVersion(int& major, int& minor, int& build, int& revision); - -struct EBMLHeader { - EBMLHeader(); - ~EBMLHeader(); - long long m_version; - long long m_readVersion; - long long m_maxIdLength; - long long m_maxSizeLength; - char* m_docType; - long long m_docTypeVersion; - long long m_docTypeReadVersion; - - long long Parse(IMkvReader*, long long&); - void Init(); -}; - -class Segment; -class Track; -class Cluster; - -class Block { - Block(const Block&); - Block& operator=(const Block&); - - public: - const long long m_start; - const long long m_size; - - Block(long long start, long long size, long long discard_padding); - ~Block(); - - long Parse(const Cluster*); - - long long GetTrackNumber() const; - long long GetTimeCode(const Cluster*) const; // absolute, but not scaled - long long GetTime(const Cluster*) const; // absolute, and scaled (ns) - bool IsKey() const; - void SetKey(bool); - bool IsInvisible() const; - - enum Lacing { kLacingNone, kLacingXiph, kLacingFixed, kLacingEbml }; - Lacing GetLacing() const; - - int GetFrameCount() const; // to index frames: [0, count) - - struct Frame { - long long pos; // absolute offset - long len; - - long Read(IMkvReader*, unsigned char*) const; - }; - - const Frame& GetFrame(int frame_index) const; - - long long GetDiscardPadding() const; - - private: - long long m_track; // Track::Number() - short m_timecode; // relative to cluster - unsigned char m_flags; - - Frame* m_frames; - int m_frame_count; - - protected: - const long long m_discard_padding; -}; - -class BlockEntry { - BlockEntry(const BlockEntry&); - BlockEntry& operator=(const BlockEntry&); - - protected: - BlockEntry(Cluster*, long index); - - public: - virtual ~BlockEntry(); - - bool EOS() const { return (GetKind() == kBlockEOS); } - const Cluster* GetCluster() const; - long GetIndex() const; - virtual const Block* GetBlock() const = 0; - - enum Kind { kBlockEOS, kBlockSimple, kBlockGroup }; - virtual Kind GetKind() const = 0; - - protected: - Cluster* const m_pCluster; - const long m_index; -}; - -class SimpleBlock : public BlockEntry { - SimpleBlock(const SimpleBlock&); - SimpleBlock& operator=(const SimpleBlock&); - - public: - SimpleBlock(Cluster*, long index, long long start, long long size); - long Parse(); - - Kind GetKind() const; - const Block* GetBlock() const; - - protected: - Block m_block; -}; - -class BlockGroup : public BlockEntry { - BlockGroup(const BlockGroup&); - BlockGroup& operator=(const BlockGroup&); - - public: - BlockGroup(Cluster*, long index, - long long block_start, // absolute pos of block's payload - long long block_size, // size of block's payload - long long prev, long long next, long long duration, - long long discard_padding); - - long Parse(); - - Kind GetKind() const; - const Block* GetBlock() const; - - long long GetPrevTimeCode() const; // relative to block's time - long long GetNextTimeCode() const; // as above - long long GetDurationTimeCode() const; - - private: - Block m_block; - const long long m_prev; - const long long m_next; - const long long m_duration; -}; - -/////////////////////////////////////////////////////////////// -// ContentEncoding element -// Elements used to describe if the track data has been encrypted or -// compressed with zlib or header stripping. -class ContentEncoding { - public: - enum { kCTR = 1 }; - - ContentEncoding(); - ~ContentEncoding(); - - // ContentCompression element names - struct ContentCompression { - ContentCompression(); - ~ContentCompression(); - - unsigned long long algo; - unsigned char* settings; - long long settings_len; - }; - - // ContentEncAESSettings element names - struct ContentEncAESSettings { - ContentEncAESSettings() : cipher_mode(kCTR) {} - ~ContentEncAESSettings() {} - - unsigned long long cipher_mode; - }; - - // ContentEncryption element names - struct ContentEncryption { - ContentEncryption(); - ~ContentEncryption(); - - unsigned long long algo; - unsigned char* key_id; - long long key_id_len; - unsigned char* signature; - long long signature_len; - unsigned char* sig_key_id; - long long sig_key_id_len; - unsigned long long sig_algo; - unsigned long long sig_hash_algo; - - ContentEncAESSettings aes_settings; - }; - - // Returns ContentCompression represented by |idx|. Returns NULL if |idx| - // is out of bounds. - const ContentCompression* GetCompressionByIndex(unsigned long idx) const; - - // Returns number of ContentCompression elements in this ContentEncoding - // element. - unsigned long GetCompressionCount() const; - - // Parses the ContentCompression element from |pReader|. |start| is the - // starting offset of the ContentCompression payload. |size| is the size in - // bytes of the ContentCompression payload. |compression| is where the parsed - // values will be stored. - long ParseCompressionEntry(long long start, long long size, - IMkvReader* pReader, - ContentCompression* compression); - - // Returns ContentEncryption represented by |idx|. Returns NULL if |idx| - // is out of bounds. - const ContentEncryption* GetEncryptionByIndex(unsigned long idx) const; - - // Returns number of ContentEncryption elements in this ContentEncoding - // element. - unsigned long GetEncryptionCount() const; - - // Parses the ContentEncAESSettings element from |pReader|. |start| is the - // starting offset of the ContentEncAESSettings payload. |size| is the - // size in bytes of the ContentEncAESSettings payload. |encryption| is - // where the parsed values will be stored. - long ParseContentEncAESSettingsEntry(long long start, long long size, - IMkvReader* pReader, - ContentEncAESSettings* aes); - - // Parses the ContentEncoding element from |pReader|. |start| is the - // starting offset of the ContentEncoding payload. |size| is the size in - // bytes of the ContentEncoding payload. Returns true on success. - long ParseContentEncodingEntry(long long start, long long size, - IMkvReader* pReader); - - // Parses the ContentEncryption element from |pReader|. |start| is the - // starting offset of the ContentEncryption payload. |size| is the size in - // bytes of the ContentEncryption payload. |encryption| is where the parsed - // values will be stored. - long ParseEncryptionEntry(long long start, long long size, - IMkvReader* pReader, ContentEncryption* encryption); - - unsigned long long encoding_order() const { return encoding_order_; } - unsigned long long encoding_scope() const { return encoding_scope_; } - unsigned long long encoding_type() const { return encoding_type_; } - - private: - // Member variables for list of ContentCompression elements. - ContentCompression** compression_entries_; - ContentCompression** compression_entries_end_; - - // Member variables for list of ContentEncryption elements. - ContentEncryption** encryption_entries_; - ContentEncryption** encryption_entries_end_; - - // ContentEncoding element names - unsigned long long encoding_order_; - unsigned long long encoding_scope_; - unsigned long long encoding_type_; - - // LIBWEBM_DISALLOW_COPY_AND_ASSIGN(ContentEncoding); - ContentEncoding(const ContentEncoding&); - ContentEncoding& operator=(const ContentEncoding&); -}; - -class Track { - Track(const Track&); - Track& operator=(const Track&); - - public: - class Info; - static long Create(Segment*, const Info&, long long element_start, - long long element_size, Track*&); - - enum Type { kVideo = 1, kAudio = 2, kSubtitle = 0x11, kMetadata = 0x21 }; - - Segment* const m_pSegment; - const long long m_element_start; - const long long m_element_size; - virtual ~Track(); - - long GetType() const; - long GetNumber() const; - unsigned long long GetUid() const; - const char* GetNameAsUTF8() const; - const char* GetLanguage() const; - const char* GetCodecNameAsUTF8() const; - const char* GetCodecId() const; - const unsigned char* GetCodecPrivate(size_t&) const; - bool GetLacing() const; - unsigned long long GetDefaultDuration() const; - unsigned long long GetCodecDelay() const; - unsigned long long GetSeekPreRoll() const; - - const BlockEntry* GetEOS() const; - - struct Settings { - long long start; - long long size; - }; - - class Info { - public: - Info(); - ~Info(); - int Copy(Info&) const; - void Clear(); - long type; - long number; - unsigned long long uid; - unsigned long long defaultDuration; - unsigned long long codecDelay; - unsigned long long seekPreRoll; - char* nameAsUTF8; - char* language; - char* codecId; - char* codecNameAsUTF8; - unsigned char* codecPrivate; - size_t codecPrivateSize; - bool lacing; - Settings settings; - - private: - Info(const Info&); - Info& operator=(const Info&); - int CopyStr(char* Info::*str, Info&) const; - }; - - long GetFirst(const BlockEntry*&) const; - long GetNext(const BlockEntry* pCurr, const BlockEntry*& pNext) const; - virtual bool VetEntry(const BlockEntry*) const; - virtual long Seek(long long time_ns, const BlockEntry*&) const; - - const ContentEncoding* GetContentEncodingByIndex(unsigned long idx) const; - unsigned long GetContentEncodingCount() const; - - long ParseContentEncodingsEntry(long long start, long long size); - - protected: - Track(Segment*, long long element_start, long long element_size); - - Info m_info; - - class EOSBlock : public BlockEntry { - public: - EOSBlock(); - - Kind GetKind() const; - const Block* GetBlock() const; - }; - - EOSBlock m_eos; - - private: - ContentEncoding** content_encoding_entries_; - ContentEncoding** content_encoding_entries_end_; -}; - -struct PrimaryChromaticity { - PrimaryChromaticity() : x(0), y(0) {} - ~PrimaryChromaticity() {} - static bool Parse(IMkvReader* reader, long long read_pos, - long long value_size, bool is_x, - PrimaryChromaticity** chromaticity); - float x; - float y; -}; - -struct MasteringMetadata { - static const float kValueNotPresent; - - MasteringMetadata() - : r(NULL), - g(NULL), - b(NULL), - white_point(NULL), - luminance_max(kValueNotPresent), - luminance_min(kValueNotPresent) {} - ~MasteringMetadata() { - delete r; - delete g; - delete b; - delete white_point; - } - - static bool Parse(IMkvReader* reader, long long element_start, - long long element_size, - MasteringMetadata** mastering_metadata); - - PrimaryChromaticity* r; - PrimaryChromaticity* g; - PrimaryChromaticity* b; - PrimaryChromaticity* white_point; - float luminance_max; - float luminance_min; -}; - -struct Colour { - static const long long kValueNotPresent; - - // Unless otherwise noted all values assigned upon construction are the - // equivalent of unspecified/default. - Colour() - : matrix_coefficients(kValueNotPresent), - bits_per_channel(kValueNotPresent), - chroma_subsampling_horz(kValueNotPresent), - chroma_subsampling_vert(kValueNotPresent), - cb_subsampling_horz(kValueNotPresent), - cb_subsampling_vert(kValueNotPresent), - chroma_siting_horz(kValueNotPresent), - chroma_siting_vert(kValueNotPresent), - range(kValueNotPresent), - transfer_characteristics(kValueNotPresent), - primaries(kValueNotPresent), - max_cll(kValueNotPresent), - max_fall(kValueNotPresent), - mastering_metadata(NULL) {} - ~Colour() { - delete mastering_metadata; - mastering_metadata = NULL; - } - - static bool Parse(IMkvReader* reader, long long element_start, - long long element_size, Colour** colour); - - long long matrix_coefficients; - long long bits_per_channel; - long long chroma_subsampling_horz; - long long chroma_subsampling_vert; - long long cb_subsampling_horz; - long long cb_subsampling_vert; - long long chroma_siting_horz; - long long chroma_siting_vert; - long long range; - long long transfer_characteristics; - long long primaries; - long long max_cll; - long long max_fall; - - MasteringMetadata* mastering_metadata; -}; - -struct Projection { - enum ProjectionType { - kTypeNotPresent = -1, - kRectangular = 0, - kEquirectangular = 1, - kCubeMap = 2, - kMesh = 3, - }; - static const float kValueNotPresent; - Projection() - : type(kTypeNotPresent), - private_data(NULL), - private_data_length(0), - pose_yaw(kValueNotPresent), - pose_pitch(kValueNotPresent), - pose_roll(kValueNotPresent) {} - ~Projection() { delete[] private_data; } - static bool Parse(IMkvReader* reader, long long element_start, - long long element_size, Projection** projection); - - ProjectionType type; - unsigned char* private_data; - size_t private_data_length; - float pose_yaw; - float pose_pitch; - float pose_roll; -}; - -class VideoTrack : public Track { - VideoTrack(const VideoTrack&); - VideoTrack& operator=(const VideoTrack&); - - VideoTrack(Segment*, long long element_start, long long element_size); - - public: - virtual ~VideoTrack(); - static long Parse(Segment*, const Info&, long long element_start, - long long element_size, VideoTrack*&); - - long long GetWidth() const; - long long GetHeight() const; - long long GetDisplayWidth() const; - long long GetDisplayHeight() const; - long long GetDisplayUnit() const; - long long GetStereoMode() const; - double GetFrameRate() const; - - bool VetEntry(const BlockEntry*) const; - long Seek(long long time_ns, const BlockEntry*&) const; - - Colour* GetColour() const; - - Projection* GetProjection() const; - - const char* GetColourSpace() const { return m_colour_space; } - - private: - long long m_width; - long long m_height; - long long m_display_width; - long long m_display_height; - long long m_display_unit; - long long m_stereo_mode; - char* m_colour_space; - double m_rate; - - Colour* m_colour; - Projection* m_projection; -}; - -class AudioTrack : public Track { - AudioTrack(const AudioTrack&); - AudioTrack& operator=(const AudioTrack&); - - AudioTrack(Segment*, long long element_start, long long element_size); - - public: - static long Parse(Segment*, const Info&, long long element_start, - long long element_size, AudioTrack*&); - - double GetSamplingRate() const; - long long GetChannels() const; - long long GetBitDepth() const; - - private: - double m_rate; - long long m_channels; - long long m_bitDepth; -}; - -class Tracks { - Tracks(const Tracks&); - Tracks& operator=(const Tracks&); - - public: - Segment* const m_pSegment; - const long long m_start; - const long long m_size; - const long long m_element_start; - const long long m_element_size; - - Tracks(Segment*, long long start, long long size, long long element_start, - long long element_size); - - ~Tracks(); - - long Parse(); - - unsigned long GetTracksCount() const; - - const Track* GetTrackByNumber(long tn) const; - const Track* GetTrackByIndex(unsigned long idx) const; - - private: - Track** m_trackEntries; - Track** m_trackEntriesEnd; - - long ParseTrackEntry(long long payload_start, long long payload_size, - long long element_start, long long element_size, - Track*&) const; -}; - -class Chapters { - Chapters(const Chapters&); - Chapters& operator=(const Chapters&); - - public: - Segment* const m_pSegment; - const long long m_start; - const long long m_size; - const long long m_element_start; - const long long m_element_size; - - Chapters(Segment*, long long payload_start, long long payload_size, - long long element_start, long long element_size); - - ~Chapters(); - - long Parse(); - - class Atom; - class Edition; - - class Display { - friend class Atom; - Display(); - Display(const Display&); - ~Display(); - Display& operator=(const Display&); - - public: - const char* GetString() const; - const char* GetLanguage() const; - const char* GetCountry() const; - - private: - void Init(); - void ShallowCopy(Display&) const; - void Clear(); - long Parse(IMkvReader*, long long pos, long long size); - - char* m_string; - char* m_language; - char* m_country; - }; - - class Atom { - friend class Edition; - Atom(); - Atom(const Atom&); - ~Atom(); - Atom& operator=(const Atom&); - - public: - unsigned long long GetUID() const; - const char* GetStringUID() const; - - long long GetStartTimecode() const; - long long GetStopTimecode() const; - - long long GetStartTime(const Chapters*) const; - long long GetStopTime(const Chapters*) const; - - int GetDisplayCount() const; - const Display* GetDisplay(int index) const; - - private: - void Init(); - void ShallowCopy(Atom&) const; - void Clear(); - long Parse(IMkvReader*, long long pos, long long size); - static long long GetTime(const Chapters*, long long timecode); - - long ParseDisplay(IMkvReader*, long long pos, long long size); - bool ExpandDisplaysArray(); - - char* m_string_uid; - unsigned long long m_uid; - long long m_start_timecode; - long long m_stop_timecode; - - Display* m_displays; - int m_displays_size; - int m_displays_count; - }; - - class Edition { - friend class Chapters; - Edition(); - Edition(const Edition&); - ~Edition(); - Edition& operator=(const Edition&); - - public: - int GetAtomCount() const; - const Atom* GetAtom(int index) const; - - private: - void Init(); - void ShallowCopy(Edition&) const; - void Clear(); - long Parse(IMkvReader*, long long pos, long long size); - - long ParseAtom(IMkvReader*, long long pos, long long size); - bool ExpandAtomsArray(); - - Atom* m_atoms; - int m_atoms_size; - int m_atoms_count; - }; - - int GetEditionCount() const; - const Edition* GetEdition(int index) const; - - private: - long ParseEdition(long long pos, long long size); - bool ExpandEditionsArray(); - - Edition* m_editions; - int m_editions_size; - int m_editions_count; -}; - -class Tags { - Tags(const Tags&); - Tags& operator=(const Tags&); - - public: - Segment* const m_pSegment; - const long long m_start; - const long long m_size; - const long long m_element_start; - const long long m_element_size; - - Tags(Segment*, long long payload_start, long long payload_size, - long long element_start, long long element_size); - - ~Tags(); - - long Parse(); - - class Tag; - class SimpleTag; - - class SimpleTag { - friend class Tag; - SimpleTag(); - SimpleTag(const SimpleTag&); - ~SimpleTag(); - SimpleTag& operator=(const SimpleTag&); - - public: - const char* GetTagName() const; - const char* GetTagString() const; - - private: - void Init(); - void ShallowCopy(SimpleTag&) const; - void Clear(); - long Parse(IMkvReader*, long long pos, long long size); - - char* m_tag_name; - char* m_tag_string; - }; - - class Tag { - friend class Tags; - Tag(); - Tag(const Tag&); - ~Tag(); - Tag& operator=(const Tag&); - - public: - int GetSimpleTagCount() const; - const SimpleTag* GetSimpleTag(int index) const; - - private: - void Init(); - void ShallowCopy(Tag&) const; - void Clear(); - long Parse(IMkvReader*, long long pos, long long size); - - long ParseSimpleTag(IMkvReader*, long long pos, long long size); - bool ExpandSimpleTagsArray(); - - SimpleTag* m_simple_tags; - int m_simple_tags_size; - int m_simple_tags_count; - }; - - int GetTagCount() const; - const Tag* GetTag(int index) const; - - private: - long ParseTag(long long pos, long long size); - bool ExpandTagsArray(); - - Tag* m_tags; - int m_tags_size; - int m_tags_count; -}; - -class SegmentInfo { - SegmentInfo(const SegmentInfo&); - SegmentInfo& operator=(const SegmentInfo&); - - public: - Segment* const m_pSegment; - const long long m_start; - const long long m_size; - const long long m_element_start; - const long long m_element_size; - - SegmentInfo(Segment*, long long start, long long size, - long long element_start, long long element_size); - - ~SegmentInfo(); - - long Parse(); - - long long GetTimeCodeScale() const; - long long GetDuration() const; // scaled - const char* GetMuxingAppAsUTF8() const; - const char* GetWritingAppAsUTF8() const; - const char* GetTitleAsUTF8() const; - - private: - long long m_timecodeScale; - double m_duration; - char* m_pMuxingAppAsUTF8; - char* m_pWritingAppAsUTF8; - char* m_pTitleAsUTF8; -}; - -class SeekHead { - SeekHead(const SeekHead&); - SeekHead& operator=(const SeekHead&); - - public: - Segment* const m_pSegment; - const long long m_start; - const long long m_size; - const long long m_element_start; - const long long m_element_size; - - SeekHead(Segment*, long long start, long long size, long long element_start, - long long element_size); - - ~SeekHead(); - - long Parse(); - - struct Entry { - Entry(); - - // the SeekHead entry payload - long long id; - long long pos; - - // absolute pos of SeekEntry ID - long long element_start; - - // SeekEntry ID size + size size + payload - long long element_size; - }; - - int GetCount() const; - const Entry* GetEntry(int idx) const; - - struct VoidElement { - // absolute pos of Void ID - long long element_start; - - // ID size + size size + payload size - long long element_size; - }; - - int GetVoidElementCount() const; - const VoidElement* GetVoidElement(int idx) const; - - private: - Entry* m_entries; - int m_entry_count; - - VoidElement* m_void_elements; - int m_void_element_count; - - static bool ParseEntry(IMkvReader*, - long long pos, // payload - long long size, Entry*); -}; - -class Cues; -class CuePoint { - friend class Cues; - - CuePoint(long, long long); - ~CuePoint(); - - CuePoint(const CuePoint&); - CuePoint& operator=(const CuePoint&); - - public: - long long m_element_start; - long long m_element_size; - - bool Load(IMkvReader*); - - long long GetTimeCode() const; // absolute but unscaled - long long GetTime(const Segment*) const; // absolute and scaled (ns units) - - struct TrackPosition { - long long m_track; - long long m_pos; // of cluster - long long m_block; - // codec_state //defaults to 0 - // reference = clusters containing req'd referenced blocks - // reftime = timecode of the referenced block - - bool Parse(IMkvReader*, long long, long long); - }; - - const TrackPosition* Find(const Track*) const; - - private: - const long m_index; - long long m_timecode; - TrackPosition* m_track_positions; - size_t m_track_positions_count; -}; - -class Cues { - friend class Segment; - - Cues(Segment*, long long start, long long size, long long element_start, - long long element_size); - ~Cues(); - - Cues(const Cues&); - Cues& operator=(const Cues&); - - public: - Segment* const m_pSegment; - const long long m_start; - const long long m_size; - const long long m_element_start; - const long long m_element_size; - - bool Find( // lower bound of time_ns - long long time_ns, const Track*, const CuePoint*&, - const CuePoint::TrackPosition*&) const; - - const CuePoint* GetFirst() const; - const CuePoint* GetLast() const; - const CuePoint* GetNext(const CuePoint*) const; - - const BlockEntry* GetBlock(const CuePoint*, - const CuePoint::TrackPosition*) const; - - bool LoadCuePoint() const; - long GetCount() const; // loaded only - // long GetTotal() const; //loaded + preloaded - bool DoneParsing() const; - - private: - bool Init() const; - bool PreloadCuePoint(long&, long long) const; - - mutable CuePoint** m_cue_points; - mutable long m_count; - mutable long m_preload_count; - mutable long long m_pos; -}; - -class Cluster { - friend class Segment; - - Cluster(const Cluster&); - Cluster& operator=(const Cluster&); - - public: - Segment* const m_pSegment; - - public: - static Cluster* Create(Segment*, - long index, // index in segment - long long off); // offset relative to segment - // long long element_size); - - Cluster(); // EndOfStream - ~Cluster(); - - bool EOS() const; - - long long GetTimeCode() const; // absolute, but not scaled - long long GetTime() const; // absolute, and scaled (nanosecond units) - long long GetFirstTime() const; // time (ns) of first (earliest) block - long long GetLastTime() const; // time (ns) of last (latest) block - - long GetFirst(const BlockEntry*&) const; - long GetLast(const BlockEntry*&) const; - long GetNext(const BlockEntry* curr, const BlockEntry*& next) const; - - const BlockEntry* GetEntry(const Track*, long long ns = -1) const; - const BlockEntry* GetEntry(const CuePoint&, - const CuePoint::TrackPosition&) const; - // const BlockEntry* GetMaxKey(const VideoTrack*) const; - - // static bool HasBlockEntries(const Segment*, long long); - - static long HasBlockEntries(const Segment*, long long idoff, long long& pos, - long& size); - - long GetEntryCount() const; - - long Load(long long& pos, long& size) const; - - long Parse(long long& pos, long& size) const; - long GetEntry(long index, const mkvparser::BlockEntry*&) const; - - protected: - Cluster(Segment*, long index, long long element_start); - // long long element_size); - - public: - const long long m_element_start; - long long GetPosition() const; // offset relative to segment - - long GetIndex() const; - long long GetElementSize() const; - // long long GetPayloadSize() const; - - // long long Unparsed() const; - - private: - long m_index; - mutable long long m_pos; - // mutable long long m_size; - mutable long long m_element_size; - mutable long long m_timecode; - mutable BlockEntry** m_entries; - mutable long m_entries_size; - mutable long m_entries_count; - - long ParseSimpleBlock(long long, long long&, long&); - long ParseBlockGroup(long long, long long&, long&); - - long CreateBlock(long long id, long long pos, long long size, - long long discard_padding); - long CreateBlockGroup(long long start_offset, long long size, - long long discard_padding); - long CreateSimpleBlock(long long, long long); -}; - -class Segment { - friend class Cues; - friend class Track; - friend class VideoTrack; - - Segment(const Segment&); - Segment& operator=(const Segment&); - - private: - Segment(IMkvReader*, long long elem_start, - // long long elem_size, - long long pos, long long size); - - public: - IMkvReader* const m_pReader; - const long long m_element_start; - // const long long m_element_size; - const long long m_start; // posn of segment payload - const long long m_size; // size of segment payload - Cluster m_eos; // TODO: make private? - - static long long CreateInstance(IMkvReader*, long long, Segment*&); - ~Segment(); - - long Load(); // loads headers and all clusters - - // for incremental loading - // long long Unparsed() const; - bool DoneParsing() const; - long long ParseHeaders(); // stops when first cluster is found - // long FindNextCluster(long long& pos, long& size) const; - long LoadCluster(long long& pos, long& size); // load one cluster - long LoadCluster(); - - long ParseNext(const Cluster* pCurr, const Cluster*& pNext, long long& pos, - long& size); - - const SeekHead* GetSeekHead() const; - const Tracks* GetTracks() const; - const SegmentInfo* GetInfo() const; - const Cues* GetCues() const; - const Chapters* GetChapters() const; - const Tags* GetTags() const; - - long long GetDuration() const; - - unsigned long GetCount() const; - const Cluster* GetFirst() const; - const Cluster* GetLast() const; - const Cluster* GetNext(const Cluster*); - - const Cluster* FindCluster(long long time_nanoseconds) const; - // const BlockEntry* Seek(long long time_nanoseconds, const Track*) const; - - const Cluster* FindOrPreloadCluster(long long pos); - - long ParseCues(long long cues_off, // offset relative to start of segment - long long& parse_pos, long& parse_len); - - private: - long long m_pos; // absolute file posn; what has been consumed so far - Cluster* m_pUnknownSize; - - SeekHead* m_pSeekHead; - SegmentInfo* m_pInfo; - Tracks* m_pTracks; - Cues* m_pCues; - Chapters* m_pChapters; - Tags* m_pTags; - Cluster** m_clusters; - long m_clusterCount; // number of entries for which m_index >= 0 - long m_clusterPreloadCount; // number of entries for which m_index < 0 - long m_clusterSize; // array size - - long DoLoadCluster(long long&, long&); - long DoLoadClusterUnknownSize(long long&, long&); - long DoParseNext(const Cluster*&, long long&, long&); - - bool AppendCluster(Cluster*); - bool PreloadCluster(Cluster*, ptrdiff_t); - - // void ParseSeekHead(long long pos, long long size); - // void ParseSeekEntry(long long pos, long long size); - // void ParseCues(long long); - - const BlockEntry* GetBlock(const CuePoint&, const CuePoint::TrackPosition&); -}; - -} // namespace mkvparser - -inline long mkvparser::Segment::LoadCluster() { - long long pos; - long size; - - return LoadCluster(pos, size); -} - -#endif // MKVPARSER_MKVPARSER_H_ diff --git a/vpx-encoder/android_libs/x86_64/include/mkvparser/mkvreader.h b/vpx-encoder/android_libs/x86_64/include/mkvparser/mkvreader.h deleted file mode 100644 index 9831ecf6..00000000 --- a/vpx-encoder/android_libs/x86_64/include/mkvparser/mkvreader.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) 2010 The WebM project authors. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -#ifndef MKVPARSER_MKVREADER_H_ -#define MKVPARSER_MKVREADER_H_ - -#include - -#include "mkvparser/mkvparser.h" - -namespace mkvparser { - -class MkvReader : public IMkvReader { - public: - MkvReader(); - explicit MkvReader(FILE* fp); - virtual ~MkvReader(); - - int Open(const char*); - void Close(); - - virtual int Read(long long position, long length, unsigned char* buffer); - virtual int Length(long long* total, long long* available); - - private: - MkvReader(const MkvReader&); - MkvReader& operator=(const MkvReader&); - - // Determines the size of the file. This is called either by the constructor - // or by the Open function depending on file ownership. Returns true on - // success. - bool GetFileSize(); - - long long m_length; - FILE* m_file; - bool reader_owns_file_; -}; - -} // namespace mkvparser - -#endif // MKVPARSER_MKVREADER_H_ diff --git a/vpx-encoder/android_libs/x86_64/include/vpx/vp8.h b/vpx-encoder/android_libs/x86_64/include/vpx/vp8.h deleted file mode 100644 index f30dafed..00000000 --- a/vpx-encoder/android_libs/x86_64/include/vpx/vp8.h +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -/*!\defgroup vp8 VP8 - * \ingroup codecs - * VP8 is a video compression algorithm that uses motion - * compensated prediction, Discrete Cosine Transform (DCT) coding of the - * prediction error signal and context dependent entropy coding techniques - * based on arithmetic principles. It features: - * - YUV 4:2:0 image format - * - Macro-block based coding (16x16 luma plus two 8x8 chroma) - * - 1/4 (1/8) pixel accuracy motion compensated prediction - * - 4x4 DCT transform - * - 128 level linear quantizer - * - In loop deblocking filter - * - Context-based entropy coding - * - * @{ - */ -/*!\file - * \brief Provides controls common to both the VP8 encoder and decoder. - */ -#ifndef VPX_VPX_VP8_H_ -#define VPX_VPX_VP8_H_ - -#include "./vpx_codec.h" -#include "./vpx_image.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/*!\brief Control functions - * - * The set of macros define the control functions of VP8 interface - */ -enum vp8_com_control_id { - /*!\brief pass in an external frame into decoder to be used as reference frame - */ - VP8_SET_REFERENCE = 1, - VP8_COPY_REFERENCE = 2, /**< get a copy of reference frame from the decoder */ - VP8_SET_POSTPROC = 3, /**< set the decoder's post processing settings */ - - /* TODO(jkoleszar): The encoder incorrectly reuses some of these values (5+) - * for its control ids. These should be migrated to something like the - * VP8_DECODER_CTRL_ID_START range next time we're ready to break the ABI. - */ - VP9_GET_REFERENCE = 128, /**< get a pointer to a reference frame */ - VP8_COMMON_CTRL_ID_MAX, - VP8_DECODER_CTRL_ID_START = 256 -}; - -/*!\brief post process flags - * - * The set of macros define VP8 decoder post processing flags - */ -enum vp8_postproc_level { - VP8_NOFILTERING = 0, - VP8_DEBLOCK = 1 << 0, - VP8_DEMACROBLOCK = 1 << 1, - VP8_ADDNOISE = 1 << 2, - VP8_MFQE = 1 << 3 -}; - -/*!\brief post process flags - * - * This define a structure that describe the post processing settings. For - * the best objective measure (using the PSNR metric) set post_proc_flag - * to VP8_DEBLOCK and deblocking_level to 1. - */ - -typedef struct vp8_postproc_cfg { - /*!\brief the types of post processing to be done, should be combination of - * "vp8_postproc_level" */ - int post_proc_flag; - int deblocking_level; /**< the strength of deblocking, valid range [0, 16] */ - int noise_level; /**< the strength of additive noise, valid range [0, 16] */ -} vp8_postproc_cfg_t; - -/*!\brief reference frame type - * - * The set of macros define the type of VP8 reference frames - */ -typedef enum vpx_ref_frame_type { - VP8_LAST_FRAME = 1, - VP8_GOLD_FRAME = 2, - VP8_ALTR_FRAME = 4 -} vpx_ref_frame_type_t; - -/*!\brief reference frame data struct - * - * Define the data struct to access vp8 reference frames. - */ -typedef struct vpx_ref_frame { - vpx_ref_frame_type_t frame_type; /**< which reference frame */ - vpx_image_t img; /**< reference frame data in image format */ -} vpx_ref_frame_t; - -/*!\brief VP9 specific reference frame data struct - * - * Define the data struct to access vp9 reference frames. - */ -typedef struct vp9_ref_frame { - int idx; /**< frame index to get (input) */ - vpx_image_t img; /**< img structure to populate (output) */ -} vp9_ref_frame_t; - -/*!\cond */ -/*!\brief vp8 decoder control function parameter type - * - * defines the data type for each of VP8 decoder control function requires - */ -VPX_CTRL_USE_TYPE(VP8_SET_REFERENCE, vpx_ref_frame_t *) -#define VPX_CTRL_VP8_SET_REFERENCE -VPX_CTRL_USE_TYPE(VP8_COPY_REFERENCE, vpx_ref_frame_t *) -#define VPX_CTRL_VP8_COPY_REFERENCE -VPX_CTRL_USE_TYPE(VP8_SET_POSTPROC, vp8_postproc_cfg_t *) -#define VPX_CTRL_VP8_SET_POSTPROC -VPX_CTRL_USE_TYPE(VP9_GET_REFERENCE, vp9_ref_frame_t *) -#define VPX_CTRL_VP9_GET_REFERENCE - -/*!\endcond */ -/*! @} - end defgroup vp8 */ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // VPX_VPX_VP8_H_ diff --git a/vpx-encoder/android_libs/x86_64/include/vpx/vp8cx.h b/vpx-encoder/android_libs/x86_64/include/vpx/vp8cx.h deleted file mode 100644 index b2d57dce..00000000 --- a/vpx-encoder/android_libs/x86_64/include/vpx/vp8cx.h +++ /dev/null @@ -1,1027 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ -#ifndef VPX_VPX_VP8CX_H_ -#define VPX_VPX_VP8CX_H_ - -/*!\defgroup vp8_encoder WebM VP8/VP9 Encoder - * \ingroup vp8 - * - * @{ - */ -#include "./vp8.h" -#include "./vpx_encoder.h" - -/*!\file - * \brief Provides definitions for using VP8 or VP9 encoder algorithm within the - * vpx Codec Interface. - */ - -#ifdef __cplusplus -extern "C" { -#endif - -/*!\name Algorithm interface for VP8 - * - * This interface provides the capability to encode raw VP8 streams. - * @{ - */ -extern vpx_codec_iface_t vpx_codec_vp8_cx_algo; -extern vpx_codec_iface_t *vpx_codec_vp8_cx(void); -/*!@} - end algorithm interface member group*/ - -/*!\name Algorithm interface for VP9 - * - * This interface provides the capability to encode raw VP9 streams. - * @{ - */ -extern vpx_codec_iface_t vpx_codec_vp9_cx_algo; -extern vpx_codec_iface_t *vpx_codec_vp9_cx(void); -/*!@} - end algorithm interface member group*/ - -/* - * Algorithm Flags - */ - -/*!\brief Don't reference the last frame - * - * When this flag is set, the encoder will not use the last frame as a - * predictor. When not set, the encoder will choose whether to use the - * last frame or not automatically. - */ -#define VP8_EFLAG_NO_REF_LAST (1 << 16) - -/*!\brief Don't reference the golden frame - * - * When this flag is set, the encoder will not use the golden frame as a - * predictor. When not set, the encoder will choose whether to use the - * golden frame or not automatically. - */ -#define VP8_EFLAG_NO_REF_GF (1 << 17) - -/*!\brief Don't reference the alternate reference frame - * - * When this flag is set, the encoder will not use the alt ref frame as a - * predictor. When not set, the encoder will choose whether to use the - * alt ref frame or not automatically. - */ -#define VP8_EFLAG_NO_REF_ARF (1 << 21) - -/*!\brief Don't update the last frame - * - * When this flag is set, the encoder will not update the last frame with - * the contents of the current frame. - */ -#define VP8_EFLAG_NO_UPD_LAST (1 << 18) - -/*!\brief Don't update the golden frame - * - * When this flag is set, the encoder will not update the golden frame with - * the contents of the current frame. - */ -#define VP8_EFLAG_NO_UPD_GF (1 << 22) - -/*!\brief Don't update the alternate reference frame - * - * When this flag is set, the encoder will not update the alt ref frame with - * the contents of the current frame. - */ -#define VP8_EFLAG_NO_UPD_ARF (1 << 23) - -/*!\brief Force golden frame update - * - * When this flag is set, the encoder copy the contents of the current frame - * to the golden frame buffer. - */ -#define VP8_EFLAG_FORCE_GF (1 << 19) - -/*!\brief Force alternate reference frame update - * - * When this flag is set, the encoder copy the contents of the current frame - * to the alternate reference frame buffer. - */ -#define VP8_EFLAG_FORCE_ARF (1 << 24) - -/*!\brief Disable entropy update - * - * When this flag is set, the encoder will not update its internal entropy - * model based on the entropy of this frame. - */ -#define VP8_EFLAG_NO_UPD_ENTROPY (1 << 20) - -/*!\brief VPx encoder control functions - * - * This set of macros define the control functions available for VPx - * encoder interface. - * - * \sa #vpx_codec_control - */ -enum vp8e_enc_control_id { - /*!\brief Codec control function to pass an ROI map to encoder. - * - * Supported in codecs: VP8 - */ - VP8E_SET_ROI_MAP = 8, - - /*!\brief Codec control function to pass an Active map to encoder. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_ACTIVEMAP, - - /*!\brief Codec control function to set encoder scaling mode. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_SCALEMODE = 11, - - /*!\brief Codec control function to set encoder internal speed settings. - * - * Changes in this value influences, among others, the encoder's selection - * of motion estimation methods. Values greater than 0 will increase encoder - * speed at the expense of quality. - * - * \note Valid range for VP8: -16..16 - * \note Valid range for VP9: -8..8 - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_CPUUSED = 13, - - /*!\brief Codec control function to enable automatic use of arf frames. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_ENABLEAUTOALTREF, - - /*!\brief control function to set noise sensitivity - * - * 0: off, 1: OnYOnly, 2: OnYUV, - * 3: OnYUVAggressive, 4: Adaptive - * - * Supported in codecs: VP8 - */ - VP8E_SET_NOISE_SENSITIVITY, - - /*!\brief Codec control function to set higher sharpness at the expense - * of a lower PSNR. - * - * \note Valid range: 0..7 - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_SHARPNESS, - - /*!\brief Codec control function to set the threshold for MBs treated static. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_STATIC_THRESHOLD, - - /*!\brief Codec control function to set the number of token partitions. - * - * Supported in codecs: VP8 - */ - VP8E_SET_TOKEN_PARTITIONS, - - /*!\brief Codec control function to get last quantizer chosen by the encoder. - * - * Return value uses internal quantizer scale defined by the codec. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_GET_LAST_QUANTIZER, - - /*!\brief Codec control function to get last quantizer chosen by the encoder. - * - * Return value uses the 0..63 scale as used by the rc_*_quantizer config - * parameters. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_GET_LAST_QUANTIZER_64, - - /*!\brief Codec control function to set the max no of frames to create arf. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_ARNR_MAXFRAMES, - - /*!\brief Codec control function to set the filter strength for the arf. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_ARNR_STRENGTH, - - /*!\deprecated control function to set the filter type to use for the arf. */ - VP8E_SET_ARNR_TYPE, - - /*!\brief Codec control function to set visual tuning. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_TUNING, - - /*!\brief Codec control function to set constrained quality level. - * - * \attention For this value to be used vpx_codec_enc_cfg_t::rc_end_usage must - * be set to #VPX_CQ - * \note Valid range: 0..63 - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_CQ_LEVEL, - - /*!\brief Codec control function to set Max data rate for Intra frames. - * - * This value controls additional clamping on the maximum size of a - * keyframe. It is expressed as a percentage of the average - * per-frame bitrate, with the special (and default) value 0 meaning - * unlimited, or no additional clamping beyond the codec's built-in - * algorithm. - * - * For example, to allocate no more than 4.5 frames worth of bitrate - * to a keyframe, set this to 450. - * - * Supported in codecs: VP8, VP9 - */ - VP8E_SET_MAX_INTRA_BITRATE_PCT, - - /*!\brief Codec control function to set reference and update frame flags. - * - * Supported in codecs: VP8 - */ - VP8E_SET_FRAME_FLAGS, - - /*!\brief Codec control function to set max data rate for Inter frames. - * - * This value controls additional clamping on the maximum size of an - * inter frame. It is expressed as a percentage of the average - * per-frame bitrate, with the special (and default) value 0 meaning - * unlimited, or no additional clamping beyond the codec's built-in - * algorithm. - * - * For example, to allow no more than 4.5 frames worth of bitrate - * to an inter frame, set this to 450. - * - * Supported in codecs: VP9 - */ - VP9E_SET_MAX_INTER_BITRATE_PCT, - - /*!\brief Boost percentage for Golden Frame in CBR mode. - * - * This value controls the amount of boost given to Golden Frame in - * CBR mode. It is expressed as a percentage of the average - * per-frame bitrate, with the special (and default) value 0 meaning - * the feature is off, i.e., no golden frame boost in CBR mode and - * average bitrate target is used. - * - * For example, to allow 100% more bits, i.e, 2X, in a golden frame - * than average frame, set this to 100. - * - * Supported in codecs: VP9 - */ - VP9E_SET_GF_CBR_BOOST_PCT, - - /*!\brief Codec control function to set the temporal layer id. - * - * For temporal scalability: this control allows the application to set the - * layer id for each frame to be encoded. Note that this control must be set - * for every frame prior to encoding. The usage of this control function - * supersedes the internal temporal pattern counter, which is now deprecated. - * - * Supported in codecs: VP8 - */ - VP8E_SET_TEMPORAL_LAYER_ID, - - /*!\brief Codec control function to set encoder screen content mode. - * - * 0: off, 1: On, 2: On with more aggressive rate control. - * - * Supported in codecs: VP8 - */ - VP8E_SET_SCREEN_CONTENT_MODE, - - /*!\brief Codec control function to set lossless encoding mode. - * - * VP9 can operate in lossless encoding mode, in which the bitstream - * produced will be able to decode and reconstruct a perfect copy of - * input source. This control function provides a mean to switch encoder - * into lossless coding mode(1) or normal coding mode(0) that may be lossy. - * 0 = lossy coding mode - * 1 = lossless coding mode - * - * By default, encoder operates in normal coding mode (maybe lossy). - * - * Supported in codecs: VP9 - */ - VP9E_SET_LOSSLESS, - - /*!\brief Codec control function to set number of tile columns. - * - * In encoding and decoding, VP9 allows an input image frame be partitioned - * into separated vertical tile columns, which can be encoded or decoded - * independently. This enables easy implementation of parallel encoding and - * decoding. This control requests the encoder to use column tiles in - * encoding an input frame, with number of tile columns (in Log2 unit) as - * the parameter: - * 0 = 1 tile column - * 1 = 2 tile columns - * 2 = 4 tile columns - * ..... - * n = 2**n tile columns - * The requested tile columns will be capped by the encoder based on image - * size limitations (The minimum width of a tile column is 256 pixels, the - * maximum is 4096). - * - * By default, the value is 6, i.e., the maximum number of tiles supported by - * the resolution. - * - * Supported in codecs: VP9 - */ - VP9E_SET_TILE_COLUMNS, - - /*!\brief Codec control function to set number of tile rows. - * - * In encoding and decoding, VP9 allows an input image frame be partitioned - * into separated horizontal tile rows. Tile rows are encoded or decoded - * sequentially. Even though encoding/decoding of later tile rows depends on - * earlier ones, this allows the encoder to output data packets for tile rows - * prior to completely processing all tile rows in a frame, thereby reducing - * the latency in processing between input and output. The parameter - * for this control describes the number of tile rows, which has a valid - * range [0, 2]: - * 0 = 1 tile row - * 1 = 2 tile rows - * 2 = 4 tile rows - * - * By default, the value is 0, i.e. one single row tile for entire image. - * - * Supported in codecs: VP9 - */ - VP9E_SET_TILE_ROWS, - - /*!\brief Codec control function to enable frame parallel decoding feature. - * - * VP9 has a bitstream feature to reduce decoding dependency between frames - * by turning off backward update of probability context used in encoding - * and decoding. This allows staged parallel processing of more than one - * video frame in the decoder. This control function provides a means to - * turn this feature on or off for bitstreams produced by encoder. - * - * By default, this feature is on. - * - * Supported in codecs: VP9 - */ - VP9E_SET_FRAME_PARALLEL_DECODING, - - /*!\brief Codec control function to set adaptive quantization mode. - * - * VP9 has a segment based feature that allows encoder to adaptively change - * quantization parameter for each segment within a frame to improve the - * subjective quality. This control makes encoder operate in one of the - * several AQ_modes supported. - * - * By default, encoder operates with AQ_Mode 0(adaptive quantization off). - * - * Supported in codecs: VP9 - */ - VP9E_SET_AQ_MODE, - - /*!\brief Codec control function to enable/disable periodic Q boost. - * - * One VP9 encoder speed feature is to enable quality boost by lowering - * frame level Q periodically. This control function provides a mean to - * turn on/off this feature. - * 0 = off - * 1 = on - * - * By default, the encoder is allowed to use this feature for appropriate - * encoding modes. - * - * Supported in codecs: VP9 - */ - VP9E_SET_FRAME_PERIODIC_BOOST, - - /*!\brief Codec control function to set noise sensitivity. - * - * 0: off, 1: On(YOnly), 2: For SVC only, on top two spatial layers(YOnly) - * - * Supported in codecs: VP9 - */ - VP9E_SET_NOISE_SENSITIVITY, - - /*!\brief Codec control function to turn on/off SVC in encoder. - * \note Return value is VPX_CODEC_INVALID_PARAM if the encoder does not - * support SVC in its current encoding mode - * 0: off, 1: on - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC, - - /*!\brief Codec control function to pass an ROI map to encoder. - * - * Supported in codecs: VP9 - */ - VP9E_SET_ROI_MAP, - - /*!\brief Codec control function to set parameters for SVC. - * \note Parameters contain min_q, max_q, scaling factor for each of the - * SVC layers. - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_PARAMETERS, - - /*!\brief Codec control function to set svc layer for spatial and temporal. - * \note Valid ranges: 0..#vpx_codec_enc_cfg::ss_number_layers for spatial - * layer and 0..#vpx_codec_enc_cfg::ts_number_layers for - * temporal layer. - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_LAYER_ID, - - /*!\brief Codec control function to set content type. - * \note Valid parameter range: - * VP9E_CONTENT_DEFAULT = Regular video content (Default) - * VP9E_CONTENT_SCREEN = Screen capture content - * VP9E_CONTENT_FILM = Film content: improves grain retention - * - * Supported in codecs: VP9 - */ - VP9E_SET_TUNE_CONTENT, - - /*!\brief Codec control function to get svc layer ID. - * \note The layer ID returned is for the data packet from the registered - * callback function. - * - * Supported in codecs: VP9 - */ - VP9E_GET_SVC_LAYER_ID, - - /*!\brief Codec control function to register callback to get per layer packet. - * \note Parameter for this control function is a structure with a callback - * function and a pointer to private data used by the callback. - * - * Supported in codecs: VP9 - */ - VP9E_REGISTER_CX_CALLBACK, - - /*!\brief Codec control function to set color space info. - * \note Valid ranges: 0..7, default is "UNKNOWN". - * 0 = UNKNOWN, - * 1 = BT_601 - * 2 = BT_709 - * 3 = SMPTE_170 - * 4 = SMPTE_240 - * 5 = BT_2020 - * 6 = RESERVED - * 7 = SRGB - * - * Supported in codecs: VP9 - */ - VP9E_SET_COLOR_SPACE, - - /*!\brief Codec control function to set temporal layering mode. - * \note Valid ranges: 0..3, default is "0" - * (VP9E_TEMPORAL_LAYERING_MODE_NOLAYERING). - * 0 = VP9E_TEMPORAL_LAYERING_MODE_NOLAYERING - * 1 = VP9E_TEMPORAL_LAYERING_MODE_BYPASS - * 2 = VP9E_TEMPORAL_LAYERING_MODE_0101 - * 3 = VP9E_TEMPORAL_LAYERING_MODE_0212 - * - * Supported in codecs: VP9 - */ - VP9E_SET_TEMPORAL_LAYERING_MODE, - - /*!\brief Codec control function to set minimum interval between GF/ARF frames - * - * By default the value is set as 4. - * - * Supported in codecs: VP9 - */ - VP9E_SET_MIN_GF_INTERVAL, - - /*!\brief Codec control function to set minimum interval between GF/ARF frames - * - * By default the value is set as 16. - * - * Supported in codecs: VP9 - */ - VP9E_SET_MAX_GF_INTERVAL, - - /*!\brief Codec control function to get an Active map back from the encoder. - * - * Supported in codecs: VP9 - */ - VP9E_GET_ACTIVEMAP, - - /*!\brief Codec control function to set color range bit. - * \note Valid ranges: 0..1, default is 0 - * 0 = Limited range (16..235 or HBD equivalent) - * 1 = Full range (0..255 or HBD equivalent) - * - * Supported in codecs: VP9 - */ - VP9E_SET_COLOR_RANGE, - - /*!\brief Codec control function to set the frame flags and buffer indices - * for spatial layers. The frame flags and buffer indices are set using the - * struct #vpx_svc_ref_frame_config defined below. - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_REF_FRAME_CONFIG, - - /*!\brief Codec control function to set intended rendering image size. - * - * By default, this is identical to the image size in pixels. - * - * Supported in codecs: VP9 - */ - VP9E_SET_RENDER_SIZE, - - /*!\brief Codec control function to set target level. - * - * 255: off (default); 0: only keep level stats; 10: target for level 1.0; - * 11: target for level 1.1; ... 62: target for level 6.2 - * - * Supported in codecs: VP9 - */ - VP9E_SET_TARGET_LEVEL, - - /*!\brief Codec control function to set row level multi-threading. - * - * 0 : off, 1 : on - * - * Supported in codecs: VP9 - */ - VP9E_SET_ROW_MT, - - /*!\brief Codec control function to get bitstream level. - * - * Supported in codecs: VP9 - */ - VP9E_GET_LEVEL, - - /*!\brief Codec control function to enable/disable special mode for altref - * adaptive quantization. You can use it with --aq-mode concurrently. - * - * Enable special adaptive quantization for altref frames based on their - * expected prediction quality for the future frames. - * - * Supported in codecs: VP9 - */ - VP9E_SET_ALT_REF_AQ, - - /*!\brief Boost percentage for Golden Frame in CBR mode. - * - * This value controls the amount of boost given to Golden Frame in - * CBR mode. It is expressed as a percentage of the average - * per-frame bitrate, with the special (and default) value 0 meaning - * the feature is off, i.e., no golden frame boost in CBR mode and - * average bitrate target is used. - * - * For example, to allow 100% more bits, i.e, 2X, in a golden frame - * than average frame, set this to 100. - * - * Supported in codecs: VP8 - */ - VP8E_SET_GF_CBR_BOOST_PCT, - - /*!\brief Codec control function to enable the extreme motion vector unit test - * in VP9. Please note that this is only used in motion vector unit test. - * - * 0 : off, 1 : MAX_EXTREME_MV, 2 : MIN_EXTREME_MV - * - * Supported in codecs: VP9 - */ - VP9E_ENABLE_MOTION_VECTOR_UNIT_TEST, - - /*!\brief Codec control function to constrain the inter-layer prediction - * (prediction of lower spatial resolution) in VP9 SVC. - * - * 0 : inter-layer prediction on, 1 : off, 2 : off only on non-key frames - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_INTER_LAYER_PRED, - - /*!\brief Codec control function to set mode and thresholds for frame - * dropping in SVC. Drop frame thresholds are set per-layer. Mode is set as: - * 0 : layer-dependent dropping, 1 : constrained dropping, current layer drop - * forces drop on all upper layers. Default mode is 0. - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_FRAME_DROP_LAYER, - - /*!\brief Codec control function to get the refresh and reference flags and - * the buffer indices, up to the last encoded spatial layer. - * - * Supported in codecs: VP9 - */ - VP9E_GET_SVC_REF_FRAME_CONFIG, - - /*!\brief Codec control function to enable/disable use of golden reference as - * a second temporal reference for SVC. Only used when inter-layer prediction - * is disabled on INTER frames. - * - * 0: Off, 1: Enabled (default) - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_GF_TEMPORAL_REF, - - /*!\brief Codec control function to enable spatial layer sync frame, for any - * spatial layer. Enabling it for layer k means spatial layer k will disable - * all temporal prediction, but keep the inter-layer prediction. It will - * refresh any temporal reference buffer for that layer, and reset the - * temporal layer for the superframe to 0. Setting the layer sync for base - * spatial layer forces a key frame. Default is off (0) for all spatial - * layers. Spatial layer sync flag is reset to 0 after each encoded layer, - * so when control is invoked it is only used for the current superframe. - * - * 0: Off (default), 1: Enabled - * - * Supported in codecs: VP9 - */ - VP9E_SET_SVC_SPATIAL_LAYER_SYNC, - - /*!\brief Codec control function to enable temporal dependency model. - * - * Vp9 allows the encoder to run temporal dependency model and use it to - * improve the compression performance. To enable, set this parameter to be - * 1. The default value is set to be 1. - */ - VP9E_SET_TPL, - - /*!\brief Codec control function to enable postencode frame drop. - * - * This will allow encoder to drop frame after it's encoded. - * - * 0: Off (default), 1: Enabled - * - * Supported in codecs: VP9 - */ - VP9E_SET_POSTENCODE_DROP, -}; - -/*!\brief vpx 1-D scaling mode - * - * This set of constants define 1-D vpx scaling modes - */ -typedef enum vpx_scaling_mode_1d { - VP8E_NORMAL = 0, - VP8E_FOURFIVE = 1, - VP8E_THREEFIVE = 2, - VP8E_ONETWO = 3 -} VPX_SCALING_MODE; - -/*!\brief Temporal layering mode enum for VP9 SVC. - * - * This set of macros define the different temporal layering modes. - * Supported codecs: VP9 (in SVC mode) - * - */ -typedef enum vp9e_temporal_layering_mode { - /*!\brief No temporal layering. - * Used when only spatial layering is used. - */ - VP9E_TEMPORAL_LAYERING_MODE_NOLAYERING = 0, - - /*!\brief Bypass mode. - * Used when application needs to control temporal layering. - * This will only work when the number of spatial layers equals 1. - */ - VP9E_TEMPORAL_LAYERING_MODE_BYPASS = 1, - - /*!\brief 0-1-0-1... temporal layering scheme with two temporal layers. - */ - VP9E_TEMPORAL_LAYERING_MODE_0101 = 2, - - /*!\brief 0-2-1-2... temporal layering scheme with three temporal layers. - */ - VP9E_TEMPORAL_LAYERING_MODE_0212 = 3 -} VP9E_TEMPORAL_LAYERING_MODE; - -/*!\brief vpx region of interest map - * - * These defines the data structures for the region of interest map - * - */ - -typedef struct vpx_roi_map { - /*! If ROI is enabled. */ - uint8_t enabled; - /*! An id between 0-3 (0-7 for vp9) for each 16x16 (8x8 for VP9) - * region within a frame. */ - unsigned char *roi_map; - unsigned int rows; /**< Number of rows. */ - unsigned int cols; /**< Number of columns. */ - /*! VP8 only uses the first 4 segments. VP9 uses 8 segments. */ - int delta_q[8]; /**< Quantizer deltas. */ - int delta_lf[8]; /**< Loop filter deltas. */ - /*! skip and ref frame segment is only used in VP9. */ - int skip[8]; /**< Skip this block. */ - int ref_frame[8]; /**< Reference frame for this block. */ - /*! Static breakout threshold for each segment. Only used in VP8. */ - unsigned int static_threshold[4]; -} vpx_roi_map_t; - -/*!\brief vpx active region map - * - * These defines the data structures for active region map - * - */ - -typedef struct vpx_active_map { - /*!\brief specify an on (1) or off (0) each 16x16 region within a frame */ - unsigned char *active_map; - unsigned int rows; /**< number of rows */ - unsigned int cols; /**< number of cols */ -} vpx_active_map_t; - -/*!\brief vpx image scaling mode - * - * This defines the data structure for image scaling mode - * - */ -typedef struct vpx_scaling_mode { - VPX_SCALING_MODE h_scaling_mode; /**< horizontal scaling mode */ - VPX_SCALING_MODE v_scaling_mode; /**< vertical scaling mode */ -} vpx_scaling_mode_t; - -/*!\brief VP8 token partition mode - * - * This defines VP8 partitioning mode for compressed data, i.e., the number of - * sub-streams in the bitstream. Used for parallelized decoding. - * - */ - -typedef enum { - VP8_ONE_TOKENPARTITION = 0, - VP8_TWO_TOKENPARTITION = 1, - VP8_FOUR_TOKENPARTITION = 2, - VP8_EIGHT_TOKENPARTITION = 3 -} vp8e_token_partitions; - -/*!brief VP9 encoder content type */ -typedef enum { - VP9E_CONTENT_DEFAULT, - VP9E_CONTENT_SCREEN, - VP9E_CONTENT_FILM, - VP9E_CONTENT_INVALID -} vp9e_tune_content; - -/*!\brief VP8 model tuning parameters - * - * Changes the encoder to tune for certain types of input material. - * - */ -typedef enum { VP8_TUNE_PSNR, VP8_TUNE_SSIM } vp8e_tuning; - -/*!\brief vp9 svc layer parameters - * - * This defines the spatial and temporal layer id numbers for svc encoding. - * This is used with the #VP9E_SET_SVC_LAYER_ID control to set the spatial and - * temporal layer id for the current frame. - * - */ -typedef struct vpx_svc_layer_id { - int spatial_layer_id; /**< First spatial layer to start encoding. */ - // TODO(jianj): Deprecated, to be removed. - int temporal_layer_id; /**< Temporal layer id number. */ - int temporal_layer_id_per_spatial[VPX_SS_MAX_LAYERS]; /**< Temp layer id. */ -} vpx_svc_layer_id_t; - -/*!\brief vp9 svc frame flag parameters. - * - * This defines the frame flags and buffer indices for each spatial layer for - * svc encoding. - * This is used with the #VP9E_SET_SVC_REF_FRAME_CONFIG control to set frame - * flags and buffer indices for each spatial layer for the current (super)frame. - * - */ -typedef struct vpx_svc_ref_frame_config { - int lst_fb_idx[VPX_SS_MAX_LAYERS]; /**< Last buffer index. */ - int gld_fb_idx[VPX_SS_MAX_LAYERS]; /**< Golden buffer index. */ - int alt_fb_idx[VPX_SS_MAX_LAYERS]; /**< Altref buffer index. */ - int update_buffer_slot[VPX_SS_MAX_LAYERS]; /**< Update reference frames. */ - // TODO(jianj): Remove update_last/golden/alt_ref, these are deprecated. - int update_last[VPX_SS_MAX_LAYERS]; /**< Update last. */ - int update_golden[VPX_SS_MAX_LAYERS]; /**< Update golden. */ - int update_alt_ref[VPX_SS_MAX_LAYERS]; /**< Update altref. */ - int reference_last[VPX_SS_MAX_LAYERS]; /**< Last as reference. */ - int reference_golden[VPX_SS_MAX_LAYERS]; /**< Golden as reference. */ - int reference_alt_ref[VPX_SS_MAX_LAYERS]; /**< Altref as reference. */ - int64_t duration[VPX_SS_MAX_LAYERS]; /**< Duration per spatial layer. */ -} vpx_svc_ref_frame_config_t; - -/*!\brief VP9 svc frame dropping mode. - * - * This defines the frame drop mode for SVC. - * - */ -typedef enum { - CONSTRAINED_LAYER_DROP, - /**< Upper layers are constrained to drop if current layer drops. */ - LAYER_DROP, /**< Any spatial layer can drop. */ - FULL_SUPERFRAME_DROP, /**< Only full superframe can drop. */ -} SVC_LAYER_DROP_MODE; - -/*!\brief vp9 svc frame dropping parameters. - * - * This defines the frame drop thresholds for each spatial layer, and - * the frame dropping mode: 0 = layer based frame dropping (default), - * 1 = constrained dropping where current layer drop forces all upper - * spatial layers to drop. - */ -typedef struct vpx_svc_frame_drop { - int framedrop_thresh[VPX_SS_MAX_LAYERS]; /**< Frame drop thresholds */ - SVC_LAYER_DROP_MODE - framedrop_mode; /**< Layer-based or constrained dropping. */ - int max_consec_drop; /**< Maximum consecutive drops, for any layer. */ -} vpx_svc_frame_drop_t; - -/*!\brief vp9 svc spatial layer sync parameters. - * - * This defines the spatial layer sync flag, defined per spatial layer. - * - */ -typedef struct vpx_svc_spatial_layer_sync { - int spatial_layer_sync[VPX_SS_MAX_LAYERS]; /**< Sync layer flags */ - int base_layer_intra_only; /**< Flag for setting Intra-only frame on base */ -} vpx_svc_spatial_layer_sync_t; - -/*!\cond */ -/*!\brief VP8 encoder control function parameter type - * - * Defines the data types that VP8E control functions take. Note that - * additional common controls are defined in vp8.h - * - */ - -VPX_CTRL_USE_TYPE(VP8E_SET_FRAME_FLAGS, int) -#define VPX_CTRL_VP8E_SET_FRAME_FLAGS -VPX_CTRL_USE_TYPE(VP8E_SET_TEMPORAL_LAYER_ID, int) -#define VPX_CTRL_VP8E_SET_TEMPORAL_LAYER_ID -VPX_CTRL_USE_TYPE(VP8E_SET_ROI_MAP, vpx_roi_map_t *) -#define VPX_CTRL_VP8E_SET_ROI_MAP -VPX_CTRL_USE_TYPE(VP9E_SET_ROI_MAP, vpx_roi_map_t *) -#define VPX_CTRL_VP9E_SET_ROI_MAP -VPX_CTRL_USE_TYPE(VP8E_SET_ACTIVEMAP, vpx_active_map_t *) -#define VPX_CTRL_VP8E_SET_ACTIVEMAP -VPX_CTRL_USE_TYPE(VP8E_SET_SCALEMODE, vpx_scaling_mode_t *) -#define VPX_CTRL_VP8E_SET_SCALEMODE - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC, int) -#define VPX_CTRL_VP9E_SET_SVC -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_PARAMETERS, void *) -#define VPX_CTRL_VP9E_SET_SVC_PARAMETERS -VPX_CTRL_USE_TYPE(VP9E_REGISTER_CX_CALLBACK, void *) -#define VPX_CTRL_VP9E_REGISTER_CX_CALLBACK -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_LAYER_ID, vpx_svc_layer_id_t *) -#define VPX_CTRL_VP9E_SET_SVC_LAYER_ID - -VPX_CTRL_USE_TYPE(VP8E_SET_CPUUSED, int) -#define VPX_CTRL_VP8E_SET_CPUUSED -VPX_CTRL_USE_TYPE(VP8E_SET_ENABLEAUTOALTREF, unsigned int) -#define VPX_CTRL_VP8E_SET_ENABLEAUTOALTREF -VPX_CTRL_USE_TYPE(VP8E_SET_NOISE_SENSITIVITY, unsigned int) -#define VPX_CTRL_VP8E_SET_NOISE_SENSITIVITY -VPX_CTRL_USE_TYPE(VP8E_SET_SHARPNESS, unsigned int) -#define VPX_CTRL_VP8E_SET_SHARPNESS -VPX_CTRL_USE_TYPE(VP8E_SET_STATIC_THRESHOLD, unsigned int) -#define VPX_CTRL_VP8E_SET_STATIC_THRESHOLD -VPX_CTRL_USE_TYPE(VP8E_SET_TOKEN_PARTITIONS, int) /* vp8e_token_partitions */ -#define VPX_CTRL_VP8E_SET_TOKEN_PARTITIONS - -VPX_CTRL_USE_TYPE(VP8E_SET_ARNR_MAXFRAMES, unsigned int) -#define VPX_CTRL_VP8E_SET_ARNR_MAXFRAMES -VPX_CTRL_USE_TYPE(VP8E_SET_ARNR_STRENGTH, unsigned int) -#define VPX_CTRL_VP8E_SET_ARNR_STRENGTH -VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_SET_ARNR_TYPE, unsigned int) -#define VPX_CTRL_VP8E_SET_ARNR_TYPE -VPX_CTRL_USE_TYPE(VP8E_SET_TUNING, int) /* vp8e_tuning */ -#define VPX_CTRL_VP8E_SET_TUNING -VPX_CTRL_USE_TYPE(VP8E_SET_CQ_LEVEL, unsigned int) -#define VPX_CTRL_VP8E_SET_CQ_LEVEL - -VPX_CTRL_USE_TYPE(VP9E_SET_TILE_COLUMNS, int) -#define VPX_CTRL_VP9E_SET_TILE_COLUMNS -VPX_CTRL_USE_TYPE(VP9E_SET_TILE_ROWS, int) -#define VPX_CTRL_VP9E_SET_TILE_ROWS - -VPX_CTRL_USE_TYPE(VP9E_SET_TPL, int) -#define VPX_CTRL_VP9E_SET_TPL - -VPX_CTRL_USE_TYPE(VP8E_GET_LAST_QUANTIZER, int *) -#define VPX_CTRL_VP8E_GET_LAST_QUANTIZER -VPX_CTRL_USE_TYPE(VP8E_GET_LAST_QUANTIZER_64, int *) -#define VPX_CTRL_VP8E_GET_LAST_QUANTIZER_64 -VPX_CTRL_USE_TYPE(VP9E_GET_SVC_LAYER_ID, vpx_svc_layer_id_t *) -#define VPX_CTRL_VP9E_GET_SVC_LAYER_ID - -VPX_CTRL_USE_TYPE(VP8E_SET_MAX_INTRA_BITRATE_PCT, unsigned int) -#define VPX_CTRL_VP8E_SET_MAX_INTRA_BITRATE_PCT -VPX_CTRL_USE_TYPE(VP8E_SET_MAX_INTER_BITRATE_PCT, unsigned int) -#define VPX_CTRL_VP8E_SET_MAX_INTER_BITRATE_PCT - -VPX_CTRL_USE_TYPE(VP8E_SET_GF_CBR_BOOST_PCT, unsigned int) -#define VPX_CTRL_VP8E_SET_GF_CBR_BOOST_PCT - -VPX_CTRL_USE_TYPE(VP8E_SET_SCREEN_CONTENT_MODE, unsigned int) -#define VPX_CTRL_VP8E_SET_SCREEN_CONTENT_MODE - -VPX_CTRL_USE_TYPE(VP9E_SET_GF_CBR_BOOST_PCT, unsigned int) -#define VPX_CTRL_VP9E_SET_GF_CBR_BOOST_PCT - -VPX_CTRL_USE_TYPE(VP9E_SET_LOSSLESS, unsigned int) -#define VPX_CTRL_VP9E_SET_LOSSLESS - -VPX_CTRL_USE_TYPE(VP9E_SET_FRAME_PARALLEL_DECODING, unsigned int) -#define VPX_CTRL_VP9E_SET_FRAME_PARALLEL_DECODING - -VPX_CTRL_USE_TYPE(VP9E_SET_AQ_MODE, unsigned int) -#define VPX_CTRL_VP9E_SET_AQ_MODE - -VPX_CTRL_USE_TYPE(VP9E_SET_ALT_REF_AQ, int) -#define VPX_CTRL_VP9E_SET_ALT_REF_AQ - -VPX_CTRL_USE_TYPE(VP9E_SET_FRAME_PERIODIC_BOOST, unsigned int) -#define VPX_CTRL_VP9E_SET_FRAME_PERIODIC_BOOST - -VPX_CTRL_USE_TYPE(VP9E_SET_NOISE_SENSITIVITY, unsigned int) -#define VPX_CTRL_VP9E_SET_NOISE_SENSITIVITY - -VPX_CTRL_USE_TYPE(VP9E_SET_TUNE_CONTENT, int) /* vp9e_tune_content */ -#define VPX_CTRL_VP9E_SET_TUNE_CONTENT - -VPX_CTRL_USE_TYPE(VP9E_SET_COLOR_SPACE, int) -#define VPX_CTRL_VP9E_SET_COLOR_SPACE - -VPX_CTRL_USE_TYPE(VP9E_SET_MIN_GF_INTERVAL, unsigned int) -#define VPX_CTRL_VP9E_SET_MIN_GF_INTERVAL - -VPX_CTRL_USE_TYPE(VP9E_SET_MAX_GF_INTERVAL, unsigned int) -#define VPX_CTRL_VP9E_SET_MAX_GF_INTERVAL - -VPX_CTRL_USE_TYPE(VP9E_GET_ACTIVEMAP, vpx_active_map_t *) -#define VPX_CTRL_VP9E_GET_ACTIVEMAP - -VPX_CTRL_USE_TYPE(VP9E_SET_COLOR_RANGE, int) -#define VPX_CTRL_VP9E_SET_COLOR_RANGE - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_REF_FRAME_CONFIG, vpx_svc_ref_frame_config_t *) -#define VPX_CTRL_VP9E_SET_SVC_REF_FRAME_CONFIG - -VPX_CTRL_USE_TYPE(VP9E_SET_RENDER_SIZE, int *) -#define VPX_CTRL_VP9E_SET_RENDER_SIZE - -VPX_CTRL_USE_TYPE(VP9E_SET_TARGET_LEVEL, unsigned int) -#define VPX_CTRL_VP9E_SET_TARGET_LEVEL - -VPX_CTRL_USE_TYPE(VP9E_SET_ROW_MT, unsigned int) -#define VPX_CTRL_VP9E_SET_ROW_MT - -VPX_CTRL_USE_TYPE(VP9E_GET_LEVEL, int *) -#define VPX_CTRL_VP9E_GET_LEVEL - -VPX_CTRL_USE_TYPE(VP9E_ENABLE_MOTION_VECTOR_UNIT_TEST, unsigned int) -#define VPX_CTRL_VP9E_ENABLE_MOTION_VECTOR_UNIT_TEST - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_INTER_LAYER_PRED, unsigned int) -#define VPX_CTRL_VP9E_SET_SVC_INTER_LAYER_PRED - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_FRAME_DROP_LAYER, vpx_svc_frame_drop_t *) -#define VPX_CTRL_VP9E_SET_SVC_FRAME_DROP_LAYER - -VPX_CTRL_USE_TYPE(VP9E_GET_SVC_REF_FRAME_CONFIG, vpx_svc_ref_frame_config_t *) -#define VPX_CTRL_VP9E_GET_SVC_REF_FRAME_CONFIG - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_GF_TEMPORAL_REF, unsigned int) -#define VPX_CTRL_VP9E_SET_SVC_GF_TEMPORAL_REF - -VPX_CTRL_USE_TYPE(VP9E_SET_SVC_SPATIAL_LAYER_SYNC, - vpx_svc_spatial_layer_sync_t *) -#define VPX_CTRL_VP9E_SET_SVC_SPATIAL_LAYER_SYNC - -VPX_CTRL_USE_TYPE(VP9E_SET_POSTENCODE_DROP, unsigned int) -#define VPX_CTRL_VP9E_SET_POSTENCODE_DROP - -/*!\endcond */ -/*! @} - end defgroup vp8_encoder */ -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // VPX_VPX_VP8CX_H_ diff --git a/vpx-encoder/android_libs/x86_64/include/vpx/vp8dx.h b/vpx-encoder/android_libs/x86_64/include/vpx/vp8dx.h deleted file mode 100644 index af92f21a..00000000 --- a/vpx-encoder/android_libs/x86_64/include/vpx/vp8dx.h +++ /dev/null @@ -1,210 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -/*!\defgroup vp8_decoder WebM VP8/VP9 Decoder - * \ingroup vp8 - * - * @{ - */ -/*!\file - * \brief Provides definitions for using VP8 or VP9 within the vpx Decoder - * interface. - */ -#ifndef VPX_VPX_VP8DX_H_ -#define VPX_VPX_VP8DX_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Include controls common to both the encoder and decoder */ -#include "./vp8.h" - -/*!\name Algorithm interface for VP8 - * - * This interface provides the capability to decode VP8 streams. - * @{ - */ -extern vpx_codec_iface_t vpx_codec_vp8_dx_algo; -extern vpx_codec_iface_t *vpx_codec_vp8_dx(void); -/*!@} - end algorithm interface member group*/ - -/*!\name Algorithm interface for VP9 - * - * This interface provides the capability to decode VP9 streams. - * @{ - */ -extern vpx_codec_iface_t vpx_codec_vp9_dx_algo; -extern vpx_codec_iface_t *vpx_codec_vp9_dx(void); -/*!@} - end algorithm interface member group*/ - -/*!\enum vp8_dec_control_id - * \brief VP8 decoder control functions - * - * This set of macros define the control functions available for the VP8 - * decoder interface. - * - * \sa #vpx_codec_control - */ -enum vp8_dec_control_id { - /** control function to get info on which reference frames were updated - * by the last decode - */ - VP8D_GET_LAST_REF_UPDATES = VP8_DECODER_CTRL_ID_START, - - /** check if the indicated frame is corrupted */ - VP8D_GET_FRAME_CORRUPTED, - - /** control function to get info on which reference frames were used - * by the last decode - */ - VP8D_GET_LAST_REF_USED, - - /** decryption function to decrypt encoded buffer data immediately - * before decoding. Takes a vpx_decrypt_init, which contains - * a callback function and opaque context pointer. - */ - VPXD_SET_DECRYPTOR, - VP8D_SET_DECRYPTOR = VPXD_SET_DECRYPTOR, - - /** control function to get the dimensions that the current frame is decoded - * at. This may be different to the intended display size for the frame as - * specified in the wrapper or frame header (see VP9D_GET_DISPLAY_SIZE). */ - VP9D_GET_FRAME_SIZE, - - /** control function to get the current frame's intended display dimensions - * (as specified in the wrapper or frame header). This may be different to - * the decoded dimensions of this frame (see VP9D_GET_FRAME_SIZE). */ - VP9D_GET_DISPLAY_SIZE, - - /** control function to get the bit depth of the stream. */ - VP9D_GET_BIT_DEPTH, - - /** control function to set the byte alignment of the planes in the reference - * buffers. Valid values are power of 2, from 32 to 1024. A value of 0 sets - * legacy alignment. I.e. Y plane is aligned to 32 bytes, U plane directly - * follows Y plane, and V plane directly follows U plane. Default value is 0. - */ - VP9_SET_BYTE_ALIGNMENT, - - /** control function to invert the decoding order to from right to left. The - * function is used in a test to confirm the decoding independence of tile - * columns. The function may be used in application where this order - * of decoding is desired. - * - * TODO(yaowu): Rework the unit test that uses this control, and in a future - * release, this test-only control shall be removed. - */ - VP9_INVERT_TILE_DECODE_ORDER, - - /** control function to set the skip loop filter flag. Valid values are - * integers. The decoder will skip the loop filter when its value is set to - * nonzero. If the loop filter is skipped the decoder may accumulate decode - * artifacts. The default value is 0. - */ - VP9_SET_SKIP_LOOP_FILTER, - - /** control function to decode SVC stream up to the x spatial layers, - * where x is passed in through the control, and is 0 for base layer. - */ - VP9_DECODE_SVC_SPATIAL_LAYER, - - /*!\brief Codec control function to get last decoded frame quantizer. - * - * Return value uses internal quantizer scale defined by the codec. - * - * Supported in codecs: VP8, VP9 - */ - VPXD_GET_LAST_QUANTIZER, - - /*!\brief Codec control function to set row level multi-threading. - * - * 0 : off, 1 : on - * - * Supported in codecs: VP9 - */ - VP9D_SET_ROW_MT, - - /*!\brief Codec control function to set loopfilter optimization. - * - * 0 : off, Loop filter is done after all tiles have been decoded - * 1 : on, Loop filter is done immediately after decode without - * waiting for all threads to sync. - * - * Supported in codecs: VP9 - */ - VP9D_SET_LOOP_FILTER_OPT, - - VP8_DECODER_CTRL_ID_MAX -}; - -/** Decrypt n bytes of data from input -> output, using the decrypt_state - * passed in VPXD_SET_DECRYPTOR. - */ -typedef void (*vpx_decrypt_cb)(void *decrypt_state, const unsigned char *input, - unsigned char *output, int count); - -/*!\brief Structure to hold decryption state - * - * Defines a structure to hold the decryption state and access function. - */ -typedef struct vpx_decrypt_init { - /*! Decrypt callback. */ - vpx_decrypt_cb decrypt_cb; - - /*! Decryption state. */ - void *decrypt_state; -} vpx_decrypt_init; - -/*!\cond */ -/*!\brief VP8 decoder control function parameter type - * - * Defines the data types that VP8D control functions take. Note that - * additional common controls are defined in vp8.h - * - */ - -VPX_CTRL_USE_TYPE(VP8D_GET_LAST_REF_UPDATES, int *) -#define VPX_CTRL_VP8D_GET_LAST_REF_UPDATES -VPX_CTRL_USE_TYPE(VP8D_GET_FRAME_CORRUPTED, int *) -#define VPX_CTRL_VP8D_GET_FRAME_CORRUPTED -VPX_CTRL_USE_TYPE(VP8D_GET_LAST_REF_USED, int *) -#define VPX_CTRL_VP8D_GET_LAST_REF_USED -VPX_CTRL_USE_TYPE(VPXD_GET_LAST_QUANTIZER, int *) -#define VPX_CTRL_VPXD_GET_LAST_QUANTIZER -VPX_CTRL_USE_TYPE(VPXD_SET_DECRYPTOR, vpx_decrypt_init *) -#define VPX_CTRL_VPXD_SET_DECRYPTOR -VPX_CTRL_USE_TYPE(VP8D_SET_DECRYPTOR, vpx_decrypt_init *) -#define VPX_CTRL_VP8D_SET_DECRYPTOR -VPX_CTRL_USE_TYPE(VP9D_GET_DISPLAY_SIZE, int *) -#define VPX_CTRL_VP9D_GET_DISPLAY_SIZE -VPX_CTRL_USE_TYPE(VP9D_GET_BIT_DEPTH, unsigned int *) -#define VPX_CTRL_VP9D_GET_BIT_DEPTH -VPX_CTRL_USE_TYPE(VP9D_GET_FRAME_SIZE, int *) -#define VPX_CTRL_VP9D_GET_FRAME_SIZE -VPX_CTRL_USE_TYPE(VP9_INVERT_TILE_DECODE_ORDER, int) -#define VPX_CTRL_VP9_INVERT_TILE_DECODE_ORDER -#define VPX_CTRL_VP9_DECODE_SVC_SPATIAL_LAYER -VPX_CTRL_USE_TYPE(VP9_DECODE_SVC_SPATIAL_LAYER, int) -#define VPX_CTRL_VP9_SET_SKIP_LOOP_FILTER -VPX_CTRL_USE_TYPE(VP9_SET_SKIP_LOOP_FILTER, int) -#define VPX_CTRL_VP9_DECODE_SET_ROW_MT -VPX_CTRL_USE_TYPE(VP9D_SET_ROW_MT, int) -#define VPX_CTRL_VP9_SET_LOOP_FILTER_OPT -VPX_CTRL_USE_TYPE(VP9D_SET_LOOP_FILTER_OPT, int) - -/*!\endcond */ -/*! @} - end defgroup vp8_decoder */ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // VPX_VPX_VP8DX_H_ diff --git a/vpx-encoder/android_libs/x86_64/include/vpx/vpx_codec.h b/vpx-encoder/android_libs/x86_64/include/vpx/vpx_codec.h deleted file mode 100644 index 0f8d7851..00000000 --- a/vpx-encoder/android_libs/x86_64/include/vpx/vpx_codec.h +++ /dev/null @@ -1,468 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -/*!\defgroup codec Common Algorithm Interface - * This abstraction allows applications to easily support multiple video - * formats with minimal code duplication. This section describes the interface - * common to all codecs (both encoders and decoders). - * @{ - */ - -/*!\file - * \brief Describes the codec algorithm interface to applications. - * - * This file describes the interface between an application and a - * video codec algorithm. - * - * An application instantiates a specific codec instance by using - * vpx_codec_init() and a pointer to the algorithm's interface structure: - *
- *     my_app.c:
- *       extern vpx_codec_iface_t my_codec;
- *       {
- *           vpx_codec_ctx_t algo;
- *           res = vpx_codec_init(&algo, &my_codec);
- *       }
- *     
- * - * Once initialized, the instance is manged using other functions from - * the vpx_codec_* family. - */ -#ifndef VPX_VPX_VPX_CODEC_H_ -#define VPX_VPX_VPX_CODEC_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "./vpx_image.h" -#include "./vpx_integer.h" - -/*!\brief Decorator indicating a function is deprecated */ -#ifndef VPX_DEPRECATED -#if defined(__GNUC__) && __GNUC__ -#define VPX_DEPRECATED __attribute__((deprecated)) -#elif defined(_MSC_VER) -#define VPX_DEPRECATED -#else -#define VPX_DEPRECATED -#endif -#endif /* VPX_DEPRECATED */ - -#ifndef VPX_DECLSPEC_DEPRECATED -#if defined(__GNUC__) && __GNUC__ -#define VPX_DECLSPEC_DEPRECATED /**< \copydoc #VPX_DEPRECATED */ -#elif defined(_MSC_VER) -/*!\brief \copydoc #VPX_DEPRECATED */ -#define VPX_DECLSPEC_DEPRECATED __declspec(deprecated) -#else -#define VPX_DECLSPEC_DEPRECATED /**< \copydoc #VPX_DEPRECATED */ -#endif -#endif /* VPX_DECLSPEC_DEPRECATED */ - -/*!\brief Decorator indicating a function is potentially unused */ -#ifndef VPX_UNUSED -#if defined(__GNUC__) || defined(__clang__) -#define VPX_UNUSED __attribute__((unused)) -#else -#define VPX_UNUSED -#endif -#endif /* VPX_UNUSED */ - -/*!\brief Current ABI version number - * - * \internal - * If this file is altered in any way that changes the ABI, this value - * must be bumped. Examples include, but are not limited to, changing - * types, removing or reassigning enums, adding/removing/rearranging - * fields to structures - */ -#define VPX_CODEC_ABI_VERSION (4 + VPX_IMAGE_ABI_VERSION) /**<\hideinitializer*/ - -/*!\brief Algorithm return codes */ -typedef enum { - /*!\brief Operation completed without error */ - VPX_CODEC_OK, - - /*!\brief Unspecified error */ - VPX_CODEC_ERROR, - - /*!\brief Memory operation failed */ - VPX_CODEC_MEM_ERROR, - - /*!\brief ABI version mismatch */ - VPX_CODEC_ABI_MISMATCH, - - /*!\brief Algorithm does not have required capability */ - VPX_CODEC_INCAPABLE, - - /*!\brief The given bitstream is not supported. - * - * The bitstream was unable to be parsed at the highest level. The decoder - * is unable to proceed. This error \ref SHOULD be treated as fatal to the - * stream. */ - VPX_CODEC_UNSUP_BITSTREAM, - - /*!\brief Encoded bitstream uses an unsupported feature - * - * The decoder does not implement a feature required by the encoder. This - * return code should only be used for features that prevent future - * pictures from being properly decoded. This error \ref MAY be treated as - * fatal to the stream or \ref MAY be treated as fatal to the current GOP. - */ - VPX_CODEC_UNSUP_FEATURE, - - /*!\brief The coded data for this stream is corrupt or incomplete - * - * There was a problem decoding the current frame. This return code - * should only be used for failures that prevent future pictures from - * being properly decoded. This error \ref MAY be treated as fatal to the - * stream or \ref MAY be treated as fatal to the current GOP. If decoding - * is continued for the current GOP, artifacts may be present. - */ - VPX_CODEC_CORRUPT_FRAME, - - /*!\brief An application-supplied parameter is not valid. - * - */ - VPX_CODEC_INVALID_PARAM, - - /*!\brief An iterator reached the end of list. - * - */ - VPX_CODEC_LIST_END - -} vpx_codec_err_t; - -/*! \brief Codec capabilities bitfield - * - * Each codec advertises the capabilities it supports as part of its - * ::vpx_codec_iface_t interface structure. Capabilities are extra interfaces - * or functionality, and are not required to be supported. - * - * The available flags are specified by VPX_CODEC_CAP_* defines. - */ -typedef long vpx_codec_caps_t; -#define VPX_CODEC_CAP_DECODER 0x1 /**< Is a decoder */ -#define VPX_CODEC_CAP_ENCODER 0x2 /**< Is an encoder */ - -/*! Can support images at greater than 8 bitdepth. - */ -#define VPX_CODEC_CAP_HIGHBITDEPTH 0x4 - -/*! \brief Initialization-time Feature Enabling - * - * Certain codec features must be known at initialization time, to allow for - * proper memory allocation. - * - * The available flags are specified by VPX_CODEC_USE_* defines. - */ -typedef long vpx_codec_flags_t; - -/*!\brief Codec interface structure. - * - * Contains function pointers and other data private to the codec - * implementation. This structure is opaque to the application. - */ -typedef const struct vpx_codec_iface vpx_codec_iface_t; - -/*!\brief Codec private data structure. - * - * Contains data private to the codec implementation. This structure is opaque - * to the application. - */ -typedef struct vpx_codec_priv vpx_codec_priv_t; - -/*!\brief Iterator - * - * Opaque storage used for iterating over lists. - */ -typedef const void *vpx_codec_iter_t; - -/*!\brief Codec context structure - * - * All codecs \ref MUST support this context structure fully. In general, - * this data should be considered private to the codec algorithm, and - * not be manipulated or examined by the calling application. Applications - * may reference the 'name' member to get a printable description of the - * algorithm. - */ -typedef struct vpx_codec_ctx { - const char *name; /**< Printable interface name */ - vpx_codec_iface_t *iface; /**< Interface pointers */ - vpx_codec_err_t err; /**< Last returned error */ - const char *err_detail; /**< Detailed info, if available */ - vpx_codec_flags_t init_flags; /**< Flags passed at init time */ - union { - /**< Decoder Configuration Pointer */ - const struct vpx_codec_dec_cfg *dec; - /**< Encoder Configuration Pointer */ - const struct vpx_codec_enc_cfg *enc; - const void *raw; - } config; /**< Configuration pointer aliasing union */ - vpx_codec_priv_t *priv; /**< Algorithm private storage */ -} vpx_codec_ctx_t; - -/*!\brief Bit depth for codec - * * - * This enumeration determines the bit depth of the codec. - */ -typedef enum vpx_bit_depth { - VPX_BITS_8 = 8, /**< 8 bits */ - VPX_BITS_10 = 10, /**< 10 bits */ - VPX_BITS_12 = 12, /**< 12 bits */ -} vpx_bit_depth_t; - -/* - * Library Version Number Interface - * - * For example, see the following sample return values: - * vpx_codec_version() (1<<16 | 2<<8 | 3) - * vpx_codec_version_str() "v1.2.3-rc1-16-gec6a1ba" - * vpx_codec_version_extra_str() "rc1-16-gec6a1ba" - */ - -/*!\brief Return the version information (as an integer) - * - * Returns a packed encoding of the library version number. This will only - * include - * the major.minor.patch component of the version number. Note that this encoded - * value should be accessed through the macros provided, as the encoding may - * change - * in the future. - * - */ -int vpx_codec_version(void); -#define VPX_VERSION_MAJOR(v) \ - ((v >> 16) & 0xff) /**< extract major from packed version */ -#define VPX_VERSION_MINOR(v) \ - ((v >> 8) & 0xff) /**< extract minor from packed version */ -#define VPX_VERSION_PATCH(v) \ - ((v >> 0) & 0xff) /**< extract patch from packed version */ - -/*!\brief Return the version major number */ -#define vpx_codec_version_major() ((vpx_codec_version() >> 16) & 0xff) - -/*!\brief Return the version minor number */ -#define vpx_codec_version_minor() ((vpx_codec_version() >> 8) & 0xff) - -/*!\brief Return the version patch number */ -#define vpx_codec_version_patch() ((vpx_codec_version() >> 0) & 0xff) - -/*!\brief Return the version information (as a string) - * - * Returns a printable string containing the full library version number. This - * may - * contain additional text following the three digit version number, as to - * indicate - * release candidates, prerelease versions, etc. - * - */ -const char *vpx_codec_version_str(void); - -/*!\brief Return the version information (as a string) - * - * Returns a printable "extra string". This is the component of the string - * returned - * by vpx_codec_version_str() following the three digit version number. - * - */ -const char *vpx_codec_version_extra_str(void); - -/*!\brief Return the build configuration - * - * Returns a printable string containing an encoded version of the build - * configuration. This may be useful to vpx support. - * - */ -const char *vpx_codec_build_config(void); - -/*!\brief Return the name for a given interface - * - * Returns a human readable string for name of the given codec interface. - * - * \param[in] iface Interface pointer - * - */ -const char *vpx_codec_iface_name(vpx_codec_iface_t *iface); - -/*!\brief Convert error number to printable string - * - * Returns a human readable string for the last error returned by the - * algorithm. The returned error will be one line and will not contain - * any newline characters. - * - * - * \param[in] err Error number. - * - */ -const char *vpx_codec_err_to_string(vpx_codec_err_t err); - -/*!\brief Retrieve error synopsis for codec context - * - * Returns a human readable string for the last error returned by the - * algorithm. The returned error will be one line and will not contain - * any newline characters. - * - * - * \param[in] ctx Pointer to this instance's context. - * - */ -const char *vpx_codec_error(vpx_codec_ctx_t *ctx); - -/*!\brief Retrieve detailed error information for codec context - * - * Returns a human readable string providing detailed information about - * the last error. - * - * \param[in] ctx Pointer to this instance's context. - * - * \retval NULL - * No detailed information is available. - */ -const char *vpx_codec_error_detail(vpx_codec_ctx_t *ctx); - -/* REQUIRED FUNCTIONS - * - * The following functions are required to be implemented for all codecs. - * They represent the base case functionality expected of all codecs. - */ - -/*!\brief Destroy a codec instance - * - * Destroys a codec context, freeing any associated memory buffers. - * - * \param[in] ctx Pointer to this instance's context - * - * \retval #VPX_CODEC_OK - * The codec algorithm initialized. - * \retval #VPX_CODEC_MEM_ERROR - * Memory allocation failed. - */ -vpx_codec_err_t vpx_codec_destroy(vpx_codec_ctx_t *ctx); - -/*!\brief Get the capabilities of an algorithm. - * - * Retrieves the capabilities bitfield from the algorithm's interface. - * - * \param[in] iface Pointer to the algorithm interface - * - */ -vpx_codec_caps_t vpx_codec_get_caps(vpx_codec_iface_t *iface); - -/*!\brief Control algorithm - * - * This function is used to exchange algorithm specific data with the codec - * instance. This can be used to implement features specific to a particular - * algorithm. - * - * This wrapper function dispatches the request to the helper function - * associated with the given ctrl_id. It tries to call this function - * transparently, but will return #VPX_CODEC_ERROR if the request could not - * be dispatched. - * - * Note that this function should not be used directly. Call the - * #vpx_codec_control wrapper macro instead. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] ctrl_id Algorithm specific control identifier - * - * \retval #VPX_CODEC_OK - * The control request was processed. - * \retval #VPX_CODEC_ERROR - * The control request was not processed. - * \retval #VPX_CODEC_INVALID_PARAM - * The data was not valid. - */ -vpx_codec_err_t vpx_codec_control_(vpx_codec_ctx_t *ctx, int ctrl_id, ...); -#if defined(VPX_DISABLE_CTRL_TYPECHECKS) && VPX_DISABLE_CTRL_TYPECHECKS -#define vpx_codec_control(ctx, id, data) vpx_codec_control_(ctx, id, data) -#define VPX_CTRL_USE_TYPE(id, typ) -#define VPX_CTRL_USE_TYPE_DEPRECATED(id, typ) -#define VPX_CTRL_VOID(id, typ) - -#else -/*!\brief vpx_codec_control wrapper macro - * - * This macro allows for type safe conversions across the variadic parameter - * to vpx_codec_control_(). - * - * \internal - * It works by dispatching the call to the control function through a wrapper - * function named with the id parameter. - */ -#define vpx_codec_control(ctx, id, data) \ - vpx_codec_control_##id(ctx, id, data) /**<\hideinitializer*/ - -/*!\brief vpx_codec_control type definition macro - * - * This macro allows for type safe conversions across the variadic parameter - * to vpx_codec_control_(). It defines the type of the argument for a given - * control identifier. - * - * \internal - * It defines a static function with - * the correctly typed arguments as a wrapper to the type-unsafe internal - * function. - */ -#define VPX_CTRL_USE_TYPE(id, typ) \ - static vpx_codec_err_t vpx_codec_control_##id(vpx_codec_ctx_t *, int, typ) \ - VPX_UNUSED; \ - \ - static vpx_codec_err_t vpx_codec_control_##id(vpx_codec_ctx_t *ctx, \ - int ctrl_id, typ data) { \ - return vpx_codec_control_(ctx, ctrl_id, data); \ - } /**<\hideinitializer*/ - -/*!\brief vpx_codec_control deprecated type definition macro - * - * Like #VPX_CTRL_USE_TYPE, but indicates that the specified control is - * deprecated and should not be used. Consult the documentation for your - * codec for more information. - * - * \internal - * It defines a static function with the correctly typed arguments as a - * wrapper to the type-unsafe internal function. - */ -#define VPX_CTRL_USE_TYPE_DEPRECATED(id, typ) \ - VPX_DECLSPEC_DEPRECATED static vpx_codec_err_t vpx_codec_control_##id( \ - vpx_codec_ctx_t *, int, typ) VPX_DEPRECATED VPX_UNUSED; \ - \ - VPX_DECLSPEC_DEPRECATED static vpx_codec_err_t vpx_codec_control_##id( \ - vpx_codec_ctx_t *ctx, int ctrl_id, typ data) { \ - return vpx_codec_control_(ctx, ctrl_id, data); \ - } /**<\hideinitializer*/ - -/*!\brief vpx_codec_control void type definition macro - * - * This macro allows for type safe conversions across the variadic parameter - * to vpx_codec_control_(). It indicates that a given control identifier takes - * no argument. - * - * \internal - * It defines a static function without a data argument as a wrapper to the - * type-unsafe internal function. - */ -#define VPX_CTRL_VOID(id) \ - static vpx_codec_err_t vpx_codec_control_##id(vpx_codec_ctx_t *, int) \ - VPX_UNUSED; \ - \ - static vpx_codec_err_t vpx_codec_control_##id(vpx_codec_ctx_t *ctx, \ - int ctrl_id) { \ - return vpx_codec_control_(ctx, ctrl_id); \ - } /**<\hideinitializer*/ - -#endif - -/*!@} - end defgroup codec*/ -#ifdef __cplusplus -} -#endif -#endif // VPX_VPX_VPX_CODEC_H_ diff --git a/vpx-encoder/android_libs/x86_64/include/vpx/vpx_decoder.h b/vpx-encoder/android_libs/x86_64/include/vpx/vpx_decoder.h deleted file mode 100644 index f113f719..00000000 --- a/vpx-encoder/android_libs/x86_64/include/vpx/vpx_decoder.h +++ /dev/null @@ -1,365 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ -#ifndef VPX_VPX_VPX_DECODER_H_ -#define VPX_VPX_VPX_DECODER_H_ - -/*!\defgroup decoder Decoder Algorithm Interface - * \ingroup codec - * This abstraction allows applications using this decoder to easily support - * multiple video formats with minimal code duplication. This section describes - * the interface common to all decoders. - * @{ - */ - -/*!\file - * \brief Describes the decoder algorithm interface to applications. - * - * This file describes the interface between an application and a - * video decoder algorithm. - * - */ -#ifdef __cplusplus -extern "C" { -#endif - -#include "./vpx_codec.h" -#include "./vpx_frame_buffer.h" - -/*!\brief Current ABI version number - * - * \internal - * If this file is altered in any way that changes the ABI, this value - * must be bumped. Examples include, but are not limited to, changing - * types, removing or reassigning enums, adding/removing/rearranging - * fields to structures - */ -#define VPX_DECODER_ABI_VERSION \ - (3 + VPX_CODEC_ABI_VERSION) /**<\hideinitializer*/ - -/*! \brief Decoder capabilities bitfield - * - * Each decoder advertises the capabilities it supports as part of its - * ::vpx_codec_iface_t interface structure. Capabilities are extra interfaces - * or functionality, and are not required to be supported by a decoder. - * - * The available flags are specified by VPX_CODEC_CAP_* defines. - */ -#define VPX_CODEC_CAP_PUT_SLICE 0x10000 /**< Will issue put_slice callbacks */ -#define VPX_CODEC_CAP_PUT_FRAME 0x20000 /**< Will issue put_frame callbacks */ -#define VPX_CODEC_CAP_POSTPROC 0x40000 /**< Can postprocess decoded frame */ -/*!\brief Can conceal errors due to packet loss */ -#define VPX_CODEC_CAP_ERROR_CONCEALMENT 0x80000 -/*!\brief Can receive encoded frames one fragment at a time */ -#define VPX_CODEC_CAP_INPUT_FRAGMENTS 0x100000 - -/*! \brief Initialization-time Feature Enabling - * - * Certain codec features must be known at initialization time, to allow for - * proper memory allocation. - * - * The available flags are specified by VPX_CODEC_USE_* defines. - */ -/*!\brief Can support frame-based multi-threading */ -#define VPX_CODEC_CAP_FRAME_THREADING 0x200000 -/*!brief Can support external frame buffers */ -#define VPX_CODEC_CAP_EXTERNAL_FRAME_BUFFER 0x400000 - -#define VPX_CODEC_USE_POSTPROC 0x10000 /**< Postprocess decoded frame */ -/*!\brief Conceal errors in decoded frames */ -#define VPX_CODEC_USE_ERROR_CONCEALMENT 0x20000 -/*!\brief The input frame should be passed to the decoder one fragment at a - * time */ -#define VPX_CODEC_USE_INPUT_FRAGMENTS 0x40000 -/*!\brief Enable frame-based multi-threading */ -#define VPX_CODEC_USE_FRAME_THREADING 0x80000 - -/*!\brief Stream properties - * - * This structure is used to query or set properties of the decoded - * stream. Algorithms may extend this structure with data specific - * to their bitstream by setting the sz member appropriately. - */ -typedef struct vpx_codec_stream_info { - unsigned int sz; /**< Size of this structure */ - unsigned int w; /**< Width (or 0 for unknown/default) */ - unsigned int h; /**< Height (or 0 for unknown/default) */ - unsigned int is_kf; /**< Current frame is a keyframe */ -} vpx_codec_stream_info_t; - -/* REQUIRED FUNCTIONS - * - * The following functions are required to be implemented for all decoders. - * They represent the base case functionality expected of all decoders. - */ - -/*!\brief Initialization Configurations - * - * This structure is used to pass init time configuration options to the - * decoder. - */ -typedef struct vpx_codec_dec_cfg { - unsigned int threads; /**< Maximum number of threads to use, default 1 */ - unsigned int w; /**< Width */ - unsigned int h; /**< Height */ -} vpx_codec_dec_cfg_t; /**< alias for struct vpx_codec_dec_cfg */ - -/*!\brief Initialize a decoder instance - * - * Initializes a decoder context using the given interface. Applications - * should call the vpx_codec_dec_init convenience macro instead of this - * function directly, to ensure that the ABI version number parameter - * is properly initialized. - * - * If the library was configured with --disable-multithread, this call - * is not thread safe and should be guarded with a lock if being used - * in a multithreaded context. - * - * \param[in] ctx Pointer to this instance's context. - * \param[in] iface Pointer to the algorithm interface to use. - * \param[in] cfg Configuration to use, if known. May be NULL. - * \param[in] flags Bitfield of VPX_CODEC_USE_* flags - * \param[in] ver ABI version number. Must be set to - * VPX_DECODER_ABI_VERSION - * \retval #VPX_CODEC_OK - * The decoder algorithm initialized. - * \retval #VPX_CODEC_MEM_ERROR - * Memory allocation failed. - */ -vpx_codec_err_t vpx_codec_dec_init_ver(vpx_codec_ctx_t *ctx, - vpx_codec_iface_t *iface, - const vpx_codec_dec_cfg_t *cfg, - vpx_codec_flags_t flags, int ver); - -/*!\brief Convenience macro for vpx_codec_dec_init_ver() - * - * Ensures the ABI version parameter is properly set. - */ -#define vpx_codec_dec_init(ctx, iface, cfg, flags) \ - vpx_codec_dec_init_ver(ctx, iface, cfg, flags, VPX_DECODER_ABI_VERSION) - -/*!\brief Parse stream info from a buffer - * - * Performs high level parsing of the bitstream. Construction of a decoder - * context is not necessary. Can be used to determine if the bitstream is - * of the proper format, and to extract information from the stream. - * - * \param[in] iface Pointer to the algorithm interface - * \param[in] data Pointer to a block of data to parse - * \param[in] data_sz Size of the data buffer - * \param[in,out] si Pointer to stream info to update. The size member - * \ref MUST be properly initialized, but \ref MAY be - * clobbered by the algorithm. This parameter \ref MAY - * be NULL. - * - * \retval #VPX_CODEC_OK - * Bitstream is parsable and stream information updated - */ -vpx_codec_err_t vpx_codec_peek_stream_info(vpx_codec_iface_t *iface, - const uint8_t *data, - unsigned int data_sz, - vpx_codec_stream_info_t *si); - -/*!\brief Return information about the current stream. - * - * Returns information about the stream that has been parsed during decoding. - * - * \param[in] ctx Pointer to this instance's context - * \param[in,out] si Pointer to stream info to update. The size member - * \ref MUST be properly initialized, but \ref MAY be - * clobbered by the algorithm. This parameter \ref MAY - * be NULL. - * - * \retval #VPX_CODEC_OK - * Bitstream is parsable and stream information updated - */ -vpx_codec_err_t vpx_codec_get_stream_info(vpx_codec_ctx_t *ctx, - vpx_codec_stream_info_t *si); - -/*!\brief Decode data - * - * Processes a buffer of coded data. If the processing results in a new - * decoded frame becoming available, PUT_SLICE and PUT_FRAME events may be - * generated, as appropriate. Encoded data \ref MUST be passed in DTS (decode - * time stamp) order. Frames produced will always be in PTS (presentation - * time stamp) order. - * If the decoder is configured with VPX_CODEC_USE_INPUT_FRAGMENTS enabled, - * data and data_sz can contain a fragment of the encoded frame. Fragment - * \#n must contain at least partition \#n, but can also contain subsequent - * partitions (\#n+1 - \#n+i), and if so, fragments \#n+1, .., \#n+i must - * be empty. When no more data is available, this function should be called - * with NULL as data and 0 as data_sz. The memory passed to this function - * must be available until the frame has been decoded. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] data Pointer to this block of new coded data. If - * NULL, a VPX_CODEC_CB_PUT_FRAME event is posted - * for the previously decoded frame. - * \param[in] data_sz Size of the coded data, in bytes. - * \param[in] user_priv Application specific data to associate with - * this frame. - * \param[in] deadline Soft deadline the decoder should attempt to meet, - * in us. Set to zero for unlimited. - * - * \return Returns #VPX_CODEC_OK if the coded data was processed completely - * and future pictures can be decoded without error. Otherwise, - * see the descriptions of the other error codes in ::vpx_codec_err_t - * for recoverability capabilities. - */ -vpx_codec_err_t vpx_codec_decode(vpx_codec_ctx_t *ctx, const uint8_t *data, - unsigned int data_sz, void *user_priv, - long deadline); - -/*!\brief Decoded frames iterator - * - * Iterates over a list of the frames available for display. The iterator - * storage should be initialized to NULL to start the iteration. Iteration is - * complete when this function returns NULL. - * - * The list of available frames becomes valid upon completion of the - * vpx_codec_decode call, and remains valid until the next call to - * vpx_codec_decode. - * - * \param[in] ctx Pointer to this instance's context - * \param[in,out] iter Iterator storage, initialized to NULL - * - * \return Returns a pointer to an image, if one is ready for display. Frames - * produced will always be in PTS (presentation time stamp) order. - */ -vpx_image_t *vpx_codec_get_frame(vpx_codec_ctx_t *ctx, vpx_codec_iter_t *iter); - -/*!\defgroup cap_put_frame Frame-Based Decoding Functions - * - * The following functions are required to be implemented for all decoders - * that advertise the VPX_CODEC_CAP_PUT_FRAME capability. Calling these - * functions - * for codecs that don't advertise this capability will result in an error - * code being returned, usually VPX_CODEC_ERROR - * @{ - */ - -/*!\brief put frame callback prototype - * - * This callback is invoked by the decoder to notify the application of - * the availability of decoded image data. - */ -typedef void (*vpx_codec_put_frame_cb_fn_t)(void *user_priv, - const vpx_image_t *img); - -/*!\brief Register for notification of frame completion. - * - * Registers a given function to be called when a decoded frame is - * available. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] cb Pointer to the callback function - * \param[in] user_priv User's private data - * - * \retval #VPX_CODEC_OK - * Callback successfully registered. - * \retval #VPX_CODEC_ERROR - * Decoder context not initialized, or algorithm not capable of - * posting slice completion. - */ -vpx_codec_err_t vpx_codec_register_put_frame_cb(vpx_codec_ctx_t *ctx, - vpx_codec_put_frame_cb_fn_t cb, - void *user_priv); - -/*!@} - end defgroup cap_put_frame */ - -/*!\defgroup cap_put_slice Slice-Based Decoding Functions - * - * The following functions are required to be implemented for all decoders - * that advertise the VPX_CODEC_CAP_PUT_SLICE capability. Calling these - * functions - * for codecs that don't advertise this capability will result in an error - * code being returned, usually VPX_CODEC_ERROR - * @{ - */ - -/*!\brief put slice callback prototype - * - * This callback is invoked by the decoder to notify the application of - * the availability of partially decoded image data. The - */ -typedef void (*vpx_codec_put_slice_cb_fn_t)(void *user_priv, - const vpx_image_t *img, - const vpx_image_rect_t *valid, - const vpx_image_rect_t *update); - -/*!\brief Register for notification of slice completion. - * - * Registers a given function to be called when a decoded slice is - * available. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] cb Pointer to the callback function - * \param[in] user_priv User's private data - * - * \retval #VPX_CODEC_OK - * Callback successfully registered. - * \retval #VPX_CODEC_ERROR - * Decoder context not initialized, or algorithm not capable of - * posting slice completion. - */ -vpx_codec_err_t vpx_codec_register_put_slice_cb(vpx_codec_ctx_t *ctx, - vpx_codec_put_slice_cb_fn_t cb, - void *user_priv); - -/*!@} - end defgroup cap_put_slice*/ - -/*!\defgroup cap_external_frame_buffer External Frame Buffer Functions - * - * The following section is required to be implemented for all decoders - * that advertise the VPX_CODEC_CAP_EXTERNAL_FRAME_BUFFER capability. - * Calling this function for codecs that don't advertise this capability - * will result in an error code being returned, usually VPX_CODEC_ERROR. - * - * \note - * Currently this only works with VP9. - * @{ - */ - -/*!\brief Pass in external frame buffers for the decoder to use. - * - * Registers functions to be called when libvpx needs a frame buffer - * to decode the current frame and a function to be called when libvpx does - * not internally reference the frame buffer. This set function must - * be called before the first call to decode or libvpx will assume the - * default behavior of allocating frame buffers internally. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] cb_get Pointer to the get callback function - * \param[in] cb_release Pointer to the release callback function - * \param[in] cb_priv Callback's private data - * - * \retval #VPX_CODEC_OK - * External frame buffers will be used by libvpx. - * \retval #VPX_CODEC_INVALID_PARAM - * One or more of the callbacks were NULL. - * \retval #VPX_CODEC_ERROR - * Decoder context not initialized, or algorithm not capable of - * using external frame buffers. - * - * \note - * When decoding VP9, the application may be required to pass in at least - * #VP9_MAXIMUM_REF_BUFFERS + #VPX_MAXIMUM_WORK_BUFFERS external frame - * buffers. - */ -vpx_codec_err_t vpx_codec_set_frame_buffer_functions( - vpx_codec_ctx_t *ctx, vpx_get_frame_buffer_cb_fn_t cb_get, - vpx_release_frame_buffer_cb_fn_t cb_release, void *cb_priv); - -/*!@} - end defgroup cap_external_frame_buffer */ - -/*!@} - end defgroup decoder*/ -#ifdef __cplusplus -} -#endif -#endif // VPX_VPX_VPX_DECODER_H_ diff --git a/vpx-encoder/android_libs/x86_64/include/vpx/vpx_encoder.h b/vpx-encoder/android_libs/x86_64/include/vpx/vpx_encoder.h deleted file mode 100644 index c18de703..00000000 --- a/vpx-encoder/android_libs/x86_64/include/vpx/vpx_encoder.h +++ /dev/null @@ -1,968 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ -#ifndef VPX_VPX_VPX_ENCODER_H_ -#define VPX_VPX_VPX_ENCODER_H_ - -/*!\defgroup encoder Encoder Algorithm Interface - * \ingroup codec - * This abstraction allows applications using this encoder to easily support - * multiple video formats with minimal code duplication. This section describes - * the interface common to all encoders. - * @{ - */ - -/*!\file - * \brief Describes the encoder algorithm interface to applications. - * - * This file describes the interface between an application and a - * video encoder algorithm. - * - */ -#ifdef __cplusplus -extern "C" { -#endif - -#include "./vpx_codec.h" - -/*! Temporal Scalability: Maximum length of the sequence defining frame - * layer membership - */ -#define VPX_TS_MAX_PERIODICITY 16 - -/*! Temporal Scalability: Maximum number of coding layers */ -#define VPX_TS_MAX_LAYERS 5 - -/*! Temporal+Spatial Scalability: Maximum number of coding layers */ -#define VPX_MAX_LAYERS 12 // 3 temporal + 4 spatial layers are allowed. - -/*! Spatial Scalability: Maximum number of coding layers */ -#define VPX_SS_MAX_LAYERS 5 - -/*! Spatial Scalability: Default number of coding layers */ -#define VPX_SS_DEFAULT_LAYERS 1 - -/*!\brief Current ABI version number - * - * \internal - * If this file is altered in any way that changes the ABI, this value - * must be bumped. Examples include, but are not limited to, changing - * types, removing or reassigning enums, adding/removing/rearranging - * fields to structures - */ -#define VPX_ENCODER_ABI_VERSION \ - (14 + VPX_CODEC_ABI_VERSION) /**<\hideinitializer*/ - -/*! \brief Encoder capabilities bitfield - * - * Each encoder advertises the capabilities it supports as part of its - * ::vpx_codec_iface_t interface structure. Capabilities are extra - * interfaces or functionality, and are not required to be supported - * by an encoder. - * - * The available flags are specified by VPX_CODEC_CAP_* defines. - */ -#define VPX_CODEC_CAP_PSNR 0x10000 /**< Can issue PSNR packets */ - -/*! Can output one partition at a time. Each partition is returned in its - * own VPX_CODEC_CX_FRAME_PKT, with the FRAME_IS_FRAGMENT flag set for - * every partition but the last. In this mode all frames are always - * returned partition by partition. - */ -#define VPX_CODEC_CAP_OUTPUT_PARTITION 0x20000 - -/*! \brief Initialization-time Feature Enabling - * - * Certain codec features must be known at initialization time, to allow - * for proper memory allocation. - * - * The available flags are specified by VPX_CODEC_USE_* defines. - */ -#define VPX_CODEC_USE_PSNR 0x10000 /**< Calculate PSNR on each frame */ -/*!\brief Make the encoder output one partition at a time. */ -#define VPX_CODEC_USE_OUTPUT_PARTITION 0x20000 -#define VPX_CODEC_USE_HIGHBITDEPTH 0x40000 /**< Use high bitdepth */ - -/*!\brief Generic fixed size buffer structure - * - * This structure is able to hold a reference to any fixed size buffer. - */ -typedef struct vpx_fixed_buf { - void *buf; /**< Pointer to the data */ - size_t sz; /**< Length of the buffer, in chars */ -} vpx_fixed_buf_t; /**< alias for struct vpx_fixed_buf */ - -/*!\brief Time Stamp Type - * - * An integer, which when multiplied by the stream's time base, provides - * the absolute time of a sample. - */ -typedef int64_t vpx_codec_pts_t; - -/*!\brief Compressed Frame Flags - * - * This type represents a bitfield containing information about a compressed - * frame that may be useful to an application. The most significant 16 bits - * can be used by an algorithm to provide additional detail, for example to - * support frame types that are codec specific (MPEG-1 D-frames for example) - */ -typedef uint32_t vpx_codec_frame_flags_t; -#define VPX_FRAME_IS_KEY 0x1 /**< frame is the start of a GOP */ -/*!\brief frame can be dropped without affecting the stream (no future frame - * depends on this one) */ -#define VPX_FRAME_IS_DROPPABLE 0x2 -/*!\brief frame should be decoded but will not be shown */ -#define VPX_FRAME_IS_INVISIBLE 0x4 -/*!\brief this is a fragment of the encoded frame */ -#define VPX_FRAME_IS_FRAGMENT 0x8 - -/*!\brief Error Resilient flags - * - * These flags define which error resilient features to enable in the - * encoder. The flags are specified through the - * vpx_codec_enc_cfg::g_error_resilient variable. - */ -typedef uint32_t vpx_codec_er_flags_t; -/*!\brief Improve resiliency against losses of whole frames */ -#define VPX_ERROR_RESILIENT_DEFAULT 0x1 -/*!\brief The frame partitions are independently decodable by the bool decoder, - * meaning that partitions can be decoded even though earlier partitions have - * been lost. Note that intra prediction is still done over the partition - * boundary. */ -#define VPX_ERROR_RESILIENT_PARTITIONS 0x2 - -/*!\brief Encoder output packet variants - * - * This enumeration lists the different kinds of data packets that can be - * returned by calls to vpx_codec_get_cx_data(). Algorithms \ref MAY - * extend this list to provide additional functionality. - */ -enum vpx_codec_cx_pkt_kind { - VPX_CODEC_CX_FRAME_PKT, /**< Compressed video frame */ - VPX_CODEC_STATS_PKT, /**< Two-pass statistics for this frame */ - VPX_CODEC_FPMB_STATS_PKT, /**< first pass mb statistics for this frame */ - VPX_CODEC_PSNR_PKT, /**< PSNR statistics for this frame */ - VPX_CODEC_CUSTOM_PKT = 256 /**< Algorithm extensions */ -}; - -/*!\brief Encoder output packet - * - * This structure contains the different kinds of output data the encoder - * may produce while compressing a frame. - */ -typedef struct vpx_codec_cx_pkt { - enum vpx_codec_cx_pkt_kind kind; /**< packet variant */ - union { - struct { - void *buf; /**< compressed data buffer */ - size_t sz; /**< length of compressed data */ - /*!\brief time stamp to show frame (in timebase units) */ - vpx_codec_pts_t pts; - /*!\brief duration to show frame (in timebase units) */ - unsigned long duration; - vpx_codec_frame_flags_t flags; /**< flags for this frame */ - /*!\brief the partition id defines the decoding order of the partitions. - * Only applicable when "output partition" mode is enabled. First - * partition has id 0.*/ - int partition_id; - /*!\brief Width and height of frames in this packet. VP8 will only use the - * first one.*/ - unsigned int width[VPX_SS_MAX_LAYERS]; /**< frame width */ - unsigned int height[VPX_SS_MAX_LAYERS]; /**< frame height */ - /*!\brief Flag to indicate if spatial layer frame in this packet is - * encoded or dropped. VP8 will always be set to 1.*/ - uint8_t spatial_layer_encoded[VPX_SS_MAX_LAYERS]; - } frame; /**< data for compressed frame packet */ - vpx_fixed_buf_t twopass_stats; /**< data for two-pass packet */ - vpx_fixed_buf_t firstpass_mb_stats; /**< first pass mb packet */ - struct vpx_psnr_pkt { - unsigned int samples[4]; /**< Number of samples, total/y/u/v */ - uint64_t sse[4]; /**< sum squared error, total/y/u/v */ - double psnr[4]; /**< PSNR, total/y/u/v */ - } psnr; /**< data for PSNR packet */ - vpx_fixed_buf_t raw; /**< data for arbitrary packets */ - - /* This packet size is fixed to allow codecs to extend this - * interface without having to manage storage for raw packets, - * i.e., if it's smaller than 128 bytes, you can store in the - * packet list directly. - */ - char pad[128 - sizeof(enum vpx_codec_cx_pkt_kind)]; /**< fixed sz */ - } data; /**< packet data */ -} vpx_codec_cx_pkt_t; /**< alias for struct vpx_codec_cx_pkt */ - -/*!\brief Encoder return output buffer callback - * - * This callback function, when registered, returns with packets when each - * spatial layer is encoded. - */ -typedef void (*vpx_codec_enc_output_cx_pkt_cb_fn_t)(vpx_codec_cx_pkt_t *pkt, - void *user_data); - -/*!\brief Callback function pointer / user data pair storage */ -typedef struct vpx_codec_enc_output_cx_cb_pair { - vpx_codec_enc_output_cx_pkt_cb_fn_t output_cx_pkt; /**< Callback function */ - void *user_priv; /**< Pointer to private data */ -} vpx_codec_priv_output_cx_pkt_cb_pair_t; - -/*!\brief Rational Number - * - * This structure holds a fractional value. - */ -typedef struct vpx_rational { - int num; /**< fraction numerator */ - int den; /**< fraction denominator */ -} vpx_rational_t; /**< alias for struct vpx_rational */ - -/*!\brief Multi-pass Encoding Pass */ -enum vpx_enc_pass { - VPX_RC_ONE_PASS, /**< Single pass mode */ - VPX_RC_FIRST_PASS, /**< First pass of multi-pass mode */ - VPX_RC_LAST_PASS /**< Final pass of multi-pass mode */ -}; - -/*!\brief Rate control mode */ -enum vpx_rc_mode { - VPX_VBR, /**< Variable Bit Rate (VBR) mode */ - VPX_CBR, /**< Constant Bit Rate (CBR) mode */ - VPX_CQ, /**< Constrained Quality (CQ) mode */ - VPX_Q, /**< Constant Quality (Q) mode */ -}; - -/*!\brief Keyframe placement mode. - * - * This enumeration determines whether keyframes are placed automatically by - * the encoder or whether this behavior is disabled. Older releases of this - * SDK were implemented such that VPX_KF_FIXED meant keyframes were disabled. - * This name is confusing for this behavior, so the new symbols to be used - * are VPX_KF_AUTO and VPX_KF_DISABLED. - */ -enum vpx_kf_mode { - VPX_KF_FIXED, /**< deprecated, implies VPX_KF_DISABLED */ - VPX_KF_AUTO, /**< Encoder determines optimal placement automatically */ - VPX_KF_DISABLED = 0 /**< Encoder does not place keyframes. */ -}; - -/*!\brief Encoded Frame Flags - * - * This type indicates a bitfield to be passed to vpx_codec_encode(), defining - * per-frame boolean values. By convention, bits common to all codecs will be - * named VPX_EFLAG_*, and bits specific to an algorithm will be named - * /algo/_eflag_*. The lower order 16 bits are reserved for common use. - */ -typedef long vpx_enc_frame_flags_t; -#define VPX_EFLAG_FORCE_KF (1 << 0) /**< Force this frame to be a keyframe */ - -/*!\brief Encoder configuration structure - * - * This structure contains the encoder settings that have common representations - * across all codecs. This doesn't imply that all codecs support all features, - * however. - */ -typedef struct vpx_codec_enc_cfg { - /* - * generic settings (g) - */ - - /*!\brief Deprecated: Algorithm specific "usage" value - * - * This value must be zero. - */ - unsigned int g_usage; - - /*!\brief Maximum number of threads to use - * - * For multi-threaded implementations, use no more than this number of - * threads. The codec may use fewer threads than allowed. The value - * 0 is equivalent to the value 1. - */ - unsigned int g_threads; - - /*!\brief Bitstream profile to use - * - * Some codecs support a notion of multiple bitstream profiles. Typically - * this maps to a set of features that are turned on or off. Often the - * profile to use is determined by the features of the intended decoder. - * Consult the documentation for the codec to determine the valid values - * for this parameter, or set to zero for a sane default. - */ - unsigned int g_profile; /**< profile of bitstream to use */ - - /*!\brief Width of the frame - * - * This value identifies the presentation resolution of the frame, - * in pixels. Note that the frames passed as input to the encoder must - * have this resolution. Frames will be presented by the decoder in this - * resolution, independent of any spatial resampling the encoder may do. - */ - unsigned int g_w; - - /*!\brief Height of the frame - * - * This value identifies the presentation resolution of the frame, - * in pixels. Note that the frames passed as input to the encoder must - * have this resolution. Frames will be presented by the decoder in this - * resolution, independent of any spatial resampling the encoder may do. - */ - unsigned int g_h; - - /*!\brief Bit-depth of the codec - * - * This value identifies the bit_depth of the codec, - * Only certain bit-depths are supported as identified in the - * vpx_bit_depth_t enum. - */ - vpx_bit_depth_t g_bit_depth; - - /*!\brief Bit-depth of the input frames - * - * This value identifies the bit_depth of the input frames in bits. - * Note that the frames passed as input to the encoder must have - * this bit-depth. - */ - unsigned int g_input_bit_depth; - - /*!\brief Stream timebase units - * - * Indicates the smallest interval of time, in seconds, used by the stream. - * For fixed frame rate material, or variable frame rate material where - * frames are timed at a multiple of a given clock (ex: video capture), - * the \ref RECOMMENDED method is to set the timebase to the reciprocal - * of the frame rate (ex: 1001/30000 for 29.970 Hz NTSC). This allows the - * pts to correspond to the frame number, which can be handy. For - * re-encoding video from containers with absolute time timestamps, the - * \ref RECOMMENDED method is to set the timebase to that of the parent - * container or multimedia framework (ex: 1/1000 for ms, as in FLV). - */ - struct vpx_rational g_timebase; - - /*!\brief Enable error resilient modes. - * - * The error resilient bitfield indicates to the encoder which features - * it should enable to take measures for streaming over lossy or noisy - * links. - */ - vpx_codec_er_flags_t g_error_resilient; - - /*!\brief Multi-pass Encoding Mode - * - * This value should be set to the current phase for multi-pass encoding. - * For single pass, set to #VPX_RC_ONE_PASS. - */ - enum vpx_enc_pass g_pass; - - /*!\brief Allow lagged encoding - * - * If set, this value allows the encoder to consume a number of input - * frames before producing output frames. This allows the encoder to - * base decisions for the current frame on future frames. This does - * increase the latency of the encoding pipeline, so it is not appropriate - * in all situations (ex: realtime encoding). - * - * Note that this is a maximum value -- the encoder may produce frames - * sooner than the given limit. Set this value to 0 to disable this - * feature. - */ - unsigned int g_lag_in_frames; - - /* - * rate control settings (rc) - */ - - /*!\brief Temporal resampling configuration, if supported by the codec. - * - * Temporal resampling allows the codec to "drop" frames as a strategy to - * meet its target data rate. This can cause temporal discontinuities in - * the encoded video, which may appear as stuttering during playback. This - * trade-off is often acceptable, but for many applications is not. It can - * be disabled in these cases. - * - * This threshold is described as a percentage of the target data buffer. - * When the data buffer falls below this percentage of fullness, a - * dropped frame is indicated. Set the threshold to zero (0) to disable - * this feature. - */ - unsigned int rc_dropframe_thresh; - - /*!\brief Enable/disable spatial resampling, if supported by the codec. - * - * Spatial resampling allows the codec to compress a lower resolution - * version of the frame, which is then upscaled by the encoder to the - * correct presentation resolution. This increases visual quality at - * low data rates, at the expense of CPU time on the encoder/decoder. - */ - unsigned int rc_resize_allowed; - - /*!\brief Internal coded frame width. - * - * If spatial resampling is enabled this specifies the width of the - * encoded frame. - */ - unsigned int rc_scaled_width; - - /*!\brief Internal coded frame height. - * - * If spatial resampling is enabled this specifies the height of the - * encoded frame. - */ - unsigned int rc_scaled_height; - - /*!\brief Spatial resampling up watermark. - * - * This threshold is described as a percentage of the target data buffer. - * When the data buffer rises above this percentage of fullness, the - * encoder will step up to a higher resolution version of the frame. - */ - unsigned int rc_resize_up_thresh; - - /*!\brief Spatial resampling down watermark. - * - * This threshold is described as a percentage of the target data buffer. - * When the data buffer falls below this percentage of fullness, the - * encoder will step down to a lower resolution version of the frame. - */ - unsigned int rc_resize_down_thresh; - - /*!\brief Rate control algorithm to use. - * - * Indicates whether the end usage of this stream is to be streamed over - * a bandwidth constrained link, indicating that Constant Bit Rate (CBR) - * mode should be used, or whether it will be played back on a high - * bandwidth link, as from a local disk, where higher variations in - * bitrate are acceptable. - */ - enum vpx_rc_mode rc_end_usage; - - /*!\brief Two-pass stats buffer. - * - * A buffer containing all of the stats packets produced in the first - * pass, concatenated. - */ - vpx_fixed_buf_t rc_twopass_stats_in; - - /*!\brief first pass mb stats buffer. - * - * A buffer containing all of the first pass mb stats packets produced - * in the first pass, concatenated. - */ - vpx_fixed_buf_t rc_firstpass_mb_stats_in; - - /*!\brief Target data rate - * - * Target bandwidth to use for this stream, in kilobits per second. - */ - unsigned int rc_target_bitrate; - - /* - * quantizer settings - */ - - /*!\brief Minimum (Best Quality) Quantizer - * - * The quantizer is the most direct control over the quality of the - * encoded image. The range of valid values for the quantizer is codec - * specific. Consult the documentation for the codec to determine the - * values to use. - */ - unsigned int rc_min_quantizer; - - /*!\brief Maximum (Worst Quality) Quantizer - * - * The quantizer is the most direct control over the quality of the - * encoded image. The range of valid values for the quantizer is codec - * specific. Consult the documentation for the codec to determine the - * values to use. - */ - unsigned int rc_max_quantizer; - - /* - * bitrate tolerance - */ - - /*!\brief Rate control adaptation undershoot control - * - * VP8: Expressed as a percentage of the target bitrate, - * controls the maximum allowed adaptation speed of the codec. - * This factor controls the maximum amount of bits that can - * be subtracted from the target bitrate in order to compensate - * for prior overshoot. - * VP9: Expressed as a percentage of the target bitrate, a threshold - * undershoot level (current rate vs target) beyond which more aggressive - * corrective measures are taken. - * * - * Valid values in the range VP8:0-1000 VP9: 0-100. - */ - unsigned int rc_undershoot_pct; - - /*!\brief Rate control adaptation overshoot control - * - * VP8: Expressed as a percentage of the target bitrate, - * controls the maximum allowed adaptation speed of the codec. - * This factor controls the maximum amount of bits that can - * be added to the target bitrate in order to compensate for - * prior undershoot. - * VP9: Expressed as a percentage of the target bitrate, a threshold - * overshoot level (current rate vs target) beyond which more aggressive - * corrective measures are taken. - * - * Valid values in the range VP8:0-1000 VP9: 0-100. - */ - unsigned int rc_overshoot_pct; - - /* - * decoder buffer model parameters - */ - - /*!\brief Decoder Buffer Size - * - * This value indicates the amount of data that may be buffered by the - * decoding application. Note that this value is expressed in units of - * time (milliseconds). For example, a value of 5000 indicates that the - * client will buffer (at least) 5000ms worth of encoded data. Use the - * target bitrate (#rc_target_bitrate) to convert to bits/bytes, if - * necessary. - */ - unsigned int rc_buf_sz; - - /*!\brief Decoder Buffer Initial Size - * - * This value indicates the amount of data that will be buffered by the - * decoding application prior to beginning playback. This value is - * expressed in units of time (milliseconds). Use the target bitrate - * (#rc_target_bitrate) to convert to bits/bytes, if necessary. - */ - unsigned int rc_buf_initial_sz; - - /*!\brief Decoder Buffer Optimal Size - * - * This value indicates the amount of data that the encoder should try - * to maintain in the decoder's buffer. This value is expressed in units - * of time (milliseconds). Use the target bitrate (#rc_target_bitrate) - * to convert to bits/bytes, if necessary. - */ - unsigned int rc_buf_optimal_sz; - - /* - * 2 pass rate control parameters - */ - - /*!\brief Two-pass mode CBR/VBR bias - * - * Bias, expressed on a scale of 0 to 100, for determining target size - * for the current frame. The value 0 indicates the optimal CBR mode - * value should be used. The value 100 indicates the optimal VBR mode - * value should be used. Values in between indicate which way the - * encoder should "lean." - */ - unsigned int rc_2pass_vbr_bias_pct; - - /*!\brief Two-pass mode per-GOP minimum bitrate - * - * This value, expressed as a percentage of the target bitrate, indicates - * the minimum bitrate to be used for a single GOP (aka "section") - */ - unsigned int rc_2pass_vbr_minsection_pct; - - /*!\brief Two-pass mode per-GOP maximum bitrate - * - * This value, expressed as a percentage of the target bitrate, indicates - * the maximum bitrate to be used for a single GOP (aka "section") - */ - unsigned int rc_2pass_vbr_maxsection_pct; - - /*!\brief Two-pass corpus vbr mode complexity control - * Used only in VP9: A value representing the corpus midpoint complexity - * for corpus vbr mode. This value defaults to 0 which disables corpus vbr - * mode in favour of normal vbr mode. - */ - unsigned int rc_2pass_vbr_corpus_complexity; - - /* - * keyframing settings (kf) - */ - - /*!\brief Keyframe placement mode - * - * This value indicates whether the encoder should place keyframes at a - * fixed interval, or determine the optimal placement automatically - * (as governed by the #kf_min_dist and #kf_max_dist parameters) - */ - enum vpx_kf_mode kf_mode; - - /*!\brief Keyframe minimum interval - * - * This value, expressed as a number of frames, prevents the encoder from - * placing a keyframe nearer than kf_min_dist to the previous keyframe. At - * least kf_min_dist frames non-keyframes will be coded before the next - * keyframe. Set kf_min_dist equal to kf_max_dist for a fixed interval. - */ - unsigned int kf_min_dist; - - /*!\brief Keyframe maximum interval - * - * This value, expressed as a number of frames, forces the encoder to code - * a keyframe if one has not been coded in the last kf_max_dist frames. - * A value of 0 implies all frames will be keyframes. Set kf_min_dist - * equal to kf_max_dist for a fixed interval. - */ - unsigned int kf_max_dist; - - /* - * Spatial scalability settings (ss) - */ - - /*!\brief Number of spatial coding layers. - * - * This value specifies the number of spatial coding layers to be used. - */ - unsigned int ss_number_layers; - - /*!\brief Enable auto alt reference flags for each spatial layer. - * - * These values specify if auto alt reference frame is enabled for each - * spatial layer. - */ - int ss_enable_auto_alt_ref[VPX_SS_MAX_LAYERS]; - - /*!\brief Target bitrate for each spatial layer. - * - * These values specify the target coding bitrate to be used for each - * spatial layer. - */ - unsigned int ss_target_bitrate[VPX_SS_MAX_LAYERS]; - - /*!\brief Number of temporal coding layers. - * - * This value specifies the number of temporal layers to be used. - */ - unsigned int ts_number_layers; - - /*!\brief Target bitrate for each temporal layer. - * - * These values specify the target coding bitrate to be used for each - * temporal layer. - */ - unsigned int ts_target_bitrate[VPX_TS_MAX_LAYERS]; - - /*!\brief Frame rate decimation factor for each temporal layer. - * - * These values specify the frame rate decimation factors to apply - * to each temporal layer. - */ - unsigned int ts_rate_decimator[VPX_TS_MAX_LAYERS]; - - /*!\brief Length of the sequence defining frame temporal layer membership. - * - * This value specifies the length of the sequence that defines the - * membership of frames to temporal layers. For example, if the - * ts_periodicity = 8, then the frames are assigned to coding layers with a - * repeated sequence of length 8. - */ - unsigned int ts_periodicity; - - /*!\brief Template defining the membership of frames to temporal layers. - * - * This array defines the membership of frames to temporal coding layers. - * For a 2-layer encoding that assigns even numbered frames to one temporal - * layer (0) and odd numbered frames to a second temporal layer (1) with - * ts_periodicity=8, then ts_layer_id = (0,1,0,1,0,1,0,1). - */ - unsigned int ts_layer_id[VPX_TS_MAX_PERIODICITY]; - - /*!\brief Target bitrate for each spatial/temporal layer. - * - * These values specify the target coding bitrate to be used for each - * spatial/temporal layer. - * - */ - unsigned int layer_target_bitrate[VPX_MAX_LAYERS]; - - /*!\brief Temporal layering mode indicating which temporal layering scheme to - * use. - * - * The value (refer to VP9E_TEMPORAL_LAYERING_MODE) specifies the - * temporal layering mode to use. - * - */ - int temporal_layering_mode; -} vpx_codec_enc_cfg_t; /**< alias for struct vpx_codec_enc_cfg */ - -/*!\brief vp9 svc extra configure parameters - * - * This defines max/min quantizers and scale factors for each layer - * - */ -typedef struct vpx_svc_parameters { - int max_quantizers[VPX_MAX_LAYERS]; /**< Max Q for each layer */ - int min_quantizers[VPX_MAX_LAYERS]; /**< Min Q for each layer */ - int scaling_factor_num[VPX_MAX_LAYERS]; /**< Scaling factor-numerator */ - int scaling_factor_den[VPX_MAX_LAYERS]; /**< Scaling factor-denominator */ - int speed_per_layer[VPX_MAX_LAYERS]; /**< Speed setting for each sl */ - int temporal_layering_mode; /**< Temporal layering mode */ -} vpx_svc_extra_cfg_t; - -/*!\brief Initialize an encoder instance - * - * Initializes a encoder context using the given interface. Applications - * should call the vpx_codec_enc_init convenience macro instead of this - * function directly, to ensure that the ABI version number parameter - * is properly initialized. - * - * If the library was configured with --disable-multithread, this call - * is not thread safe and should be guarded with a lock if being used - * in a multithreaded context. - * - * \param[in] ctx Pointer to this instance's context. - * \param[in] iface Pointer to the algorithm interface to use. - * \param[in] cfg Configuration to use, if known. May be NULL. - * \param[in] flags Bitfield of VPX_CODEC_USE_* flags - * \param[in] ver ABI version number. Must be set to - * VPX_ENCODER_ABI_VERSION - * \retval #VPX_CODEC_OK - * The decoder algorithm initialized. - * \retval #VPX_CODEC_MEM_ERROR - * Memory allocation failed. - */ -vpx_codec_err_t vpx_codec_enc_init_ver(vpx_codec_ctx_t *ctx, - vpx_codec_iface_t *iface, - const vpx_codec_enc_cfg_t *cfg, - vpx_codec_flags_t flags, int ver); - -/*!\brief Convenience macro for vpx_codec_enc_init_ver() - * - * Ensures the ABI version parameter is properly set. - */ -#define vpx_codec_enc_init(ctx, iface, cfg, flags) \ - vpx_codec_enc_init_ver(ctx, iface, cfg, flags, VPX_ENCODER_ABI_VERSION) - -/*!\brief Initialize multi-encoder instance - * - * Initializes multi-encoder context using the given interface. - * Applications should call the vpx_codec_enc_init_multi convenience macro - * instead of this function directly, to ensure that the ABI version number - * parameter is properly initialized. - * - * \param[in] ctx Pointer to this instance's context. - * \param[in] iface Pointer to the algorithm interface to use. - * \param[in] cfg Configuration to use, if known. May be NULL. - * \param[in] num_enc Total number of encoders. - * \param[in] flags Bitfield of VPX_CODEC_USE_* flags - * \param[in] dsf Pointer to down-sampling factors. - * \param[in] ver ABI version number. Must be set to - * VPX_ENCODER_ABI_VERSION - * \retval #VPX_CODEC_OK - * The decoder algorithm initialized. - * \retval #VPX_CODEC_MEM_ERROR - * Memory allocation failed. - */ -vpx_codec_err_t vpx_codec_enc_init_multi_ver( - vpx_codec_ctx_t *ctx, vpx_codec_iface_t *iface, vpx_codec_enc_cfg_t *cfg, - int num_enc, vpx_codec_flags_t flags, vpx_rational_t *dsf, int ver); - -/*!\brief Convenience macro for vpx_codec_enc_init_multi_ver() - * - * Ensures the ABI version parameter is properly set. - */ -#define vpx_codec_enc_init_multi(ctx, iface, cfg, num_enc, flags, dsf) \ - vpx_codec_enc_init_multi_ver(ctx, iface, cfg, num_enc, flags, dsf, \ - VPX_ENCODER_ABI_VERSION) - -/*!\brief Get a default configuration - * - * Initializes a encoder configuration structure with default values. Supports - * the notion of "usages" so that an algorithm may offer different default - * settings depending on the user's intended goal. This function \ref SHOULD - * be called by all applications to initialize the configuration structure - * before specializing the configuration with application specific values. - * - * \param[in] iface Pointer to the algorithm interface to use. - * \param[out] cfg Configuration buffer to populate. - * \param[in] usage Must be set to 0. - * - * \retval #VPX_CODEC_OK - * The configuration was populated. - * \retval #VPX_CODEC_INCAPABLE - * Interface is not an encoder interface. - * \retval #VPX_CODEC_INVALID_PARAM - * A parameter was NULL, or the usage value was not recognized. - */ -vpx_codec_err_t vpx_codec_enc_config_default(vpx_codec_iface_t *iface, - vpx_codec_enc_cfg_t *cfg, - unsigned int usage); - -/*!\brief Set or change configuration - * - * Reconfigures an encoder instance according to the given configuration. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] cfg Configuration buffer to use - * - * \retval #VPX_CODEC_OK - * The configuration was populated. - * \retval #VPX_CODEC_INCAPABLE - * Interface is not an encoder interface. - * \retval #VPX_CODEC_INVALID_PARAM - * A parameter was NULL, or the usage value was not recognized. - */ -vpx_codec_err_t vpx_codec_enc_config_set(vpx_codec_ctx_t *ctx, - const vpx_codec_enc_cfg_t *cfg); - -/*!\brief Get global stream headers - * - * Retrieves a stream level global header packet, if supported by the codec. - * - * \param[in] ctx Pointer to this instance's context - * - * \retval NULL - * Encoder does not support global header - * \retval Non-NULL - * Pointer to buffer containing global header packet - */ -vpx_fixed_buf_t *vpx_codec_get_global_headers(vpx_codec_ctx_t *ctx); - -/*!\brief deadline parameter analogous to VPx REALTIME mode. */ -#define VPX_DL_REALTIME (1) -/*!\brief deadline parameter analogous to VPx GOOD QUALITY mode. */ -#define VPX_DL_GOOD_QUALITY (1000000) -/*!\brief deadline parameter analogous to VPx BEST QUALITY mode. */ -#define VPX_DL_BEST_QUALITY (0) -/*!\brief Encode a frame - * - * Encodes a video frame at the given "presentation time." The presentation - * time stamp (PTS) \ref MUST be strictly increasing. - * - * The encoder supports the notion of a soft real-time deadline. Given a - * non-zero value to the deadline parameter, the encoder will make a "best - * effort" guarantee to return before the given time slice expires. It is - * implicit that limiting the available time to encode will degrade the - * output quality. The encoder can be given an unlimited time to produce the - * best possible frame by specifying a deadline of '0'. This deadline - * supersedes the VPx notion of "best quality, good quality, realtime". - * Applications that wish to map these former settings to the new deadline - * based system can use the symbols #VPX_DL_REALTIME, #VPX_DL_GOOD_QUALITY, - * and #VPX_DL_BEST_QUALITY. - * - * When the last frame has been passed to the encoder, this function should - * continue to be called, with the img parameter set to NULL. This will - * signal the end-of-stream condition to the encoder and allow it to encode - * any held buffers. Encoding is complete when vpx_codec_encode() is called - * and vpx_codec_get_cx_data() returns no data. - * - * \param[in] ctx Pointer to this instance's context - * \param[in] img Image data to encode, NULL to flush. - * \param[in] pts Presentation time stamp, in timebase units. - * \param[in] duration Duration to show frame, in timebase units. - * \param[in] flags Flags to use for encoding this frame. - * \param[in] deadline Time to spend encoding, in microseconds. (0=infinite) - * - * \retval #VPX_CODEC_OK - * The configuration was populated. - * \retval #VPX_CODEC_INCAPABLE - * Interface is not an encoder interface. - * \retval #VPX_CODEC_INVALID_PARAM - * A parameter was NULL, the image format is unsupported, etc. - */ -vpx_codec_err_t vpx_codec_encode(vpx_codec_ctx_t *ctx, const vpx_image_t *img, - vpx_codec_pts_t pts, unsigned long duration, - vpx_enc_frame_flags_t flags, - unsigned long deadline); - -/*!\brief Set compressed data output buffer - * - * Sets the buffer that the codec should output the compressed data - * into. This call effectively sets the buffer pointer returned in the - * next VPX_CODEC_CX_FRAME_PKT packet. Subsequent packets will be - * appended into this buffer. The buffer is preserved across frames, - * so applications must periodically call this function after flushing - * the accumulated compressed data to disk or to the network to reset - * the pointer to the buffer's head. - * - * `pad_before` bytes will be skipped before writing the compressed - * data, and `pad_after` bytes will be appended to the packet. The size - * of the packet will be the sum of the size of the actual compressed - * data, pad_before, and pad_after. The padding bytes will be preserved - * (not overwritten). - * - * Note that calling this function does not guarantee that the returned - * compressed data will be placed into the specified buffer. In the - * event that the encoded data will not fit into the buffer provided, - * the returned packet \ref MAY point to an internal buffer, as it would - * if this call were never used. In this event, the output packet will - * NOT have any padding, and the application must free space and copy it - * to the proper place. This is of particular note in configurations - * that may output multiple packets for a single encoded frame (e.g., lagged - * encoding) or if the application does not reset the buffer periodically. - * - * Applications may restore the default behavior of the codec providing - * the compressed data buffer by calling this function with a NULL - * buffer. - * - * Applications \ref MUSTNOT call this function during iteration of - * vpx_codec_get_cx_data(). - * - * \param[in] ctx Pointer to this instance's context - * \param[in] buf Buffer to store compressed data into - * \param[in] pad_before Bytes to skip before writing compressed data - * \param[in] pad_after Bytes to skip after writing compressed data - * - * \retval #VPX_CODEC_OK - * The buffer was set successfully. - * \retval #VPX_CODEC_INVALID_PARAM - * A parameter was NULL, the image format is unsupported, etc. - */ -vpx_codec_err_t vpx_codec_set_cx_data_buf(vpx_codec_ctx_t *ctx, - const vpx_fixed_buf_t *buf, - unsigned int pad_before, - unsigned int pad_after); - -/*!\brief Encoded data iterator - * - * Iterates over a list of data packets to be passed from the encoder to the - * application. The different kinds of packets available are enumerated in - * #vpx_codec_cx_pkt_kind. - * - * #VPX_CODEC_CX_FRAME_PKT packets should be passed to the application's - * muxer. Multiple compressed frames may be in the list. - * #VPX_CODEC_STATS_PKT packets should be appended to a global buffer. - * - * The application \ref MUST silently ignore any packet kinds that it does - * not recognize or support. - * - * The data buffers returned from this function are only guaranteed to be - * valid until the application makes another call to any vpx_codec_* function. - * - * \param[in] ctx Pointer to this instance's context - * \param[in,out] iter Iterator storage, initialized to NULL - * - * \return Returns a pointer to an output data packet (compressed frame data, - * two-pass statistics, etc.) or NULL to signal end-of-list. - * - */ -const vpx_codec_cx_pkt_t *vpx_codec_get_cx_data(vpx_codec_ctx_t *ctx, - vpx_codec_iter_t *iter); - -/*!\brief Get Preview Frame - * - * Returns an image that can be used as a preview. Shows the image as it would - * exist at the decompressor. The application \ref MUST NOT write into this - * image buffer. - * - * \param[in] ctx Pointer to this instance's context - * - * \return Returns a pointer to a preview image, or NULL if no image is - * available. - * - */ -const vpx_image_t *vpx_codec_get_preview_frame(vpx_codec_ctx_t *ctx); - -/*!@} - end defgroup encoder*/ -#ifdef __cplusplus -} -#endif -#endif // VPX_VPX_VPX_ENCODER_H_ diff --git a/vpx-encoder/android_libs/x86_64/include/vpx/vpx_frame_buffer.h b/vpx-encoder/android_libs/x86_64/include/vpx/vpx_frame_buffer.h deleted file mode 100644 index 2813ca6d..00000000 --- a/vpx-encoder/android_libs/x86_64/include/vpx/vpx_frame_buffer.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2014 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef VPX_VPX_VPX_FRAME_BUFFER_H_ -#define VPX_VPX_VPX_FRAME_BUFFER_H_ - -/*!\file - * \brief Describes the decoder external frame buffer interface. - */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "./vpx_integer.h" - -/*!\brief The maximum number of work buffers used by libvpx. - * Support maximum 4 threads to decode video in parallel. - * Each thread will use one work buffer. - * TODO(hkuang): Add support to set number of worker threads dynamically. - */ -#define VPX_MAXIMUM_WORK_BUFFERS 8 - -/*!\brief The maximum number of reference buffers that a VP9 encoder may use. - */ -#define VP9_MAXIMUM_REF_BUFFERS 8 - -/*!\brief External frame buffer - * - * This structure holds allocated frame buffers used by the decoder. - */ -typedef struct vpx_codec_frame_buffer { - uint8_t *data; /**< Pointer to the data buffer */ - size_t size; /**< Size of data in bytes */ - void *priv; /**< Frame's private data */ -} vpx_codec_frame_buffer_t; - -/*!\brief get frame buffer callback prototype - * - * This callback is invoked by the decoder to retrieve data for the frame - * buffer in order for the decode call to complete. The callback must - * allocate at least min_size in bytes and assign it to fb->data. The callback - * must zero out all the data allocated. Then the callback must set fb->size - * to the allocated size. The application does not need to align the allocated - * data. The callback is triggered when the decoder needs a frame buffer to - * decode a compressed image into. This function may be called more than once - * for every call to vpx_codec_decode. The application may set fb->priv to - * some data which will be passed back in the ximage and the release function - * call. |fb| is guaranteed to not be NULL. On success the callback must - * return 0. Any failure the callback must return a value less than 0. - * - * \param[in] priv Callback's private data - * \param[in] min_size Size in bytes needed by the buffer - * \param[in,out] fb Pointer to vpx_codec_frame_buffer_t - */ -typedef int (*vpx_get_frame_buffer_cb_fn_t)(void *priv, size_t min_size, - vpx_codec_frame_buffer_t *fb); - -/*!\brief release frame buffer callback prototype - * - * This callback is invoked by the decoder when the frame buffer is not - * referenced by any other buffers. |fb| is guaranteed to not be NULL. On - * success the callback must return 0. Any failure the callback must return - * a value less than 0. - * - * \param[in] priv Callback's private data - * \param[in] fb Pointer to vpx_codec_frame_buffer_t - */ -typedef int (*vpx_release_frame_buffer_cb_fn_t)(void *priv, - vpx_codec_frame_buffer_t *fb); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // VPX_VPX_VPX_FRAME_BUFFER_H_ diff --git a/vpx-encoder/android_libs/x86_64/include/vpx/vpx_image.h b/vpx-encoder/android_libs/x86_64/include/vpx/vpx_image.h deleted file mode 100644 index 98be5966..00000000 --- a/vpx-encoder/android_libs/x86_64/include/vpx/vpx_image.h +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -/*!\file - * \brief Describes the vpx image descriptor and associated operations - * - */ -#ifndef VPX_VPX_VPX_IMAGE_H_ -#define VPX_VPX_VPX_IMAGE_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*!\brief Current ABI version number - * - * \internal - * If this file is altered in any way that changes the ABI, this value - * must be bumped. Examples include, but are not limited to, changing - * types, removing or reassigning enums, adding/removing/rearranging - * fields to structures - */ -#define VPX_IMAGE_ABI_VERSION (5) /**<\hideinitializer*/ - -#define VPX_IMG_FMT_PLANAR 0x100 /**< Image is a planar format. */ -#define VPX_IMG_FMT_UV_FLIP 0x200 /**< V plane precedes U in memory. */ -#define VPX_IMG_FMT_HAS_ALPHA 0x400 /**< Image has an alpha channel. */ -#define VPX_IMG_FMT_HIGHBITDEPTH 0x800 /**< Image uses 16bit framebuffer. */ - -/*!\brief List of supported image formats */ -typedef enum vpx_img_fmt { - VPX_IMG_FMT_NONE, - VPX_IMG_FMT_YV12 = - VPX_IMG_FMT_PLANAR | VPX_IMG_FMT_UV_FLIP | 1, /**< planar YVU */ - VPX_IMG_FMT_I420 = VPX_IMG_FMT_PLANAR | 2, - VPX_IMG_FMT_I422 = VPX_IMG_FMT_PLANAR | 5, - VPX_IMG_FMT_I444 = VPX_IMG_FMT_PLANAR | 6, - VPX_IMG_FMT_I440 = VPX_IMG_FMT_PLANAR | 7, - VPX_IMG_FMT_I42016 = VPX_IMG_FMT_I420 | VPX_IMG_FMT_HIGHBITDEPTH, - VPX_IMG_FMT_I42216 = VPX_IMG_FMT_I422 | VPX_IMG_FMT_HIGHBITDEPTH, - VPX_IMG_FMT_I44416 = VPX_IMG_FMT_I444 | VPX_IMG_FMT_HIGHBITDEPTH, - VPX_IMG_FMT_I44016 = VPX_IMG_FMT_I440 | VPX_IMG_FMT_HIGHBITDEPTH -} vpx_img_fmt_t; /**< alias for enum vpx_img_fmt */ - -/*!\brief List of supported color spaces */ -typedef enum vpx_color_space { - VPX_CS_UNKNOWN = 0, /**< Unknown */ - VPX_CS_BT_601 = 1, /**< BT.601 */ - VPX_CS_BT_709 = 2, /**< BT.709 */ - VPX_CS_SMPTE_170 = 3, /**< SMPTE.170 */ - VPX_CS_SMPTE_240 = 4, /**< SMPTE.240 */ - VPX_CS_BT_2020 = 5, /**< BT.2020 */ - VPX_CS_RESERVED = 6, /**< Reserved */ - VPX_CS_SRGB = 7 /**< sRGB */ -} vpx_color_space_t; /**< alias for enum vpx_color_space */ - -/*!\brief List of supported color range */ -typedef enum vpx_color_range { - VPX_CR_STUDIO_RANGE = 0, /**< Y [16..235], UV [16..240] */ - VPX_CR_FULL_RANGE = 1 /**< YUV/RGB [0..255] */ -} vpx_color_range_t; /**< alias for enum vpx_color_range */ - -/**\brief Image Descriptor */ -typedef struct vpx_image { - vpx_img_fmt_t fmt; /**< Image Format */ - vpx_color_space_t cs; /**< Color Space */ - vpx_color_range_t range; /**< Color Range */ - - /* Image storage dimensions */ - unsigned int w; /**< Stored image width */ - unsigned int h; /**< Stored image height */ - unsigned int bit_depth; /**< Stored image bit-depth */ - - /* Image display dimensions */ - unsigned int d_w; /**< Displayed image width */ - unsigned int d_h; /**< Displayed image height */ - - /* Image intended rendering dimensions */ - unsigned int r_w; /**< Intended rendering image width */ - unsigned int r_h; /**< Intended rendering image height */ - - /* Chroma subsampling info */ - unsigned int x_chroma_shift; /**< subsampling order, X */ - unsigned int y_chroma_shift; /**< subsampling order, Y */ - -/* Image data pointers. */ -#define VPX_PLANE_PACKED 0 /**< To be used for all packed formats */ -#define VPX_PLANE_Y 0 /**< Y (Luminance) plane */ -#define VPX_PLANE_U 1 /**< U (Chroma) plane */ -#define VPX_PLANE_V 2 /**< V (Chroma) plane */ -#define VPX_PLANE_ALPHA 3 /**< A (Transparency) plane */ - unsigned char *planes[4]; /**< pointer to the top left pixel for each plane */ - int stride[4]; /**< stride between rows for each plane */ - - int bps; /**< bits per sample (for packed formats) */ - - /*!\brief The following member may be set by the application to associate - * data with this image. - */ - void *user_priv; - - /* The following members should be treated as private. */ - unsigned char *img_data; /**< private */ - int img_data_owner; /**< private */ - int self_allocd; /**< private */ - - void *fb_priv; /**< Frame buffer data associated with the image. */ -} vpx_image_t; /**< alias for struct vpx_image */ - -/**\brief Representation of a rectangle on a surface */ -typedef struct vpx_image_rect { - unsigned int x; /**< leftmost column */ - unsigned int y; /**< topmost row */ - unsigned int w; /**< width */ - unsigned int h; /**< height */ -} vpx_image_rect_t; /**< alias for struct vpx_image_rect */ - -/*!\brief Open a descriptor, allocating storage for the underlying image - * - * Returns a descriptor for storing an image of the given format. The - * storage for the descriptor is allocated on the heap. - * - * \param[in] img Pointer to storage for descriptor. If this parameter - * is NULL, the storage for the descriptor will be - * allocated on the heap. - * \param[in] fmt Format for the image - * \param[in] d_w Width of the image - * \param[in] d_h Height of the image - * \param[in] align Alignment, in bytes, of the image buffer and - * each row in the image(stride). - * - * \return Returns a pointer to the initialized image descriptor. If the img - * parameter is non-null, the value of the img parameter will be - * returned. - */ -vpx_image_t *vpx_img_alloc(vpx_image_t *img, vpx_img_fmt_t fmt, - unsigned int d_w, unsigned int d_h, - unsigned int align); - -/*!\brief Open a descriptor, using existing storage for the underlying image - * - * Returns a descriptor for storing an image of the given format. The - * storage for descriptor has been allocated elsewhere, and a descriptor is - * desired to "wrap" that storage. - * - * \param[in] img Pointer to storage for descriptor. If this - * parameter is NULL, the storage for the descriptor - * will be allocated on the heap. - * \param[in] fmt Format for the image - * \param[in] d_w Width of the image - * \param[in] d_h Height of the image - * \param[in] stride_align Alignment, in bytes, of each row in the image. - * \param[in] img_data Storage to use for the image - * - * \return Returns a pointer to the initialized image descriptor. If the img - * parameter is non-null, the value of the img parameter will be - * returned. - */ -vpx_image_t *vpx_img_wrap(vpx_image_t *img, vpx_img_fmt_t fmt, unsigned int d_w, - unsigned int d_h, unsigned int stride_align, - unsigned char *img_data); - -/*!\brief Set the rectangle identifying the displayed portion of the image - * - * Updates the displayed rectangle (aka viewport) on the image surface to - * match the specified coordinates and size. - * - * \param[in] img Image descriptor - * \param[in] x leftmost column - * \param[in] y topmost row - * \param[in] w width - * \param[in] h height - * - * \return 0 if the requested rectangle is valid, nonzero otherwise. - */ -int vpx_img_set_rect(vpx_image_t *img, unsigned int x, unsigned int y, - unsigned int w, unsigned int h); - -/*!\brief Flip the image vertically (top for bottom) - * - * Adjusts the image descriptor's pointers and strides to make the image - * be referenced upside-down. - * - * \param[in] img Image descriptor - */ -void vpx_img_flip(vpx_image_t *img); - -/*!\brief Close an image descriptor - * - * Frees all allocated storage associated with an image descriptor. - * - * \param[in] img Image descriptor - */ -void vpx_img_free(vpx_image_t *img); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // VPX_VPX_VPX_IMAGE_H_ diff --git a/vpx-encoder/android_libs/x86_64/include/vpx/vpx_integer.h b/vpx-encoder/android_libs/x86_64/include/vpx/vpx_integer.h deleted file mode 100644 index 4129d156..00000000 --- a/vpx-encoder/android_libs/x86_64/include/vpx/vpx_integer.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2010 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef VPX_VPX_VPX_INTEGER_H_ -#define VPX_VPX_VPX_INTEGER_H_ - -/* get ptrdiff_t, size_t, wchar_t, NULL */ -#include - -#if defined(_MSC_VER) -#define VPX_FORCE_INLINE __forceinline -#define VPX_INLINE __inline -#else -#define VPX_FORCE_INLINE __inline__ __attribute__((always_inline)) -// TODO(jbb): Allow a way to force inline off for older compilers. -#define VPX_INLINE inline -#endif - -/* Assume platforms have the C99 standard integer types. */ - -#if defined(__cplusplus) -#if !defined(__STDC_FORMAT_MACROS) -#define __STDC_FORMAT_MACROS -#endif -#if !defined(__STDC_LIMIT_MACROS) -#define __STDC_LIMIT_MACROS -#endif -#endif // __cplusplus - -#include -#include - -#endif // VPX_VPX_VPX_INTEGER_H_ diff --git a/vpx-encoder/android_libs/x86_64/lib/libvpx.a b/vpx-encoder/android_libs/x86_64/lib/libvpx.a deleted file mode 100644 index 8f0169c7..00000000 Binary files a/vpx-encoder/android_libs/x86_64/lib/libvpx.a and /dev/null differ diff --git a/vpx-encoder/android_libs/x86_64/lib/pkgconfig/vpx.pc b/vpx-encoder/android_libs/x86_64/lib/pkgconfig/vpx.pc deleted file mode 100644 index a610938b..00000000 --- a/vpx-encoder/android_libs/x86_64/lib/pkgconfig/vpx.pc +++ /dev/null @@ -1,14 +0,0 @@ -# pkg-config file from libvpx v1.8.0 -prefix=/Users/andy/go/src/github.com/webmproject/jni/vpx-android/output/android/x86_64 -exec_prefix=${prefix} -libdir=${prefix}/lib -includedir=${prefix}/include - -Name: vpx -Description: WebM Project VPx codec implementation -Version: 1.8.0 -Requires: -Conflicts: -Libs: -L${libdir} -lvpx -lm -Libs.private: -lm -Cflags: -I${includedir} diff --git a/vpx-encoder/encoder.go b/vpx-encoder/encoder.go index 1b3d30e4..24393e75 100644 --- a/vpx-encoder/encoder.go +++ b/vpx-encoder/encoder.go @@ -8,10 +8,7 @@ import ( // https://chromium.googlesource.com/webm/libvpx/+/master/examples/simple_encoder.c /* -#cgo android CFLAGS: -I${SRCDIR}/android_include -#cgo android,arm LDFLAGS: -L${SRCDIR}/android_libs/armeabi-v7a/lib -lvpx -lm -#cgo android,386 LDFLAGS: -L${SRCDIR}/android_libs/x86/lib -lvpx -lm -#cgo !android pkg-config: vpx +#cgo pkg-config: vpx #include #include "vpx/vpx_encoder.h" #include "tools_common.h"