mirror of
https://github.com/ultravideo/uvg266.git
synced 2024-11-27 19:24:06 +00:00
Fix inter reconstruction for 8x8 blocks and enable 8x8 inter blocks again.
Inter reconstruction was modifying the movement in place when it shouldn't have. This was causing issues only for the 8x8 blocks, because for larger blocks the modified movement vector was too far away to be seen by the blocks below it.
This commit is contained in:
parent
9bd35fcdb1
commit
681975ad4b
|
@ -34,7 +34,7 @@
|
||||||
/* CONFIG VARIABLES */
|
/* CONFIG VARIABLES */
|
||||||
#define LCU_WIDTH 64 /*!< Largest Coding Unit (IT'S 64x64, DO NOT TOUCH!) */
|
#define LCU_WIDTH 64 /*!< Largest Coding Unit (IT'S 64x64, DO NOT TOUCH!) */
|
||||||
|
|
||||||
#define MAX_INTER_SEARCH_DEPTH 2
|
#define MAX_INTER_SEARCH_DEPTH 3
|
||||||
#define MIN_INTER_SEARCH_DEPTH 0
|
#define MIN_INTER_SEARCH_DEPTH 0
|
||||||
|
|
||||||
#define MAX_INTRA_SEARCH_DEPTH 3 /*!< Max search depth -> min block size (3 == 8x8) */
|
#define MAX_INTRA_SEARCH_DEPTH 3 /*!< Max search depth -> min block size (3 == 8x8) */
|
||||||
|
|
|
@ -58,9 +58,10 @@ void inter_set_block(picture* pic, uint32_t x_cu, uint32_t y_cu, uint8_t depth,
|
||||||
* \param dst destination picture
|
* \param dst destination picture
|
||||||
* \returns Void
|
* \returns Void
|
||||||
*/
|
*/
|
||||||
void inter_recon(picture* ref,int32_t xpos, int32_t ypos,int32_t width, int16_t mv[2], picture *dst)
|
void inter_recon(picture* ref,int32_t xpos, int32_t ypos,int32_t width, const int16_t mv_param[2], picture *dst)
|
||||||
{
|
{
|
||||||
int x,y,coord_x,coord_y;
|
int x,y,coord_x,coord_y;
|
||||||
|
int16_t mv[2] = { mv_param[0], mv_param[1] };
|
||||||
|
|
||||||
int32_t dst_width_c = dst->width>>1; //!< Destination picture width in chroma pixels
|
int32_t dst_width_c = dst->width>>1; //!< Destination picture width in chroma pixels
|
||||||
int32_t ref_width_c = ref->width>>1; //!< Reference picture width in chroma pixels
|
int32_t ref_width_c = ref->width>>1; //!< Reference picture width in chroma pixels
|
||||||
|
@ -84,8 +85,8 @@ void inter_recon(picture* ref,int32_t xpos, int32_t ypos,int32_t width, int16_t
|
||||||
int16_t halfpel_v[LCU_WIDTH * LCU_WIDTH]; //!< interpolated 2W x 2H block (v)
|
int16_t halfpel_v[LCU_WIDTH * LCU_WIDTH]; //!< interpolated 2W x 2H block (v)
|
||||||
|
|
||||||
// TODO: Fractional pixel support
|
// TODO: Fractional pixel support
|
||||||
mv[0] = mv[0]>>2;
|
mv[0] >>= 2;
|
||||||
mv[1] = mv[1]>>2;
|
mv[1] >>= 2;
|
||||||
|
|
||||||
// Chroma half-pel
|
// Chroma half-pel
|
||||||
// get half-pel interpolated block and push it to output
|
// get half-pel interpolated block and push it to output
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
|
|
||||||
|
|
||||||
void inter_set_block(picture* pic,uint32_t x_cu, uint32_t y_cu, uint8_t depth, cu_info *cur_cu);
|
void inter_set_block(picture* pic,uint32_t x_cu, uint32_t y_cu, uint8_t depth, cu_info *cur_cu);
|
||||||
void inter_recon(picture *ref,int32_t xpos, int32_t ypos,int32_t width, int16_t mv[2], picture* dst);
|
void inter_recon(picture *ref,int32_t xpos, int32_t ypos,int32_t width, const int16_t mv[2], picture* dst);
|
||||||
|
|
||||||
void inter_get_mv_cand(encoder_control *encoder, int32_t x_cu, int32_t y_cu, int8_t depth, int16_t mv_cand[2][2]);
|
void inter_get_mv_cand(encoder_control *encoder, int32_t x_cu, int32_t y_cu, int8_t depth, int16_t mv_cand[2][2]);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue