1. 02 Feb, 2022 13 commits
    • Cea708Decoder: Honor service block size · bb7cab0c
      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
    • Move SimpleExoPlayer logic into ExoPlayerImpl · 3bb0210d
      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
    • Transformer Demo: Remove unneeded external storage permission · ead64f54
      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
    • Make transformer demo configuration options scrollable. · 4c5e2668
      On devices with a smaller screen / low resolution not all
      options fit, so scrolling is needed.
      
      PiperOrigin-RevId: 425635224
      hschlueter committed
    • Use `ImmutableMap.Builder.buildOrThrow()` instead of deprecated `build()`. · 319ef635
      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: 425616165
      olly committed
    • Add format fallback ranking. · d767be4c
      Introduce an interface EncoderSelector for developers to filter out unwanted
      encoders.
      
      PiperOrigin-RevId: 425611421
      claincly committed
    • Avoid creating empty playback metrics · fc528ebe
      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
    • Update gradle wrapper · 2848240a
      To fix transformer demo + Nexus emulator bug.
      
      #minor-release
      
      PiperOrigin-RevId: 425603703
      huangdarwin committed
    • Rewrite EventLogger to use new track APIs · 29a6280b
      PiperOrigin-RevId: 425595951
      olly committed
    • Update gradle and gradle plugin · 30feb077
      #minor-release
      
      PiperOrigin-RevId: 425589448
      bachinger committed
    • Add support for experimenting with HDR · 7c8f6d5d
      - 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
    • Add SpeedChangingAudioProcessor · 327df95f
      PiperOrigin-RevId: 425562875
      kimvde committed
    • Publish the ImaServerSideAdInsertionMediaSource · 4020f695
      Issue: google/ExoPlayer#8213
      
      #minor-release
      
      PiperOrigin-RevId: 425381474
      ibaker committed
  2. 01 Feb, 2022 9 commits
  3. 28 Jan, 2022 18 commits