mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-25 08:42:39 +00:00
pnm: return meaningful error codes.
This commit is contained in:
parent
84f2847de3
commit
380242ca50
@ -65,7 +65,7 @@ int ff_pnm_decode_header(AVCodecContext *avctx, PNMContext * const s)
|
||||
pnm_get(s, buf1, sizeof(buf1));
|
||||
s->type= buf1[1]-'0';
|
||||
if(buf1[0] != 'P')
|
||||
return -1;
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
if (s->type==1 || s->type==4) {
|
||||
avctx->pix_fmt = AV_PIX_FMT_MONOWHITE;
|
||||
@ -103,12 +103,12 @@ int ff_pnm_decode_header(AVCodecContext *avctx, PNMContext * const s)
|
||||
} else if (!strcmp(buf1, "ENDHDR")) {
|
||||
break;
|
||||
} else {
|
||||
return -1;
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
}
|
||||
/* check that all tags are present */
|
||||
if (w <= 0 || h <= 0 || maxval <= 0 || depth <= 0 || tuple_type[0] == '\0' || av_image_check_size(w, h, 0, avctx))
|
||||
return -1;
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
avctx->width = w;
|
||||
avctx->height = h;
|
||||
@ -123,25 +123,25 @@ int ff_pnm_decode_header(AVCodecContext *avctx, PNMContext * const s)
|
||||
} else {
|
||||
av_log(avctx, AV_LOG_ERROR, "16-bit components are only supported for grayscale\n");
|
||||
avctx->pix_fmt = AV_PIX_FMT_NONE;
|
||||
return -1;
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
} else if (depth == 4) {
|
||||
avctx->pix_fmt = AV_PIX_FMT_RGB32;
|
||||
} else {
|
||||
return -1;
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
return 0;
|
||||
} else {
|
||||
return -1;
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
pnm_get(s, buf1, sizeof(buf1));
|
||||
avctx->width = atoi(buf1);
|
||||
if (avctx->width <= 0)
|
||||
return -1;
|
||||
return AVERROR_INVALIDDATA;
|
||||
pnm_get(s, buf1, sizeof(buf1));
|
||||
avctx->height = atoi(buf1);
|
||||
if(av_image_check_size(avctx->width, avctx->height, 0, avctx))
|
||||
return -1;
|
||||
return AVERROR_INVALIDDATA;
|
||||
if (avctx->pix_fmt != AV_PIX_FMT_MONOWHITE) {
|
||||
pnm_get(s, buf1, sizeof(buf1));
|
||||
s->maxval = atoi(buf1);
|
||||
@ -160,7 +160,7 @@ int ff_pnm_decode_header(AVCodecContext *avctx, PNMContext * const s)
|
||||
} else {
|
||||
av_log(avctx, AV_LOG_ERROR, "Unsupported pixel format\n");
|
||||
avctx->pix_fmt = AV_PIX_FMT_NONE;
|
||||
return -1;
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
}
|
||||
}else
|
||||
@ -168,10 +168,10 @@ int ff_pnm_decode_header(AVCodecContext *avctx, PNMContext * const s)
|
||||
/* more check if YUV420 */
|
||||
if (avctx->pix_fmt == AV_PIX_FMT_YUV420P) {
|
||||
if ((avctx->width & 1) != 0)
|
||||
return -1;
|
||||
return AVERROR_INVALIDDATA;
|
||||
h = (avctx->height * 2);
|
||||
if ((h % 3) != 0)
|
||||
return -1;
|
||||
return AVERROR_INVALIDDATA;
|
||||
h /= 3;
|
||||
avctx->height = h;
|
||||
}
|
||||
|
@ -36,29 +36,29 @@ static int pnm_decode_frame(AVCodecContext *avctx, void *data,
|
||||
AVFrame * const p = &s->picture;
|
||||
int i, j, n, linesize, h, upgrade = 0;
|
||||
unsigned char *ptr;
|
||||
int components, sample_len;
|
||||
int components, sample_len, ret;
|
||||
|
||||
s->bytestream_start =
|
||||
s->bytestream = buf;
|
||||
s->bytestream_end = buf + buf_size;
|
||||
|
||||
if (ff_pnm_decode_header(avctx, s) < 0)
|
||||
return -1;
|
||||
if ((ret = ff_pnm_decode_header(avctx, s)) < 0)
|
||||
return ret;
|
||||
|
||||
if (p->data[0])
|
||||
avctx->release_buffer(avctx, p);
|
||||
|
||||
p->reference = 0;
|
||||
if (ff_get_buffer(avctx, p) < 0) {
|
||||
if ((ret = ff_get_buffer(avctx, p)) < 0) {
|
||||
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
|
||||
return -1;
|
||||
return ret;
|
||||
}
|
||||
p->pict_type = AV_PICTURE_TYPE_I;
|
||||
p->key_frame = 1;
|
||||
|
||||
switch (avctx->pix_fmt) {
|
||||
default:
|
||||
return -1;
|
||||
return AVERROR(EINVAL);
|
||||
case AV_PIX_FMT_RGB48BE:
|
||||
n = avctx->width * 6;
|
||||
components=3;
|
||||
@ -93,7 +93,7 @@ static int pnm_decode_frame(AVCodecContext *avctx, void *data,
|
||||
ptr = p->data[0];
|
||||
linesize = p->linesize[0];
|
||||
if (s->bytestream + n * avctx->height > s->bytestream_end)
|
||||
return -1;
|
||||
return AVERROR_INVALIDDATA;
|
||||
if(s->type < 4){
|
||||
for (i=0; i<avctx->height; i++) {
|
||||
PutBitContext pb;
|
||||
@ -104,7 +104,7 @@ static int pnm_decode_frame(AVCodecContext *avctx, void *data,
|
||||
while(s->bytestream < s->bytestream_end && (*s->bytestream < '0' || *s->bytestream > '9' ))
|
||||
s->bytestream++;
|
||||
if(s->bytestream >= s->bytestream_end)
|
||||
return -1;
|
||||
return AVERROR_INVALIDDATA;
|
||||
do{
|
||||
v= 10*v + c;
|
||||
c= (*s->bytestream++) - '0';
|
||||
@ -142,7 +142,7 @@ static int pnm_decode_frame(AVCodecContext *avctx, void *data,
|
||||
ptr = p->data[0];
|
||||
linesize = p->linesize[0];
|
||||
if (s->bytestream + n * avctx->height * 3 / 2 > s->bytestream_end)
|
||||
return -1;
|
||||
return AVERROR_INVALIDDATA;
|
||||
for (i = 0; i < avctx->height; i++) {
|
||||
memcpy(ptr, s->bytestream, n);
|
||||
s->bytestream += n;
|
||||
@ -166,7 +166,7 @@ static int pnm_decode_frame(AVCodecContext *avctx, void *data,
|
||||
ptr = p->data[0];
|
||||
linesize = p->linesize[0];
|
||||
if (s->bytestream + avctx->width * avctx->height * 4 > s->bytestream_end)
|
||||
return -1;
|
||||
return AVERROR_INVALIDDATA;
|
||||
for (i = 0; i < avctx->height; i++) {
|
||||
int j, r, g, b, a;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user