Statistics
| Branch: | Revision:

ffmpeg / libavformat / daud.c @ 2912e87a

History | View | Annotate | Download (2.54 KB)

1 b93f738f Reimar Döffinger
/*
2 7fbde343 Aurelien Jacobs
 * D-Cinema audio demuxer
3 941125ef Diego Biurrun
 * Copyright (c) 2005 Reimar Döffinger
4 b93f738f Reimar Döffinger
 *
5 2912e87a Mans Rullgard
 * This file is part of Libav.
6 b78e7197 Diego Biurrun
 *
7 2912e87a Mans Rullgard
 * Libav is free software; you can redistribute it and/or
8 b93f738f Reimar Döffinger
 * modify it under the terms of the GNU Lesser General Public
9
 * License as published by the Free Software Foundation; either
10 b78e7197 Diego Biurrun
 * version 2.1 of the License, or (at your option) any later version.
11 b93f738f Reimar Döffinger
 *
12 2912e87a Mans Rullgard
 * Libav is distributed in the hope that it will be useful,
13 b93f738f Reimar Döffinger
 * 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 2912e87a Mans Rullgard
 * License along with Libav; if not, write to the Free Software
19 5509bffa Diego Biurrun
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 b93f738f Reimar Döffinger
 */
21
#include "avformat.h"
22
23
static int daud_header(AVFormatContext *s, AVFormatParameters *ap) {
24
    AVStream *st = av_new_stream(s, 0);
25 e8bd16a5 Reimar Döffinger
    if (!st)
26
        return AVERROR(ENOMEM);
27 72415b2a Stefano Sabatini
    st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
28 b93f738f Reimar Döffinger
    st->codec->codec_id = CODEC_ID_PCM_S24DAUD;
29
    st->codec->codec_tag = MKTAG('d', 'a', 'u', 'd');
30
    st->codec->channels = 6;
31
    st->codec->sample_rate = 96000;
32
    st->codec->bit_rate = 3 * 6 * 96000 * 8;
33
    st->codec->block_align = 3 * 6;
34 dd1c8f3e Luca Abeni
    st->codec->bits_per_coded_sample = 24;
35 b93f738f Reimar Döffinger
    return 0;
36
}
37
38
static int daud_packet(AVFormatContext *s, AVPacket *pkt) {
39 ae628ec1 Anton Khirnov
    AVIOContext *pb = s->pb;
40 b93f738f Reimar Döffinger
    int ret, size;
41 66e5b1df Anton Khirnov
    if (pb->eof_reached)
42 6f3e0b21 Panagiotis Issaris
        return AVERROR(EIO);
43 b7effd4e Anton Khirnov
    size = avio_rb16(pb);
44
    avio_rb16(pb); // unknown
45 b93f738f Reimar Döffinger
    ret = av_get_packet(pb, pkt, size);
46
    pkt->stream_index = 0;
47
    return ret;
48
}
49
50 51c3861e Peter Ross
static int daud_write_header(struct AVFormatContext *s)
51
{
52
    AVCodecContext *codec = s->streams[0]->codec;
53
    if (codec->channels!=6 || codec->sample_rate!=96000)
54
        return -1;
55
    return 0;
56
}
57
58
static int daud_write_packet(struct AVFormatContext *s, AVPacket *pkt)
59
{
60 77eb5504 Anton Khirnov
    avio_wb16(s->pb, pkt->size);
61
    avio_wb16(s->pb, 0x8010); // unknown
62
    avio_write(s->pb, pkt->data, pkt->size);
63 b7f2fdde Anton Khirnov
    avio_flush(s->pb);
64 51c3861e Peter Ross
    return 0;
65
}
66
67
#if CONFIG_DAUD_DEMUXER
68 c6610a21 Diego Elio Pettenò
AVInputFormat ff_daud_demuxer = {
69 b93f738f Reimar Döffinger
    "daud",
70 bde15e74 Stefano Sabatini
    NULL_IF_CONFIG_SMALL("D-Cinema audio format"),
71 b93f738f Reimar Döffinger
    0,
72
    NULL,
73
    daud_header,
74
    daud_packet,
75
    NULL,
76
    NULL,
77
    .extensions = "302",
78
};
79 51c3861e Peter Ross
#endif
80
81 b250f9c6 Aurelien Jacobs
#if CONFIG_DAUD_MUXER
82 c6610a21 Diego Elio Pettenò
AVOutputFormat ff_daud_muxer =
83 51c3861e Peter Ross
{
84
    "daud",
85
    NULL_IF_CONFIG_SMALL("D-Cinema audio format"),
86
    NULL,
87
    "302",
88
    0,
89
    CODEC_ID_PCM_S24DAUD,
90
    CODEC_ID_NONE,
91
    daud_write_header,
92
    daud_write_packet,
93
    .flags= AVFMT_NOTIMESTAMPS,
94
};
95
#endif