+2013-04-26 Carl Hetherington <cth@carlh.net>
+
+ * Version 0.87 released.
+
+2013-04-26 Carl Hetherington <cth@carlh.net>
+
+ * Make new trim options actually work (#121).
+
+2013-04-23 Carl Hetherington <cth@carlh.net>
+
+ * Version 0.86 released.
+
+2013-04-23 Carl Hetherington <cth@carlh.net>
+
+ * Version 0.85 released.
+
2013-04-21 Carl Hetherington <cth@carlh.net>
* Version 0.84 released.
DCP-o-matic generates Digital Cinema Packages (DCPs) from video and audio
files (such as those from DVDs or Blu-Rays) for presentation on DCI-compliant
digital projectors.
+
+Package: dvdomatic-dbg
+Architecture: i386
+Section: debug
+Priority: extra
+Depends: ${dvdomatic:Depends}, ${misc:Depends}
+Description: debugging symbols for dvdomatic
+ This package contains the debugging symbols for dvdomatic.
+
DCP-o-matic generates Digital Cinema Packages (DCPs) from video and audio
files (such as those from DVDs or Blu-Rays) for presentation on DCI-compliant
digital projectors.
+
+Package: dvdomatic-dbg
+Architecture: amd64
+Section: debug
+Priority: extra
+Depends: ${dvdomatic:Depends}, ${misc:Depends}
+Description: debugging symbols for dvdomatic
+ This package contains the debugging symbols for dvdomatic.
+
DCP-o-matic generates Digital Cinema Packages (DCPs) from video and audio
files (such as those from DVDs or Blu-Rays) for presentation on DCI-compliant
digital projectors.
+
+Package: dvdomatic-dbg
+Architecture: i386
+Section: debug
+Priority: extra
+Depends: ${dvdomatic:Depends}, ${misc:Depends}
+Description: debugging symbols for dvdomatic
+ This package contains the debugging symbols for dvdomatic.
DCP-o-matic generates Digital Cinema Packages (DCPs) from video and audio
files (such as those from DVDs or Blu-Rays) for presentation on DCI-compliant
digital projectors.
+
+Package: dvdomatic-dbg
+Architecture: amd64
+Section: debug
+Priority: extra
+Depends: ${dvdomatic:Depends}, ${misc:Depends}
+Description: debugging symbols for dvdomatic
+ This package contains the debugging symbols for dvdomatic.
+
env.set('CDIST_CXXFLAGS', env.get('CXXFLAGS'))
env.set('CDIST_PKG_CONFIG_PATH', env.get('PKG_CONFIG_PATH'))
env.command('dpkg-buildpackage')
- return os.path.abspath(glob.glob('../*.deb')[0])
+
+ debs = []
+ for p in glob.glob('../*.deb'):
+ debs.append(os.path.abspath(p))
+
+ return debs
def make_pot(env):
env.command('./waf pot')
override_dh_auto_configure:
LINKFLAGS=$(CDIST_LINKFLAGS) CXXFLAGS="$(CXXFLAGS) $(CDIST_CXXFLAGS)" PKG_CONFIG_PATH=$(CDIST_PKG_CONFIG_PATH) \
- ./waf --nocache configure --prefix=/usr --static
+ ./waf --nocache configure --prefix=/usr --static --enable-debug
override_dh_auto_build:
./waf --nocache build
override_dh_auto_install:
./waf --nocache install --destdir=debian/dcpomatic
+.PHONY: override_dh_strip
+override_dh_strip:
+ dh_strip --dbg-package=dvdomatic-dbg
#include "delay_line.h"
#include "gain.h"
#include "combiner.h"
+#include "trimmer.h"
/** @file src/ab_transcoder.cc
* @brief A transcoder which uses one Film for the left half of the screen, and a different one
_player_a->Video.connect (bind (&Combiner::process_video, _combiner, _1, _2, _3, _4));
_player_b->Video.connect (bind (&Combiner::process_video_b, _combiner, _1, _2, _3, _4));
+ int const trim_start = _film_a->trim_type() == Film::ENCODE ? _film_a->trim_start() : 0;
+ int const trim_end = _film_a->trim_type() == Film::ENCODE ? _film_a->trim_end() : 0;
+ _trimmer.reset (new Trimmer (
+ _film_a->log(), trim_start, trim_end, _film_a->content_length(),
+ _film_a->audio_frame_rate(), _film_a->video_frame_rate(), _film_a->dcp_frame_rate()
+ ));
+
+
_combiner->connect_video (_delay_line);
_delay_line->connect_video (_matcher);
- _matcher->connect_video (_encoder);
+ _matcher->connect_video (_trimmer);
+ _trimmer->connect_video (_encoder);
_player_a->connect_audio (_delay_line);
_delay_line->connect_audio (_matcher);
_matcher->connect_audio (_gain);
- _gain->connect_audio (_encoder);
+ _gain->connect_audio (_trimmer);
+ _trimmer->connect_audio (_encoder);
}
void
break;
}
}
-
- if (_delay_line) {
- _delay_line->process_end ();
- }
- if (_matcher) {
- _matcher->process_end ();
- }
- if (_gain) {
- _gain->process_end ();
- }
+
+ _delay_line->process_end ();
+ _matcher->process_end ();
+ _gain->process_end ();
+ _trimmer->process_end ();
_encoder->process_end ();
}
class Gain;
class Combiner;
class Player;
+class Trimmer;
/** @class ABTranscoder
* @brief A transcoder which uses one Film for the left half of the screen, and a different one
boost::shared_ptr<Matcher> _matcher;
boost::shared_ptr<DelayLine> _delay_line;
boost::shared_ptr<Gain> _gain;
+ boost::shared_ptr<Trimmer> _trimmer;
boost::shared_ptr<Image> _image;
};
}
void
-AnalyseAudioJob::audio (shared_ptr<AudioBuffers> b)
+AnalyseAudioJob::audio (shared_ptr<const AudioBuffers> b)
{
for (int i = 0; i < b->frames(); ++i) {
for (int j = 0; j < b->channels(); ++j) {
void run ();
private:
- void audio (boost::shared_ptr<AudioBuffers>);
+ void audio (boost::shared_ptr<const AudioBuffers>);
int64_t _done;
int64_t _samples_per_point;
{
public:
/** Call with some audio data */
- virtual void process_audio (boost::shared_ptr<AudioBuffers>) = 0;
+ virtual void process_audio (boost::shared_ptr<const AudioBuffers>) = 0;
};
class TimedAudioSink
{
public:
/** Call with some audio data */
- virtual void process_audio (boost::shared_ptr<AudioBuffers>, double t) = 0;
+ virtual void process_audio (boost::shared_ptr<const AudioBuffers>, double t) = 0;
};
#endif
using boost::bind;
static void
-process_audio_proxy (weak_ptr<AudioSink> sink, shared_ptr<AudioBuffers> audio)
+process_audio_proxy (weak_ptr<AudioSink> sink, shared_ptr<const AudioBuffers> audio)
{
shared_ptr<AudioSink> p = sink.lock ();
if (p) {
{
Audio.connect (bind (&TimedAudioSink::process_audio, s, _1, _2));
}
+
+void
+TimedAudioSource::connect_audio (shared_ptr<AudioSink> s)
+{
+ Audio.connect (bind (&AudioSink::process_audio, s, _1));
+}
{
public:
/** Emitted when some audio data is ready */
- boost::signals2::signal<void (boost::shared_ptr<AudioBuffers>)> Audio;
+ boost::signals2::signal<void (boost::shared_ptr<const AudioBuffers>)> Audio;
void connect_audio (boost::shared_ptr<AudioSink>);
};
{
public:
/** Emitted when some audio data is ready */
- boost::signals2::signal<void (boost::shared_ptr<AudioBuffers>, double)> Audio;
+ boost::signals2::signal<void (boost::shared_ptr<const AudioBuffers>, double)> Audio;
+ void connect_audio (boost::shared_ptr<AudioSink>);
void connect_audio (boost::shared_ptr<TimedAudioSink>);
};
* @param image Frame image.
*/
void
-Combiner::process_video (shared_ptr<Image> image, bool, shared_ptr<Subtitle>, double)
+Combiner::process_video (shared_ptr<const Image> image, bool, shared_ptr<Subtitle>, double)
{
- _image = image;
+ _image.reset (new SimpleImage (image));
}
/** Process video for the right half of the frame.
* @param sub Subtitle (which will be put onto the whole frame)
*/
void
-Combiner::process_video_b (shared_ptr<Image> image, bool, shared_ptr<Subtitle> sub, double t)
+Combiner::process_video_b (shared_ptr<const Image> image, bool, shared_ptr<Subtitle> sub, double t)
{
/* Copy the right half of this image into our _image */
/* XXX: this should probably be in the Image class */
for (int i = 0; i < image->components(); ++i) {
int const line_size = image->line_size()[i];
int const half_line_size = line_size / 2;
- int const stride = image->stride()[i];
uint8_t* p = _image->data()[i];
uint8_t* q = image->data()[i];
for (int j = 0; j < image->lines (i); ++j) {
memcpy (p + half_line_size, q + half_line_size, half_line_size);
- p += stride;
- q += stride;
+ p += _image->stride()[i];
+ q += image->stride()[i];
}
}
public:
Combiner (boost::shared_ptr<Log> log);
- void process_video (boost::shared_ptr<Image> i, bool, boost::shared_ptr<Subtitle> s, double);
- void process_video_b (boost::shared_ptr<Image> i, bool, boost::shared_ptr<Subtitle> s, double);
+ void process_video (boost::shared_ptr<const Image> i, bool, boost::shared_ptr<Subtitle> s, double);
+ void process_video_b (boost::shared_ptr<const Image> i, bool, boost::shared_ptr<Subtitle> s, double);
private:
/** The image that we are currently working on */
}
void
-DelayLine::process_audio (shared_ptr<AudioBuffers> data, double t)
+DelayLine::process_audio (shared_ptr<const AudioBuffers> data, double t)
{
if (_seconds > 0) {
t += _seconds;
}
void
-DelayLine::process_video (boost::shared_ptr<Image> image, bool same, boost::shared_ptr<Subtitle> sub, double t)
+DelayLine::process_video (shared_ptr<const Image> image, bool same, boost::shared_ptr<Subtitle> sub, double t)
{
if (_seconds < 0) {
t += _seconds;
public:
DelayLine (boost::shared_ptr<Log> log, double);
- void process_video (boost::shared_ptr<Image>, bool, boost::shared_ptr<Subtitle>, double);
- void process_audio (boost::shared_ptr<AudioBuffers>, double);
+ void process_video (boost::shared_ptr<const Image>, bool, boost::shared_ptr<Subtitle>, double);
+ void process_audio (boost::shared_ptr<const AudioBuffers>, double);
private:
double _seconds;
}
void
-Encoder::process_video (shared_ptr<Image> image, bool same, shared_ptr<Subtitle> sub)
+Encoder::process_video (shared_ptr<const Image> image, bool same, shared_ptr<Subtitle> sub)
{
FrameRateConversion frc (_film->video_frame_rate(), _film->dcp_frame_rate());
}
void
-Encoder::process_audio (shared_ptr<AudioBuffers> data)
+Encoder::process_audio (shared_ptr<const AudioBuffers> data)
{
#if HAVE_SWRESAMPLE
/* Maybe sample-rate convert */
lock.unlock ();
for (list<boost::thread *>::iterator i = _threads.begin(); i != _threads.end(); ++i) {
- (*i)->join ();
+ if ((*i)->joinable ()) {
+ (*i)->join ();
+ }
delete *i;
}
}
* @param same true if i is the same as the last time we were called.
* @param s A subtitle that should be on this frame, or 0.
*/
- void process_video (boost::shared_ptr<Image> i, bool same, boost::shared_ptr<Subtitle> s);
+ void process_video (boost::shared_ptr<const Image> i, bool same, boost::shared_ptr<Subtitle> s);
/** Call with some audio data */
- void process_audio (boost::shared_ptr<AudioBuffers>);
+ void process_audio (boost::shared_ptr<const AudioBuffers>);
/** Called when a processing run has finished */
virtual void process_end ();
}
void
-Gain::process_audio (shared_ptr<AudioBuffers> b)
+Gain::process_audio (shared_ptr<const AudioBuffers> b)
{
if (_gain != 0) {
float const linear_gain = pow (10, _gain / 20);
public:
Gain (boost::shared_ptr<Log> log, float gain);
- void process_audio (boost::shared_ptr<AudioBuffers>);
+ void process_audio (boost::shared_ptr<const AudioBuffers>);
private:
float _gain;
allocate ();
for (int i = 0; i < components(); ++i) {
- memcpy (_data[i], other._data[i], _line_size[i] * lines(i));
+ uint8_t* p = _data[i];
+ uint8_t* q = other._data[i];
+ for (int j = 0; j < lines(i); ++j) {
+ memcpy (p, q, _line_size[i]);
+ p += stride()[i];
+ q += other.stride()[i];
+ }
+ }
+}
+
+SimpleImage::SimpleImage (shared_ptr<const Image> other)
+ : Image (*other.get())
+{
+ _size = other->size ();
+ _aligned = true;
+
+ allocate ();
+
+ for (int i = 0; i < components(); ++i) {
+ assert(line_size()[i] == other->line_size()[i]);
+ uint8_t* p = _data[i];
+ uint8_t* q = other->data()[i];
+ for (int j = 0; j < lines(i); ++j) {
+ memcpy (p, q, line_size()[i]);
+ p += stride()[i];
+ q += other->stride()[i];
+ }
}
}
public:
SimpleImage (AVPixelFormat, libdcp::Size, bool);
SimpleImage (SimpleImage const &);
+ SimpleImage (boost::shared_ptr<const Image>);
SimpleImage& operator= (SimpleImage const &);
~SimpleImage ();
}
void
-Matcher::process_video (shared_ptr<Image> image, bool same, boost::shared_ptr<Subtitle> sub, double t)
+Matcher::process_video (shared_ptr<const Image> image, bool same, boost::shared_ptr<Subtitle> sub, double t)
{
_pixel_format = image->pixel_format ();
_size = image->size ();
}
void
-Matcher::process_audio (shared_ptr<AudioBuffers> b, double t)
+Matcher::process_audio (shared_ptr<const AudioBuffers> b, double t)
{
_channels = b->channels ();
- _log->log (String::compose ("Matcher audio @ %1 [video=%2, audio=%3, pending_audio=%4]", t, _video_frames, _audio_frames, _pending_audio.size()));
+ _log->log (String::compose (
+ "Matcher audio (%1 frames) @ %2 [video=%3, audio=%4, pending_audio=%5]",
+ b->frames(), t, _video_frames, _audio_frames, _pending_audio.size()
+ )
+ );
if (!_first_input) {
_first_input = t;
Matcher::repeat_last_video ()
{
if (!_last_image) {
- _last_image.reset (new SimpleImage (_pixel_format.get(), _size.get(), true));
- _last_image->make_black ();
+ shared_ptr<Image> im (new SimpleImage (_pixel_format.get(), _size.get(), true));
+ im->make_black ();
+ _last_image = im;
}
Video (_last_image, true, _last_subtitle);
{
public:
Matcher (boost::shared_ptr<Log> log, int sample_rate, float frames_per_second);
- void process_video (boost::shared_ptr<Image> i, bool, boost::shared_ptr<Subtitle> s, double);
- void process_audio (boost::shared_ptr<AudioBuffers>, double);
+ void process_video (boost::shared_ptr<const Image> i, bool, boost::shared_ptr<Subtitle> s, double);
+ void process_audio (boost::shared_ptr<const AudioBuffers>, double);
void process_end ();
private:
boost::optional<int> _channels;
struct AudioRecord {
- AudioRecord (boost::shared_ptr<AudioBuffers> a, double t)
+ AudioRecord (boost::shared_ptr<const AudioBuffers> a, double t)
: audio (a)
, time (t)
{}
- boost::shared_ptr<AudioBuffers> audio;
+ boost::shared_ptr<const AudioBuffers> audio;
double time;
};
std::list<AudioRecord> _pending_audio;
boost::optional<double> _first_input;
- boost::shared_ptr<Image> _last_image;
+ boost::shared_ptr<const Image> _last_image;
boost::shared_ptr<Subtitle> _last_subtitle;
bool _had_first_video;
}
void
-Player::process_video (shared_ptr<Image> i, bool same, shared_ptr<Subtitle> s, double t)
+Player::process_video (shared_ptr<const Image> i, bool same, shared_ptr<Subtitle> s, double t)
{
Video (i, same, s, _video_start[_video_decoder] + t);
}
void
-Player::process_audio (weak_ptr<const AudioContent> c, shared_ptr<AudioBuffers> b, double t)
+Player::process_audio (weak_ptr<const AudioContent> c, shared_ptr<const AudioBuffers> b, double t)
{
AudioMapping mapping = _film->audio_mapping ();
if (!_audio_buffers) {
_have_valid_decoders = true;
}
+ if (_video_decoders.empty ()) {
+ return true;
+ }
+
/* Find the decoder that contains this position */
_video_decoder = 0;
while (1) {
double last_video_time () const;
private:
- void process_video (boost::shared_ptr<Image> i, bool same, boost::shared_ptr<Subtitle> s, double);
- void process_audio (boost::weak_ptr<const AudioContent>, boost::shared_ptr<AudioBuffers>, double);
+ void process_video (boost::shared_ptr<const Image> i, bool same, boost::shared_ptr<Subtitle> s, double);
+ void process_audio (boost::weak_ptr<const AudioContent>, boost::shared_ptr<const AudioBuffers>, double);
void setup_decoders ();
void playlist_changed ();
void content_changed (boost::weak_ptr<Content>, int);
msgstr ""
"Project-Id-Version: LIBDCPOMATIC\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-04-09 11:14+0100\n"
+"POT-Creation-Date: 2013-04-22 15:06+0100\n"
"PO-Revision-Date: 2013-04-02 19:10-0500\n"
"Last-Translator: Manuel AC <manuel.acevedo@civantos.>\n"
"Language-Team: Manuel AC <manuel.acevedo@civantos.com>\n"
msgid "1.19"
msgstr "1.19"
-#: src/lib/format.cc:79
-msgid "1.33"
-msgstr "1.33"
-
#: src/lib/format.cc:83
msgid "1.375"
msgstr "1.375"
msgid "3D denoiser"
msgstr "reducción de ruido 3D"
+#: src/lib/format.cc:79
+msgid "4:3"
+msgstr ""
+
#: src/lib/format.cc:87
msgid "4:3 within Flat"
msgstr "4:3 en Flat"
msgid "Bilinear"
msgstr "Bilineal"
-#: src/lib/job.cc:302
+#: src/lib/job.cc:306
msgid "Cancelled"
msgstr ""
msgid "Each source frame will be doubled in the DCP.\n"
msgstr "Se doblará cada fotograma de la fuente en el DCP.\n"
-#: src/lib/job.cc:300
+#: src/lib/job.cc:304
msgid "Error (%1)"
msgstr "Error (%1)"
msgid "Horizontal deblocking filter A"
msgstr "Horizontal deblocking filter A"
-#: src/lib/job.cc:92 src/lib/job.cc:101
+#: src/lib/job.cc:96 src/lib/job.cc:105
msgid ""
"It is not known what caused this error. The best idea is to report the "
"problem to the DCP-o-matic mailing list (dcpomatic@carlh.net)"
msgid "Noise reduction"
msgstr "Reducción de ruido"
-#: src/lib/job.cc:298
+#: src/lib/job.cc:302
msgid "OK (ran for %1)"
msgstr "OK (ejecución %1)"
msgid "Test"
msgstr "Test"
-#: src/lib/job.cc:77
+#: src/lib/job.cc:78
msgid ""
"The drive that the film is stored on is low in disc space. Free some more "
"space and try again."
msgid "Transitional"
msgstr "Transitional"
-#: src/lib/job.cc:100
+#: src/lib/job.cc:104
msgid "Unknown error"
msgstr "Error desconocido"
-#: src/lib/ffmpeg_decoder.cc:396
+#: src/lib/ffmpeg_decoder.cc:388
msgid "Unrecognised audio sample format (%1)"
msgstr "Formato de audio desconocido (%1)"
msgid "Yet Another Deinterlacing Filter"
msgstr "Yet Another Deinterlacing Filter"
-#: src/lib/film.cc:263
+#: src/lib/film.cc:296
msgid "cannot contain slashes"
msgstr "no puede contener barras"
msgid "connecting"
msgstr "conectando"
-#: src/lib/film.cc:300
+#: src/lib/film.cc:333
msgid "content"
msgstr "contenido"
-#: src/lib/film.cc:304
+#: src/lib/film.cc:337
msgid "content type"
msgstr "tipo de contenido"
msgid "could not create file %1"
msgstr "No se pudo escribir el fichero remoto (%1)"
-#: src/lib/ffmpeg_decoder.cc:191
+#: src/lib/ffmpeg_decoder.cc:187
msgid "could not find audio decoder"
msgstr "no se encontró el decodificador de audio"
-#: src/lib/ffmpeg_decoder.cc:118
+#: src/lib/ffmpeg_decoder.cc:114
msgid "could not find stream information"
msgstr "no se pudo encontrar información del flujo"
-#: src/lib/ffmpeg_decoder.cc:210
+#: src/lib/ffmpeg_decoder.cc:206
msgid "could not find subtitle decoder"
msgstr "no se pudo encontrar decodificador de subtítutlos"
-#: src/lib/ffmpeg_decoder.cc:169
+#: src/lib/ffmpeg_decoder.cc:165
msgid "could not find video decoder"
msgstr "no se pudo encontrar decodificador de vídeo"
msgid "external audio files must be mono"
msgstr "los ficheros externos de sonido deben ser mono"
-#: src/lib/film.cc:296
+#: src/lib/film.cc:329
msgid "format"
msgstr "formato"
msgid "multi-part subtitles not yet supported"
msgstr "todavía no se soportan subtítulos en múltiples partes"
-#: src/lib/film.cc:263 src/lib/film.cc:308
+#: src/lib/film.cc:296 src/lib/film.cc:341
msgid "name"
msgstr "nombre"
#. / TRANSLATORS: remaining here follows an amount of time that is remaining
#. / on an operation.
-#: src/lib/job.cc:295
+#: src/lib/job.cc:299
msgid "remaining"
msgstr "pendiente"
msgid "seconds"
msgstr "segundos"
-#: src/lib/film.cc:274
+#: src/lib/film.cc:307
msgid "still"
msgstr "imagen fija"
-#: src/lib/film.cc:274
+#: src/lib/film.cc:307
msgid "video"
msgstr "vídeo"
+#~ msgid "1.33"
+#~ msgstr "1.33"
+
#~ msgid "Source scaled to 1.19:1"
#~ msgstr "Fuente escalada a 1.19:1"
msgstr ""
"Project-Id-Version: DCP-o-matic FRENCH\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-04-09 11:14+0100\n"
+"POT-Creation-Date: 2013-04-22 15:06+0100\n"
"PO-Revision-Date: 2013-03-20 00:39+0100\n"
"Last-Translator: FreeDCP.net <freedcp.net@gmail.com>\n"
"Language-Team: \n"
msgid "1.19"
msgstr "1.19"
-#: src/lib/format.cc:79
-msgid "1.33"
-msgstr "1.33"
-
#: src/lib/format.cc:83
msgid "1.375"
msgstr "1.375"
#: src/lib/format.cc:115
#, fuzzy
msgid "16:9 within Scope"
-msgstr "16:9 dans Flat"
+msgstr "16:9 dans Scope"
#: src/lib/filter.cc:88
msgid "3D denoiser"
msgstr "Débruitage 3D"
+#: src/lib/format.cc:79
+msgid "4:3"
+msgstr ""
+
#: src/lib/format.cc:87
msgid "4:3 within Flat"
msgstr "4:3 dans Flat"
msgid "Bilinear"
msgstr "Bilinéaire"
-#: src/lib/job.cc:302
+#: src/lib/job.cc:306
msgid "Cancelled"
msgstr ""
msgid "Each source frame will be doubled in the DCP.\n"
msgstr "Chaque image source sera dupliquée dans le DCP.\n"
-#: src/lib/job.cc:300
+#: src/lib/job.cc:304
msgid "Error (%1)"
msgstr "Erreur (%1)"
msgid "Horizontal deblocking filter A"
msgstr "Filtre dé-bloc horizontal"
-#: src/lib/job.cc:92 src/lib/job.cc:101
+#: src/lib/job.cc:96 src/lib/job.cc:105
msgid ""
"It is not known what caused this error. The best idea is to report the "
"problem to the DCP-o-matic mailing list (dcpomatic@carlh.net)"
msgid "Noise reduction"
msgstr "Réduction de bruit"
-#: src/lib/job.cc:298
+#: src/lib/job.cc:302
msgid "OK (ran for %1)"
msgstr "OK (processus %1)"
msgid "Test"
msgstr "Test"
-#: src/lib/job.cc:77
+#: src/lib/job.cc:78
msgid ""
"The drive that the film is stored on is low in disc space. Free some more "
"space and try again."
msgid "Transitional"
msgstr "Transitional"
-#: src/lib/job.cc:100
+#: src/lib/job.cc:104
msgid "Unknown error"
msgstr "Erreur inconnue"
-#: src/lib/ffmpeg_decoder.cc:396
+#: src/lib/ffmpeg_decoder.cc:388
msgid "Unrecognised audio sample format (%1)"
msgstr "Échantillonnage audio (%1) inconnu"
msgid "Yet Another Deinterlacing Filter"
msgstr "Un autre filtre de désentrelacement"
-#: src/lib/film.cc:263
+#: src/lib/film.cc:296
msgid "cannot contain slashes"
msgstr "slash interdit"
msgid "connecting"
msgstr "connexion"
-#: src/lib/film.cc:300
+#: src/lib/film.cc:333
msgid "content"
msgstr "contenu"
-#: src/lib/film.cc:304
+#: src/lib/film.cc:337
msgid "content type"
msgstr "type de contenu"
msgid "could not create file %1"
msgstr "Écriture vers fichier distant (%1) impossible"
-#: src/lib/ffmpeg_decoder.cc:191
+#: src/lib/ffmpeg_decoder.cc:187
msgid "could not find audio decoder"
msgstr "décodeur audio introuvable"
-#: src/lib/ffmpeg_decoder.cc:118
+#: src/lib/ffmpeg_decoder.cc:114
msgid "could not find stream information"
msgstr "information du flux introuvable"
-#: src/lib/ffmpeg_decoder.cc:210
+#: src/lib/ffmpeg_decoder.cc:206
msgid "could not find subtitle decoder"
msgstr "décodeur de sous-titre introuvable"
-#: src/lib/ffmpeg_decoder.cc:169
+#: src/lib/ffmpeg_decoder.cc:165
msgid "could not find video decoder"
msgstr "décodeur vidéo introuvable"
msgid "external audio files must be mono"
msgstr "les fichiers audio externes doivent être en mono"
-#: src/lib/film.cc:296
+#: src/lib/film.cc:329
msgid "format"
msgstr "format"
msgid "multi-part subtitles not yet supported"
msgstr "sous-titres en plusieurs parties non supportés"
-#: src/lib/film.cc:263 src/lib/film.cc:308
+#: src/lib/film.cc:296 src/lib/film.cc:341
msgid "name"
msgstr "nom"
#. / TRANSLATORS: remaining here follows an amount of time that is remaining
#. / on an operation.
-#: src/lib/job.cc:295
+#: src/lib/job.cc:299
msgid "remaining"
msgstr "restant"
msgid "seconds"
msgstr "secondes"
-#: src/lib/film.cc:274
+#: src/lib/film.cc:307
msgid "still"
msgstr "fixe"
-#: src/lib/film.cc:274
+#: src/lib/film.cc:307
msgid "video"
msgstr "vidéo"
+#~ msgid "1.33"
+#~ msgstr "1.33"
+
#~ msgid "Source scaled to 1.19:1"
#~ msgstr "Source mise à l'échelle en 1.19:1"
msgstr ""
"Project-Id-Version: IT VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-04-09 11:14+0100\n"
+"POT-Creation-Date: 2013-04-22 15:06+0100\n"
"PO-Revision-Date: 2013-04-03 15:04+0100\n"
"Last-Translator: Maci <macibro@gmail.com>\n"
"Language-Team: \n"
msgid "1.19"
msgstr "1.19"
-#: src/lib/format.cc:79
-msgid "1.33"
-msgstr "1.33"
-
#: src/lib/format.cc:83
msgid "1.375"
msgstr "1.375"
msgid "3D denoiser"
msgstr "Riduttore di rumore 3D"
+#: src/lib/format.cc:79
+msgid "4:3"
+msgstr ""
+
#: src/lib/format.cc:87
msgid "4:3 within Flat"
msgstr "4:3 all'interno di Flat"
msgid "Bilinear"
msgstr "Bilineare"
-#: src/lib/job.cc:302
+#: src/lib/job.cc:306
msgid "Cancelled"
msgstr "Cancellato"
msgid "Each source frame will be doubled in the DCP.\n"
msgstr "Ogni fotogramma del sorgente sarà raddoppiato nel DCP.\n"
-#: src/lib/job.cc:300
+#: src/lib/job.cc:304
msgid "Error (%1)"
msgstr "Errore (%1)"
msgid "Horizontal deblocking filter A"
msgstr "Filtro A sblocco orizzontale"
-#: src/lib/job.cc:92 src/lib/job.cc:101
+#: src/lib/job.cc:96 src/lib/job.cc:105
msgid ""
"It is not known what caused this error. The best idea is to report the "
"problem to the DCP-o-matic mailing list (dcpomatic@carlh.net)"
msgid "Noise reduction"
msgstr "Riduzione del rumore"
-#: src/lib/job.cc:298
+#: src/lib/job.cc:302
msgid "OK (ran for %1)"
msgstr "OK (procede al %1)"
msgid "Test"
msgstr "Prova"
-#: src/lib/job.cc:77
+#: src/lib/job.cc:78
msgid ""
"The drive that the film is stored on is low in disc space. Free some more "
"space and try again."
msgid "Transitional"
msgstr "Di transizione"
-#: src/lib/job.cc:100
+#: src/lib/job.cc:104
msgid "Unknown error"
msgstr "Errore sconosciuto"
-#: src/lib/ffmpeg_decoder.cc:396
+#: src/lib/ffmpeg_decoder.cc:388
msgid "Unrecognised audio sample format (%1)"
msgstr "Formato di campionamento audio non riconosciuto (%1)"
msgid "Yet Another Deinterlacing Filter"
msgstr "Altro filtro di deinterlacciamento"
-#: src/lib/film.cc:263
+#: src/lib/film.cc:296
msgid "cannot contain slashes"
msgstr "non può contenere barre"
msgid "connecting"
msgstr "mi sto connettendo"
-#: src/lib/film.cc:300
+#: src/lib/film.cc:333
msgid "content"
msgstr "contenuto"
-#: src/lib/film.cc:304
+#: src/lib/film.cc:337
msgid "content type"
msgstr "tipo di contenuto"
msgid "could not create file %1"
msgstr "Non posso scrivere il file remoto (%1)"
-#: src/lib/ffmpeg_decoder.cc:191
+#: src/lib/ffmpeg_decoder.cc:187
msgid "could not find audio decoder"
msgstr "non riesco a trovare il decoder audio"
-#: src/lib/ffmpeg_decoder.cc:118
+#: src/lib/ffmpeg_decoder.cc:114
msgid "could not find stream information"
msgstr "non riesco a trovare informazioni sullo streaming"
-#: src/lib/ffmpeg_decoder.cc:210
+#: src/lib/ffmpeg_decoder.cc:206
msgid "could not find subtitle decoder"
msgstr "non riesco a trovare il decoder dei sottotitoli"
-#: src/lib/ffmpeg_decoder.cc:169
+#: src/lib/ffmpeg_decoder.cc:165
msgid "could not find video decoder"
msgstr "non riesco a trovare il decoder video"
msgid "external audio files must be mono"
msgstr "i files dell'audio esterno devono essere mono"
-#: src/lib/film.cc:296
+#: src/lib/film.cc:329
msgid "format"
msgstr "formato"
msgid "multi-part subtitles not yet supported"
msgstr "sottotitoli multi-part non ancora supportati"
-#: src/lib/film.cc:263 src/lib/film.cc:308
+#: src/lib/film.cc:296 src/lib/film.cc:341
msgid "name"
msgstr "nome"
#. / TRANSLATORS: remaining here follows an amount of time that is remaining
#. / on an operation.
-#: src/lib/job.cc:295
+#: src/lib/job.cc:299
msgid "remaining"
msgstr "restano"
msgid "seconds"
msgstr "secondi"
-#: src/lib/film.cc:274
+#: src/lib/film.cc:307
msgid "still"
msgstr "ancora"
-#: src/lib/film.cc:274
+#: src/lib/film.cc:307
msgid "video"
msgstr "video"
+#~ msgid "1.33"
+#~ msgstr "1.33"
+
#~ msgid "Source scaled to 1.19:1"
#~ msgstr "Sorgente scalato a 1.19:1"
msgstr ""
"Project-Id-Version: DCP-o-matic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-04-09 11:14+0100\n"
+"POT-Creation-Date: 2013-04-22 15:06+0100\n"
"PO-Revision-Date: 2013-04-10 15:35+0100\n"
"Last-Translator: Adam Klotblixt <adam.klotblixt@gmail.com>\n"
"Language-Team: \n"
+"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "1.19"
msgstr "1,19"
-#: src/lib/format.cc:79
-msgid "1.33"
-msgstr "1,33"
-
#: src/lib/format.cc:83
msgid "1.375"
msgstr "1,375"
msgid "3D denoiser"
msgstr "3D brusreducering"
+#: src/lib/format.cc:79
+msgid "4:3"
+msgstr ""
+
#: src/lib/format.cc:87
msgid "4:3 within Flat"
msgstr "4:3 innanför Flat"
msgid "Bilinear"
msgstr "Bilinjär"
-#: src/lib/job.cc:302
+#: src/lib/job.cc:306
msgid "Cancelled"
msgstr "Avbruten"
msgid "Each source frame will be doubled in the DCP.\n"
msgstr "Varje bild från källan kommer att användas två gånger i DCPn.\n"
-#: src/lib/job.cc:300
+#: src/lib/job.cc:304
msgid "Error (%1)"
msgstr "Fel (%1)"
msgid "Horizontal deblocking filter A"
msgstr "Filter för horisontal kantighetsutjämning A"
-#: src/lib/job.cc:92 src/lib/job.cc:101
+#: src/lib/job.cc:96 src/lib/job.cc:105
msgid ""
"It is not known what caused this error. The best idea is to report the "
"problem to the DCP-o-matic mailing list (dcpomatic@carlh.net)"
msgid "Noise reduction"
msgstr "Brusreducering"
-#: src/lib/job.cc:298
+#: src/lib/job.cc:302
msgid "OK (ran for %1)"
msgstr "OK (kördes %1)"
msgid "Test"
msgstr "Test"
-#: src/lib/job.cc:77
+#: src/lib/job.cc:78
msgid ""
"The drive that the film is stored on is low in disc space. Free some more "
"space and try again."
msgid "Transitional"
msgstr "Övergångsklipp"
-#: src/lib/job.cc:100
+#: src/lib/job.cc:104
msgid "Unknown error"
msgstr "Okänt fel"
# Svengelska
-#: src/lib/ffmpeg_decoder.cc:396
+#: src/lib/ffmpeg_decoder.cc:388
#, fuzzy
msgid "Unrecognised audio sample format (%1)"
msgstr "Okänt audio-sampelformat (%1)"
msgid "Yet Another Deinterlacing Filter"
msgstr "Yet Another Deinterlacing Filter"
-#: src/lib/film.cc:263
+#: src/lib/film.cc:296
msgid "cannot contain slashes"
msgstr "får inte innehålla snedstreck"
msgid "connecting"
msgstr "kopplar upp"
-#: src/lib/film.cc:300
+#: src/lib/film.cc:333
msgid "content"
msgstr "innehåll"
-#: src/lib/film.cc:304
+#: src/lib/film.cc:337
msgid "content type"
msgstr "innehållstyp"
msgid "could not create file %1"
msgstr "kunde inte skapa fil %1"
-#: src/lib/ffmpeg_decoder.cc:191
+#: src/lib/ffmpeg_decoder.cc:187
msgid "could not find audio decoder"
msgstr "kunde inte hitta audio-avkodare"
-#: src/lib/ffmpeg_decoder.cc:118
+#: src/lib/ffmpeg_decoder.cc:114
msgid "could not find stream information"
msgstr "kunde inte hitta information om strömmen"
-#: src/lib/ffmpeg_decoder.cc:210
+#: src/lib/ffmpeg_decoder.cc:206
msgid "could not find subtitle decoder"
msgstr "kunde inte hitta undertext-avkodare"
-#: src/lib/ffmpeg_decoder.cc:169
+#: src/lib/ffmpeg_decoder.cc:165
msgid "could not find video decoder"
msgstr "kunde inte hitta video-avkodare"
msgid "external audio files must be mono"
msgstr "externa audio-filer måste vara mono"
-#: src/lib/film.cc:296
+#: src/lib/film.cc:329
msgid "format"
msgstr "format"
msgid "multi-part subtitles not yet supported"
msgstr "undertexter i flera delar stöds inte ännu"
-#: src/lib/film.cc:263 src/lib/film.cc:308
+#: src/lib/film.cc:296 src/lib/film.cc:341
msgid "name"
msgstr "namn"
#. / TRANSLATORS: remaining here follows an amount of time that is remaining
#. / on an operation.
-#: src/lib/job.cc:295
+#: src/lib/job.cc:299
msgid "remaining"
msgstr "återstående tid"
msgid "seconds"
msgstr "sekunder"
-#: src/lib/film.cc:274
+#: src/lib/film.cc:307
msgid "still"
msgstr "stillbild"
-#: src/lib/film.cc:274
+#: src/lib/film.cc:307
msgid "video"
msgstr "video"
+#~ msgid "1.33"
+#~ msgstr "1,33"
+
#~ msgid "Source scaled to 1.19:1"
#~ msgstr "Källan skalad till 1,19:1"
#include "video_decoder.h"
#include "audio_decoder.h"
#include "player.h"
+#include "trimmer.h"
using std::string;
using boost::shared_ptr;
_delay_line.reset (new DelayLine (f->log(), f->audio_delay() * f->audio_frame_rate() / 1000));
_gain.reset (new Gain (f->log(), f->audio_gain()));
+ int const trim_start = f->trim_type() == Film::ENCODE ? f->trim_start() : 0;
+ int const trim_end = f->trim_type() == Film::ENCODE ? f->trim_end() : 0;
+ _trimmer.reset (new Trimmer (
+ f->log(), trim_start, trim_end, f->content_length(),
+ f->audio_frame_rate(), f->video_frame_rate(), f->dcp_frame_rate()
+ ));
+
if (!f->with_subtitles ()) {
_player->disable_subtitles ();
}
_player->connect_video (_delay_line);
_delay_line->connect_video (_matcher);
- _matcher->connect_video (_encoder);
+ _matcher->connect_video (_trimmer);
+ _trimmer->connect_video (_encoder);
_player->connect_audio (_delay_line);
_delay_line->connect_audio (_matcher);
_matcher->connect_audio (_gain);
- _gain->connect_audio (_encoder);
+ _gain->connect_audio (_trimmer);
+ _trimmer->connect_audio (_encoder);
}
void
}
_delay_line->process_end ();
- _matcher->process_end ();
+ if (_matcher) {
+ _matcher->process_end ();
+ }
_gain->process_end ();
_encoder->process_end ();
}
class Gain;
class DelayLine;
class Player;
+class Trimmer;
/** @class Transcoder
*
boost::shared_ptr<Matcher> _matcher;
boost::shared_ptr<DelayLine> _delay_line;
boost::shared_ptr<Gain> _gain;
+ boost::shared_ptr<Trimmer> _trimmer;
};
Trimmer::Trimmer (
shared_ptr<Log> log,
int video_trim_start,
- int video_trim_end, int video_length,
+ int video_trim_end,
+ int video_length,
int audio_sample_rate,
float frames_per_second,
int dcp_frames_per_second
_audio_start = video_frames_to_audio_frames (_video_start, audio_sample_rate, frames_per_second);
_audio_end = video_frames_to_audio_frames (_video_end, audio_sample_rate, frames_per_second);
}
+
+ /* XXX: this is a hack; this flag means that no trim is happening at the end of the film, and I'm
+ using that to prevent audio trim being rounded to video trim, which breaks the current set
+ of regression tests. This could be removed if a) the regression tests are regenerated and b)
+ I can work out what DCP length should be.
+ */
+ _no_trim = (_video_start == 0) && (_video_end == (video_length - video_trim_end));
}
void
-Trimmer::process_video (shared_ptr<Image> image, bool same, shared_ptr<Subtitle> sub)
+Trimmer::process_video (shared_ptr<const Image> image, bool same, shared_ptr<Subtitle> sub)
{
- if (_video_in >= _video_start && _video_in <= _video_end) {
+ if (_no_trim || (_video_in >= _video_start && _video_in <= _video_end)) {
Video (image, same, sub);
}
}
void
-Trimmer::process_audio (shared_ptr<AudioBuffers> audio)
+Trimmer::process_audio (shared_ptr<const AudioBuffers> audio)
{
+ if (_no_trim) {
+ Audio (audio);
+ return;
+ }
+
int64_t offset = _audio_start - _audio_in;
if (offset > audio->frames()) {
_audio_in += audio->frames ();
_audio_in += audio->frames ();
if (offset != 0 || length != audio->frames ()) {
- audio->move (offset, 0, length);
- audio->set_frames (length);
+ shared_ptr<AudioBuffers> copy (new AudioBuffers (audio));
+ copy->move (offset, 0, length);
+ copy->set_frames (length);
+ audio = copy;
}
Audio (audio);
public:
Trimmer (boost::shared_ptr<Log>, int, int, int, int, float, int);
- void process_video (boost::shared_ptr<Image> i, bool, boost::shared_ptr<Subtitle> s);
- void process_audio (boost::shared_ptr<AudioBuffers>);
+ void process_video (boost::shared_ptr<const Image> i, bool, boost::shared_ptr<Subtitle> s);
+ void process_audio (boost::shared_ptr<const AudioBuffers>);
private:
friend class trimmer_test;
int64_t _audio_start;
int64_t _audio_end;
int64_t _audio_in;
+ bool _no_trim;
};
using boost::shared_ptr;
using boost::thread;
using boost::lexical_cast;
+using boost::optional;
using libdcp::Size;
-thread::id ui_thread;
+boost::thread::id ui_thread;
/** Convert some number of seconds to a string representation
* in hours, minutes and seconds.
stringstream hms;
hms << h << N_(":");
hms.width (2);
- hms << setfill ('0') << m << N_(":");
+ hms << std::setfill ('0') << m << N_(":");
hms.width (2);
- hms << setfill ('0') << s;
+ hms << std::setfill ('0') << s;
return hms.str ();
}
if (strings) {
for (i = 0; i < size && (levels == 0 || i < size_t(levels)); i++) {
- out << N_(" ") << demangle (strings[i]) << endl;
+ out << N_(" ") << demangle (strings[i]) << "\n";
}
free (strings);
stringstream s;
for (int i = 0; i < MD5_DIGEST_LENGTH; ++i) {
- s << hex << setfill('0') << setw(2) << ((int) digest[i]);
+ s << std::hex << std::setfill('0') << std::setw(2) << ((int) digest[i]);
}
return s.str ();
string
md5_digest (boost::filesystem::path file)
{
- ifstream f (file.string().c_str(), ios::binary);
+ ifstream f (file.string().c_str(), std::ios::binary);
if (!f.good ()) {
throw OpenFileError (file.string());
}
- f.seekg (0, ios::end);
+ f.seekg (0, std::ios::end);
int bytes = f.tellg ();
- f.seekg (0, ios::beg);
+ f.seekg (0, std::ios::beg);
int const buffer_size = 64 * 1024;
char buffer[buffer_size];
stringstream s;
for (int i = 0; i < MD5_DIGEST_LENGTH; ++i) {
- s << hex << setfill('0') << setw(2) << ((int) digest[i]);
+ s << std::hex << std::setfill('0') << std::setw(2) << ((int) digest[i]);
}
return s.str ();
}
/* Pick the best one, bailing early if we hit an exact match */
- float error = numeric_limits<float>::max ();
- boost::optional<FrameRateCandidate> best;
+ float error = std::numeric_limits<float>::max ();
+ optional<FrameRateCandidate> best;
list<FrameRateCandidate>::iterator i = candidates.begin();
while (i != candidates.end()) {
}
}
+/* XXX: it's a shame that this is a copy-and-paste of the above;
+ probably fixable with c++0x.
+*/
+AudioBuffers::AudioBuffers (boost::shared_ptr<const AudioBuffers> other)
+ : _channels (other->_channels)
+ , _frames (other->_frames)
+ , _allocated_frames (other->_frames)
+{
+ _data = new float*[_channels];
+ for (int i = 0; i < _channels; ++i) {
+ _data[i] = new float[_frames];
+ memcpy (_data[i], other->_data[i], _frames * sizeof (float));
+ }
+}
+
/** AudioBuffers destructor */
AudioBuffers::~AudioBuffers ()
{
/** Add data from from `from', `from_channel' to our channel `to_channel' */
void
-AudioBuffers::accumulate (shared_ptr<AudioBuffers> from, int from_channel, int to_channel)
+AudioBuffers::accumulate (shared_ptr<const AudioBuffers> from, int from_channel, int to_channel)
{
int const N = frames ();
assert (from->frames() == N);
public:
AudioBuffers (int channels, int frames);
AudioBuffers (AudioBuffers const &);
+ AudioBuffers (boost::shared_ptr<const AudioBuffers>);
~AudioBuffers ();
float** data () const {
void copy_from (AudioBuffers* from, int frames_to_copy, int read_offset, int write_offset);
void move (int from, int to, int frames);
- void accumulate (boost::shared_ptr<AudioBuffers>, int, int);
+ void accumulate (boost::shared_ptr<const AudioBuffers>, int, int);
private:
/** Number of channels */
* @param same true if i is the same as last time we were called.
* @param s A subtitle that should be on this frame, or 0.
*/
- virtual void process_video (boost::shared_ptr<Image> i, bool same, boost::shared_ptr<Subtitle> s) = 0;
+ virtual void process_video (boost::shared_ptr<const Image> i, bool same, boost::shared_ptr<Subtitle> s) = 0;
};
class TimedVideoSink
* @param s A subtitle that should be on this frame, or 0.
* @param t Source timestamp.
*/
- virtual void process_video (boost::shared_ptr<Image> i, bool same, boost::shared_ptr<Subtitle> s, double t) = 0;
+ virtual void process_video (boost::shared_ptr<const Image> i, bool same, boost::shared_ptr<Subtitle> s, double t) = 0;
};
#endif
using boost::bind;
static void
-process_video_proxy (weak_ptr<VideoSink> sink, shared_ptr<Image> i, bool same, shared_ptr<Subtitle> s)
+process_video_proxy (weak_ptr<VideoSink> sink, shared_ptr<const Image> i, bool same, shared_ptr<Subtitle> s)
{
shared_ptr<VideoSink> p = sink.lock ();
if (p) {
{
Video.connect (bind (&TimedVideoSink::process_video, s, _1, _2, _3, _4));
}
+
+void
+TimedVideoSource::connect_video (shared_ptr<VideoSink> s)
+{
+ Video.connect (bind (&VideoSink::process_video, s, _1, _2, _3));
+}
+
+
* Second parameter is true if the image is the same as the last one that was emitted.
* Third parameter is either 0 or a subtitle that should be on this frame.
*/
- boost::signals2::signal<void (boost::shared_ptr<Image>, bool, boost::shared_ptr<Subtitle>)> Video;
+ boost::signals2::signal<void (boost::shared_ptr<const Image>, bool, boost::shared_ptr<Subtitle>)> Video;
void connect_video (boost::shared_ptr<VideoSink>);
};
* Third parameter is either 0 or a subtitle that should be on this frame.
* Fourth parameter is the source timestamp of this frame.
*/
- boost::signals2::signal<void (boost::shared_ptr<Image>, bool, boost::shared_ptr<Subtitle>, double)> Video;
+ boost::signals2::signal<void (boost::shared_ptr<const Image>, bool, boost::shared_ptr<Subtitle>, double)> Video;
+ void connect_video (boost::shared_ptr<VideoSink>);
void connect_video (boost::shared_ptr<TimedVideoSink>);
};
bool test_mode = false;
bool progress = true;
bool no_remote = false;
- int log_level = 1;
+ int log_level = 0;
int option_index = 0;
while (1) {
msgstr ""
"Project-Id-Version: DCPOMATIC\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-04-09 11:14+0100\n"
+"POT-Creation-Date: 2013-04-22 15:06+0100\n"
"PO-Revision-Date: 2013-03-23 21:08-0500\n"
"Last-Translator: Manuel AC <manuel.acevedo@civantos.>\n"
"Language-Team: Manuel AC <manuel.acevedo@civantos.com>\n"
msgstr ""
"Project-Id-Version: DCP-o-matic FRENCH\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-04-09 11:14+0100\n"
+"POT-Creation-Date: 2013-04-22 15:06+0100\n"
"PO-Revision-Date: 2013-03-13 22:33+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
msgstr ""
"Project-Id-Version: IT VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-04-09 11:14+0100\n"
+"POT-Creation-Date: 2013-04-22 15:06+0100\n"
"PO-Revision-Date: 2013-04-03 13:00+0100\n"
"Last-Translator: Maci <macibro@gmail.com>\n"
"Language-Team: \n"
msgstr ""
"Project-Id-Version: DCP-o-matic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-04-09 11:14+0100\n"
+"POT-Creation-Date: 2013-04-22 15:06+0100\n"
"PO-Revision-Date: 2013-04-09 10:12+0100\n"
"Last-Translator: Adam Klotblixt <adam.klotblixt@gmail.com>\n"
"Language-Team: \n"
static int frame = 0;
void
-process_video (shared_ptr<Image> image, bool, shared_ptr<Subtitle> sub)
+process_video (shared_ptr<const Image> image, bool, shared_ptr<Subtitle> sub)
{
shared_ptr<DCPVideoFrame> local (
new DCPVideoFrame (
return;
}
- shared_ptr<Image> input = _raw_frame;
+ shared_ptr<const Image> input = _raw_frame;
pair<string, string> const s = Filter::ffmpeg_strings (_film->filters());
if (!s.second.empty ()) {
}
void
-FilmViewer::process_video (shared_ptr<Image> image, bool, shared_ptr<Subtitle> sub, double t)
+FilmViewer::process_video (shared_ptr<const Image> image, bool, shared_ptr<Subtitle> sub, double t)
{
_raw_frame = image;
_raw_sub = sub;
void slider_moved (wxScrollEvent &);
void play_clicked (wxCommandEvent &);
void timer (wxTimerEvent &);
- void process_video (boost::shared_ptr<Image>, bool, boost::shared_ptr<Subtitle>, double);
+ void process_video (boost::shared_ptr<const Image>, bool, boost::shared_ptr<Subtitle>, double);
void calculate_sizes ();
void check_play_state ();
void update_from_raw ();
wxToggleButton* _play_button;
wxTimer _timer;
- boost::shared_ptr<Image> _raw_frame;
+ boost::shared_ptr<const Image> _raw_frame;
boost::shared_ptr<Subtitle> _raw_sub;
- boost::shared_ptr<Image> _display_frame;
+ boost::shared_ptr<const Image> _display_frame;
/* The x offset at which we display the actual film content; this corresponds
to the film's padding converted to our coordinates.
*/
msgstr ""
"Project-Id-Version: libdcpomatic-wx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-04-09 11:14+0100\n"
+"POT-Creation-Date: 2013-04-22 15:06+0100\n"
"PO-Revision-Date: 2013-04-02 19:08-0500\n"
"Last-Translator: Manuel AC <manuel.acevedo@civantos.>\n"
"Language-Team: Manuel AC <manuel.acevedo@civantos.com>\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.5.5\n"
-#: src/wx/film_editor.cc:445
+#: src/wx/film_editor.cc:449
msgid "%"
msgstr "%"
msgid "(restart DCP-o-matic to see language changes)"
msgstr ""
-#: src/wx/film_editor.cc:1269
+#: src/wx/film_editor.cc:1276
msgid "1 channel"
msgstr "1 canal"
msgid "Audio"
msgstr "Audio"
-#: src/wx/film_editor.cc:381
+#: src/wx/film_editor.cc:385
msgid "Audio Delay"
msgstr "Retardo del audio"
-#: src/wx/film_editor.cc:369
+#: src/wx/film_editor.cc:373
msgid "Audio Gain"
msgstr "Ganancia del audio"
msgid "Audio Language (e.g. EN)"
msgstr "Idioma del audio (ej. ES)"
-#: src/wx/film_editor.cc:820
+#: src/wx/film_editor.cc:824
#, c-format
msgid "Audio will be resampled from %dHz to %dHz\n"
msgstr ""
msgid "Bad setting for %s (%s)"
msgstr "Configuración erronea para %s (%s)"
-#: src/wx/film_editor.cc:288
+#: src/wx/film_editor.cc:292
msgid "Bottom crop"
msgstr "Recortar abajo"
msgid "But I have to use fader"
msgstr "pero tengo que usar el fader a"
-#: src/wx/film_editor.cc:374
+#: src/wx/film_editor.cc:378
msgid "Calculate..."
msgstr "Calcular..."
msgid "Channels"
msgstr "Canales"
-#: src/wx/film_editor.cc:325
+#: src/wx/film_editor.cc:329
msgid "Colour look-up table"
msgstr "Tabla de referencia de colores"
msgid "Content Type"
msgstr "Tipo de contenido"
-#: src/wx/film_viewer.cc:415
+#: src/wx/film_viewer.cc:451
#, c-format
msgid "Could not decode video for view (%s)"
msgstr "No se pudo decodificar el vídeo para mostrarlo (%s)"
msgid "Could not make DCP: %s"
msgstr "No se pudo crear el DCP: %s"
-#: src/wx/film_viewer.cc:107
+#: src/wx/film_viewer.cc:125
#, c-format
msgid "Could not open content file (%s)"
msgstr "No se pudo abrir el fichero (%s)"
-#: src/wx/film_editor.cc:509
+#: src/wx/film_editor.cc:513
#, c-format
msgid "Could not set content: %s"
msgstr "No se pudo establecer el contenido: %s"
msgid "Create in folder"
msgstr "Crear en carpeta"
-#: src/wx/film_editor.cc:1363
+#: src/wx/film_editor.cc:1371
#, c-format
msgid "Cropped to %dx%d (%.2f:1)\n"
msgstr ""
msgstr "Editar"
#: src/wx/config_dialog.cc:103 src/wx/config_dialog.cc:122
-#: src/wx/film_editor.cc:308
+#: src/wx/film_editor.cc:312
msgid "Edit..."
msgstr "Editar..."
msgid "Encoding Servers"
msgstr "Servidores de codificación"
-#: src/wx/film_editor.cc:176
+#: src/wx/film_editor.cc:171
msgid "End"
msgstr "Fin"
msgid "Film name"
msgstr "Nombre de la película"
-#: src/wx/film_editor.cc:303 src/wx/filter_dialog.cc:32
+#: src/wx/film_editor.cc:307 src/wx/filter_dialog.cc:32
msgid "Filters"
msgstr "Filtros"
-#: src/wx/film_editor.cc:268
+#: src/wx/film_editor.cc:272
msgid "Format"
msgstr "Formato"
msgid "Host name or IP address"
msgstr "Nombre o dirección IP"
-#: src/wx/film_editor.cc:1273
+#: src/wx/film_editor.cc:1280
msgid "Hz"
msgstr "Hz"
msgid "IP address"
msgstr "Dirección IP"
-#: src/wx/film_editor.cc:335
+#: src/wx/film_editor.cc:339
msgid "JPEG2000 bandwidth"
msgstr "Ancho de banda JPEG2000"
-#: src/wx/film_editor.cc:273
+#: src/wx/film_editor.cc:277
msgid "Left crop"
msgstr "Recorte izquierda"
-#: src/wx/film_editor.cc:164
+#: src/wx/film_editor.cc:159
msgid "Length"
msgstr "Longitud"
-#: src/wx/film_editor.cc:339
+#: src/wx/film_editor.cc:343
msgid "MBps"
msgstr "MBps"
msgid "New Film"
msgstr "Nueva película"
-#: src/wx/film_editor.cc:305 src/wx/film_editor.cc:667
+#: src/wx/film_editor.cc:309 src/wx/film_editor.cc:671
msgid "None"
msgstr "Ninguno"
msgid "Original Frame Rate"
msgstr "Velocidad original"
-#: src/wx/film_editor.cc:159
-msgid "Original Size"
-msgstr "Tamaño original"
-
-#: src/wx/film_editor.cc:1352
+#: src/wx/film_editor.cc:1360
#, c-format
msgid "Original video is %dx%d (%.2f:1)\n"
msgstr ""
msgid "Package Type (e.g. OV)"
msgstr "Tipo de paquete (ej. OV)"
-#: src/wx/film_editor.cc:1384
+#: src/wx/film_editor.cc:1392
#, c-format
msgid "Padded with black to %dx%d (%.2f:1)\n"
msgstr ""
msgid "Peak"
msgstr "Pico"
-#: src/wx/film_viewer.cc:54
+#: src/wx/film_viewer.cc:58
msgid "Play"
msgstr "Reproducir"
msgid "Remove"
msgstr "Quitar"
-#: src/wx/film_editor.cc:278
+#: src/wx/film_editor.cc:282
msgid "Right crop"
msgstr "Recorte derecha"
msgid "Running"
msgstr "Ejecutando"
-#: src/wx/film_editor.cc:1376
+#: src/wx/film_editor.cc:1384
#, c-format
msgid "Scaled to %dx%d (%.2f:1)\n"
msgstr ""
-#: src/wx/film_editor.cc:315
+#: src/wx/film_editor.cc:319
msgid "Scaler"
msgstr "Escalador"
-#: src/wx/film_editor.cc:407
+#: src/wx/film_editor.cc:411
msgid "Select Audio File"
msgstr "Seleccionar fichero de audio"
msgid "Set language"
msgstr ""
-#: src/wx/film_editor.cc:364
+#: src/wx/film_editor.cc:368
msgid "Show Audio..."
msgstr "Mostrar audio..."
msgid "Smoothing"
msgstr "Suavizado"
-#: src/wx/film_editor.cc:173
+#: src/wx/film_editor.cc:168
msgid "Start"
msgstr "Inicio"
msgid "Subtitle Language (e.g. FR)"
msgstr "Idioma del subtítulo (ej. EN)"
-#: src/wx/film_editor.cc:432
+#: src/wx/film_editor.cc:436
msgid "Subtitle Offset"
msgstr "Desplazamiento del subtítulo"
-#: src/wx/film_editor.cc:441
+#: src/wx/film_editor.cc:445
msgid "Subtitle Scale"
msgstr "Escala del subtítulo"
msgid "Time"
msgstr "Tiempo"
-#: src/wx/film_editor.cc:283
+#: src/wx/film_editor.cc:287
msgid "Top crop"
msgstr "Recortar arriba"
-#: src/wx/film_editor.cc:171
+#: src/wx/film_editor.cc:166
msgid "Trim frames"
msgstr "Recortar fotogramas"
+#: src/wx/film_editor.cc:179
+#, fuzzy
+msgid "Trim method"
+msgstr "Recortar fotogramas"
+
#: src/wx/film_editor.cc:125
msgid "Trust content's header"
msgstr "Confiar en la cabecera del contenido"
msgid "Use best"
msgstr "Usar la mejor"
-#: src/wx/film_editor.cc:391
+#: src/wx/film_editor.cc:395
msgid "Use content's audio"
msgstr "Usar el audio del contenido"
-#: src/wx/film_editor.cc:401
+#: src/wx/film_editor.cc:405
msgid "Use external audio"
msgstr "Usar audio externo"
msgid "Video"
msgstr "Vídeo"
-#: src/wx/film_editor.cc:424
+#: src/wx/film_editor.cc:428
msgid "With Subtitles"
msgstr "Con subtítulos"
-#: src/wx/film_editor.cc:1271
+#: src/wx/film_editor.cc:1278
msgid "channels"
msgstr "canales"
msgid "counting..."
msgstr "contando..."
-#: src/wx/film_editor.cc:373
+#: src/wx/film_editor.cc:377
msgid "dB"
msgstr "dB"
-#: src/wx/film_editor.cc:696 src/wx/film_editor.cc:699
+#: src/wx/film_editor.cc:212
+msgid "encode all frames and play the subset"
+msgstr ""
+
+#: src/wx/film_editor.cc:213
+msgid "encode only the subset"
+msgstr ""
+
+#: src/wx/film_editor.cc:694 src/wx/film_editor.cc:697
msgid "frames"
msgstr "fotogramas"
#. / TRANSLATORS: this is an abbreviation for milliseconds, the unit of time
-#: src/wx/film_editor.cc:386
+#: src/wx/film_editor.cc:390
msgid "ms"
msgstr "ms"
-#: src/wx/film_editor.cc:436
+#: src/wx/film_editor.cc:440
msgid "pixels"
msgstr ""
#: src/wx/properties_dialog.cc:62 src/wx/properties_dialog.cc:63
msgid "unknown"
msgstr "desconocido"
+
+#~ msgid "Original Size"
+#~ msgstr "Tamaño original"
msgstr ""
"Project-Id-Version: DCP-o-matic FRENCH\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-04-09 11:14+0100\n"
+"POT-Creation-Date: 2013-04-22 15:06+0100\n"
"PO-Revision-Date: 2013-03-20 00:34+0100\n"
"Last-Translator: FreeDCP.net <freedcp.net@gmail.com>\n"
"Language-Team: \n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: src/wx/film_editor.cc:445
+#: src/wx/film_editor.cc:449
msgid "%"
msgstr "%"
msgid "(restart DCP-o-matic to see language changes)"
msgstr ""
-#: src/wx/film_editor.cc:1269
+#: src/wx/film_editor.cc:1276
msgid "1 channel"
msgstr "1 canal"
msgid "Audio"
msgstr "Audio"
-#: src/wx/film_editor.cc:381
+#: src/wx/film_editor.cc:385
msgid "Audio Delay"
msgstr "Délai audio"
-#: src/wx/film_editor.cc:369
+#: src/wx/film_editor.cc:373
msgid "Audio Gain"
msgstr "Gain audio"
msgid "Audio Language (e.g. EN)"
msgstr "Langue audio (ex. FR)"
-#: src/wx/film_editor.cc:820
+#: src/wx/film_editor.cc:824
#, c-format
msgid "Audio will be resampled from %dHz to %dHz\n"
msgstr ""
msgid "Bad setting for %s (%s)"
msgstr "Mauvais paramètre pour %s (%s)"
-#: src/wx/film_editor.cc:288
+#: src/wx/film_editor.cc:292
msgid "Bottom crop"
msgstr "Découpe bas"
msgid "But I have to use fader"
msgstr "Je souhaite utiliser ce volume"
-#: src/wx/film_editor.cc:374
+#: src/wx/film_editor.cc:378
msgid "Calculate..."
msgstr "Calcul..."
msgid "Channels"
msgstr "Canaux"
-#: src/wx/film_editor.cc:325
+#: src/wx/film_editor.cc:329
msgid "Colour look-up table"
msgstr "Espace colorimétrique"
msgid "Content Type"
msgstr "Type de Contenu"
-#: src/wx/film_viewer.cc:415
+#: src/wx/film_viewer.cc:451
#, c-format
msgid "Could not decode video for view (%s)"
msgstr "Décodage de la vidéo pour visualisation impossible (%s)"
msgid "Could not make DCP: %s"
msgstr "Impossible de créer le DCP : %s"
-#: src/wx/film_viewer.cc:107
+#: src/wx/film_viewer.cc:125
#, c-format
msgid "Could not open content file (%s)"
msgstr "Ouverture du contenu impossible (%s)"
-#: src/wx/film_editor.cc:509
+#: src/wx/film_editor.cc:513
#, c-format
msgid "Could not set content: %s"
msgstr "Sélectionner du contenu impossible : %s"
msgid "Create in folder"
msgstr "Créer dans le dossier"
-#: src/wx/film_editor.cc:1363
+#: src/wx/film_editor.cc:1371
#, c-format
msgid "Cropped to %dx%d (%.2f:1)\n"
msgstr ""
msgstr "Édition"
#: src/wx/config_dialog.cc:103 src/wx/config_dialog.cc:122
-#: src/wx/film_editor.cc:308
+#: src/wx/film_editor.cc:312
msgid "Edit..."
msgstr "Éditer..."
msgid "Encoding Servers"
msgstr "Serveurs d'encodage"
-#: src/wx/film_editor.cc:176
+#: src/wx/film_editor.cc:171
msgid "End"
msgstr "Fin"
msgid "Film name"
msgstr "Nom du Film"
-#: src/wx/film_editor.cc:303 src/wx/filter_dialog.cc:32
+#: src/wx/film_editor.cc:307 src/wx/filter_dialog.cc:32
msgid "Filters"
msgstr "Filtres"
-#: src/wx/film_editor.cc:268
+#: src/wx/film_editor.cc:272
msgid "Format"
msgstr "Format"
msgid "Host name or IP address"
msgstr "Nom de l'hôte ou adresse IP"
-#: src/wx/film_editor.cc:1273
+#: src/wx/film_editor.cc:1280
msgid "Hz"
msgstr "Hz"
msgid "IP address"
msgstr "Adresse IP"
-#: src/wx/film_editor.cc:335
+#: src/wx/film_editor.cc:339
msgid "JPEG2000 bandwidth"
msgstr "Qualité JPEG2000"
-#: src/wx/film_editor.cc:273
+#: src/wx/film_editor.cc:277
msgid "Left crop"
msgstr "Découpe gauche"
-#: src/wx/film_editor.cc:164
+#: src/wx/film_editor.cc:159
msgid "Length"
msgstr "Longueur / durée"
-#: src/wx/film_editor.cc:339
+#: src/wx/film_editor.cc:343
msgid "MBps"
msgstr "MBps"
msgid "New Film"
msgstr "Nouveau Film"
-#: src/wx/film_editor.cc:305 src/wx/film_editor.cc:667
+#: src/wx/film_editor.cc:309 src/wx/film_editor.cc:671
msgid "None"
msgstr "Aucun"
msgid "Original Frame Rate"
msgstr "Cadence d'images originale"
-#: src/wx/film_editor.cc:159
-msgid "Original Size"
-msgstr "Taille Originale"
-
-#: src/wx/film_editor.cc:1352
+#: src/wx/film_editor.cc:1360
#, c-format
msgid "Original video is %dx%d (%.2f:1)\n"
msgstr ""
msgid "Package Type (e.g. OV)"
msgstr "Type de paquet (ex. OV)"
-#: src/wx/film_editor.cc:1384
+#: src/wx/film_editor.cc:1392
#, c-format
msgid "Padded with black to %dx%d (%.2f:1)\n"
msgstr ""
msgid "Peak"
msgstr "Crête"
-#: src/wx/film_viewer.cc:54
+#: src/wx/film_viewer.cc:58
msgid "Play"
msgstr "Lecture"
msgid "Remove"
msgstr "Supprimer"
-#: src/wx/film_editor.cc:278
+#: src/wx/film_editor.cc:282
msgid "Right crop"
msgstr "Découpe droite"
msgid "Running"
msgstr "Progression"
-#: src/wx/film_editor.cc:1376
+#: src/wx/film_editor.cc:1384
#, c-format
msgid "Scaled to %dx%d (%.2f:1)\n"
msgstr ""
-#: src/wx/film_editor.cc:315
+#: src/wx/film_editor.cc:319
msgid "Scaler"
msgstr "Mise à l'échelle"
-#: src/wx/film_editor.cc:407
+#: src/wx/film_editor.cc:411
msgid "Select Audio File"
msgstr "Sélectionner le fichier son"
msgid "Set language"
msgstr ""
-#: src/wx/film_editor.cc:364
+#: src/wx/film_editor.cc:368
msgid "Show Audio..."
msgstr "Analyser le son..."
msgid "Smoothing"
msgstr "Lissage"
-#: src/wx/film_editor.cc:173
+#: src/wx/film_editor.cc:168
msgid "Start"
msgstr "Début"
msgid "Subtitle Language (e.g. FR)"
msgstr "Langue de sous-titres (ex. FR)"
-#: src/wx/film_editor.cc:432
+#: src/wx/film_editor.cc:436
msgid "Subtitle Offset"
msgstr "Décalage du sous-titre"
-#: src/wx/film_editor.cc:441
+#: src/wx/film_editor.cc:445
msgid "Subtitle Scale"
msgstr "Taille du sous-titre"
msgid "Time"
msgstr "Durée"
-#: src/wx/film_editor.cc:283
+#: src/wx/film_editor.cc:287
msgid "Top crop"
msgstr "Découpe haut"
-#: src/wx/film_editor.cc:171
+#: src/wx/film_editor.cc:166
msgid "Trim frames"
msgstr "Images coupées"
+#: src/wx/film_editor.cc:179
+msgid "Trim method"
+msgstr "Méthod de découpage"
+
#: src/wx/film_editor.cc:125
msgid "Trust content's header"
msgstr "Faire confiance à l'en-tête"
msgid "Use best"
msgstr "Automatique"
-#: src/wx/film_editor.cc:391
+#: src/wx/film_editor.cc:395
msgid "Use content's audio"
msgstr "Utiliser le son intégré"
-#: src/wx/film_editor.cc:401
+#: src/wx/film_editor.cc:405
msgid "Use external audio"
msgstr "Utiliser une source audio externe"
msgid "Video"
msgstr "Vidéo"
-#: src/wx/film_editor.cc:424
+#: src/wx/film_editor.cc:428
msgid "With Subtitles"
msgstr "Avec sous-titres"
-#: src/wx/film_editor.cc:1271
+#: src/wx/film_editor.cc:1278
msgid "channels"
msgstr "canaux"
msgid "counting..."
msgstr "calcul..."
-#: src/wx/film_editor.cc:373
+#: src/wx/film_editor.cc:377
msgid "dB"
msgstr "dB"
-#: src/wx/film_editor.cc:696 src/wx/film_editor.cc:699
+#: src/wx/film_editor.cc:212
+msgid "encode all frames and play the subset"
+msgstr "encoder toutes les images mais lire seulement la sélection"
+
+#: src/wx/film_editor.cc:213
+msgid "encode only the subset"
+msgstr "encoder seulement la sélection"
+
+#: src/wx/film_editor.cc:694 src/wx/film_editor.cc:697
msgid "frames"
msgstr "images"
#. / TRANSLATORS: this is an abbreviation for milliseconds, the unit of time
-#: src/wx/film_editor.cc:386
+#: src/wx/film_editor.cc:390
msgid "ms"
msgstr "ms"
-#: src/wx/film_editor.cc:436
+#: src/wx/film_editor.cc:440
msgid "pixels"
msgstr ""
#: src/wx/properties_dialog.cc:62 src/wx/properties_dialog.cc:63
msgid "unknown"
msgstr "inconnu"
+
+#~ msgid "Original Size"
+#~ msgstr "Taille Originale"
msgstr ""
"Project-Id-Version: IT VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-04-09 11:14+0100\n"
+"POT-Creation-Date: 2013-04-22 15:06+0100\n"
"PO-Revision-Date: 2013-04-03 12:37+0100\n"
"Last-Translator: Maci <macibro@gmail.com>\n"
"Language-Team: \n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.5.5\n"
-#: src/wx/film_editor.cc:445
+#: src/wx/film_editor.cc:449
msgid "%"
msgstr "%"
msgid "(restart DCP-o-matic to see language changes)"
msgstr "(riavviare DCP-o-matic per vedere i cambiamenti di lingua)"
-#: src/wx/film_editor.cc:1269
+#: src/wx/film_editor.cc:1276
msgid "1 channel"
msgstr "Canale 1"
msgid "Audio"
msgstr "Audio"
-#: src/wx/film_editor.cc:381
+#: src/wx/film_editor.cc:385
msgid "Audio Delay"
msgstr "Ritardo dell'audio"
-#: src/wx/film_editor.cc:369
+#: src/wx/film_editor.cc:373
msgid "Audio Gain"
msgstr "Guadagno dell'audio"
msgid "Audio Language (e.g. EN)"
msgstr "Lingua dell'audio (es. EN)"
-#: src/wx/film_editor.cc:820
+#: src/wx/film_editor.cc:824
#, c-format
msgid "Audio will be resampled from %dHz to %dHz\n"
msgstr ""
msgid "Bad setting for %s (%s)"
msgstr "Valore sbagliato per %s (%s)"
-#: src/wx/film_editor.cc:288
+#: src/wx/film_editor.cc:292
msgid "Bottom crop"
msgstr "Taglio in basso"
msgid "But I have to use fader"
msgstr "Ma dovrò riprodurre con il fader a"
-#: src/wx/film_editor.cc:374
+#: src/wx/film_editor.cc:378
msgid "Calculate..."
msgstr "Calcola..."
msgid "Channels"
msgstr "Canali"
-#: src/wx/film_editor.cc:325
+#: src/wx/film_editor.cc:329
msgid "Colour look-up table"
msgstr "Tabella per ricerca del colore"
msgid "Content Type"
msgstr "Tipo di contenuto"
-#: src/wx/film_viewer.cc:415
+#: src/wx/film_viewer.cc:451
#, c-format
msgid "Could not decode video for view (%s)"
msgstr "Non posso decodificare il video per guardarlo (%s)"
msgid "Could not make DCP: %s"
msgstr "Non posso creare il DCP: %s"
-#: src/wx/film_viewer.cc:107
+#: src/wx/film_viewer.cc:125
#, c-format
msgid "Could not open content file (%s)"
msgstr "Non posso aprire il file del contenuto (%s)"
-#: src/wx/film_editor.cc:509
+#: src/wx/film_editor.cc:513
#, c-format
msgid "Could not set content: %s"
msgstr "Non posso regolare il contenuto: %s"
msgid "Create in folder"
msgstr "Crea nella cartella"
-#: src/wx/film_editor.cc:1363
+#: src/wx/film_editor.cc:1371
#, c-format
msgid "Cropped to %dx%d (%.2f:1)\n"
msgstr ""
msgstr "Modifica"
#: src/wx/config_dialog.cc:103 src/wx/config_dialog.cc:122
-#: src/wx/film_editor.cc:308
+#: src/wx/film_editor.cc:312
msgid "Edit..."
msgstr "Modifica..."
msgid "Encoding Servers"
msgstr "Servers di codifica"
-#: src/wx/film_editor.cc:176
+#: src/wx/film_editor.cc:171
msgid "End"
msgstr "Fine"
msgid "Film name"
msgstr "Nome del film"
-#: src/wx/film_editor.cc:303 src/wx/filter_dialog.cc:32
+#: src/wx/film_editor.cc:307 src/wx/filter_dialog.cc:32
msgid "Filters"
msgstr "Filtri"
-#: src/wx/film_editor.cc:268
+#: src/wx/film_editor.cc:272
msgid "Format"
msgstr "Formato"
msgid "Host name or IP address"
msgstr "Nome dell'Host o indirizzo IP"
-#: src/wx/film_editor.cc:1273
+#: src/wx/film_editor.cc:1280
msgid "Hz"
msgstr "Hz"
msgid "IP address"
msgstr "Indirizzo IP"
-#: src/wx/film_editor.cc:335
+#: src/wx/film_editor.cc:339
msgid "JPEG2000 bandwidth"
msgstr "Banda passante JPEG2000"
-#: src/wx/film_editor.cc:273
+#: src/wx/film_editor.cc:277
msgid "Left crop"
msgstr "Taglio a sinistra"
-#: src/wx/film_editor.cc:164
+#: src/wx/film_editor.cc:159
msgid "Length"
msgstr "Lunghezza"
-#: src/wx/film_editor.cc:339
+#: src/wx/film_editor.cc:343
msgid "MBps"
msgstr "MBps"
msgid "New Film"
msgstr "Nuovo Film"
-#: src/wx/film_editor.cc:305 src/wx/film_editor.cc:667
+#: src/wx/film_editor.cc:309 src/wx/film_editor.cc:671
msgid "None"
msgstr "Nessuno"
msgid "Original Frame Rate"
msgstr "Frequenza fotogrammi originale"
-#: src/wx/film_editor.cc:159
-msgid "Original Size"
-msgstr "Dimensione Originale"
-
-#: src/wx/film_editor.cc:1352
+#: src/wx/film_editor.cc:1360
#, c-format
msgid "Original video is %dx%d (%.2f:1)\n"
msgstr ""
msgid "Package Type (e.g. OV)"
msgstr "Tipo di Package (es. OV)"
-#: src/wx/film_editor.cc:1384
+#: src/wx/film_editor.cc:1392
#, c-format
msgid "Padded with black to %dx%d (%.2f:1)\n"
msgstr ""
msgid "Peak"
msgstr "Picco"
-#: src/wx/film_viewer.cc:54
+#: src/wx/film_viewer.cc:58
msgid "Play"
msgstr "Riproduci"
msgid "Remove"
msgstr "Rimuovi"
-#: src/wx/film_editor.cc:278
+#: src/wx/film_editor.cc:282
msgid "Right crop"
msgstr "Taglio a destra"
msgid "Running"
msgstr "In corso"
-#: src/wx/film_editor.cc:1376
+#: src/wx/film_editor.cc:1384
#, c-format
msgid "Scaled to %dx%d (%.2f:1)\n"
msgstr ""
-#: src/wx/film_editor.cc:315
+#: src/wx/film_editor.cc:319
msgid "Scaler"
msgstr "Scaler"
-#: src/wx/film_editor.cc:407
+#: src/wx/film_editor.cc:411
msgid "Select Audio File"
msgstr "Seleziona file audio"
msgid "Set language"
msgstr "Seleziona la lingua"
-#: src/wx/film_editor.cc:364
+#: src/wx/film_editor.cc:368
msgid "Show Audio..."
msgstr "Mostra Audio..."
msgid "Smoothing"
msgstr "Levigatura"
-#: src/wx/film_editor.cc:173
+#: src/wx/film_editor.cc:168
msgid "Start"
msgstr "Inizio"
msgid "Subtitle Language (e.g. FR)"
msgstr "Lingua dei Sottotitoli (es. FR)"
-#: src/wx/film_editor.cc:432
+#: src/wx/film_editor.cc:436
msgid "Subtitle Offset"
msgstr "Sfalsamento dei Sottotitoli"
-#: src/wx/film_editor.cc:441
+#: src/wx/film_editor.cc:445
msgid "Subtitle Scale"
msgstr "Scala dei Sottotitoli"
msgid "Time"
msgstr "Tempo"
-#: src/wx/film_editor.cc:283
+#: src/wx/film_editor.cc:287
msgid "Top crop"
msgstr "Taglio in alto"
-#: src/wx/film_editor.cc:171
+#: src/wx/film_editor.cc:166
msgid "Trim frames"
msgstr "Taglia fotogrammi"
+#: src/wx/film_editor.cc:179
+#, fuzzy
+msgid "Trim method"
+msgstr "Taglia fotogrammi"
+
#: src/wx/film_editor.cc:125
msgid "Trust content's header"
msgstr "Conferma l'intestazione del contenuto"
msgid "Use best"
msgstr "Usa la migliore"
-#: src/wx/film_editor.cc:391
+#: src/wx/film_editor.cc:395
msgid "Use content's audio"
msgstr "Usa l'audio del contenuto"
-#: src/wx/film_editor.cc:401
+#: src/wx/film_editor.cc:405
msgid "Use external audio"
msgstr "Usa l'audio esterno"
msgid "Video"
msgstr "Video"
-#: src/wx/film_editor.cc:424
+#: src/wx/film_editor.cc:428
msgid "With Subtitles"
msgstr "Con Sottotitoli"
-#: src/wx/film_editor.cc:1271
+#: src/wx/film_editor.cc:1278
msgid "channels"
msgstr "canali"
msgid "counting..."
msgstr "conteggio..."
-#: src/wx/film_editor.cc:373
+#: src/wx/film_editor.cc:377
msgid "dB"
msgstr "dB"
-#: src/wx/film_editor.cc:696 src/wx/film_editor.cc:699
+#: src/wx/film_editor.cc:212
+msgid "encode all frames and play the subset"
+msgstr ""
+
+#: src/wx/film_editor.cc:213
+msgid "encode only the subset"
+msgstr ""
+
+#: src/wx/film_editor.cc:694 src/wx/film_editor.cc:697
msgid "frames"
msgstr "fotogrammi"
#. / TRANSLATORS: this is an abbreviation for milliseconds, the unit of time
-#: src/wx/film_editor.cc:386
+#: src/wx/film_editor.cc:390
msgid "ms"
msgstr "ms"
-#: src/wx/film_editor.cc:436
+#: src/wx/film_editor.cc:440
msgid "pixels"
msgstr ""
#: src/wx/properties_dialog.cc:62 src/wx/properties_dialog.cc:63
msgid "unknown"
msgstr "sconosciuto"
+
+#~ msgid "Original Size"
+#~ msgstr "Dimensione Originale"
msgstr ""
"Project-Id-Version: DCP-o-matic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-04-09 11:14+0100\n"
+"POT-Creation-Date: 2013-04-22 15:06+0100\n"
"PO-Revision-Date: 2013-04-09 10:13+0100\n"
"Last-Translator: Adam Klotblixt <adam.klotblixt@gmail.com>\n"
"Language-Team: \n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.5.5\n"
-#: src/wx/film_editor.cc:445
+#: src/wx/film_editor.cc:449
msgid "%"
msgstr "%"
msgid "(restart DCP-o-matic to see language changes)"
msgstr "(starta om DCP-o-matic för att se språkändringar)"
-#: src/wx/film_editor.cc:1269
+#: src/wx/film_editor.cc:1276
msgid "1 channel"
msgstr "1 kanal"
msgid "Audio"
msgstr "Audio"
-#: src/wx/film_editor.cc:381
+#: src/wx/film_editor.cc:385
msgid "Audio Delay"
msgstr "Audio Fördröjning"
-#: src/wx/film_editor.cc:369
+#: src/wx/film_editor.cc:373
msgid "Audio Gain"
msgstr "Audio Förstärkning"
msgid "Audio Language (e.g. EN)"
msgstr "Audio Språk (ex. SV)"
-#: src/wx/film_editor.cc:820
+#: src/wx/film_editor.cc:824
#, c-format
msgid "Audio will be resampled from %dHz to %dHz\n"
msgstr "Audio kommer att samplas om från %dHz till %dHz\n"
msgid "Bad setting for %s (%s)"
msgstr "Felaktig inställning för %s (%s)"
-#: src/wx/film_editor.cc:288
+#: src/wx/film_editor.cc:292
msgid "Bottom crop"
msgstr "Nedre beskärning"
msgid "But I have to use fader"
msgstr "Men jag måste använda mixervolym"
-#: src/wx/film_editor.cc:374
+#: src/wx/film_editor.cc:378
msgid "Calculate..."
msgstr "Beräkna..."
msgid "Channels"
msgstr "Kanaler"
-#: src/wx/film_editor.cc:325
+#: src/wx/film_editor.cc:329
msgid "Colour look-up table"
msgstr "Färguppslagningstabell"
msgid "Content Type"
msgstr "Innehållstyp"
-#: src/wx/film_viewer.cc:415
+#: src/wx/film_viewer.cc:451
#, c-format
msgid "Could not decode video for view (%s)"
msgstr "Kunde inte avkoda video för visning (%s)"
msgid "Could not make DCP: %s"
msgstr "Kunde inte skapa DCP: %s"
-#: src/wx/film_viewer.cc:107
+#: src/wx/film_viewer.cc:125
#, c-format
msgid "Could not open content file (%s)"
msgstr "Kunde inte öppna innehållsfilen (%s)"
-#: src/wx/film_editor.cc:509
+#: src/wx/film_editor.cc:513
#, c-format
msgid "Could not set content: %s"
msgstr "Kunde inte fastställa innehåll: %s"
msgid "Create in folder"
msgstr "Skapa i katalog"
-#: src/wx/film_editor.cc:1363
+#: src/wx/film_editor.cc:1371
#, c-format
msgid "Cropped to %dx%d (%.2f:1)\n"
msgstr "Beskuren till %dx%d (%.2f:1)\n"
msgstr "Redigera"
#: src/wx/config_dialog.cc:103 src/wx/config_dialog.cc:122
-#: src/wx/film_editor.cc:308
+#: src/wx/film_editor.cc:312
msgid "Edit..."
msgstr "Redigera..."
msgid "Encoding Servers"
msgstr "Kodningsservrar"
-#: src/wx/film_editor.cc:176
+#: src/wx/film_editor.cc:171
msgid "End"
msgstr "Slut"
msgid "Film name"
msgstr "film namn"
-#: src/wx/film_editor.cc:303 src/wx/filter_dialog.cc:32
+#: src/wx/film_editor.cc:307 src/wx/filter_dialog.cc:32
msgid "Filters"
msgstr "Filter"
-#: src/wx/film_editor.cc:268
+#: src/wx/film_editor.cc:272
msgid "Format"
msgstr "Format"
msgid "Host name or IP address"
msgstr "Värd-namn eller IP-adress"
-#: src/wx/film_editor.cc:1273
+#: src/wx/film_editor.cc:1280
msgid "Hz"
msgstr "Hz"
msgid "IP address"
msgstr "IP-adress"
-#: src/wx/film_editor.cc:335
+#: src/wx/film_editor.cc:339
msgid "JPEG2000 bandwidth"
msgstr "JPEG2000 bandbredd"
-#: src/wx/film_editor.cc:273
+#: src/wx/film_editor.cc:277
msgid "Left crop"
msgstr "Vänster beskärning"
-#: src/wx/film_editor.cc:164
+#: src/wx/film_editor.cc:159
msgid "Length"
msgstr "Längd"
-#: src/wx/film_editor.cc:339
+#: src/wx/film_editor.cc:343
msgid "MBps"
msgstr "MBps"
msgid "New Film"
msgstr "Ny Film"
-#: src/wx/film_editor.cc:305 src/wx/film_editor.cc:667
+#: src/wx/film_editor.cc:309 src/wx/film_editor.cc:671
msgid "None"
msgstr "Inget"
msgid "Original Frame Rate"
msgstr "Ursprunglig bildhastighet"
-#: src/wx/film_editor.cc:159
-msgid "Original Size"
-msgstr "Ursprunglig Storlek"
-
-#: src/wx/film_editor.cc:1352
+#: src/wx/film_editor.cc:1360
#, c-format
msgid "Original video is %dx%d (%.2f:1)\n"
msgstr "Original-videon är %dx%d (%.2f:1)\n"
msgid "Package Type (e.g. OV)"
msgstr "Förpackningstyp (ex. OV)"
-#: src/wx/film_editor.cc:1384
+#: src/wx/film_editor.cc:1392
#, c-format
msgid "Padded with black to %dx%d (%.2f:1)\n"
msgstr "Svarta kanter tillagda för %dx%d (%.2f:1)\n"
msgid "Peak"
msgstr "Topp"
-#: src/wx/film_viewer.cc:54
+#: src/wx/film_viewer.cc:58
msgid "Play"
msgstr "Spela"
msgid "Remove"
msgstr "Ta bort"
-#: src/wx/film_editor.cc:278
+#: src/wx/film_editor.cc:282
msgid "Right crop"
msgstr "Höger beskärning"
msgid "Running"
msgstr "Körs"
-#: src/wx/film_editor.cc:1376
+#: src/wx/film_editor.cc:1384
#, c-format
msgid "Scaled to %dx%d (%.2f:1)\n"
msgstr "Skalad till %dx%d (%.2f:1)\n"
-#: src/wx/film_editor.cc:315
+#: src/wx/film_editor.cc:319
msgid "Scaler"
msgstr "Omskalare"
-#: src/wx/film_editor.cc:407
+#: src/wx/film_editor.cc:411
msgid "Select Audio File"
msgstr "Välj audiofil"
msgid "Set language"
msgstr "Välj språk"
-#: src/wx/film_editor.cc:364
+#: src/wx/film_editor.cc:368
msgid "Show Audio..."
msgstr "Visa Audio..."
msgid "Smoothing"
msgstr "Utjämning"
-#: src/wx/film_editor.cc:173
+#: src/wx/film_editor.cc:168
msgid "Start"
msgstr "Start"
msgid "Subtitle Language (e.g. FR)"
msgstr "Undertextspråk (ex. SV)"
-#: src/wx/film_editor.cc:432
+#: src/wx/film_editor.cc:436
msgid "Subtitle Offset"
msgstr "Undertext Förskjutning"
-#: src/wx/film_editor.cc:441
+#: src/wx/film_editor.cc:445
msgid "Subtitle Scale"
msgstr "Undertext Skalning"
msgid "Time"
msgstr "Tid"
-#: src/wx/film_editor.cc:283
+#: src/wx/film_editor.cc:287
msgid "Top crop"
msgstr "Övre beskärning"
-#: src/wx/film_editor.cc:171
+#: src/wx/film_editor.cc:166
msgid "Trim frames"
msgstr "Skippa bilder"
+#: src/wx/film_editor.cc:179
+#, fuzzy
+msgid "Trim method"
+msgstr "Skippa bilder"
+
#: src/wx/film_editor.cc:125
msgid "Trust content's header"
msgstr "Lita på källans information"
msgid "Use best"
msgstr "Använd bästa"
-#: src/wx/film_editor.cc:391
+#: src/wx/film_editor.cc:395
msgid "Use content's audio"
msgstr "Använd innehållets audio"
-#: src/wx/film_editor.cc:401
+#: src/wx/film_editor.cc:405
msgid "Use external audio"
msgstr "Använd extern audio"
msgid "Video"
msgstr "Video"
-#: src/wx/film_editor.cc:424
+#: src/wx/film_editor.cc:428
msgid "With Subtitles"
msgstr "Med Undertexter"
-#: src/wx/film_editor.cc:1271
+#: src/wx/film_editor.cc:1278
msgid "channels"
msgstr "kanaler"
msgid "counting..."
msgstr "räknar..."
-#: src/wx/film_editor.cc:373
+#: src/wx/film_editor.cc:377
msgid "dB"
msgstr "dB"
-#: src/wx/film_editor.cc:696 src/wx/film_editor.cc:699
+#: src/wx/film_editor.cc:212
+msgid "encode all frames and play the subset"
+msgstr ""
+
+#: src/wx/film_editor.cc:213
+msgid "encode only the subset"
+msgstr ""
+
+#: src/wx/film_editor.cc:694 src/wx/film_editor.cc:697
msgid "frames"
msgstr "bilder"
#. / TRANSLATORS: this is an abbreviation for milliseconds, the unit of time
-#: src/wx/film_editor.cc:386
+#: src/wx/film_editor.cc:390
msgid "ms"
msgstr "ms"
-#: src/wx/film_editor.cc:436
+#: src/wx/film_editor.cc:440
msgid "pixels"
msgstr "pixlar"
#: src/wx/properties_dialog.cc:62 src/wx/properties_dialog.cc:63
msgid "unknown"
msgstr "okänt"
+
+#~ msgid "Original Size"
+#~ msgstr "Ursprunglig Storlek"
}
}
-shared_ptr<AudioBuffers> trimmer_test_last;
+shared_ptr<const Image> trimmer_test_last_video;
+shared_ptr<const AudioBuffers> trimmer_test_last_audio;
void
-trimmer_test_helper (shared_ptr<AudioBuffers> audio)
+trimmer_test_video_helper (shared_ptr<const Image> image, bool, shared_ptr<Subtitle>)
{
- trimmer_test_last = audio;
+ trimmer_test_last_video = image;
}
+void
+trimmer_test_audio_helper (shared_ptr<const AudioBuffers> audio)
+{
+ trimmer_test_last_audio = audio;
+}
+
+BOOST_AUTO_TEST_CASE (trimmer_passthrough_test)
+{
+ Trimmer trimmer (shared_ptr<Log> (), 0, 0, 200, 48000, 25, 25);
+ trimmer.Video.connect (bind (&trimmer_test_video_helper, _1, _2, _3));
+ trimmer.Audio.connect (bind (&trimmer_test_audio_helper, _1));
+
+ shared_ptr<SimpleImage> video (new SimpleImage (PIX_FMT_RGB24, libdcp::Size (1998, 1080), true));
+ shared_ptr<AudioBuffers> audio (new AudioBuffers (6, 42 * 1920));
+
+ trimmer.process_video (video, false, shared_ptr<Subtitle> ());
+ trimmer.process_audio (audio);
+
+ BOOST_CHECK_EQUAL (video.get(), trimmer_test_last_video.get());
+ BOOST_CHECK_EQUAL (audio.get(), trimmer_test_last_audio.get());
+ BOOST_CHECK_EQUAL (audio->frames(), trimmer_test_last_audio->frames());
+}
+
+
/** Test the audio handling of the Trimmer */
-BOOST_AUTO_TEST_CASE (trimmer_test)
+BOOST_AUTO_TEST_CASE (trimmer_audio_test)
{
Trimmer trimmer (shared_ptr<Log> (), 25, 75, 200, 48000, 25, 25);
- trimmer.Audio.connect (bind (&trimmer_test_helper, _1));
+ trimmer.Audio.connect (bind (&trimmer_test_audio_helper, _1));
/* 21 video frames-worth of audio frames; should be completely stripped */
- trimmer_test_last.reset ();
+ trimmer_test_last_audio.reset ();
shared_ptr<AudioBuffers> audio (new AudioBuffers (6, 21 * 1920));
trimmer.process_audio (audio);
- BOOST_CHECK (trimmer_test_last == 0);
+ BOOST_CHECK (trimmer_test_last_audio == 0);
/* 42 more video frames-worth, 4 should be stripped from the start */
audio.reset (new AudioBuffers (6, 42 * 1920));
trimmer.process_audio (audio);
- BOOST_CHECK (trimmer_test_last);
- BOOST_CHECK_EQUAL (trimmer_test_last->frames(), 38 * 1920);
+ BOOST_CHECK (trimmer_test_last_audio);
+ BOOST_CHECK_EQUAL (trimmer_test_last_audio->frames(), 38 * 1920);
/* 42 more video frames-worth, should be kept as-is */
- trimmer_test_last.reset ();
+ trimmer_test_last_audio.reset ();
audio.reset (new AudioBuffers (6, 42 * 1920));
trimmer.process_audio (audio);
- BOOST_CHECK (trimmer_test_last);
- BOOST_CHECK_EQUAL (trimmer_test_last->frames(), 42 * 1920);
+ BOOST_CHECK (trimmer_test_last_audio);
+ BOOST_CHECK_EQUAL (trimmer_test_last_audio->frames(), 42 * 1920);
/* 25 more video frames-worth, 5 should be trimmed from the end */
- trimmer_test_last.reset ();
+ trimmer_test_last_audio.reset ();
audio.reset (new AudioBuffers (6, 25 * 1920));
trimmer.process_audio (audio);
- BOOST_CHECK (trimmer_test_last);
- BOOST_CHECK_EQUAL (trimmer_test_last->frames(), 20 * 1920);
+ BOOST_CHECK (trimmer_test_last_audio);
+ BOOST_CHECK_EQUAL (trimmer_test_last_audio->frames(), 20 * 1920);
/* Now some more; all should be trimmed */
- trimmer_test_last.reset ();
+ trimmer_test_last_audio.reset ();
audio.reset (new AudioBuffers (6, 100 * 1920));
trimmer.process_audio (audio);
- BOOST_CHECK (trimmer_test_last == 0);
+ BOOST_CHECK (trimmer_test_last_audio == 0);
}