mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-01-11 09:59:50 +00:00
lavd/caca: create display *after* checking dither options
Avoid fastidious creation and immediate destroy of the display in case one of the dither options fails to be set. Also add NULL checks in write_trailer(), which are now necessary since the function can be called when not all the components have been initialized.
This commit is contained in:
parent
9ce0e19ab6
commit
c0b91348fe
@ -47,9 +47,18 @@ static int caca_write_trailer(AVFormatContext *s)
|
|||||||
|
|
||||||
av_freep(&c->window_title);
|
av_freep(&c->window_title);
|
||||||
|
|
||||||
caca_free_dither(c->dither);
|
if (c->display) {
|
||||||
caca_free_display(c->display);
|
caca_free_display(c->display);
|
||||||
caca_free_canvas(c->canvas);
|
c->display = NULL;
|
||||||
|
}
|
||||||
|
if (c->dither) {
|
||||||
|
caca_free_dither(c->dither);
|
||||||
|
c->dither = NULL;
|
||||||
|
}
|
||||||
|
if (c->canvas) {
|
||||||
|
caca_free_canvas(c->canvas);
|
||||||
|
c->canvas = NULL;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,20 +136,8 @@ static int caca_write_header(AVFormatContext *s)
|
|||||||
c->canvas = caca_create_canvas(c->window_width, c->window_height);
|
c->canvas = caca_create_canvas(c->window_width, c->window_height);
|
||||||
if (!c->canvas) {
|
if (!c->canvas) {
|
||||||
av_log(s, AV_LOG_ERROR, "Failed to create canvas\n");
|
av_log(s, AV_LOG_ERROR, "Failed to create canvas\n");
|
||||||
return AVERROR(errno);
|
ret = AVERROR(errno);
|
||||||
}
|
goto fail;
|
||||||
|
|
||||||
c->display = caca_create_display_with_driver(c->canvas, c->driver);
|
|
||||||
if (!c->display) {
|
|
||||||
av_log(s, AV_LOG_ERROR, "Failed to create display\n");
|
|
||||||
list_drivers(c);
|
|
||||||
caca_free_canvas(c->canvas);
|
|
||||||
return AVERROR(errno);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!c->window_width || !c->window_height) {
|
|
||||||
c->window_width = caca_get_canvas_width(c->canvas);
|
|
||||||
c->window_height = caca_get_canvas_height(c->canvas);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bpp = av_get_bits_per_pixel(&av_pix_fmt_descriptors[encctx->pix_fmt]);
|
bpp = av_get_bits_per_pixel(&av_pix_fmt_descriptors[encctx->pix_fmt]);
|
||||||
@ -165,6 +162,19 @@ static int caca_write_header(AVFormatContext *s)
|
|||||||
CHECK_DITHER_OPT(charset);
|
CHECK_DITHER_OPT(charset);
|
||||||
CHECK_DITHER_OPT(color);
|
CHECK_DITHER_OPT(color);
|
||||||
|
|
||||||
|
c->display = caca_create_display_with_driver(c->canvas, c->driver);
|
||||||
|
if (!c->display) {
|
||||||
|
av_log(s, AV_LOG_ERROR, "Failed to create display\n");
|
||||||
|
list_drivers(c);
|
||||||
|
ret = AVERROR(errno);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!c->window_width || !c->window_height) {
|
||||||
|
c->window_width = caca_get_canvas_width(c->canvas);
|
||||||
|
c->window_height = caca_get_canvas_height(c->canvas);
|
||||||
|
}
|
||||||
|
|
||||||
if (!c->window_title)
|
if (!c->window_title)
|
||||||
c->window_title = av_strdup(s->filename);
|
c->window_title = av_strdup(s->filename);
|
||||||
caca_set_display_title(c->display, c->window_title);
|
caca_set_display_title(c->display, c->window_title);
|
||||||
|
Loading…
Reference in New Issue
Block a user