From 38b2b3d07539e538c425c0a43e66098f10b80200 Mon Sep 17 00:00:00 2001 From: nick black Date: Wed, 15 Jan 2020 12:06:35 -0500 Subject: [PATCH] render: fix bad reference in final pass --- src/lib/render.c | 13 +++++++------ tests/libav.cpp | 22 ++++++++++++++++++++-- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/lib/render.c b/src/lib/render.c index 0810b0ee0..5bdf3bcdc 100644 --- a/src/lib/render.c +++ b/src/lib/render.c @@ -287,12 +287,13 @@ paint(notcurses* nc, ncplane* p, struct crender* rvec, cell* fb){ if(cell_locked_p(targc)){ cell* prevcell = &nc->lastframe[fbcellidx(absy, nc->lfdimx, absx)]; - if(cellcmp_and_dupfar(&nc->pool, prevcell, crender->p, targc)){ -/*if(cell_simple_p(prevcell)){ -fprintf(stderr, "WROTE %u [%c] to %d/%d (%d/%d)\n", prevcell->gcluster, prevcell->gcluster, y, x, absy, absx); +/*if(cell_simple_p(targc)){ +fprintf(stderr, "WROTE %u [%c] to %d/%d (%d/%d)\n", targc->gcluster, prevcell->gcluster, y, x, absy, absx); }else{ -fprintf(stderr, "WROTE %u [%s] to %d/%d (%d/%d)\n", prevcell->gcluster, egcpool_extended_gcluster(&nc->pool, prevcell), y, x, absy, absx); -}*/ +fprintf(stderr, "WROTE %u [%s] to %d/%d (%d/%d)\n", targc->gcluster, extended_gcluster(crender->p, targc), y, x, absy, absx); +} +fprintf(stderr, "POOL: %p NC: %p SRC: %p\n", nc->pool.pool, nc, crender->p);*/ + if(cellcmp_and_dupfar(&nc->pool, prevcell, crender->p, targc)){ crender->damaged = true; if(cell_double_wide_p(targc)){ ncplane* tmpp = crender->p; @@ -354,7 +355,7 @@ notcurses_render_internal(notcurses* nc, struct crender* rvec){ if(targc->gcluster == 0){ targc->gcluster = ' '; } - if(cellcmp_and_dupfar(&nc->pool, prevcell, rvec->p, targc)){ + if(cellcmp_and_dupfar(&nc->pool, prevcell, rvec[fbcellidx(y, dimx, x)].p, targc)){ struct crender* crender = &rvec[fbcellidx(y, dimx, x)]; crender->damaged = true; } diff --git a/tests/libav.cpp b/tests/libav.cpp index 307a8b8a4..1ca73d0f9 100644 --- a/tests/libav.cpp +++ b/tests/libav.cpp @@ -21,7 +21,6 @@ TEST_CASE("Multimedia") { ncplane* ncp_ = notcurses_stdplane(nc_); REQUIRE(ncp_); - /* #ifdef DISABLE_FFMPEG SUBCASE("LibavDisabled"){ REQUIRE(!notcurses_canopen(nc_)); @@ -31,6 +30,26 @@ TEST_CASE("Multimedia") { REQUIRE(notcurses_canopen(nc_)); } + SUBCASE("LoadImageCreatePlane") { + int averr; + int dimy, dimx; + ncplane_dim_yx(ncp_, &dimy, &dimx); + auto ncv = ncvisual_open_plane(nc_, find_data("dsscaw-purp.png"), &averr, 0, 0, NCSCALE_STRETCH); + REQUIRE(ncv); + REQUIRE(0 == averr); + auto frame = ncvisual_decode(ncv, &averr); + REQUIRE(frame); + REQUIRE(0 == averr); + CHECK(dimy * 2 == frame->height); + CHECK(dimx == frame->width); + CHECK(0 == ncvisual_render(ncv, 0, 0, 0, 0)); + CHECK(0 == notcurses_render(nc_)); + frame = ncvisual_decode(ncv, &averr); + REQUIRE_EQ(nullptr, frame); + CHECK(AVERROR_EOF == averr); + ncvisual_destroy(ncv); + } + SUBCASE("LoadImage") { int averr; int dimy, dimx; @@ -86,7 +105,6 @@ TEST_CASE("Multimedia") { ncvisual_destroy(ncv); } #endif -*/ CHECK(!notcurses_stop(nc_)); CHECK(!fclose(outfp_));