#include "avcodec.h"
#include "internal.h"
+#define MIN_ELEMENT ' '
+#define MAX_ELEMENT 0xfe
+#define NB_ELEMENTS (MAX_ELEMENT - MIN_ELEMENT + 1)
+
typedef struct XPMContext {
uint32_t *pixels;
int pixels_size;
int n = 0, m = 1, i;
for (i = 0; i < cpp; i++) {
- if (*p < ' ' || *p > '~')
+ if (*p < MIN_ELEMENT || *p > MAX_ELEMENT)
return AVERROR_INVALIDDATA;
- n += (*p++ - ' ') * m;
- m *= 95;
+ n += (*p++ - MIN_ELEMENT) * m;
+ m *= NB_ELEMENTS;
}
return n;
}
int ncolors, cpp, ret, i, j;
int64_t size;
uint32_t *dst;
+ int width, height;
avctx->pix_fmt = AV_PIX_FMT_BGRA;
ptr += mod_strcspn(ptr, "\"");
if (sscanf(ptr, "\"%u %u %u %u\",",
- &avctx->width, &avctx->height, &ncolors, &cpp) != 4) {
+ &width, &height, &ncolors, &cpp) != 4) {
av_log(avctx, AV_LOG_ERROR, "missing image parameters\n");
return AVERROR_INVALIDDATA;
}
- if ((ret = ff_set_dimensions(avctx, avctx->width, avctx->height)) < 0)
+ if ((ret = ff_set_dimensions(avctx, width, height)) < 0)
return ret;
if ((ret = ff_get_buffer(avctx, p, 0)) < 0)
size = 1;
for (i = 0; i < cpp; i++)
- size *= 95;
+ size *= NB_ELEMENTS;
if (ncolors <= 0 || ncolors > size) {
av_log(avctx, AV_LOG_ERROR, "invalid number of colors: %d\n", ncolors);
return 0;
}
-AVCodec ff_xpm_decoder = {
+const AVCodec ff_xpm_decoder = {
.name = "xpm",
.type = AVMEDIA_TYPE_VIDEO,
.id = AV_CODEC_ID_XPM,