FDPT: Full Decrypt Path Testing Application

Cherry pick of http://go/ag/9326830

This is a merge of the full decrypt path testing CLs from the Widevine
repo: http://go/wvgerrit/q/topic:FDPT-subsamples

This is the Full Decrypt Path Testing application that can be used by
device makers to verify that OEMCrypto is correctly decrypting content
to secure buffers.

Testing: Ran App.
Bug: 113594822

Change-Id: Icbb1e2f2e762bac3cc1b7b20749922c14ea24449
This commit is contained in:
Fred Gylys-Colwell
2019-10-28 14:57:22 -07:00
parent 2ee373e251
commit ea539673a4
78 changed files with 4565 additions and 0 deletions

View File

@@ -0,0 +1,34 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportHeight="108"
android:viewportWidth="108">
<path
android:fillType="evenOdd"
android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
android:strokeColor="#00000000"
android:strokeWidth="1">
<aapt:attr name="android:fillColor">
<gradient
android:endX="78.5885"
android:endY="90.9159"
android:startX="48.7653"
android:startY="61.0927"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0" />
<item
android:color="#00000000"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
android:strokeColor="#00000000"
android:strokeWidth="1" />
</vector>

View File

@@ -0,0 +1,170 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportHeight="108"
android:viewportWidth="108">
<path
android:fillColor="#26A69A"
android:pathData="M0,0h108v108h-108z" />
<path
android:fillColor="#00000000"
android:pathData="M9,0L9,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,0L19,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M29,0L29,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M39,0L39,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M49,0L49,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M59,0L59,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M69,0L69,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M79,0L79,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M89,0L89,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M99,0L99,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,9L108,9"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,19L108,19"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,29L108,29"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,39L108,39"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,49L108,49"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,59L108,59"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,69L108,69"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,79L108,79"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,89L108,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,99L108,99"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,29L89,29"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,39L89,39"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,49L89,49"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,59L89,59"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,69L89,69"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,79L89,79"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M29,19L29,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M39,19L39,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M49,19L49,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M59,19L59,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M69,19L69,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M79,19L79,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
</vector>

View File

@@ -0,0 +1,178 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.google.widevine.fulldecryptpathtesting.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:visibility="visible">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal"
android:visibility="visible">
<Button
android:id="@+id/button_setup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="configureTest"
android:text="@string/setup"
android:minWidth="60dp"
android:layout_marginTop="0dp"
android:layout_marginBottom="0dp"
android:layout_marginEnd="0dp"
android:layout_marginLeft="0dp"
android:layout_marginRight="0dp"
android:paddingBottom="0dp"
android:paddingEnd="0dp"
android:paddingLeft="0dp"
android:paddingRight="0dp"
android:paddingStart="0dp"
android:paddingTop="0dp"
android:textAppearance="?android:attr/textAppearanceSmall"
/>
<Button
android:id="@+id/button_start"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginBottom="0dp"
android:layout_marginEnd="0dp"
android:layout_marginLeft="0dp"
android:layout_marginRight="0dp"
android:layout_marginTop="0dp"
android:minWidth="60dp"
android:onClick="startTest"
android:paddingBottom="0dp"
android:paddingEnd="0dp"
android:paddingLeft="0dp"
android:paddingRight="0dp"
android:paddingStart="0dp"
android:paddingTop="0dp"
android:text="@string/play"
android:textAppearance="?android:attr/textAppearanceSmall"
/>
<Button
android:id="@+id/button_stop"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginBottom="0dp"
android:layout_marginEnd="0dp"
android:layout_marginLeft="0dp"
android:layout_marginRight="0dp"
android:layout_marginTop="0dp"
android:minWidth="60dp"
android:onClick="stopTest"
android:paddingBottom="0dp"
android:paddingEnd="0dp"
android:paddingLeft="0dp"
android:paddingRight="0dp"
android:paddingStart="0dp"
android:paddingTop="0dp"
android:text="@string/stop"
android:textAppearance="?android:attr/textAppearanceSmall"
/>
<Button
android:id="@+id/button_clear"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginBottom="0dp"
android:layout_marginEnd="0dp"
android:layout_marginLeft="0dp"
android:layout_marginRight="0dp"
android:layout_marginTop="0dp"
android:minWidth="60dp"
android:onClick="clearLog"
android:paddingBottom="0dp"
android:paddingEnd="0dp"
android:paddingLeft="0dp"
android:paddingRight="0dp"
android:paddingStart="0dp"
android:paddingTop="0dp"
android:text="@string/clear"
android:textAppearance="?android:attr/textAppearanceSmall"
/>
<Space
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_weight="1"
android:orientation="horizontal"
android:visibility="visible">
<TextView
android:id="@+id/status"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:text="status" />
<Space
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="2"
android:orientation="vertical"
android:visibility="visible">
<SurfaceView
android:id="@+id/playback_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
<ScrollView
android:id="@+id/log_scroll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:fillViewport="true">
<TextView
android:id="@+id/log_output"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:text="No output yet." />
</ScrollView>
</LinearLayout>
</LinearLayout>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<item android:id="@+id/menu_setup"
android:icon="@android:drawable/ic_menu_preferences"
android:title="@string/setup"
android:showAsAction="ifRoom|withText"
tools:ignore="AppCompatResource"/>
<item android:id="@+id/menu_play"
android:icon="@android:drawable/ic_media_play"
android:title="@string/play"
android:showAsAction="ifRoom|withText"
tools:ignore="AppCompatResource"/>
</menu>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 755 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 934 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 601 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 903 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
</resources>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#402174</color>
</resources>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:ignore="MissingTranslation">
<!-- Keys used for preferences. -->
<string name="key_test_cenc">test_cenc</string>
<string name="key_test_cens">test_cens</string>
<string name="key_test_cbc1">test_cbc1</string>
<string name="key_test_cbcs">test_cbcs</string>
<string name="key_test_max">test_max</string>
<string name="key_test_wrap">test_wrap</string>
<string name="key_test_multi_subsample">test_multi_subsample</string>
<string name="key_log_each_frame">test_log_each_frame</string>
<string name="key_random_test_count">random_test_count</string>
<string name="key_random_seed">random_seed</string>
<string name="key_test_frame">random_test_count</string>
<string name="key_use_level_1">use_level_1</string>
<string name="key_use_secure_buffer">use_secure_buffer</string>
<string name="key_codec">codec</string>
<string name="default_codec">default</string>
<!-- Keys used for MediaDrm.getPropertyString. -->
<string name="key_security_level">securityLevel</string>
<string name="key_system_id">systemId</string>
<string name="key_cdm_version">version</string>
<string name="key_oemcrypto_api">oemCryptoApiVersion</string>
<string name="key_oemcrypto_build_info">oemCryptoBuildInformation</string>
<string name="key_hash_support">decryptHashSupport</string>
<string name="key_resource_rating">resourceRatingTier</string>
</resources>

