annotate aea.c @ 5482:68c900a2d203 libavformat

Deprecate and mark for deletion the function guess_stream_format(), and clone its code to ffserver_guess_format() in ffserver.c. guess_stream_format() is hackish since it relies on some undocumented properties of the name of the muxers (wich is currently only relevant for the ASF muxer), and has no use outside ffserver.c.
author stefano
date Thu, 31 Dec 2009 14:12:58 +0000
parents 948db02fab55
children 536e5527c1e0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5169
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
1 /*
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
2 * MD STUDIO audio demuxer
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
3 *
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
4 * Copyright (c) 2009 Benjamin Larsson
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
5 *
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
6 * This file is part of FFmpeg.
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
7 *
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
8 * FFmpeg is free software; you can redistribute it and/or
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
9 * modify it under the terms of the GNU Lesser General Public
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
10 * License as published by the Free Software Foundation; either
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
11 * version 2.1 of the License, or (at your option) any later version.
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
12 *
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
13 * FFmpeg is distributed in the hope that it will be useful,
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
16 * Lesser General Public License for more details.
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
17 *
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
18 * You should have received a copy of the GNU Lesser General Public
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
19 * License along with FFmpeg; if not, write to the Free Software
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
21 */
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
22
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
23 /**
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
24 * @file libavformat/aea.c
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
25 */
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
26
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
27 #include "avformat.h"
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
28 #include "raw.h"
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
29 #include "libavutil/intreadwrite.h"
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
30
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
31 #define AT1_SU_SIZE 212
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
32
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
33 static int aea_read_probe(AVProbeData *p)
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
34 {
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
35 if (p->buf_size <= 2048+212)
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
36 return 0;
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
37
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
38 /* Magic is '00 08 00 00' in Little Endian*/
5170
80a367a3742c Cosmetics, add spaces
banan
parents: 5169
diff changeset
39 if (AV_RL32(p->buf)==0x800) {
5173
948db02fab55 Add condition to aea demuxer probe.
banan
parents: 5170
diff changeset
40 int bsm_s, bsm_e, inb_s, inb_e, ch;
948db02fab55 Add condition to aea demuxer probe.
banan
parents: 5170
diff changeset
41 ch = p->buf[264];
5169
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
42 bsm_s = p->buf[2048];
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
43 inb_s = p->buf[2048+1];
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
44 inb_e = p->buf[2048+210];
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
45 bsm_e = p->buf[2048+211];
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
46
5173
948db02fab55 Add condition to aea demuxer probe.
banan
parents: 5170
diff changeset
47 if (ch != 1 && ch != 2)
948db02fab55 Add condition to aea demuxer probe.
banan
parents: 5170
diff changeset
48 return 0;
5169
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
49
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
50 /* Check so that the redundant bsm bytes and info bytes are valid
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
51 * the block size mode bytes have to be the same
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
52 * the info bytes have to be the same
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
53 * the block size mode and info byte can't be the same
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
54 */
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
55 if (bsm_s == bsm_e && inb_s == inb_e && bsm_s != inb_s)
5170
80a367a3742c Cosmetics, add spaces
banan
parents: 5169
diff changeset
56 return AVPROBE_SCORE_MAX / 2;
5169
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
57 }
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
58 return 0;
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
59 }
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
60
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
61 static int aea_read_header(AVFormatContext *s,
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
62 AVFormatParameters *ap)
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
63 {
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
64 AVStream *st = av_new_stream(s, 0);
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
65 if (!st)
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
66 return AVERROR(ENOMEM);
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
67
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
68 /* Parse the amount of channels and skip to pos 2048(0x800) */
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
69 url_fskip(s->pb, 264);
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
70 st->codec->channels = get_byte(s->pb);
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
71 url_fskip(s->pb, 1783);
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
72
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
73
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
74 st->codec->codec_type = CODEC_TYPE_AUDIO;
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
75 st->codec->codec_id = CODEC_ID_ATRAC1;
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
76 st->codec->sample_rate = 44100;
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
77 st->codec->bit_rate = 292000;
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
78
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
79 if (st->codec->channels != 1 && st->codec->channels != 2) {
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
80 av_log(s,AV_LOG_ERROR,"Channels %d not supported!\n",st->codec->channels);
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
81 return -1;
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
82 }
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
83
5170
80a367a3742c Cosmetics, add spaces
banan
parents: 5169
diff changeset
84 st->codec->channel_layout = (st->codec->channels == 1) ? CH_LAYOUT_MONO : CH_LAYOUT_STEREO;
5169
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
85
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
86 st->codec->block_align = AT1_SU_SIZE * st->codec->channels;
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
87 return 0;
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
88 }
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
89
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
90 static int aea_read_packet(AVFormatContext *s, AVPacket *pkt)
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
91 {
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
92 int ret = av_get_packet(s->pb, pkt, s->streams[0]->codec->block_align);
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
93
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
94 pkt->stream_index = 0;
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
95 if (ret <= 0)
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
96 return AVERROR(EIO);
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
97
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
98 return ret;
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
99 }
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
100
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
101 AVInputFormat aea_demuxer = {
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
102 "aea",
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
103 NULL_IF_CONFIG_SMALL("MD STUDIO audio"),
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
104 0,
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
105 aea_read_probe,
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
106 aea_read_header,
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
107 aea_read_packet,
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
108 0,
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
109 pcm_read_seek,
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
110 .flags= AVFMT_GENERIC_INDEX,
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
111 .extensions = "aea",
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
112 };
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
113