mirror of
https://github.com/dankamongmen/notcurses
synced 2025-03-09 17:19:03 -04:00
add viewdemo #86
This commit is contained in:
parent
860fb43e3f
commit
a9f54ed483
@ -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;
|
||||
|
@ -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
29
src/demo/view.c
Normal 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;
|
||||
}
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user