h264_sei: Return meaningful values
authorVittorio Giovara <vittorio.giovara@gmail.com>
Fri, 2 Aug 2013 08:33:00 +0000 (10:33 +0200)
committerDiego Biurrun <diego@biurrun.de>
Fri, 2 Aug 2013 16:19:40 +0000 (18:19 +0200)
Signed-off-by: Diego Biurrun <diego@biurrun.de>
libavcodec/h264_sei.c

index 4fe5193..dde5c21 100644 (file)
@@ -61,7 +61,7 @@ static int decode_picture_timing(H264Context *h)
         h->sei_ct_type    = 0;
 
         if (h->sei_pic_struct > SEI_PIC_STRUCT_FRAME_TRIPLING)
-            return -1;
+            return AVERROR_INVALIDDATA;
 
         num_clock_ts = sei_num_clock_ts_table[h->sei_pic_struct];
 
@@ -109,7 +109,7 @@ static int decode_unregistered_user_data(H264Context *h, int size)
     int e, build, i;
 
     if (size < 16)
-        return -1;
+        return AVERROR_INVALIDDATA;
 
     for (i = 0; i < sizeof(user_data) - 1 && i < size; i++)
         user_data[i] = get_bits(&h->gb, 8);
@@ -150,7 +150,7 @@ static int decode_buffering_period(H264Context *h)
     if (sps_id > 31 || !h->sps_buffers[sps_id]) {
         av_log(h->avctx, AV_LOG_ERROR,
                "non-existing SPS %d referenced in buffering period\n", sps_id);
-        return -1;
+        return AVERROR_INVALIDDATA;
     }
     sps = h->sps_buffers[sps_id];
 
@@ -181,6 +181,7 @@ int ff_h264_decode_sei(H264Context *h)
     while (get_bits_left(&h->gb) > 16) {
         int size = 0;
         int type = 0;
+        int ret  = 0;
 
         do
             type += show_bits(&h->gb, 8);
@@ -192,20 +193,24 @@ int ff_h264_decode_sei(H264Context *h)
 
         switch (type) {
         case SEI_TYPE_PIC_TIMING: // Picture timing SEI
-            if (decode_picture_timing(h) < 0)
-                return -1;
+            ret = decode_picture_timing(h);
+            if (ret < 0)
+                return ret;
             break;
         case SEI_TYPE_USER_DATA_UNREGISTERED:
-            if (decode_unregistered_user_data(h, size) < 0)
-                return -1;
+            ret = decode_unregistered_user_data(h, size);
+            if (ret < 0)
+                return ret;
             break;
         case SEI_TYPE_RECOVERY_POINT:
-            if (decode_recovery_point(h) < 0)
-                return -1;
+            ret = decode_recovery_point(h);
+            if (ret < 0)
+                return ret;
             break;
         case SEI_BUFFERING_PERIOD:
-            if (decode_buffering_period(h) < 0)
-                return -1;
+            ret = decode_buffering_period(h);
+            if (ret < 0)
+                return ret;
             break;
         default:
             skip_bits(&h->gb, 8 * size);