}
/* verify that all the image is inside the screen dimensions */
- if (!width || width > s->screen_width || left >= s->screen_width) {
- av_log(s->avctx, AV_LOG_ERROR, "Invalid image width.\n");
+ if (!width || width > s->screen_width) {
+ av_log(s->avctx, AV_LOG_WARNING, "Invalid image width: %d, truncating.\n", width);
+ width = s->screen_width;
+ }
+ if (left >= s->screen_width) {
+ av_log(s->avctx, AV_LOG_ERROR, "Invalid left position: %d.\n", left);
return AVERROR_INVALIDDATA;
}
- if (!height || height > s->screen_height || top >= s->screen_height) {
- av_log(s->avctx, AV_LOG_ERROR, "Invalid image height.\n");
+ if (!height || height > s->screen_height) {
+ av_log(s->avctx, AV_LOG_WARNING, "Invalid image height: %d, truncating.\n", height);
+ height = s->screen_height;
+ }
+ if (top >= s->screen_height) {
+ av_log(s->avctx, AV_LOG_ERROR, "Invalid top position: %d.\n", top);
return AVERROR_INVALIDDATA;
}
if (left + width > s->screen_width) {
if (!s->frame)
return AVERROR(ENOMEM);
ff_lzw_decode_open(&s->lzw);
+ if (!s->lzw)
+ return AVERROR(ENOMEM);
return 0;
}
.close = gif_decode_close,
.decode = gif_decode_frame,
.capabilities = AV_CODEC_CAP_DR1,
+ .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE |
+ FF_CODEC_CAP_INIT_CLEANUP,
.priv_class = &decoder_class,
};