674dffa54da5de49eee51d7412fb44ddaf6e25ac
1 /*****************************************************************************
2 * Copyright (C) 2013 x265 project
4 * Authors: Steve Borho <steve@borho.org>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111, USA.
20 * This program is also available under a commercial proprietary license.
21 * For more information, contact us at license @ x265.com.
22 *****************************************************************************/
24 #ifndef X265_BITCOST_H
25 #define X265_BITCOST_H
28 #include "threading.h"
32 // private x265 namespace
38 BitCost() : m_cost_mvx(0), m_cost_mvy(0), m_cost(0), m_mvp(0) {}
40 void setQP(unsigned int qp
);
42 void setMVP(const MV
& mvp
) { m_mvp
= mvp
; m_cost_mvx
= m_cost
- mvp
.x
; m_cost_mvy
= m_cost
- mvp
.y
; }
44 // return bit cost of motion vector difference, multiplied by lambda
45 inline uint16_t mvcost(const MV
& mv
) const { return m_cost_mvx
[mv
.x
] + m_cost_mvy
[mv
.y
]; }
47 // return bit cost of motion vector difference, without lambda
48 inline uint32_t bitcost(const MV
& mv
) const
50 return (uint32_t)(s_bitsizes
[abs(mv
.x
- m_mvp
.x
)] +
51 s_bitsizes
[abs(mv
.y
- m_mvp
.y
)] + 0.5f
);
54 static inline uint32_t bitcost(const MV
& mv
, const MV
& mvp
)
56 return (uint32_t)(s_bitsizes
[abs(mv
.x
- mvp
.x
)] +
57 s_bitsizes
[abs(mv
.y
- mvp
.y
)] + 0.5f
);
60 static void destroy();
72 BitCost
& operator =(const BitCost
&);
76 /* default log2_max_mv_length_horizontal and log2_max_mv_length_horizontal
77 * are 15, specified in quarter-pel luma sample units. making the maximum
78 * signaled ful-pel motion distance 4096, max qpel is 32768 */
79 enum { BC_MAX_MV
= (1 << 15) };
81 enum { BC_MAX_QP
= 82 };
83 static float *s_bitsizes
;
85 static uint16_t *s_costs
[BC_MAX_QP
];
87 static Lock s_costCalcLock
;
89 static void CalculateLogs();
93 #endif // ifndef X265_BITCOST_H