mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-13 22:00:47 +01:00

This is a reland of 3097008de0
Patchset 1 is a pure reland. Patchset 2 contains a bugfix plus a test
covering that case.
Bug: webrtc:12354, chromium:1230448
Original change's description:
> Rename vp9::FrameInfo to vp9::UncompressedHeader and add more fields.
>
> These fields will be used for bitstream validation in upcoming CLs.
> A new vp9_constants.h file is also added, containing common constants
> defined by the bitstream spec.
>
> Bug: webrtc:12354
> Change-Id: If04256d83409069c8bee43ad41aed41c3707dfd3
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/226060
> Commit-Queue: Erik Språng <sprang@webrtc.org>
> Reviewed-by: Philip Eliasson <philipel@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#34476}
Bug: webrtc:12354
Change-Id: Ibd301eb458a6104b562cefbc0e616c39b54fb38b
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/229060
Commit-Queue: Erik Språng <sprang@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#34789}
198 lines
7.1 KiB
C++
198 lines
7.1 KiB
C++
/*
|
|
* Copyright (c) 2021 The WebRTC 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 MODULES_VIDEO_CODING_UTILITY_VP9_CONSTANTS_H_
|
|
#define MODULES_VIDEO_CODING_UTILITY_VP9_CONSTANTS_H_
|
|
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#include <string>
|
|
|
|
namespace webrtc {
|
|
|
|
// Number of frames that can be stored for future reference.
|
|
constexpr size_t kVp9NumRefFrames = 8;
|
|
// Number of frame contexts that can be store for future reference.
|
|
constexpr size_t kVp9NumFrameContexts = 4;
|
|
// Each inter frame can use up to 3 frames for reference.
|
|
constexpr size_t kVp9RefsPerFrame = 3;
|
|
// Number of values that can be decoded for mv_fr.
|
|
constexpr size_t kVp9MvFrSize = 4;
|
|
// Number of positions to search in motion vector prediction.
|
|
constexpr size_t kVp9MvrefNeighbours = 8;
|
|
// Number of contexts when decoding intra_mode .
|
|
constexpr size_t kVp9BlockSizeGroups = 4;
|
|
// Number of different block sizes used.
|
|
constexpr size_t kVp9BlockSizes = 13;
|
|
// Sentinel value to mark partition choices that are illegal.
|
|
constexpr size_t kVp9BlockInvalid = 14;
|
|
// Number of contexts when decoding partition.
|
|
constexpr size_t kVp9PartitionContexts = 16;
|
|
// Smallest size of a mode info block.
|
|
constexpr size_t kVp9MiSize = 8;
|
|
// Minimum width of a tile in units of superblocks (although tiles on
|
|
// the right hand edge can be narrower).
|
|
constexpr size_t kVp9MinTileWidth_B64 = 4;
|
|
// Maximum width of a tile in units of superblocks.
|
|
constexpr size_t kVp9MaxTileWidth_B64 = 64;
|
|
// Number of motion vectors returned by find_mv_refs process.
|
|
constexpr size_t kVp9MaxMvRefCandidates = 2;
|
|
// Number of values that can be derived for ref_frame.
|
|
constexpr size_t kVp9MaxRefFrames = 4;
|
|
// Number of contexts for is_inter.
|
|
constexpr size_t kVp9IsInterContexts = 4;
|
|
// Number of contexts for comp_mode.
|
|
constexpr size_t kVp9CompModeContexts = 5;
|
|
// Number of contexts for single_ref and comp_ref.
|
|
constexpr size_t kVp9RefContexts = 5;
|
|
// Number of segments allowed in segmentation map.
|
|
constexpr size_t kVp9MaxSegments = 8;
|
|
// Index for quantizer segment feature.
|
|
constexpr size_t kVp9SegLvlAlt_Q = 0;
|
|
// Index for loop filter segment feature.
|
|
constexpr size_t kVp9SegLvlAlt_L = 1;
|
|
// Index for reference frame segment feature.
|
|
constexpr size_t kVp9SegLvlRefFrame = 2;
|
|
// Index for skip segment feature.
|
|
constexpr size_t kVp9SegLvlSkip = 3;
|
|
// Number of segment features.
|
|
constexpr size_t kVp9SegLvlMax = 4;
|
|
// Number of different plane types (Y or UV).
|
|
constexpr size_t kVp9BlockTypes = 2;
|
|
// Number of different prediction types (intra or inter).
|
|
constexpr size_t kVp9RefTypes = 2;
|
|
// Number of coefficient bands.
|
|
constexpr size_t kVp9CoefBands = 6;
|
|
// Number of contexts for decoding coefficients.
|
|
constexpr size_t kVp9PrevCoefContexts = 6;
|
|
// Number of coefficient probabilities that are directly transmitted.
|
|
constexpr size_t kVp9UnconstrainedNodes = 3;
|
|
// Number of contexts for transform size.
|
|
constexpr size_t kVp9TxSizeContexts = 2;
|
|
// Number of values for interp_filter.
|
|
constexpr size_t kVp9SwitchableFilters = 3;
|
|
// Number of contexts for interp_filter.
|
|
constexpr size_t kVp9InterpFilterContexts = 4;
|
|
// Number of contexts for decoding skip.
|
|
constexpr size_t kVp9SkipContexts = 3;
|
|
// Number of values for partition.
|
|
constexpr size_t kVp9PartitionTypes = 4;
|
|
// Number of values for tx_size.
|
|
constexpr size_t kVp9TxSizes = 4;
|
|
// Number of values for tx_mode.
|
|
constexpr size_t kVp9TxModes = 5;
|
|
// Inverse transform rows with DCT and columns with DCT.
|
|
constexpr size_t kVp9DctDct = 0;
|
|
// Inverse transform rows with DCT and columns with ADST.
|
|
constexpr size_t kVp9AdstDct = 1;
|
|
// Inverse transform rows with ADST and columns with DCT.
|
|
constexpr size_t kVp9DctAdst = 2;
|
|
// Inverse transform rows with ADST and columns with ADST.
|
|
constexpr size_t kVp9AdstAdst = 3;
|
|
// Number of values for y_mode.
|
|
constexpr size_t kVp9MbModeCount = 14;
|
|
// Number of values for intra_mode.
|
|
constexpr size_t kVp9IntraModes = 10;
|
|
// Number of values for inter_mode.
|
|
constexpr size_t kVp9InterModes = 4;
|
|
// Number of contexts for inter_mode.
|
|
constexpr size_t kVp9InterModeContexts = 7;
|
|
// Number of values for mv_joint.
|
|
constexpr size_t kVp9MvJoints = 4;
|
|
// Number of values for mv_class.
|
|
constexpr size_t kVp9MvClasses = 11;
|
|
// Number of values for mv_class0_bit.
|
|
constexpr size_t kVp9Class0Size = 2;
|
|
// Maximum number of bits for decoding motion vectors.
|
|
constexpr size_t kVp9MvOffsetBits = 10;
|
|
// Number of values allowed for a probability adjustment.
|
|
constexpr size_t kVp9MaxProb = 255;
|
|
// Number of different mode types for loop filtering.
|
|
constexpr size_t kVp9MaxModeLfDeltas = 2;
|
|
// Threshold at which motion vectors are considered large.
|
|
constexpr size_t kVp9CompandedMvrefThresh = 8;
|
|
// Maximum value used for loop filtering.
|
|
constexpr size_t kVp9MaxLoopFilter = 63;
|
|
// Number of bits of precision when scaling reference frames.
|
|
constexpr size_t kVp9RefScaleShift = 14;
|
|
// Number of bits of precision when performing inter prediction.
|
|
constexpr size_t kVp9SubpelBits = 4;
|
|
// 1 << kVp9SubpelBits.
|
|
constexpr size_t kVp9SubpelShifts = 16;
|
|
// kVp9SubpelShifts - 1.
|
|
constexpr size_t kVp9SubpelMask = 15;
|
|
// Value used when clipping motion vectors.
|
|
constexpr size_t kVp9MvBorder = 128;
|
|
// Value used when clipping motion vectors.
|
|
constexpr size_t kVp9InterpExtend = 4;
|
|
// Value used when clipping motion vectors.
|
|
constexpr size_t kVp9Borderinpixels = 160;
|
|
// Value used in adapting probabilities.
|
|
constexpr size_t kVp9MaxUpdateFactor = 128;
|
|
// Value used in adapting probabilities.
|
|
constexpr size_t kVp9CountSat = 20;
|
|
// Both candidates use ZEROMV.
|
|
constexpr size_t kVp9BothZero = 0;
|
|
// One candidate uses ZEROMV, one uses NEARMV or NEARESTMV.
|
|
constexpr size_t kVp9ZeroPlusPredicted = 1;
|
|
// Both candidates use NEARMV or NEARESTMV.
|
|
constexpr size_t kVp9BothPredicted = 2;
|
|
// One candidate uses NEWMV, one uses ZEROMV.
|
|
constexpr size_t kVp9NewPlusNonIntra = 3;
|
|
// Both candidates use NEWMV.
|
|
constexpr size_t kVp9BothNew = 4;
|
|
// One candidate uses intra prediction, one uses inter prediction.
|
|
constexpr size_t kVp9IntraPlusNonIntra = 5;
|
|
// Both candidates use intra prediction.
|
|
constexpr size_t kVp9BothIntra = 6;
|
|
// Sentinel value marking a case that can never occur.
|
|
constexpr size_t kVp9InvalidCase = 9;
|
|
|
|
enum class Vp9TxMode : uint8_t {
|
|
kOnly4X4 = 0,
|
|
kAllow8X8 = 1,
|
|
kAllow16x16 = 2,
|
|
kAllow32x32 = 3,
|
|
kTxModeSelect = 4
|
|
};
|
|
|
|
enum Vp9BlockSize : uint8_t {
|
|
kBlock4X4 = 0,
|
|
kBlock4X8 = 1,
|
|
kBlock8X4 = 2,
|
|
kBlock8X8 = 3,
|
|
kBlock8X16 = 4,
|
|
kBlock16X8 = 5,
|
|
kBlock16X16 = 6,
|
|
kBlock16X32 = 7,
|
|
kBlock32X16 = 8,
|
|
kBlock32X32 = 9,
|
|
kBlock32X64 = 10,
|
|
kBlock64X32 = 11,
|
|
kBlock64X64 = 12
|
|
};
|
|
|
|
enum Vp9Partition : uint8_t {
|
|
kPartitionNone = 0,
|
|
kPartitionHorizontal = 1,
|
|
kPartitionVertical = 2,
|
|
kPartitionSplit = 3
|
|
};
|
|
|
|
enum class Vp9ReferenceMode : uint8_t {
|
|
kSingleReference = 0,
|
|
kCompoundReference = 1,
|
|
kReferenceModeSelect = 2,
|
|
};
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // MODULES_VIDEO_CODING_UTILITY_VP9_CONSTANTS_H_
|