[FFmpeg-devel,1/1] libavcodec/h264: Handle ENOMEM error when decoding slice nal unit.

Submitted by Asaf Kave on July 17, 2019, 8:34 a.m.

Details

Message ID 20190717083421.9387-1-kaveasaf@gmail.com
State New
Headers show

Commit Message

Asaf Kave July 17, 2019, 8:34 a.m.
Populate the real error when alloc_picture failed, during decoding h264 slice.
When this error occurred, need to break the decoding process of the rest nal's, and need to rise this error back to the user, to indicate that there is decoder memory issue.
---
 libavcodec/h264_slice.c | 5 +++--
 libavcodec/h264dec.c    | 4 ++++
 2 files changed, 7 insertions(+), 2 deletions(-)

Patch hide | download patch | download mbox

diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c
index 5ceee107a0..76353fe85b 100644
--- a/libavcodec/h264_slice.c
+++ b/libavcodec/h264_slice.c
@@ -1644,9 +1644,10 @@  static int h264_field_start(H264Context *h, const H264SliceContext *sl,
     }
 
     if (!FIELD_PICTURE(h) || h->first_field) {
-        if (h264_frame_start(h) < 0) {
+        ret = h264_frame_start(h);
+        if (ret < 0) {
             h->first_field = 0;
-            return AVERROR_INVALIDDATA;
+            return ret;
         }
     } else {
         int field = h->picture_structure == PICT_BOTTOM_FIELD;
diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c
index 8d1bd16a8e..0a4d4b8c62 100644
--- a/libavcodec/h264dec.c
+++ b/libavcodec/h264dec.c
@@ -754,6 +754,10 @@  static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size)
 
         if (err < 0) {
             av_log(h->avctx, AV_LOG_ERROR, "decode_slice_header error\n");
+            if (err == AVERROR(ENOMEM)) {
+               ret = err;
+               goto end;
+            }
         }
     }