Signed-off-by: Diego Biurrun <diego@biurrun.de>tags/n2.3
@@ -289,8 +289,8 @@ OBJS-$(CONFIG_ON2AVC_DECODER) += on2avc.o on2avcdata.o | |||
OBJS-$(CONFIG_OPUS_DECODER) += opusdec.o opus.o opus_celt.o \ | |||
opus_imdct.o opus_silk.o \ | |||
vorbis_data.o | |||
OBJS-$(CONFIG_PAF_VIDEO_DECODER) += paf.o | |||
OBJS-$(CONFIG_PAF_AUDIO_DECODER) += paf.o | |||
OBJS-$(CONFIG_PAF_AUDIO_DECODER) += pafaudio.o | |||
OBJS-$(CONFIG_PAF_VIDEO_DECODER) += pafvideo.o | |||
OBJS-$(CONFIG_PAM_DECODER) += pnmdec.o pnm.o | |||
OBJS-$(CONFIG_PAM_ENCODER) += pamenc.o | |||
OBJS-$(CONFIG_PBM_DECODER) += pnmdec.o pnm.o | |||
@@ -0,0 +1,84 @@ | |||
/* | |||
* Packed Animation File audio decoder | |||
* Copyright (c) 2012 Paul B Mahol | |||
* | |||
* This file is part of Libav. | |||
* | |||
* Libav 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. | |||
* | |||
* Libav 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 Libav; 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,5 +1,5 @@ | |||
/* | |||
* Packed Animation File video and audio decoder | |||
* Packed Animation File video decoder | |||
* Copyright (c) 2012 Paul B Mahol | |||
* | |||
* This file is part of Libav. | |||
@@ -20,16 +20,11 @@ | |||
*/ | |||
#include "libavutil/imgutils.h" | |||
#include "libavutil/intreadwrite.h" | |||
#include "avcodec.h" | |||
#include "bytestream.h" | |||
#include "copy_block.h" | |||
#include "internal.h" | |||
#include "mathops.h" | |||
#define PAF_SOUND_SAMPLES 2205 | |||
#define PAF_SOUND_FRAME_SIZE ((256 + PAF_SOUND_SAMPLES) * 2) | |||
static const uint8_t block_sequences[16][8] = { | |||
{ 0, 0, 0, 0, 0, 0, 0, 0 }, { 2, 0, 0, 0, 0, 0, 0, 0 }, | |||
@@ -378,52 +373,6 @@ static int paf_video_decode(AVCodecContext *avctx, void *data, | |||
return pkt->size; | |||
} | |||
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; | |||
} | |||
#if CONFIG_PAF_VIDEO_DECODER | |||
AVCodec ff_paf_video_decoder = { | |||
.name = "paf_video", | |||
.long_name = NULL_IF_CONFIG_SMALL("Amazing Studio Packed Animation File Video"), | |||
@@ -435,16 +384,3 @@ AVCodec ff_paf_video_decoder = { | |||
.decode = paf_video_decode, | |||
.capabilities = CODEC_CAP_DR1, | |||
}; | |||
#endif | |||
#if CONFIG_PAF_AUDIO_DECODER | |||
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, | |||
}; | |||
#endif |