Merge commit '23a211cbba0b7c9ee694040031b2e5da1be54a00'
authorMichael Niedermayer <michaelni@gmx.at>
Mon, 28 Oct 2013 11:34:35 +0000 (12:34 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 28 Oct 2013 11:34:35 +0000 (12:34 +0100)
* commit '23a211cbba0b7c9ee694040031b2e5da1be54a00':
  lavc: change all decoders to behave consistently with AV_EF_CRCCHECK.

Conflicts:
libavcodec/avcodec.h
libavcodec/tta.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/ac3dec.c
libavcodec/alsdec.c
libavcodec/avcodec.h
libavcodec/takdec.c
libavcodec/tta.c
libavcodec/wavpack.c

Simple merge
Simple merge
@@@ -2474,15 -2332,17 +2474,22 @@@ typedef struct AVCodecContext 
       * - decoding: Set by user.
       */
      int err_recognition;
- #define AV_EF_CRCCHECK  (1<<0)          ///< verify embedded CRCs
+ /**
+  * Verify checksums embedded in the bitstream (could be of either encoded or
+  * decoded data, depending on the codec) and print an error message on mismatch.
+  * If AV_EF_EXPLODE is also set, a mismatching checksum will result in the
+  * decoder returning an error.
+  */
+ #define AV_EF_CRCCHECK  (1<<0)
 -#define AV_EF_BITSTREAM (1<<1)
 -#define AV_EF_BUFFER    (1<<2)
 -#define AV_EF_EXPLODE   (1<<3)
 +#define AV_EF_BITSTREAM (1<<1)          ///< detect bitstream specification deviations
 +#define AV_EF_BUFFER    (1<<2)          ///< detect improper bitstream length
 +#define AV_EF_EXPLODE   (1<<3)          ///< abort decoding on minor error detection
 +
 +#define AV_EF_CAREFUL    (1<<16)        ///< consider things that violate the spec, are fast to calculate and have not been seen in the wild as errors
 +#define AV_EF_COMPLIANT  (1<<17)        ///< consider all spec non compliancies as errors
 +#define AV_EF_AGGRESSIVE (1<<18)        ///< consider things that a sane encoder should not do as an error
 +
  
      /**
       * opaque 64bit number (generally a PTS) that will be reordered and
@@@ -686,11 -684,17 +686,12 @@@ static int tak_decode_frame(AVCodecCont
      if ((ret = ff_tak_decode_frame_header(avctx, gb, &s->ti, 0)) < 0)
          return ret;
  
 -    if (s->ti.flags & TAK_FRAME_FLAG_HAS_METADATA) {
 -        avpriv_request_sample(avctx, "Frame metadata");
 -        return AVERROR_PATCHWELCOME;
 -    }
 -
 -    hsize = get_bits_count(gb) / 8;
 -    if (avctx->err_recognition & AV_EF_CRCCHECK) {
 +    if (avctx->err_recognition & (AV_EF_CRCCHECK|AV_EF_COMPLIANT)) {
 +        hsize = get_bits_count(gb) / 8;
          if (ff_tak_check_crc(pkt->data, hsize)) {
              av_log(avctx, AV_LOG_ERROR, "CRC error\n");
-             return AVERROR_INVALIDDATA;
+             if (avctx->err_recognition & AV_EF_EXPLODE)
+                 return AVERROR_INVALIDDATA;
          }
      }
  
Simple merge
Simple merge