tmp
[blender.git] / extern / audaspace / include / file / IWriter.h
1 /*******************************************************************************
2  * Copyright 2009-2016 Jörg Müller
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  ******************************************************************************/
16
17 #pragma once
18
19 /**
20  * @file IWriter.h
21  * @ingroup file
22  * Defines the IWriter interface as well as Container and Codec types.
23  */
24
25 #include "respec/Specification.h"
26
27 AUD_NAMESPACE_BEGIN
28
29 /// Container formats for writers.
30 enum Container
31 {
32         CONTAINER_INVALID = 0,
33         CONTAINER_AC3,
34         CONTAINER_FLAC,
35         CONTAINER_MATROSKA,
36         CONTAINER_MP2,
37         CONTAINER_MP3,
38         CONTAINER_OGG,
39         CONTAINER_WAV
40 };
41
42 /// Audio codecs for writers.
43 enum Codec
44 {
45         CODEC_INVALID = 0,
46         CODEC_AAC,
47         CODEC_AC3,
48         CODEC_FLAC,
49         CODEC_MP2,
50         CODEC_MP3,
51         CODEC_PCM,
52         CODEC_VORBIS,
53         CODEC_OPUS
54 };
55
56 /**
57  * @interface IWriter
58  * This class represents a sound sink where audio data can be written to.
59  */
60 class AUD_API IWriter
61 {
62 public:
63         /**
64          * Destroys the writer.
65          */
66         virtual ~IWriter() {}
67
68         /**
69          * Returns how many samples have been written so far.
70          * \return The writing position as sample count. May be negative if unknown.
71          */
72         virtual int getPosition() const=0;
73
74         /**
75          * Returns the specification of the audio data being written into the sink.
76          * \return The DeviceSpecs structure.
77          * \note Regardless of the format the input still has to be float!
78          */
79         virtual DeviceSpecs getSpecs() const=0;
80
81         /**
82          * Request to write the next length samples out into the sink.
83          * \param length The count of samples to write.
84          * \param buffer The pointer to the buffer containing the data.
85          */
86         virtual void write(unsigned int length, sample_t* buffer)=0;
87 };
88
89 AUD_NAMESPACE_END