View File

@@ -0,0 +1,89 @@
<resources>
<string name="app_name">Full Decrypt Path Testing</string>
<string name="short_app_name">FDPT</string>
<string name="setup">Setup</string>
<string name="play">Start Test</string>
<string name="stop">Stop Test</string>
<string name="clear">Clear</string>
<string name="title_activity_settings">Settings</string>
<!-- Strings related to properties that are displayed -->
<string name="security_level">Security Level</string>
<string name="system_id">System ID</string>
<string name="cdm_version">Widevine Plugin Version</string>
<string name="oemcrypto_api">OEMCrypto API version</string>
<string name="oemcrypto_build_info">OEMCrypto Build Info</string>
<string name="hash_support">Decrypt Hash Supported</string>
<string name="resource_rating">Resource Rating Tier</string>
<!-- Strings related to Settings -->
<string name="pref_main_category">Full Decrypt Path Testing Setup</string>
<string name="pref_test_cenc">Test \"cenc\"</string>
<string name="pref_test_cenc_summary">Run tests with CTR mode and no pattern</string>
<string name="pref_test_cens">Test \"cens\"</string>
<string name="pref_test_cens_summary">Run tests with CTR mode with pattern (rare)</string>
<string name="pref_test_cbc1">Test \"cbc1\"</string>
<string name="pref_test_cbc1_summary">Run tests with CBC mode and no pattern (rare)</string>
<string name="pref_test_cbcs">Test \"cbcs\"</string>
<string name="pref_test_cbcs_summary">Run tests with CBC mode with pattern</string>
<string name="pref_test_max">Test Maximum Buffer Sizes</string>
<string name="pref_test_max_summary">Run tests with maximum sample
and subsample sizes for OEMCrypto. This may cause problems with the codec if it cannot
handle OEMCrypto\'s maximum buffer size.</string>
<string name="pref_test_wrap">Test IV overflow</string>
<string name="pref_test_wrap_summary">Run tests with an IV in counter mode that
overflows when incremented.</string>
<string name="pref_test_multi_subsample">Test Multisubsample for cens and cbc1</string>
<string name="pref_test_multi_subsample_summary">If true, tests are run which include
more than one subsample for \"cens\" and \"cbc1\". A bug in the CDM layer may
prevent \"cbc1\" test from passing.</string>
<string name="pref_log_each_frame">Log Each Frame</string>
<string name="pref_log_each_frame_summary">If true, then a description of each
frame is logged to the output window. This is very verbose, and will slow
the tests down significantly. However, when debugging, it might help to see
descriptions of tests that pass.</string>
<string name="pref_random_test_count">Random Test Count</string>
<string name="pref_random_test_count_summary">Click to set how many random tests
to run for each encryption scheme.</string>
<string name="pref_random_seed">Random Seed</string>
<string name="pref_random_seed_summary">If set, this is used to seed the test
factory\'s random number generator. The seed may be found in the logcat. This
allows a user to repeate a previous test.</string>
<string name="pref_test_frame">Test Frame</string>
<string name="pref_test_frame_summary">if set, only thiis frame will be tested.
This allows a user to isolate and debug a single failing test case.</string>
<string name="pref_use_level_1">Use Level 1</string>
<string name="pref_use_level_1_summary">If this is set, the L1 OEMCrypto is used</string>
<string name="pref_use_secure_buffer">Use Secure Buffer</string>
<string name="pref_use_secure_buffer_summary">If the default codec is used,
then this determines if it is secure or not.</string>
<string name="pref_codec">Codec</string>
<string name="pref_codec_summary">The name of the Codec to use.
If this is not set, then a default codec is chosen for mime type video/avc.
The user must make sure it is for video and uses a secure buffer
if required.\n
current = %1$s</string>
<string name="default_codec_description">Use default codec for video mime type.</string>
</resources>
<!-- Note to translators:
The following abbreviations are only used by Widevine. They probably should NOT be translated.
FDPT = an abbreviation of "Full Decrypt Path Testing", which is this application.
L1 = Level 1.
The following abbreviations are documented here: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation
They are familiar to most engineers who would use this application.
CTR = Counter
CBC = Cipher Block Chaining.
IV = initialization vector.
"overflow" refers to integer overflow, as documented here:
https://en.wikipedia.org/wiki/Integer_overflow
"hash" refers to https://en.wikipedia.org/wiki/Hash_function
"secure buffer" refers to the type of buffer used in Android, as documented in the MediaCodec:
https://developer.android.com/reference/android/media/MediaCodec#creating-secure-decoders
-->

