* @brief A wx widget to view `thumbnails' of a Film.
*/
-#include <wx/wx.h>
#include "lib/film.h"
+#include "lib/config.h"
+#include <RtAudio.h>
+#include <wx/wx.h>
class wxToggleButton;
class FFmpegPlayer;
class Image;
class RGBPlusAlphaImage;
class PlayerVideo;
+class Player;
+class Butler;
/** @class FilmViewer
* @brief A wx widget to view a preview of a Film.
class FilmViewer : public wxPanel
{
public:
- FilmViewer (wxWindow *);
+ FilmViewer (wxWindow *, bool outline_content = true, bool jump_to_selected = true);
+ ~FilmViewer ();
void set_film (boost::shared_ptr<Film>);
/** @return our `playhead' position; this may not lie exactly on a frame boundary */
DCPTime position () const {
- return _position;
+ return _video_position;
}
void set_position (DCPTime p);
void refresh ();
+ int audio_callback (void* out, unsigned int frames);
+
boost::signals2::signal<void (boost::weak_ptr<PlayerVideo>)> ImageChanged;
private:
void paint_panel ();
void panel_sized (wxSizeEvent &);
- void slider_moved ();
+ void slider_moved (bool update_slider);
void play_clicked ();
void timer ();
void calculate_sizes ();
void player_changed (bool);
void update_position_label ();
void update_position_slider ();
- void video (boost::shared_ptr<PlayerVideo>, DCPTime time);
void get ();
void seek (DCPTime t, bool accurate);
void refresh_panel ();
void frame_number_clicked ();
void go_to (DCPTime t);
void jump_to_selected_clicked ();
+ void recreate_butler ();
+ void config_changed (Config::Property);
+ DCPTime time () const;
+ void start ();
+ bool stop ();
+ Frame average_latency () const;
boost::shared_ptr<Film> _film;
boost::shared_ptr<Player> _player;
bool _pending_player_change;
boost::shared_ptr<const Image> _frame;
- DCPTime _position;
+ DCPTime _video_position;
Position<int> _inter_position;
dcp::Size _inter_size;
* can get the same one that we got last time.
*/
bool _last_seek_accurate;
+
+ RtAudio _audio;
+ int _audio_channels;
+ unsigned int _audio_block_size;
+ bool _playing;
+ boost::shared_ptr<Butler> _butler;
+
+ std::list<Frame> _latency_history;
+ /** Mutex to protect _latency_history */
+ mutable boost::mutex _latency_history_mutex;
+ int _latency_history_count;
+
+ boost::signals2::scoped_connection _config_changed_connection;
};