ffmpeg / libavformat / daud.c @ 6cc7f139
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 |