some code for audio support

This commit is contained in:
selim mustafaev 2017-03-30 23:16:44 +03:00
parent 36d3ab2a6e
commit 223b5fab18
2 changed files with 25 additions and 0 deletions

View File

@ -22,6 +22,9 @@ private:
SDLWindowPtr _wnd;
SDLRendererPtr _renderer;
SDLTexturePtr _texture;
SDL_AudioSpec _audioSpec;
SDL_AudioDeviceID _aDevId;
std::packaged_task<void()> _renderTask;
public:
@ -37,6 +40,17 @@ public:
_texture.reset(SDL_CreateTexture(_renderer.get(), SDL_PIXELFORMAT_IYUV, SDL_TEXTUREACCESS_STREAMING, WINDOW_WIDTH, WINDOW_HEIGHT));
if(!_texture) throw std::runtime_error("Error creating SDL texture");
SDL_AudioSpec want;
SDL_zero(want);
want.freq = 44100;
want.format = AUDIO_S16;
want.channels = 2;
want.samples = 4096;
want.callback = SDLWindow::audioCallback;
_aDevId = SDL_OpenAudioDevice(nullptr, 0, &want, &_audioSpec, SDL_AUDIO_ALLOW_ANY_CHANGE);
if(_aDevId == 0) throw std::runtime_error("Error opening audio device");
}
void handleEvents() {
@ -55,6 +69,11 @@ public:
}
}
private:
static void audioCallback(void* userdata, Uint8* stream, int len) {
}
public:
virtual AVPixelFormat getPixelFormat() const noexcept override {
return AV_PIX_FMT_YUV420P;

View File

@ -8,6 +8,7 @@
#include <thread>
#include <condition_variable>
#include <mutex>
#include <cstdint>
namespace ffcpp {
@ -18,6 +19,11 @@ namespace ffcpp {
int uPitch, int vPitch) = 0;
};
struct IAudioSink {
virtual void setPauseCallback(std::function<void(bool)> callback) = 0;
virtual void setAudioDataCallback(std::function<void(uint8_t*,size_t)> callback) = 0;
};
enum class PlayerState {
Shutdown,
Stopped,