| Age | Commit message (Collapse) | Author |
|
then convert it back to resampled content frames using the DCP
rate rather than the resampled content rate, which seems wrong.
If we want to go from metric time to frames we surely have to use
the frame rate of the thing we are working with (not the frame rate
which that thing will be played back at).
Backported from 26c62598730d1d32333bfab0d5f463b90d26ee4d in v2.15.x.
|
|
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.
Backported from df48c75c38dd788835a93540aea243a2dac4bb10 in v2.15.x
|
|
Back-ported from dec5ae11238495c64fffdab37f189d96aed7d636 in v2.15.x.
|
|
coming from the content and the calculated periods of silence.
It sees that there is some scope for disagreements here when
trim start/end times are rounded to frame boundaries.
Fixes #1708.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
it was done too often, I think.
|
|
|
|
Fixes lack of image (sometimes) when trimming drop-frame content.
|
|
trims which do not land precisely on a DCP audio sample boundary
(at least, I think that's what triggers it).
|
|
|
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
sources.
|
|
|
|
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.
|
|
were being emitted.
|
|
- playlist change
- _have_valid_pieces -> false
- signal butler
- but meanwhile, pass happens which calls setup_pieces and starts emitting
data from time 0
- this new data is not in sync with what's already in the audio ring buffers
|
|
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.
|
|
|
|
when moving content (or otherwise changing the playlist) while playing.
This commit refills the butler when things change in certain ways,
and improves locking to cope with Player methods being called from
the GUI and butler threads at the same time.
|
|
|
|
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.
|