0.108.2: GT picture fix on the installed 0.108.1 (VfW H.264 in MKV); lint opt-in for the copied reader

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-11-05 08:14:42 +00:00
committed by Claude
co-authored by Claude Opus 5.5
parent 6a262dac19
commit 80d315481b
7 changed files with 30 additions and 0 deletions
@@ -31,6 +31,7 @@ import java.lang.annotation.Target;
import java.util.ArrayDeque;
/** Default implementation of {@link EbmlReader}. */
@androidx.annotation.OptIn(markerClass = androidx.media3.common.util.UnstableApi.class)
/* package */ final class DefaultEbmlReader implements EbmlReader {
@Documented
@@ -29,6 +29,7 @@ import java.lang.annotation.Target;
/** Defines EBML element IDs/types and processes events. */
@UnstableApi
@androidx.annotation.OptIn(markerClass = androidx.media3.common.util.UnstableApi.class)
public interface EbmlProcessor {
/**
@@ -26,6 +26,7 @@ import java.io.IOException;
* originally designed for the Matroska container format. More information about EBML and Matroska
* is available <a href="http://www.matroska.org/technical/specs/index.html">here</a>.
*/
@androidx.annotation.OptIn(markerClass = androidx.media3.common.util.UnstableApi.class)
/* package */ interface EbmlReader {
/**
@@ -83,6 +83,7 @@ import java.util.UUID;
/** Extracts data from the Matroska and WebM container formats. */
@UnstableApi
@androidx.annotation.OptIn(markerClass = androidx.media3.common.util.UnstableApi.class)
public class MatroskaExtractor implements Extractor {
/**
@@ -25,6 +25,7 @@ import java.io.IOException;
* Utility class that peeks from the input stream in order to determine whether it appears to be
* compatible input for this extractor.
*/
@androidx.annotation.OptIn(markerClass = androidx.media3.common.util.UnstableApi.class)
/* package */ final class Sniffer {
/** The number of bytes to search for a valid header in {@link #sniff(ExtractorInput)}. */
@@ -21,6 +21,7 @@ import java.io.EOFException;
import java.io.IOException;
/** Reads EBML variable-length integers (varints) from an {@link ExtractorInput}. */
@androidx.annotation.OptIn(markerClass = androidx.media3.common.util.UnstableApi.class)
/* package */ final class VarintReader {
private static final int STATE_BEGIN_READING = 0;
+24
View File
@@ -0,0 +1,24 @@
# 0.108.2: Dragon Ball GT's picture, built on the installed 0.108.1
**Paul's report (4 November 2026, 21:58):** Dragon Ball GT on Vortex "won't play on this device".
**What the box showed:**
- S1 E4 (item 228430) failed with `noVideoDecoder=video/x-unknown`.
- A 3-minute test of S1 E5 (228431) played sound and English subtitles with **no video track** (`video=none`).
- Emby reports every GT episode as H.264 640x480 in MKV with Vorbis audio. The library has only one copy, 64 episodes.
- **The cause:** the files carry their H.264 in the old Video for Windows wrapper (Matroska CodecID V_MS/VFW/FOURCC). Media3's Matroska reader recognises that wrapper only for DivX/Xvid, H.263 and VC-1, and labels anything else video/x-unknown.
- Paul doesn't own the Emby server, so remuxing the files there isn't an option. He asked for the fix in the app.
**The fix:**
- `tv/orbit/classic/mkv/` is a copy of Media3 1.8.0's Matroska reader (Apache 2.0). It's unchanged apart from its package and one addition: `parseFourCcPrivate` also maps H.264 FourCCs (H264, X264, AVC1, DAVC, VSSH, either case) to video/avc. The stream is passed as it is, with its parameter sets in band, which the decoder reads.
- `OrbitExtractorsFactory` is Media3's DefaultExtractorsFactory with only the Matroska reader swapped. The programme, picture and ident players use it.
- Every other format and subtitle path is Media3's own.
- It's built on 0.108.1, the version on the box, so Advent and The Naughty List aren't in it. The same change is on main for later releases.
## Checks
- 482 unit tests run, 0 failures. `OrbitMatroskaTest` adds 3: the H.264 FourCCs map, other FourCCs stay Media3's, and only the Matroska reader is swapped. Lint shows the same warnings as before and no errors.
- **Not provable off the box:** that GT now shows its picture. After the install, a 3-minute test of S1 E5 must show `video=video/avc` with a first frame.
- **Episode 4:** item 228430 stays on the failed list from 21:56. It can be cleared, so it's booked again, once the picture is confirmed.
APK: `outputs/revision-0.108.2`, signed, versionCode 162. **Not installed.**