Skip to content

Commit 258a3e0

Browse files
rohitjoinscopybara-github
authored andcommitted
Make dav1d extension publicly available for use with Media3
PiperOrigin-RevId: 765118027
1 parent 6ddc818 commit 258a3e0

File tree

4 files changed

+36
-0
lines changed

4 files changed

+36
-0
lines changed

core_settings.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ include modulePrefix + 'lib-decoder'
7373
project(modulePrefix + 'lib-decoder').projectDir = new File(rootDir, 'libraries/decoder')
7474
include modulePrefix + 'lib-decoder-av1'
7575
project(modulePrefix + 'lib-decoder-av1').projectDir = new File(rootDir, 'libraries/decoder_av1')
76+
include modulePrefix + 'lib-decoder-dav1d'
77+
project(modulePrefix + 'lib-decoder-dav1d').projectDir = new File(rootDir, 'libraries/decoder_dav1d')
7678
include modulePrefix + 'lib-decoder-ffmpeg'
7779
project(modulePrefix + 'lib-decoder-ffmpeg').projectDir = new File(rootDir, 'libraries/decoder_ffmpeg')
7880
include modulePrefix + 'lib-decoder-flac'

demos/main/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ dependencies {
8383
implementation project(modulePrefix + 'lib-datasource-cronet')
8484
implementation project(modulePrefix + 'lib-exoplayer-ima')
8585
withDecoderExtensionsImplementation project(modulePrefix + 'lib-decoder-av1')
86+
withDecoderExtensionsImplementation project(modulePrefix + 'lib-decoder-dav1d')
8687
withDecoderExtensionsImplementation project(modulePrefix + 'lib-decoder-ffmpeg')
8788
withDecoderExtensionsImplementation project(modulePrefix + 'lib-decoder-flac')
8889
withDecoderExtensionsImplementation project(modulePrefix + 'lib-decoder-opus')

libraries/exoplayer/proguard-rules.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
-keepclassmembers class androidx.media3.decoder.av1.Libgav1VideoRenderer {
1010
<init>(long, android.os.Handler, androidx.media3.exoplayer.video.VideoRendererEventListener, int);
1111
}
12+
-dontnote androidx.media3.decoder.av1.Libdav1dVideoRenderer
13+
-keepclassmembers class androidx.media3.decoder.av1.Libdav1dVideoRenderer {
14+
<init>(long, android.os.Handler, androidx.media3.exoplayer.video.VideoRendererEventListener, int);
15+
}
1216
-dontnote androidx.media3.decoder.ffmpeg.ExperimentalFfmpegVideoRenderer
1317
-keepclassmembers class androidx.media3.decoder.ffmpeg.ExperimentalFfmpegVideoRenderer {
1418
<init>(long, android.os.Handler, androidx.media3.exoplayer.video.VideoRendererEventListener, int);

libraries/exoplayer/src/main/java/androidx/media3/exoplayer/DefaultRenderersFactory.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,35 @@ protected void buildVideoRenderers(
486486
throw new IllegalStateException("Error instantiating VP9 extension", e);
487487
}
488488

489+
try {
490+
// LINT.IfChange
491+
Class<?> clazz = Class.forName("androidx.media3.decoder.dav1d.Libdav1dVideoRenderer");
492+
// Full class names used for media3 constructor args so the LINT rule triggers if any of them
493+
// move.
494+
@SuppressWarnings("UnnecessarilyFullyQualified")
495+
Constructor<?> constructor =
496+
clazz.getConstructor(
497+
long.class,
498+
Handler.class,
499+
androidx.media3.exoplayer.video.VideoRendererEventListener.class,
500+
int.class);
501+
// LINT.ThenChange(../../../../../../proguard-rules.txt)
502+
Renderer renderer =
503+
(Renderer)
504+
constructor.newInstance(
505+
allowedVideoJoiningTimeMs,
506+
eventHandler,
507+
eventListener,
508+
MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY);
509+
out.add(extensionRendererIndex++, renderer);
510+
Log.i(TAG, "Loaded Libdav1dVideoRenderer.");
511+
} catch (ClassNotFoundException e) {
512+
// Expected if the app was built without the extension.
513+
} catch (Exception e) {
514+
// The extension is present, but instantiation failed.
515+
throw new IllegalStateException("Error instantiating dav1d AV1 extension", e);
516+
}
517+
489518
try {
490519
// LINT.IfChange
491520
Class<?> clazz = Class.forName("androidx.media3.decoder.av1.Libgav1VideoRenderer");

0 commit comments

Comments
 (0)