- shared_ptr<PlayerVideo> pvf (new PlayerVideo (xml, socket));
-
- DCPVideo dcp_video_frame (pvf, xml, _log);
-
- gettimeofday (&after_read, 0);
-
- Data encoded = dcp_video_frame.encode_locally (boost::bind (&Log::dcp_log, _log.get(), _1, _2));
-
- gettimeofday (&after_encode, 0);
-
- try {
- socket->write (encoded.size ());
- socket->write (encoded.data ().get (), encoded.size ());
- } catch (std::exception& e) {
- cerr << "Send failed; frame " << dcp_video_frame.index() << "\n";
- LOG_ERROR ("Send failed; frame %1", dcp_video_frame.index());
- throw;
- }
-
- return dcp_video_frame.index ();
-}
-
-void
-Server::worker_thread ()
-{
- while (true) {
- boost::mutex::scoped_lock lock (_worker_mutex);
- while (_queue.empty () && !_terminate) {
- _empty_condition.wait (lock);
- }
-
- if (_terminate) {
- return;
- }
-
- shared_ptr<Socket> socket = _queue.front ();
- _queue.pop_front ();
-
- lock.unlock ();
-
- int frame = -1;
- string ip;
-
- struct timeval start;
- struct timeval after_read;
- struct timeval after_encode;
- struct timeval end;
-
- gettimeofday (&start, 0);
-
- try {
- frame = process (socket, after_read, after_encode);
- ip = socket->socket().remote_endpoint().address().to_string();
- } catch (std::exception& e) {
- cerr << "Error: " << e.what() << "\n";
- LOG_ERROR ("Error: %1", e.what());
- }
-
- gettimeofday (&end, 0);
-
- socket.reset ();
-
- lock.lock ();
-
- if (frame >= 0) {
- struct timeval end;
- gettimeofday (&end, 0);
-
- SafeStringStream message;
- message.precision (2);
- message << fixed
- << "Encoded frame " << frame << " from " << ip << ": "
- << "receive " << (seconds(after_read) - seconds(start)) << "s "
- << "encode " << (seconds(after_encode) - seconds(after_read)) << "s "
- << "send " << (seconds(end) - seconds(after_encode)) << "s.";
-
- if (_verbose) {
- cout << message.str() << "\n";
- }
-
- LOG_GENERAL_NC (message.str ());
- }
-
- _full_condition.notify_all ();
- }