AV1 RT: Move MvCosts into dynamically alloc structure
MvCost is ~500k size and copying it for RT Multithreading has a hit of
about 100 usec per thread. As we run RT with no MvCost update we don't
need to have a copy for each thread. Moving it to dynamic allocation if
needed.
~2% speed up for 2 threads VGA with speed8
Change-Id: Iadfc2bf2f30b680685e433a07e18c88efbcc910e
diff --git a/av1/encoder/block.h b/av1/encoder/block.h
index 3c40085..f72d11a 100644
--- a/av1/encoder/block.h
+++ b/av1/encoder/block.h
@@ -751,16 +751,6 @@
*/
typedef struct {
/*****************************************************************************
- * \name Rate to Distortion Multipliers
- ****************************************************************************/
- /**@{*/
- //! A multiplier that converts mv cost to l2 error.
- int errorperbit;
- //! A multiplier that converts mv cost to l1 error.
- int sadperbit;
- /**@}*/
-
- /*****************************************************************************
* \name Encoding Costs
* Here are the entropy costs needed to encode a given mv.
* \ref nmv_cost_alloc and \ref nmv_cost_hp_alloc are two arrays that holds
@@ -953,12 +943,22 @@
//! The rate needed to encode a new motion vector to the bitstream and some
//! multipliers for motion search.
- MvCosts mv_costs;
+ MvCosts *mv_costs;
//! The rate needed to signal the txfm coefficients to the bitstream.
CoeffCosts coeff_costs;
/**@}*/
+ /*****************************************************************************
+ * \name Rate to Distortion Multipliers
+ ****************************************************************************/
+ /**@{*/
+ //! A multiplier that converts mv cost to l2 error.
+ int errorperbit;
+ //! A multiplier that converts mv cost to l1 error.
+ int sadperbit;
+ /**@}*/
+
/******************************************************************************
* \name Segmentation
*****************************************************************************/