| 441 | } |
| 442 | |
| 443 | void AVPlayer::AVAudioThread::EntryFunction() |
| 444 | { |
| 445 | int32_t ret = false; |
| 446 | SceAvPlayerFrameInfo data; |
| 447 | int32_t outPortId = -1; |
| 448 | bool usingFallback = false; |
| 449 | |
| 450 | SCE_DBG_LOG_INFO("[AVAudioThread] AVAudioThread start"); |
| 451 | |
| 452 | uint8_t *silence = (uint8_t *)sce_paf_memalign(0x20, SCE_AV_PLAYER_PCM_BUFFER_SIZE * 2 * 4); |
| 453 | sce_paf_memset(silence, 0, SCE_AV_PLAYER_PCM_BUFFER_SIZE * 2 * 4); |
| 454 | |
| 455 | outPortId = sceAudioOutOpenPort( |
| 456 | SCE_AUDIO_OUT_PORT_TYPE_VOICE, |
| 457 | (SCE_AV_PLAYER_PCM_BUFFER_SIZE / sizeof(int16_t)), |
| 458 | 44100, |
| 459 | 1); |
| 460 | if (outPortId < 0) |
| 461 | { |
| 462 | SCE_DBG_LOG_ERROR("[AVAudioThread] Failed to open VOICE audio port"); |
| 463 | } |
| 464 | |
| 465 | while (!IsCanceled()) |
| 466 | { |
| 467 | if (sceAvPlayerIsActive(m_playerCore)) |
| 468 | { |
| 469 | ret = sceAvPlayerGetAudioData(m_playerCore, &data); |
| 470 | if (ret) |
| 471 | { |
| 472 | if (m_parent->m_lastAudioDetails.channelCount != data.details.audio.channelCount || |
| 473 | m_parent->m_lastAudioDetails.sampleRate != data.details.audio.sampleRate) |
| 474 | { |
| 475 | SCE_DBG_LOG_INFO("[AVAudioThread] Audio params changed, reconfiguring port"); |
| 476 | SCE_DBG_LOG_INFO("[AVAudioThread] New params: %u %u", data.details.audio.channelCount, data.details.audio.sampleRate); |
| 477 | |
| 478 | usingFallback = false; |
| 479 | |
| 480 | ret = sceAudioOutSetConfig( |
| 481 | outPortId, |
| 482 | (SCE_AV_PLAYER_PCM_BUFFER_SIZE / sizeof(int16_t)), |
| 483 | data.details.audio.sampleRate, |
| 484 | data.details.audio.channelCount - 1); |
| 485 | |
| 486 | if (ret != SCE_OK) |
| 487 | { |
| 488 | SCE_DBG_LOG_ERROR("[AVAudioThread] Could not reconfigure audio port, using failsafe to keep timing"); |
| 489 | usingFallback = true; |
| 490 | } |
| 491 | |
| 492 | int32_t maxVolumeArray[2] = { SCE_AUDIO_VOLUME_0DB, SCE_AUDIO_VOLUME_0DB }; |
| 493 | sceAudioOutSetVolume(outPortId, SCE_AUDIO_VOLUME_FLAG_L_CH | SCE_AUDIO_VOLUME_FLAG_R_CH, maxVolumeArray); |
| 494 | |
| 495 | m_parent->m_lastAudioDetails.channelCount = data.details.audio.channelCount; |
| 496 | m_parent->m_lastAudioDetails.sampleRate = data.details.audio.sampleRate; |
| 497 | } |
| 498 | |
| 499 | const void *outData = data.pData; |
| 500 | if (usingFallback) |
nothing calls this directly
no outgoing calls
no test coverage detected