shithub: dav1d

Download patch

ref: 367d785a4e70b3e43eee234b3c745b047e3fbd40
parent: 6cb362d015ba0592eb72eb3face5ed806d20c738
author: James Almer <jamrial@gmail.com>
date: Wed Oct 24 14:02:22 EDT 2018

meson: add "-Werror=missing-prototypes" to the list of optional arguments

Add duplicate prototypes to ref_mvs.c for now, since ref_mvs.h can't
be included.

Signed-off-by: James Almer <jamrial@gmail.com>

--- a/meson.build
+++ b/meson.build
@@ -149,6 +149,7 @@
   '-Werror=vla',
   '-Wno-maybe-uninitialized',
   '-Wno-unused-parameter',
+  '-Werror=missing-prototypes',
 ]
 
 if (get_option('buildtype') != 'debug' and get_option('buildtype') != 'plain')
--- a/src/ref_mvs.c
+++ b/src/ref_mvs.c
@@ -1824,57 +1824,6 @@
   }
 }
 
-void av1_fill_motion_field(AV1_COMMON *cm,
-                           const int tile_col_start4, const int tile_col_end4,
-                           const int row_start4, int row_end4)
-{
-  RefCntBuffer *const frame_bufs = cm->buffer_pool.frame_bufs;
-  const int cur_order_hint = cm->cur_frame.cur_frame_offset;
-  int *const ref_buf_idx = cm->ref_buf_idx;
-  int *const ref_order_hint = cm->ref_order_hint;
-
-  int ref_stamp = MFMV_STACK_SIZE - 1;
-
-  if (ref_buf_idx[LAST_FRAME - LAST_FRAME] >= 0) {
-    const int alt_of_lst_order_hint =
-        frame_bufs[ref_buf_idx[LAST_FRAME - LAST_FRAME]]
-            .ref_frame_offset[ALTREF_FRAME - LAST_FRAME];
-
-    const int is_lst_overlay =
-        (alt_of_lst_order_hint == ref_order_hint[GOLDEN_FRAME - LAST_FRAME]);
-      if (!is_lst_overlay) motion_field_projection(cm, LAST_FRAME, 2,
-                                                   tile_col_start4, tile_col_end4,
-                                                   row_start4, row_end4);
-    --ref_stamp;
-  }
-
-  if (get_relative_dist(cm, ref_order_hint[BWDREF_FRAME - LAST_FRAME],
-                        cur_order_hint) > 0) {
-      if (motion_field_projection(cm, BWDREF_FRAME, 0,
-                                  tile_col_start4, tile_col_end4,
-                                  row_start4, row_end4)) --ref_stamp;
-  }
-
-  if (get_relative_dist(cm, ref_order_hint[ALTREF2_FRAME - LAST_FRAME],
-                        cur_order_hint) > 0) {
-      if (motion_field_projection(cm, ALTREF2_FRAME, 0,
-                                  tile_col_start4, tile_col_end4,
-                                  row_start4, row_end4)) --ref_stamp;
-  }
-
-  if (get_relative_dist(cm, ref_order_hint[ALTREF_FRAME - LAST_FRAME],
-                        cur_order_hint) > 0 &&
-      ref_stamp >= 0)
-      if (motion_field_projection(cm, ALTREF_FRAME, 0,
-                                  tile_col_start4, tile_col_end4,
-                                  row_start4, row_end4)) --ref_stamp;
-
-  if (ref_stamp >= 0 && ref_buf_idx[LAST2_FRAME - LAST_FRAME] >= 0)
-      if (motion_field_projection(cm, LAST2_FRAME, 2,
-                                  tile_col_start4, tile_col_end4,
-                                  row_start4, row_end4)) --ref_stamp;
-}
-
 enum BlockSize {
     BS_128x128,
     BS_128x64,
@@ -1957,6 +1906,12 @@
                       int w4, int h4, int bs, int bp, int by4, int bx4,
                       int tile_col_start4, int tile_col_end4,
                       int tile_row_start4, int tile_row_end4,
+                      AV1_COMMON *cm);
+void av1_find_ref_mvs(CANDIDATE_MV *mvstack, int *cnt, int_mv (*mvlist)[2],
+                      int *ctx, int refidx_dav1d[2],
+                      int w4, int h4, int bs, int bp, int by4, int bx4,
+                      int tile_col_start4, int tile_col_end4,
+                      int tile_row_start4, int tile_row_end4,
                       AV1_COMMON *cm)
 {
     const int bw4 = dav1d_block_dimensions[bs][0];
@@ -2104,6 +2059,20 @@
                            const int allow_hp,
                            const int force_int_mv,
                            const int allow_ref_frame_mvs,
+                           const int order_hint);
+int av1_init_ref_mv_common(AV1_COMMON *cm,
+                           const int w8, const int h8,
+                           const ptrdiff_t stride,
+                           const int allow_sb128,
+                           MV_REF *cur,
+                           MV_REF *ref_mvs[7],
+                           const unsigned cur_poc,
+                           const unsigned ref_poc[7],
+                           const unsigned ref_ref_poc[7][7],
+                           const WarpedMotionParams gmv[7],
+                           const int allow_hp,
+                           const int force_int_mv,
+                           const int allow_ref_frame_mvs,
                            const int order_hint)
 {
     if (cm->mi_cols != (w8 << 1) || cm->mi_rows != (h8 << 1)) {
@@ -2158,12 +2127,59 @@
 
 void av1_init_ref_mv_tile_row(AV1_COMMON *cm,
                               int tile_col_start4, int tile_col_end4,
+                              int row_start4, int row_end4);
+void av1_init_ref_mv_tile_row(AV1_COMMON *cm,
+                              int tile_col_start4, int tile_col_end4,
                               int row_start4, int row_end4)
 {
-    av1_fill_motion_field(cm, tile_col_start4, tile_col_end4,
-                          row_start4, row_end4);
+  RefCntBuffer *const frame_bufs = cm->buffer_pool.frame_bufs;
+  const int cur_order_hint = cm->cur_frame.cur_frame_offset;
+  int *const ref_buf_idx = cm->ref_buf_idx;
+  int *const ref_order_hint = cm->ref_order_hint;
+
+  int ref_stamp = MFMV_STACK_SIZE - 1;
+
+  if (ref_buf_idx[LAST_FRAME - LAST_FRAME] >= 0) {
+    const int alt_of_lst_order_hint =
+        frame_bufs[ref_buf_idx[LAST_FRAME - LAST_FRAME]]
+            .ref_frame_offset[ALTREF_FRAME - LAST_FRAME];
+
+    const int is_lst_overlay =
+        (alt_of_lst_order_hint == ref_order_hint[GOLDEN_FRAME - LAST_FRAME]);
+      if (!is_lst_overlay) motion_field_projection(cm, LAST_FRAME, 2,
+                                                   tile_col_start4, tile_col_end4,
+                                                   row_start4, row_end4);
+    --ref_stamp;
+  }
+
+  if (get_relative_dist(cm, ref_order_hint[BWDREF_FRAME - LAST_FRAME],
+                        cur_order_hint) > 0) {
+      if (motion_field_projection(cm, BWDREF_FRAME, 0,
+                                  tile_col_start4, tile_col_end4,
+                                  row_start4, row_end4)) --ref_stamp;
+  }
+
+  if (get_relative_dist(cm, ref_order_hint[ALTREF2_FRAME - LAST_FRAME],
+                        cur_order_hint) > 0) {
+      if (motion_field_projection(cm, ALTREF2_FRAME, 0,
+                                  tile_col_start4, tile_col_end4,
+                                  row_start4, row_end4)) --ref_stamp;
+  }
+
+  if (get_relative_dist(cm, ref_order_hint[ALTREF_FRAME - LAST_FRAME],
+                        cur_order_hint) > 0 &&
+      ref_stamp >= 0)
+      if (motion_field_projection(cm, ALTREF_FRAME, 0,
+                                  tile_col_start4, tile_col_end4,
+                                  row_start4, row_end4)) --ref_stamp;
+
+  if (ref_stamp >= 0 && ref_buf_idx[LAST2_FRAME - LAST_FRAME] >= 0)
+      if (motion_field_projection(cm, LAST2_FRAME, 2,
+                                  tile_col_start4, tile_col_end4,
+                                  row_start4, row_end4)) --ref_stamp;
 }
 
+AV1_COMMON *av1_alloc_ref_mv_common(void);
 AV1_COMMON *av1_alloc_ref_mv_common(void) {
     AV1_COMMON *cm = malloc(sizeof(*cm));
     if (!cm) return NULL;
@@ -2171,6 +2187,7 @@
     return cm;
 }
 
+void av1_free_ref_mv_common(AV1_COMMON *cm);
 void av1_free_ref_mv_common(AV1_COMMON *cm) {
     if (cm->tpl_mvs) free(cm->tpl_mvs);
     free(cm);
--- a/tests/libfuzzer/dav1d_fuzzer.c
+++ b/tests/libfuzzer/dav1d_fuzzer.c
@@ -31,6 +31,7 @@
 #include <string.h>
 
 #include <dav1d/dav1d.h>
+#include <tests/libfuzzer/dav1d_fuzzer.h>
 
 static unsigned r32le(const uint8_t *const p) {
     return ((uint32_t)p[3] << 24U) | (p[2] << 16U) | (p[1] << 8U) | p[0];
--- /dev/null
+++ b/tests/libfuzzer/dav1d_fuzzer.h
@@ -1,0 +1,36 @@
+/*
+ * Copyright © 2018, VideoLAN and dav1d authors
+ * Copyright © 2018, Janne Grunau
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ *    list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __DAV1D_TESTS_LIBFUZZER_DAV1D_FUZZER_H
+#define __DAV1D_TESTS_LIBFUZZER_DAV1D_FUZZER_H
+
+#include <stddef.h>
+#include <stdint.h>
+
+int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
+
+#endif /* __DAV1D_TESTS_LIBFUZZER_DAV1D_FUZZER_H*/
--- a/tests/libfuzzer/main.c
+++ b/tests/libfuzzer/main.c
@@ -33,9 +33,9 @@
 #include <string.h>
 #include <stdio.h>
 
-// expects ivf input
+#include <tests/libfuzzer/dav1d_fuzzer.h>
 
-int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
+// expects ivf input
 
 int main(const int argc, char *const *const argv) {
     int ret = -1;