00001 #ifndef AUDIOOUTPUT
00002 #define AUDIOOUTPUT
00003
00004 #include <iostream>
00005 using namespace std;
00006
00007 #include "mythcontext.h"
00008 #include "volumebase.h"
00009 #include "output.h"
00010
00011 typedef enum {
00012 AUDIOOUTPUT_VIDEO,
00013 AUDIOOUTPUT_MUSIC,
00014 AUDIOOUTPUT_TELEPHONY
00015 } AudioOutputSource;
00016
00017 class MPUBLIC AudioOutput : public VolumeBase, public OutputListeners
00018 {
00019 public:
00020
00021 static AudioOutput *OpenAudio(QString audiodevice, QString passthrudevice,
00022 int audio_bits,
00023 int audio_channels, int audio_samplerate,
00024 AudioOutputSource source,
00025 bool set_initial_vol, bool audio_passthru);
00026
00027 AudioOutput() :
00028 VolumeBase(), OutputListeners(),
00029 lastError(QString::null), lastWarn(QString::null) {}
00030
00031 virtual ~AudioOutput() { };
00032
00033
00034 virtual void Reconfigure(int audio_bits,
00035 int audio_channels,
00036 int audio_samplerate,
00037 bool audio_passthru,
00038 void* audio_codec = NULL) = 0;
00039
00040 virtual void SetStretchFactor(float factor);
00041 virtual float GetStretchFactor(void) { return 1.0f; }
00042
00043
00044 virtual void SetBlocking(bool blocking) = 0;
00045
00046
00047 virtual void SetEffDsp(int dsprate) = 0;
00048
00049 virtual void Reset(void) = 0;
00050
00051
00052
00053 virtual bool AddSamples(char *buffer, int samples, long long timecode) = 0;
00054 virtual bool AddSamples(char *buffers[], int samples, long long timecode) = 0;
00055
00056 virtual void SetTimecode(long long timecode) = 0;
00057 virtual bool GetPause(void) = 0;
00058 virtual void Pause(bool paused) = 0;
00059
00060
00061 virtual void Drain(void) = 0;
00062
00063 virtual int GetAudiotime(void) = 0;
00064
00065 virtual void SetSourceBitrate(int ) { }
00066
00067 QString GetError(void) const { return lastError; }
00068 QString GetWarning(void) const { return lastWarn; }
00069
00070 virtual void GetBufferStatus(uint &fill, uint &total) { fill = total = 0; }
00071
00072
00073
00074 virtual void bufferOutputData(bool y) = 0;
00075 virtual int readOutputData(unsigned char *read_buffer, int max_length) = 0;
00076
00077 protected:
00078 void Error(QString msg)
00079 {
00080 lastError = msg;
00081 VERBOSE(VB_IMPORTANT, "AudioOutput Error: " + lastError);
00082 }
00083 void ClearError(void) { lastError = QString::null; }
00084
00085 void Warn(QString msg)
00086 {
00087 lastWarn = msg;
00088 VERBOSE(VB_IMPORTANT, "AudioOutput Warning: " + lastWarn);
00089 }
00090
00091 protected:
00092 QString lastError;
00093 QString lastWarn;
00094 };
00095
00096 #endif
00097