start_play_thread.cpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // ***********************************************************/
  2. // start_play_thread.cpp
  3. //
  4. // Copy Right @ Steven Huang. All rights reserved.
  5. //
  6. // start play thread. Do the audio device initialization work
  7. // which is time-consuming to avoid GUI freezing.
  8. // ***********************************************************/
  9. #include "start_play_thread.h"
  10. #include "AVPlayer2/video_state.h"
  11. #include "playercontroller.h"
  12. StartPlayThread::StartPlayThread(PlayerController* playerController)
  13. : m_playerController(playerController)
  14. {}
  15. StartPlayThread::~StartPlayThread() {}
  16. void StartPlayThread::stop()
  17. {
  18. m_exit = true;
  19. m_cv.notify_all();
  20. }
  21. void StartPlayThread::run()
  22. {
  23. assert(m_playerController);
  24. if (m_exit) return;
  25. bool ret = false;
  26. float vol = 1.0;
  27. AVSampleFormat sample_fmt = AV_SAMPLE_FMT_S16; // play out format
  28. VideoStateData* pVideoStateData = m_playerController->videoStateData();
  29. if (pVideoStateData) {
  30. AVCodecContext* pAudio = pVideoStateData->get_contex(AVMEDIA_TYPE_AUDIO);
  31. VideoState* pState = pVideoStateData->get_state();
  32. if (pAudio) {
  33. auto* pThread = m_playerController->audioPlayThread();
  34. if (pThread) {
  35. ret = pThread->init_device(pAudio->sample_rate,
  36. pAudio->ch_layout.nb_channels,
  37. sample_fmt,
  38. vol); // pAudio->sample_fmt
  39. if (ret) {
  40. ret = pThread->init_resample_param(pAudio, sample_fmt, pState);
  41. }
  42. }
  43. }
  44. }
  45. // 可加回调或日志
  46. }