diff mbox

[FFmpeg-devel] avutil: add API for mb types.

Message ID 20171112012920.26183-1-michael@niedermayer.cc
State Superseded
Headers show

Commit Message

Michael Niedermayer Nov. 12, 2017, 1:29 a.m. UTC
This is based on motion_type.h

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
---
 libavutil/block_type.h | 107 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 107 insertions(+)
 create mode 100644 libavutil/block_type.h
diff mbox

Patch

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 */