From 30e45dd697afc053f2d7be4ee2bc154e5061ad80 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 1 Jan 2014 20:08:31 +0000 Subject: [PATCH] Untested basic stats for player. --- src/lib/player.cc | 19 +++++++++++++++++++ src/lib/player.h | 36 ++++++++++++++++++++++++++++++++++++ src/lib/transcoder.cc | 5 ++++- src/lib/transcoder.h | 1 + 4 files changed, 60 insertions(+), 1 deletion(-) diff --git a/src/lib/player.cc b/src/lib/player.cc index 263998693..4fe81d4b2 100644 --- a/src/lib/player.cc +++ b/src/lib/player.cc @@ -197,11 +197,13 @@ Player::pass () if (i == _pieces.end() || !_last_incoming_video.video || !_have_valid_pieces) { /* We're outside all video content */ emit_black (); + _statistics.video.black++; } else { /* We're inside some video; repeat the frame */ _last_incoming_video.video->dcp_time = _video_position; emit_video (_last_incoming_video.weak_piece, _last_incoming_video.video); step_video_position (_last_incoming_video.video); + _statistics.video.repeat++; } consume = false; @@ -210,8 +212,10 @@ Player::pass () /* We're ok */ emit_video (earliest_piece, dv); step_video_position (dv); + _statistics.video.good++; } else { /* Too far behind: skip */ + _statistics.video.skip++; } _just_did_inaccurate_seek = false; @@ -222,11 +226,14 @@ Player::pass () /* Too far ahead */ emit_silence (da->dcp_time - _audio_position); consume = false; + _statistics.audio.silence += (da->dcp_time - _audio_position); } else if (abs (da->dcp_time - _audio_position) < margin) { /* We're ok */ emit_audio (earliest_piece, da); + _statistics.audio.good += da->data->frames(); } else { /* Too far behind: skip */ + _statistics.audio.skip += da->data->frames(); } } else if (ds && _video) { @@ -715,3 +722,15 @@ PlayerImage::image (AVPixelFormat format, bool aligned) return out; } +void +PlayerStatistics::dump (shared_ptr log) const +{ + log->log (String::compose ("Video: %1 good %2 skipped %3 black %4 repeat", video.good, video.skip, video.black, video.repeat)); + log->log (String::compose ("Audio: %1 good %2 skipped %3 silence", audio.good, audio.skip, audio.silence)); +} + +PlayerStatistics const & +Player::statistics () const +{ + return _statistics; +} diff --git a/src/lib/player.h b/src/lib/player.h index b932f4168..897c6116b 100644 --- a/src/lib/player.h +++ b/src/lib/player.h @@ -60,6 +60,38 @@ private: boost::shared_ptr _subtitle_image; Position _subtitle_position; }; + +class PlayerStatistics +{ +public: + struct Video { + Video () + : black (0) + , repeat (0) + , good (0) + , skip (0) + {} + + int black; + int repeat; + int good; + int skip; + } video; + + struct Audio { + Audio () + : silence (0) + , good (0) + , skip (0) + {} + + int64_t silence; + int64_t good; + int64_t skip; + } audio; + + void dump (boost::shared_ptr) const; +}; /** @class Player * @brief A class which can `play' a Playlist; emitting its audio and video. @@ -85,6 +117,8 @@ public: bool repeat_last_video (); + PlayerStatistics const & statistics () const; + /** Emitted when a video frame is ready. * First parameter is the video image. * Second parameter is the eye(s) that should see this image. @@ -168,6 +202,8 @@ private: bool _just_did_inaccurate_seek; bool _approximate_size; + PlayerStatistics _statistics; + boost::signals2::scoped_connection _playlist_changed_connection; boost::signals2::scoped_connection _playlist_content_changed_connection; boost::signals2::scoped_connection _film_changed_connection; diff --git a/src/lib/transcoder.cc b/src/lib/transcoder.cc index 1c8f7e3eb..ba4d3b040 100644 --- a/src/lib/transcoder.cc +++ b/src/lib/transcoder.cc @@ -62,7 +62,8 @@ audio_proxy (weak_ptr encoder, shared_ptr audio) * @param e Encoder to use. */ Transcoder::Transcoder (shared_ptr f, shared_ptr j) - : _player (f->make_player ()) + : _film (f) + , _player (f->make_player ()) , _encoder (new Encoder (f, j)) , _finishing (false) { @@ -78,6 +79,8 @@ Transcoder::go () _finishing = true; _encoder->process_end (); + + _player->statistics().dump (_film->log ()); } float diff --git a/src/lib/transcoder.h b/src/lib/transcoder.h index d7736d4e8..25b2ef908 100644 --- a/src/lib/transcoder.h +++ b/src/lib/transcoder.h @@ -42,6 +42,7 @@ public: } private: + boost::shared_ptr _film; boost::shared_ptr _player; boost::shared_ptr _encoder; bool _finishing; -- 2.30.2