| Age | Commit message (Collapse) | Author |
|
are re-written, meaning that they can be encrypted.
This (along with the libdcp update) also fixes assorted Atmos bugs.
|
|
1. scales the content up to fit the DCP container,
preserving aspect ratio, or
2. stretches the content to a custom aspect ratio, or
3. scales the content to some custom size.
|
|
|
|
|
|
4219d4b76c5cd5690b1f4fa0c248d93ced26d05a.
|
|
playlist's length, as appropriate.
|
|
|
|
Before this fix, the following situation could happen in threads
A and B:
A: Some DONE signal happens; this triggers setup_pieces which
takes a lock on the player mutex.
B: FFmpegContent::examine takes a lock on the content mutex.
B: FFmpegContent::examine adds a stream
B: That causes STREAMS PENDING to be emitted.
B: This tries to take a lock on the player mutex so it can update _suspended
A: setup_pieces tries to access some content information, hence
tries to take a lock on the content mutex.
Now B is holding the CL and awaiting the PL and A is holding
the PL and awaiting the CL.
It feels like the root cause of this is that while setup_pieces
is happening another change (which would itself cause setup_pieces)
is announced, and this isn't dealt with properly.
There are two steps here; _suspended is protected with an atomic
rather than using _mutex, and also it can cope with being updated
recursively.
|
|
|
|
This has the same cause as
19f51503621a57794bd79bac053c9e6549a69f46
i.e. the DCPDecoder re-use optimisation. This commit tries to
re-fix 19f515 in a more general way which also takes into account
the OV/VF bug. It also adds a unit test.
|
|
|
|
|
|
|
|
|
|
Pieces, rather than the presence or absence of content. This seems better
because of cases like encrypted DCPs without a a KDM: here we may have content
but no decoder.
|
|
|
|
|
|
the content.
|
|
|
|
this treatment to anything that caused Player::setup_pieces. This should
fix out-of-sequence Player emissions caused by setup_pieces being called
by one thread while the butler is calling pass().
|
|
between Player::_suspended being set to false and the the butler
requesting a seek, during which the butler may call pass().
|
|
and the butler.
Here we signal both before and after a change in content. Before,
the player disables itself so that any pass()/seek() will be no-ops.
After, the player rebuilds its pieces and the butler re-seeks to
get back to where it was before the change.
|
|
|
|
|
|
we always do a seek when we set _have_valid_pieces to false.
|
|
You can't introduce the butler (so that the player is ahead of time)
and then ask the player what should be in the frame that is being
displayed "now"; the player will already have moved on.
|
|
|
|
seek() and pass() may be called from the Butler thread
ad the same time as other Player methods are called from
the GUI thread (by FilmViewer and ClosedCaptionViewDialog).
|
|
|
|
|
|
ActiveCaptions -> ActiveText
BitmapCaption -> BitmapText
ContentCaption -> ContentText
ContentTextCaption -> ContentStringText
TextCaptionFileContent -> StringTextFileContent
TextCaptionFileDecoder -> StringTextFileDecoder
TextCaptionFile -> StringTextFile
TextCaption -> StringText
PlayerCaption -> PlayerText
CaptionContent -> TextContent
CaptionDecoder -> TextDecoder
CaptionPanel -> TextPanel
CaptionView -> TextView
CaptionAppearanceDialog -> SubtitleAppearanceDialog
CaptionType -> TextType
|
|
|
|
which is slightly cleaner and works when subtitles are emitted with an
unknown end time. Also add CCAPs to the player.
|
|
|
|
hold subs and closed captions.
|
|
|
|
|
|
|
|
sed -i "s/ActiveText/ActiveCaptions/g" src/lib/*.{cc,h}
sed -i "s/active_text.h/active_captions.h/g" src/lib/*.{cc,h}
sed -i "s/active_text.cc/active_captions.cc/g" src/lib/wscript
mv src/lib/active_text.cc src/lib/active_captions.cc
mv src/lib/active_text.h src/lib/active_captions.h
sed -i "s/PlainTextFileContent/TextCaptionFileContent/g" src/lib/*.{cc,h} src/wx/*.cc
sed -i "s/PlainTextFile/TextCaptionFile/g" src/lib/*.{cc,h} src/wx/*.cc
sed -i "s/plain_text_file_content/text_caption_file_content/g" src/lib/*.{cc,h} src/lib/wscript src/wx/*.{cc,h} test/*.cc
mv src/lib/plain_text_file_content.cc src/lib/text_caption_file_content.cc
mv src/lib/plain_text_file_content.h src/lib/text_caption_file_content.h
sed -i "s/PlainTextFileDecoder/TextCaptionFileDecoder/g" src/lib/*.{cc,h}
sed -i "s/plain_text_file_decoder/text_caption_file_decoder/g" src/lib/*.{cc,h} src/lib/wscript src/wx/*.{cc,h}
mv src/lib/plain_text_file_decoder.cc src/lib/text_caption_file_decoder.cc
mv src/lib/plain_text_file_decoder.h src/lib/text_caption_file_decoder.h
sed -i "s/PlayerText/PlayerCaption/g" src/lib/*.{cc,h}
sed -i "s/player_text.cc/player_caption.cc/g" src/lib/wscript
sed -i "s/player_text.h/player_caption.h/g" src/lib/*.{cc,h}
mv src/lib/player_text.cc src/lib/player_caption.cc
mv src/lib/player_text.h src/lib/player_caption.h
sed -i "s/ContentPlainText/ContentTextCaption/g" src/lib/*.{cc,h} src/wx/*.{cc,h}
sed -i "s/ContentBitmapText/ContentBitmapCaption/g" src/lib/*.{cc,h} src/wx/*.{cc,h}
sed -i "s/PlainText/TextCaption/g" src/lib/*.{cc,h} test/*.cc
sed -i "s/plain_text.h/text_caption.h/g" src/lib/*.{cc,h}
mv src/lib/plain_text.h src/lib/text_caption.h
|
|
|
|
|
|
PlainText.
|
|
|
|
sed -i "s/emit_text/emit_plain/g" src/lib/*.cc src/lib/*.h
sed -i "s/emit_image_start/emit_bitmap_start/g" src/lib/*.cc src/lib/*.h
sed -i "s/emit_text_start/emit_plain_start/g" src/lib/*.cc src/lib/*.h
sed -i "s/render_subtitles/render_text/g" src/lib/*.cc src/lib/*.h src/lib/wscript test/*.cc
sed -i "s/ImageStart/BitmapStart/g" src/lib/*.cc src/lib/*.h
sed -i "s/TextStart/PlainStart/g" src/lib/*.cc src/lib/*.h test/*.cc src/wx/*.cc
sed -i "s/ImageSubtitle/BitmapText/g" src/lib/*.cc src/lib/*.h
sed -i "s/text_subtitle/plain_text/g" src/lib/*.cc src/lib/*.h src/lib/wscript src/wx/*.cc src/wx/*.h test/*.cc
sed -i "s/image_subtitle/bitmap_text/g" src/lib/*.cc src/lib/*.h
mv src/lib/render_subtitles.cc src/lib/render_text.cc
mv src/lib/render_subtitles.h src/lib/render_text.h
mv src/lib/text_subtitle.cc src/lib/plain_text.cc
mv src/lib/text_subtitle.h src/lib/plain_text.h
|
|
|
|
updated metadata (where possible). Helps with #1194.
|
|
anything passed to emit_video(), not just things that come from
decoders.
|
|
subtitle content the chance to catch up. Fixes problems observed
when overlaying a DCP subtitle onto an existing DCP and then seeking
into the first subtitle. After the seek the decoder positions were:
DCP: 0.
subtitle: first subtitle time.
This causes the DCP decoder to be pass()ed first and so the subtitle
for the video frame has not arrived yet.
I hope this does not cause unpredicted side effects...
|
|
This clearly can happen with separate L/R sources. A pass in L might
emit two frames which means the arrivals can't possibly be in order.
This commit fixes this by introducing a Shuffler which all alternate-3D
sources send their video to. The Shuffler re-orders things before they
arrive at the player.
It also fixes the code which inserts video frames before one that arrives
after a gap. This didn't cope with 3D right before.
The audio code solves a similar (perhaps the same?) problem with the
AudioMerger; perhaps we should have a similar thing for video and make
the player emit complete 3D frames.
Should help with #976.
|
|
|