Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2016-10-01 11:03:05 +0300
committerAnton Khirnov <anton@khirnov.net>2016-10-02 12:41:45 +0300
commit5bf2454e7cb03609b3ec1a3cf4c22427fe5f8e36 (patch)
treee1dc3fe7e38845891de448d712151abc8fff91ba
parent2124711b950b03c582a119c75f52a87acc32d6ec (diff)
h264dec: support broken files with mp4 extradata/annex b data
Bug-Id: 966
-rw-r--r--libavcodec/h264dec.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c
index 2c5a7db33a..330a74dcb4 100644
--- a/libavcodec/h264dec.c
+++ b/libavcodec/h264dec.c
@@ -530,7 +530,24 @@ static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size)
if (ret < 0) {
av_log(avctx, AV_LOG_ERROR,
"Error splitting the input into NAL units.\n");
- return ret;
+
+ /* There are samples in the wild with mp4-style extradata, but Annex B
+ * data in the packets. If we fail parsing the packet as mp4, try it again
+ * as Annex B. */
+ if (h->is_avc && !(avctx->err_recognition & AV_EF_EXPLODE)) {
+ int err = ff_h2645_packet_split(&h->pkt, buf, buf_size, avctx, 0, 0,
+ avctx->codec_id);
+ if (err >= 0) {
+ av_log(avctx, AV_LOG_WARNING,
+ "The stream seems to contain AVCC extradata with Annex B "
+ "formatted data, which is invalid.");
+ h->is_avc = 0;
+ ret = 0;
+ }
+ }
+
+ if (ret < 0)
+ return ret;
}
if (avctx->active_thread_type & FF_THREAD_FRAME)