🐛 Fix source switching crash & enhance stability (v3.0.4)

### 🐛 Bug Fixes
- Fix random crashes when switching video sources in settings management
- Enhanced VodConfig.setHome() null pointer exception handling
- Improved Fragment lifecycle checks to prevent crashes
- Optimized HistoryDialog source switching safety
- Enhanced thread safety for concurrent loading

###  Performance Improvements
- Added automatic cache cleaning functionality
- Improved memory usage optimization
- Enhanced network request stability

### 🆕 New Features
- Added comprehensive error handling mechanisms
- Enhanced crash protection functionality
- Improved Fragment state validation

### 📱 Build Improvements
- Updated README with professional documentation
- Enhanced build configuration for ARM64-V8A and ARM V7A
- Improved APK packaging and signing process
This commit is contained in:
您的名字
2025-07-30 21:25:10 +08:00
parent 0d7b25710c
commit dab1425dea
345 changed files with 40300 additions and 754 deletions
@@ -0,0 +1,354 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="urn:schemas-upnp-org:metadata-1-0/AVT/"
xmlns:avt="urn:schemas-upnp-org:metadata-1-0/AVT/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<!--
TODO: This schema was copied from AVTransport1.0.pdf.
Apparently the UPnP clowns couldn't agree if it is *Metadata or *MetaData.
So I've made changes and now all elements are called *MetaData, like the
state variables in the spec. That _will_ break if someone really uses
the original schema.
-->
<xsd:annotation>
<xsd:documentation xml:lang="en">
Schema for UPnP A/V AVTransport Service events, version 0.1(sic!)
</xsd:documentation>
</xsd:annotation>
<!--============================================================
'Event' is the root element of AVTransport event document fragments.
'InstanceID' is the only valid child of 'Event'.
============================================================-->
<xsd:element name="Event">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>Event is the root
element
</xsd:documentation>
</xsd:annotation>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element ref="avt:InstanceID"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<!--============================================================
'InstanceID' elements identify an individual event instance.
============================================================-->
<xsd:group name="allowed-under-InstanceID">
<xsd:annotation>
<xsd:documentation>
This group defines the elements allowed under the InstanceID element
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:element ref="avt:TransportState"/>
<xsd:element ref="avt:TransportStatus"/>
<xsd:element ref="avt:PlaybackStorageMedium"/>
<xsd:element ref="avt:RecordStorageMedium"/>
<xsd:element ref="avt:PossiblePlaybackStorageMedia"/>
<xsd:element ref="avt:PossibleRecordStorageMedia"/>
<xsd:element ref="avt:CurrentPlayMode"/>
<xsd:element ref="avt:TransportPlaySpeed"/>
<xsd:element ref="avt:RecordMediumWriteStatus"/>
<xsd:element ref="avt:CurrentRecordQualityMode"/>
<xsd:element ref="avt:PossibleRecordQualityModes"/>
<xsd:element ref="avt:NumberOfTracks"/>
<xsd:element ref="avt:CurrentTransportActions"/>
<xsd:element ref="avt:CurrentTrack"/>
<xsd:element ref="avt:CurrentTrackDuration"/>
<xsd:element ref="avt:CurrentMediaDuration"/>
<xsd:element ref="avt:CurrentTrackURI"/>
<xsd:element ref="avt:CurrentTrackMetaData"/>
<xsd:element ref="avt:AVTransportURI"/>
<xsd:element ref="avt:AVTransportURIMetaData"/>
<xsd:element ref="avt:NextAVTransportURI"/>
<xsd:element ref="avt:NextAVTransportURIMetaData"/>
</xsd:choice>
</xsd:group>
<xsd:element name="InstanceID">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>
InstanceID elements identify an individual event instance.
</xsd:documentation>
</xsd:annotation>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:group ref="avt:allowed-under-InstanceID"/>
</xsd:choice>
<!-- TODO: That attribute was missing in the spec! -->
<xsd:attribute name="val" type="xsd:unsignedInt" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
TransportState
============================================================-->
<xsd:element name="TransportState">
<xsd:complexType>
<xsd:attribute name="val" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="STOPPED"/>
<xsd:enumeration value="PLAYING"/>
<xsd:enumeration value="TRANSITIONING"/>
<xsd:enumeration value="PAUSED_PLAYBACK"/>
<xsd:enumeration value="PAUSED_RECORDING"/>
<xsd:enumeration value="RECORDING"/>
<xsd:enumeration value="NO_MEDIA_PRESENT"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
<!--============================================================
TransportStatus
============================================================-->
<xsd:element name="TransportStatus">
<xsd:complexType>
<xsd:attribute name="val" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="OK"/>
<xsd:enumeration value="ERROR_OCCURRED"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
<!--============================================================
PlaybackStorageMedium
============================================================-->
<xsd:element name="PlaybackStorageMedium">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
RecordStorageMedium
============================================================-->
<xsd:element name="RecordStorageMedium">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
PossiblePlaybackStorageMedia
============================================================-->
<xsd:element name="PossiblePlaybackStorageMedia">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
PossibleRecordStorageMedia
============================================================-->
<xsd:element name="PossibleRecordStorageMedia">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentPlayMode
============================================================-->
<xsd:element name="CurrentPlayMode">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
TransportPlaySpeed
============================================================-->
<xsd:element name="TransportPlaySpeed">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
RecordMediumWriteStatus
============================================================-->
<xsd:element name="RecordMediumWriteStatus">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentRecordQualityMode
============================================================-->
<xsd:element name="CurrentRecordQualityMode">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
PossibleRecordQualityModes (!!! TYPO IN SPEC !!!)
============================================================-->
<xsd:element name="PossibleRecordQualityModes">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
NumberOfTracks
============================================================-->
<xsd:element name="NumberOfTracks">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentTrack
============================================================-->
<xsd:element name="CurrentTrack">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentTrackDuration
============================================================-->
<xsd:element name="CurrentTrackDuration">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentMediaDuration
============================================================-->
<xsd:element name="CurrentMediaDuration">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentTrackMetaData
============================================================-->
<xsd:element name="CurrentTrackMetaData">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentTrackURI
============================================================-->
<xsd:element name="CurrentTrackURI">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
AVTransportURI
============================================================-->
<xsd:element name="AVTransportURI">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
AVTransportURIMetaData
============================================================-->
<xsd:element name="AVTransportURIMetaData">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
NextAVTransportURI
============================================================-->
<xsd:element name="NextAVTransportURI">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
NextAVTransportURIMetaData
============================================================-->
<xsd:element name="NextAVTransportURIMetaData">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentTransportActions
============================================================-->
<xsd:element name="CurrentTransportActions">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
@@ -0,0 +1,403 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="urn:schemas-upnp-org:metadata-1-0/AVT/"
xmlns:avt="urn:schemas-upnp-org:metadata-1-0/AVT/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<!--
TODO: This schema was copied from AVTransport1.0.pdf.
Apparently the UPnP clowns couldn't agree if it is *Metadata or *MetaData.
So I've made changes and now all elements are called *MetaData, like the
state variables in the spec. That _will_ break if someone really uses
the original schema.
-->
<xsd:annotation>
<xsd:documentation xml:lang="en">
Schema for UPnP A/V AVTransport Service events, version 0.1(sic!)
</xsd:documentation>
</xsd:annotation>
<!--============================================================
'Event' is the root element of AVTransport event document fragments.
'InstanceID' is the only valid child of 'Event'.
============================================================-->
<xsd:element name="Event">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>Event is the root
element
</xsd:documentation>
</xsd:annotation>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element ref="avt:InstanceID"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<!--============================================================
'InstanceID' elements identify an individual event instance.
============================================================-->
<xsd:group name="allowed-under-InstanceID">
<xsd:annotation>
<xsd:documentation>
This group defines the elements allowed under the InstanceID element
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:element ref="avt:TransportState"/>
<xsd:element ref="avt:TransportStatus"/>
<xsd:element ref="avt:PlaybackStorageMedium"/>
<xsd:element ref="avt:RecordStorageMedium"/>
<xsd:element ref="avt:PossiblePlaybackStorageMedia"/>
<xsd:element ref="avt:PossibleRecordStorageMedia"/>
<xsd:element ref="avt:CurrentPlayMode"/>
<xsd:element ref="avt:TransportPlaySpeed"/>
<xsd:element ref="avt:RecordMediumWriteStatus"/>
<xsd:element ref="avt:CurrentRecordQualityMode"/>
<xsd:element ref="avt:PossibleRecordQualityModes"/>
<xsd:element ref="avt:NumberOfTracks"/>
<xsd:element ref="avt:CurrentTransportActions"/>
<xsd:element ref="avt:CurrentTrack"/>
<xsd:element ref="avt:CurrentTrackDuration"/>
<xsd:element ref="avt:CurrentMediaDuration"/>
<xsd:element ref="avt:CurrentTrackURI"/>
<xsd:element ref="avt:CurrentTrackMetaData"/>
<xsd:element ref="avt:AVTransportURI"/>
<xsd:element ref="avt:AVTransportURIMetaData"/>
<xsd:element ref="avt:NextAVTransportURI"/>
<xsd:element ref="avt:NextAVTransportURIMetaData"/>
<xsd:element ref="avt:RelativeTimePosition"/>
<xsd:element ref="avt:AbsoluteTimePosition"/>
<xsd:element ref="avt:RelativeCounterPosition"/>
<xsd:element ref="avt:AbsoluteCounterPosition"/>
</xsd:choice>
</xsd:group>
<xsd:element name="InstanceID">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>
InstanceID elements identify an individual event instance.
</xsd:documentation>
</xsd:annotation>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:group ref="avt:allowed-under-InstanceID"/>
</xsd:choice>
<!-- TODO: That attribute was missing in the spec! -->
<xsd:attribute name="val" type="xsd:unsignedInt" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
TransportState
============================================================-->
<xsd:element name="TransportState">
<xsd:complexType>
<xsd:attribute name="val" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="STOPPED"/>
<xsd:enumeration value="PLAYING"/>
<xsd:enumeration value="TRANSITIONING"/>
<xsd:enumeration value="PAUSED_PLAYBACK"/>
<xsd:enumeration value="PAUSED_RECORDING"/>
<xsd:enumeration value="RECORDING"/>
<xsd:enumeration value="NO_MEDIA_PRESENT"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
<!--============================================================
TransportStatus
============================================================-->
<xsd:element name="TransportStatus">
<xsd:complexType>
<xsd:attribute name="val" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="OK"/>
<xsd:enumeration value="ERROR_OCCURRED"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
<!--============================================================
PlaybackStorageMedium
============================================================-->
<xsd:element name="PlaybackStorageMedium">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
RecordStorageMedium
============================================================-->
<xsd:element name="RecordStorageMedium">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
PossiblePlaybackStorageMedia
============================================================-->
<xsd:element name="PossiblePlaybackStorageMedia">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
PossibleRecordStorageMedia
============================================================-->
<xsd:element name="PossibleRecordStorageMedia">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentPlayMode
============================================================-->
<xsd:element name="CurrentPlayMode">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
TransportPlaySpeed
============================================================-->
<xsd:element name="TransportPlaySpeed">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
RecordMediumWriteStatus
============================================================-->
<xsd:element name="RecordMediumWriteStatus">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentRecordQualityMode
============================================================-->
<xsd:element name="CurrentRecordQualityMode">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
PossibleRecordQualityModes (!!! TYPO IN SPEC !!!)
============================================================-->
<xsd:element name="PossibleRecordQualityModes">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
NumberOfTracks
============================================================-->
<xsd:element name="NumberOfTracks">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentTrack
============================================================-->
<xsd:element name="CurrentTrack">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentTrackDuration
============================================================-->
<xsd:element name="CurrentTrackDuration">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentMediaDuration
============================================================-->
<xsd:element name="CurrentMediaDuration">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentTrackMetaData
============================================================-->
<xsd:element name="CurrentTrackMetaData">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentTrackURI
============================================================-->
<xsd:element name="CurrentTrackURI">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
AVTransportURI
============================================================-->
<xsd:element name="AVTransportURI">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
AVTransportURIMetaData
============================================================-->
<xsd:element name="AVTransportURIMetaData">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
NextAVTransportURI
============================================================-->
<xsd:element name="NextAVTransportURI">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
NextAVTransportURIMetaData
============================================================-->
<xsd:element name="NextAVTransportURIMetaData">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentTransportActions
============================================================-->
<xsd:element name="CurrentTransportActions">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
RelativeTimePosition
============================================================-->
<xsd:element name="RelativeTimePosition">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
AbsoluteTimePosition
============================================================-->
<xsd:element name="AbsoluteTimePosition">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
RelativeCounterPosition
============================================================-->
<xsd:element name="RelativeCounterPosition">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
AbsoluteTimePosition
============================================================-->
<xsd:element name="AbsoluteCounterPosition">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
@@ -0,0 +1,60 @@
<xsd:schema
targetNamespace="http://purl.org/dc/elements/1.1/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
version="1.0"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
jaxb:version="2.1">
<xsd:annotation>
<xsd:appinfo>
<jaxb:schemaBindings>
<jaxb:package name="org.fourthline.cling.support.contentdirectory.descriptor.dc"/>
</jaxb:schemaBindings>
</xsd:appinfo>
</xsd:annotation>
<xsd:annotation>
<xsd:documentation xml:lang="en">
Simple DC XML Schema, 2002-10-09
by Pete Johnston ([email protected]),
Carl Lagoze ([email protected]), Andy Powell ([email protected]),
Herbert Van de Sompel ([email protected]).
This schema defines terms for Simple Dublin Core, i.e. the 15
elements from the http://purl.org/dc/elements/1.1/ namespace, with
no use of encoding schemes or element refinements.
Default content type for all elements is xsd:string with xml:lang attribute available.
Supercedes version of 2002-03-12.
Amended to remove namespace declaration for http://www.w3.org/XML/1998/namespace namespace,
and to reference lang attribute via built-in xml: namespace prefix.
xsd:appinfo also removed.
</xsd:documentation>
</xsd:annotation>
<xsd:element name="title" type="xsd:string"/>
<xsd:element name="creator" type="xsd:string"/>
<xsd:element name="description" type="xsd:string"/>
<xsd:element name="publisher" type="xsd:string"/>
<xsd:element name="contributor" type="xsd:string"/>
<xsd:element name="date" type="xsd:string"/>
<xsd:element name="language" type="xsd:string"/>
<xsd:element name="relation" type="xsd:string"/>
<xsd:element name="rights" type="xsd:string"/>
<!-- TODO
<xsd:complexType name="elementType">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute ref="xml:lang" use="optional"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
-->
</xsd:schema>
@@ -0,0 +1,298 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"
xmlns:didl-lite="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"
xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified" version="1.0"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
jaxb:version="2.1">
<!--
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jaxb:extensionBindingPrefixes="xjc"
-->
<xsd:annotation>
<xsd:appinfo>
<jaxb:schemaBindings>
<jaxb:package name="org.fourthline.cling.support.contentdirectory.descriptor.didl"/>
</jaxb:schemaBindings>
<jaxb:globalBindings generateElementClass="true" typesafeEnumMaxMembers="100">
<!--
<xjc:superClass name="org.fourthline.cling.support.didl.DidlObject"/>
-->
</jaxb:globalBindings>
</xsd:appinfo>
</xsd:annotation>
<xsd:annotation>
<xsd:documentation xml:lang="en">
DIDL-Lite schema for UPnP A/V Content Directory Services, version 1.0.
</xsd:documentation>
</xsd:annotation>
<xsd:import namespace="urn:schemas-upnp-org:metadata-1-0/upnp/" schemaLocation="upnp-cds-1.0.xsd"/>
<xsd:import namespace="http://purl.org/dc/elements/1.1/" schemaLocation="dc-elements-1.1.xsd"/>
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/>
<xsd:element name="DIDL-Lite">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>
'DIDL-Lite' is the root element of DIDL-Lite documents.
&lt;p>
Attributes:
&lt;p>
xml:lang use: optional
&lt;p>
The 'xml:lang' attribute may optionally be used to specify the language of text
in the DIDL-Lite document.
</xsd:documentation>
</xsd:annotation>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:annotation>
<xsd:appinfo>
<jaxb:property name="children"/>
</xsd:appinfo>
</xsd:annotation>
<xsd:element ref="didl-lite:item"/>
<xsd:element ref="didl-lite:container"/>
<xsd:element ref="didl-lite:desc"/>
</xsd:choice>
<!-- TODO
<xsd:attribute ref="xml:lang" use="optional"/>
-->
</xsd:complexType>
</xsd:element>
<xsd:element name="container">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>
A 'container' element may contain any number of
&lt;p>
1. Dublin Core,&lt;br/>
2. upnp,&lt;br/>
3. res,&lt;br/>
4. ref,&lt;br/>
5 item,&lt;br/>
6. container&lt;br/>
and 7. desc elements.&lt;br/>
&lt;p>
In all cases, the first element in each container child element sequence is
required to be "dc:title". The 'upnp:class' element must also appear under
container. Each container is required to specify a value for the 'id'
and 'parentID' attributes. Each container is also required to specify a value for
the 'restricted' attribute (true, false, 1, 0). When restricted="true", the ability to
change or delete the container is restricted.
&lt;p>
Other optional container element attributes are 'parentID', 'childCount',
and 'searchable'.
&lt;p>
Other optional attributes are 'parentID' and 'childCount'.
&lt;p>
Attributes:
&lt;p>
id type: string use: required&lt;br/>
parentID type: string use: required&lt;br/>
childCount type: int use: optional&lt;br/>
restricted type: boolean use: required&lt;br/>
&lt;p>
The equivalent MPEG21 DIDL element is 'CONTAINER'
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element ref="dc:title"/>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:annotation>
<xsd:appinfo>
<jaxb:property name="children"/>
</xsd:appinfo>
</xsd:annotation>
<xsd:any namespace="urn:schemas-upnp-org:metadata-1-0/upnp/" processContents="strict"/>
<xsd:any namespace="http://purl.org/dc/elements/1.1/" processContents="strict"/>
<xsd:element ref="didl-lite:desc"/>
<xsd:element ref="didl-lite:item"/>
<xsd:element ref="didl-lite:res"/>
<!--
Section 2.8.3: Incremental navigation i.e. the full hierarchy is never returned
in one call since this is likely to flood the resources available to the control
point (memory, network bandwidth, etc.).
So... why is this recursive then?
-->
<xsd:element ref="didl-lite:container"/>
</xsd:choice>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string" use="required"/>
<xsd:attribute name="parentID" type="xsd:string" use="required"/>
<xsd:attribute name="childCount" type="xsd:int"/>
<xsd:attribute name="restricted" type="xsd:boolean" use="required"/>
<xsd:attribute name="searchable" type="xsd:boolean"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="item">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>
An 'item' element contains any number of
&lt;p/>
1. Dublin Core,&lt;br/>
2. upnp,&lt;br/>
3. res, and&lt;br/>
4. desc elements.&lt;br/>
&lt;p/>
In all cases, the first element in each item child element sequence is required
to be "dc:title". The 'upnp:class' element must also appear under item. Each item
is additionally required to specify a value for the 'id' attribute. If the item
is actually a reference to another item, a value for 'refID' is specified.
Each item is also required to specify a value for the 'parentID attribute, as well
as the 'restricted' attribute (true, false, 1, 0). When restricted="true", the
ability to change or delete the item is restricted.
&lt;p/>
Attributes:
&lt;p/>
id type: string use: required&lt;br/>
parentID type: string use: required&lt;br/>
refID type: string use: optional&lt;br/>
restricted type: boolean use: required&lt;br/>
&lt;p/>
The equivalent MPEG21 DIDL element is 'ITEM'.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element ref="dc:title"/>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:annotation>
<xsd:appinfo>
<jaxb:property name="children"/>
</xsd:appinfo>
</xsd:annotation>
<xsd:any namespace="urn:schemas-upnp-org:metadata-1-0/upnp/" processContents="strict"/>
<xsd:any namespace="http://purl.org/dc/elements/1.1/" processContents="strict"/>
<xsd:element ref="didl-lite:desc"/>
<xsd:element ref="didl-lite:res"/>
</xsd:choice>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string" use="required"/>
<xsd:attribute name="refID" type="xsd:string"/>
<xsd:attribute name="parentID" type="xsd:string" use="required"/>
<xsd:attribute name="restricted" type="xsd:boolean" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="res">
<xsd:complexType mixed="true">
<xsd:annotation>
<xsd:documentation>
A 'res' element indentifies a resource. A resource is typically some type of a
binary asset, such as photo, song, video, etc. A 'res' element contains a uri
that identifies the resource.
&lt;p/>
Attributes:
&lt;p/>
'importUri' type: anyURI use: optional&lt;br/>
The 'importUri' attribute is the optional uri locator for resource update.
&lt;p/>
'protocolInfo' type: string use: required&lt;br/>
The 'protocolInfo' attribute is a string that identifies the streaming or
transport protocol for transmitting the resource. If not present then the
content has not yet been fully imported by the ContentDirectory and is not yet
accesible for playback purposes.
&lt;p/>
'size' type: unsignedLong use: optional&lt;br/>
The size, in bytes, of the resource.
&lt;p/>
'duration' type: string use: optional&lt;br/>
The 'duration' attribute identifies the duration of the playback of the resource, at normal speed.
The form of the duration string is: H*:MM:SS.F*, or H*:MM:SS.F0/F1 where :
H* means any number of digits (including no digits) to indicate elapsed hours
MM means exactly 2 digits to indicate minutes (00 to 59)
SS means exactly 2 digits to indicate seconds (00 to 59)
F* means any number of digits (including no digits) to indicate fractions of seconds
F0/F1 means a fraction, with F0 and F1 at least one digit long, and F0 &lt; F1
The string may be preceded by an optional + or - sign, and the decimal point itself may
be omitted if there are no fractional second digits.
&lt;p/>
'bitrate' type: unsignedInt use: optional&lt;br/>
The bitrate in bytes/second of the resource.
&lt;p/>
'sampleFrequency' type: unsignedInt use: optional&lt;br/>
The sample frequency of the resource in Hz
&lt;p/>
'bitsPerSample' type: unsignedInt use: optional&lt;br/>
The bits per sample of the resource.
&lt;p/>
'nrAudioChannels' type: unsignedInt use: optional&lt;br/>
Number of audio channels of the resource, e.g. 1 for mono, 2 for stereo, 6 for Dolby surround, etc.
&lt;p/>
'resolution' type: pattern-string use: optional&lt;br/>
X*Y resolution of the resource (image or video). The string pattern is restricted to strings of the
form: [0-9]+x[0-9]+ (one or more digits,'x', followed by one or more digits).
&lt;p/>
'colorDepth' type: unsignedInt use: optional&lt;br/>
The color depth in bits of the resource (image or video).
&lt;p/>
'protection' type: string use: optional&lt;br/>
Some statement of the protection type of the resource (not standardized).
&lt;p/>
The equivalent MPEG21 DIDL element is 'RESOURCE'.
</xsd:documentation>
</xsd:annotation>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="importUri" type="xsd:anyURI"/>
<xsd:attribute name="protocolInfo" type="xsd:string" use="required"/>
<xsd:attribute name="size" type="xsd:unsignedLong"/>
<xsd:attribute name="duration" type="xsd:string"/>
<xsd:attribute name="bitrate" type="xsd:unsignedInt"/>
<xsd:attribute name="sampleFrequency" type="xsd:unsignedInt"/>
<xsd:attribute name="bitsPerSample" type="xsd:unsignedInt"/>
<xsd:attribute name="nrAudioChannels" type="xsd:unsignedInt"/>
<xsd:attribute name="colorDepth" type="xsd:unsignedInt"/>
<xsd:attribute name="protection" type="xsd:string"/>
<xsd:attribute name="resolution">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="[0-9]+x[0-9]+"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="desc">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>
A 'desc' element identifies a descriptor. A descriptor is intended to contain a block of metadata. A
bio
of a music artist is an example use of 'desc'. A 'desc' element may possess child elements from any
namespace except the DIDL-Lite namespace. Values for 'id' and 'nameSpace' is required. An optional
'type' attribute allows designation of the metadata type, e.g. 'ratings', 'rights', etc.
Attributes:
'id' type: string use: optional
'name' type: string use: optional
'nameSpace' type: uri use: optional
The equivalent MPEG21 DIDL element is 'DESCRIPTOR'.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:any namespace="##other"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string" use="required"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="nameSpace" type="xsd:anyURI" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
@@ -0,0 +1,225 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
targetNamespace="urn:schemas-upnp-org:metadata-1-0/upnp/"
xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
version="1.0"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
jaxb:version="2.1">
<xsd:annotation>
<xsd:appinfo>
<jaxb:schemaBindings>
<jaxb:package name="org.fourthline.cling.support.contentdirectory.descriptor.upnp"/>
</jaxb:schemaBindings>
</xsd:appinfo>
</xsd:annotation>
<xsd:annotation>
<xsd:documentation xml:lang="en">
UPnP Content Directory Service 1.0 schema, derived from the crude examples in the PDF document.
</xsd:documentation>
</xsd:annotation>
<xsd:element name="class">
<xsd:complexType mixed="true">
<!-- TODO: That causes weird namespace errors in marshalled XML output...
<xsd:annotation>
<xsd:appinfo>
<jaxb:class name="Clazz"/>
</xsd:appinfo>
</xsd:annotation>
-->
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="name" type="xsd:string" use="optional"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="searchClass">
<xsd:complexType mixed="true">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="name" type="xsd:string" use="optional"/>
<xsd:attribute name="includeDerived" type="xsd:boolean" use="required"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="createClass">
<xsd:complexType mixed="true">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="name" type="xsd:string" use="optional"/>
<xsd:attribute name="includeDerived" type="xsd:boolean" use="required"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="writeStatus" type="upnp:writeStatusValue"/>
<xsd:simpleType name="writeStatusValue">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="WRITABLE"/>
<xsd:enumeration value="PROTECTED"/>
<xsd:enumeration value="NOT_WRITABLE"/>
<xsd:enumeration value="UNKNOWN"/>
<xsd:enumeration value="MIXED"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:element name="genre" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
Name of the genre to which an object belongs.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="album" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
Title of the album to which the item belongs.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="playlist" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
Name of a playlist to which the item belongs.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="storageUsed" type="xsd:long" default="-1">
<xsd:annotation>
<xsd:documentation>
Combined space, in bytes, used by all the objects held in the storage
represented by the container.
Value 1 is reserved to indicate that the capacity is 'unknown'
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="storageTotal" type="xsd:long" default="-1">
<xsd:annotation>
<xsd:documentation>
Total capacity, in bytes, of the storage represented by the
container.
Value 1 is reserved to indicate that the capacity is 'unknown'
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="storageFree" type="xsd:long" default="-1">
<xsd:annotation>
<xsd:documentation>
Total free capacity, in bytes, of the storage represented by the container
Value 1 is reserved to indicate that the capacity is 'unknown'
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="storageMaxPartition" type="xsd:long" default="-1">
<xsd:annotation>
<xsd:documentation>
Largest amount of space, in bytes, available for storing a single resource
in the container.
Value 1 is reserved to indicate that the capacity is 'unknown'
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="storageMedium" type="upnp:storageMediumValue">
<xsd:annotation>
<xsd:documentation>
Indicates the type of storage medium used for the content. Potentially useful
for user-interface purposes.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:simpleType name="storageMediumValue">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="UNKNOWN"/>
<xsd:enumeration value="DV"/>
<xsd:enumeration value="MINI-DV"/>
<xsd:enumeration value="VHS"/>
<xsd:enumeration value="W-VHS"/>
<xsd:enumeration value="S-VHS"/>
<xsd:enumeration value="D-VHS"/>
<xsd:enumeration value="VHSC"/>
<xsd:enumeration value="VIDEO8"/>
<xsd:enumeration value="HI8"/>
<xsd:enumeration value="CD-ROM"/>
<xsd:enumeration value="CD-DA"/>
<xsd:enumeration value="CD-R"/>
<xsd:enumeration value="CD-RW"/>
<xsd:enumeration value="VIDEO-CD"/>
<xsd:enumeration value="SACD"/>
<xsd:enumeration value="MD-AUDIO"/>
<xsd:enumeration value="MD-PICTURE"/>
<xsd:enumeration value="DVD-ROM"/>
<xsd:enumeration value="DVD-VIDEO"/>
<xsd:enumeration value="DVD-R"/>
<xsd:enumeration value="DVD+RW">
<xsd:annotation>
<xsd:appinfo>
<jaxb:typesafeEnumMember name="DVD_PLUS_RW"/>
</xsd:appinfo>
</xsd:annotation>
</xsd:enumeration>
<xsd:enumeration value="DVD-RW"/>
<xsd:enumeration value="DVD-RAM"/>
<xsd:enumeration value="DVD-AUDIO"/>
<xsd:enumeration value="DAT"/>
<xsd:enumeration value="LD"/>
<xsd:enumeration value="HDD"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:element name="longDescription" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
A few lines of description of the content item (longer than
DublinCore's description element).
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="icon" type="xsd:anyURI">
<xsd:annotation>
<xsd:documentation>
Some icon that a control point can use in its UI to display the
content, e.g. a CNN logo for a Tuner channel. Recommend same format
as the icon element in the UPnP device description document schema.
(PNG). Values must be properly escaped URIs as described in [RFC 2396].
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="region" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
Some identification of the region, associated with the
"source" of the object, e.g. "US", "Latin America",
"Seattlle".
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="rating" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
Rating of the object's resource, for 'parental control' filtering purposes,
such as "R", "PG-13", "X", etc.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:schema>
@@ -0,0 +1,284 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
TODO: UPNP VIOLATION: RenderingControl 1.0 specification schema says "/RCS/" but examples
in the spec say "/AVT_RCS". We had "/AVT_RCS", then "/RCS", now we have "/RCS/", let's
see who complains.
-->
<xsd:schema targetNamespace="urn:schemas-upnp-org:metadata-1-0/RCS/"
xmlns:rcs="urn:schemas-upnp-org:metadata-1-0/RCS/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xsd:annotation>
<xsd:documentation xml:lang="en">
Schema for UPnP A/V Rendering Control Service events, version 0.1 (sic!)
</xsd:documentation>
</xsd:annotation>
<!--============================================================
'Event' is the root element of Rendering Control event document fragments.
'InstanceID' is the only valid child of 'Event'.
============================================================-->
<xsd:element name="Event">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>
Event is the root element
</xsd:documentation>
</xsd:annotation>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element ref="rcs:InstanceID"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<!--============================================================
'InstanceID' elements identify an individual event instance.
============================================================-->
<xsd:group name="allowed-under-InstanceID">
<xsd:annotation>
<xsd:documentation>
This group defines the elements allowed under the InstanceID element
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:element ref="rcs:PresetNameList"/>
<xsd:element ref="rcs:Brightness"/>
<xsd:element ref="rcs:Contrast"/>
<xsd:element ref="rcs:Sharpness"/>
<xsd:element ref="rcs:RedVideoGain"/>
<xsd:element ref="rcs:GreenVideoGain"/>
<xsd:element ref="rcs:BlueVideoGain"/>
<xsd:element ref="rcs:RedVideoBlackLevel"/>
<xsd:element ref="rcs:GreenVideoBlackLevel"/>
<xsd:element ref="rcs:BlueVideoBlackLevel"/>
<xsd:element ref="rcs:ColorTemperature"/>
<xsd:element ref="rcs:HorizontalKeystone"/>
<xsd:element ref="rcs:VerticalKeystone"/>
<xsd:element ref="rcs:Mute"/>
<xsd:element ref="rcs:Volume"/>
<xsd:element ref="rcs:VolumeDB"/>
<xsd:element ref="rcs:Loudness"/>
</xsd:choice>
</xsd:group>
<xsd:element name="InstanceID">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>
InstanceID elements identify an individual event instance.
</xsd:documentation>
</xsd:annotation>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:group ref="rcs:allowed-under-InstanceID"/>
</xsd:choice>
<xsd:attribute name="val" type="xsd:unsignedInt" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
PresetNameList
============================================================-->
<xsd:element name="PresetNameList">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
Brightness
============================================================-->
<xsd:element name="Brightness">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
Contrast
============================================================-->
<xsd:element name="Contrast">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
Sharpness
============================================================-->
<xsd:element name="Sharpness">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
RedVideoGain
============================================================-->
<xsd:element name="RedVideoGain">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
GreenVideoGain
============================================================-->
<xsd:element name="GreenVideoGain">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
BlueVideoGain
============================================================-->
<xsd:element name="BlueVideoGain">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
RedVideoBlackLevel
============================================================-->
<xsd:element name="RedVideoBlackLevel">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
GreenVideoBlackLevel
============================================================-->
<xsd:element name="GreenVideoBlackLevel">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
BlueVideoBlackLevel
============================================================-->
<xsd:element name="BlueVideoBlackLevel">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
ColorTemperature
============================================================-->
<xsd:element name="ColorTemperature">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
HorizontalKeystone
============================================================-->
<xsd:element name="HorizontalKeystone">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:integer"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
VerticalKeystone
============================================================-->
<xsd:element name="VerticalKeystone">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:integer"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
Mute
============================================================-->
<xsd:element name="Mute">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:boolean"
use="required"/>
<xsd:attribute name="channel" type="xsd:string"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
Volume
============================================================-->
<xsd:element name="Volume">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
<xsd:attribute name="channel" type="xsd:string"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
VolumeDB
============================================================-->
<xsd:element name="VolumeDB">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:integer"
use="required"/>
<xsd:attribute name="channel" type="xsd:string"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
Loudness
============================================================-->
<xsd:element name="Loudness">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:boolean"
use="required"/>
<xsd:attribute name="channel" type="xsd:string"
use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>