Merge commit 'ce3ce08850f1690dff01d9bb4ed6a4274d52771e' into release/0.10
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 22 Sep 2013 11:28:41 +0000 (13:28 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 22 Sep 2013 11:28:52 +0000 (13:28 +0200)
* commit 'ce3ce08850f1690dff01d9bb4ed6a4274d52771e':
  dca: Error out on missing DSYNC
  pcm: always use codec->id instead of codec_id
  mlpdec: Do not set invalid context in read_restart_header
  pcx: Do not overread source buffer in pcx_rle_decode
  wmavoice: conceal clearly corrupted blocks
  iff: Do not read over the source buffer
  qdm2: Conceal broken samples

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/dca.c
libavcodec/iff.c
libavcodec/mlpdec.c
libavcodec/pcm.c
libavcodec/pcx.c
libavcodec/qdm2.c
libavcodec/wmavoice.c

Simple merge
@@@ -488,36 -269,12 +488,36 @@@ static int decode_frame_ilbm(AVCodecCon
      }
      s->init = 1;
  
 -    if (avctx->codec_tag == MKTAG('I','L','B','M')) { // interleaved
 +    if (avctx->codec_tag == MKTAG('A','C','B','M')) {
 +        if (avctx->pix_fmt == PIX_FMT_PAL8 || avctx->pix_fmt == PIX_FMT_GRAY8) {
 +            memset(s->frame.data[0], 0, avctx->height * s->frame.linesize[0]);
 +            for (plane = 0; plane < s->bpp; plane++) {
 +                for(y = 0; y < avctx->height && buf < buf_end; y++ ) {
 +                    uint8_t *row = &s->frame.data[0][ y*s->frame.linesize[0] ];
 +                    decodeplane8(row, buf, FFMIN(s->planesize, buf_end - buf), plane);
 +                    buf += s->planesize;
 +                }
 +            }
 +        } else if (s->ham) { // HAM to PIX_FMT_BGR32
 +            memset(s->frame.data[0], 0, avctx->height * s->frame.linesize[0]);
 +            for(y = 0; y < avctx->height; y++) {
 +                uint8_t *row = &s->frame.data[0][y * s->frame.linesize[0]];
 +                memset(s->ham_buf, 0, s->planesize * 8);
 +                for (plane = 0; plane < s->bpp; plane++) {
 +                    const uint8_t * start = buf + (plane * avctx->height + y) * s->planesize;
 +                    if (start >= buf_end)
 +                        break;
 +                    decodeplane8(s->ham_buf, start, FFMIN(s->planesize, buf_end - start), plane);
 +                }
 +                decode_ham_plane32((uint32_t *) row, s->ham_buf, s->ham_palbuf, s->planesize);
 +            }
 +        }
 +    } else if (avctx->codec_tag == MKTAG('I','L','B','M')) { // interleaved
          if (avctx->pix_fmt == PIX_FMT_PAL8 || avctx->pix_fmt == PIX_FMT_GRAY8) {
-             for(y = 0; y < avctx->height; y++ ) {
+             for (y = 0; y < avctx->height && buf < buf_end; y++ ) {
                  uint8_t *row = &s->frame.data[0][ y*s->frame.linesize[0] ];
                  memset(row, 0, avctx->width);
 -                for (plane = 0; plane < avctx->bits_per_coded_sample && buf < buf_end; plane++) {
 +                for (plane = 0; plane < s->bpp && buf < buf_end; plane++) {
                      decodeplane8(row, buf, FFMIN(s->planesize, buf_end - buf), plane);
                      buf += s->planesize;
                  }
Simple merge
@@@ -268,12 -268,10 +268,12 @@@ static int pcm_decode_frame(AVCodecCont
  
      /* av_get_bits_per_sample returns 0 for CODEC_ID_PCM_DVD */
      samples_per_block = 1;
-     if (CODEC_ID_PCM_DVD == avctx->codec_id) {
+     if (avctx->codec->id == CODEC_ID_PCM_DVD) {
          if (avctx->bits_per_coded_sample != 20 &&
              avctx->bits_per_coded_sample != 24) {
 -            av_log(avctx, AV_LOG_ERROR, "PCM DVD unsupported sample depth\n");
 +            av_log(avctx, AV_LOG_ERROR,
 +                   "PCM DVD unsupported sample depth %i\n",
 +                   avctx->bits_per_coded_sample);
              return AVERROR(EINVAL);
          }
          /* 2 samples are interleaved per block in PCM_DVD */
Simple merge
Simple merge
Simple merge