Commit graph

516 commits

Author SHA1 Message Date
rohks
3d79536f80 Fix MP4 parser issue in reading bitrates from esds boxes.
As per MP4 spec, bitrates in esds boxes can be a 32 bit number which doesn't fits in Java int type, so now reading it as a long value. Our class for holding media format, only allows bitrates value to be an int as we don't expect the bitrates to be greater than or equal to 2^31. So we're limiting the values for bitrates to Integer.MAX_VALUE.

#minor-release

PiperOrigin-RevId: 458423162
(cherry picked from commit 9e10286b5e)
2022-07-01 09:52:45 +00:00
rohks
3709e90e34 Fix MP4 parser issue in reading length of URL array from esds boxes.
As per MP4 spec, the length of URL array is a 8 bit number.

#minor-release

PiperOrigin-RevId: 458421436
(cherry picked from commit 5095ff160b)
2022-07-01 09:39:11 +00:00
olly
d86bc1078c Fix parsing H265 short term reference picture sets
Issue: google/ExoPlayer#10316
PiperOrigin-RevId: 456084302
2022-06-27 11:23:40 +01:00
olly
3727385555 Fix parsing H265 short term reference picture sets
Issue: google/ExoPlayer#10316
PiperOrigin-RevId: 456084302
(cherry picked from commit d86bc1078c)
2022-06-20 16:46:15 +01:00
Marc Baechinger
1ca382d138 Merge pull request #9915 from dburckh:avi
PiperOrigin-RevId: 455094147
2022-06-15 15:04:32 +00:00
Marc Baechinger
a785fbe014 Merge pull request #9915 from dburckh:avi
PiperOrigin-RevId: 455094147
(cherry picked from commit 1ca382d138)
2022-06-15 16:51:04 +00:00
ibaker
27e0c80792 Permit duplicate Opus headers
This reinstates the permissive behaviour removed by
fe7e5b8181

Test file created by opening bear.opus in a hex editor and naively
duplicating the two header packets, starting at (and including) the
first `OggS` in the file and ending just before the third `OggS`.

#minor-release

Issue: google/ExoPlayer#10038
PiperOrigin-RevId: 452015662
(cherry picked from commit b6b282672c)
2022-05-31 14:06:59 +00:00
ibaker
b6b282672c Permit duplicate Opus headers
This reinstates the permissive behaviour removed by
fe7e5b8181

Test file created by opening bear.opus in a hex editor and naively
duplicating the two header packets, starting at (and including) the
first `OggS` in the file and ending just before the third `OggS`.

#minor-release

Issue: google/ExoPlayer#10038
PiperOrigin-RevId: 452015662
2022-05-31 14:00:59 +00:00
hmzh
dce0db35f1 Refactor MIDI and Flac extractor loaders for deduplication
Add MIDI filetype information for use in the ExtractorsFactory

PiperOrigin-RevId: 447976272
2022-05-24 10:37:39 +01:00
ibaker
a0ac261873 Remove ExoPlayer's RawCcExtractor
RawCC is a Google-internal subtitle format, and is no longer used with
ExoPlayer.

PiperOrigin-RevId: 446950691
2022-05-06 12:05:37 +01:00
ibaker
c5ad28a96c Remove empty <p> tag from WebvttDecoder
PiperOrigin-RevId: 445217294
2022-05-09 11:10:58 +01:00
olly
825976c987 Reading AV1 initialization data.
We add an entire class like we do for parsing other codec initialization formats; it's currently not doing any parsing though (... initialization data is really simple for AV1 though: just the entire contents of the box).

For testing, we add the sample file, having been re-encoded with ffmpeg (and we also happen to have another av1 file, too).

PiperOrigin-RevId: 444890282
2022-05-09 10:40:44 +01:00
ibaker
91b0d55fb3 Fix calculations that may lose precision compared to their target type
PiperOrigin-RevId: 444861268
2022-05-09 10:30:39 +01:00
Ian Baker
925a907c5f Merge pull request #9967 from jruesga:cea708-handle-multiple-service-blocks
PiperOrigin-RevId: 444816821
2022-05-09 10:20:22 +01:00
Ian Baker
a8c0a1bdfd Merge pull request #10150 from egor-n:dev-v2-8435-outlinecolour
PiperOrigin-RevId: 444787307
2022-05-09 10:12:53 +01:00
olly
020e3ea5e2 Reading AV1 initialization data.
We add an entire class like we do for parsing other codec initialization formats; it's currently not doing any parsing though (... initialization data is really simple for AV1 though: just the entire contents of the box).

For testing, we add the sample file, having been re-encoded with ffmpeg (and we also happen to have another av1 file, too).

PiperOrigin-RevId: 439453823
2022-04-07 17:20:04 +01:00
olly
200ee68479 Reading average and peak bitrates from esds boxes.
This provides better compatibility with MediaExtractor, which does read these fields; we also need them for being able to mux file contents into another mp4 file.

