image_writer: check for conversion errors

This can happen when e.g. a VO returns a screenshot in an unsupported
format.
This commit is contained in:
wm4
2015-01-25 17:00:09 +09:00
committed by Diogo Franco (Kovensky)
parent 4bb2da8204
commit ca34fd569d
3 changed files with 17 additions and 11 deletions
+5 -1
View File
@@ -296,7 +296,11 @@ int write_image(struct mp_image *image, const struct image_writer_opts *opts,
}
mp_image_copy_attributes(dst, image);
mp_image_swscale(dst, image, mp_sws_hq_flags);
if (mp_image_swscale(dst, image, mp_sws_hq_flags) < 0) {
mp_err(log, "Error when converting image.\n");
talloc_free(dst);
return 0;
}
allocated_image = dst;
image = dst;
+8 -6
View File
@@ -268,24 +268,26 @@ int mp_sws_scale(struct mp_sws_context *ctx, struct mp_image *dst,
return 0;
}
void mp_image_swscale(struct mp_image *dst, struct mp_image *src,
int my_sws_flags)
int mp_image_swscale(struct mp_image *dst, struct mp_image *src,
int my_sws_flags)
{
struct mp_sws_context *ctx = mp_sws_alloc(NULL);
ctx->flags = my_sws_flags;
mp_sws_scale(ctx, dst, src);
int res = mp_sws_scale(ctx, dst, src);
talloc_free(ctx);
return res;
}
void mp_image_sw_blur_scale(struct mp_image *dst, struct mp_image *src,
float gblur)
int mp_image_sw_blur_scale(struct mp_image *dst, struct mp_image *src,
float gblur)
{
struct mp_sws_context *ctx = mp_sws_alloc(NULL);
ctx->flags = mp_sws_hq_flags;
ctx->src_filter = sws_getDefaultFilter(gblur, gblur, 0, 0, 0, 0, 0);
ctx->force_reload = true;
mp_sws_scale(ctx, dst, src);
int res = mp_sws_scale(ctx, dst, src);
talloc_free(ctx);
return res;
}
int mp_sws_get_vf_equalizer(struct mp_sws_context *sws, struct vf_seteq *eq)
+4 -4
View File
@@ -19,11 +19,11 @@ extern const int mp_sws_fast_flags;
bool mp_sws_supported_format(int imgfmt);
void mp_image_swscale(struct mp_image *dst, struct mp_image *src,
int my_sws_flags);
int mp_image_swscale(struct mp_image *dst, struct mp_image *src,
int my_sws_flags);
void mp_image_sw_blur_scale(struct mp_image *dst, struct mp_image *src,
float gblur);
int mp_image_sw_blur_scale(struct mp_image *dst, struct mp_image *src,
float gblur);
struct mp_sws_context {
// Can be set for verbose error printing.