diff --git a/README.md b/README.md index 64a452ffa20fb769616980800429c5aaa67626a1..6929c0d2cdc7db4492f4b5ec507edd643d006447 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,17 @@ +KinskiGL_ALSA +============= +This project is a fork of KinskiGL for use alsa for audio outpout on raspbery +Is more a hack of a final code +he use m_omx_render_hdmi object a best wave are creat à new object for alsa + +for change output use +echo "pcm hw:0,0" | nc 127.0.0.1 33333 +hw:0,0=jack3.5mm raspbery +hw:0,1=hdmi +hw:1,0=usb sound card + +For this time we don't can change output during playback (shutdown the audio and fast read the end of the video) + KinskiGL ======== diff --git a/modules/media/rpi/MediaController.cpp b/modules/media/rpi/MediaController.cpp index adf83cab429060e4af33c42398933de9910eaad5..f3057b1a8242419d477c9b435928506bb36c9921 100644 --- a/modules/media/rpi/MediaController.cpp +++ b/modules/media/rpi/MediaController.cpp @@ -24,6 +24,8 @@ extern "C" namespace kinski{ namespace media { std::shared_ptr<COMXCore> m_OMX; + std::string alsa_pcm; + struct MediaControllerImpl { @@ -421,7 +423,7 @@ namespace kinski{ namespace media m_impl->m_render_target = the_render_target; m_impl->m_audio_target = the_audio_target; - m_impl->m_player_audio.reset(new OMXPlayerAudio()); + m_impl->m_player_audio.reset(new OMXPlayerAudio()); m_impl->m_player_video.reset(new OMXPlayerVideo()); if(!m_impl->m_omx_reader.Open(m_impl->m_src_path.c_str(), true/*m_dump_format*/, @@ -496,6 +498,12 @@ namespace kinski{ namespace media LOG_WARNING << "could not open audio player"; return; } + + if(m_impl->m_has_audio) + { + m_impl->m_player_audio->SetAlsaPcm(alsa_pcm);//ici + } + if(m_impl->m_has_audio) { m_impl->m_player_audio->SetVolume(m_impl->m_volume); @@ -529,6 +537,7 @@ namespace kinski{ namespace media m_impl->m_playing = true; m_impl->m_pause = false; set_rate(m_impl->m_rate); + printf("\n\nplay-------------------------------------------\n\n"); // start thread m_impl->m_thread = std::thread(std::bind(&MediaControllerImpl::thread_func, m_impl.get())); @@ -577,8 +586,9 @@ namespace kinski{ namespace media return m_impl ? m_impl->m_volume : 0.f; } - void MediaController::set_alsa_pcm(std::string alsa_pcm) + void MediaController::set_alsa_pcm(std::string l_alsa_pcm) { + alsa_pcm=l_alsa_pcm; if(m_impl) m_impl->m_player_audio->SetAlsaPcm(alsa_pcm);//ici } diff --git a/modules/media/rpi/OMXAudio.cpp b/modules/media/rpi/OMXAudio.cpp index a63be18dc75375f488f5ae8f6999e6f2fe13582a..f6b298f993b6b5e825bdc3d7e38507ac87352d03 100644 --- a/modules/media/rpi/OMXAudio.cpp +++ b/modules/media/rpi/OMXAudio.cpp @@ -36,6 +36,7 @@ using namespace std; // the size of the audio_render output port buffers #define AUDIO_DECODE_OUTPUT_BUFFER (32*1024) static const char rounded_up_channels_shift[] = {0,0,1,2,2,3,3,3,3}; +std::string pcm; ////////////////////////////////////////////////////////////////////// // Construction/Destruction @@ -112,6 +113,7 @@ bool COMXAudio::PortSettingsChanged() printf("\n\n\nFAIL_ALSA\n\n\n"); return false; } + SetAlsaPcm(pcm); UpdateAttenuation(); @@ -758,8 +760,9 @@ void COMXAudio::SetMute(bool bMute) } //*********************************************************************************************** -void COMXAudio::SetAlsaPcm(std::string pcm) +void COMXAudio::SetAlsaPcm(std::string l_pcm) { + pcm=l_pcm; char* spcm; spcm=new char[pcm.size()]; strcpy(spcm,pcm.c_str()); diff --git a/modules/media/rpi/omx_alsasink_component.cpp b/modules/media/rpi/omx_alsasink_component.cpp index a9a13f84a209eb409270744b99e36e1c8e8869d3..4e540688b2564cf3d5355b61f77c15eb76174be9 100644 --- a/modules/media/rpi/omx_alsasink_component.cpp +++ b/modules/media/rpi/omx_alsasink_component.cpp @@ -144,6 +144,7 @@ OMX_ERRORTYPE omx_alsasink_component_Constructor(OMX_COMPONENTTYPE *openmaxStand /* Allocate the playback handle and the hardware parameter structure */ char* name = alsa_pcm.c_str(); + printf("\n\nOpen audio %s ------------------------------\n\n",name); if ((err = snd_pcm_open (&omx_alsasink_component_Private->playback_handle, name, SND_PCM_STREAM_PLAYBACK, 0)) < 0) { DEBUG(DEB_LEV_ERR, "cannot open audio device %s (%s)\n", name, snd_strerror (err)); return OMX_ErrorHardware; diff --git a/src/projects/media_player/MediaPlayer.cpp b/src/projects/media_player/MediaPlayer.cpp index a659832e795164c5f6c74cd5d62f219e1bff51a7..1992fb0000ada5e8a896e14777538e90e3f4f8cb 100644 --- a/src/projects/media_player/MediaPlayer.cpp +++ b/src/projects/media_player/MediaPlayer.cpp @@ -245,7 +245,7 @@ void MediaPlayer::update_property(const Property::ConstPtr &theProperty) }else{ m_broadcast_timer.cancel(); } }else if(theProperty == m_alsa_pcm) { - //m_movie->set_alsa_pcm(*m_alsa_pcm); + m_movie->set_alsa_pcm(*m_alsa_pcm); } } @@ -379,7 +379,7 @@ void MediaPlayer::setup_rpc_interface() if(!rpc_args.empty()){ *m_brightness = kinski::string_to<float>(rpc_args.front()); } }); - /*remote_control().add_command("pcm", [this](net::tcp_connection_ptr con, + remote_control().add_command("pcm", [this](net::tcp_connection_ptr con, const std::vector<std::string> &rpc_args) { con->send("set_pcm ");//ici @@ -392,7 +392,7 @@ void MediaPlayer::setup_rpc_interface() { con->send(to_string(m_alsa_pcm)); } - });*/ + }); remote_control().add_command("set_rate"); register_function("set_rate", [this](const std::vector<std::string> &rpc_args)