pnm: return meaningful error codes.
authorAnton Khirnov <anton@khirnov.net>
Fri, 16 Nov 2012 10:45:34 +0000 (11:45 +0100)
committerAnton Khirnov <anton@khirnov.net>
Sun, 6 Jan 2013 12:31:40 +0000 (13:31 +0100)
libavcodec/pnm.c
libavcodec/pnmdec.c

index 2a89a72..5d13650 100644 (file)
@@ -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;
     }
index b4b042c..b9897b9 100644 (file)
@@ -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;