pianod2
multisource multiuser scriptable networked music player
avdeviceoutput.h
Go to the documentation of this file.
1 
9 #pragma once
10 
11 #include <config.h>
12 
13 #include <memory>
14 
15 #pragma GCC diagnostic push
16 #pragma GCC diagnostic ignored "-Wdocumentation"
17 extern "C" {
18 #include <libavformat/avformat.h>
19 #include <libavcodec/avcodec.h>
20 }
21 #pragma GCC diagnostic pop
22 
23 #include "audio/audiooutput.h"
24 
25 namespace Audio {
27  class AvDeviceOutput : public Output {
28  struct CodecDeleter {
29  void operator() (AVCodecContext *coder) {
30  avcodec_free_context (&coder);
31  }
32  };
33 
34  struct PacketDeleter {
35  void operator()(AVPacket *frame) {
36  av_packet_free (&frame);
37  }
38  };
39 
40  AVCodec *codec = nullptr;
41  AVFormatContext *context = nullptr;
42  AVStream *stream = nullptr;
43  std::unique_ptr <AVCodecContext, CodecDeleter> codec_context;
44  std::unique_ptr <AVPacket, PacketDeleter> packet;
45  int min_flush_time = 0;
46  int max_flush_time = 2000;
47  const int flush_time_quanta = 100;
48  public:
49  AvDeviceOutput (const AudioSettings &settings,
50  const AudioFormat &format);
51  virtual ~AvDeviceOutput ();
52  virtual bool play (void *buffer, unsigned numberOfBytes) override;
53  };
54 
55 }
56 
Class to abstract away details of audio output system is in use.
Output class for libavdevice.
Definition: avdeviceoutput.h:27
const int flush_time_quanta
milliseconds
Definition: avdeviceoutput.h:47
int min_flush_time
milliseconds
Definition: avdeviceoutput.h:45
int max_flush_time
milliseconds
Definition: avdeviceoutput.h:46
virtual ~AvDeviceOutput()
Definition: avdeviceoutput.cpp:186
std::unique_ptr< AVPacket, PacketDeleter > packet
Definition: avdeviceoutput.h:44
AVCodec * codec
Definition: avdeviceoutput.h:40
AVFormatContext * context
Definition: avdeviceoutput.h:41
AVStream * stream
Definition: avdeviceoutput.h:42
std::unique_ptr< AVCodecContext, CodecDeleter > codec_context
Definition: avdeviceoutput.h:43
virtual bool play(void *buffer, unsigned numberOfBytes) override
Play output.
Definition: avdeviceoutput.cpp:211
AvDeviceOutput(const AudioSettings &settings, const AudioFormat &format)
Create an audio outputter for ffmpeg's libavdevice.
Definition: avdeviceoutput.cpp:64
Base audio output class (abstract).
Definition: audiooutput.h:65
Classes dealing with audio output drivers and decoding/playing audio files.
Definition: audiooutput.cpp:48
Audio format, somewhat ripped off from libao.
Definition: audiooutput.h:29
Definition: avdeviceoutput.h:28
void operator()(AVCodecContext *coder)
Definition: avdeviceoutput.h:29
Definition: avdeviceoutput.h:34
void operator()(AVPacket *frame)
Definition: avdeviceoutput.h:35
Audio output device & driver parameters.
Definition: fundamentals.h:52