- 02 Feb, 2022 13 commits
-
-
The current implementation of ExoPlayer Cea708 is processing the whole service block without taking into account the defined service block size, which could cause the execution of unwanted command. The following set of Cea708 represents a real use case of the above. ``` hex FC9420FD152FFF0929FE8CFCFE9818FEE332FE731FFE1044FE8B03FE8CFCFE0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000 FC942CFD1520FF4649FE8CFEFE9918FEE332FE731FFE1000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000 FC942FFD9470FF8924FE8B03FE8CFCFE4A92FE0300FE9005FE0091FE2A00FE0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000 FC9420FD97A1FFC829FE8CFEFE9918FEE332FE731FFE1043FE9203FE0100FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000 FC94D6FDCEEFFF082AFE9202FE0C90FE0500FE912AFE0000FE424EFE6F00FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000 FCC168FD20F4FF4422FE4168FE4220FE7400FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000 FC2C20FDE520FF8422FE2C20FE4265FE2000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000 FC64EFFD70EFFFC422FE646FFE4270FE6F00FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000 FC6EA7FD6E67FF0422FE6E27FE426EFE6700FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000 FCF420FD6173FF4422FE7420FE4261FE7300FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000 FC67E5FD206DFF8422FE6765FE4220FE6D00FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000 FCF480FD7579FFC422FE7403FE4275FE7900FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000 ``` The above frames should be displaying the following text on the screen (or at least the first part of it). ``` Ah, don't get all sappy about it ``` ExoPlayer is currently parsing this block as follow (in parentheses the defined service block size): ``` (2) 22416842207400 G0 A G0 h G0 B G0 \u0020 G0 t C0 COMMAND_NUL (2) 222C2042652000 G0 , G0 \u0020 G0 B G0 e G0 \u0020 C0 COMMAND_NUL (2) 22646F42706F00 G0 d G0 o G0 B G0 p G0 o C0 COMMAND_NUL (2) 226E27426E6700 G0 n G0 ' G0 B G0 n G0 g C0 COMMAND_NUL (2) 22742042617300 G0 t G0 \u0020 G0 B G0 a G0 s C0 COMMAND_NUL (2) 22676542206D00 G0 g G0 e G0 B G0 \u0020 G0 m C0 COMMAND_NUL (2) 22740342757900 G0 t C0 COMMAND_ETX G0 B G0 u G0 y C0 COMMAND_NUL (2) 2392030C4220730000 C1 COMMAND_SPL G0 B G0 \u0020 G0 s C0 COMMAND_NUL C0 COMMAND_NUL (2) 22616C42656E00 G0 a G0 l G0 B G0 e G0 n C0 COMMAND_NUL ``` So it ended up processing the following cue text (additional unwanted commands could be executed as well) ``` AhB t, Be doBpon'Bngt BasgeB mt BuyB salBen ``` If instead the parsing logic take into account the service block size ``` (2) 22416842207400 G0 A G0 h (2) 222C2042652000 G0 , G0 \u0020 (2) 22646F42706F00 G0 d G0 o (2) 226E27426E6700 G0 n G0 ' (2) 22742042617300 G0 t G0 \u0020 (2) 22676542206D00 G0 g G0 e (2) 22740342757900 G0 t C0 COMMAND_ETX (2) 2392030C4220730000 C1 COMMAND_SPL (2) 22616C42656E00 G0 a G0 l ``` which is translated to (again I didn't processed all the frames, just a few of them) ``` Ah, don't get al ``` which is what we are looking for. This PR modifies service block parsing logic to honor service block size instead of read the full service block buffer. Signed-off-by: Jorge Ruesga <jorge@ruesga.com>
Jorge Ruesga committed -
This makes SimpleExoPlayer a simple forwarding wrapper which can be removed in the future. The changes are all purely mechanical with none of the potential further simplifications made yet. The only exceptions are name clashes where either EPI or SEP was calling a method in one of the classes and both classes had different implementations for the same method name. In these cases we needed to disambiguate between the two different implementations (example: ExoPlayerImpl.setListener was renamed to setEventListener). #minor-release PiperOrigin-RevId: 425823095
tonihei committed -
Tested by confirming transformations still work and write to a output file in a scoped-storage directory on a: * Nexus 6P API 23 emulator * Google Pixel 4 API 31 physical device PiperOrigin-RevId: 425644266
huangdarwin committed -
On devices with a smaller screen / low resolution not all options fit, so scrolling is needed. PiperOrigin-RevId: 425635224
hschlueter committed -
More info: go/immutable-map-buildorthrow-lsc NOTE: if the source of truth for this code is *NOT* `third_party`, please let me know and I'll revert this CL (and please consider upstreaming this change yourself). #inlineme Tested: TAP for global presubmit queue passed after automated deflaking of failures: http://mondo/deflaker/run/530857d2-45cb-4069-a234-48c5efe945f1 http://mondo/deflaker/run/0dce4296-e6bb-42d2-8b64-b393f45b6ad3 http://test/OCL:425453729:BASE:425451020:1643699365244:811c1a24 PiperOrigin-RevId: 425616165olly committed -
Introduce an interface EncoderSelector for developers to filter out unwanted encoders. PiperOrigin-RevId: 425611421
claincly committed -
In some cases we create empty playback metrics with no corresponding events (e.g. when an app seeks to a new media item and immediately releases the player). There is no benefit in having completely empty metrics entries, so it's cleaner to not report them in such cases. #minor-release PiperOrigin-RevId: 425609010
tonihei committed -
To fix transformer demo + Nexus emulator bug. #minor-release PiperOrigin-RevId: 425603703
huangdarwin committed -
PiperOrigin-RevId: 425595951
olly committed -
#minor-release PiperOrigin-RevId: 425589448
bachinger committed -
- Add a checkbox in the demo app to enable experimental HDR editing. - Add an `experimental_` method to `TransformationRequest` to enable HDR editing. - Add fragment/vertex shaders for the experimental HDR pipeline. The main difference compared to the existing shaders is that we sample from the decoder in YUV rather than RGB (because the YUV -> RGB conversion in the graphics driver is not precisely defined, so we need to do this to get consistent results), which requires the use of ES 3, and then do a crude YUV -> RGB conversion in the shader (ignoring the input color primaries for now). - When HDR editing is enabled, we force using `FrameEditor` (no passthrough) to avoid the need to select another edit operation, and use the new shaders. The `EGLContext` and `EGLSurface` also need to be set up differently for this path. PiperOrigin-RevId: 425570639
andrewlewis committed -
PiperOrigin-RevId: 425562875
kimvde committed -
Issue: google/ExoPlayer#8213 #minor-release PiperOrigin-RevId: 425381474
ibaker committed
-
- 01 Feb, 2022 9 commits
-
-
TransformerTest sounds like a unit test for Transformer but these tests test behaviour that involves multiple stages of the pipeline. PiperOrigin-RevId: 425378369
hschlueter committed -
PiperOrigin-RevId: 425341138
kimvde committed -
Add a constructor that takes a DrmSessionManagerProvider. This allows R8 to strip the default implementation. #minor-release PiperOrigin-RevId: 425330083
krocard committed -
Some phone with limited memory can't allocate bigger shared memory buffers. This might or might not be related to Binder's 1M transaction limit. Tested on Pixel 4 by setting the minimum buffer size to 1h. https://github.com/google/ExoPlayer/issues/9712 #minor-release PiperOrigin-RevId: 425324536
krocard committed -
This makes sure the number of ads in an ad group matches to the number of periods representing an ad group in a multi-period timeline. This makes it easier to accurately mark ads as played in multi-period windows which is needed to correctly prevent seeking over unplayed ads. PiperOrigin-RevId: 425317085
bachinger committed -
If a) the end of stream buffer arrives with a frame rather than an empty buffer or b) processDataV29() renders several decoder output buffers to the FrameEditor's input Surface immediately before encountering the EOS flag these frames were previously stuck in the FrameEditor's input Surface and never fed to the encoder. PiperOrigin-RevId: 424898820hschlueter committed -
This test tests that all frames are processed when transcoding video to a different sample MIME type (and that the transformation completes successfully). PiperOrigin-RevId: 424896014
hschlueter committed -
This fixes some warnings that show up in Android Studio (due to using methods that autobox unnecessarily). PiperOrigin-RevId: 424892352
andrewlewis committed -
This allows access to custom renderers, for example to send messages or to access custom fields and methods. PiperOrigin-RevId: 424878963
tonihei committed
-
- 28 Jan, 2022 18 commits
-
-
https://github.com/google/ExoPlayer/commit/651fa0dbb7c935480ab82a4ddf370b43134a45ab
*** Original commit *** Apply suggested AVC profile depending on the API version. *** PiperOrigin-RevId: 424856077
claincly committed -
PiperOrigin-RevId: 424850283
andrewlewis committed -
Enforcing the correct thread usage has been enabled since 2.13.0. Opting-out of this enforement is dangerous as it can hide very hard to debug bugs. PiperOrigin-RevId: 424815808
tonihei committed -
If muxerWrapper.release() was throwing an exception, the progress state was not updated and getProgress could throw an exception. #minor-release PiperOrigin-RevId: 424696783
kimvde committed -
This shouldn't be required for transformer instrumentation tests, as they don't use a foreground service. PiperOrigin-RevId: 424654463
andrewlewis committed -
The second error is probably a consequence of the first one. #minor-release PiperOrigin-RevId: 424619944
kimvde committed -
When the decoder output buffer was partially read, a call to Codec.getOutputBuffer() was returning the same buffer, but with the position reset to 0. The reason was that, in Codec.maybeDequeueAndSetOutputBuffer(), mediaCodec.getOutputBuffer() was called with the same buffer index (L350 in old rev), even though there was already a buffer available (outputBufferIndex >=0). This change avoids calling mediaCodec.getOutputBuffer() if the previous buffer has not been released. #minor-release PiperOrigin-RevId: 424612197
kimvde committed -
If the encoder picks a fallback resolution the video pipeline needs to take this into account when configuring the frameEditor and when setting up the fallback TransformationRequest that's passed to the fallbackListener. PiperOrigin-RevId: 424611290
hschlueter committed -
Move the code in its own class as DefaultAudioTrack is getting very big. It also help for testability. The new class is easily configurable and highly tested. Manual test was used to catch any regression. https://github.com/google/ExoPlayer/issues/8891 PiperOrigin-RevId: 424602011
krocard committed -
AnalyticsCollector can't be null when passed into ExoPlayerImplInternal, so there is no need to pass it around as nullable. PiperOrigin-RevId: 424594031
tonihei committed -
Two of the sessions are finished at the same time in the test and the order of the corresponding callbacks depends on the randomly generated session string and the order these strings are stored in a HashSet. Update test to assert both callbacks are called and they contain the right arguments, but don't assert on the order of these two callbacks. PiperOrigin-RevId: 424548819
tonihei committed -
Ad playback shouldn't be affected by manual speed adjustments set by the user. This change enforces unit speed for ad playback. Issue: google/ExoPlayer#9018 PiperOrigin-RevId: 424546258
tonihei committed -
This only affects playbacks using the experimentalUseProgressiveMediaSourceForSubtitles method. Also update the SingleSampleMediaSource instantiation to be more similar, to try and highlight differences like this in future. PiperOrigin-RevId: 424545980
ibaker committed -
In some cases we need to update the PlaybackParameters at period boundaries, for example when switching from live to VOD and live playback speed adjustment was still active at the point of switching. Currently, we send the update when the playing MediaPeriod changes in EPII, which is slightly too late because the new speed gets only applied after the entire existing AudioTrack buffer has been played out. We can time the update slightly better by updating the values at the point where we change the reading period. This makes the update slightly too early because it also applies to all samples currently in the decoder. But generally, this is a lot better because the time spent in the decoder is likely to be considerably lower than the duration of the AudioTrack buffer. Note that this change isn't perfectly aligning to the period boundary, but reduces the number of samples with the wrong speed to a minimum. If we are getting around to add additional code that allows updating the speed at exactly the boundary, it also needs to be triggered from the reading period update, so the new code location is also helpful in the future. Issue: google/ExoPlayer#9018 PiperOrigin-RevId: 424540551
tonihei committed -
When I locally link to exoplayer source modules as described in the README and I do this directly into a fig/citc client, I get an error saying "missing_aar_type_workaround.gradle': 79: unexpected token: || @ line 79, column 29.". I can fix this by wrapping the expression in parenthesis (¯\_(ツ)_/¯). I don't think this file lands in the public source tree, but if we want to correct this, it may help someone from the team. This CL can be ignored and reverted also. PiperOrigin-RevId: 424537619
bachinger committed -
PiperOrigin-RevId: 424383900
olly committed -
PiperOrigin-RevId: 424382031
Andrew Lewis committed -
PiperOrigin-RevId: 424379489
Andrew Lewis committed
-