Also, there is a minor refactor included so that we have an actual type for esds box contents instead of a pair.

PiperOrigin-RevId: 438673825
2022-04-07 16:14:43 +01:00
aquilescanta
202a82a915 Support seeking in un-intearleaved tracks in Mp4Extractor
A client can pass the id of the track on which they want to seek.

PiperOrigin-RevId: 437248055
2022-04-07 14:10:02 +01:00
Egor Neliuba
2bd348effd Consider BorderStyle value before applying OutlineColour as background 2022-04-04 18:26:31 +03:00
Egor Neliuba
388b8d1d88 Add support for SSA OutlineColour (only background)
OutlineColour should be treated as the background color if BorderStyle=3. Since currently BorderStyle is ignored, we can always treat OutlineColor as the background color.
2022-04-03 11:39:06 +03:00
aquilescanta
ce67fa92dc Simplify nullability in Mp4Extractor
PiperOrigin-RevId: 437002406
2022-03-24 15:38:20 +00:00
aquilescanta
2d025a2797 Add maxNumRefFrames to NalUnitUtil
Needed for AVI support.

PiperOrigin-RevId: 436991922
2022-03-24 14:41:28 +00:00
aquilescanta
3b9ab6aa9e Group NAL type constants in NalUnitUtil
To be shared with AviExtractor in a later CL.

PiperOrigin-RevId: 436430385
2022-03-22 10:32:35 +00:00
Jorge Ruesga
4230124335
Rename serviceBlockPacket to captionChannelPacketData
Signed-off-by: Jorge Ruesga <jorge@ruesga.com>
2022-03-08 16:07:57 +00:00
olly
1bc4ba29f5 FMP4: Fix output of mixed v0 and v1 emsg samples
Issue: google/ExoPlayer#9996
#minor-release
PiperOrigin-RevId: 430773329
2022-03-01 09:46:31 +00:00
olly
d622598285 Add Matroska Extractor Test Sample For Opus
PiperOrigin-RevId: 429386479
2022-02-18 15:03:10 +00:00
olly
e32809cf08 Avoid Clearing Supplemental Data Flag In MatroskExtractor
PiperOrigin-RevId: 429368911
2022-02-18 15:03:02 +00:00
olly
bdcc9ea163 Libopus Support For WebM DiscardPadding
PiperOrigin-RevId: 429364728
2022-02-18 15:03:02 +00:00
Ian Baker
87d8ca0af2 Reformat some javadoc 2022-02-18 15:02:33 +00:00
Dustin
0b629e4be8 Simplified UnboundedIntArray
(cherry picked from commit b4cb20cd31e44fe641aac94fee7e69456e48356c)
2022-02-17 07:39:46 -07:00
olly
d5cb100762 Fix Sample Size For Supplemental Data In MatroskaExtractor
For when a track is both encrypted and has supplemental data, the sample size will be equal to `block sample size - encryption data size`.

PiperOrigin-RevId: 427807612
2022-02-17 10:42:28 +00:00
Dustin
e14617fc32 Merged Robo and non-Robo tests into one file 2022-02-15 10:39:20 -07:00
Dustin
4f09fc36f9 Changed readable values to hex to follow Exo standard 2022-02-15 10:34:24 -07:00
Dustin
1a616b4e00 Added /* package */ to package level variables. 2022-02-15 10:32:43 -07:00
Dustin
f604ee59d1 Changed constants to literals. 2022-02-15 10:31:37 -07:00
Dustin
ac96a2be65 Removed commented code. 2022-02-15 10:30:53 -07:00
Dustin
3886f5f0b6 Code Review Changes
(cherry picked from commit 135e103faa1bd829df0542a7062e67ebcfc8638f)
2022-02-14 14:36:20 -07:00
Jorge Ruesga
9ceba909da
Cea708Decoder: Handle multiple service blocks
When a asset contains multiple cc embedded tracks, current Cea708Decoder service
block parsing logic is discarding all the data in that frame.

For example, a manifest with 2 embedded CEA-708 close captions tracks:

<Accessibility schemeIdUri="urn:scte:dash:cc:cea-708:2015" value="1=lang:eng;2=lang:spa"/>

when the spanish track is selected (service number 2), when processing the
following CEA-708 frame:

FC9420FD2062FF0829FE8CFCFE9818FEE332FE731FFE1042FE2062FE0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000FA0000

the frame can be descomposed as:

FF0829 FE8CFC FE9818 FEE332 FE731F FE1042 FE2062 FE0000
  08 (00 001000) 0 (sequence) 8 (frame size)
  298CFC9818E332731F10 422062 0000
  =====
    29 (001 01001) 1 (service number) 9 (service block length)
    8CFC9818E332731F10

    42 (010 00010) 2 (service number) 2 (service block length)
    2062

    0000 Null block service

