Audaspace  1.3.0
A high level audio library.
FFMPEGReader.h
Go to the documentation of this file.
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 #ifdef FFMPEG_PLUGIN
20 #define AUD_BUILD_PLUGIN
21 #endif
22 
30 #include "IReader.h"
31 #include "util/Buffer.h"
32 
33 #include <string>
34 #include <memory>
35 
36 struct AVCodecContext;
37 extern "C" {
38 #include <libavformat/avformat.h>
39 }
40 
42 
50 {
51 private:
55  int m_position;
56 
60  DeviceSpecs m_specs;
61 
65  Buffer m_pkgbuf;
66 
70  int m_pkgbuf_left;
71 
75  AVFormatContext* m_formatCtx;
76 
80  AVCodecContext* m_codecCtx;
81 
85  AVFrame* m_frame;
86 
90  AVIOContext* m_aviocontext;
91 
95  int m_stream;
96 
100  convert_f m_convert;
101 
105  std::shared_ptr<Buffer> m_membuffer;
106 
110  data_t* m_membuf;
111 
115  int64_t m_membufferpos;
116 
120  bool m_tointerleave;
121 
128  AUD_LOCAL int decode(AVPacket& packet, Buffer& buffer);
129 
133  AUD_LOCAL void init();
134 
135  // delete copy constructor and operator=
136  FFMPEGReader(const FFMPEGReader&) = delete;
137  FFMPEGReader& operator=(const FFMPEGReader&) = delete;
138 
139 public:
146  FFMPEGReader(std::string filename);
147 
154  FFMPEGReader(std::shared_ptr<Buffer> buffer);
155 
159  virtual ~FFMPEGReader();
160 
169  static int read_packet(void* opaque, uint8_t* buf, int buf_size);
170 
179  static int64_t seek_packet(void* opaque, int64_t offset, int whence);
180 
181  virtual bool isSeekable() const;
182  virtual void seek(int position);
183  virtual int getLength() const;
184  virtual int getPosition() const;
185  virtual Specs getSpecs() const;
186  virtual void read(int& length, bool& eos, sample_t* buffer);
187 };
188 
#define AUD_NAMESPACE_END
Closes the audaspace namespace aud.
Definition: Audaspace.h:119
float sample_t
Sample type.(float samples)
Definition: Audaspace.h:126
#define AUD_LOCAL
Used for hiding symbols from export in the shared library.
Definition: Audaspace.h:80
#define AUD_NAMESPACE_BEGIN
Opens the audaspace namespace aud.
Definition: Audaspace.h:116
#define AUD_PLUGIN_API
Used for exporting symbols in the shared library.
Definition: Audaspace.h:94
unsigned char data_t
Sample data type (format samples)
Definition: Audaspace.h:129
The Buffer class.
Defines several conversion functions between different sample formats.
void(* convert_f)(data_t *target, data_t *source, int length)
The function template for functions converting from one sample format to another, having the same par...
Definition: ConverterFunctions.h:35
The IReader interface.
This class is a simple buffer in RAM which is 32 Byte aligned and provides resize functionality.
Definition: Buffer.h:34
This class reads a sound file via ffmpeg.
Definition: FFMPEGReader.h:50
FFMPEGReader(std::shared_ptr< Buffer > buffer)
Creates a new reader.
static int64_t seek_packet(void *opaque, int64_t offset, int whence)
Seeks within data.
virtual void read(int &length, bool &eos, sample_t *buffer)
Request to read the next length samples out of the source.
FFMPEGReader(std::string filename)
Creates a new reader.
virtual ~FFMPEGReader()
Destroys the reader and closes the file.
virtual Specs getSpecs() const
Returns the specification of the reader.
virtual bool isSeekable() const
Tells whether the source provides seeking functionality or not.
virtual int getLength() const
Returns an approximated length of the source in samples.
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
Reads data to a memory buffer.
virtual void seek(int position)
Seeks to a specific position in the source.
virtual int getPosition() const
Returns the position of the source as a sample count value.
This class represents a sound source as stream or as buffer which can be read for example by another ...
Definition: IReader.h:35
Specification of a sound device.
Definition: Specification.h:120
Specification of a sound source.
Definition: Specification.h:110