/*
- Copyright (C) 2018 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2018-2020 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
#define LOG_TIMING(...) dcpomatic_log->log(String::compose(__VA_ARGS__), LogEntry::TYPE_TIMING);
#define LOG_DEBUG_ENCODE(...) dcpomatic_log->log(String::compose(__VA_ARGS__), LogEntry::TYPE_DEBUG_ENCODE);
#define LOG_DEBUG_PLAYER(...) dcpomatic_log->log(String::compose(__VA_ARGS__), LogEntry::TYPE_DEBUG_PLAYER);
+#define LOG_DEBUG_THREED(...) dcpomatic_log->log(String::compose(__VA_ARGS__), LogEntry::TYPE_DEBUG_THREED);
+#define LOG_DEBUG_THREED_NC(...) dcpomatic_log->log(__VA_ARGS__, LogEntry::TYPE_DEBUG_THREED);
int const LogEntry::TYPE_GENERAL = 0x1;
int const LogEntry::TYPE_WARNING = 0x2;
int const LogEntry::TYPE_ERROR = 0x4;
-int const LogEntry::TYPE_DEBUG_DECODE = 0x8;
+int const LogEntry::TYPE_DEBUG_THREED = 0x8;
int const LogEntry::TYPE_DEBUG_ENCODE = 0x10;
int const LogEntry::TYPE_TIMING = 0x20;
int const LogEntry::TYPE_DEBUG_EMAIL = 0x40;
static const int TYPE_GENERAL;
static const int TYPE_WARNING;
static const int TYPE_ERROR;
- static const int TYPE_DEBUG_DECODE;
+ static const int TYPE_DEBUG_THREED;
static const int TYPE_DEBUG_ENCODE;
static const int TYPE_TIMING;
static const int TYPE_DEBUG_EMAIL;
/*
- Copyright (C) 2018-2019 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2018-2020 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
#include "dcpomatic_assert.h"
#include "dcpomatic_log.h"
#include <boost/foreach.hpp>
+#include <string>
#include <iostream>
using std::make_pair;
+using std::string;
using boost::weak_ptr;
using boost::shared_ptr;
using boost::optional;
void
Shuffler::video (weak_ptr<Piece> weak_piece, ContentVideo video)
{
+ LOG_DEBUG_THREED ("Shuffler::video frame=%1 eyes=%2 part=%3", video.frame, static_cast<int>(video.eyes), static_cast<int>(video.part));
+
if (video.eyes != EYES_LEFT && video.eyes != EYES_RIGHT) {
/* Pass through anything that we don't care about */
Video (weak_piece, video);
DCPOMATIC_ASSERT (piece);
if (!_last && video.eyes == EYES_LEFT) {
+ LOG_DEBUG_THREED_NC ("Shuffler first after clear");
/* We haven't seen anything since the last clear() and we have some eyes-left so assume everything is OK */
Video (weak_piece, video);
_last = video;
(_store.front().second.frame >= (_last->frame + 1) && _store.front().second.eyes == EYES_LEFT && _last->eyes == EYES_RIGHT)
);
+ if (!store_front_in_sequence) {
+ string const store = _store.empty() ? "store empty" : String::compose("store front frame=%1 eyes=%2", _store.front().second.frame, static_cast<int>(_store.front().second.eyes));
+ string const last = _last ? String::compose("last frame=%1 eyes=%2", _last->frame, static_cast<int>(_last->eyes)) : "no last";
+ LOG_DEBUG_THREED("Shuffler not in sequence: %1 %2", store, last);
+ }
+
if (!store_front_in_sequence && _store.size() <= _max_size) {
/* store_front_in_sequence means everything is ok; otherwise if the store is getting too big just
start emitting things as best we can. This can easily happen if, for example, there is only content
LOG_WARNING ("Shuffler is full after receiving frame %1; 3D sync may be incorrect.", video.frame);
}
+ LOG_DEBUG_THREED("Shuffler emits frame=%1 eyes=%2 store=%3", _store.front().second.frame, static_cast<int>(_store.front().second.eyes, _store.size()));
Video (_store.front().first, _store.front().second);
_last = _store.front().second;
_store.pop_front ();
void
Shuffler::clear ()
{
+ LOG_DEBUG_THREED_NC ("Shuffler::clear");
_store.clear ();
_last = optional<ContentVideo>();
}
, _log_warning (0)
, _log_error (0)
, _log_timing (0)
- , _log_debug_decode (0)
+ , _log_debug_threed (0)
, _log_debug_encode (0)
, _log_debug_email (0)
{}
/// TRANSLATORS: translate the word "Timing" here; do not include the "Config|" prefix
_log_timing = new CheckBox (_panel, S_("Config|Timing"));
t->Add (_log_timing, 1, wxEXPAND | wxALL);
- _log_debug_decode = new CheckBox (_panel, _("Debug: decode"));
- t->Add (_log_debug_decode, 1, wxEXPAND | wxALL);
+ _log_debug_threed = new CheckBox (_panel, _("Debug: 3D"));
+ t->Add (_log_debug_threed, 1, wxEXPAND | wxALL);
_log_debug_encode = new CheckBox (_panel, _("Debug: encode"));
t->Add (_log_debug_encode, 1, wxEXPAND | wxALL);
_log_debug_email = new CheckBox (_panel, _("Debug: email sending"));
_log_warning->Bind (wxEVT_CHECKBOX, boost::bind (&AdvancedPage::log_changed, this));
_log_error->Bind (wxEVT_CHECKBOX, boost::bind (&AdvancedPage::log_changed, this));
_log_timing->Bind (wxEVT_CHECKBOX, boost::bind (&AdvancedPage::log_changed, this));
- _log_debug_decode->Bind (wxEVT_CHECKBOX, boost::bind (&AdvancedPage::log_changed, this));
+ _log_debug_threed->Bind (wxEVT_CHECKBOX, boost::bind (&AdvancedPage::log_changed, this));
_log_debug_encode->Bind (wxEVT_CHECKBOX, boost::bind (&AdvancedPage::log_changed, this));
_log_debug_email->Bind (wxEVT_CHECKBOX, boost::bind (&AdvancedPage::log_changed, this));
#ifdef DCPOMATIC_WINDOWS
checked_set (_log_warning, config->log_types() & LogEntry::TYPE_WARNING);
checked_set (_log_error, config->log_types() & LogEntry::TYPE_ERROR);
checked_set (_log_timing, config->log_types() & LogEntry::TYPE_TIMING);
- checked_set (_log_debug_decode, config->log_types() & LogEntry::TYPE_DEBUG_DECODE);
+ checked_set (_log_debug_threed, config->log_types() & LogEntry::TYPE_DEBUG_THREED);
checked_set (_log_debug_encode, config->log_types() & LogEntry::TYPE_DEBUG_ENCODE);
checked_set (_log_debug_email, config->log_types() & LogEntry::TYPE_DEBUG_EMAIL);
checked_set (_frames_in_memory_multiplier, config->frames_in_memory_multiplier());
if (_log_timing->GetValue ()) {
types |= LogEntry::TYPE_TIMING;
}
- if (_log_debug_decode->GetValue ()) {
- types |= LogEntry::TYPE_DEBUG_DECODE;
+ if (_log_debug_threed->GetValue ()) {
+ types |= LogEntry::TYPE_DEBUG_THREED;
}
if (_log_debug_encode->GetValue ()) {
types |= LogEntry::TYPE_DEBUG_ENCODE;
wxCheckBox* _log_warning;
wxCheckBox* _log_error;
wxCheckBox* _log_timing;
- wxCheckBox* _log_debug_decode;
+ wxCheckBox* _log_debug_threed;
wxCheckBox* _log_debug_encode;
wxCheckBox* _log_debug_email;
#ifdef DCPOMATIC_WINDOWS
, _log_warning (0)
, _log_error (0)
, _log_timing (0)
- , _log_debug_decode (0)
{}
private:
/// TRANSLATORS: translate the word "Timing" here; do not include the "Config|" prefix
_log_timing = new CheckBox (_panel, S_("Config|Timing"));
t->Add (_log_timing, 1, wxEXPAND | wxALL);
- _log_debug_decode = new CheckBox (_panel, _("Debug"));
- t->Add (_log_debug_decode, 1, wxEXPAND | wxALL);
table->Add (t, 0, wxALL, 6);
}
_log_warning->Bind (wxEVT_CHECKBOX, boost::bind (&PlayerAdvancedPage::log_changed, this));
_log_error->Bind (wxEVT_CHECKBOX, boost::bind (&PlayerAdvancedPage::log_changed, this));
_log_timing->Bind (wxEVT_CHECKBOX, boost::bind (&PlayerAdvancedPage::log_changed, this));
- _log_debug_decode->Bind (wxEVT_CHECKBOX, boost::bind (&PlayerAdvancedPage::log_changed, this));
#ifdef DCPOMATIC_WINDOWS
_win32_console->Bind (wxEVT_CHECKBOX, boost::bind (&PlayerAdvancedPage::win32_console_changed, this));
#endif
checked_set (_log_warning, config->log_types() & LogEntry::TYPE_WARNING);
checked_set (_log_error, config->log_types() & LogEntry::TYPE_ERROR);
checked_set (_log_timing, config->log_types() & LogEntry::TYPE_TIMING);
- checked_set (_log_debug_decode, config->log_types() & LogEntry::TYPE_DEBUG_DECODE);
#ifdef DCPOMATIC_WINDOWS
checked_set (_win32_console, config->win32_console());
#endif
if (_log_timing->GetValue ()) {
types |= LogEntry::TYPE_TIMING;
}
- if (_log_debug_decode->GetValue ()) {
- types |= LogEntry::TYPE_DEBUG_DECODE;
- }
Config::instance()->set_log_types (types);
}
wxCheckBox* _log_warning;
wxCheckBox* _log_error;
wxCheckBox* _log_timing;
- wxCheckBox* _log_debug_decode;
#ifdef DCPOMATIC_WINDOWS
wxCheckBox* _win32_console;
#endif