Add non420 support to vp9_extend_frame_borders.

Fixes an encoder/decoder mismatch problem.

Change-Id: I573b3a2b7ba2171a1a380ff201b082b084e7ade1
This commit is contained in:
Alex Converse 2014-06-11 11:54:07 -07:00
Родитель e6fadb5ba8
Коммит e26adb8ab9
2 изменённых файлов: 17 добавлений и 20 удалений

Просмотреть файл

@ -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