From 951f2968519090bb2a1a1e3dcb9f5dab80958dfb Mon Sep 17 00:00:00 2001 From: Googler Date: Wed, 17 Jul 2024 04:50:41 -0700 Subject: [PATCH] Add support for 3gpp h263 codec in Mp4Muxer. Implement d263Box to provide support for muxing video encoded with the h263 codec. PiperOrigin-RevId: 653188633 --- ...MuxerEndToEndParameterizedAndroidTest.java | 2 + .../java/androidx/media3/muxer/Boxes.java | 17 ++++ .../media3/muxer/FragmentedMp4Muxer.java | 2 +- .../java/androidx/media3/muxer/Mp4Muxer.java | 2 +- .../java/androidx/media3/muxer/BoxesTest.java | 20 +++++ .../mp4/bbb_176x144_128kbps_15fps_h263.3gp | Bin 0 -> 51109 bytes .../bbb_176x144_128kbps_15fps_h263.3gp.dump | 83 ++++++++++++++++++ .../video_sample_entry_box_h263.dump | 2 + 8 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 libraries/test_data/src/test/assets/media/mp4/bbb_176x144_128kbps_15fps_h263.3gp create mode 100644 libraries/test_data/src/test/assets/muxerdumps/bbb_176x144_128kbps_15fps_h263.3gp.dump create mode 100644 libraries/test_data/src/test/assets/muxerdumps/video_sample_entry_box_h263.dump diff --git a/libraries/muxer/src/androidTest/java/androidx/media3/muxer/Mp4MuxerEndToEndParameterizedAndroidTest.java b/libraries/muxer/src/androidTest/java/androidx/media3/muxer/Mp4MuxerEndToEndParameterizedAndroidTest.java index 47256c06a1..5055f88009 100644 --- a/libraries/muxer/src/androidTest/java/androidx/media3/muxer/Mp4MuxerEndToEndParameterizedAndroidTest.java +++ b/libraries/muxer/src/androidTest/java/androidx/media3/muxer/Mp4MuxerEndToEndParameterizedAndroidTest.java @@ -43,6 +43,7 @@ import org.junit.runners.Parameterized.Parameters; /** End to end parameterized instrumentation tests for {@link Mp4Muxer}. */ @RunWith(Parameterized.class) public class Mp4MuxerEndToEndParameterizedAndroidTest { + private static final String H263_GPP = "bbb_176x144_128kbps_15fps_h263.3gp"; private static final String H264_MP4 = "sample_no_bframes.mp4"; private static final String H264_WITH_NON_REFERENCE_B_FRAMES_MP4 = "bbb_800x640_768kbps_30fps_avc_non_reference_3b.mp4"; @@ -58,6 +59,7 @@ public class Mp4MuxerEndToEndParameterizedAndroidTest { @Parameters(name = "{0}") public static ImmutableList mediaSamples() { return ImmutableList.of( + H263_GPP, H264_MP4, H264_WITH_NON_REFERENCE_B_FRAMES_MP4, H264_WITH_PYRAMID_B_FRAMES_MP4, diff --git a/libraries/muxer/src/main/java/androidx/media3/muxer/Boxes.java b/libraries/muxer/src/main/java/androidx/media3/muxer/Boxes.java index 43420ed066..cae311bdb3 100644 --- a/libraries/muxer/src/main/java/androidx/media3/muxer/Boxes.java +++ b/libraries/muxer/src/main/java/androidx/media3/muxer/Boxes.java @@ -548,6 +548,8 @@ import java.util.List; return damrBox(/* mode= */ (short) 0x81FF); // mode set: all enabled for AMR-NB case MimeTypes.AUDIO_AMR_WB: return damrBox(/* mode= */ (short) 0x83FF); // mode set: all enabled for AMR-WB + case MimeTypes.VIDEO_H263: + return d263Box(); case MimeTypes.VIDEO_H264: return avcCBox(format); case MimeTypes.VIDEO_H265: @@ -1095,6 +1097,19 @@ import java.util.List; } } + /** Returns the d263Box box as per 3GPP ETSI TS 126 244: 6.8. */ + private static ByteBuffer d263Box() { + ByteBuffer d263Box = ByteBuffer.allocate(7); + d263Box.put(" ".getBytes(UTF_8)); // 4 spaces (vendor) + d263Box.put((byte) 0x00); // decoder version + // TODO: b/352000778 - Get profile and level from format. + d263Box.put((byte) 0x10); // level + d263Box.put((byte) 0x00); // profile + + d263Box.flip(); + return BoxUtils.wrapIntoBox("d263", d263Box); + } + /** Returns the avcC box as per ISO/IEC 14496-15: 5.3.3.1.2. */ private static ByteBuffer avcCBox(Format format) { checkArgument( @@ -1328,6 +1343,8 @@ import java.util.List; return "samr"; case MimeTypes.AUDIO_AMR_WB: return "sawb"; + case MimeTypes.VIDEO_H263: + return "s263"; case MimeTypes.VIDEO_H264: return "avc1"; case MimeTypes.VIDEO_H265: diff --git a/libraries/muxer/src/main/java/androidx/media3/muxer/FragmentedMp4Muxer.java b/libraries/muxer/src/main/java/androidx/media3/muxer/FragmentedMp4Muxer.java index 97e4682cf4..5ab501fd31 100644 --- a/libraries/muxer/src/main/java/androidx/media3/muxer/FragmentedMp4Muxer.java +++ b/libraries/muxer/src/main/java/androidx/media3/muxer/FragmentedMp4Muxer.java @@ -35,7 +35,7 @@ import java.nio.ByteBuffer; /** * A muxer for creating a fragmented MP4 file. * - *

The muxer supports writing H264, H265 and AV1 video, AAC audio and metadata. + *

The muxer supports writing H263, H264, H265 and AV1 video, AAC audio and metadata. * *

All the operations are performed on the caller thread. * diff --git a/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Muxer.java b/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Muxer.java index 5a619172fd..6f2172eddc 100644 --- a/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Muxer.java +++ b/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Muxer.java @@ -54,7 +54,7 @@ import org.checkerframework.checker.nullness.qual.EnsuresNonNull; /** * A muxer for creating an MP4 container file. * - *

The muxer supports writing H264, H265 and AV1 video, AAC audio and metadata. + *

The muxer supports writing H263, H264, H265 and AV1 video, AAC audio and metadata. * *

All the operations are performed on the caller thread. * diff --git a/libraries/muxer/src/test/java/androidx/media3/muxer/BoxesTest.java b/libraries/muxer/src/test/java/androidx/media3/muxer/BoxesTest.java index a5902031bc..0d6062bc39 100644 --- a/libraries/muxer/src/test/java/androidx/media3/muxer/BoxesTest.java +++ b/libraries/muxer/src/test/java/androidx/media3/muxer/BoxesTest.java @@ -375,6 +375,26 @@ public class BoxesTest { MuxerTestUtil.getExpectedDumpFilePath("video_sample_entry_box_h265_hdr10")); } + @Test + public void createVideoSampleEntryBox_forH263_matchesExpected() throws Exception { + Format format = + new Format.Builder() + .setId(1) + .setSampleMimeType(MimeTypes.VIDEO_H263) + .setLanguage("und") + .setWidth(10) + .setMaxInputSize(39) + .setFrameRate(25) + .setHeight(12) + .build(); + + ByteBuffer videoSampleEntryBox = Boxes.videoSampleEntry(format); + + DumpableMp4Box dumpableBox = new DumpableMp4Box(videoSampleEntryBox); + DumpFileAsserts.assertOutput( + context, dumpableBox, MuxerTestUtil.getExpectedDumpFilePath("video_sample_entry_box_h263")); + } + @Test public void createVideoSampleEntryBox_forH264_matchesExpected() throws Exception { Format format = diff --git a/libraries/test_data/src/test/assets/media/mp4/bbb_176x144_128kbps_15fps_h263.3gp b/libraries/test_data/src/test/assets/media/mp4/bbb_176x144_128kbps_15fps_h263.3gp new file mode 100644 index 0000000000000000000000000000000000000000..717ffb84708044077a147a632afe7e9de1c55b10 GIT binary patch literal 51109 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 literal 0 HcmV?d00001 diff --git a/libraries/test_data/src/test/assets/muxerdumps/bbb_176x144_128kbps_15fps_h263.3gp.dump b/libraries/test_data/src/test/assets/muxerdumps/bbb_176x144_128kbps_15fps_h263.3gp.dump new file mode 100644 index 0000000000..11ba771b68 --- /dev/null +++ b/libraries/test_data/src/test/assets/muxerdumps/bbb_176x144_128kbps_15fps_h263.3gp.dump @@ -0,0 +1,83 @@ +seekMap: + isSeekable = true + duration = 933300 + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052], [timeUs=533322, position=428455]] + getPosition(466650) = [[timeUs=0, position=400052], [timeUs=533322, position=428455]] + getPosition(933300) = [[timeUs=533322, position=428455]] +numberOfTracks = 1 +track 0: + total output bytes = 50100 + sample count = 15 + format 0: + id = 1 + sampleMimeType = video/3gpp + maxInputSize = 10464 + width = 176 + height = 144 + frameRate = 16.072002 + colorInfo: + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[Mp4Timestamp: creation time=100000000, modification time=500000000, timescale=10000] + sample 0: + time = 0 + flags = 1 + data = length 10434, hash AE44B225 + sample 1: + time = 66655 + flags = 0 + data = length 2615, hash A0DA11FE + sample 2: + time = 133322 + flags = 0 + data = length 1812, hash 7088FD15 + sample 3: + time = 200000 + flags = 0 + data = length 2812, hash C8A9745F + sample 4: + time = 266655 + flags = 0 + data = length 3127, hash 15B392C5 + sample 5: + time = 333322 + flags = 0 + data = length 3362, hash 77B8F06A + sample 6: + time = 400000 + flags = 0 + data = length 3295, hash 24A31310 + sample 7: + time = 466655 + flags = 0 + data = length 946, hash B1E4247C + sample 8: + time = 533322 + flags = 1 + data = length 10399, hash 65BB0623 + sample 9: + time = 600000 + flags = 0 + data = length 3373, hash 6884A84C + sample 10: + time = 666655 + flags = 0 + data = length 878, hash BFC0DD04 + sample 11: + time = 733322 + flags = 0 + data = length 1530, hash 55CB846F + sample 12: + time = 800000 + flags = 0 + data = length 1834, hash ECF4E9AA + sample 13: + time = 866655 + flags = 0 + data = length 1776, hash 63A892E4 + sample 14: + time = 933322 + flags = 536870912 + data = length 1907, hash 99D43466 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/muxerdumps/video_sample_entry_box_h263.dump b/libraries/test_data/src/test/assets/muxerdumps/video_sample_entry_box_h263.dump new file mode 100644 index 0000000000..2f9865ae4d --- /dev/null +++ b/libraries/test_data/src/test/assets/muxerdumps/video_sample_entry_box_h263.dump @@ -0,0 +1,2 @@ +s263 (117 bytes): + Data = length 109, hash B820D1F5