Merge commit 'b0633f83f277c05bf1f617a99c7aedd2db8306e3'
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 6 Jul 2014 18:11:40 +0000 (20:11 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 6 Jul 2014 18:11:40 +0000 (20:11 +0200)
* commit 'b0633f83f277c05bf1f617a99c7aedd2db8306e3':
  paf: split audio and video decoder

Conflicts:
libavcodec/pafvideo.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/Makefile
libavcodec/pafaudio.c
libavcodec/pafvideo.c

Simple merge
index 0000000,52aaabf..9b48533
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,84 +1,84 @@@
 - * This file is part of Libav.
+ /*
+  * Packed Animation File audio decoder
+  * Copyright (c) 2012 Paul B Mahol
+  *
 - * Libav is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
+  *
 - * Libav is distributed in the hope that it will be useful,
++ * FFmpeg is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Lesser General Public
+  * License as published by the Free Software Foundation; either
+  * version 2.1 of the License, or (at your option) any later version.
+  *
 - * License along with Libav; if not, write to the Free Software
++ * FFmpeg is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
++ * License along with FFmpeg; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+  */
+ #include "libavutil/intreadwrite.h"
+ #include "avcodec.h"
+ #include "internal.h"
+ #include "mathops.h"
+ #define PAF_SOUND_SAMPLES     2205
+ #define PAF_SOUND_FRAME_SIZE  ((256 + PAF_SOUND_SAMPLES) * 2)
+ static av_cold int paf_audio_init(AVCodecContext *avctx)
+ {
+     if (avctx->channels != 2) {
+         av_log(avctx, AV_LOG_ERROR, "invalid number of channels\n");
+         return AVERROR_INVALIDDATA;
+     }
+     avctx->channel_layout = AV_CH_LAYOUT_STEREO;
+     avctx->sample_fmt     = AV_SAMPLE_FMT_S16;
+     return 0;
+ }
+ static int paf_audio_decode(AVCodecContext *avctx, void *data,
+                             int *got_frame, AVPacket *pkt)
+ {
+     AVFrame *frame = data;
+     int16_t *output_samples;
+     const uint8_t *src = pkt->data;
+     int frames, ret, i, j;
+     int16_t cb[256];
+     frames = pkt->size / PAF_SOUND_FRAME_SIZE;
+     if (frames < 1)
+         return AVERROR_INVALIDDATA;
+     frame->nb_samples = PAF_SOUND_SAMPLES * frames;
+     if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
+         return ret;
+     output_samples = (int16_t *)frame->data[0];
+     // codebook of 256 16-bit samples and 8-bit indices to it
+     for (j = 0; j < frames; j++) {
+         for (i = 0; i < 256; i++)
+             cb[i] = sign_extend(AV_RL16(src + i * 2), 16);
+         src += 256 * 2;
+         // always 2 channels
+         for (i = 0; i < PAF_SOUND_SAMPLES * 2; i++)
+             *output_samples++ = cb[*src++];
+     }
+     *got_frame = 1;
+     return pkt->size;
+ }
+ AVCodec ff_paf_audio_decoder = {
+     .name         = "paf_audio",
+     .long_name    = NULL_IF_CONFIG_SMALL("Amazing Studio Packed Animation File Audio"),
+     .type         = AVMEDIA_TYPE_AUDIO,
+     .id           = AV_CODEC_ID_PAF_AUDIO,
+     .init         = paf_audio_init,
+     .decode       = paf_audio_decode,
+     .capabilities = CODEC_CAP_DR1,
+ };
@@@ -1,10 -1,10 +1,10 @@@
  /*
-  * Packed Animation File video and audio decoder
+  * Packed Animation File video decoder
   * Copyright (c) 2012 Paul B Mahol
   *
 - * This file is part of Libav.
 + * This file is part of FFmpeg.
   *
 - * Libav is free software; you can redistribute it and/or
 + * FFmpeg is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 2.1 of the License, or (at your option) any later version.
   */
  
  #include "libavutil/imgutils.h"
- #include "libavutil/intreadwrite.h"
  
 +#include "libavcodec/paf.h"
  #include "avcodec.h"
  #include "bytestream.h"
  #include "copy_block.h"
  #include "internal.h"
- #include "mathops.h"
 +
  static const uint8_t block_sequences[16][8] = {
 -    { 0, 0, 0, 0, 0, 0, 0, 0 }, { 2, 0, 0, 0, 0, 0, 0, 0 },
 -    { 5, 7, 0, 0, 0, 0, 0, 0 }, { 5, 0, 0, 0, 0, 0, 0, 0 },
 -    { 6, 0, 0, 0, 0, 0, 0, 0 }, { 5, 7, 5, 7, 0, 0, 0, 0 },
 -    { 5, 7, 5, 0, 0, 0, 0, 0 }, { 5, 7, 6, 0, 0, 0, 0, 0 },
 -    { 5, 5, 0, 0, 0, 0, 0, 0 }, { 3, 0, 0, 0, 0, 0, 0, 0 },
 -    { 6, 6, 0, 0, 0, 0, 0, 0 }, { 2, 4, 0, 0, 0, 0, 0, 0 },
 -    { 2, 4, 5, 7, 0, 0, 0, 0 }, { 2, 4, 5, 0, 0, 0, 0, 0 },
 -    { 2, 4, 6, 0, 0, 0, 0, 0 }, { 2, 4, 5, 7, 5, 7, 0, 0 },
 +    { 0, 0, 0, 0, 0, 0, 0, 0 },
 +    { 2, 0, 0, 0, 0, 0, 0, 0 },
 +    { 5, 7, 0, 0, 0, 0, 0, 0 },
 +    { 5, 0, 0, 0, 0, 0, 0, 0 },
 +    { 6, 0, 0, 0, 0, 0, 0, 0 },
 +    { 5, 7, 5, 7, 0, 0, 0, 0 },
 +    { 5, 7, 5, 0, 0, 0, 0, 0 },
 +    { 5, 7, 6, 0, 0, 0, 0, 0 },
 +    { 5, 5, 0, 0, 0, 0, 0, 0 },
 +    { 3, 0, 0, 0, 0, 0, 0, 0 },
 +    { 6, 6, 0, 0, 0, 0, 0, 0 },
 +    { 2, 4, 0, 0, 0, 0, 0, 0 },
 +    { 2, 4, 5, 7, 0, 0, 0, 0 },
 +    { 2, 4, 5, 0, 0, 0, 0, 0 },
 +    { 2, 4, 6, 0, 0, 0, 0, 0 },
 +    { 2, 4, 5, 7, 5, 7, 0, 0 },
  };
  
  typedef struct PAFVideoDecContext {