1/* 2 * D-Cinema audio demuxer 3 * Copyright (c) 2005 Reimar D��ffinger 4 * 5 * This file is part of FFmpeg. 6 * 7 * FFmpeg is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Lesser General Public 9 * License as published by the Free Software Foundation; either 10 * version 2.1 of the License, or (at your option) any later version. 11 * 12 * FFmpeg is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with FFmpeg; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20 */ 21 22#include "libavutil/channel_layout.h" 23#include "avformat.h" 24 25static int daud_header(AVFormatContext *s) { 26 AVStream *st = avformat_new_stream(s, NULL); 27 if (!st) 28 return AVERROR(ENOMEM); 29 st->codec->codec_type = AVMEDIA_TYPE_AUDIO; 30 st->codec->codec_id = AV_CODEC_ID_PCM_S24DAUD; 31 st->codec->codec_tag = MKTAG('d', 'a', 'u', 'd'); 32 st->codec->channels = 6; 33 st->codec->channel_layout = AV_CH_LAYOUT_5POINT1; 34 st->codec->sample_rate = 96000; 35 st->codec->bit_rate = 3 * 6 * 96000 * 8; 36 st->codec->block_align = 3 * 6; 37 st->codec->bits_per_coded_sample = 24; 38 return 0; 39} 40 41static int daud_packet(AVFormatContext *s, AVPacket *pkt) { 42 AVIOContext *pb = s->pb; 43 int ret, size; 44 if (url_feof(pb)) 45 return AVERROR(EIO); 46 size = avio_rb16(pb); 47 avio_rb16(pb); // unknown 48 ret = av_get_packet(pb, pkt, size); 49 pkt->stream_index = 0; 50 return ret; 51} 52 53AVInputFormat ff_daud_demuxer = { 54 .name = "daud", 55 .long_name = NULL_IF_CONFIG_SMALL("D-Cinema audio"), 56 .read_header = daud_header, 57 .read_packet = daud_packet, 58 .extensions = "302,daud", 59}; 60