View File

@@ -0,0 +1,11 @@
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>

View File

@@ -0,0 +1,104 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:key="pref_key_main_category"
android:title="@string/pref_main_category">
<SwitchPreference
android:key="@string/key_use_level_1"
android:title="@string/pref_use_level_1"
android:summary="@string/pref_use_level_1_summary"
android:defaultValue="true"
/>
<SwitchPreference
android:key="@string/key_use_secure_buffer"
android:title="@string/pref_use_secure_buffer"
android:summary="@string/pref_use_secure_buffer_summary"
android:defaultValue="true"
/>
<com.google.widevine.fulldecryptpathtesting.CodecPreference
android:key="@string/key_codec"
android:title="@string/pref_codec"
android:summary="@string/pref_codec_summary"
android:defaultValue="@string/default_codec"
/>
<EditTextPreference
android:key="@string/key_random_test_count"
android:title="@string/pref_random_test_count"
android:summary="@string/pref_random_test_count_summary"
android:inputType="number"
android:defaultValue="5000"
/>
<SwitchPreference
android:key="@string/key_test_cenc"
android:title="@string/pref_test_cenc"
android:summary="@string/pref_test_cenc_summary"
android:defaultValue="true"
/>
<SwitchPreference
android:key="@string/key_test_cens"
android:title="@string/pref_test_cens"
android:summary="@string/pref_test_cens_summary"
android:defaultValue="true"
/>
<SwitchPreference
android:key="@string/key_test_cbc1"
android:title="@string/pref_test_cbc1"
android:summary="@string/pref_test_cbc1_summary"
android:defaultValue="false"
/>
<SwitchPreference
android:key="@string/key_test_cbcs"
android:title="@string/pref_test_cbcs"
android:summary="@string/pref_test_cbcs_summary"
android:defaultValue="true"
/>
<SwitchPreference
android:key="@string/key_test_max"
android:title="@string/pref_test_max"
android:summary="@string/pref_test_max_summary"
android:defaultValue="false"
/>
<SwitchPreference
android:key="@string/key_test_wrap"
android:title="@string/pref_test_wrap"
android:summary="@string/pref_test_wrap_summary"
android:defaultValue="true"
/>
<!-- TODO(b/139257871) This defaults to false because cbc1 is not -->
<!-- handled correctly on most versions of Android at the CDM layer. -->
<SwitchPreference
android:key="@string/key_test_multi_subsample"
android:title="@string/pref_test_multi_subsample"
android:summary="@string/pref_test_multi_subsample_summary"
android:defaultValue="false"
/>
<SwitchPreference
android:key="@string/key_log_each_frame"
android:title="@string/pref_log_each_frame"
android:summary="@string/pref_log_each_frame_summary"
android:defaultValue="false"
/>
<EditTextPreference
android:key="@string/key_random_seed"
android:title="@string/pref_random_seed"
android:summary="@string/pref_random_seed_summary"
android:inputType="number"
android:defaultValue=""
/>
</PreferenceCategory>
</PreferenceScreen>