This is based on motion_type.h Signed-off-by: Michael Niedermayer <mich...@niedermayer.cc> --- libavutil/block_type.h | 107 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 libavutil/block_type.h
diff --git a/libavutil/block_type.h b/libavutil/block_type.h new file mode 100644 index 0000000000..3f53f1d082 --- /dev/null +++ b/libavutil/block_type.h @@ -0,0 +1,107 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVUTIL_BLOCK_TYPE_H +#define AVUTIL_BLOCK_TYPE_H + +#include <stdint.h> + + +typedef struct AVBlockType { + /** + * Block type. + * 1: Prediction (this can be spatial prediction or motion compensation for example) + * 2: Transform + * 3: Residual + * 4: Filter + * 5: Metadata + * + * Multiple Filter, Transform and prediction blocks are allowed, for example + * for bidirectional motion compensation. Multiple residuals are allowed, for + * example DC and AC residual. + */ + uint8_t type; + /** + * Bitmask that lists which planes (for example: Y:1,Cb:2,Cr:4,Alpha:8) + * this block applies to. + */ + uint8_t plane_mask; + /** + * The field (top:1, bottom:2) this block applies to. + */ + uint8_t field_mask; + uint8_t name[16]; + /** + * Left Top corner position. This can be outside of the vissible frame. + */ + int32_t x, y; + /** + * Width and height of the block. + */ + uint16_t w, h; + /** + * Number identifying the slice the Block is in. + */ + uint16_t slice_num; + /** + * Location in bits where the block related information is stored. can be -1 + */ + uint32_t block_index, block_bits; + + /** + * Main Direction, 0 is horizontal, 48 is vertical, + * values 0 to 95 follow clockwise direction. + * 255 means that the block has no direction. + * This represents the main direction of a transform, prediction or filter + */ + uint8_t direction; + + /** + * Quantization parameter, a value of 0x8000 means lossless, 0x7FFF means not applicable + * for MC prediction this is the precission of the motion vector. + */ + int16_t qp; + + /** + * Where the prediction comes from; negative value when it comes + * from the past, positive value when it comes from the future. + * 0 For Intra. + */ + int32_t source; + /** + * Motion vector + * src_x = dst_x + motion_x / qp + * src_y = dst_y + motion_y / qp + */ + int32_t motion_x, motion_y; + + /** + * Extra flag information. + */ + uint64_t flags; +#define AV_BLOCK_TYPE_FLAG_INTERLACED 0x0000001 ///< Block is interlaced + +#define AV_BLOCK_TYPE_FLAG_LEAF 0x0001000 ///< Block is a leaf block, it is not further split +#define AV_BLOCK_TYPE_FLAG_ROOT 0x0002000 ///< Block is a root block, it is not contained in a larger block + +#define AV_BLOCK_TYPE_FLAG_CONCEALED 0x0010000 ///< Block has been replaced by error conclealment +#define AV_BLOCK_TYPE_FLAG_DAMAGED 0x0020000 ///< Block has been damaged + +} AVBlockType; + +#endif /* AVUTIL_BLOCK_TYPE_H */ -- 2.15.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel