mirror of https://github.com/FFmpeg/FFmpeg.git
parent
e7814ed839
commit
b4866f717c
8 changed files with 134 additions and 2 deletions
@ -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", |
||||
}; |
@ -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