音频结构调整

This commit is contained in:
2024-02-26 17:42:56 +08:00
parent 34d74c5c2d
commit 800364ea78
3 changed files with 17 additions and 24 deletions

13
main.cc
View File

@@ -24,9 +24,12 @@ struct OpenglVideoParam
int InitAudio(SDL_Window* window, SDL_Renderer* renderer, const char* targetFilePath, MediaParam& param)
{
InitDecoder(targetFilePath, param);
window = SDL_CreateWindow("mp", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
renderer= SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
if (!param.audioParam.isVideo)
{
InitDecoder(targetFilePath, param);
window = SDL_CreateWindow("mp", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
}
std::jthread(RequestAudioPacket, std::ref(param)).detach();
SDL_AudioSpec des;
des.freq = param.audioParam.codecCtx->sample_rate;
@@ -34,7 +37,7 @@ int InitAudio(SDL_Window* window, SDL_Renderer* renderer, const char* targetFile
des.format = AUDIO_S16SYS;
des.samples = 1024;
des.silence = 0;
std::tuple<SDL_Window*, SDL_Renderer*, AudioParam*>* callbackParam = new std::tuple{window, renderer, &(param.audioParam)};
std::tuple<SDL_Window*, SDL_Renderer*, AudioParam*>* callbackParam = new std::tuple{ window, renderer, &(param.audioParam) };
des.userdata = callbackParam;
des.callback = audioCallback;
if (SDL_OpenAudio(&des, nullptr) < 0)
@@ -49,6 +52,8 @@ int InitAudio(SDL_Window* window, SDL_Renderer* renderer, const char* targetFile
int InitVideo(SDL_Window*& window, const char* targetFilepath, MediaParam& param, OpenglVideoParam& openglVideoParam, ShaderService*& shaderService)
{
InitDecoder(targetFilepath, param);
param.audioParam.isVideo = true;
InitAudio(nullptr, nullptr, nullptr, param);
//FIX: when app exited, the fmtCtx was freed, so need notify decode thread to stop decode and exit.
std::jthread(RequestVideoPacket, std::ref(param)).detach();
std::jthread(RequestVideoFrame, std::ref(param)).detach();