123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368 |
- using UnityEngine;
- using UnityEditor;
- //-----------------------------------------------------------------------------
- // Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
- //-----------------------------------------------------------------------------
- namespace RenderHeads.Media.AVProVideo.Editor
- {
- /// <summary>
- /// Editor for the MediaPlayer component
- /// </summary>
- public partial class MediaPlayerEditor : UnityEditor.Editor
- {
- private static int _platformIndex = -1;
- private static bool _HTTPHeadersToggle = false;
- private static GUIContent[] _platformNames = null;
- private void OnInspectorGUI_SelectPlatform()
- {
- // TODO: support multiple targets?
- MediaPlayer media = (this.target) as MediaPlayer;
- int i = 0;
- int platformIndex = _platformIndex;
- foreach (GUIContent platformText in _platformNames)
- {
- MediaPlayer.PlatformOptions options = media.GetPlatformOptions((Platform)i);
- Color hilight = Color.yellow;
- if (i == _platformIndex)
- {
- // Selected, unmodified
- if (!options.IsModified())
- {
- GUI.contentColor = Color.white;
- }
- else
- {
- // Selected, modified
- GUI.color = hilight;
- GUI.contentColor = Color.white;
- }
- }
- else if (options.IsModified())
- {
- // Unselected, modified
- GUI.backgroundColor = Color.grey* hilight;
- GUI.contentColor = hilight;
- }
- else
- {
- // Unselected, unmodified
- if (EditorGUIUtility.isProSkin)
- {
- GUI.backgroundColor = Color.grey;
- GUI.color = new Color(0.65f, 0.66f, 0.65f);// Color.grey;
- }
- }
- if (i == _platformIndex)
- {
- if (!GUILayout.Toggle(true, _platformNames[i], GUI.skin.button))
- {
- platformIndex = -1;
- }
- }
- else
- {
- GUI.skin.button.imagePosition = ImagePosition.ImageOnly;
- if (GUILayout.Toggle(false, _platformNames[i], GUI.skin.button))
- {
- platformIndex = i;
- }
- GUI.skin.button.imagePosition = ImagePosition.ImageLeft;
- }
-
- GUI.backgroundColor = Color.white;
- GUI.contentColor = Color.white;
- GUI.color = Color.white;
- i++;
- }
- //_platformIndex = GUILayout.SelectionGrid(_platformIndex, _platformNames, 3);
- //return;
- #if false
- int rowCount = 0;
- int platformIndex = _platformIndex;
- const int itemsPerLine = 4;
- for (int i = 0; i < _platformNames.Length; i++)
- {
- if (i % itemsPerLine == 0)
- {
- GUILayout.BeginHorizontal();
- rowCount++;
- }
- MediaPlayer.PlatformOptions options = media.GetPlatformOptions((Platform)i);
- Color hilight = Color.yellow;
- if (i == _platformIndex)
- {
- // Selected, unmodified
- if (!options.IsModified())
- {
- GUI.contentColor = Color.white;
- }
- else
- {
- // Selected, modified
- GUI.color = hilight;
- GUI.contentColor = Color.white;
- }
- }
- else if (options.IsModified())
- {
- // Unselected, modified
- GUI.backgroundColor = Color.grey* hilight;
- GUI.contentColor = hilight;
- }
- else
- {
- // Unselected, unmodified
- if (EditorGUIUtility.isProSkin)
- {
- GUI.backgroundColor = Color.grey;
- GUI.color = new Color(0.65f, 0.66f, 0.65f);// Color.grey;
- }
- }
- if (i == _platformIndex)
- {
- if (!GUILayout.Toggle(true, _platformNames[i], GUI.skin.button))
- {
- platformIndex = -1;
- }
- }
- else
- {
- GUI.skin.button.imagePosition = ImagePosition.ImageOnly;
- if (GUILayout.Toggle(false, _platformNames[i], GUI.skin.button))
- {
- platformIndex = i;
- }
- GUI.skin.button.imagePosition = ImagePosition.ImageLeft;
- }
- if ((i+1) % itemsPerLine == 0)
- {
- rowCount--;
- GUILayout.EndHorizontal();
- }
- GUI.backgroundColor = Color.white;
- GUI.contentColor = Color.white;
- GUI.color = Color.white;
- }
- if (rowCount > 0)
- {
- GUILayout.EndHorizontal();
- }
- #endif
- //platformIndex = GUILayout.SelectionGrid(_platformIndex, Helper.GetPlatformNames(), 3);
- //int platformIndex = GUILayout.Toolbar(_platformIndex, Helper.GetPlatformNames());
- if (platformIndex != _platformIndex)
- {
- _platformIndex = platformIndex;
- // We do this to clear the focus, otherwise a focused text field will not change when the Toolbar index changes
- EditorGUI.FocusTextInControl("ClearFocus");
- }
- }
- private void OnInspectorGUI_PlatformOverrides()
- {
- foreach (AnimCollapseSection section in _platformSections)
- {
- AnimCollapseSection.Show(section, indentLevel:2);
- }
- }
- private readonly static GUIContent[] _audio360ChannelMapGuiNames =
- {
- new GUIContent("(TBE_8_2) 8 channels of hybrid TBE ambisonics and 2 channels of head-locked stereo audio"),
- new GUIContent("(TBE_8) 8 channels of hybrid TBE ambisonics. NO head-locked stereo audio"),
- new GUIContent("(TBE_6_2) 6 channels of hybrid TBE ambisonics and 2 channels of head-locked stereo audio"),
- new GUIContent("(TBE_6) 6 channels of hybrid TBE ambisonics. NO head-locked stereo audio"),
- new GUIContent("(TBE_4_2) 4 channels of hybrid TBE ambisonics and 2 channels of head-locked stereo audio"),
- new GUIContent("(TBE_4) 4 channels of hybrid TBE ambisonics. NO head-locked stereo audio"),
- new GUIContent("(TBE_8_PAIR0) Channels 1 and 2 of TBE hybrid ambisonics"),
- new GUIContent("(TBE_8_PAIR1) Channels 3 and 4 of TBE hybrid ambisonics"),
- new GUIContent("(TBE_8_PAIR2) Channels 5 and 6 of TBE hybrid ambisonics"),
- new GUIContent("(TBE_8_PAIR3) Channels 7 and 8 of TBE hybrid ambisonics"),
- new GUIContent("(TBE_CHANNEL0) Channels 1 of TBE hybrid ambisonics"),
- new GUIContent("(TBE_CHANNEL1) Channels 2 of TBE hybrid ambisonics"),
- new GUIContent("(TBE_CHANNEL2) Channels 3 of TBE hybrid ambisonics"),
- new GUIContent("(TBE_CHANNEL3) Channels 4 of TBE hybrid ambisonics"),
- new GUIContent("(TBE_CHANNEL4) Channels 5 of TBE hybrid ambisonics"),
- new GUIContent("(TBE_CHANNEL5) Channels 6 of TBE hybrid ambisonics"),
- new GUIContent("(TBE_CHANNEL6) Channels 7 of TBE hybrid ambisonics"),
- new GUIContent("(TBE_CHANNEL7) Channels 8 of TBE hybrid ambisonics"),
- new GUIContent("(HEADLOCKED_STEREO) Head-locked stereo audio"),
- new GUIContent("(HEADLOCKED_CHANNEL0) Channels 1 or left of head-locked stereo audio"),
- new GUIContent("(HEADLOCKED_CHANNEL1) Channels 2 or right of head-locked stereo audio"),
- new GUIContent("(AMBIX_4) 4 channels of first order ambiX"),
- new GUIContent("(AMBIX_4_2) 4 channels of first order ambiX with 2 channels of head-locked audio"),
- new GUIContent("(AMBIX_9) 9 channels of second order ambiX"),
- new GUIContent("(AMBIX_9_2) 9 channels of second order ambiX with 2 channels of head-locked audio"),
- new GUIContent("(AMBIX_16) 16 channels of third order ambiX"),
- new GUIContent("(AMBIX_16_2) 16 channels of third order ambiX with 2 channels of head-locked audio"),
- new GUIContent("(MONO) Mono audio"),
- new GUIContent("(STEREO) Stereo audio"),
- };
- private struct FieldDescription
- {
- public FieldDescription(string fieldName, GUIContent description)
- {
- this.fieldName = fieldName;
- this.description = description;
- }
- public string fieldName;
- public GUIContent description;
- }
- private SerializedProperty DisplayPlatformOption(string platformOptionsFieldName, FieldDescription option)
- {
- return DisplayPlatformOption(this.serializedObject, platformOptionsFieldName + option.fieldName, option.description);
- }
- private static SerializedProperty DisplayPlatformOption(SerializedObject so, string fieldName, GUIContent description)
- {
- SerializedProperty prop = so.FindProperty(fieldName);
- if (prop != null)
- {
- if (description == GUIContent.none)
- {
- EditorGUILayout.PropertyField(prop, true);
- }
- else
- {
- EditorGUILayout.PropertyField(prop, description, true);
- }
- }
- else
- {
- Debug.LogWarning("Can't find property `" + fieldName + "`");
- }
- return prop;
- }
- private SerializedProperty DisplayPlatformOptionEnum(string platformOptionsFieldName, FieldDescription option, GUIContent[] enumNames)
- {
- return DisplayPlatformOptionEnum(this.serializedObject, platformOptionsFieldName + option.fieldName, option.description, enumNames);
- }
- private static SerializedProperty DisplayPlatformOptionEnum(SerializedObject so, string fieldName, GUIContent description, GUIContent[] enumNames)
- {
- SerializedProperty prop = so.FindProperty(fieldName);
- if (prop != null)
- {
- prop.enumValueIndex = EditorGUILayout.Popup(description, prop.enumValueIndex, enumNames);
- }
- else
- {
- Debug.LogWarning("Can't find property `" + fieldName + "`");
- }
- return prop;
- }
- #if false
- private void OnInspectorGUI_HlsDecryption(string optionsVarName)
- {
- EditorGUILayout.BeginVertical(GUI.skin.box);
- GUILayout.Label("HLS Decryption", EditorStyles.boldLabel);
- // Key server auth token
- SerializedProperty prop = serializedObject.FindProperty(optionsVarName + ".keyAuth.keyServerToken");
- if (prop != null)
- {
- EditorGUILayout.PropertyField(prop, new GUIContent("Key Server Auth Token", "Token to pass to the key server in the 'Authorization' HTTP header field"));
- }
- GUILayout.Label("Overrides");
- EditorGUI.indentLevel++;
- // Key server override
- /*prop = serializedObject.FindProperty(optionsVarName + ".keyServerURLOverride");
- if (prop != null)
- {
- EditorGUILayout.PropertyField(prop, new GUIContent("Key Server URL", "Overrides the key server URL if present in a HLS manifest."));
- }*/
-
- // Key data blob override
- prop = serializedObject.FindProperty(optionsVarName + ".keyAuth.overrideDecryptionKeyBase64");
- if (prop != null)
- {
- EditorGUILayout.PropertyField(prop, new GUIContent("Key (Base64)", "Override key to use for decoding encrypted HLS streams (in Base64 format)."));
- }
- EditorGUI.indentLevel--;
- EditorGUILayout.EndVertical();
- }
- private void OnInspectorGUI_HttpHeaders(string platformOptionsVarName)
- {
- SerializedProperty httpHeadersProp = serializedObject.FindProperty(platformOptionsVarName + ".httpHeaders.httpHeaders");
- if (httpHeadersProp != null)
- {
- if (BeginCollapsableSection("Custom HTTP Headers", ref _HTTPHeadersToggle))
- {
- {
- if (httpHeadersProp.arraySize > 0)
- {
- int deleteIndex = -1;
- for (int i = 0; i < httpHeadersProp.arraySize; ++i)
- {
- SerializedProperty httpHeaderProp = httpHeadersProp.GetArrayElementAtIndex(i);
- SerializedProperty headerProp = httpHeaderProp.FindPropertyRelative("name");
- GUILayout.BeginVertical(GUI.skin.box);
- GUILayout.BeginHorizontal();
- GUI.color = HttpHeader.IsValid(headerProp.stringValue)?Color.white:Color.red;
- EditorGUILayout.PropertyField(headerProp, GUIContent.none);
- headerProp.stringValue = headerProp.stringValue.Trim();
- GUI.color = Color.white;
- if (GUILayout.Button("-", GUILayout.ExpandWidth(false)))
- {
- deleteIndex = i;
- }
- GUILayout.EndHorizontal();
- SerializedProperty valueProp = httpHeaderProp.FindPropertyRelative("value");
- GUI.color = HttpHeader.IsValid(valueProp.stringValue)?Color.white:Color.red;
- valueProp.stringValue = EditorGUILayout.TextArea(valueProp.stringValue, EditorHelper.IMGUI.GetWordWrappedTextAreaStyle());
- GUI.color = Color.white;
- valueProp.stringValue = valueProp.stringValue.Trim();
- GUILayout.EndVertical();
- GUILayout.Space(4f);
- }
- if (deleteIndex >= 0)
- {
- httpHeadersProp.DeleteArrayElementAtIndex(deleteIndex);
- }
- }
- if (GUILayout.Button("+"))
- {
- httpHeadersProp.InsertArrayElementAtIndex(httpHeadersProp.arraySize);
- }
- }
- }
- EndCollapsableSection();
- }
- }
- #endif
- }
- }
|