// ***********************************************************/ // start_play_thread.cpp // // Copy Right @ Steven Huang. All rights reserved. // // start play thread. Do the audio device initialization work // which is time-consuming to avoid GUI freezing. // ***********************************************************/ #include "start_play_thread.h" #include "AVPlayer2/video_state.h" #include "playercontroller.h" StartPlayThread::StartPlayThread(PlayerController* playerController) : m_playerController(playerController) {} StartPlayThread::~StartPlayThread() {} void StartPlayThread::stop() { m_exit = true; m_cv.notify_all(); } void StartPlayThread::run() { assert(m_playerController); if (m_exit) return; bool ret = false; float vol = 1.0; AVSampleFormat sample_fmt = AV_SAMPLE_FMT_S16; // play out format VideoStateData* pVideoStateData = m_playerController->videoStateData(); if (pVideoStateData) { AVCodecContext* pAudio = pVideoStateData->get_contex(AVMEDIA_TYPE_AUDIO); VideoState* pState = pVideoStateData->get_state(); if (pAudio) { auto* pThread = m_playerController->audioPlayThread(); if (pThread) { ret = pThread->init_device(pAudio->sample_rate, pAudio->ch_layout.nb_channels, sample_fmt, vol); // pAudio->sample_fmt if (ret) { ret = pThread->init_resample_param(pAudio, sample_fmt, pState); } } } } // 可加回调或日志 }