The current processCurrentPacket logic will discard the whole frame is discarded
because the first service number found in the frame belongs to service number 1,
which is not the one we are currently looking for.

This commit modifies the processCurrentPacket decoding logic, to take into
account all service blocks available in the frame, by iteraring over the
full frame data and skipping those service blocks we are not interesting in.

Signed-off-by: Jorge Ruesga <jorge@ruesga.com>
2022-02-10 15:24:54 +00:00
tonihei
17050e8b59 Fix the position of IntDefs to match TYPE_USE
#minor-release

PiperOrigin-RevId: 427131569
2022-02-08 12:34:06 +00:00
olly
2db8807aac Revert of b19ced30c4
PiperOrigin-RevId: 426996878
2022-02-08 12:33:53 +00:00
Ian Baker
60d9ae4758 Merge pull request #9924 from jruesga:cea708-decoder-honor-service-block-size
PiperOrigin-RevId: 426953267
2022-02-08 10:56:39 +00:00
ibaker
b19ced30c4 Fix the position of IntDefs to match TYPE_USE
#minor-release

PiperOrigin-RevId: 426855255
2022-02-07 11:17:31 +00:00
ibaker
75932a0216 Mark all public 'rarely used' IntDefs as only TYPE_USE
This is a breaking change if the annotation itself is in use in Kotlin
code. It's judged that the IntDefs in this commit are unlikely to be
referred to often in Kotlin code. This is because they're either:
- Related to esoteric parts of the library, or
- In a common part of the library but only returned from methods (and
  never passed to callback methods).

A follow-up change will fix the positions of existing usages to match
this new config.

#minor-release

PiperOrigin-RevId: 426410237
2022-02-07 11:10:11 +00:00
Dustin
05db1717c0 Remove method I didn't end up needing 2022-02-06 06:22:41 -07:00
Dustin
e7cbb3d50a Add yet another Divx FourCC variant. 2022-02-06 06:22:15 -07:00
Dustin
71f094f259 MpegAudioChunkHandler seek fixes 2022-02-05 10:19:26 -07:00
Dustin
247b57692e MpegAudioChunkHandler cleanup and Tests 2022-02-05 09:32:19 -07:00
Dustin
3a9f1f9a34 Improved comments, improved naming consistency. 2022-02-05 07:09:29 -07:00
Dustin
14c842e503 Add coverage for max ref frames 2022-02-05 07:06:58 -07:00
Dustin
84d3f62e88 Fix DefaultExtractorsFactoryTest 2022-02-05 07:06:25 -07:00
Dustin
ba0b991d76 Optimize AvcChunkHandler to use normal ChunkClock if no B Frames. 2022-02-04 19:52:10 -07:00
Dustin
5b952294f6 Refactor to ChunkHander, add Mp3ChunkHandler 2022-02-04 18:45:09 -07:00
ibaker
0c2e77daca Mark all non-public IntDefs as only TYPE_USE
This only changes IntDefs that cannot be used by apps because they're
either private or package-private.

A follow-up change will fix the positions of existing usages to match
this new config.

#minor-release

PiperOrigin-RevId: 426372273
2022-02-04 15:07:19 +00:00
ibaker
564c3bcb49 Mark some unreleased IntDefs as TYPE_USE only
The longer list of targets is only necessary for backwards
compatibility with existing Kotlin code that will stop compiling
if the position of the annotation becomes 'wrong' by marking it only
TYPE_USE. Since none of these IntDefs have been released (except in
media3 alpha1) we don't need to maintain this compatibility.

Also add a comment to all the places that *do* need the longer list of
targets, in order to explain why it's there and discourage copy-pasting
when defining new IntDefs in future.

Also fix some single-element arrays to remove the array notation.

#minor-release

