[PR] avformat/rakidec: add UbiArt RAKI demuxer (PR #24317)
MrKev312 via ffmpeg-devel <[email protected]>
| Newsgroups | gmane.comp.video.ffmpeg.devel |
|---|---|
| Message-ID | <[email protected]> |
PR #24317 opened by MrKev312 URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24317 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24317.patch # Summary of changes This pull request adds demuxing support for UbiArt RAKI audio files used across several platforms and console generations. The demuxer: * handles both little- and big-endian RAKI variants and validates their chunk tables and payload bounds; * exposes little- and big-endian PCM, Microsoft ADPCM, Nintendo DSP ADPCM, MP3, Opus, and XMA2 payloads using FFmpeg's existing codec IDs; * supports both interleaved and separately stored stereo Nintendo DSP blocks; * handles both observed PlayStation 3 MP3 header layouts, including an optional leading word; * reconstructs standard Opus extradata and removes the Nintendo per-packet size and final-range framing from Switch Opus packets; * reports packet timestamps, durations, initial padding, and trailing padding where the container provides enough information. Nine demux-only FATE tests cover the supported layouts. They use `framecrc` with stream copy, so they exercise the demuxer and emitted packet data without requiring any audio decoder. A minimal build with no decoders enabled passes all nine tests. The Switch Opus fixture additionally verifies every emitted raw Opus packet after the Nintendo framing is removed. All 13 packet sizes and checksums match an independent parse of the framed payload byte-for-byte. The planar Nintendo DSP fixtures likewise verify the interleaving performed by the demuxer, and the two PlayStation 3 MP3 layouts produce identical MP3 packet data. The FATE samples contain short synthetic stereo tones and no game audio. The samples are split between this pull request and a follow-up comment due to the attachment limit. ```fate-samples raki/cafe-interleaved.raki raki/cafe-planar.raki raki/nx-opus.raki raki/ps3-mp3.raki raki/ps3-mp3-prefixed.raki raki/wii-pcm.raki raki/win-ms-adpcm.raki raki/win-pcm.raki raki/x360-xma2.raki ``` The first five samples are attached here; the remaining four are attached in the follow-up comment below. ## Testing * clean build with the RAKI demuxer, framecrc muxer, file and pipe protocols, and no decoders enabled; * all nine `fate-raki` tests pass; * `git diff --check` passes. I am prepared to maintain the RAKI demuxer. >From f475935bc2a941fa213bec11b8c7b74dd39997ed Mon Sep 17 00:00:00 2001 From: Martijn Brouwer <[email protected]> Date: Fri, 28 Aug 2026 22:55:47 +0200 Subject: [PATCH 1/2] avformat/rakidec: add UbiArt RAKI demuxer Support PCM, Microsoft and Nintendo ADPCM, MP3, Nintendo Opus, and XMA2 payloads used across UbiArt platforms. Signed-off-by: Martijn Brouwer <[email protected]> --- Changelog | 1 + doc/general_contents.texi | 2 + libavformat/Makefile | 1 + libavformat/allformats.c | 1 + libavformat/rakidec.c | 938 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 943 insertions(+) create mode 100644 libavformat/rakidec.c diff --git a/Changelog b/Changelog index 38f1e10263..cbf293e3e5 100644 --- a/Changelog +++ b/Changelog @@ -10,6 +10,7 @@ version <next>: - latticepal filter - DVD-Audio LPCM decoder and demuxing support - AVFoundation input device selection by unique ID and USB serial number +- UbiArt RAKI audio demuxer version 9.0: diff --git a/doc/general_contents.texi b/doc/general_contents.texi index d81392e03f..5bc351675e 100644 --- a/doc/general_contents.texi +++ b/doc/general_contents.texi @@ -670,6 +670,8 @@ library: @item TechnoTrend PVA @tab @tab X @tab Used by TechnoTrend DVB PCI boards. @item QCP @tab @tab X +@item RAKI @tab @tab X + @tab Audio format used by UbiArt games. @item raw ADTS (AAC) @tab X @tab X @item raw AC-3 @tab X @tab X @item raw AMR-NB @tab @tab X diff --git a/libavformat/Makefile b/libavformat/Makefile index 038e0afd41..71bea5c5d5 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -515,6 +515,7 @@ OBJS-$(CONFIG_PVF_DEMUXER) += pvfdec.o pcm.o OBJS-$(CONFIG_QCP_DEMUXER) += qcp.o OBJS-$(CONFIG_QOA_DEMUXER) += qoadec.o OBJS-$(CONFIG_R3D_DEMUXER) += r3d.o +OBJS-$(CONFIG_RAKI_DEMUXER) += rakidec.o riffdec.o OBJS-$(CONFIG_RAWVIDEO_DEMUXER) += rawvideodec.o OBJS-$(CONFIG_RAWVIDEO_MUXER) += rawenc.o OBJS-$(CONFIG_RCWT_DEMUXER) += rcwtdec.o subtitles.o diff --git a/libavformat/allformats.c b/libavformat/allformats.c index e121c7441c..b7d4e78e8a 100644 --- a/libavformat/allformats.c +++ b/libavformat/allformats.c @@ -398,6 +398,7 @@ extern const FFInputFormat ff_pvf_demuxer; extern const FFInputFormat ff_qcp_demuxer; extern const FFInputFormat ff_qoa_demuxer; extern const FFInputFormat ff_r3d_demuxer; +extern const FFInputFormat ff_raki_demuxer; extern const FFInputFormat ff_rawvideo_demuxer; extern const FFOutputFormat ff_rawvideo_muxer; extern const FFInputFormat ff_rcwt_demuxer; diff --git a/libavformat/rakidec.c b/libavformat/rakidec.c new file mode 100644 index 0000000000..3ec7017d7e --- /dev/null +++ b/libavformat/rakidec.c @@ -0,0 +1,938 @@ +/* + * UbiArt RAKI audio demuxer + * Copyright (c) 2026 Martijn Brouwer + * + * 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/common.h" +#include "libavutil/intreadwrite.h" + +#include "avformat.h" +#include "avio.h" +#include "avio_internal.h" +#include "demux.h" +#include "id3v2.h" +#include "internal.h" +#include "riff.h" + +#define RAKI_MAX_CHUNKS 64 +#define RAKI_OPUS_HEAD_SIZE 19 + +typedef struct RakiChunk { + int64_t offset; + int64_t size; + int present; +} RakiChunk; + +enum RakiPacketType { + RAKI_PACKETS_CONTIGUOUS, + RAKI_PACKETS_DSP_PLANAR, + RAKI_PACKETS_NX_OPUS, +}; + +typedef struct RakiDemuxContext { + int big_endian; + int packet_type; + int ps3_mp3; + int64_t file_size; + int64_t raki_offset; + int64_t data_offset; + int64_t data_end; + int64_t next_pts; + int64_t expected_samples; + int packet_size; + + RakiChunk fmt; + RakiChunk data; + RakiChunk adin; + RakiChunk dspl; + RakiChunk dspr; + RakiChunk dats; + RakiChunk datl; + RakiChunk datr; + RakiChunk msf; + + int64_t plane_offset[2]; + int64_t plane_block; + int64_t plane_blocks; + int trailing_samples; +} RakiDemuxContext; + +static unsigned raki_read_u16(AVIOContext *pb, int big_endian) +{ + return big_endian ? avio_rb16(pb) : avio_rl16(pb); +} + +static unsigned raki_read_u32(AVIOContext *pb, int big_endian) +{ + return big_endian ? avio_rb32(pb) : avio_rl32(pb); +} + +static int raki_platform_is_big_endian(uint32_t platform) +{ + return platform == MKTAG('W', 'i', 'i', ' ') || + platform == MKTAG('C', 'a', 'f', 'e') || + platform == MKTAG('P', 'S', '3', ' ') || + platform == MKTAG('X', '3', '6', '0'); +} + +static int raki_probe(const AVProbeData *p) +{ + const uint8_t *buf; + uint32_t platform, chunks; + int big_endian; + + if (p->buf_size < 0x20) + return 0; + + if (!memcmp(p->buf, "RAKI", 4)) + buf = p->buf; + else if (!memcmp(p->buf + 4, "RAKI", 4)) + buf = p->buf + 4; + else + return 0; + + platform = AV_RL32(buf + 8); + big_endian = raki_platform_is_big_endian(platform); + chunks = big_endian ? AV_RB32(buf + 0x18) : AV_RL32(buf + 0x18); + + if (!chunks || chunks > RAKI_MAX_CHUNKS) + return AVPROBE_SCORE_MAX / 4; + + return AVPROBE_SCORE_MAX; +} + +static int raki_set_chunk(RakiDemuxContext *raki, uint32_t id, + int64_t offset, int64_t size) +{ + RakiChunk *chunk = NULL; + + switch (id) { + case MKTAG('f', 'm', 't', ' '): chunk = &raki->fmt; break; + case MKTAG('d', 'a', 't', 'a'): chunk = &raki->data; break; + case MKTAG('A', 'd', 'I', 'n'): chunk = &raki->adin; break; + case MKTAG('d', 's', 'p', 'L'): chunk = &raki->dspl; break; + case MKTAG('d', 's', 'p', 'R'): chunk = &raki->dspr; break; + case MKTAG('d', 'a', 't', 'S'): chunk = &raki->dats; break; + case MKTAG('d', 'a', 't', 'L'): chunk = &raki->datl; break; + case MKTAG('d', 'a', 't', 'R'): chunk = &raki->datr; break; + case MKTAG('M', 's', 'f', ' '): chunk = &raki->msf; break; + default: + return 0; + } + + if (chunk->present) + return AVERROR_INVALIDDATA; + + chunk->offset = offset; + chunk->size = size; + chunk->present = 1; + return 0; +} + +static int raki_check_chunk(AVFormatContext *s, const RakiChunk *chunk, + int64_t minimum_size) +{ + RakiDemuxContext *raki = s->priv_data; + + if (!chunk->present || chunk->size < minimum_size || + chunk->offset < 0 || chunk->offset > raki->file_size || + chunk->size > raki->file_size - chunk->offset) + return AVERROR_INVALIDDATA; + + return 0; +} + +static int raki_check_chunk_region(const RakiChunk *chunk, + int64_t start, int64_t end) +{ + if (chunk->present && + (chunk->offset < start || chunk->offset > end || + chunk->size > end - chunk->offset)) + return AVERROR_INVALIDDATA; + + return 0; +} + +static int raki_seek_chunk(AVFormatContext *s, const RakiChunk *chunk, + int64_t minimum_size) +{ + int ret = raki_check_chunk(s, chunk, minimum_size); + + if (ret < 0) + return ret; + if (avio_seek(s->pb, chunk->offset, SEEK_SET) < 0) + return AVERROR(EIO); + return 0; +} + +static enum AVCodecID raki_pcm_codec_id(unsigned tag, unsigned bits, + int big_endian) +{ + if (tag == 1) { + switch (bits) { + case 8: return AV_CODEC_ID_PCM_U8; + case 16: return big_endian ? AV_CODEC_ID_PCM_S16BE : AV_CODEC_ID_PCM_S16LE; + case 24: return big_endian ? AV_CODEC_ID_PCM_S24BE : AV_CODEC_ID_PCM_S24LE; + case 32: return big_endian ? AV_CODEC_ID_PCM_S32BE : AV_CODEC_ID_PCM_S32LE; + } + } else if (tag == 3) { + switch (bits) { + case 32: return big_endian ? AV_CODEC_ID_PCM_F32BE : AV_CODEC_ID_PCM_F32LE; + case 64: return big_endian ? AV_CODEC_ID_PCM_F64BE : AV_CODEC_ID_PCM_F64LE; + } + } + + return AV_CODEC_ID_NONE; +} + +static int raki_is_pcm_codec(enum AVCodecID codec_id) +{ + switch (codec_id) { + case AV_CODEC_ID_PCM_U8: + case AV_CODEC_ID_PCM_S16LE: + case AV_CODEC_ID_PCM_S16BE: + case AV_CODEC_ID_PCM_S24LE: + case AV_CODEC_ID_PCM_S24BE: + case AV_CODEC_ID_PCM_S32LE: + case AV_CODEC_ID_PCM_S32BE: + case AV_CODEC_ID_PCM_F32LE: + case AV_CODEC_ID_PCM_F32BE: + case AV_CODEC_ID_PCM_F64LE: + case AV_CODEC_ID_PCM_F64BE: + return 1; + default: + return 0; + } +} + +static int raki_set_data_region(AVFormatContext *s, const RakiChunk *chunk) +{ + RakiDemuxContext *raki = s->priv_data; + int ret = raki_check_chunk(s, chunk, 1); + + if (ret < 0) + return ret; + + raki->data_offset = chunk->offset; + raki->data_end = chunk->offset + chunk->size; + if (avio_seek(s->pb, raki->data_offset, SEEK_SET) < 0) + return AVERROR(EIO); + return 0; +} + +static int raki_skip_id3v2(AVFormatContext *s) +{ + RakiDemuxContext *raki = s->priv_data; + uint8_t header[ID3v2_HEADER_SIZE]; + int tag_size, ret; + + if (raki->data_end - raki->data_offset < ID3v2_HEADER_SIZE) + return 0; + + ret = ffio_read_size(s->pb, header, sizeof(header)); + if (ret < 0) + return ret; + if (avio_seek(s->pb, raki->data_offset, SEEK_SET) < 0) + return AVERROR(EIO); + if (!ff_id3v2_match(header, ID3v2_DEFAULT_MAGIC)) + return 0; + + tag_size = ff_id3v2_tag_len(header); + if (tag_size > raki->data_end - raki->data_offset) + return AVERROR_INVALIDDATA; + raki->data_offset += tag_size; + if (avio_seek(s->pb, raki->data_offset, SEEK_SET) < 0) + return AVERROR(EIO); + return 0; +} + +static int raki_read_wave_format(AVFormatContext *s, AVStream *st) +{ + RakiDemuxContext *raki = s->priv_data; + AVCodecParameters *par = st->codecpar; + const RakiChunk *payload = raki->msf.present ? &raki->msf : &raki->data; + unsigned tag = 0, channels, sample_rate, byte_rate = 0, block_align, bits; + int frame_duration; + int ret; + + ret = raki_seek_chunk(s, &raki->fmt, 16); + if (ret < 0) + return ret; + + if (!raki->big_endian) { + if (raki->fmt.size > INT_MAX) + return AVERROR_INVALIDDATA; + ret = ff_get_wav_header(s, s->pb, par, raki->fmt.size, 0); + if (ret < 0) + return ret; + } else { + enum AVCodecID codec_id; + + tag = raki_read_u16(s->pb, 1); + channels = raki_read_u16(s->pb, 1); + sample_rate = raki_read_u32(s->pb, 1); + byte_rate = raki_read_u32(s->pb, 1); + block_align = raki_read_u16(s->pb, 1); + bits = raki_read_u16(s->pb, 1); + + codec_id = raki_pcm_codec_id(tag, bits, 1); + if (codec_id == AV_CODEC_ID_NONE) { + if (tag == 0x0055) + codec_id = AV_CODEC_ID_MP3; + else { + avpriv_request_sample(s, "big-endian WAVE format 0x%04x", tag); + return AVERROR_PATCHWELCOME; + } + } + + par->codec_type = AVMEDIA_TYPE_AUDIO; + par->codec_id = codec_id; + par->codec_tag = tag; + par->sample_rate = sample_rate; + par->block_align = block_align; + par->bits_per_coded_sample = bits; + par->bit_rate = 8LL * byte_rate; + av_channel_layout_default(&par->ch_layout, channels); + } + + if (par->codec_id != AV_CODEC_ID_ADPCM_MS && + par->codec_id != AV_CODEC_ID_MP3 && + !raki_is_pcm_codec(par->codec_id)) { + avpriv_request_sample(s, "WAVE format 0x%04x", par->codec_tag); + return AVERROR_PATCHWELCOME; + } + if (!par->ch_layout.nb_channels || par->ch_layout.nb_channels > 64 || + !par->sample_rate || !par->block_align) + return AVERROR_INVALIDDATA; + if (raki->ps3_mp3 && par->codec_id == AV_CODEC_ID_MP3) + par->bit_rate = 0; + avpriv_set_pts_info(st, 64, 1, par->sample_rate); + + ret = raki_set_data_region(s, payload); + if (ret < 0) + return ret; + + if (par->codec_id == AV_CODEC_ID_MP3) { + ffstream(st)->need_parsing = AVSTREAM_PARSE_FULL_RAW; + raki->packet_size = 4096; + ret = raki_skip_id3v2(s); + if (ret < 0) + return ret; + } else if (par->codec_id == AV_CODEC_ID_ADPCM_MS) { + if (payload->size % par->block_align) + return AVERROR_INVALIDDATA; + raki->packet_size = par->block_align; + frame_duration = av_get_audio_frame_duration2(par, par->block_align); + if (frame_duration <= 0) + return AVERROR_INVALIDDATA; + st->duration = payload->size / par->block_align * frame_duration; + } else { + if (par->block_align != par->ch_layout.nb_channels * + ((par->bits_per_coded_sample + 7) / 8) || + payload->size % par->block_align) + return AVERROR_INVALIDDATA; + raki->packet_size = FFMAX(par->block_align, + 4096 / par->block_align * par->block_align); + st->duration = payload->size / par->block_align; + } + + return 0; +} + +static int raki_read_xma2(AVFormatContext *s, AVStream *st) +{ + RakiDemuxContext *raki = s->priv_data; + AVCodecParameters *par = st->codecpar; + uint8_t *extra; + unsigned tag, channels, sample_rate, byte_rate, bits, extra_size; + unsigned num_streams, channel_mask, samples_encoded, bytes_per_block; + unsigned play_begin, play_length, loop_begin, loop_length, block_count; + int ret; + + ret = raki_seek_chunk(s, &raki->fmt, 52); + if (ret < 0) + return ret; + + tag = raki_read_u16(s->pb, raki->big_endian); + channels = raki_read_u16(s->pb, raki->big_endian); + sample_rate = raki_read_u32(s->pb, raki->big_endian); + byte_rate = raki_read_u32(s->pb, raki->big_endian); + avio_skip(s->pb, 2); /* WAVE block alignment */ + bits = raki_read_u16(s->pb, raki->big_endian); + extra_size = raki_read_u16(s->pb, raki->big_endian); + num_streams = raki_read_u16(s->pb, raki->big_endian); + channel_mask = raki_read_u32(s->pb, raki->big_endian); + samples_encoded = raki_read_u32(s->pb, raki->big_endian); + bytes_per_block = raki_read_u32(s->pb, raki->big_endian); + play_begin = raki_read_u32(s->pb, raki->big_endian); + play_length = raki_read_u32(s->pb, raki->big_endian); + loop_begin = raki_read_u32(s->pb, raki->big_endian); + loop_length = raki_read_u32(s->pb, raki->big_endian); + + if (tag != 0x0166 || extra_size != 34 || !channels || channels > 16 || + !num_streams || num_streams > 8 || channels < num_streams || + channels > 2 * num_streams || !sample_rate || + sample_rate > INT_MAX || + (channel_mask && av_popcount(channel_mask) != channels) || + !samples_encoded || play_begin > samples_encoded || + (play_length && play_length > samples_encoded - play_begin) || + (loop_length && (loop_begin > samples_encoded || + loop_length > samples_encoded - loop_begin)) || + !bytes_per_block || bytes_per_block % 2048) + return AVERROR_INVALIDDATA; + + ret = ff_alloc_extradata(par, 34); + if (ret < 0) + return ret; + extra = par->extradata; + AV_WL16(extra, num_streams); + AV_WL32(extra + 2, channel_mask); + AV_WL32(extra + 6, samples_encoded); + AV_WL32(extra + 10, bytes_per_block); + AV_WL32(extra + 14, play_begin); + AV_WL32(extra + 18, play_length); + AV_WL32(extra + 22, loop_begin); + AV_WL32(extra + 26, loop_length); + extra[30] = avio_r8(s->pb); + extra[31] = avio_r8(s->pb); + block_count = raki_read_u16(s->pb, raki->big_endian); + AV_WL16(extra + 32, block_count); + + par->codec_type = AVMEDIA_TYPE_AUDIO; + par->codec_id = AV_CODEC_ID_XMA2; + par->codec_tag = tag; + par->sample_rate = sample_rate; + par->block_align = 2048; + par->bits_per_coded_sample = bits; + par->initial_padding = play_begin; + par->bit_rate = 8LL * byte_rate; + if (channel_mask) { + ret = av_channel_layout_from_mask(&par->ch_layout, channel_mask); + if (ret < 0) + return ret; + } else { + av_channel_layout_default(&par->ch_layout, channels); + } + avpriv_set_pts_info(st, 64, 1, sample_rate); + ffstream(st)->need_parsing = AVSTREAM_PARSE_FULL_RAW; + ffstream(st)->start_skip_samples = play_begin; + st->duration = play_length ? play_length : samples_encoded; + + ret = raki_set_data_region(s, &raki->data); + if (ret < 0) + return ret; + if (raki->data.size % 2048) + return AVERROR_INVALIDDATA; + raki->packet_size = 2048; + return 0; +} + +static int raki_read_dsp(AVFormatContext *s, AVStream *st) +{ + RakiDemuxContext *raki = s->priv_data; + AVCodecParameters *par = st->codecpar; + RakiChunk *info[2] = { &raki->dspl, &raki->dspr }; + unsigned channels, sample_rate, samples = 0; + int64_t decoded_samples; + int ch, ret; + + ret = raki_seek_chunk(s, &raki->fmt, 16); + if (ret < 0) + return ret; + avio_skip(s->pb, 2); + channels = raki_read_u16(s->pb, raki->big_endian); + sample_rate = raki_read_u32(s->pb, raki->big_endian); + + if (!channels || channels > 2 || !sample_rate || sample_rate > INT_MAX) + return AVERROR_INVALIDDATA; + + par->codec_type = AVMEDIA_TYPE_AUDIO; + par->codec_id = AV_CODEC_ID_ADPCM_THP; + par->sample_rate = sample_rate; + par->block_align = 8 * channels; + par->bits_per_coded_sample = 4; + av_channel_layout_default(&par->ch_layout, channels); + + ret = ff_alloc_extradata(par, 32 * channels); + if (ret < 0) + return ret; + + for (ch = 0; ch < channels; ch++) { + unsigned channel_samples; + + ret = raki_seek_chunk(s, info[ch], 0x3c); + if (ret < 0) + return ret; + channel_samples = avio_rb32(s->pb); + if (!ch) + samples = channel_samples; + else if (samples != channel_samples) + return AVERROR_INVALIDDATA; + if (avio_seek(s->pb, info[ch]->offset + 0x1c, SEEK_SET) < 0) + return AVERROR(EIO); + ret = ffio_read_size(s->pb, par->extradata + 32 * ch, 32); + if (ret < 0) + return ret; + } + + if (channels == 2 && raki->datl.present && raki->datr.present) { + ret = raki_check_chunk(s, &raki->datl, 8); + if (ret < 0) + return ret; + ret = raki_check_chunk(s, &raki->datr, 8); + if (ret < 0) + return ret; + if (raki->datl.size != raki->datr.size || raki->datl.size % 8) + return AVERROR_INVALIDDATA; + + raki->packet_type = RAKI_PACKETS_DSP_PLANAR; + raki->plane_offset[0] = raki->datl.offset; + raki->plane_offset[1] = raki->datr.offset; + raki->plane_blocks = raki->datl.size / 8; + decoded_samples = raki->plane_blocks * 14; + } else { + const RakiChunk *data = raki->dats.present ? &raki->dats : + raki->datl.present ? &raki->datl : &raki->data; + + ret = raki_set_data_region(s, data); + if (ret < 0) + return ret; + if (data->size % par->block_align) + return AVERROR_INVALIDDATA; + raki->packet_size = par->block_align; + decoded_samples = data->size / par->block_align * 14; + } + + if (samples && samples <= decoded_samples) { + st->duration = samples; + if (decoded_samples - samples > INT_MAX) + return AVERROR_INVALIDDATA; + raki->trailing_samples = decoded_samples - samples; + } else if (samples > decoded_samples) { + return AVERROR_INVALIDDATA; + } else { + st->duration = decoded_samples; + } + par->trailing_padding = raki->trailing_samples; + avpriv_set_pts_info(st, 64, 1, sample_rate); + return 0; +} + +static int raki_opus_duration(const uint8_t *src, int size) +{ + unsigned frames = 1; + unsigned toc, config, count, frame_size; + + if (size < 1) + return AVERROR_INVALIDDATA; + toc = src[0]; + config = toc >> 3; + count = toc & 3; + frame_size = config < 12 ? FFMAX(480, 960 * (config & 3)) : + config < 16 ? 480 << (config & 1) : + 120 << (config & 3); + if (count == 3) { + if (size < 2) + return AVERROR_INVALIDDATA; + frames = src[1] & 0x3f; + } else if (count) { + frames = 2; + } + + if (!frames || frame_size * frames > 5760) + return AVERROR_INVALIDDATA; + return frame_size * frames; +} + +static int raki_read_nx_opus(AVFormatContext *s, AVStream *st) +{ + RakiDemuxContext *raki = s->priv_data; + AVCodecParameters *par = st->codecpar; + unsigned signature, header_size, channel_field, channels, input_rate; + unsigned data_info_offset, data_signature, pre_skip, payload_size; + int ret; + + ret = raki_seek_chunk(s, &raki->data, 40); + if (ret < 0) + return ret; + + signature = avio_rl32(s->pb); + header_size = avio_rl32(s->pb); + channel_field = avio_rl32(s->pb); + channels = channel_field >> 8; + input_rate = avio_rl32(s->pb); + data_info_offset = avio_rl32(s->pb); + avio_skip(s->pb, 8); + pre_skip = avio_rl32(s->pb); + + if (signature != 0x80000001 || header_size < 0x18 || + channel_field != channels << 8 || !channels || channels > 2 || + !input_rate || input_rate > INT_MAX || pre_skip > UINT16_MAX || + data_info_offset < 0x20 || + data_info_offset > raki->data.size - 8 || + header_size > data_info_offset - 8) + return AVERROR_INVALIDDATA; + if (avio_seek(s->pb, raki->data.offset + data_info_offset, SEEK_SET) < 0) + return AVERROR(EIO); + data_signature = avio_rl32(s->pb); + payload_size = avio_rl32(s->pb); + if (data_signature != 0x80000004 || !payload_size || + payload_size > raki->data.size - data_info_offset - 8) + return AVERROR_INVALIDDATA; + + ret = ff_alloc_extradata(par, RAKI_OPUS_HEAD_SIZE); + if (ret < 0) + return ret; + memcpy(par->extradata, "OpusHead", 8); + par->extradata[8] = 1; + par->extradata[9] = channels; + AV_WL16(par->extradata + 10, pre_skip); + AV_WL32(par->extradata + 12, input_rate); + AV_WL16(par->extradata + 16, 0); + par->extradata[18] = 0; + + par->codec_type = AVMEDIA_TYPE_AUDIO; + par->codec_id = AV_CODEC_ID_OPUS; + par->sample_rate = 48000; + par->initial_padding = pre_skip; + par->seek_preroll = 3840; + av_channel_layout_default(&par->ch_layout, channels); + avpriv_set_pts_info(st, 64, 1, 48000); + ffstream(st)->start_skip_samples = pre_skip; + + if (raki->adin.present) { + unsigned samples; + + ret = raki_check_chunk(s, &raki->adin, 4); + if (ret < 0) + return ret; + if (avio_seek(s->pb, raki->adin.offset, SEEK_SET) < 0) + return AVERROR(EIO); + samples = avio_rl32(s->pb); + if (!samples) + return AVERROR_INVALIDDATA; + raki->expected_samples = av_rescale(samples, 48000, input_rate); + if (!raki->expected_samples) + return AVERROR_INVALIDDATA; + st->duration = raki->expected_samples; + } + + raki->packet_type = RAKI_PACKETS_NX_OPUS; + raki->data_offset = raki->data.offset + data_info_offset + 8; + raki->data_end = raki->data_offset + payload_size; + if (avio_seek(s->pb, raki->data_offset, SEEK_SET) < 0) + return AVERROR(EIO); + return 0; +} + +static int raki_read_header(AVFormatContext *s) +{ + RakiDemuxContext *raki = s->priv_data; + AVIOContext *pb = s->pb; + AVStream *st; + uint32_t platform, type, header_size, data_start, chunk_count; + const RakiChunk *header_chunks[] = { + &raki->fmt, &raki->adin, &raki->dspl, &raki->dspr, + }; + const RakiChunk *data_chunks[] = { + &raki->data, &raki->dats, &raki->datl, &raki->datr, &raki->msf, + }; + int64_t table_end; + int i, ret; + + raki->file_size = avio_size(pb); + if (!(pb->seekable & AVIO_SEEKABLE_NORMAL) || raki->file_size < 0x20) + return AVERROR_INVALIDDATA; + + if (avio_rl32(pb) == MKTAG('R', 'A', 'K', 'I')) { + raki->raki_offset = 0; + } else { + if (avio_rl32(pb) != MKTAG('R', 'A', 'K', 'I')) + return AVERROR_INVALIDDATA; + raki->raki_offset = 4; + } + + avio_skip(pb, 4); /* version */ + platform = avio_rl32(pb); + type = avio_rl32(pb); + raki->big_endian = raki_platform_is_big_endian(platform); + header_size = raki_read_u32(pb, raki->big_endian); + data_start = raki_read_u32(pb, raki->big_endian); + chunk_count = raki_read_u32(pb, raki->big_endian); + avio_skip(pb, 4); + + if (!chunk_count || chunk_count > RAKI_MAX_CHUNKS) + return AVERROR_INVALIDDATA; + table_end = raki->raki_offset + 0x20 + 12LL * chunk_count; + if (table_end > header_size || header_size > data_start || + data_start > raki->file_size) + return AVERROR_INVALIDDATA; + + for (i = 0; i < chunk_count; i++) { + uint32_t id = avio_rl32(pb); + uint32_t offset = raki_read_u32(pb, raki->big_endian); + uint32_t size = raki_read_u32(pb, raki->big_endian); + + ret = raki_set_chunk(raki, id, offset, size); + if (ret < 0) + return ret; + } + + for (i = 0; i < FF_ARRAY_ELEMS(header_chunks); i++) { + ret = raki_check_chunk_region(header_chunks[i], table_end, header_size); + if (ret < 0) + return ret; + } + for (i = 0; i < FF_ARRAY_ELEMS(data_chunks); i++) { + ret = raki_check_chunk_region(data_chunks[i], data_start, + raki->file_size); + if (ret < 0) + return ret; + } + + if (!raki->data.present && data_start < raki->file_size) { + raki->data.offset = data_start; + raki->data.size = raki->file_size - raki->data.offset; + raki->data.present = 1; + } + + st = avformat_new_stream(s, NULL); + if (!st) + return AVERROR(ENOMEM); + + if (platform == MKTAG('N', 'x', ' ', ' ') && + type == MKTAG('N', 'x', ' ', ' ')) + ret = raki_read_nx_opus(s, st); + else if ((platform == MKTAG('C', 'a', 'f', 'e') || + platform == MKTAG('W', 'i', 'i', ' ')) && + type == MKTAG('a', 'd', 'p', 'c')) + ret = raki_read_dsp(s, st); + else if ((platform == MKTAG('X', '3', '6', '0') || + platform == MKTAG('D', 'u', 'r', 'a') || + platform == MKTAG('S', 'c', 'a', 'r')) && + type == MKTAG('x', 'm', 'a', '2')) + ret = raki_read_xma2(s, st); + else if (type == MKTAG('p', 'c', 'm', ' ') || + type == MKTAG('a', 'd', 'p', 'c') || + (platform == MKTAG('P', 'S', '3', ' ') && + type == MKTAG('m', 'p', '3', ' '))) { + raki->ps3_mp3 = platform == MKTAG('P', 'S', '3', ' ') && + type == MKTAG('m', 'p', '3', ' '); + ret = raki_read_wave_format(s, st); + } else { + avpriv_request_sample(s, "platform/type 0x%08x/0x%08x", + platform, type); + ret = AVERROR_PATCHWELCOME; + } + + return ret; +} + +static int raki_add_trailing_padding(RakiDemuxContext *raki, AVPacket *pkt, + int last_packet) +{ + uint8_t *side_data; + + if (!last_packet || !raki->trailing_samples) + return 0; + + side_data = av_packet_new_side_data(pkt, AV_PKT_DATA_SKIP_SAMPLES, 10); + if (!side_data) + return AVERROR(ENOMEM); + AV_WL32(side_data, 0); + AV_WL32(side_data + 4, raki->trailing_samples); + return 0; +} + +static int raki_read_planar_dsp_packet(AVFormatContext *s, AVPacket *pkt) +{ + RakiDemuxContext *raki = s->priv_data; + int ch, ret; + + if (raki->plane_block >= raki->plane_blocks) + return AVERROR_EOF; + + ret = av_new_packet(pkt, 16); + if (ret < 0) + return ret; + pkt->pos = raki->plane_offset[0] + raki->plane_block * 8; + + for (ch = 0; ch < 2; ch++) { + int64_t pos = raki->plane_offset[ch] + raki->plane_block * 8; + if (avio_seek(s->pb, pos, SEEK_SET) < 0) { + ret = AVERROR(EIO); + goto fail; + } + ret = ffio_read_size(s->pb, pkt->data + ch * 8, 8); + if (ret < 0) + goto fail; + } + + pkt->duration = 14; + pkt->dts = pkt->pts = raki->next_pts; + raki->next_pts += pkt->duration; + raki->plane_block++; + ret = raki_add_trailing_padding(raki, pkt, + raki->plane_block == raki->plane_blocks); + if (ret < 0) + goto fail; + return 0; + +fail: + av_packet_unref(pkt); + return ret; +} + +static int raki_read_nx_opus_packet(AVFormatContext *s, AVPacket *pkt) +{ + RakiDemuxContext *raki = s->priv_data; + AVCodecParameters *par = s->streams[0]->codecpar; + int64_t pos = avio_tell(s->pb); + int last_packet; + unsigned size; + int duration, ret; + + if (pos == raki->data_end) + return AVERROR_EOF; + if (pos < raki->data_offset || pos > raki->data_end || + raki->data_end - pos < 8) + return AVERROR_INVALIDDATA; + + size = avio_rb32(s->pb); + avio_skip(s->pb, 4); /* encoder final range */ + if (!size || size > INT_MAX || size > raki->data_end - avio_tell(s->pb)) + return AVERROR_INVALIDDATA; + + ret = av_get_packet(s->pb, pkt, size); + if (ret < 0) + return ret; + if (ret != size) { + av_packet_unref(pkt); + return AVERROR(EIO); + } + + duration = raki_opus_duration(pkt->data, pkt->size); + if (duration < 0) { + av_packet_unref(pkt); + return duration; + } + pkt->pos = pos; + pkt->duration = duration; + pkt->dts = pkt->pts = raki->next_pts; + raki->next_pts += duration; + last_packet = avio_tell(s->pb) == raki->data_end; + if (last_packet && raki->expected_samples) { + int64_t decoded_samples = raki->next_pts - par->initial_padding; + + if (decoded_samples < raki->expected_samples || + decoded_samples - raki->expected_samples > INT_MAX) { + av_packet_unref(pkt); + return AVERROR_INVALIDDATA; + } + raki->trailing_samples = decoded_samples - raki->expected_samples; + } + ret = raki_add_trailing_padding(raki, pkt, last_packet); + if (ret < 0) { + av_packet_unref(pkt); + return ret; + } + return 0; +} + +static int raki_read_contiguous_packet(AVFormatContext *s, AVPacket *pkt) +{ + RakiDemuxContext *raki = s->priv_data; + AVCodecParameters *par = s->streams[0]->codecpar; + int64_t pos = avio_tell(s->pb); + int size, ret; + + if (pos == raki->data_end) + return AVERROR_EOF; + if (pos < raki->data_offset || pos > raki->data_end) + return AVERROR_INVALIDDATA; + + size = FFMIN(raki->packet_size, raki->data_end - pos); + if (par->codec_id != AV_CODEC_ID_MP3 && + !raki_is_pcm_codec(par->codec_id) && + size != raki->packet_size) + return AVERROR_INVALIDDATA; + ret = av_get_packet(s->pb, pkt, size); + if (ret < 0) + return ret; + if (ret != size) { + av_packet_unref(pkt); + return AVERROR(EIO); + } + + pkt->pos = pos; + if (par->codec_id == AV_CODEC_ID_XMA2) { + pkt->duration = (pkt->data[0] >> 2) * 512; + } else if (par->codec_id == AV_CODEC_ID_ADPCM_MS) { + pkt->duration = av_get_audio_frame_duration2(par, pkt->size); + } else if (par->codec_id == AV_CODEC_ID_ADPCM_THP) { + pkt->duration = 14; + } else if (par->codec_id != AV_CODEC_ID_MP3) { + pkt->duration = pkt->size / par->block_align; + } + + if (pkt->duration > 0) { + pkt->dts = pkt->pts = raki->next_pts; + raki->next_pts += pkt->duration; + } + + ret = raki_add_trailing_padding(raki, pkt, avio_tell(s->pb) == raki->data_end); + if (ret < 0) { + av_packet_unref(pkt); + return ret; + } + return 0; +} + +static int raki_read_packet(AVFormatContext *s, AVPacket *pkt) +{ + RakiDemuxContext *raki = s->priv_data; + int ret; + + switch (raki->packet_type) { + case RAKI_PACKETS_DSP_PLANAR: + ret = raki_read_planar_dsp_packet(s, pkt); + break; + case RAKI_PACKETS_NX_OPUS: + ret = raki_read_nx_opus_packet(s, pkt); + break; + default: + ret = raki_read_contiguous_packet(s, pkt); + break; + } + + if (ret >= 0) + pkt->stream_index = 0; + return ret; +} + +const FFInputFormat ff_raki_demuxer = { + .p.name = "raki", + .p.long_name = NULL_IF_CONFIG_SMALL("UbiArt RAKI audio"), + .p.extensions = "raki,rak,ckd", + .p.flags = AVFMT_GENERIC_INDEX, + .priv_data_size = sizeof(RakiDemuxContext), + .read_probe = raki_probe, + .read_header = raki_read_header, + .read_packet = raki_read_packet, +}; -- 2.52.0 >From aca9e3894ade965b406e5d9739753a617dccde61 Mon Sep 17 00:00:00 2001 From: Martijn Brouwer <[email protected]> Date: Fri, 28 Aug 2026 22:55:58 +0200 Subject: [PATCH 2/2] tests/fate: add RAKI demuxer tests Cover little- and big-endian PCM, Microsoft and Nintendo ADPCM, MP3 with both header layouts, Nintendo Opus, and XMA2 demuxing. Signed-off-by: Martijn Brouwer <[email protected]> --- tests/Makefile | 1 + tests/fate/raki.mak | 10 + tests/ref/fate/raki-cafe-interleaved | 578 +++++++++++++++++++++++++++ tests/ref/fate/raki-cafe-planar | 578 +++++++++++++++++++++++++++ tests/ref/fate/raki-nx-opus | 19 + tests/ref/fate/raki-ps3-mp3 | 7 + tests/ref/fate/raki-ps3-mp3-prefixed | 7 + tests/ref/fate/raki-wii-pcm | 17 + tests/ref/fate/raki-win-ms-adpcm | 18 + tests/ref/fate/raki-win-pcm | 17 + tests/ref/fate/raki-x360-xma2 | 11 + 11 files changed, 1263 insertions(+) create mode 100644 tests/fate/raki.mak create mode 100644 tests/ref/fate/raki-cafe-interleaved create mode 100644 tests/ref/fate/raki-cafe-planar create mode 100644 tests/ref/fate/raki-nx-opus create mode 100644 tests/ref/fate/raki-ps3-mp3 create mode 100644 tests/ref/fate/raki-ps3-mp3-prefixed create mode 100644 tests/ref/fate/raki-wii-pcm create mode 100644 tests/ref/fate/raki-win-ms-adpcm create mode 100644 tests/ref/fate/raki-win-pcm create mode 100644 tests/ref/fate/raki-x360-xma2 diff --git a/tests/Makefile b/tests/Makefile index 3f0132dd97..b01ad52751 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -241,6 +241,7 @@ include $(SRC_PATH)/tests/fate/prores.mak include $(SRC_PATH)/tests/fate/qoa.mak include $(SRC_PATH)/tests/fate/qt.mak include $(SRC_PATH)/tests/fate/qtrle.mak +include $(SRC_PATH)/tests/fate/raki.mak include $(SRC_PATH)/tests/fate/real.mak include $(SRC_PATH)/tests/fate/sbc.mak include $(SRC_PATH)/tests/fate/screen.mak diff --git a/tests/fate/raki.mak b/tests/fate/raki.mak new file mode 100644 index 0000000000..a829103e74 --- /dev/null +++ b/tests/fate/raki.mak @@ -0,0 +1,10 @@ +RAKI_SAMPLES = cafe-interleaved cafe-planar nx-opus ps3-mp3 \ + ps3-mp3-prefixed wii-pcm win-ms-adpcm win-pcm x360-xma2 + +FATE_RAKI-$(call ALLYES, RAKI_DEMUXER FRAMECRC_MUXER FILE_PROTOCOL PIPE_PROTOCOL) += \ + $(addprefix fate-raki-,$(RAKI_SAMPLES)) + +$(FATE_RAKI-yes): CMD = framecrc -i $(TARGET_SAMPLES)/raki/$(@:fate-raki-%=%).raki -c:a copy + +FATE_SAMPLES_FFMPEG += $(FATE_RAKI-yes) +fate-raki: $(FATE_RAKI-yes) diff --git a/tests/ref/fate/raki-cafe-interleaved b/tests/ref/fate/raki-cafe-interleaved new file mode 100644 index 0000000000..742add34ee --- /dev/null +++ b/tests/ref/fate/raki-cafe-interleaved @@ -0,0 +1,578 @@ +#extradata 0: 64, 0x020f05ce +#tb 0: 1/32000 +#media_type 0: audio +#codec_id 0: adpcm_thp +#sample_rate 0: 32000 +#channel_layout_name 0: stereo +0, 0, 0, 14, 16, 0x16900343 +0, 14, 14, 14, 16, 0x31c206e1 +0, 28, 28, 14, 16, 0x23a00491 +0, 42, 42, 14, 16, 0x5bd40ba1 +0, 56, 56, 14, 16, 0x10620253 +0, 70, 70, 14, 16, 0x41690733 +0, 84, 84, 14, 16, 0x279a04e5 +0, 98, 98, 14, 16, 0x5b6a0b0f +0, 112, 112, 14, 16, 0x591e0aa1 +0, 126, 126, 14, 16, 0x1ec00363 +0, 140, 140, 14, 16, 0x4404076b +0, 154, 154, 14, 16, 0x1a140361 +0, 168, 168, 14, 16, 0x62020bd9 +0, 182, 182, 14, 16, 0x3abe07f9 +0, 196, 196, 14, 16, 0x3a7c0677 +0, 210, 210, 14, 16, 0x434007d1 +0, 224, 224, 14, 16, 0x1e0a0359 +0, 238, 238, 14, 16, 0x1b3c0330 +0, 252, 252, 14, 16, 0x33220754 +0, 266, 266, 14, 16, 0x47700855 +0, 280, 280, 14, 16, 0x46dd08b3 +0, 294, 294, 14, 16, 0x0ea60215 +0, 308, 308, 14, 16, 0x4048086d +0, 322, 322, 14, 16, 0x2409052d +0, 336, 336, 14, 16, 0x59920ab1 +0, 350, 350, 14, 16, 0x193e0361 +0, 364, 364, 14, 16, 0x2bbc053b +0, 378, 378, 14, 16, 0x2ee0067d +0, 392, 392, 14, 16, 0x2eec066b +0, 406, 406, 14, 16, 0x5ca20bc3 +0, 420, 420, 14, 16, 0x11760275 +0, 434, 434, 14, 16, 0x35ac0649 +0, 448, 448, 14, 16, 0x30d0067f +0, 462, 462, 14, 16, 0x5af80b0d +0, 476, 476, 14, 16, 0x59990aac +0, 490, 490, 14, 16, 0x34120585 +0, 504, 504, 14, 16, 0x47240809 +0, 518, 518, 14, 16, 0x20e20467 +0, 532, 532, 14, 16, 0x180d02d2 +0, 546, 546, 14, 16, 0x36ea07a8 +0, 560, 560, 14, 16, 0x3d6106db +0, 574, 574, 14, 16, 0x48f8086f +0, 588, 588, 14, 16, 0x176c0319 +0, 602, 602, 14, 16, 0x1b78033d +0, 616, 616, 14, 16, 0x44f9095c +0, 630, 630, 14, 16, 0x3c7006b9 +0, 644, 644, 14, 16, 0x518f0a04 +0, 658, 658, 14, 16, 0x133402af +0, 672, 672, 14, 16, 0x3d780819 +0, 686, 686, 14, 16, 0x216604cb +0, 700, 700, 14, 16, 0x4dde08b3 +0, 714, 714, 14, 16, 0x4a8609bf +0, 728, 728, 14, 16, 0x2ab00530 +0, 742, 742, 14, 16, 0x38900739 +0, 756, 756, 14, 16, 0x21950485 +0, 770, 770, 14, 16, 0x5d940be5 +0, 784, 784, 14, 16, 0x12840297 +0, 798, 798, 14, 16, 0x335705aa +0, 812, 812, 14, 16, 0x2f8c065b +0, 826, 826, 14, 16, 0x59f60aed +0, 840, 840, 14, 16, 0x582e0a5b +0, 854, 854, 14, 16, 0x352105a7 +0, 868, 868, 14, 16, 0x447e073d +0, 882, 882, 14, 16, 0x1fea0429 +0, 896, 896, 14, 16, 0x60a40bb5 +0, 910, 910, 14, 16, 0x4e1a09ed +0, 924, 924, 14, 16, 0x3fa2071f +0, 938, 938, 14, 16, 0x4bec08cd +0, 952, 952, 14, 16, 0x1cea0335 +0, 966, 966, 14, 16, 0x451306df +0, 980, 980, 14, 16, 0x32c9072a +0, 994, 994, 14, 16, 0x4c9408fd +0, 1008, 1008, 14, 16, 0x4ff509cd +0, 1022, 1022, 14, 16, 0x0eca021b +0, 1036, 1036, 14, 16, 0x3b3007d5 +0, 1050, 1050, 14, 16, 0x3e6408a5 +0, 1064, 1064, 14, 16, 0x48b908eb +0, 1078, 1078, 14, 16, 0x4a1009a5 +0, 1092, 1092, 14, 16, 0x2c0e0563 +0, 1106, 1106, 14, 16, 0x3a6c07f5 +0, 1120, 1120, 14, 16, 0x2cc80641 +0, 1134, 1134, 14, 16, 0x5f090c16 +0, 1148, 1148, 14, 16, 0x137602b9 +0, 1162, 1162, 14, 16, 0x30cf0582 +0, 1176, 1176, 14, 16, 0x2d6c0617 +0, 1190, 1190, 14, 16, 0x236003d9 +0, 1204, 1204, 14, 16, 0x529809dd +0, 1218, 1218, 14, 16, 0x225203c9 +0, 1232, 1232, 14, 16, 0x40a7076e +0, 1246, 1246, 14, 16, 0x1f2203f3 +0, 1260, 1260, 14, 16, 0x16a00291 +0, 1274, 1274, 14, 16, 0x47960914 +0, 1288, 1288, 14, 16, 0x40c20743 +0, 1302, 1302, 14, 16, 0x4c0008d3 +0, 1316, 1316, 14, 16, 0x1bfe0313 +0, 1330, 1330, 14, 16, 0x50a80a61 +0, 1344, 1344, 14, 16, 0x2ebe06ca +0, 1358, 1358, 14, 16, 0x40b40741 +0, 1372, 1372, 14, 16, 0x4d76096a +0, 1386, 1386, 14, 16, 0x15da02f1 +0, 1400, 1400, 14, 16, 0x3a3007b1 +0, 1414, 1414, 14, 16, 0x36740746 +0, 1428, 1428, 14, 16, 0x4af20941 +0, 1442, 1442, 14, 16, 0x4a5809c9 +0, 1456, 1456, 14, 16, 0x18040387 +0, 1470, 1470, 14, 16, 0x381007af +0, 1484, 1484, 14, 16, 0x391807ef +0, 1498, 1498, 14, 16, 0x56080a47 +0, 1512, 1512, 14, 16, 0x14c802db +0, 1526, 1526, 14, 16, 0x3780064b +0, 1540, 1540, 14, 16, 0x394207d1 +0, 1554, 1554, 14, 16, 0x2bcc0597 +0, 1568, 1568, 14, 16, 0x50b3098e +0, 1582, 1582, 14, 16, 0x22a603eb +0, 1596, 1596, 14, 16, 0x3cfe06a3 +0, 1610, 1610, 14, 16, 0x1e720421 +0, 1624, 1624, 14, 16, 0x16ea028f +0, 1638, 1638, 14, 16, 0x471c090d +0, 1652, 1652, 14, 16, 0x31a805a7 +0, 1666, 1666, 14, 16, 0x4c6608dd +0, 1680, 1680, 14, 16, 0x1acc02f1 +0, 1694, 1694, 14, 16, 0x4fb60a3f +0, 1708, 1708, 14, 16, 0x3daa0869 +0, 1722, 1722, 14, 16, 0x41f00767 +0, 1736, 1736, 14, 16, 0x465108ac +0, 1750, 1750, 14, 16, 0x15b202f3 +0, 1764, 1764, 14, 16, 0x41d0090d +0, 1778, 1778, 14, 16, 0x2be8065e +0, 1792, 1792, 14, 16, 0x40f20785 +0, 1806, 1806, 14, 16, 0x4c580a09 +0, 1820, 1820, 14, 16, 0x183a038d +0, 1834, 1834, 14, 16, 0x362f076b +0, 1848, 1848, 14, 16, 0x2ad105f9 +0, 1862, 1862, 14, 16, 0x56840a49 +0, 1876, 1876, 14, 16, 0x15f602fd +0, 1890, 1890, 14, 16, 0x31660553 +0, 1904, 1904, 14, 16, 0x2842056d +0, 1918, 1918, 14, 16, 0x26ee0447 +0, 1932, 1932, 14, 16, 0x5a7a0b7d +0, 1946, 1946, 14, 16, 0x23d6040d +0, 1960, 1960, 14, 16, 0x3c91069b +0, 1974, 1974, 14, 16, 0x1c8403df +0, 1988, 1988, 14, 16, 0x1586026d +0, 2002, 2002, 14, 16, 0x482a0927 +0, 2016, 2016, 14, 16, 0x33e805eb +0, 2030, 2030, 14, 16, 0x4d3d0869 +0, 2044, 2044, 14, 16, 0x19de02cf +0, 2058, 2058, 14, 16, 0x64660c1d +0, 2072, 2072, 14, 16, 0x3f610882 +0, 2086, 2086, 14, 16, 0x44c307cb +0, 2100, 2100, 14, 16, 0x446207c1 +0, 2114, 2114, 14, 16, 0x2006039d +0, 2128, 2128, 14, 16, 0x1f9a03d9 +0, 2142, 2142, 14, 16, 0x39d4081b +0, 2156, 2156, 14, 16, 0x425207a9 +0, 2170, 2170, 14, 16, 0x4ebd0a5a +0, 2184, 2184, 14, 16, 0x24eb0449 +0, 2198, 2198, 14, 16, 0x340c0727 +0, 2212, 2212, 14, 16, 0x27f00597 +0, 2226, 2226, 14, 16, 0x57640a6b +0, 2240, 2240, 14, 16, 0x16da031d +0, 2254, 2254, 14, 16, 0x24300477 +0, 2268, 2268, 14, 16, 0x351e0749 +0, 2282, 2282, 14, 16, 0x286a0460 +0, 2296, 2296, 14, 16, 0x546e0a0b +0, 2310, 2310, 14, 16, 0x24c8042f +0, 2324, 2324, 14, 16, 0x2f480539 +0, 2338, 2338, 14, 16, 0x1b7403bd +0, 2352, 2352, 14, 16, 0x258c06a1 +0, 2366, 2366, 14, 16, 0x469e08f5 +0, 2380, 2380, 14, 16, 0x3628062f +0, 2394, 2394, 14, 16, 0x406e0744 +0, 2408, 2408, 14, 16, 0x193002ad +0, 2422, 2422, 14, 16, 0x15d0027f +0, 2436, 2436, 14, 16, 0x3e3a085d +0, 2450, 2450, 14, 16, 0x3720060f +0, 2464, 2464, 14, 16, 0x436807a9 +0, 2478, 2478, 14, 16, 0x175e0333 +0, 2492, 2492, 14, 16, 0x408c08e9 +0, 2506, 2506, 14, 16, 0x36c6079b +0, 2520, 2520, 14, 16, 0x4536080d +0, 2534, 2534, 14, 16, 0x4e920a33 +0, 2548, 2548, 14, 16, 0x24c00447 +0, 2562, 2562, 14, 16, 0x31da06e3 +0, 2576, 2576, 14, 16, 0x1eda04dc +0, 2590, 2590, 14, 16, 0x58740a8d +0, 2604, 2604, 14, 16, 0x180e033f +0, 2618, 2618, 14, 16, 0x26b004b9 +0, 2632, 2632, 14, 16, 0x32de0705 +0, 2646, 2646, 14, 16, 0x28e40549 +0, 2660, 2660, 14, 16, 0x5c2a0bbf +0, 2674, 2674, 14, 16, 0x10160251 +0, 2688, 2688, 14, 16, 0x3094055f +0, 2702, 2702, 14, 16, 0x348c0707 +0, 2716, 2716, 14, 16, 0x5c2c0b2f +0, 2730, 2730, 14, 16, 0x587e0a85 +0, 2744, 2744, 14, 16, 0x1ebe0363 +0, 2758, 2758, 14, 16, 0x419d0758 +0, 2772, 2772, 14, 16, 0x192c0345 +0, 2786, 2786, 14, 16, 0x63080bf9 +0, 2800, 2800, 14, 16, 0x3c7e0839 +0, 2814, 2814, 14, 16, 0x394e0655 +0, 2828, 2828, 14, 16, 0x47b00845 +0, 2842, 2842, 14, 16, 0x1ecb0379 +0, 2856, 2856, 14, 16, 0x3f7e08c7 +0, 2870, 2870, 14, 16, 0x36a707c3 +0, 2884, 2884, 14, 16, 0x46760831 +0, 2898, 2898, 14, 16, 0x4f2c0a73 +0, 2912, 2912, 14, 16, 0x1278028d +0, 2926, 2926, 14, 16, 0x2f68069f +0, 2940, 2940, 14, 16, 0x250c056b +0, 2954, 2954, 14, 16, 0x4cb00891 +0, 2968, 2968, 14, 16, 0x193e0361 +0, 2982, 2982, 14, 16, 0x295204fd +0, 2996, 2996, 14, 16, 0x309406bf +0, 3010, 3010, 14, 16, 0x28100505 +0, 3024, 3024, 14, 16, 0x5d360be1 +0, 3038, 3038, 14, 16, 0x11480273 +0, 3052, 3052, 14, 16, 0x428e0762 +0, 3066, 3066, 14, 16, 0x338006e1 +0, 3080, 3080, 14, 16, 0x5b1c0b0d +0, 3094, 3094, 14, 16, 0x57680a63 +0, 3108, 3108, 14, 16, 0x25e00485 +0, 3122, 3122, 14, 16, 0x393506aa +0, 3136, 3136, 14, 16, 0x17ae0289 +0, 3150, 3150, 14, 16, 0x4f640765 +0, 3164, 3164, 14, 16, 0x4bbe099d +0, 3178, 3178, 14, 16, 0x3c3006b9 +0, 3192, 3192, 14, 16, 0x4864086b +0, 3206, 3206, 14, 16, 0x1dfe0357 +0, 3220, 3220, 14, 16, 0x1b20033d +0, 3234, 3234, 14, 16, 0x33be076f +0, 3248, 3248, 14, 16, 0x49500897 +0, 3262, 3262, 14, 16, 0x497f09c5 +0, 3276, 3276, 14, 16, 0x112a0253 +0, 3290, 3290, 14, 16, 0x3ea6083b +0, 3304, 3304, 14, 16, 0x31260719 +0, 3318, 3318, 14, 16, 0x599e0ab3 +0, 3332, 3332, 14, 16, 0x485c0981 +0, 3346, 3346, 14, 16, 0x2bc6052e +0, 3360, 3360, 14, 16, 0x2dae065b +0, 3374, 3374, 14, 16, 0x2e580667 +0, 3388, 3388, 14, 16, 0x5e060c03 +0, 3402, 3402, 14, 16, 0x12560295 +0, 3416, 3416, 14, 16, 0x31f7057a +0, 3430, 3430, 14, 16, 0x2fc0065d +0, 3444, 3444, 14, 16, 0x59f60aed +0, 3458, 3458, 14, 16, 0x56800a3f +0, 3472, 3472, 14, 16, 0x34fe05a7 +0, 3486, 3486, 14, 16, 0x37e6061a +0, 3500, 3500, 14, 16, 0x1d9803bf +0, 3514, 3514, 14, 16, 0x17380295 +0, 3528, 3528, 14, 16, 0x4bba0995 +0, 3542, 3542, 14, 16, 0x3d7006dd +0, 3556, 3556, 14, 16, 0x4a460890 +0, 3570, 3570, 14, 16, 0x1d0c0335 +0, 3584, 3584, 14, 16, 0x1d450378 +0, 3598, 3598, 14, 16, 0x328e072f +0, 3612, 3612, 14, 16, 0x3d8406db +0, 3626, 3626, 14, 16, 0x51cc0abd +0, 3640, 3640, 14, 16, 0x13580292 +0, 3654, 3654, 14, 16, 0x3db40817 +0, 3668, 3668, 14, 16, 0x2f9206b9 +0, 3682, 3682, 14, 16, 0x5ad00ad5 +0, 3696, 3696, 14, 16, 0x499709a3 +0, 3710, 3710, 14, 16, 0x289604e9 +0, 3724, 3724, 14, 16, 0x2b6e0617 +0, 3738, 3738, 14, 16, 0x2a7605f8 +0, 3752, 3752, 14, 16, 0x5db60be5 +0, 3766, 3766, 14, 16, 0x136a02b7 +0, 3780, 3780, 14, 16, 0x440607ab +0, 3794, 3794, 14, 16, 0x2e7c0639 +0, 3808, 3808, 14, 16, 0x238304ae +0, 3822, 3822, 14, 16, 0x56780a3b +0, 3836, 3836, 14, 16, 0x223203c9 +0, 3850, 3850, 14, 16, 0x3c350713 +0, 3864, 3864, 14, 16, 0x1c9003a1 +0, 3878, 3878, 14, 16, 0x16d20283 +0, 3892, 3892, 14, 16, 0x37f80791 +0, 3906, 3906, 14, 16, 0x3f940721 +0, 3920, 3920, 14, 16, 0x4a680895 +0, 3934, 3934, 14, 16, 0x1c280315 +0, 3948, 3948, 14, 16, 0x1a52031b +0, 3962, 3962, 14, 16, 0x34010754 +0, 3976, 3976, 14, 16, 0x3ea406ff +0, 3990, 3990, 14, 16, 0x4add08ed +0, 4004, 4004, 14, 16, 0x0f7e021d +0, 4018, 4018, 14, 16, 0x3a0407b3 +0, 4032, 4032, 14, 16, 0x3886080d +0, 4046, 4046, 14, 16, 0x49e1091e +0, 4060, 4060, 14, 16, 0x49a909a7 +0, 4074, 4074, 14, 16, 0x1a2003c3 +0, 4088, 4088, 14, 16, 0x392e07d3 +0, 4102, 4102, 14, 16, 0x2b300603 +0, 4116, 4116, 14, 16, 0x5ea20c07 +0, 4130, 4130, 14, 16, 0x149802d9 +0, 4144, 4144, 14, 16, 0x2240040d +0, 4158, 4158, 14, 16, 0x2c5c05f5 +0, 4172, 4172, 14, 16, 0x2bfa0599 +0, 4186, 4186, 14, 16, 0x54820a17 +0, 4200, 4200, 14, 16, 0x234003eb +0, 4214, 4214, 14, 16, 0x408c0790 +0, 4228, 4228, 14, 16, 0x145e0223 +0, 4242, 4242, 14, 16, 0x5eb20b73 +0, 4256, 4256, 14, 16, 0x48a2094d +0, 4270, 4270, 14, 16, 0x41d60765 +0, 4284, 4284, 14, 16, 0x40db07ac +0, 4298, 4298, 14, 16, 0x18ea033d +0, 4312, 4312, 14, 16, 0x50780a5f +0, 4326, 4326, 14, 16, 0x3f50088b +0, 4340, 4340, 14, 16, 0x40ce0745 +0, 4354, 4354, 14, 16, 0x4c44095f +0, 4368, 4368, 14, 16, 0x12b80297 +0, 4382, 4382, 14, 16, 0x1e24039f +0, 4396, 4396, 14, 16, 0x2c400690 +0, 4410, 4410, 14, 16, 0x3fe40763 +0, 4424, 4424, 14, 16, 0x4d540a25 +0, 4438, 4438, 14, 16, 0x25bb046b +0, 4452, 4452, 14, 16, 0x364e077d +0, 4466, 4466, 14, 16, 0x2baa0619 +0, 4480, 4480, 14, 16, 0x5fd40c29 +0, 4494, 4494, 14, 16, 0x158a02fb +0, 4508, 4508, 14, 16, 0x2666048d +0, 4522, 4522, 14, 16, 0x382007af +0, 4536, 4536, 14, 16, 0x26d404fd +0, 4550, 4550, 14, 16, 0x533a0aa9 +0, 4564, 4564, 14, 16, 0x22d003ed +0, 4578, 4578, 14, 16, 0x3b080678 +0, 4592, 4592, 14, 16, 0x1ce203c1 +0, 4606, 4606, 14, 16, 0x1736028d +0, 4620, 4620, 14, 16, 0x49cc0967 +0, 4634, 4634, 14, 16, 0x44d807c9 +0, 4648, 4648, 14, 16, 0x4a0007ee +0, 4662, 4662, 14, 16, 0x198e035d +0, 4676, 4676, 14, 16, 0x1b7c0335 +0, 4690, 4690, 14, 16, 0x3fef08b0 +0, 4704, 4704, 14, 16, 0x43ce07a9 +0, 4718, 4718, 14, 16, 0x446e07dd +0, 4732, 4732, 14, 16, 0x16dc031c +0, 4746, 4746, 14, 16, 0x1da0037f +0, 4760, 4760, 14, 16, 0x2a5f063b +0, 4774, 4774, 14, 16, 0x422407a7 +0, 4788, 4788, 14, 16, 0x4fc80a85 +0, 4802, 4802, 14, 16, 0x258c0469 +0, 4816, 4816, 14, 16, 0x33fe0729 +0, 4830, 4830, 14, 16, 0x2aa3067d +0, 4844, 4844, 14, 16, 0x60c20c4b +0, 4858, 4858, 14, 16, 0x16da031d +0, 4872, 4872, 14, 16, 0x38af0674 +0, 4886, 4886, 14, 16, 0x354d074b +0, 4900, 4900, 14, 16, 0x1cee0315 +0, 4914, 4914, 14, 16, 0x5b3a0b9d +0, 4928, 4928, 14, 16, 0x2422040f +0, 4942, 4942, 14, 16, 0x3e3c06db +0, 4956, 4956, 14, 16, 0x1ee2040f +0, 4970, 4970, 14, 16, 0x283206ed +0, 4984, 4984, 14, 16, 0x44ef08bc +0, 4998, 4998, 14, 16, 0x34fa060d +0, 5012, 5012, 14, 16, 0x4040071f +0, 5026, 5026, 14, 16, 0x193c02af +0, 5040, 5040, 14, 16, 0x64660c1d +0, 5054, 5054, 14, 16, 0x3f27087d +0, 5068, 5068, 14, 16, 0x45f307ed +0, 5082, 5082, 14, 16, 0x4bf70887 +0, 5096, 5096, 14, 16, 0x155e02d9 +0, 5110, 5110, 14, 16, 0x1ee603bb +0, 5124, 5124, 14, 16, 0x374007ea +0, 5138, 5138, 14, 16, 0x442407eb +0, 5152, 5152, 14, 16, 0x45fa0889 +0, 5166, 5166, 14, 16, 0x24c00447 +0, 5180, 5180, 14, 16, 0x32de0705 +0, 5194, 5194, 14, 16, 0x28320592 +0, 5208, 5208, 14, 16, 0x56b00a4d +0, 5222, 5222, 14, 16, 0x17d9032f +0, 5236, 5236, 14, 16, 0x380e065b +0, 5250, 5250, 14, 16, 0x32ef0707 +0, 5264, 5264, 14, 16, 0x1ea8034d +0, 5278, 5278, 14, 16, 0x4d000937 +0, 5292, 5292, 14, 16, 0x0f540231 +0, 5306, 5306, 14, 16, 0x402a073b +0, 5320, 5320, 14, 16, 0x1d1403c3 +0, 5334, 5334, 14, 16, 0x24bc0690 +0, 5348, 5348, 14, 16, 0x583d0a78 +0, 5362, 5362, 14, 16, 0x35ec0631 +0, 5376, 5376, 14, 16, 0x40440708 +0, 5390, 5390, 14, 16, 0x1d8e03d9 +0, 5404, 5404, 14, 16, 0x15e2027d +0, 5418, 5418, 14, 16, 0x3ac007fd +0, 5432, 5432, 14, 16, 0x48320831 +0, 5446, 5446, 14, 16, 0x4f2c09ad +0, 5460, 5460, 14, 16, 0x153402db +0, 5474, 5474, 14, 16, 0x1b1c0341 +0, 5488, 5488, 14, 16, 0x357c0797 +0, 5502, 5502, 14, 16, 0x4584080f +0, 5516, 5516, 14, 16, 0x4c8a0a17 +0, 5530, 5530, 14, 16, 0x1031026d +0, 5544, 5544, 14, 16, 0x429808c1 +0, 5558, 5558, 14, 16, 0x27bc05ab +0, 5572, 5572, 14, 16, 0x58030a7f +0, 5586, 5586, 14, 16, 0x18380341 +0, 5600, 5600, 14, 16, 0x279204bd +0, 5614, 5614, 14, 16, 0x31c206e1 +0, 5628, 5628, 14, 16, 0x23a00491 +0, 5642, 5642, 14, 16, 0x5bd40ba1 +0, 5656, 5656, 14, 16, 0x10620253 +0, 5670, 5670, 14, 16, 0x41690733 +0, 5684, 5684, 14, 16, 0x279a04e5 +0, 5698, 5698, 14, 16, 0x5b6a0b0f +0, 5712, 5712, 14, 16, 0x591e0aa1 +0, 5726, 5726, 14, 16, 0x1ec00363 +0, 5740, 5740, 14, 16, 0x4404076b +0, 5754, 5754, 14, 16, 0x1a140361 +0, 5768, 5768, 14, 16, 0x62020bd9 +0, 5782, 5782, 14, 16, 0x3abe07f9 +0, 5796, 5796, 14, 16, 0x3a7c0677 +0, 5810, 5810, 14, 16, 0x434007d1 +0, 5824, 5824, 14, 16, 0x1e0a0359 +0, 5838, 5838, 14, 16, 0x1b3c0330 +0, 5852, 5852, 14, 16, 0x33220754 +0, 5866, 5866, 14, 16, 0x47700855 +0, 5880, 5880, 14, 16, 0x46dd08b3 +0, 5894, 5894, 14, 16, 0x0ea60215 +0, 5908, 5908, 14, 16, 0x4048086d +0, 5922, 5922, 14, 16, 0x2409052d +0, 5936, 5936, 14, 16, 0x59920ab1 +0, 5950, 5950, 14, 16, 0x193e0361 +0, 5964, 5964, 14, 16, 0x2bbc053b +0, 5978, 5978, 14, 16, 0x2ee0067d +0, 5992, 5992, 14, 16, 0x2eec066b +0, 6006, 6006, 14, 16, 0x5ca20bc3 +0, 6020, 6020, 14, 16, 0x11760275 +0, 6034, 6034, 14, 16, 0x35ac0649 +0, 6048, 6048, 14, 16, 0x30d0067f +0, 6062, 6062, 14, 16, 0x5af80b0d +0, 6076, 6076, 14, 16, 0x59990aac +0, 6090, 6090, 14, 16, 0x34120585 +0, 6104, 6104, 14, 16, 0x47240809 +0, 6118, 6118, 14, 16, 0x20e20467 +0, 6132, 6132, 14, 16, 0x180d02d2 +0, 6146, 6146, 14, 16, 0x36ea07a8 +0, 6160, 6160, 14, 16, 0x3d6106db +0, 6174, 6174, 14, 16, 0x48f8086f +0, 6188, 6188, 14, 16, 0x176c0319 +0, 6202, 6202, 14, 16, 0x1b78033d +0, 6216, 6216, 14, 16, 0x44f9095c +0, 6230, 6230, 14, 16, 0x3c7006b9 +0, 6244, 6244, 14, 16, 0x518f0a04 +0, 6258, 6258, 14, 16, 0x133402af +0, 6272, 6272, 14, 16, 0x3d780819 +0, 6286, 6286, 14, 16, 0x216604cb +0, 6300, 6300, 14, 16, 0x4dde08b3 +0, 6314, 6314, 14, 16, 0x4a8609bf +0, 6328, 6328, 14, 16, 0x2ab00530 +0, 6342, 6342, 14, 16, 0x38900739 +0, 6356, 6356, 14, 16, 0x21950485 +0, 6370, 6370, 14, 16, 0x5d940be5 +0, 6384, 6384, 14, 16, 0x12840297 +0, 6398, 6398, 14, 16, 0x335705aa +0, 6412, 6412, 14, 16, 0x2f8c065b +0, 6426, 6426, 14, 16, 0x59f60aed +0, 6440, 6440, 14, 16, 0x582e0a5b +0, 6454, 6454, 14, 16, 0x352105a7 +0, 6468, 6468, 14, 16, 0x447e073d +0, 6482, 6482, 14, 16, 0x1fea0429 +0, 6496, 6496, 14, 16, 0x60a40bb5 +0, 6510, 6510, 14, 16, 0x4e1a09ed +0, 6524, 6524, 14, 16, 0x3fa2071f +0, 6538, 6538, 14, 16, 0x4bec08cd +0, 6552, 6552, 14, 16, 0x1cea0335 +0, 6566, 6566, 14, 16, 0x451306df +0, 6580, 6580, 14, 16, 0x32c9072a +0, 6594, 6594, 14, 16, 0x4c9408fd +0, 6608, 6608, 14, 16, 0x4ff509cd +0, 6622, 6622, 14, 16, 0x0eca021b +0, 6636, 6636, 14, 16, 0x3b3007d5 +0, 6650, 6650, 14, 16, 0x3e6408a5 +0, 6664, 6664, 14, 16, 0x48b908eb +0, 6678, 6678, 14, 16, 0x4a1009a5 +0, 6692, 6692, 14, 16, 0x2c0e0563 +0, 6706, 6706, 14, 16, 0x3a6c07f5 +0, 6720, 6720, 14, 16, 0x2cc80641 +0, 6734, 6734, 14, 16, 0x5f090c16 +0, 6748, 6748, 14, 16, 0x137602b9 +0, 6762, 6762, 14, 16, 0x30cf0582 +0, 6776, 6776, 14, 16, 0x2d6c0617 +0, 6790, 6790, 14, 16, 0x236003d9 +0, 6804, 6804, 14, 16, 0x529809dd +0, 6818, 6818, 14, 16, 0x225203c9 +0, 6832, 6832, 14, 16, 0x40a7076e +0, 6846, 6846, 14, 16, 0x1f2203f3 +0, 6860, 6860, 14, 16, 0x16a00291 +0, 6874, 6874, 14, 16, 0x47960914 +0, 6888, 6888, 14, 16, 0x40c20743 +0, 6902, 6902, 14, 16, 0x4c0008d3 +0, 6916, 6916, 14, 16, 0x1bfe0313 +0, 6930, 6930, 14, 16, 0x50a80a61 +0, 6944, 6944, 14, 16, 0x2ebe06ca +0, 6958, 6958, 14, 16, 0x40b40741 +0, 6972, 6972, 14, 16, 0x4d76096a +0, 6986, 6986, 14, 16, 0x15da02f1 +0, 7000, 7000, 14, 16, 0x3a3007b1 +0, 7014, 7014, 14, 16, 0x36740746 +0, 7028, 7028, 14, 16, 0x4af20941 +0, 7042, 7042, 14, 16, 0x4a5809c9 +0, 7056, 7056, 14, 16, 0x18040387 +0, 7070, 7070, 14, 16, 0x381007af +0, 7084, 7084, 14, 16, 0x391807ef +0, 7098, 7098, 14, 16, 0x56080a47 +0, 7112, 7112, 14, 16, 0x14c802db +0, 7126, 7126, 14, 16, 0x3780064b +0, 7140, 7140, 14, 16, 0x394207d1 +0, 7154, 7154, 14, 16, 0x2bcc0597 +0, 7168, 7168, 14, 16, 0x50b3098e +0, 7182, 7182, 14, 16, 0x22a603eb +0, 7196, 7196, 14, 16, 0x3cfe06a3 +0, 7210, 7210, 14, 16, 0x1e720421 +0, 7224, 7224, 14, 16, 0x16ea028f +0, 7238, 7238, 14, 16, 0x471c090d +0, 7252, 7252, 14, 16, 0x31a805a7 +0, 7266, 7266, 14, 16, 0x4c6608dd +0, 7280, 7280, 14, 16, 0x1acc02f1 +0, 7294, 7294, 14, 16, 0x4fb60a3f +0, 7308, 7308, 14, 16, 0x3daa0869 +0, 7322, 7322, 14, 16, 0x41f00767 +0, 7336, 7336, 14, 16, 0x465108ac +0, 7350, 7350, 14, 16, 0x15b202f3 +0, 7364, 7364, 14, 16, 0x41d0090d +0, 7378, 7378, 14, 16, 0x2be8065e +0, 7392, 7392, 14, 16, 0x40f20785 +0, 7406, 7406, 14, 16, 0x4c580a09 +0, 7420, 7420, 14, 16, 0x183a038d +0, 7434, 7434, 14, 16, 0x362f076b +0, 7448, 7448, 14, 16, 0x2ad105f9 +0, 7462, 7462, 14, 16, 0x56840a49 +0, 7476, 7476, 14, 16, 0x15f602fd +0, 7490, 7490, 14, 16, 0x31660553 +0, 7504, 7504, 14, 16, 0x2842056d +0, 7518, 7518, 14, 16, 0x26ee0447 +0, 7532, 7532, 14, 16, 0x5a7a0b7d +0, 7546, 7546, 14, 16, 0x23d6040d +0, 7560, 7560, 14, 16, 0x3c91069b +0, 7574, 7574, 14, 16, 0x1c8403df +0, 7588, 7588, 14, 16, 0x1586026d +0, 7602, 7602, 14, 16, 0x482a0927 +0, 7616, 7616, 14, 16, 0x33e805eb +0, 7630, 7630, 14, 16, 0x4d3d0869 +0, 7644, 7644, 14, 16, 0x19de02cf +0, 7658, 7658, 14, 16, 0x64660c1d +0, 7672, 7672, 14, 16, 0x3f610882 +0, 7686, 7686, 14, 16, 0x44c307cb +0, 7700, 7700, 14, 16, 0x446207c1 +0, 7714, 7714, 14, 16, 0x2006039d +0, 7728, 7728, 14, 16, 0x1f9a03d9 +0, 7742, 7742, 14, 16, 0x39d4081b +0, 7756, 7756, 14, 16, 0x425207a9 +0, 7770, 7770, 14, 16, 0x4ebd0a5a +0, 7784, 7784, 14, 16, 0x24eb0449 +0, 7798, 7798, 14, 16, 0x340c0727 +0, 7812, 7812, 14, 16, 0x27f00597 +0, 7826, 7826, 14, 16, 0x57640a6b +0, 7840, 7840, 14, 16, 0x16da031d +0, 7854, 7854, 14, 16, 0x24300477 +0, 7868, 7868, 14, 16, 0x351e0749 +0, 7882, 7882, 14, 16, 0x286a0460 +0, 7896, 7896, 14, 16, 0x546e0a0b +0, 7910, 7910, 14, 16, 0x24c8042f +0, 7924, 7924, 14, 16, 0x2f480539 +0, 7938, 7938, 14, 16, 0x1b7403bd +0, 7952, 7952, 14, 16, 0x258c06a1 +0, 7966, 7966, 14, 16, 0x469e08f5 +0, 7980, 7980, 14, 16, 0x3628062f +0, 7994, 7994, 14, 16, 0x2ecc04c6, S=1, Skip Samples, 10, 0x00300008 diff --git a/tests/ref/fate/raki-cafe-planar b/tests/ref/fate/raki-cafe-planar new file mode 100644 index 0000000000..742add34ee --- /dev/null +++ b/tests/ref/fate/raki-cafe-planar @@ -0,0 +1,578 @@ +#extradata 0: 64, 0x020f05ce +#tb 0: 1/32000 +#media_type 0: audio +#codec_id 0: adpcm_thp +#sample_rate 0: 32000 +#channel_layout_name 0: stereo +0, 0, 0, 14, 16, 0x16900343 +0, 14, 14, 14, 16, 0x31c206e1 +0, 28, 28, 14, 16, 0x23a00491 +0, 42, 42, 14, 16, 0x5bd40ba1 +0, 56, 56, 14, 16, 0x10620253 +0, 70, 70, 14, 16, 0x41690733 +0, 84, 84, 14, 16, 0x279a04e5 +0, 98, 98, 14, 16, 0x5b6a0b0f +0, 112, 112, 14, 16, 0x591e0aa1 +0, 126, 126, 14, 16, 0x1ec00363 +0, 140, 140, 14, 16, 0x4404076b +0, 154, 154, 14, 16, 0x1a140361 +0, 168, 168, 14, 16, 0x62020bd9 +0, 182, 182, 14, 16, 0x3abe07f9 +0, 196, 196, 14, 16, 0x3a7c0677 +0, 210, 210, 14, 16, 0x434007d1 +0, 224, 224, 14, 16, 0x1e0a0359 +0, 238, 238, 14, 16, 0x1b3c0330 +0, 252, 252, 14, 16, 0x33220754 +0, 266, 266, 14, 16, 0x47700855 +0, 280, 280, 14, 16, 0x46dd08b3 +0, 294, 294, 14, 16, 0x0ea60215 +0, 308, 308, 14, 16, 0x4048086d +0, 322, 322, 14, 16, 0x2409052d +0, 336, 336, 14, 16, 0x59920ab1 +0, 350, 350, 14, 16, 0x193e0361 +0, 364, 364, 14, 16, 0x2bbc053b +0, 378, 378, 14, 16, 0x2ee0067d +0, 392, 392, 14, 16, 0x2eec066b +0, 406, 406, 14, 16, 0x5ca20bc3 +0, 420, 420, 14, 16, 0x11760275 +0, 434, 434, 14, 16, 0x35ac0649 +0, 448, 448, 14, 16, 0x30d0067f +0, 462, 462, 14, 16, 0x5af80b0d +0, 476, 476, 14, 16, 0x59990aac +0, 490, 490, 14, 16, 0x34120585 +0, 504, 504, 14, 16, 0x47240809 +0, 518, 518, 14, 16, 0x20e20467 +0, 532, 532, 14, 16, 0x180d02d2 +0, 546, 546, 14, 16, 0x36ea07a8 +0, 560, 560, 14, 16, 0x3d6106db +0, 574, 574, 14, 16, 0x48f8086f +0, 588, 588, 14, 16, 0x176c0319 +0, 602, 602, 14, 16, 0x1b78033d +0, 616, 616, 14, 16, 0x44f9095c +0, 630, 630, 14, 16, 0x3c7006b9 +0, 644, 644, 14, 16, 0x518f0a04 +0, 658, 658, 14, 16, 0x133402af +0, 672, 672, 14, 16, 0x3d780819 +0, 686, 686, 14, 16, 0x216604cb +0, 700, 700, 14, 16, 0x4dde08b3 +0, 714, 714, 14, 16, 0x4a8609bf +0, 728, 728, 14, 16, 0x2ab00530 +0, 742, 742, 14, 16, 0x38900739 +0, 756, 756, 14, 16, 0x21950485 +0, 770, 770, 14, 16, 0x5d940be5 +0, 784, 784, 14, 16, 0x12840297 +0, 798, 798, 14, 16, 0x335705aa +0, 812, 812, 14, 16, 0x2f8c065b +0, 826, 826, 14, 16, 0x59f60aed +0, 840, 840, 14, 16, 0x582e0a5b +0, 854, 854, 14, 16, 0x352105a7 +0, 868, 868, 14, 16, 0x447e073d +0, 882, 882, 14, 16, 0x1fea0429 +0, 896, 896, 14, 16, 0x60a40bb5 +0, 910, 910, 14, 16, 0x4e1a09ed +0, 924, 924, 14, 16, 0x3fa2071f +0, 938, 938, 14, 16, 0x4bec08cd +0, 952, 952, 14, 16, 0x1cea0335 +0, 966, 966, 14, 16, 0x451306df +0, 980, 980, 14, 16, 0x32c9072a +0, 994, 994, 14, 16, 0x4c9408fd +0, 1008, 1008, 14, 16, 0x4ff509cd +0, 1022, 1022, 14, 16, 0x0eca021b +0, 1036, 1036, 14, 16, 0x3b3007d5 +0, 1050, 1050, 14, 16, 0x3e6408a5 +0, 1064, 1064, 14, 16, 0x48b908eb +0, 1078, 1078, 14, 16, 0x4a1009a5 +0, 1092, 1092, 14, 16, 0x2c0e0563 +0, 1106, 1106, 14, 16, 0x3a6c07f5 +0, 1120, 1120, 14, 16, 0x2cc80641 +0, 1134, 1134, 14, 16, 0x5f090c16 +0, 1148, 1148, 14, 16, 0x137602b9 +0, 1162, 1162, 14, 16, 0x30cf0582 +0, 1176, 1176, 14, 16, 0x2d6c0617 +0, 1190, 1190, 14, 16, 0x236003d9 +0, 1204, 1204, 14, 16, 0x529809dd +0, 1218, 1218, 14, 16, 0x225203c9 +0, 1232, 1232, 14, 16, 0x40a7076e +0, 1246, 1246, 14, 16, 0x1f2203f3 +0, 1260, 1260, 14, 16, 0x16a00291 +0, 1274, 1274, 14, 16, 0x47960914 +0, 1288, 1288, 14, 16, 0x40c20743 +0, 1302, 1302, 14, 16, 0x4c0008d3 +0, 1316, 1316, 14, 16, 0x1bfe0313 +0, 1330, 1330, 14, 16, 0x50a80a61 +0, 1344, 1344, 14, 16, 0x2ebe06ca +0, 1358, 1358, 14, 16, 0x40b40741 +0, 1372, 1372, 14, 16, 0x4d76096a +0, 1386, 1386, 14, 16, 0x15da02f1 +0, 1400, 1400, 14, 16, 0x3a3007b1 +0, 1414, 1414, 14, 16, 0x36740746 +0, 1428, 1428, 14, 16, 0x4af20941 +0, 1442, 1442, 14, 16, 0x4a5809c9 +0, 1456, 1456, 14, 16, 0x18040387 +0, 1470, 1470, 14, 16, 0x381007af +0, 1484, 1484, 14, 16, 0x391807ef +0, 1498, 1498, 14, 16, 0x56080a47 +0, 1512, 1512, 14, 16, 0x14c802db +0, 1526, 1526, 14, 16, 0x3780064b +0, 1540, 1540, 14, 16, 0x394207d1 +0, 1554, 1554, 14, 16, 0x2bcc0597 +0, 1568, 1568, 14, 16, 0x50b3098e +0, 1582, 1582, 14, 16, 0x22a603eb +0, 1596, 1596, 14, 16, 0x3cfe06a3 +0, 1610, 1610, 14, 16, 0x1e720421 +0, 1624, 1624, 14, 16, 0x16ea028f +0, 1638, 1638, 14, 16, 0x471c090d +0, 1652, 1652, 14, 16, 0x31a805a7 +0, 1666, 1666, 14, 16, 0x4c6608dd +0, 1680, 1680, 14, 16, 0x1acc02f1 +0, 1694, 1694, 14, 16, 0x4fb60a3f +0, 1708, 1708, 14, 16, 0x3daa0869 +0, 1722, 1722, 14, 16, 0x41f00767 +0, 1736, 1736, 14, 16, 0x465108ac +0, 1750, 1750, 14, 16, 0x15b202f3 +0, 1764, 1764, 14, 16, 0x41d0090d +0, 1778, 1778, 14, 16, 0x2be8065e +0, 1792, 1792, 14, 16, 0x40f20785 +0, 1806, 1806, 14, 16, 0x4c580a09 +0, 1820, 1820, 14, 16, 0x183a038d +0, 1834, 1834, 14, 16, 0x362f076b +0, 1848, 1848, 14, 16, 0x2ad105f9 +0, 1862, 1862, 14, 16, 0x56840a49 +0, 1876, 1876, 14, 16, 0x15f602fd +0, 1890, 1890, 14, 16, 0x31660553 +0, 1904, 1904, 14, 16, 0x2842056d +0, 1918, 1918, 14, 16, 0x26ee0447 +0, 1932, 1932, 14, 16, 0x5a7a0b7d +0, 1946, 1946, 14, 16, 0x23d6040d +0, 1960, 1960, 14, 16, 0x3c91069b +0, 1974, 1974, 14, 16, 0x1c8403df +0, 1988, 1988, 14, 16, 0x1586026d +0, 2002, 2002, 14, 16, 0x482a0927 +0, 2016, 2016, 14, 16, 0x33e805eb +0, 2030, 2030, 14, 16, 0x4d3d0869 +0, 2044, 2044, 14, 16, 0x19de02cf +0, 2058, 2058, 14, 16, 0x64660c1d +0, 2072, 2072, 14, 16, 0x3f610882 +0, 2086, 2086, 14, 16, 0x44c307cb +0, 2100, 2100, 14, 16, 0x446207c1 +0, 2114, 2114, 14, 16, 0x2006039d +0, 2128, 2128, 14, 16, 0x1f9a03d9 +0, 2142, 2142, 14, 16, 0x39d4081b +0, 2156, 2156, 14, 16, 0x425207a9 +0, 2170, 2170, 14, 16, 0x4ebd0a5a +0, 2184, 2184, 14, 16, 0x24eb0449 +0, 2198, 2198, 14, 16, 0x340c0727 +0, 2212, 2212, 14, 16, 0x27f00597 +0, 2226, 2226, 14, 16, 0x57640a6b +0, 2240, 2240, 14, 16, 0x16da031d +0, 2254, 2254, 14, 16, 0x24300477 +0, 2268, 2268, 14, 16, 0x351e0749 +0, 2282, 2282, 14, 16, 0x286a0460 +0, 2296, 2296, 14, 16, 0x546e0a0b +0, 2310, 2310, 14, 16, 0x24c8042f +0, 2324, 2324, 14, 16, 0x2f480539 +0, 2338, 2338, 14, 16, 0x1b7403bd +0, 2352, 2352, 14, 16, 0x258c06a1 +0, 2366, 2366, 14, 16, 0x469e08f5 +0, 2380, 2380, 14, 16, 0x3628062f +0, 2394, 2394, 14, 16, 0x406e0744 +0, 2408, 2408, 14, 16, 0x193002ad +0, 2422, 2422, 14, 16, 0x15d0027f +0, 2436, 2436, 14, 16, 0x3e3a085d +0, 2450, 2450, 14, 16, 0x3720060f +0, 2464, 2464, 14, 16, 0x436807a9 +0, 2478, 2478, 14, 16, 0x175e0333 +0, 2492, 2492, 14, 16, 0x408c08e9 +0, 2506, 2506, 14, 16, 0x36c6079b +0, 2520, 2520, 14, 16, 0x4536080d +0, 2534, 2534, 14, 16, 0x4e920a33 +0, 2548, 2548, 14, 16, 0x24c00447 +0, 2562, 2562, 14, 16, 0x31da06e3 +0, 2576, 2576, 14, 16, 0x1eda04dc +0, 2590, 2590, 14, 16, 0x58740a8d +0, 2604, 2604, 14, 16, 0x180e033f +0, 2618, 2618, 14, 16, 0x26b004b9 +0, 2632, 2632, 14, 16, 0x32de0705 +0, 2646, 2646, 14, 16, 0x28e40549 +0, 2660, 2660, 14, 16, 0x5c2a0bbf +0, 2674, 2674, 14, 16, 0x10160251 +0, 2688, 2688, 14, 16, 0x3094055f +0, 2702, 2702, 14, 16, 0x348c0707 +0, 2716, 2716, 14, 16, 0x5c2c0b2f +0, 2730, 2730, 14, 16, 0x587e0a85 +0, 2744, 2744, 14, 16, 0x1ebe0363 +0, 2758, 2758, 14, 16, 0x419d0758 +0, 2772, 2772, 14, 16, 0x192c0345 +0, 2786, 2786, 14, 16, 0x63080bf9 +0, 2800, 2800, 14, 16, 0x3c7e0839 +0, 2814, 2814, 14, 16, 0x394e0655 +0, 2828, 2828, 14, 16, 0x47b00845 +0, 2842, 2842, 14, 16, 0x1ecb0379 +0, 2856, 2856, 14, 16, 0x3f7e08c7 +0, 2870, 2870, 14, 16, 0x36a707c3 +0, 2884, 2884, 14, 16, 0x46760831 +0, 2898, 2898, 14, 16, 0x4f2c0a73 +0, 2912, 2912, 14, 16, 0x1278028d +0, 2926, 2926, 14, 16, 0x2f68069f +0, 2940, 2940, 14, 16, 0x250c056b +0, 2954, 2954, 14, 16, 0x4cb00891 +0, 2968, 2968, 14, 16, 0x193e0361 +0, 2982, 2982, 14, 16, 0x295204fd +0, 2996, 2996, 14, 16, 0x309406bf +0, 3010, 3010, 14, 16, 0x28100505 +0, 3024, 3024, 14, 16, 0x5d360be1 +0, 3038, 3038, 14, 16, 0x11480273 +0, 3052, 3052, 14, 16, 0x428e0762 +0, 3066, 3066, 14, 16, 0x338006e1 +0, 3080, 3080, 14, 16, 0x5b1c0b0d +0, 3094, 3094, 14, 16, 0x57680a63 +0, 3108, 3108, 14, 16, 0x25e00485 +0, 3122, 3122, 14, 16, 0x393506aa +0, 3136, 3136, 14, 16, 0x17ae0289 +0, 3150, 3150, 14, 16, 0x4f640765 +0, 3164, 3164, 14, 16, 0x4bbe099d +0, 3178, 3178, 14, 16, 0x3c3006b9 +0, 3192, 3192, 14, 16, 0x4864086b +0, 3206, 3206, 14, 16, 0x1dfe0357 +0, 3220, 3220, 14, 16, 0x1b20033d +0, 3234, 3234, 14, 16, 0x33be076f +0, 3248, 3248, 14, 16, 0x49500897 +0, 3262, 3262, 14, 16, 0x497f09c5 +0, 3276, 3276, 14, 16, 0x112a0253 +0, 3290, 3290, 14, 16, 0x3ea6083b +0, 3304, 3304, 14, 16, 0x31260719 +0, 3318, 3318, 14, 16, 0x599e0ab3 +0, 3332, 3332, 14, 16, 0x485c0981 +0, 3346, 3346, 14, 16, 0x2bc6052e +0, 3360, 3360, 14, 16, 0x2dae065b +0, 3374, 3374, 14, 16, 0x2e580667 +0, 3388, 3388, 14, 16, 0x5e060c03 +0, 3402, 3402, 14, 16, 0x12560295 +0, 3416, 3416, 14, 16, 0x31f7057a +0, 3430, 3430, 14, 16, 0x2fc0065d +0, 3444, 3444, 14, 16, 0x59f60aed +0, 3458, 3458, 14, 16, 0x56800a3f +0, 3472, 3472, 14, 16, 0x34fe05a7 +0, 3486, 3486, 14, 16, 0x37e6061a +0, 3500, 3500, 14, 16, 0x1d9803bf +0, 3514, 3514, 14, 16, 0x17380295 +0, 3528, 3528, 14, 16, 0x4bba0995 +0, 3542, 3542, 14, 16, 0x3d7006dd +0, 3556, 3556, 14, 16, 0x4a460890 +0, 3570, 3570, 14, 16, 0x1d0c0335 +0, 3584, 3584, 14, 16, 0x1d450378 +0, 3598, 3598, 14, 16, 0x328e072f +0, 3612, 3612, 14, 16, 0x3d8406db +0, 3626, 3626, 14, 16, 0x51cc0abd +0, 3640, 3640, 14, 16, 0x13580292 +0, 3654, 3654, 14, 16, 0x3db40817 +0, 3668, 3668, 14, 16, 0x2f9206b9 +0, 3682, 3682, 14, 16, 0x5ad00ad5 +0, 3696, 3696, 14, 16, 0x499709a3 +0, 3710, 3710, 14, 16, 0x289604e9 +0, 3724, 3724, 14, 16, 0x2b6e0617 +0, 3738, 3738, 14, 16, 0x2a7605f8 +0, 3752, 3752, 14, 16, 0x5db60be5 +0, 3766, 3766, 14, 16, 0x136a02b7 +0, 3780, 3780, 14, 16, 0x440607ab +0, 3794, 3794, 14, 16, 0x2e7c0639 +0, 3808, 3808, 14, 16, 0x238304ae +0, 3822, 3822, 14, 16, 0x56780a3b +0, 3836, 3836, 14, 16, 0x223203c9 +0, 3850, 3850, 14, 16, 0x3c350713 +0, 3864, 3864, 14, 16, 0x1c9003a1 +0, 3878, 3878, 14, 16, 0x16d20283 +0, 3892, 3892, 14, 16, 0x37f80791 +0, 3906, 3906, 14, 16, 0x3f940721 +0, 3920, 3920, 14, 16, 0x4a680895 +0, 3934, 3934, 14, 16, 0x1c280315 +0, 3948, 3948, 14, 16, 0x1a52031b +0, 3962, 3962, 14, 16, 0x34010754 +0, 3976, 3976, 14, 16, 0x3ea406ff +0, 3990, 3990, 14, 16, 0x4add08ed +0, 4004, 4004, 14, 16, 0x0f7e021d +0, 4018, 4018, 14, 16, 0x3a0407b3 +0, 4032, 4032, 14, 16, 0x3886080d +0, 4046, 4046, 14, 16, 0x49e1091e +0, 4060, 4060, 14, 16, 0x49a909a7 +0, 4074, 4074, 14, 16, 0x1a2003c3 +0, 4088, 4088, 14, 16, 0x392e07d3 +0, 4102, 4102, 14, 16, 0x2b300603 +0, 4116, 4116, 14, 16, 0x5ea20c07 +0, 4130, 4130, 14, 16, 0x149802d9 +0, 4144, 4144, 14, 16, 0x2240040d +0, 4158, 4158, 14, 16, 0x2c5c05f5 +0, 4172, 4172, 14, 16, 0x2bfa0599 +0, 4186, 4186, 14, 16, 0x54820a17 +0, 4200, 4200, 14, 16, 0x234003eb +0, 4214, 4214, 14, 16, 0x408c0790 +0, 4228, 4228, 14, 16, 0x145e0223 +0, 4242, 4242, 14, 16, 0x5eb20b73 +0, 4256, 4256, 14, 16, 0x48a2094d +0, 4270, 4270, 14, 16, 0x41d60765 +0, 4284, 4284, 14, 16, 0x40db07ac +0, 4298, 4298, 14, 16, 0x18ea033d +0, 4312, 4312, 14, 16, 0x50780a5f +0, 4326, 4326, 14, 16, 0x3f50088b +0, 4340, 4340, 14, 16, 0x40ce0745 +0, 4354, 4354, 14, 16, 0x4c44095f +0, 4368, 4368, 14, 16, 0x12b80297 +0, 4382, 4382, 14, 16, 0x1e24039f +0, 4396, 4396, 14, 16, 0x2c400690 +0, 4410, 4410, 14, 16, 0x3fe40763 +0, 4424, 4424, 14, 16, 0x4d540a25 +0, 4438, 4438, 14, 16, 0x25bb046b +0, 4452, 4452, 14, 16, 0x364e077d +0, 4466, 4466, 14, 16, 0x2baa0619 +0, 4480, 4480, 14, 16, 0x5fd40c29 +0, 4494, 4494, 14, 16, 0x158a02fb +0, 4508, 4508, 14, 16, 0x2666048d +0, 4522, 4522, 14, 16, 0x382007af +0, 4536, 4536, 14, 16, 0x26d404fd +0, 4550, 4550, 14, 16, 0x533a0aa9 +0, 4564, 4564, 14, 16, 0x22d003ed +0, 4578, 4578, 14, 16, 0x3b080678 +0, 4592, 4592, 14, 16, 0x1ce203c1 +0, 4606, 4606, 14, 16, 0x1736028d +0, 4620, 4620, 14, 16, 0x49cc0967 +0, 4634, 4634, 14, 16, 0x44d807c9 +0, 4648, 4648, 14, 16, 0x4a0007ee +0, 4662, 4662, 14, 16, 0x198e035d +0, 4676, 4676, 14, 16, 0x1b7c0335 +0, 4690, 4690, 14, 16, 0x3fef08b0 +0, 4704, 4704, 14, 16, 0x43ce07a9 +0, 4718, 4718, 14, 16, 0x446e07dd +0, 4732, 4732, 14, 16, 0x16dc031c +0, 4746, 4746, 14, 16, 0x1da0037f +0, 4760, 4760, 14, 16, 0x2a5f063b +0, 4774, 4774, 14, 16, 0x422407a7 +0, 4788, 4788, 14, 16, 0x4fc80a85 +0, 4802, 4802, 14, 16, 0x258c0469 +0, 4816, 4816, 14, 16, 0x33fe0729 +0, 4830, 4830, 14, 16, 0x2aa3067d +0, 4844, 4844, 14, 16, 0x60c20c4b +0, 4858, 4858, 14, 16, 0x16da031d +0, 4872, 4872, 14, 16, 0x38af0674 +0, 4886, 4886, 14, 16, 0x354d074b +0, 4900, 4900, 14, 16, 0x1cee0315 +0, 4914, 4914, 14, 16, 0x5b3a0b9d +0, 4928, 4928, 14, 16, 0x2422040f +0, 4942, 4942, 14, 16, 0x3e3c06db +0, 4956, 4956, 14, 16, 0x1ee2040f +0, 4970, 4970, 14, 16, 0x283206ed +0, 4984, 4984, 14, 16, 0x44ef08bc +0, 4998, 4998, 14, 16, 0x34fa060d +0, 5012, 5012, 14, 16, 0x4040071f +0, 5026, 5026, 14, 16, 0x193c02af +0, 5040, 5040, 14, 16, 0x64660c1d +0, 5054, 5054, 14, 16, 0x3f27087d +0, 5068, 5068, 14, 16, 0x45f307ed +0, 5082, 5082, 14, 16, 0x4bf70887 +0, 5096, 5096, 14, 16, 0x155e02d9 +0, 5110, 5110, 14, 16, 0x1ee603bb +0, 5124, 5124, 14, 16, 0x374007ea +0, 5138, 5138, 14, 16, 0x442407eb +0, 5152, 5152, 14, 16, 0x45fa0889 +0, 5166, 5166, 14, 16, 0x24c00447 +0, 5180, 5180, 14, 16, 0x32de0705 +0, 5194, 5194, 14, 16, 0x28320592 +0, 5208, 5208, 14, 16, 0x56b00a4d +0, 5222, 5222, 14, 16, 0x17d9032f +0, 5236, 5236, 14, 16, 0x380e065b +0, 5250, 5250, 14, 16, 0x32ef0707 +0, 5264, 5264, 14, 16, 0x1ea8034d +0, 5278, 5278, 14, 16, 0x4d000937 +0, 5292, 5292, 14, 16, 0x0f540231 +0, 5306, 5306, 14, 16, 0x402a073b +0, 5320, 5320, 14, 16, 0x1d1403c3 +0, 5334, 5334, 14, 16, 0x24bc0690 +0, 5348, 5348, 14, 16, 0x583d0a78 +0, 5362, 5362, 14, 16, 0x35ec0631 +0, 5376, 5376, 14, 16, 0x40440708 +0, 5390, 5390, 14, 16, 0x1d8e03d9 +0, 5404, 5404, 14, 16, 0x15e2027d +0, 5418, 5418, 14, 16, 0x3ac007fd +0, 5432, 5432, 14, 16, 0x48320831 +0, 5446, 5446, 14, 16, 0x4f2c09ad +0, 5460, 5460, 14, 16, 0x153402db +0, 5474, 5474, 14, 16, 0x1b1c0341 +0, 5488, 5488, 14, 16, 0x357c0797 +0, 5502, 5502, 14, 16, 0x4584080f +0, 5516, 5516, 14, 16, 0x4c8a0a17 +0, 5530, 5530, 14, 16, 0x1031026d +0, 5544, 5544, 14, 16, 0x429808c1 +0, 5558, 5558, 14, 16, 0x27bc05ab +0, 5572, 5572, 14, 16, 0x58030a7f +0, 5586, 5586, 14, 16, 0x18380341 +0, 5600, 5600, 14, 16, 0x279204bd +0, 5614, 5614, 14, 16, 0x31c206e1 +0, 5628, 5628, 14, 16, 0x23a00491 +0, 5642, 5642, 14, 16, 0x5bd40ba1 +0, 5656, 5656, 14, 16, 0x10620253 +0, 5670, 5670, 14, 16, 0x41690733 +0, 5684, 5684, 14, 16, 0x279a04e5 +0, 5698, 5698, 14, 16, 0x5b6a0b0f +0, 5712, 5712, 14, 16, 0x591e0aa1 +0, 5726, 5726, 14, 16, 0x1ec00363 +0, 5740, 5740, 14, 16, 0x4404076b +0, 5754, 5754, 14, 16, 0x1a140361 +0, 5768, 5768, 14, 16, 0x62020bd9 +0, 5782, 5782, 14, 16, 0x3abe07f9 +0, 5796, 5796, 14, 16, 0x3a7c0677 +0, 5810, 5810, 14, 16, 0x434007d1 +0, 5824, 5824, 14, 16, 0x1e0a0359 +0, 5838, 5838, 14, 16, 0x1b3c0330 +0, 5852, 5852, 14, 16, 0x33220754 +0, 5866, 5866, 14, 16, 0x47700855 +0, 5880, 5880, 14, 16, 0x46dd08b3 +0, 5894, 5894, 14, 16, 0x0ea60215 +0, 5908, 5908, 14, 16, 0x4048086d +0, 5922, 5922, 14, 16, 0x2409052d +0, 5936, 5936, 14, 16, 0x59920ab1 +0, 5950, 5950, 14, 16, 0x193e0361 +0, 5964, 5964, 14, 16, 0x2bbc053b +0, 5978, 5978, 14, 16, 0x2ee0067d +0, 5992, 5992, 14, 16, 0x2eec066b +0, 6006, 6006, 14, 16, 0x5ca20bc3 +0, 6020, 6020, 14, 16, 0x11760275 +0, 6034, 6034, 14, 16, 0x35ac0649 +0, 6048, 6048, 14, 16, 0x30d0067f +0, 6062, 6062, 14, 16, 0x5af80b0d +0, 6076, 6076, 14, 16, 0x59990aac +0, 6090, 6090, 14, 16, 0x34120585 +0, 6104, 6104, 14, 16, 0x47240809 +0, 6118, 6118, 14, 16, 0x20e20467 +0, 6132, 6132, 14, 16, 0x180d02d2 +0, 6146, 6146, 14, 16, 0x36ea07a8 +0, 6160, 6160, 14, 16, 0x3d6106db +0, 6174, 6174, 14, 16, 0x48f8086f +0, 6188, 6188, 14, 16, 0x176c0319 +0, 6202, 6202, 14, 16, 0x1b78033d +0, 6216, 6216, 14, 16, 0x44f9095c +0, 6230, 6230, 14, 16, 0x3c7006b9 +0, 6244, 6244, 14, 16, 0x518f0a04 +0, 6258, 6258, 14, 16, 0x133402af +0, 6272, 6272, 14, 16, 0x3d780819 +0, 6286, 6286, 14, 16, 0x216604cb +0, 6300, 6300, 14, 16, 0x4dde08b3 +0, 6314, 6314, 14, 16, 0x4a8609bf +0, 6328, 6328, 14, 16, 0x2ab00530 +0, 6342, 6342, 14, 16, 0x38900739 +0, 6356, 6356, 14, 16, 0x21950485 +0, 6370, 6370, 14, 16, 0x5d940be5 +0, 6384, 6384, 14, 16, 0x12840297 +0, 6398, 6398, 14, 16, 0x335705aa +0, 6412, 6412, 14, 16, 0x2f8c065b +0, 6426, 6426, 14, 16, 0x59f60aed +0, 6440, 6440, 14, 16, 0x582e0a5b +0, 6454, 6454, 14, 16, 0x352105a7 +0, 6468, 6468, 14, 16, 0x447e073d +0, 6482, 6482, 14, 16, 0x1fea0429 +0, 6496, 6496, 14, 16, 0x60a40bb5 +0, 6510, 6510, 14, 16, 0x4e1a09ed +0, 6524, 6524, 14, 16, 0x3fa2071f +0, 6538, 6538, 14, 16, 0x4bec08cd +0, 6552, 6552, 14, 16, 0x1cea0335 +0, 6566, 6566, 14, 16, 0x451306df +0, 6580, 6580, 14, 16, 0x32c9072a +0, 6594, 6594, 14, 16, 0x4c9408fd +0, 6608, 6608, 14, 16, 0x4ff509cd +0, 6622, 6622, 14, 16, 0x0eca021b +0, 6636, 6636, 14, 16, 0x3b3007d5 +0, 6650, 6650, 14, 16, 0x3e6408a5 +0, 6664, 6664, 14, 16, 0x48b908eb +0, 6678, 6678, 14, 16, 0x4a1009a5 +0, 6692, 6692, 14, 16, 0x2c0e0563 +0, 6706, 6706, 14, 16, 0x3a6c07f5 +0, 6720, 6720, 14, 16, 0x2cc80641 +0, 6734, 6734, 14, 16, 0x5f090c16 +0, 6748, 6748, 14, 16, 0x137602b9 +0, 6762, 6762, 14, 16, 0x30cf0582 +0, 6776, 6776, 14, 16, 0x2d6c0617 +0, 6790, 6790, 14, 16, 0x236003d9 +0, 6804, 6804, 14, 16, 0x529809dd +0, 6818, 6818, 14, 16, 0x225203c9 +0, 6832, 6832, 14, 16, 0x40a7076e +0, 6846, 6846, 14, 16, 0x1f2203f3 +0, 6860, 6860, 14, 16, 0x16a00291 +0, 6874, 6874, 14, 16, 0x47960914 +0, 6888, 6888, 14, 16, 0x40c20743 +0, 6902, 6902, 14, 16, 0x4c0008d3 +0, 6916, 6916, 14, 16, 0x1bfe0313 +0, 6930, 6930, 14, 16, 0x50a80a61 +0, 6944, 6944, 14, 16, 0x2ebe06ca +0, 6958, 6958, 14, 16, 0x40b40741 +0, 6972, 6972, 14, 16, 0x4d76096a +0, 6986, 6986, 14, 16, 0x15da02f1 +0, 7000, 7000, 14, 16, 0x3a3007b1 +0, 7014, 7014, 14, 16, 0x36740746 +0, 7028, 7028, 14, 16, 0x4af20941 +0, 7042, 7042, 14, 16, 0x4a5809c9 +0, 7056, 7056, 14, 16, 0x18040387 +0, 7070, 7070, 14, 16, 0x381007af +0, 7084, 7084, 14, 16, 0x391807ef +0, 7098, 7098, 14, 16, 0x56080a47 +0, 7112, 7112, 14, 16, 0x14c802db +0, 7126, 7126, 14, 16, 0x3780064b +0, 7140, 7140, 14, 16, 0x394207d1 +0, 7154, 7154, 14, 16, 0x2bcc0597 +0, 7168, 7168, 14, 16, 0x50b3098e +0, 7182, 7182, 14, 16, 0x22a603eb +0, 7196, 7196, 14, 16, 0x3cfe06a3 +0, 7210, 7210, 14, 16, 0x1e720421 +0, 7224, 7224, 14, 16, 0x16ea028f +0, 7238, 7238, 14, 16, 0x471c090d +0, 7252, 7252, 14, 16, 0x31a805a7 +0, 7266, 7266, 14, 16, 0x4c6608dd +0, 7280, 7280, 14, 16, 0x1acc02f1 +0, 7294, 7294, 14, 16, 0x4fb60a3f +0, 7308, 7308, 14, 16, 0x3daa0869 +0, 7322, 7322, 14, 16, 0x41f00767 +0, 7336, 7336, 14, 16, 0x465108ac +0, 7350, 7350, 14, 16, 0x15b202f3 +0, 7364, 7364, 14, 16, 0x41d0090d +0, 7378, 7378, 14, 16, 0x2be8065e +0, 7392, 7392, 14, 16, 0x40f20785 +0, 7406, 7406, 14, 16, 0x4c580a09 +0, 7420, 7420, 14, 16, 0x183a038d +0, 7434, 7434, 14, 16, 0x362f076b +0, 7448, 7448, 14, 16, 0x2ad105f9 +0, 7462, 7462, 14, 16, 0x56840a49 +0, 7476, 7476, 14, 16, 0x15f602fd +0, 7490, 7490, 14, 16, 0x31660553 +0, 7504, 7504, 14, 16, 0x2842056d +0, 7518, 7518, 14, 16, 0x26ee0447 +0, 7532, 7532, 14, 16, 0x5a7a0b7d +0, 7546, 7546, 14, 16, 0x23d6040d +0, 7560, 7560, 14, 16, 0x3c91069b +0, 7574, 7574, 14, 16, 0x1c8403df +0, 7588, 7588, 14, 16, 0x1586026d +0, 7602, 7602, 14, 16, 0x482a0927 +0, 7616, 7616, 14, 16, 0x33e805eb +0, 7630, 7630, 14, 16, 0x4d3d0869 +0, 7644, 7644, 14, 16, 0x19de02cf +0, 7658, 7658, 14, 16, 0x64660c1d +0, 7672, 7672, 14, 16, 0x3f610882 +0, 7686, 7686, 14, 16, 0x44c307cb +0, 7700, 7700, 14, 16, 0x446207c1 +0, 7714, 7714, 14, 16, 0x2006039d +0, 7728, 7728, 14, 16, 0x1f9a03d9 +0, 7742, 7742, 14, 16, 0x39d4081b +0, 7756, 7756, 14, 16, 0x425207a9 +0, 7770, 7770, 14, 16, 0x4ebd0a5a +0, 7784, 7784, 14, 16, 0x24eb0449 +0, 7798, 7798, 14, 16, 0x340c0727 +0, 7812, 7812, 14, 16, 0x27f00597 +0, 7826, 7826, 14, 16, 0x57640a6b +0, 7840, 7840, 14, 16, 0x16da031d +0, 7854, 7854, 14, 16, 0x24300477 +0, 7868, 7868, 14, 16, 0x351e0749 +0, 7882, 7882, 14, 16, 0x286a0460 +0, 7896, 7896, 14, 16, 0x546e0a0b +0, 7910, 7910, 14, 16, 0x24c8042f +0, 7924, 7924, 14, 16, 0x2f480539 +0, 7938, 7938, 14, 16, 0x1b7403bd +0, 7952, 7952, 14, 16, 0x258c06a1 +0, 7966, 7966, 14, 16, 0x469e08f5 +0, 7980, 7980, 14, 16, 0x3628062f +0, 7994, 7994, 14, 16, 0x2ecc04c6, S=1, Skip Samples, 10, 0x00300008 diff --git a/tests/ref/fate/raki-nx-opus b/tests/ref/fate/raki-nx-opus new file mode 100644 index 0000000000..0b47bb43b8 --- /dev/null +++ b/tests/ref/fate/raki-nx-opus @@ -0,0 +1,19 @@ +#extradata 0: 19, 0x3c4604cf +#tb 0: 1/48000 +#media_type 0: audio +#codec_id 0: opus +#sample_rate 0: 48000 +#channel_layout_name 0: stereo +0, 0, 0, 960, 757, 0x4c7b7940, S=1, Skip Samples, 10, 0x04b00078 +0, 960, 960, 960, 470, 0xd8fef799 +0, 1920, 1920, 960, 468, 0x9c96e75f +0, 2880, 2880, 960, 460, 0x6dd0f6bd +0, 3840, 3840, 960, 462, 0x9a90e0ca +0, 4800, 4800, 960, 460, 0x23f4daa5 +0, 5760, 5760, 960, 457, 0x1399dc25 +0, 6720, 6720, 960, 470, 0x189aeac5 +0, 7680, 7680, 960, 464, 0x9326e3da +0, 8640, 8640, 960, 467, 0xfc93e633 +0, 9600, 9600, 960, 472, 0xecdee674 +0, 10560, 10560, 960, 467, 0x2993e0d8 +0, 11520, 11520, 960, 699, 0xc6855ae7, S=1, Skip Samples, 10, 0x02750069 diff --git a/tests/ref/fate/raki-ps3-mp3 b/tests/ref/fate/raki-ps3-mp3 new file mode 100644 index 0000000000..0bdd7b550d --- /dev/null +++ b/tests/ref/fate/raki-ps3-mp3 @@ -0,0 +1,7 @@ +#tb 0: 1/48000 +#media_type 0: audio +#codec_id 0: mp3 +#sample_rate 0: 48000 +#channel_layout_name 0: stereo +0, 0, 0, 1152, 4096, 0xc2f1850c +0, 1152, 1152, 1152, 2816, 0x7f92d047 diff --git a/tests/ref/fate/raki-ps3-mp3-prefixed b/tests/ref/fate/raki-ps3-mp3-prefixed new file mode 100644 index 0000000000..0bdd7b550d --- /dev/null +++ b/tests/ref/fate/raki-ps3-mp3-prefixed @@ -0,0 +1,7 @@ +#tb 0: 1/48000 +#media_type 0: audio +#codec_id 0: mp3 +#sample_rate 0: 48000 +#channel_layout_name 0: stereo +0, 0, 0, 1152, 4096, 0xc2f1850c +0, 1152, 1152, 1152, 2816, 0x7f92d047 diff --git a/tests/ref/fate/raki-wii-pcm b/tests/ref/fate/raki-wii-pcm new file mode 100644 index 0000000000..a12771f54f --- /dev/null +++ b/tests/ref/fate/raki-wii-pcm @@ -0,0 +1,17 @@ +#tb 0: 1/48000 +#media_type 0: audio +#codec_id 0: pcm_s16be +#sample_rate 0: 48000 +#channel_layout_name 0: stereo +0, 0, 0, 1024, 4096, 0x109fc82e +0, 1024, 1024, 1024, 4096, 0x60ddf5cc +0, 2048, 2048, 1024, 4096, 0xc25cf063 +0, 3072, 3072, 1024, 4096, 0x1f4bd477 +0, 4096, 4096, 1024, 4096, 0x5ba90ac4 +0, 5120, 5120, 1024, 4096, 0xcd4ad792 +0, 6144, 6144, 1024, 4096, 0xb05bef85 +0, 7168, 7168, 1024, 4096, 0x6387f57f +0, 8192, 8192, 1024, 4096, 0x0e04cbb8 +0, 9216, 9216, 1024, 4096, 0x826c0577 +0, 10240, 10240, 1024, 4096, 0xa694e3f2 +0, 11264, 11264, 736, 2944, 0x4ea3c76f diff --git a/tests/ref/fate/raki-win-ms-adpcm b/tests/ref/fate/raki-win-ms-adpcm new file mode 100644 index 0000000000..7e4b710b96 --- /dev/null +++ b/tests/ref/fate/raki-win-ms-adpcm @@ -0,0 +1,18 @@ +#extradata 0: 32, 0x5f77078c +#tb 0: 1/48000 +#media_type 0: audio +#codec_id 0: adpcm_ms +#sample_rate 0: 48000 +#channel_layout_name 0: stereo +0, 0, 0, 1012, 1024, 0xf3da042d +0, 1012, 1012, 1012, 1024, 0xfce3187c +0, 2024, 2024, 1012, 1024, 0x87001979 +0, 3036, 3036, 1012, 1024, 0x03a60bc0 +0, 4048, 4048, 1012, 1024, 0x5a651033 +0, 5060, 5060, 1012, 1024, 0x708215dc +0, 6072, 6072, 1012, 1024, 0xb30f0e40 +0, 7084, 7084, 1012, 1024, 0x2cee0977 +0, 8096, 8096, 1012, 1024, 0x64a817ac +0, 9108, 9108, 1012, 1024, 0xa25a13b6 +0, 10120, 10120, 1012, 1024, 0xacba0738 +0, 11132, 11132, 1012, 1024, 0x78090ae0 diff --git a/tests/ref/fate/raki-win-pcm b/tests/ref/fate/raki-win-pcm new file mode 100644 index 0000000000..27fd3ab022 --- /dev/null +++ b/tests/ref/fate/raki-win-pcm @@ -0,0 +1,17 @@ +#tb 0: 1/48000 +#media_type 0: audio +#codec_id 0: pcm_s16le +#sample_rate 0: 48000 +#channel_layout_name 0: stereo +0, 0, 0, 1024, 4096, 0x2ea0c82e +0, 1024, 1024, 1024, 4096, 0x40dcf5cc +0, 2048, 2048, 1024, 4096, 0xab9ef063 +0, 3072, 3072, 1024, 4096, 0x3a4fd477 +0, 4096, 4096, 1024, 4096, 0x27dd0ac4 +0, 5120, 5120, 1024, 4096, 0xe423d792 +0, 6144, 6144, 1024, 4096, 0xa7b1ef85 +0, 7168, 7168, 1024, 4096, 0x381ff57f +0, 8192, 8192, 1024, 4096, 0x2f43cbb8 +0, 9216, 9216, 1024, 4096, 0x4c8b0577 +0, 10240, 10240, 1024, 4096, 0xabefe3f2 +0, 11264, 11264, 736, 2944, 0x32abc76f diff --git a/tests/ref/fate/raki-x360-xma2 b/tests/ref/fate/raki-x360-xma2 new file mode 100644 index 0000000000..62635f2f3e --- /dev/null +++ b/tests/ref/fate/raki-x360-xma2 @@ -0,0 +1,11 @@ +#extradata 0: 34, 0x3a1a02a4 +#tb 0: 1/48000 +#media_type 0: audio +#codec_id 0: xma2 +#sample_rate 0: 48000 +#channel_layout_name 0: stereo +0, 0, 0, 2560, 2048, 0x972ce0c3 +0, 2560, 2560, 3072, 2048, 0x21c81255 +0, 5632, 5632, 3072, 2048, 0x87de1b78 +0, 8704, 8704, 3072, 2048, 0x797ef8d2 +0, 11776, 11776, 1024, 2048, 0xe2cd4d08 -- 2.52.0 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]