- 17 Apr, 2023 16 commits
-
-
Reusing the loader wrappers allows us to use the current RTSP connection without having to set up a new RTSP connection. Consequently, the Extractors, RTP readers are also preserved. PiperOrigin-RevId: 524663012
claincly committed -
In `ExternalTextureManager` in seemingly rare cases end of stream is signaled at the point where a frame is currently pending processing. In that case the video end of stream signal was lost. If the muxer timeout was enabled this case would result in throwing an exception, but otherwise the operation would get stuck Add code to signal end of stream in `onInputFrameProcessed` as well, so that we signal end of stream when the pending frame is handled. Tested by running `TransformerEndToEndTest.loopingTranscodedVideo_producesExpectedResult` several times. PiperOrigin-RevId: 524361069
andrewlewis committed -
PiperOrigin-RevId: 524349341
huangdarwin committed -
This happens when the input is an image. The output will always be video so the outputPlayer and outputVideoTextView will always present. PiperOrigin-RevId: 524329436
claincly committed -
Dackka doesn't support `@value` #minor-release PiperOrigin-RevId: 524309695
ibaker committed -
MediaMuxer does not support out-of-order video frames API 25. Use a test file with frames in order in loopingTranscodedAudio_producesExpectedResult. This is necessary for tests that transmux video samples. PiperOrigin-RevId: 524309318
kimvde committed -
PiperOrigin-RevId: 524305085
simakova committed -
PiperOrigin-RevId: 524301315
huangdarwin committed -
PiperOrigin-RevId: 524282997
claincly committed -
A passthrough effect allows for testing having an intermediate effect injected, which uses different OpenGL shaders from having no effects. PiperOrigin-RevId: 524276991
huangdarwin committed -
PiperOrigin-RevId: 524248369
claincly committed -
PiperOrigin-RevId: 524113489
Googler committed -
PiperOrigin-RevId: 524030672
tofunmi committed -
PiperOrigin-RevId: 524027177
claincly committed -
In the absence of any lock `createIsoLanguageReplacementMap` method was getting called twice due to race condition. Used Suppliers.memoize() which is by default thread safe. PiperOrigin-RevId: 524007754
sheenachhabra committed -
PiperOrigin-RevId: 524003092
michaelkatz committed
-
- 13 Apr, 2023 4 commits
-
-
The overrides specified by a MediaController may not use the exact same TrackGroup instances as known to the Player because the groups have been bundled to and from the controller. This bundling may alter the instance slightly depending on the version used on each side of the communication and the fields set (e.g. Format.metadata is not supported for bundling). This issue can be solved by creating unique track group ids for each group on the session side before bundling. On the way back, the groups in the track selection parameters can be mapped backed to their original instances based on this id. #minor-release Issue: androidx/media#296 PiperOrigin-RevId: 523986626
tonihei committed -
#minor-release PiperOrigin-RevId: 523983688
rohks committed -
Previously, ExoPlayerImpl had volume flags hardcoded to SHOW_UI, but now the developer can choose what happens on volume change. The old methods have been deprecated. PiperOrigin-RevId: 523974358
jbibik committed -
#minor-release PiperOrigin-RevId: 523959161
rohks committed
-
- 12 Apr, 2023 13 commits
-
-
#minor-release PiperOrigin-RevId: 523708424
rohks committed -
This field is also non-zero for h.265 tracks. PiperOrigin-RevId: 523676455
ibaker committed -
PiperOrigin-RevId: 523675327
sheenachhabra committed -
The setter command is only used for setPlaylistMetadata and can be named COMMAND_SET_PLAYLIST_METADATA. The getter commnad is used to access getMediaMetadata and getPlaylistMetadata and can be better named COMMAND_GET_METADATA to reflect this usage. PiperOrigin-RevId: 523673286
tonihei committed -
Previously `ChannelMixingAudioProcessor` output float because it was implemented using the audio mixer's float mixing support. Move the implementation over to just using the `ChannelMixingMatrix` and make it publicly visible in the common module so it can be used by apps for both playback and export. Also resolve a TODO that no longer had a bug attached by implementing support for putting multiple mixing matrices to handle different input audio channel counts, and fix some nits in the test code. Tested via unit tests and manually configuring a `ChannelMixingAudioProcessor` in the transformer demo app and playing an audio stream that identifies channels, and verifying that they are remapped as expected. PiperOrigin-RevId: 523653901
andrewlewis committed -
It is not possible to provide a safe deprecation path because BaseTrackSelection can't easily know which of the methods is implemented by subclasses. PiperOrigin-RevId: 523471578
tonihei committed -
Change what format is logged from MediaCodecAudioRenderer when AudioSink throws InitializationException. We printed the AudioSink's format, which most of the times is audio/raw (PCM) and not the renderer's format. With this change both formats are logged. #minor-release Issue: google/ExoPlayer#11066 PiperOrigin-RevId: 523456840
christosts committed -
In addition to the changes in https://github.com/google/ExoPlayer/commit/b18fb368cca9843aeca2cc4d5a01aa4fa41b4bd7 This change essentially reverts https://github.com/google/ExoPlayer/commit/30e5bc9837e2423cd2bb426c5797211e0f6ad76b (Merged Jul 2022). From this CL on, `VideoFrameProcessor` takes in non-offset, monotonically increasing timestamps. For example, with one 5s and one 10s video, - `VideoFrameProcessor`'s input should start from 0 - On switching to the second video (10s), the timestamp of the first frame in the second video should be at 5s. In ExoPlayer however, `streamOffset` is managed differently and thus needs correction before sending the frames to `VideoFrameProcessor`: - The timestamp of the first video is offset by a large int, so the first frame of the first media item has timestamp (assuming) 10000000000000000 - The last frame of the first media item has 10000005000000000 - At this point the stream off set is updated to 10000005000000000 - The pts of the first frame of the second video starts from 0 again. PiperOrigin-RevId: 523444236
claincly committed -
Implement HDR input support for texture output, and add HDR pixel tests. PiperOrigin-RevId: 523417701
huangdarwin committed -
PiperOrigin-RevId: 523413988
Googler committed -
Simplify the audio encoder input timestamp calculation. The new calculation avoids drifting by tracking the total number of bytes encoded rather than tracking the timestamp and remainder separately, and also makes the timestamps match the decoder output buffer timestamps. Also switch one of the export tests that was passing through AMR samples over to using WAVE audio. The problem with using AMR is that the compressed samples are not necessarily an integer number of audio frames and the shadow decoder would pass them from input to output, so the audio encoder was receiving non-integer numbers of audio frames. Tested by logging the timestamps at the decoder output and encoder input with forcing transcoding audio, and verifying that after this change the audio timestamps are no longer off by one. PiperOrigin-RevId: 523409869
andrewlewis committed -
The video asset loader renders decoder output to a surface texture, and if the video sample pipeline is in the process of updating the surface texture image at the moment when the asset loader video decoder is released this seems to cause `MediaCodec.release` to get stuck. Swap the release order so that we stop updating the texture before trying to release the codec. PiperOrigin-RevId: 523401619
andrewlewis committed -
Log at debug level immediately when MediaCodec throws. This logging will be output closer to the time when the error actually happened so should make it easier to identify the order of components failing. Downgrade logging of errors after export ends to warning level, as output may still be fine if there was a problem after exporting completed (though it's still worth logging a warning as the device may not be in a good state). PiperOrigin-RevId: 523370457
andrewlewis committed
-
- 11 Apr, 2023 7 commits
-
-
Turns out these could have been private, so not sure why they were public. PiperOrigin-RevId: 522545698
huangdarwin committed -
This javadoc is also clear from the Builder.setEnableColorTransfers javadoc, so omit it here to avoid duplication. PiperOrigin-RevId: 522404884
huangdarwin committed -
Before this CL, SurfaceTexture.onFrameAvailable was used to tell whether a frame was available in the VideoFrameProcessor's output texture. This was incorrect, as it would rely on having the texture be written to before the SurfaceTexture.onFrameAvailableListener is invoked, leading to null-pointer- exceptions on timeouts. Instead of using DefaultVideoFrameProcessor different interfaces to set that we want to output to a texture, and get that output texture, use one interface that sets a listener, and renders to a texture iff that listener is set. As this listener is executed on the GL thread, this also allows us to no longer need to expand visibility for the GL task executor and tasks. PiperOrigin-RevId: 522362101
huangdarwin committed -
PiperOrigin-RevId: 522347729
tofunmi committed -
There is a race with the ad period preparation having completed and `onDownstreamFormatChanged` being called when a live stream is joined in an ad period. In this case the stream event metadata of the period is immediately emitted and causing an ad media period being created that is selected in `getMediaPeriodForEvent` before being prepared (1 out of 4). Using an `isPrepared` flag makes sure we don't hand out the media period to early in `getMediaPeriodForEvent`. PiperOrigin-RevId: 522340046
bachinger committed -
To set the chroma format and depth information for H265 format,the csd-0 data needs to be parsed. The previous implementation skipped parsing csd-0 data and hard coded values based on "profile" field in MediaFormat. Along with above mention changes, corrected some of the comments as per spec. PiperOrigin-RevId: 522335595
sheenachhabra committed -
This change improves `ImaUtil.maybeCorrectPreviouslyUnknownAdDuration` to handles the case when the timeline moves forward more than a single period while an ad group with unknown period duration is being played. PiperOrigin-RevId: 522292612
bachinger committed
-