add viewdemo #86

This commit is contained in:
nick black 2019-12-01 15:19:46 -05:00 committed by Nick Black
parent 860fb43e3f
commit a9f54ed483
4 changed files with 34 additions and 4 deletions

View File

@ -30,6 +30,7 @@ usage(const char* exe, int status){
fprintf(out, " m: run maxcolor\n");
fprintf(out, " b: run box\n");
fprintf(out, " g: run grid\n");
fprintf(out, " v: run view\n");
fprintf(out, " w: run widecolors\n");
exit(status);
}
@ -139,6 +140,7 @@ ext_demos(struct notcurses* nc, const char* demos){
case 'm': ret = maxcolor_demo(nc); break;
case 'b': ret = box_demo(nc); break;
case 'g': ret = grid_demo(nc); break;
case 'v': ret = view_demo(nc); break;
case 'w': ret = widecolor_demo(nc); break;
}
if(ret){
@ -207,7 +209,7 @@ int main(int argc, char** argv){
if(argv[optind] != NULL){
usage(*argv, EXIT_FAILURE);
}
demos = "isumbgw";
demos = "isumbgwv";
}
if((nc = notcurses_init(&nopts)) == NULL){
return EXIT_FAILURE;

View File

@ -19,6 +19,7 @@ int box_demo(struct notcurses* nc);
int maxcolor_demo(struct notcurses* nc);
int grid_demo(struct notcurses* nc);
int sliding_puzzle_demo(struct notcurses* nc);
int view_demo(struct notcurses* nc);
#ifdef __cplusplus
}

29
src/demo/view.c Normal file
View File

@ -0,0 +1,29 @@
#include <notcurses.h>
#include "demo.h"
int view_demo(struct notcurses* nc){
struct ncplane* ncp = notcurses_stdplane(nc);
int dimy, dimx;
ncplane_dim_yx(ncp, &dimy, &dimx);
int averr;
struct ncvisual* ncv = ncplane_visual_open(ncp, "../tests/dsscaw-purp.png", &averr);
if(ncv == NULL){
return -1;
}
struct AVFrame* frame = ncvisual_decode(ncv, &averr);
if(frame == NULL){
ncvisual_destroy(ncv);
return -1;
}
if(ncvisual_render(ncv)){
ncvisual_destroy(ncv);
return -1;
}
if(notcurses_render(nc)){
ncvisual_destroy(ncv);
return -1;
}
ncvisual_destroy(ncv);
nanosleep(&demodelay, NULL);
return 0;
}

View File

@ -20,7 +20,7 @@ void ncvisual_destroy(ncvisual* ncv){
avcodec_close(ncv->codecctx);
avcodec_free_context(&ncv->codecctx);
av_frame_free(&ncv->frame);
av_frame_free(&ncv->oframe);
// av_frame_free(&ncv->oframe); FIXME
avcodec_parameters_free(&ncv->cparams);
sws_freeContext(ncv->swsctx);
av_packet_free(&ncv->packet);
@ -107,7 +107,6 @@ print_frame_summary(nc->codecctx, nc->frame);
nc->oframe->width, nc->oframe->height,
nc->oframe->format, IMGALLOCALIGN)) < 0){
fprintf(stderr, "Error allocating visual data (%s)\n", av_err2str(*averr));
av_frame_free(&nc->oframe);
return NULL;
}
*averr = sws_scale(nc->swsctx, (const uint8_t* const*)nc->frame->data,
@ -115,7 +114,6 @@ print_frame_summary(nc->codecctx, nc->frame);
nc->frame->height, nc->oframe->data, nc->oframe->linesize);
if(*averr < 0){
fprintf(stderr, "Error applying scaling (%s)\n", av_err2str(*averr));
av_frame_free(&nc->oframe);
return NULL;
}
print_frame_summary(nc->codecctx, nc->oframe);