[FFmpeg-devel] [PATCH] libavcodec/vp9: export block type in VP9

Yongle Lin yongle.lin.94 at gmail.com
Thu Jul 16 02:11:08 EEST 2020


---
 libavcodec/vp9.c      | 10 ++++++++++
 libavcodec/vp9block.c |  6 ++++++
 libavcodec/vp9dec.h   |  4 ++++
 3 files changed, 20 insertions(+)

diff --git a/libavcodec/vp9.c b/libavcodec/vp9.c
index fd0bab14a2..6bd6bd4fa9 100644
--- a/libavcodec/vp9.c
+++ b/libavcodec/vp9.c
@@ -1541,6 +1541,16 @@ static int vp9_export_enc_params(VP9Context *s, VP9Frame *frame)
                     if (s->s.h.segmentation.absolute_vals)
                         b->delta_qp -= par->qp;
                 }
+
+                if (td->block_structure[block_tile].skip)
+                    b->flags |= AV_VIDEO_ENC_BLOCK_SKIP;
+                if (td->block_structure[block_tile].intra) {
+                    b->flags |= AV_VIDEO_ENC_BLOCK_INTRA;
+                } else {
+                    b->ref[0] = td->block_structure[block_tile].ref[0];
+                    if (td->block_structure[block_tile].comp)
+                        b->ref[1] = td->block_structure[block_tile].ref[1];
+                }
             }
         }
     }
diff --git a/libavcodec/vp9block.c b/libavcodec/vp9block.c
index ec16e26c69..3b500c8259 100644
--- a/libavcodec/vp9block.c
+++ b/libavcodec/vp9block.c
@@ -1295,6 +1295,12 @@ void ff_vp9_decode_block(VP9TileData *td, int row, int col,
             td->block_structure[td->nb_block_structure].col = col;
             td->block_structure[td->nb_block_structure].block_size_idx_x = av_log2(w4);
             td->block_structure[td->nb_block_structure].block_size_idx_y = av_log2(h4);
+
+            td->block_structure[td->nb_block_structure].intra = b->intra;
+            td->block_structure[td->nb_block_structure].skip = b->skip;
+            td->block_structure[td->nb_block_structure].comp = b->comp;
+            td->block_structure[td->nb_block_structure].ref[0] = b->ref[0];
+            td->block_structure[td->nb_block_structure].ref[1] = b->ref[1];
             td->nb_block_structure++;
         }
 
diff --git a/libavcodec/vp9dec.h b/libavcodec/vp9dec.h
index cc2440b854..6ecb544274 100644
--- a/libavcodec/vp9dec.h
+++ b/libavcodec/vp9dec.h
@@ -231,6 +231,10 @@ struct VP9TileData {
         unsigned int col:13;
         unsigned int block_size_idx_x:2;
         unsigned int block_size_idx_y:2;
+        unsigned int intra:1;
+        unsigned int skip:1;
+        unsigned int comp:1;
+        uint8_t ref[2];
     } *block_structure;
     unsigned int nb_block_structure;
 };
-- 
2.27.0.389.gc38d7665816-goog



More information about the ffmpeg-devel mailing list