PiperOrigin-RevId: 426108537
2022-02-04 10:16:43 +00:00
ibaker
032df64f15 Fix parameter comments
PiperOrigin-RevId: 425874534
2022-02-04 09:52:19 +00:00
Dustin
aee15f6c70 Simplify AviTrack 2022-02-03 18:07:51 -07:00
Dustin
1528b8b5ee Found out RESULT_SEEK is a bad thing. Greatly improved Extractor efficiency. 2022-02-02 14:35:52 -07:00
Jorge Ruesga
bb7cab0cfd
Cea708Decoder: Honor service block size
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>
2022-02-02 16:53:54 +00:00
Dustin
e9fcc967a3 Added copyright, better comments, removed dead code. 2022-02-01 17:33:10 -07:00
Dustin
0896a04d02 Add bits per second for audio. 2022-02-01 15:08:13 -07:00
Dustin
89d10451ce Move list types to the same class. Expose readHeaderList for external use. 2022-02-01 12:59:45 -07:00
Dustin
5f76e0fa04 AvcChunkPeeker tests 2022-01-31 10:52:12 -07:00
Dustin
d006f3f473 Beef up readIdx1 tests 2022-01-31 10:51:52 -07:00
Dustin
9bd93ad98e Add work-around for muxer bug where idx1 offset is from 0, not "movi"
location
2022-01-31 04:49:18 -07:00
Dustin
0ff238df99 Fix int overrun on files with large scale 2022-01-31 04:14:43 -07:00
Dustin
565db92ae2 Don't send meta on 0 length packets 2022-01-31 03:33:12 -07:00
Dustin
7c1cf36a9a Commented verbose log 2022-01-30 21:28:04 -07:00
Dustin
4f365cef90
Merge branch 'google:dev-v2' into dev-v2 2022-01-30 21:26:24 -07:00
Dustin
bf1a15652d Added support for AVC picOrderCountType = 2 2022-01-30 21:05:33 -07:00
Dustin
5e7679df53 Fix bug with null in aviTracks, add FourCC FMP4 2022-01-30 14:12:08 -07:00
Dustin
99e699a3f7 Clean up tests 2022-01-30 13:53:20 -07:00
Dustin
df9e51de9d More AviExtractor tests 2022-01-29 19:19:13 -07:00
Dustin
432ff5ea70 More AviExtractor tests 2022-01-29 14:51:03 -07:00
Dustin
66c240f1bd AviHeaderBox Tests 2022-01-29 11:35:35 -07:00
Dustin
b520b26f0f More AviExtractor tests 2022-01-29 10:59:55 -07:00
Dustin
a17d36de12 Minor cleanup 2022-01-28 17:42:04 -07:00
Dustin
1d85bf2456 Updated seek 2022-01-28 12:47:43 -07:00
Andrew Lewis
e58ffc0682 Merge pull request #9893 from moneytoo:mkv-vtt
PiperOrigin-RevId: 424382031
2022-01-28 09:33:35 +00:00
Andrew Lewis
fe7e5b8181 Merge pull request #9864 from OxygenCobalt:vorbis-comments
PiperOrigin-RevId: 424355325
2022-01-28 09:22:51 +00:00
Dustin
c41dc2360f Fix crash on streamId out of bounds 2022-01-25 15:19:10 -07:00
Dustin
f1d007e68c Fix issue where reading mime type wrong in video. More tests 2022-01-25 15:01:02 -07:00
Dustin
7ea2d75fcd Refactor Clock logic. Refactor peeking for MP4V and AVC. Moved AVI above MP3. 2022-01-24 16:02:37 -07:00
Marcel Dopita
6b3187ccf1 Support MKV embedded WebVTT captions 2022-01-24 18:12:43 +01:00
Dustin
09485cbed1 Passed along suggestedBufferSize to ExoPlayer 2022-01-23 14:52:53 -07:00
Dustin
43b8a9b336 Add support for StreamName fixed issues with position alignment 2022-01-23 13:45:22 -07:00
Dustin
167c2f3fc0 Fix alignment in track scanner 2022-01-23 12:10:48 -07:00
Dustin
ec26539aeb BitmapFactoryVideoRenderer improvements 2022-01-23 11:29:56 -07:00
Dustin
019aee277d Remapped MP4x to video/mp4x 2022-01-23 10:17:38 -07:00
Dustin
77a1873930 Fix bugs around seek 2022-01-23 09:22:22 -07:00
Dustin
98b487eb31 Removed unused StreamDataBox 2022-01-23 09:21:40 -07:00
Dustin
b90333af02 Clean up UnboundedIntArray 2022-01-23 09:21:11 -07:00
Dustin
3daa74dceb Tests for AudioFormat, VideoFormat and UnboundedIntArray 2022-01-22 22:10:12 -07:00
Dustin
c4cf876ddb Tests for Mp4vAviTrack and StreamHeaderBox 2022-01-22 20:41:39 -07:00
Dustin
3ce652ead2 Added support for DX50 2022-01-22 16:43:04 -07:00
Dustin
d2bb0c2cc1 Add MJPEG Support 2022-01-22 14:27:28 -07:00
Dustin
6f41585e72 AvcAviTrack cleanup 2022-01-22 09:44:10 -07:00
Dustin
5ebaafde6e Fix Avc Seek 2022-01-22 08:03:49 -07:00
Dustin
4c76bf1a9d Add file chooser to UI, Fixed timing issues on H264, Fixed PAR on XVID and H264 2022-01-21 22:25:32 -07:00
Dustin
d9afe5105b Refactor, remove dead code 2022-01-18 23:25:42 -07:00
Dustin
8d90498f79 Minor Tweaks 2022-01-18 23:04:14 -07:00