mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-27 13:30:45 +00:00
ADP demuxer
Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
parent
e7814ed839
commit
b4866f717c
@ -41,6 +41,7 @@ version <next>:
|
|||||||
- extractplanes filter
|
- extractplanes filter
|
||||||
- avectorscope filter
|
- avectorscope filter
|
||||||
- ADPCM DTK decoder
|
- ADPCM DTK decoder
|
||||||
|
- ADP demuxer
|
||||||
|
|
||||||
|
|
||||||
version 1.2:
|
version 1.2:
|
||||||
|
@ -147,6 +147,8 @@ library:
|
|||||||
@tab Multimedia format used in game Heart Of Darkness.
|
@tab Multimedia format used in game Heart Of Darkness.
|
||||||
@item Apple HTTP Live Streaming @tab @tab X
|
@item Apple HTTP Live Streaming @tab @tab X
|
||||||
@item Artworx Data Format @tab @tab X
|
@item Artworx Data Format @tab @tab X
|
||||||
|
@item ADP @tab @tab X
|
||||||
|
@tab Audio format used on the Nintendo Gamecube.
|
||||||
@item AFC @tab @tab X
|
@item AFC @tab @tab X
|
||||||
@tab Audio format used on the Nintendo Gamecube.
|
@tab Audio format used on the Nintendo Gamecube.
|
||||||
@item ASF @tab X @tab X
|
@item ASF @tab X @tab X
|
||||||
|
@ -55,6 +55,7 @@ OBJS-$(CONFIG_AC3_DEMUXER) += ac3dec.o rawdec.o
|
|||||||
OBJS-$(CONFIG_AC3_MUXER) += rawenc.o
|
OBJS-$(CONFIG_AC3_MUXER) += rawenc.o
|
||||||
OBJS-$(CONFIG_ACT_DEMUXER) += act.o
|
OBJS-$(CONFIG_ACT_DEMUXER) += act.o
|
||||||
OBJS-$(CONFIG_ADF_DEMUXER) += bintext.o sauce.o
|
OBJS-$(CONFIG_ADF_DEMUXER) += bintext.o sauce.o
|
||||||
|
OBJS-$(CONFIG_ADP_DEMUXER) += adp.o
|
||||||
OBJS-$(CONFIG_ADX_DEMUXER) += adxdec.o
|
OBJS-$(CONFIG_ADX_DEMUXER) += adxdec.o
|
||||||
OBJS-$(CONFIG_ADX_MUXER) += rawenc.o
|
OBJS-$(CONFIG_ADX_MUXER) += rawenc.o
|
||||||
OBJS-$(CONFIG_ADTS_MUXER) += adtsenc.o
|
OBJS-$(CONFIG_ADTS_MUXER) += adtsenc.o
|
||||||
|
91
libavformat/adp.c
Normal file
91
libavformat/adp.c
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
/*
|
||||||
|
* ADP demuxer
|
||||||
|
* Copyright (c) 2013 James Almer
|
||||||
|
*
|
||||||
|
* This file is part of FFmpeg.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* 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/channel_layout.h"
|
||||||
|
#include "libavutil/intreadwrite.h"
|
||||||
|
#include "avformat.h"
|
||||||
|
#include "internal.h"
|
||||||
|
|
||||||
|
static int adp_probe(AVProbeData *p)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (p->buf_size < 32)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
for (i = 0; i < p->buf_size - 3; i+=32)
|
||||||
|
if (p->buf[i] != p->buf[i+2] || p->buf[i+1] != p->buf[i+3])
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return p->buf_size < 260 ? 1 : AVPROBE_SCORE_MAX / 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int adp_read_header(AVFormatContext *s)
|
||||||
|
{
|
||||||
|
AVStream *st;
|
||||||
|
|
||||||
|
st = avformat_new_stream(s, NULL);
|
||||||
|
if (!st)
|
||||||
|
return AVERROR(ENOMEM);
|
||||||
|
|
||||||
|
st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
|
||||||
|
st->codec->codec_id = AV_CODEC_ID_ADPCM_DTK;
|
||||||
|
st->codec->channel_layout = AV_CH_LAYOUT_STEREO;
|
||||||
|
st->codec->channels = 2;
|
||||||
|
st->codec->sample_rate = 48000;
|
||||||
|
st->start_time = 0;
|
||||||
|
if (s->pb->seekable)
|
||||||
|
st->duration = av_get_audio_frame_duration(st->codec, avio_size(s->pb));
|
||||||
|
|
||||||
|
avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int adp_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||||
|
{
|
||||||
|
int ret, size = 1024;
|
||||||
|
|
||||||
|
if (url_feof(s->pb))
|
||||||
|
return AVERROR_EOF;
|
||||||
|
|
||||||
|
ret = av_get_packet(s->pb, pkt, size);
|
||||||
|
|
||||||
|
if (ret != size) {
|
||||||
|
if (ret < 0) {
|
||||||
|
av_free_packet(pkt);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
av_shrink_packet(pkt, ret);
|
||||||
|
}
|
||||||
|
pkt->stream_index = 0;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
AVInputFormat ff_adp_demuxer = {
|
||||||
|
.name = "adp",
|
||||||
|
.long_name = NULL_IF_CONFIG_SMALL("ADP"),
|
||||||
|
.read_probe = adp_probe,
|
||||||
|
.read_header = adp_read_header,
|
||||||
|
.read_packet = adp_read_packet,
|
||||||
|
.extensions = "adp,dtk",
|
||||||
|
};
|
@ -65,6 +65,7 @@ void av_register_all(void)
|
|||||||
REGISTER_MUXDEMUX(AC3, ac3);
|
REGISTER_MUXDEMUX(AC3, ac3);
|
||||||
REGISTER_DEMUXER (ACT, act);
|
REGISTER_DEMUXER (ACT, act);
|
||||||
REGISTER_DEMUXER (ADF, adf);
|
REGISTER_DEMUXER (ADF, adf);
|
||||||
|
REGISTER_DEMUXER (ADP, adp);
|
||||||
REGISTER_MUXER (ADTS, adts);
|
REGISTER_MUXER (ADTS, adts);
|
||||||
REGISTER_MUXDEMUX(ADX, adx);
|
REGISTER_MUXDEMUX(ADX, adx);
|
||||||
REGISTER_DEMUXER (AEA, aea);
|
REGISTER_DEMUXER (AEA, aea);
|
||||||
|
@ -30,8 +30,8 @@
|
|||||||
#include "libavutil/avutil.h"
|
#include "libavutil/avutil.h"
|
||||||
|
|
||||||
#define LIBAVFORMAT_VERSION_MAJOR 55
|
#define LIBAVFORMAT_VERSION_MAJOR 55
|
||||||
#define LIBAVFORMAT_VERSION_MINOR 4
|
#define LIBAVFORMAT_VERSION_MINOR 5
|
||||||
#define LIBAVFORMAT_VERSION_MICRO 101
|
#define LIBAVFORMAT_VERSION_MICRO 100
|
||||||
|
|
||||||
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
|
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
|
||||||
LIBAVFORMAT_VERSION_MINOR, \
|
LIBAVFORMAT_VERSION_MINOR, \
|
||||||
|
@ -16,6 +16,9 @@ fate-adpcm-creative-8-2.6bit: CMD = md5 -i $(SAMPLES)/creative/BBC_3BIT.VOC -f s
|
|||||||
FATE_ADPCM-$(call DEMDEC, VOC, ADPCM_SBPRO_4) += fate-adpcm-creative-8-4bit
|
FATE_ADPCM-$(call DEMDEC, VOC, ADPCM_SBPRO_4) += fate-adpcm-creative-8-4bit
|
||||||
fate-adpcm-creative-8-4bit: CMD = md5 -i $(SAMPLES)/creative/BBC_4BIT.VOC -f s16le
|
fate-adpcm-creative-8-4bit: CMD = md5 -i $(SAMPLES)/creative/BBC_4BIT.VOC -f s16le
|
||||||
|
|
||||||
|
FATE_ADPCM-$(call DEMDEC, ADP, ADPCM_DTK) += fate-adpcm-dtk
|
||||||
|
fate-adpcm-dtk: CMD = framecrc -i $(SAMPLES)/adp/shakespr_partial.adp -f s16le
|
||||||
|
|
||||||
FATE_ADPCM-$(call DEMDEC, EA, ADPCM_EA) += fate-adpcm-ea-1
|
FATE_ADPCM-$(call DEMDEC, EA, ADPCM_EA) += fate-adpcm-ea-1
|
||||||
fate-adpcm-ea-1: CMD = framecrc -i $(SAMPLES)/ea-wve/networkBackbone-partial.wve -frames:a 26 -vn
|
fate-adpcm-ea-1: CMD = framecrc -i $(SAMPLES)/ea-wve/networkBackbone-partial.wve -frames:a 26 -vn
|
||||||
|
|
||||||
|
33
tests/ref/fate/adpcm-dtk
Normal file
33
tests/ref/fate/adpcm-dtk
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#tb 0: 1/48000
|
||||||
|
0, 0, 0, 896, 3584, 0xdae789d5
|
||||||
|
0, 896, 896, 896, 3584, 0x168ed9b6
|
||||||
|
0, 1792, 1792, 896, 3584, 0x8920c8d5
|
||||||
|
0, 2688, 2688, 896, 3584, 0xaf0a3245
|
||||||
|
0, 3584, 3584, 896, 3584, 0x884ee935
|
||||||
|
0, 4480, 4480, 896, 3584, 0xe6a832ad
|
||||||
|
0, 5376, 5376, 896, 3584, 0x1fa12ea2
|
||||||
|
0, 6272, 6272, 896, 3584, 0xf119198c
|
||||||
|
0, 7168, 7168, 896, 3584, 0x0a6dbf72
|
||||||
|
0, 8064, 8064, 896, 3584, 0xd3467881
|
||||||
|
0, 8960, 8960, 896, 3584, 0x25d504ec
|
||||||
|
0, 9856, 9856, 896, 3584, 0x452730c9
|
||||||
|
0, 10752, 10752, 896, 3584, 0x42b92ff1
|
||||||
|
0, 11648, 11648, 896, 3584, 0x85c67bf3
|
||||||
|
0, 12544, 12544, 896, 3584, 0xab4d99e9
|
||||||
|
0, 13440, 13440, 896, 3584, 0xe5bfc4da
|
||||||
|
0, 14336, 14336, 896, 3584, 0x7a5210e9
|
||||||
|
0, 15232, 15232, 896, 3584, 0x5265fcd3
|
||||||
|
0, 16128, 16128, 896, 3584, 0x76531427
|
||||||
|
0, 17024, 17024, 896, 3584, 0xb2b8d7ab
|
||||||
|
0, 17920, 17920, 896, 3584, 0x05a453e8
|
||||||
|
0, 18816, 18816, 896, 3584, 0x742c45bb
|
||||||
|
0, 19712, 19712, 896, 3584, 0x57aaee3b
|
||||||
|
0, 20608, 20608, 896, 3584, 0x997bf703
|
||||||
|
0, 21504, 21504, 896, 3584, 0xe2d14b13
|
||||||
|
0, 22400, 22400, 896, 3584, 0xdafbdd2f
|
||||||
|
0, 23296, 23296, 896, 3584, 0x448cec3a
|
||||||
|
0, 24192, 24192, 896, 3584, 0xe6f6fb9c
|
||||||
|
0, 25088, 25088, 896, 3584, 0x0310276a
|
||||||
|
0, 25984, 25984, 896, 3584, 0x44bf04e9
|
||||||
|
0, 26880, 26880, 896, 3584, 0xe2105d33
|
||||||
|
0, 27776, 27776, 896, 3584, 0x08b7d5e0
|
Loading…
Reference in New Issue
Block a user