3434import androidx .appcompat .app .AppCompatActivity ;
3535import androidx .media3 .common .AudioAttributes ;
3636import androidx .media3 .common .C ;
37+ import androidx .media3 .common .CodecParameter ;
38+ import androidx .media3 .common .CodecParameters ;
39+ import androidx .media3 .common .CodecParametersChangeListener ;
3740import androidx .media3 .common .ErrorMessageProvider ;
3841import androidx .media3 .common .MediaItem ;
3942import androidx .media3 .common .PlaybackException ;
4043import androidx .media3 .common .Player ;
4144import androidx .media3 .common .TrackSelectionParameters ;
4245import androidx .media3 .common .Tracks ;
46+ import androidx .media3 .common .util .Log ;
4347import androidx .media3 .common .util .UnstableApi ;
4448import androidx .media3 .common .util .Util ;
4549import androidx .media3 .datasource .DataSchemeDataSource ;
6165import androidx .media3 .ui .PlayerView ;
6266import java .util .ArrayList ;
6367import java .util .Collections ;
68+ import java .util .HashMap ;
6469import java .util .List ;
6570import org .checkerframework .checker .nullness .qual .MonotonicNonNull ;
6671
@@ -261,6 +266,7 @@ protected void setContentView() {
261266 /**
262267 * @return Whether initialization was successful.
263268 */
269+ @ OptIn (markerClass = UnstableApi .class )
264270 protected boolean initializePlayer () {
265271 Intent intent = getIntent ();
266272 if (player == null ) {
@@ -277,6 +283,56 @@ protected boolean initializePlayer() {
277283 setRenderersFactory (
278284 playerBuilder , intent .getBooleanExtra (IntentUtil .PREFER_EXTENSION_DECODERS_EXTRA , false ));
279285 player = playerBuilder .build ();
286+
287+ // --------------------------- TESTING CODE ONLY -- REMOVE AGAIN ----------------------------
288+ player .setCodecParametersChangeListener (new CodecParametersChangeListener () {
289+ @ Override
290+ public void onCodecParametersChanged (CodecParameters codecParameters ) {
291+ HashMap <String , CodecParameter > parameters = codecParameters .get ();
292+ for (String key : parameters .keySet ()) {
293+ Log .e ("PlayerActivity" , "key = " + key + " value = " + parameters .get (key ));
294+ }
295+ }
296+
297+ @ Override
298+ public ArrayList <String > getFilterKeys () {
299+ ArrayList <String > filterKeys = new ArrayList <>();
300+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .R ) {
301+ filterKeys .add (CodecParameter .KEY_AAC_DRC_OUTPUT_LOUDNESS );
302+ }
303+ return filterKeys ;
304+ }
305+ });
306+
307+ CodecParameter codecParameter ;
308+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .LOLLIPOP ) {
309+ // For testing set initial targetLoudness to -16 LUFS
310+ codecParameter = new CodecParameter (CodecParameter .KEY_AAC_DRC_TARGET_REFERENCE_LEVEL , 64 ,
311+ CodecParameter .VALUETYPE_INT );
312+ player .setCodecParameter (codecParameter );
313+ // For testing set initial BoostFactor to 32
314+ codecParameter = new CodecParameter (CodecParameter .KEY_AAC_DRC_BOOST_FACTOR , 32 ,
315+ CodecParameter .VALUETYPE_INT );
316+ player .setCodecParameter (codecParameter );
317+ // For testing set initial AttenuationFactor to 16
318+ codecParameter = new CodecParameter (CodecParameter .KEY_AAC_DRC_ATTENUATION_FACTOR , 16 ,
319+ CodecParameter .VALUETYPE_INT );
320+ player .setCodecParameter (codecParameter );
321+ }
322+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .P ) {
323+ // For testing set initial EffectType to NOISY_ENVIRONMENT
324+ codecParameter = new CodecParameter (CodecParameter .KEY_AAC_DRC_EFFECT_TYPE , 2 ,
325+ CodecParameter .VALUETYPE_INT );
326+ player .setCodecParameter (codecParameter );
327+ }
328+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .R ) {
329+ // For testing set initial AlbumMode to ENABLED
330+ codecParameter = new CodecParameter (CodecParameter .KEY_AAC_DRC_ALBUM_MODE , 1 ,
331+ CodecParameter .VALUETYPE_INT );
332+ player .setCodecParameter (codecParameter );
333+ }
334+ // --------------------------- TESTING CODE ONLY -- REMOVE AGAIN ----------------------------
335+
280336 player .setTrackSelectionParameters (trackSelectionParameters );
281337 player .addListener (new PlayerEventListener ());
282338 player .addAnalyticsListener (new EventLogger ());
@@ -298,6 +354,44 @@ protected boolean initializePlayer() {
298354 player .setRepeatMode (IntentUtil .parseRepeatModeExtra (repeatModeExtra ));
299355 }
300356 updateButtonVisibility ();
357+
358+ // --------------------------- TESTING CODE ONLY -- REMOVE AGAIN ----------------------------
359+ // Simulate sleep so the MPEG-D DRC can change during runtime
360+ try {
361+ Thread .sleep (2000 );
362+ } catch (InterruptedException e ) {
363+ e .printStackTrace ();
364+ }
365+
366+ CodecParameter codecParameter ;
367+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .LOLLIPOP ) {
368+ // Testing a change to the targetLoudness during codec runtime (set to -24 LUFS)
369+ codecParameter = new CodecParameter (CodecParameter .KEY_AAC_DRC_TARGET_REFERENCE_LEVEL , 96 ,
370+ CodecParameter .VALUETYPE_INT );
371+ player .setCodecParameter (codecParameter );
372+ // Testing a change to the boost factor during codec runtime (set to 96)
373+ codecParameter = new CodecParameter (CodecParameter .KEY_AAC_DRC_BOOST_FACTOR , 96 ,
374+ CodecParameter .VALUETYPE_INT );
375+ player .setCodecParameter (codecParameter );
376+ // Testing a change to the attenuation factor during codec runtime (set to 64)
377+ codecParameter = new CodecParameter (CodecParameter .KEY_AAC_DRC_ATTENUATION_FACTOR , 64 ,
378+ CodecParameter .VALUETYPE_INT );
379+ player .setCodecParameter (codecParameter );
380+ }
381+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .P ) {
382+ // Testing a change to the EffectType during codec runtime (set to OFF)
383+ codecParameter = new CodecParameter (CodecParameter .KEY_AAC_DRC_EFFECT_TYPE , -1 ,
384+ CodecParameter .VALUETYPE_INT );
385+ player .setCodecParameter (codecParameter );
386+ }
387+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .R ) {
388+ // Testing a change to the album mode during codec runtime (set to DISABLED)
389+ codecParameter = new CodecParameter (CodecParameter .KEY_AAC_DRC_ALBUM_MODE , 0 ,
390+ CodecParameter .VALUETYPE_INT );
391+ player .setCodecParameter (codecParameter );
392+ }
393+ // --------------------------- TESTING CODE ONLY -- REMOVE AGAIN ----------------------------
394+
301395 return true ;
302396 }
303397
0 commit comments