Add non420 support to vp9_extend_frame_borders.
Fixes an encoder/decoder mismatch problem. Change-Id: I573b3a2b7ba2171a1a380ff201b082b084e7ade1
This commit is contained in:
Родитель
e6fadb5ba8
Коммит
e26adb8ab9
|
@ -84,11 +84,12 @@ void vp8_yv12_extend_frame_borders_c(YV12_BUFFER_CONFIG *ybf) {
|
||||||
static void extend_frame(YV12_BUFFER_CONFIG *const ybf, int ext_size) {
|
static void extend_frame(YV12_BUFFER_CONFIG *const ybf, int ext_size) {
|
||||||
const int c_w = ybf->uv_crop_width;
|
const int c_w = ybf->uv_crop_width;
|
||||||
const int c_h = ybf->uv_crop_height;
|
const int c_h = ybf->uv_crop_height;
|
||||||
const int c_ext_size = ext_size >> 1;
|
const int ss_x = ybf->uv_width < ybf->y_width;
|
||||||
const int c_et = c_ext_size;
|
const int ss_y = ybf->uv_height < ybf->y_height;
|
||||||
const int c_el = c_ext_size;
|
const int c_et = ext_size >> ss_y;
|
||||||
const int c_eb = c_ext_size + ybf->uv_height - ybf->uv_crop_height;
|
const int c_el = ext_size >> ss_x;
|
||||||
const int c_er = c_ext_size + ybf->uv_width - ybf->uv_crop_width;
|
const int c_eb = c_et + ybf->uv_height - ybf->uv_crop_height;
|
||||||
|
const int c_er = c_el + ybf->uv_width - ybf->uv_crop_width;
|
||||||
|
|
||||||
assert(ybf->y_height - ybf->y_crop_height < 16);
|
assert(ybf->y_height - ybf->y_crop_height < 16);
|
||||||
assert(ybf->y_width - ybf->y_crop_width < 16);
|
assert(ybf->y_width - ybf->y_crop_width < 16);
|
||||||
|
|
|
@ -104,16 +104,15 @@ static void extend_plane(uint8_t *const src, int src_stride,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void extend_frame(YV12_BUFFER_CONFIG *const ybf,
|
static void extend_frame(YV12_BUFFER_CONFIG *const ybf, int ext_size) {
|
||||||
int subsampling_x, int subsampling_y,
|
|
||||||
int ext_size) {
|
|
||||||
const int c_w = ybf->uv_crop_width;
|
const int c_w = ybf->uv_crop_width;
|
||||||
const int c_h = ybf->uv_crop_height;
|
const int c_h = ybf->uv_crop_height;
|
||||||
const int c_ext_size = ext_size >> 1;
|
const int ss_x = ybf->uv_width < ybf->y_width;
|
||||||
const int c_et = c_ext_size;
|
const int ss_y = ybf->uv_height < ybf->y_height;
|
||||||
const int c_el = c_ext_size;
|
const int c_et = ext_size >> ss_y;
|
||||||
const int c_eb = c_ext_size + ybf->uv_height - ybf->uv_crop_height;
|
const int c_el = ext_size >> ss_x;
|
||||||
const int c_er = c_ext_size + ybf->uv_width - ybf->uv_crop_width;
|
const int c_eb = c_et + ybf->uv_height - ybf->uv_crop_height;
|
||||||
|
const int c_er = c_el + ybf->uv_width - ybf->uv_crop_width;
|
||||||
|
|
||||||
assert(ybf->y_height - ybf->y_crop_height < 16);
|
assert(ybf->y_height - ybf->y_crop_height < 16);
|
||||||
assert(ybf->y_width - ybf->y_crop_width < 16);
|
assert(ybf->y_width - ybf->y_crop_width < 16);
|
||||||
|
@ -133,16 +132,13 @@ static void extend_frame(YV12_BUFFER_CONFIG *const ybf,
|
||||||
c_w, c_h, c_et, c_el, c_eb, c_er);
|
c_w, c_h, c_et, c_el, c_eb, c_er);
|
||||||
}
|
}
|
||||||
|
|
||||||
void vp9_extend_frame_borders_dspr2(YV12_BUFFER_CONFIG *ybf,
|
void vp9_extend_frame_borders_dspr2(YV12_BUFFER_CONFIG *ybf) {
|
||||||
int subsampling_x, int subsampling_y) {
|
extend_frame(ybf, ybf->border);
|
||||||
extend_frame(ybf, subsampling_x, subsampling_y, ybf->border);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void vp9_extend_frame_inner_borders_dspr2(YV12_BUFFER_CONFIG *ybf,
|
void vp9_extend_frame_inner_borders_dspr2(YV12_BUFFER_CONFIG *ybf) {
|
||||||
int subsampling_x,
|
|
||||||
int subsampling_y) {
|
|
||||||
const int inner_bw = (ybf->border > VP9INNERBORDERINPIXELS) ?
|
const int inner_bw = (ybf->border > VP9INNERBORDERINPIXELS) ?
|
||||||
VP9INNERBORDERINPIXELS : ybf->border;
|
VP9INNERBORDERINPIXELS : ybf->border;
|
||||||
extend_frame(ybf, subsampling_x, subsampling_y, inner_bw);
|
extend_frame(ybf, inner_bw);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Загрузка…
Ссылка в новой задаче