diff options
author | Jacob Keeler <jacob.keeler@livioradio.com> | 2018-03-07 10:05:23 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-07 10:05:23 -0500 |
commit | c8793c6520426155b3e20c2678ce66bf078f72ef (patch) | |
tree | 3951f52a1a4b39ef8572da8817fb199a8cf2d8d9 /src/components/media_manager/src | |
parent | 1f574a2061bf5b746c6bf3734c647a4a6ba3dfd1 (diff) | |
parent | 95aec12cbd07087af530413e574415056e45e067 (diff) | |
download | sdl_core-c8793c6520426155b3e20c2678ce66bf078f72ef.tar.gz |
Merge branch 'develop' into hotfix/add_FAQ_to_READMEhotfix/add_FAQ_to_README
Diffstat (limited to 'src/components/media_manager/src')
6 files changed, 60 insertions, 22 deletions
diff --git a/src/components/media_manager/src/audio/audio_stream_sender_thread.cc b/src/components/media_manager/src/audio/audio_stream_sender_thread.cc index 24b12cabad..9b0057dfe8 100644 --- a/src/components/media_manager/src/audio/audio_stream_sender_thread.cc +++ b/src/components/media_manager/src/audio/audio_stream_sender_thread.cc @@ -52,7 +52,11 @@ namespace media_manager { using sync_primitives::AutoLock; -const int32_t AudioStreamSenderThread::kAudioPassThruTimeout = 1; +#ifdef EXTENDED_MEDIA_MODE +const int32_t AudioStreamSenderThread::kAudioPassThruTimeout = 50; +#else +const int32_t AudioStreamSenderThread::kAudioPassThruTimeout = 1000; +#endif const uint32_t kMqueueMessageSize = 4095; CREATE_LOGGERPTR_GLOBAL(logger_, "MediaManager") @@ -63,6 +67,7 @@ AudioStreamSenderThread::AudioStreamSenderThread( application_manager::ApplicationManager& app_mngr) : session_key_(session_key) , fileName_(fileName) + , offset_(0) , shouldBeStoped_(false) , shouldBeStoped_lock_() , shouldBeStoped_cv_() @@ -79,7 +84,7 @@ void AudioStreamSenderThread::threadMain() { while (false == getShouldBeStopped()) { AutoLock auto_lock(shouldBeStoped_lock_); - shouldBeStoped_cv_.WaitFor(auto_lock, kAudioPassThruTimeout * 1000); + shouldBeStoped_cv_.WaitFor(auto_lock, kAudioPassThruTimeout); sendAudioChunkToMobile(); } } diff --git a/src/components/media_manager/src/audio/from_mic_recorder_listener.cc b/src/components/media_manager/src/audio/from_mic_recorder_listener.cc index a02ec17f90..647db1e1a3 100644 --- a/src/components/media_manager/src/audio/from_mic_recorder_listener.cc +++ b/src/components/media_manager/src/audio/from_mic_recorder_listener.cc @@ -42,7 +42,10 @@ CREATE_LOGGERPTR_GLOBAL(logger_, "MediaManager") FromMicRecorderListener::FromMicRecorderListener( const std::string& file_name, application_manager::ApplicationManager& app_mngr) - : reader_(NULL), file_name_(file_name), application_manager_(app_mngr) {} + : reader_(NULL) + , file_name_(file_name) + , current_application_(0) + , application_manager_(app_mngr) {} FromMicRecorderListener::~FromMicRecorderListener() { LOG4CXX_AUTO_TRACE(logger_); diff --git a/src/components/media_manager/src/audio/from_mic_to_file_recorder_thread.cc b/src/components/media_manager/src/audio/from_mic_to_file_recorder_thread.cc index 0239795d75..99548e71bd 100644 --- a/src/components/media_manager/src/audio/from_mic_to_file_recorder_thread.cc +++ b/src/components/media_manager/src/audio/from_mic_to_file_recorder_thread.cc @@ -32,6 +32,7 @@ #include "media_manager/audio/from_mic_to_file_recorder_thread.h" #include <unistd.h> +#include <cstring> #include <sstream> #include "utils/logger.h" @@ -88,11 +89,23 @@ void FromMicToFileRecorderThread::initArgs() { argv_[3] = new gchar[3]; argv_[4] = new gchar[durationString_.length() + 1]; - argv_[0] = const_cast<gchar*>(std::string("AudioManager").c_str()); - argv_[1] = const_cast<gchar*>(oKey_.c_str()); - argv_[2] = const_cast<gchar*>(outputFileName_.c_str()); - argv_[3] = const_cast<gchar*>(tKey_.c_str()); - argv_[4] = const_cast<gchar*>(durationString_.c_str()); + std::strcpy(argv_[0], "AudioManager"); + std::strcpy(argv_[1], oKey_.c_str()); + std::strcpy(argv_[2], outputFileName_.c_str()); + std::strcpy(argv_[3], tKey_.c_str()); + std::strcpy(argv_[4], durationString_.c_str()); +} + +void FromMicToFileRecorderThread::deinitArgs() { + LOG4CXX_AUTO_TRACE(logger_); + + if (argv_) { + for (int32_t i = 0; i < argc_; i++) { + delete[] argv_[i]; + } + delete[] argv_; + argv_ = NULL; + } } void FromMicToFileRecorderThread::threadMain() { @@ -136,6 +149,13 @@ void FromMicToFileRecorderThread::threadMain() { "length of time in seconds to capture", "int32_t"}, {NULL}}; + // g_option_context_parse() modifies params, so keep argc_ and argv_ + int32_t argc = argc_; + gchar** argv = new gchar* [argc]; + for (int32_t i = 0; i < argc; i++) { + argv[i] = argv_[i]; + } + #ifndef GLIB_VERSION_2_32 // g_thread_init() does nothing since 2.32 if (!g_thread_supported()) { g_thread_init(NULL); @@ -145,7 +165,7 @@ void FromMicToFileRecorderThread::threadMain() { context = g_option_context_new("-- M-AUDIO RAW"); g_option_context_add_main_entries(context, entries, NULL); g_option_context_add_group(context, gst_init_get_option_group()); - if (!g_option_context_parse(context, &argc_, &argv_, &err)) { + if (!g_option_context_parse(context, &argc, &argv, &err)) { g_error("%s\n", err->message); } @@ -159,7 +179,10 @@ void FromMicToFileRecorderThread::threadMain() { LOG4CXX_TRACE(logger_, "Duration set to: " << duration); // Initialize gstreamer and setup the main loop information - gst_init(&argc_, &argv_); + gst_init(&argc, &argv); + + delete[] argv; + argv = NULL; pipeline = gst_pipeline_new("vga2usb-h264"); @@ -207,10 +230,7 @@ void FromMicToFileRecorderThread::threadMain() { gst_object_unref(GST_OBJECT(pipeline)); g_option_context_free(context); - if (argv_) { - delete[] argv_; - argv_ = NULL; - } + deinitArgs(); return; } } @@ -238,10 +258,7 @@ void FromMicToFileRecorderThread::threadMain() { g_main_loop_unref(loop); g_option_context_free(context); - if (argv_) { - delete[] argv_; - argv_ = NULL; - } + deinitArgs(); loop = NULL; } diff --git a/src/components/media_manager/src/media_manager_impl.cc b/src/components/media_manager/src/media_manager_impl.cc index b89fc4c71f..6a9ded9029 100644 --- a/src/components/media_manager/src/media_manager_impl.cc +++ b/src/components/media_manager/src/media_manager_impl.cc @@ -96,13 +96,15 @@ void MediaManagerImpl::set_mock_mic_recorder(MediaAdapterImpl* media_adapter) { #endif // EXTENDED_MEDIA_MODE -void MediaManagerImpl::set_mock_streamer(protocol_handler::ServiceType stype, - MediaAdapterImpl* mock_stream) { +void MediaManagerImpl::set_mock_streamer( + protocol_handler::ServiceType stype, + ::utils::SharedPtr<MediaAdapterImpl> mock_stream) { streamer_[stype] = mock_stream; } void MediaManagerImpl::set_mock_streamer_listener( - protocol_handler::ServiceType stype, MediaAdapterListener* mock_stream) { + protocol_handler::ServiceType stype, + ::utils::SharedPtr<MediaAdapterListener> mock_stream) { streamer_listener_[stype] = mock_stream; } diff --git a/src/components/media_manager/src/socket_streamer_adapter.cc b/src/components/media_manager/src/socket_streamer_adapter.cc index 2bb0fe10ec..60b01c901b 100644 --- a/src/components/media_manager/src/socket_streamer_adapter.cc +++ b/src/components/media_manager/src/socket_streamer_adapter.cc @@ -108,13 +108,21 @@ bool SocketStreamerAdapter::SocketStreamer::Connect() { return true; } +void SocketStreamerAdapter::SocketStreamer::Close() { + Disconnect(); +} + void SocketStreamerAdapter::SocketStreamer::Disconnect() { LOG4CXX_AUTO_TRACE(logger); if (0 < send_socket_fd_) { + shutdown(send_socket_fd_, SHUT_RDWR); close(send_socket_fd_); + send_socket_fd_ = 0; } if (0 < socket_fd_) { + shutdown(socket_fd_, SHUT_RDWR); close(socket_fd_); + socket_fd_ = 0; } } diff --git a/src/components/media_manager/src/streamer_adapter.cc b/src/components/media_manager/src/streamer_adapter.cc index 20c067da1c..90a40b1add 100644 --- a/src/components/media_manager/src/streamer_adapter.cc +++ b/src/components/media_manager/src/streamer_adapter.cc @@ -44,9 +44,12 @@ StreamerAdapter::StreamerAdapter(Streamer* const streamer) } StreamerAdapter::~StreamerAdapter() { - delete streamer_; + if (streamer_) { + streamer_->Close(); + } thread_->join(); threads::DeleteThread(thread_); + delete streamer_; } void StreamerAdapter::StartActivity(int32_t application_key) { |