Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/videolan/dav1d.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/recon.c')
-rw-r--r--src/recon.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/src/recon.c b/src/recon.c
index a91f1ce..e1e576c 100644
--- a/src/recon.c
+++ b/src/recon.c
@@ -1488,8 +1488,7 @@ void bytefn(filter_sbrow)(Dav1dFrameContext *const f, const int sby) {
void bytefn(backup_ipred_edge)(Dav1dTileContext *const t) {
const Dav1dFrameContext *const f = t->f;
Dav1dTileState *const ts = t->ts;
- const int ss_ver = f->cur.p.p.layout == DAV1D_PIXEL_LAYOUT_I420;
- const int ss_hor = f->cur.p.p.layout != DAV1D_PIXEL_LAYOUT_I444;
+ const int monochrome = f->cur.p.p.layout == DAV1D_PIXEL_LAYOUT_I400;
const int sby = t->by >> f->sb_shift;
const int sby_off = f->sb128w * 128 * sby;
const int x_off = ts->tiling.col_start;
@@ -1499,10 +1498,16 @@ void bytefn(backup_ipred_edge)(Dav1dTileContext *const t) {
((t->by + f->sb_step) * 4 - 1) * PXSTRIDE(f->cur.p.stride[0]);
pixel_copy(&f->ipred_edge[0][sby_off + x_off * 4], y,
4 * (ts->tiling.col_end - x_off));
- const ptrdiff_t uv_off = (x_off * 4 >> ss_hor) +
- (((t->by + f->sb_step) * 4 >> ss_ver) - 1) * PXSTRIDE(f->cur.p.stride[1]);
- for (int pl = 1; pl <= 2; pl++)
- pixel_copy(&f->ipred_edge[pl][sby_off + (x_off * 4 >> ss_hor)],
- &((const pixel *) f->cur.p.data[pl])[uv_off],
- 4 * (ts->tiling.col_end - x_off) >> ss_hor);
+
+ if (!monochrome) {
+ const int ss_ver = f->cur.p.p.layout == DAV1D_PIXEL_LAYOUT_I420;
+ const int ss_hor = f->cur.p.p.layout != DAV1D_PIXEL_LAYOUT_I444;
+
+ const ptrdiff_t uv_off = (x_off * 4 >> ss_hor) +
+ (((t->by + f->sb_step) * 4 >> ss_ver) - 1) * PXSTRIDE(f->cur.p.stride[1]);
+ for (int pl = 1; pl <= 2; pl++)
+ pixel_copy(&f->ipred_edge[pl][sby_off + (x_off * 4 >> ss_hor)],
+ &((const pixel *) f->cur.p.data[pl])[uv_off],
+ 4 * (ts->tiling.col_end - x_off) >> ss_hor);
+ }
}