Version 9

MULTIMEDIA-SYSTEM-CONTROL DEFINITIONS AUTOMATIC TAGS ::=
BEGIN

-- Export all symbols
-- ===================================================================================
-- Top level Messages
-- ===================================================================================
MultimediaSystemControlMessage ::= CHOICE {
  request     RequestMessage,
  response    ResponseMessage,
  command     CommandMessage,
  indication  IndicationMessage,
  ...}

-- A RequestMessage results in action and requires an immediate response
RequestMessage ::= CHOICE {
  nonStandard                NonStandardMessage,
  masterSlaveDetermination   MasterSlaveDetermination,
  terminalCapabilitySet      TerminalCapabilitySet,
  openLogicalChannel         OpenLogicalChannel,
  closeLogicalChannel        CloseLogicalChannel,
  requestChannelClose        RequestChannelClose,
  multiplexEntrySend         MultiplexEntrySend,
  requestMultiplexEntry      RequestMultiplexEntry,
  requestMode                RequestMode,
  roundTripDelayRequest      RoundTripDelayRequest,
  maintenanceLoopRequest     MaintenanceLoopRequest,
  ...,
  communicationModeRequest   CommunicationModeRequest,
  conferenceRequest          ConferenceRequest,
  multilinkRequest           MultilinkRequest,
  logicalChannelRateRequest  LogicalChannelRateRequest}

-- A ResponseMessage is the response to a request Message
ResponseMessage ::= CHOICE {
  nonStandard                     NonStandardMessage,
  masterSlaveDeterminationAck     MasterSlaveDeterminationAck,
  masterSlaveDeterminationReject  MasterSlaveDeterminationReject,
  terminalCapabilitySetAck        TerminalCapabilitySetAck,
  terminalCapabilitySetReject     TerminalCapabilitySetReject,
  openLogicalChannelAck           OpenLogicalChannelAck,
  openLogicalChannelReject        OpenLogicalChannelReject,
  closeLogicalChannelAck          CloseLogicalChannelAck,
  requestChannelCloseAck          RequestChannelCloseAck,
  requestChannelCloseReject       RequestChannelCloseReject,
  multiplexEntrySendAck           MultiplexEntrySendAck,
  multiplexEntrySendReject        MultiplexEntrySendReject,
  requestMultiplexEntryAck        RequestMultiplexEntryAck,
  requestMultiplexEntryReject     RequestMultiplexEntryReject,
  requestModeAck                  RequestModeAck,
  requestModeReject               RequestModeReject,
  roundTripDelayResponse          RoundTripDelayResponse,
  maintenanceLoopAck              MaintenanceLoopAck,
  maintenanceLoopReject           MaintenanceLoopReject,
  ...,
  communicationModeResponse       CommunicationModeResponse,
  conferenceResponse              ConferenceResponse,
  multilinkResponse               MultilinkResponse,
  logicalChannelRateAcknowledge   LogicalChannelRateAcknowledge,
  logicalChannelRateReject        LogicalChannelRateReject}

-- A CommandMessage requires action, but no explicit response
CommandMessage ::= CHOICE {
  nonStandard                            NonStandardMessage,
  maintenanceLoopOffCommand              MaintenanceLoopOffCommand,
  sendTerminalCapabilitySet              SendTerminalCapabilitySet,
  encryptionCommand                      EncryptionCommand,
  flowControlCommand                     FlowControlCommand,
  endSessionCommand                      EndSessionCommand,
  miscellaneousCommand                   MiscellaneousCommand,
  ...,
  communicationModeCommand               CommunicationModeCommand,
  conferenceCommand                      ConferenceCommand,
  h223MultiplexReconfiguration           H223MultiplexReconfiguration,
  newATMVCCommand                        NewATMVCCommand,
  mobileMultilinkReconfigurationCommand  MobileMultilinkReconfigurationCommand}

-- An IndicationMessage is information that does not require action or response
IndicationMessage ::= CHOICE {
  nonStandard                               NonStandardMessage,
  functionNotUnderstood                     FunctionNotUnderstood,
  masterSlaveDeterminationRelease           MasterSlaveDeterminationRelease,
  terminalCapabilitySetRelease              TerminalCapabilitySetRelease,
  openLogicalChannelConfirm                 OpenLogicalChannelConfirm,
  requestChannelCloseRelease                RequestChannelCloseRelease,
  multiplexEntrySendRelease                 MultiplexEntrySendRelease,
  requestMultiplexEntryRelease              RequestMultiplexEntryRelease,
  requestModeRelease                        RequestModeRelease,
  miscellaneousIndication                   MiscellaneousIndication,
  jitterIndication                          JitterIndication,
  h223SkewIndication                        H223SkewIndication,
  newATMVCIndication                        NewATMVCIndication,
  userInput                                 UserInputIndication,
  ...,
  h2250MaximumSkewIndication                H2250MaximumSkewIndication,
  mcLocationIndication                      MCLocationIndication,
  conferenceIndication                      ConferenceIndication,
  vendorIdentification                      VendorIdentification,
  functionNotSupported                      FunctionNotSupported,
  multilinkIndication                       MultilinkIndication,
  logicalChannelRateRelease                 LogicalChannelRateRelease,
  flowControlIndication                     FlowControlIndication,
  mobileMultilinkReconfigurationIndication
    MobileMultilinkReconfigurationIndication}

-- SequenceNumber is defined here as it is used in a number of Messages
SequenceNumber ::= INTEGER(0..255)

-- ===================================================================================
-- Non standard Message definitions
-- ===================================================================================
NonStandardMessage ::= SEQUENCE {nonStandardData  NonStandardParameter,
                                 ...}

NonStandardParameter ::= SEQUENCE {
  nonStandardIdentifier  NonStandardIdentifier,
  data                   OCTET STRING}

NonStandardIdentifier ::= CHOICE {
  object           OBJECT IDENTIFIER,
  h221NonStandard
    SEQUENCE {t35CountryCode    INTEGER(0..255), -- country, per T.35 Annex A--
              t35Extension      INTEGER(0..255),
              -- assigned nationally unless t35CountryCode is binary
              -- 1111 1111, in which case it shall contain the country code
              -- according to T.35 Annex B
              manufacturerCode  INTEGER(0..65535) -- assigned nationally--}}

-- ===================================================================================
-- Master-slave determination definitions
-- ===================================================================================
MasterSlaveDetermination ::= SEQUENCE {
  terminalType               INTEGER(0..255),
  statusDeterminationNumber  INTEGER(0..16777215),
  ...}

MasterSlaveDeterminationAck ::= SEQUENCE {
  decision  CHOICE {master  NULL,
                    slave   NULL},
  ...}

MasterSlaveDeterminationReject ::= SEQUENCE {
  cause  CHOICE {identicalNumbers  NULL,
                 ...},
  ...}

MasterSlaveDeterminationRelease ::= SEQUENCE {...}

-- ===================================================================================
-- Capability exchange definitions
-- ===================================================================================
TerminalCapabilitySet ::= SEQUENCE {
  sequenceNumber         SequenceNumber,
  protocolIdentifier     OBJECT IDENTIFIER,
  -- shall be set to the value
  -- {itu-t (0) recommendation (0) h (8) 245 version (0) 9}
  multiplexCapability    MultiplexCapability OPTIONAL,
  capabilityTable        SET SIZE (1..256) OF CapabilityTableEntry OPTIONAL,
  capabilityDescriptors  SET SIZE (1..256) OF CapabilityDescriptor OPTIONAL,
  ...}

CapabilityTableEntry ::= SEQUENCE {
  capabilityTableEntryNumber  CapabilityTableEntryNumber,
  capability                  Capability OPTIONAL}

CapabilityDescriptor ::= SEQUENCE {
  capabilityDescriptorNumber  CapabilityDescriptorNumber,
  simultaneousCapabilities
    SET SIZE (1..256) OF AlternativeCapabilitySet OPTIONAL}

AlternativeCapabilitySet ::=
  SEQUENCE SIZE (1..256) OF CapabilityTableEntryNumber

CapabilityTableEntryNumber ::= INTEGER(1..65535)

CapabilityDescriptorNumber ::= INTEGER(0..255)

TerminalCapabilitySetAck ::= SEQUENCE {sequenceNumber  SequenceNumber,
                                       ...}

TerminalCapabilitySetReject ::= SEQUENCE {
  sequenceNumber  SequenceNumber,
  cause
    CHOICE {unspecified                 NULL,
            undefinedTableEntryUsed     NULL,
            descriptorCapacityExceeded  NULL,
            tableEntryCapacityExceeded
              CHOICE {highestEntryNumberProcessed  CapabilityTableEntryNumber,
                      noneProcessed                NULL},
            ...},
  ...}

TerminalCapabilitySetRelease ::= SEQUENCE {...}

-- ===================================================================================
-- Capability exchange definitions: top level capability description
-- ===================================================================================
Capability ::= CHOICE {
  nonStandard                                    NonStandardParameter,
  receiveVideoCapability                         VideoCapability,
  transmitVideoCapability                        VideoCapability,
  receiveAndTransmitVideoCapability              VideoCapability,
  receiveAudioCapability                         AudioCapability,
  transmitAudioCapability                        AudioCapability,
  receiveAndTransmitAudioCapability              AudioCapability,
  receiveDataApplicationCapability               DataApplicationCapability,
  transmitDataApplicationCapability              DataApplicationCapability,
  receiveAndTransmitDataApplicationCapability    DataApplicationCapability,
  h233EncryptionTransmitCapability               BOOLEAN,
  h233EncryptionReceiveCapability
    SEQUENCE {h233IVResponseTime  INTEGER(0..255), -- units milliseconds --
              ...},
  ...,
  conferenceCapability                           ConferenceCapability,
  h235SecurityCapability                         H235SecurityCapability,
  maxPendingReplacementFor                       INTEGER(0..255),
  receiveUserInputCapability                     UserInputCapability,
  transmitUserInputCapability                    UserInputCapability,
  receiveAndTransmitUserInputCapability          UserInputCapability,
  genericControlCapability                       GenericCapability,
  receiveMultiplexedStreamCapability             MultiplexedStreamCapability,
  transmitMultiplexedStreamCapability            MultiplexedStreamCapability,
  receiveAndTransmitMultiplexedStreamCapability  MultiplexedStreamCapability,
  receiveRTPAudioTelephonyEventCapability        AudioTelephonyEventCapability,
  receiveRTPAudioToneCapability                  AudioToneCapability,
  fecCapability                                  FECCapability,
  multiplePayloadStreamCapability
    MultiplePayloadStreamCapability}

H235SecurityCapability ::= SEQUENCE {
  encryptionAuthenticationAndIntegrity  EncryptionAuthenticationAndIntegrity,
  mediaCapability                       CapabilityTableEntryNumber,
  -- Note: the mediaCapability shall refer to Capability Table Entries that do contain a transmit,
  -- receive, or receiveAndTransmit AudioCapability, VideoCapability,
  -- DataApplicationCapability, or similar capability indicated by a NonStandardParameter only
  ...}

-- ===================================================================================
-- Capability exchange definitions: Multiplex capabilities
-- ===================================================================================
MultiplexCapability ::= CHOICE {
  nonStandard                 NonStandardParameter,
  h222Capability              H222Capability,
  h223Capability              H223Capability,
  v76Capability               V76Capability,
  ...,
  h2250Capability             H2250Capability,
  genericMultiplexCapability  GenericCapability}

H222Capability ::= SEQUENCE {
  numberOfVCs   INTEGER(1..256),
  vcCapability  SET OF VCCapability,
  ...}

VCCapability ::= SEQUENCE {
  aal1
    SEQUENCE {nullClockRecovery       BOOLEAN,
              srtsClockRecovery       BOOLEAN,
              adaptiveClockRecovery   BOOLEAN,
              nullErrorCorrection     BOOLEAN,
              longInterleaver         BOOLEAN,
              shortInterleaver        BOOLEAN,
              errorCorrectionOnly     BOOLEAN,
              structuredDataTransfer  BOOLEAN,
              partiallyFilledCells    BOOLEAN,
              ...} OPTIONAL,
  aal5
    SEQUENCE {forwardMaximumSDUSize   INTEGER(0..65535), -- units octets--
              backwardMaximumSDUSize  INTEGER(0..65535), -- units octets--
              ...} OPTIONAL,
  transportStream    BOOLEAN,
  programStream      BOOLEAN,
  availableBitRates
    SEQUENCE {type
                CHOICE {singleBitRate    INTEGER(1..65535), -- units 64 kbit/s--
                        rangeOfBitRates
                          SEQUENCE {lowerBitRate   INTEGER(1..65535), -- units 64 kbit/s--
                                    higherBitRate  INTEGER(1..65535) -- units 64 kbit/s--}},
              ...},
  ...,
  aal1ViaGateway
    SEQUENCE {gatewayAddress          SET SIZE (1..256) OF Q2931Address,
              nullClockRecovery       BOOLEAN,
              srtsClockRecovery       BOOLEAN,
              adaptiveClockRecovery   BOOLEAN,
              nullErrorCorrection     BOOLEAN,
              longInterleaver         BOOLEAN,
              shortInterleaver        BOOLEAN,
              errorCorrectionOnly     BOOLEAN,
              structuredDataTransfer  BOOLEAN,
              partiallyFilledCells    BOOLEAN,
              ...} OPTIONAL}

H223Capability ::= SEQUENCE {
  transportWithI-frames                 BOOLEAN, -- I-frame transport of H.245
  videoWithAL1                          BOOLEAN,
  videoWithAL2                          BOOLEAN,
  videoWithAL3                          BOOLEAN,
  audioWithAL1                          BOOLEAN,
  audioWithAL2                          BOOLEAN,
  audioWithAL3                          BOOLEAN,
  dataWithAL1                           BOOLEAN,
  dataWithAL2                           BOOLEAN,
  dataWithAL3                           BOOLEAN,
  maximumAl2SDUSize                     INTEGER(0..65535), -- units octets
  maximumAl3SDUSize                     INTEGER(0..65535), -- units octets
  maximumDelayJitter                    INTEGER(0..1023), -- units milliseconds
  h223MultiplexTableCapability
    CHOICE {basic     NULL,
            enhanced
              SEQUENCE {maximumNestingDepth        INTEGER(1..15),
                        maximumElementListSize     INTEGER(2..255),
                        maximumSubElementListSize  INTEGER(2..255),
                        ...}},
  ...,
  maxMUXPDUSizeCapability               BOOLEAN,
  nsrpSupport                           BOOLEAN,
  mobileOperationTransmitCapability
    SEQUENCE {modeChangeCapability  BOOLEAN,
              h223AnnexA            BOOLEAN,
              h223AnnexADoubleFlag  BOOLEAN,
              h223AnnexB            BOOLEAN,
              h223AnnexBwithHeader  BOOLEAN,
              ...} OPTIONAL,
  h223AnnexCCapability                  H223AnnexCCapability OPTIONAL,
  bitRate                               INTEGER(1..19200) OPTIONAL, -- units of 100 bit/s
  mobileMultilinkFrameCapability
    SEQUENCE {maximumSampleSize     INTEGER(1..255), -- units octets--
              maximumPayloadLength  INTEGER(1..65025), -- units octets--
              ...} OPTIONAL}

H223AnnexCCapability ::= SEQUENCE {
  videoWithAL1M        BOOLEAN,
  videoWithAL2M        BOOLEAN,
  videoWithAL3M        BOOLEAN,
  audioWithAL1M        BOOLEAN,
  audioWithAL2M        BOOLEAN,
  audioWithAL3M        BOOLEAN,
  dataWithAL1M         BOOLEAN,
  dataWithAL2M         BOOLEAN,
  dataWithAL3M         BOOLEAN,
  alpduInterleaving    BOOLEAN,
  maximumAL1MPDUSize   INTEGER(0..65535), -- units octets
  maximumAL2MSDUSize   INTEGER(0..65535), -- units octets
  maximumAL3MSDUSize   INTEGER(0..65535), -- units octets
  ...,
  rsCodeCapability     BOOLEAN OPTIONAL}

V76Capability ::= SEQUENCE {
  suspendResumeCapabilitywAddress   BOOLEAN,
  suspendResumeCapabilitywoAddress  BOOLEAN,
  rejCapability                     BOOLEAN,
  sREJCapability                    BOOLEAN,
  mREJCapability                    BOOLEAN,
  crc8bitCapability                 BOOLEAN,
  crc16bitCapability                BOOLEAN,
  crc32bitCapability                BOOLEAN,
  uihCapability                     BOOLEAN,
  numOfDLCS                         INTEGER(2..8191),
  twoOctetAddressFieldCapability    BOOLEAN,
  loopBackTestCapability            BOOLEAN,
  n401Capability                    INTEGER(1..4095),
  maxWindowSizeCapability           INTEGER(1..127),
  v75Capability                     V75Capability,
  ...}

V75Capability ::= SEQUENCE {audioHeader  BOOLEAN,
                            ...}

H2250Capability ::= SEQUENCE {
  maximumAudioDelayJitter                 INTEGER(0..1023), -- units in milliseconds
  receiveMultipointCapability             MultipointCapability,
  transmitMultipointCapability            MultipointCapability,
  receiveAndTransmitMultipointCapability  MultipointCapability,
  mcCapability
    SEQUENCE {centralizedConferenceMC    BOOLEAN,
              decentralizedConferenceMC  BOOLEAN,
              ...},
  rtcpVideoControlCapability              BOOLEAN, -- FIR and NACK
  mediaPacketizationCapability            MediaPacketizationCapability,
  ...,
  transportCapability                     TransportCapability OPTIONAL,
  redundancyEncodingCapability
    SEQUENCE SIZE (1..256) OF RedundancyEncodingCapability OPTIONAL,
  logicalChannelSwitchingCapability       BOOLEAN,
  t120DynamicPortCapability               BOOLEAN}

MediaPacketizationCapability ::= SEQUENCE {
  h261aVideoPacketization  BOOLEAN,
  ...,
  rtpPayloadType           SEQUENCE SIZE (1..256) OF RTPPayloadType OPTIONAL}

RSVPParameters ::= SEQUENCE {
  qosMode     QOSMode OPTIONAL,
  tokenRate   INTEGER(1..4294967295) OPTIONAL,
  -- rate in bytes/sec
  bucketSize  INTEGER(1..4294967295) OPTIONAL, -- size in bytes
  peakRate    INTEGER(1..4294967295) OPTIONAL,
  -- peak bandwidth bytes/sec
  minPoliced  INTEGER(1..4294967295) OPTIONAL, -- 
  maxPktSize  INTEGER(1..4294967295) OPTIONAL, -- size in bytes
  ...}

QOSMode ::= CHOICE {guaranteedQOS   NULL,
                    controlledLoad  NULL,
                    ...}

-- Ed. Replace with ITU-T ATM Transfer Capability Types
ATMParameters ::= SEQUENCE {
  maxNTUSize  INTEGER(0..65535), --units in octets
  atmUBR      BOOLEAN, --unspecified bit rate
  atmrtVBR    BOOLEAN, --real time variable bit rate
  atmnrtVBR   BOOLEAN, --non real time variable bit rate
  atmABR      BOOLEAN, --available bit rate
  atmCBR      BOOLEAN, --constant bit rate
  ...}

QOSCapability ::= SEQUENCE {
  nonStandardData  NonStandardParameter OPTIONAL,
  rsvpParameters   RSVPParameters OPTIONAL,
  atmParameters    ATMParameters OPTIONAL,
  ...}

MediaTransportType ::= CHOICE {
  ip-UDP               NULL,
  ip-TCP               NULL,
  atm-AAL5-UNIDIR      NULL, -- virtual circuits used as unidirectional 
  atm-AAL5-BIDIR       NULL, -- virtual circuits used as bidirectional
  ...,
  atm-AAL5-compressed  SEQUENCE {variable-delta  BOOLEAN,
                                 ...}}

MediaChannelCapability ::= SEQUENCE {
  mediaTransport  MediaTransportType OPTIONAL,
  ...}

TransportCapability ::= SEQUENCE {
  nonStandard               NonStandardParameter OPTIONAL,
  qOSCapabilities           SEQUENCE SIZE (1..256) OF QOSCapability OPTIONAL,
  mediaChannelCapabilities
    SEQUENCE SIZE (1..256) OF MediaChannelCapability OPTIONAL,
  ...}

RedundancyEncodingCapability ::= SEQUENCE {
  redundancyEncodingMethod  RedundancyEncodingMethod,
  primaryEncoding           CapabilityTableEntryNumber,
  secondaryEncoding
    SEQUENCE SIZE (1..256) OF CapabilityTableEntryNumber OPTIONAL,
  ...}

RedundancyEncodingMethod ::= CHOICE {
  nonStandard                     NonStandardParameter,
  rtpAudioRedundancyEncoding      NULL,
  ...,
  rtpH263VideoRedundancyEncoding  RTPH263VideoRedundancyEncoding}

RTPH263VideoRedundancyEncoding ::= SEQUENCE {
  numberOfThreads          INTEGER(1..16),
  framesBetweenSyncPoints  INTEGER(1..256),
  frameToThreadMapping
    CHOICE {roundrobin  NULL,
            custom
              SEQUENCE SIZE (1..256) OF RTPH263VideoRedundancyFrameMapping,
            -- empty SEQUENCE for capability negotiation
            -- meaningful contents only OpenLogicalChannel
            ...},
  containedThreads         SEQUENCE SIZE (1..256) OF INTEGER(0..15) OPTIONAL,
  -- only used for opening of logical channels
  ...}

RTPH263VideoRedundancyFrameMapping ::= SEQUENCE {
  threadNumber   INTEGER(0..15),
  frameSequence  SEQUENCE SIZE (1..256) OF INTEGER(0..255),
  ...}

MultipointCapability ::= SEQUENCE {
  multicastCapability          BOOLEAN,
  multiUniCastConference       BOOLEAN,
  mediaDistributionCapability  SEQUENCE OF MediaDistributionCapability,
  ...}

MediaDistributionCapability ::= SEQUENCE {
  centralizedControl  BOOLEAN,
  distributedControl  BOOLEAN, -- for further study in H.323
  centralizedAudio    BOOLEAN,
  distributedAudio    BOOLEAN,
  centralizedVideo    BOOLEAN,
  distributedVideo    BOOLEAN,
  centralizedData     SEQUENCE OF DataApplicationCapability OPTIONAL,
  distributedData     SEQUENCE OF DataApplicationCapability OPTIONAL,
  -- for further study in H.323
  ...}

-- ===================================================================================
-- Capability exchange definitions: Video capabilities
-- ===================================================================================
VideoCapability ::= CHOICE {
  nonStandard             NonStandardParameter,
  h261VideoCapability     H261VideoCapability,
  h262VideoCapability     H262VideoCapability,
  h263VideoCapability     H263VideoCapability,
  is11172VideoCapability  IS11172VideoCapability,
  ...,
  genericVideoCapability  GenericCapability}

H261VideoCapability ::= SEQUENCE {
  qcifMPI                            INTEGER(1..4) OPTIONAL, -- units 1/29.97 Hz
  cifMPI                             INTEGER(1..4) OPTIONAL, -- units 1/29.97 Hz
  temporalSpatialTradeOffCapability  BOOLEAN,
  maxBitRate                         INTEGER(1..19200), -- units of 100 bit/s
  stillImageTransmission             BOOLEAN, -- Annex D of H.261
  ...,
  videoBadMBsCap                     BOOLEAN}

H262VideoCapability ::= SEQUENCE {
  profileAndLevel-SPatML         BOOLEAN,
  profileAndLevel-MPatLL         BOOLEAN,
  profileAndLevel-MPatML         BOOLEAN,
  profileAndLevel-MPatH-14       BOOLEAN,
  profileAndLevel-MPatHL         BOOLEAN,
  profileAndLevel-SNRatLL        BOOLEAN,
  profileAndLevel-SNRatML        BOOLEAN,
  profileAndLevel-SpatialatH-14  BOOLEAN,
  profileAndLevel-HPatML         BOOLEAN,
  profileAndLevel-HPatH-14       BOOLEAN,
  profileAndLevel-HPatHL         BOOLEAN,
  videoBitRate                   INTEGER(0..1073741823) OPTIONAL, -- units 400 bit/s
  vbvBufferSize                  INTEGER(0..262143) OPTIONAL, -- units 16384 bits
  samplesPerLine                 INTEGER(0..16383) OPTIONAL, -- units samples/line
  linesPerFrame                  INTEGER(0..16383) OPTIONAL, -- units lines/frame
  framesPerSecond                INTEGER(0..15) OPTIONAL, -- frame_rate_code
  luminanceSampleRate            INTEGER(0..4294967295) OPTIONAL, -- units samples/sec
  ...,
  videoBadMBsCap                 BOOLEAN}

H263VideoCapability ::= SEQUENCE {
  sqcifMPI                           INTEGER(1..32) OPTIONAL, -- units 1/29.97 Hz
  qcifMPI                            INTEGER(1..32) OPTIONAL, -- units 1/29.97 Hz
  cifMPI                             INTEGER(1..32) OPTIONAL, -- units 1/29.97 Hz
  cif4MPI                            INTEGER(1..32) OPTIONAL, -- units 1/29.97 Hz
  cif16MPI                           INTEGER(1..32) OPTIONAL, -- units 1/29.97 Hz
  maxBitRate                         INTEGER(1..192400), -- units 100 bit/s
  unrestrictedVector                 BOOLEAN,
  arithmeticCoding                   BOOLEAN,
  advancedPrediction                 BOOLEAN,
  pbFrames                           BOOLEAN,
  temporalSpatialTradeOffCapability  BOOLEAN,
  hrd-B                              INTEGER(0..524287) OPTIONAL, -- units 128 bits
  bppMaxKb                           INTEGER(0..65535) OPTIONAL, -- units 1024 bits
  ...,
  slowSqcifMPI                       INTEGER(1..3600) OPTIONAL, -- units seconds/frame
  slowQcifMPI                        INTEGER(1..3600) OPTIONAL, --units seconds/frame
  slowCifMPI                         INTEGER(1..3600) OPTIONAL, --units seconds/frame
  slowCif4MPI                        INTEGER(1..3600) OPTIONAL, --units seconds/frame
  slowCif16MPI                       INTEGER(1..3600) OPTIONAL, --units seconds/frame
  errorCompensation                  BOOLEAN,
  enhancementLayerInfo               EnhancementLayerInfo OPTIONAL,
  h263Options                        H263Options OPTIONAL}

EnhancementLayerInfo ::= SEQUENCE {
  baseBitRateConstrained  BOOLEAN,
  snrEnhancement          SET SIZE (1..14) OF EnhancementOptions OPTIONAL,
  spatialEnhancement      SET SIZE (1..14) OF EnhancementOptions OPTIONAL,
  bPictureEnhancement     SET SIZE (1..14) OF BEnhancementParameters OPTIONAL,
  ...}

BEnhancementParameters ::= SEQUENCE {
  enhancementOptions  EnhancementOptions,
  numberOfBPictures   INTEGER(1..64),
  ...}

EnhancementOptions ::= SEQUENCE {
  sqcifMPI                           INTEGER(1..32) OPTIONAL, -- units 1/29.97 Hz
  qcifMPI                            INTEGER(1..32) OPTIONAL, -- units 1/29.97 Hz
  cifMPI                             INTEGER(1..32) OPTIONAL, -- units 1/29.97 Hz
  cif4MPI                            INTEGER(1..32) OPTIONAL, -- units 1/29.97 Hz
  cif16MPI                           INTEGER(1..32) OPTIONAL, -- units 1/29.97 Hz
  maxBitRate                         INTEGER(1..192400), -- units 100 bit/s
  unrestrictedVector                 BOOLEAN,
  arithmeticCoding                   BOOLEAN,
  temporalSpatialTradeOffCapability  BOOLEAN,
  slowSqcifMPI                       INTEGER(1..3600) OPTIONAL, -- units seconds/frame
  slowQcifMPI                        INTEGER(1..3600) OPTIONAL, --units seconds/frame
  slowCifMPI                         INTEGER(1..3600) OPTIONAL, --units seconds/frame
  slowCif4MPI                        INTEGER(1..3600) OPTIONAL, --units seconds/frame
  slowCif16MPI                       INTEGER(1..3600) OPTIONAL, --units seconds/frame
  errorCompensation                  BOOLEAN,
  h263Options                        H263Options OPTIONAL,
  ...}

H263Options ::= SEQUENCE {
  advancedIntraCodingMode             BOOLEAN,
  deblockingFilterMode                BOOLEAN,
  improvedPBFramesMode                BOOLEAN,
  unlimitedMotionVectors              BOOLEAN,
  fullPictureFreeze                   BOOLEAN,
  partialPictureFreezeAndRelease      BOOLEAN,
  resizingPartPicFreezeAndRelease     BOOLEAN,
  fullPictureSnapshot                 BOOLEAN,
  partialPictureSnapshot              BOOLEAN,
  videoSegmentTagging                 BOOLEAN,
  progressiveRefinement               BOOLEAN,
  dynamicPictureResizingByFour        BOOLEAN,
  dynamicPictureResizingSixteenthPel  BOOLEAN,
  dynamicWarpingHalfPel               BOOLEAN,
  dynamicWarpingSixteenthPel          BOOLEAN,
  independentSegmentDecoding          BOOLEAN,
  slicesInOrder-NonRect               BOOLEAN,
  slicesInOrder-Rect                  BOOLEAN,
  slicesNoOrder-NonRect               BOOLEAN,
  slicesNoOrder-Rect                  BOOLEAN,
  alternateInterVLCMode               BOOLEAN,
  modifiedQuantizationMode            BOOLEAN,
  reducedResolutionUpdate             BOOLEAN,
  transparencyParameters              TransparencyParameters OPTIONAL,
  separateVideoBackChannel            BOOLEAN,
  refPictureSelection                 RefPictureSelection OPTIONAL,
  customPictureClockFrequency
    SET SIZE (1..16) OF CustomPictureClockFrequency OPTIONAL,
  customPictureFormat
    SET SIZE (1..16) OF CustomPictureFormat OPTIONAL,
  modeCombos
    SET SIZE (1..16) OF H263VideoModeCombos OPTIONAL,
  ...,
  videoBadMBsCap                      BOOLEAN,
  h263Version3Options                 H263Version3Options}

TransparencyParameters ::= SEQUENCE {
  presentationOrder  INTEGER(1..256),
  offset-x           INTEGER(-262144..262143), -- 1/8 pixels
  offset-y           INTEGER(-262144..262143), -- 1/8 pixels
  scale-x            INTEGER(1..255),
  scale-y            INTEGER(1..255),
  ...}

RefPictureSelection ::= SEQUENCE {
  additionalPictureMemory
    SEQUENCE {sqcifAdditionalPictureMemory   INTEGER(1..256) OPTIONAL, -- units frame--
              qcifAdditionalPictureMemory    INTEGER(1..256) OPTIONAL, -- units frame--
              cifAdditionalPictureMemory     INTEGER(1..256) OPTIONAL, -- units frame--
              cif4AdditionalPictureMemory    INTEGER(1..256) OPTIONAL, -- units frame--
              cif16AdditionalPictureMemory   INTEGER(1..256) OPTIONAL, -- units frame--
              bigCpfAdditionalPictureMemory  INTEGER(1..256) OPTIONAL, -- units frame--
              ...} OPTIONAL,
  videoMux                       BOOLEAN,
  videoBackChannelSend
    CHOICE {none                  NULL,
            ackMessageOnly        NULL,
            nackMessageOnly       NULL,
            ackOrNackMessageOnly  NULL,
            ackAndNackMessage     NULL,
            ...},
  ...,
  enhancedReferencePicSelect
    SEQUENCE {subPictureRemovalParameters
                SEQUENCE {mpuHorizMBs     INTEGER(1..128),
                          mpuVertMBs      INTEGER(1..72),
                          mpuTotalNumber  INTEGER(1..65536),
                          ...} OPTIONAL,
              ...}}

CustomPictureClockFrequency ::= SEQUENCE {
  clockConversionCode  INTEGER(1000..1001),
  clockDivisor         INTEGER(1..127),
  sqcifMPI             INTEGER(1..2048) OPTIONAL,
  qcifMPI              INTEGER(1..2048) OPTIONAL,
  cifMPI               INTEGER(1..2048) OPTIONAL,
  cif4MPI              INTEGER(1..2048) OPTIONAL,
  cif16MPI             INTEGER(1..2048) OPTIONAL,
  ...}

CustomPictureFormat ::= SEQUENCE {
  maxCustomPictureWidth   INTEGER(1..2048), -- units 4 pixels
  maxCustomPictureHeight  INTEGER(1..2048), -- units 4 pixels
  minCustomPictureWidth   INTEGER(1..2048), -- units 4 pixels
  minCustomPictureHeight  INTEGER(1..2048), -- units 4 pixels
  mPI
    SEQUENCE {standardMPI  INTEGER(1..31) OPTIONAL,
              customPCF
                SET SIZE (1..16) OF
                  SEQUENCE {clockConversionCode  INTEGER(1000..1001),
                            clockDivisor         INTEGER(1..127),
                            customMPI            INTEGER(1..2048),
                            ...} OPTIONAL,
              ...},
  pixelAspectInformation
    CHOICE {anyPixelAspectRatio  BOOLEAN,
            pixelAspectCode      SET SIZE (1..14) OF INTEGER(1..14),
            extendedPAR
              SET SIZE (1..256) OF
                SEQUENCE {width   INTEGER(1..255),
                          height  INTEGER(1..255),
                          ...},
            ...},
  ...}

H263VideoModeCombos ::= SEQUENCE {
  h263VideoUncoupledModes  H263ModeComboFlags,
  h263VideoCoupledModes    SET SIZE (1..16) OF H263ModeComboFlags,
  ...}

H263ModeComboFlags ::= SEQUENCE {
  unrestrictedVector                  BOOLEAN,
  arithmeticCoding                    BOOLEAN,
  advancedPrediction                  BOOLEAN,
  pbFrames                            BOOLEAN,
  advancedIntraCodingMode             BOOLEAN,
  deblockingFilterMode                BOOLEAN,
  unlimitedMotionVectors              BOOLEAN,
  slicesInOrder-NonRect               BOOLEAN,
  slicesInOrder-Rect                  BOOLEAN,
  slicesNoOrder-NonRect               BOOLEAN,
  slicesNoOrder-Rect                  BOOLEAN,
  improvedPBFramesMode                BOOLEAN,
  referencePicSelect                  BOOLEAN,
  dynamicPictureResizingByFour        BOOLEAN,
  dynamicPictureResizingSixteenthPel  BOOLEAN,
  dynamicWarpingHalfPel               BOOLEAN,
  dynamicWarpingSixteenthPel          BOOLEAN,
  reducedResolutionUpdate             BOOLEAN,
  independentSegmentDecoding          BOOLEAN,
  alternateInterVLCMode               BOOLEAN,
  modifiedQuantizationMode            BOOLEAN,
  ...,
  enhancedReferencePicSelect          BOOLEAN,
  h263Version3Options                 H263Version3Options}

H263Version3Options ::= SEQUENCE {
  dataPartitionedSlices            BOOLEAN,
  fixedPointIDCT0                  BOOLEAN,
  interlacedFields                 BOOLEAN,
  currentPictureHeaderRepetition   BOOLEAN,
  previousPictureHeaderRepetition  BOOLEAN,
  nextPictureHeaderRepetition      BOOLEAN,
  pictureNumber                    BOOLEAN,
  spareReferencePictures           BOOLEAN,
  ...}

IS11172VideoCapability ::= SEQUENCE {
  constrainedBitstream  BOOLEAN,
  videoBitRate          INTEGER(0..1073741823) OPTIONAL, -- units 400 bit/s
  vbvBufferSize         INTEGER(0..262143) OPTIONAL, -- units 16384 bits
  samplesPerLine        INTEGER(0..16383) OPTIONAL, -- units samples/line
  linesPerFrame         INTEGER(0..16383) OPTIONAL, -- units lines/frame
  pictureRate           INTEGER(0..15) OPTIONAL,
  luminanceSampleRate   INTEGER(0..4294967295) OPTIONAL, -- units samples/sec
  ...,
  videoBadMBsCap        BOOLEAN}

-- ===================================================================================
-- Capability exchange definitions: Audio capabilities
-- ===================================================================================
-- For an H.222 multiplex, the integers indicate the size of the STD buffer in units of 256 octets
-- For an H.223 multiplex, the integers indicate the maximum number of audio frames per AL-SDU
-- For an H.225.0 multiplex, the integers indicate the maximum number of audio frames per packet
AudioCapability ::= CHOICE {
  nonStandard             NonStandardParameter,
  g711Alaw64k             INTEGER(1..256),
  g711Alaw56k             INTEGER(1..256),
  g711Ulaw64k             INTEGER(1..256),
  g711Ulaw56k             INTEGER(1..256),
  g722-64k                INTEGER(1..256),
  g722-56k                INTEGER(1..256),
  g722-48k                INTEGER(1..256),
  g7231
    SEQUENCE {maxAl-sduAudioFrames  INTEGER(1..256),
              silenceSuppression    BOOLEAN},
  g728                    INTEGER(1..256),
  g729                    INTEGER(1..256),
  g729AnnexA              INTEGER(1..256),
  is11172AudioCapability  IS11172AudioCapability,
  is13818AudioCapability  IS13818AudioCapability,
  ...,
  g729wAnnexB             INTEGER(1..256),
  g729AnnexAwAnnexB       INTEGER(1..256),
  g7231AnnexCCapability   G7231AnnexCCapability,
  gsmFullRate             GSMAudioCapability,
  gsmHalfRate             GSMAudioCapability,
  gsmEnhancedFullRate     GSMAudioCapability,
  genericAudioCapability  GenericCapability,
  g729Extensions          G729Extensions,
  vbd                     VBDCapability,
  audioTelephonyEvent     NoPTAudioTelephonyEventCapability,
  audioTone               NoPTAudioToneCapability}

G729Extensions ::= SEQUENCE {
  audioUnit  INTEGER(1..256) OPTIONAL,
  annexA     BOOLEAN,
  annexB     BOOLEAN,
  annexD     BOOLEAN,
  annexE     BOOLEAN,
  annexF     BOOLEAN,
  annexG     BOOLEAN,
  annexH     BOOLEAN,
  ...}

G7231AnnexCCapability ::= SEQUENCE {
  maxAl-sduAudioFrames  INTEGER(1..256),
  silenceSuppression    BOOLEAN,
  g723AnnexCAudioMode
    SEQUENCE {highRateMode0  INTEGER(27..78), -- units octets--
              highRateMode1  INTEGER(27..78), -- units octets--
              lowRateMode0   INTEGER(23..66), -- units octets--
              lowRateMode1   INTEGER(23..66), -- units octets--
              sidMode0       INTEGER(6..17), -- units octets--
              sidMode1       INTEGER(6..17), -- units octets--
              ...} OPTIONAL,
  ...}

IS11172AudioCapability ::= SEQUENCE {
  audioLayer1        BOOLEAN,
  audioLayer2        BOOLEAN,
  audioLayer3        BOOLEAN,
  audioSampling32k   BOOLEAN,
  audioSampling44k1  BOOLEAN,
  audioSampling48k   BOOLEAN,
  singleChannel      BOOLEAN,
  twoChannels        BOOLEAN,
  bitRate            INTEGER(1..448), -- units kbit/s
  ...}

IS13818AudioCapability ::= SEQUENCE {
  audioLayer1              BOOLEAN,
  audioLayer2              BOOLEAN,
  audioLayer3              BOOLEAN,
  audioSampling16k         BOOLEAN,
  audioSampling22k05       BOOLEAN,
  audioSampling24k         BOOLEAN,
  audioSampling32k         BOOLEAN,
  audioSampling44k1        BOOLEAN,
  audioSampling48k         BOOLEAN,
  singleChannel            BOOLEAN,
  twoChannels              BOOLEAN,
  threeChannels2-1         BOOLEAN,
  threeChannels3-0         BOOLEAN,
  fourChannels2-0-2-0      BOOLEAN,
  fourChannels2-2          BOOLEAN,
  fourChannels3-1          BOOLEAN,
  fiveChannels3-0-2-0      BOOLEAN,
  fiveChannels3-2          BOOLEAN,
  lowFrequencyEnhancement  BOOLEAN,
  multilingual             BOOLEAN,
  bitRate                  INTEGER(1..1130), -- units kbit/s
  ...}

GSMAudioCapability ::= SEQUENCE {
  audioUnitSize  INTEGER(1..256),
  comfortNoise   BOOLEAN,
  scrambled      BOOLEAN,
  ...}

VBDCapability ::= SEQUENCE {type  AudioCapability, -- shall not be "vbd"
                            ...}

-- ===================================================================================
-- Capability exchange definitions: Data capabilities
-- ===================================================================================
DataApplicationCapability ::= SEQUENCE {
  application
    CHOICE {nonStandard            NonStandardParameter,
            t120                   DataProtocolCapability,
            dsm-cc                 DataProtocolCapability,
            userData               DataProtocolCapability,
            t84
              SEQUENCE {t84Protocol  DataProtocolCapability,
                        t84Profile   T84Profile},
            t434                   DataProtocolCapability,
            h224                   DataProtocolCapability,
            nlpid
              SEQUENCE {nlpidProtocol  DataProtocolCapability,
                        nlpidData      OCTET STRING},
            dsvdControl            NULL,
            h222DataPartitioning   DataProtocolCapability,
            ...,
            t30fax                 DataProtocolCapability,
            t140                   DataProtocolCapability,
            t38fax
              SEQUENCE {t38FaxProtocol  DataProtocolCapability,
                        t38FaxProfile   T38FaxProfile},
            genericDataCapability  GenericCapability},
  maxBitRate   INTEGER(0..4294967295), -- units 100 bit/s
  ...}

DataProtocolCapability ::= CHOICE {
  nonStandard                NonStandardParameter,
  v14buffered                NULL,
  v42lapm                    NULL, -- may negotiate to V.42bis
  hdlcFrameTunnelling        NULL,
  h310SeparateVCStack        NULL,
  h310SingleVCStack          NULL,
  transparent                NULL,
  ...,
  segmentationAndReassembly  NULL,
  hdlcFrameTunnelingwSAR     NULL,
  v120                       NULL, -- as in H.230
  separateLANStack           NULL,
  v76wCompression
    CHOICE {transmitCompression            CompressionType,
            receiveCompression             CompressionType,
            transmitAndReceiveCompression  CompressionType,
            ...},
  tcp                        NULL,
  udp                        NULL}

CompressionType ::= CHOICE {v42bis  V42bis,
                            ...}

V42bis ::= SEQUENCE {
  numberOfCodewords    INTEGER(1..65536),
  maximumStringLength  INTEGER(1..256),
  ...}

T84Profile ::= CHOICE {
  t84Unrestricted  NULL,
  t84Restricted
    SEQUENCE {qcif              BOOLEAN,
              cif               BOOLEAN,
              ccir601Seq        BOOLEAN,
              ccir601Prog       BOOLEAN,
              hdtvSeq           BOOLEAN,
              hdtvProg          BOOLEAN,
              g3FacsMH200x100   BOOLEAN,
              g3FacsMH200x200   BOOLEAN,
              g4FacsMMR200x100  BOOLEAN,
              g4FacsMMR200x200  BOOLEAN,
              jbig200x200Seq    BOOLEAN,
              jbig200x200Prog   BOOLEAN,
              jbig300x300Seq    BOOLEAN,
              jbig300x300Prog   BOOLEAN,
              digPhotoLow       BOOLEAN,
              digPhotoMedSeq    BOOLEAN,
              digPhotoMedProg   BOOLEAN,
              digPhotoHighSeq   BOOLEAN,
              digPhotoHighProg  BOOLEAN,
              ...}}

T38FaxProfile ::= SEQUENCE {
  fillBitRemoval           BOOLEAN,
  transcodingJBIG          BOOLEAN,
  transcodingMMR           BOOLEAN,
  ...,
  version                  INTEGER(0..255),
  -- Version 0, the default, refers to T.38 (1998)
  t38FaxRateManagement     T38FaxRateManagement,
  -- The default Data Rate Management is
  -- determined by the choice of
  -- DataProtocolCapability
  t38FaxUdpOptions         T38FaxUdpOptions OPTIONAL,
  -- For UDP,  t38UDPRedundancy is the default
  t38FaxTcpOptions         T38FaxTcpOptions OPTIONAL}

T38FaxRateManagement ::= CHOICE {
  localTCF        NULL,
  transferredTCF  NULL,
  ...}

T38FaxUdpOptions ::= SEQUENCE {
  t38FaxMaxBuffer    INTEGER OPTIONAL,
  t38FaxMaxDatagram  INTEGER OPTIONAL,
  t38FaxUdpEC
    CHOICE {t38UDPFEC         NULL,
            t38UDPRedundancy  NULL,
            ...}}

T38FaxTcpOptions ::= SEQUENCE {t38TCPBidirectionalMode  BOOLEAN,
                               ...}

-- ===================================================================================
-- Encryption Capability Definitions: 
-- ===================================================================================
EncryptionAuthenticationAndIntegrity ::= SEQUENCE {
  encryptionCapability      EncryptionCapability OPTIONAL,
  authenticationCapability  AuthenticationCapability OPTIONAL,
  integrityCapability       IntegrityCapability OPTIONAL,
  ...}

EncryptionCapability ::= SEQUENCE SIZE (1..256) OF MediaEncryptionAlgorithm

MediaEncryptionAlgorithm ::= CHOICE {
  nonStandard  NonStandardParameter,
  algorithm    OBJECT IDENTIFIER, -- many defined in ISO/IEC 9979
  ...}

AuthenticationCapability ::= SEQUENCE {
  nonStandard           NonStandardParameter OPTIONAL,
  ...,
  antiSpamAlgorithm     OBJECT IDENTIFIER OPTIONAL}

IntegrityCapability ::= SEQUENCE {
  nonStandard  NonStandardParameter OPTIONAL,
  ...}

-- ================================================================================
-- Capability Exchange Definitions: UserInput
-- ================================================================================
UserInputCapability ::= CHOICE {
  nonStandard           SEQUENCE SIZE (1..16) OF NonStandardParameter,
  basicString           NULL, -- alphanumeric
  iA5String             NULL, -- alphanumeric
  generalString         NULL, -- alphanumeric
  dtmf                  NULL, -- supports dtmf using signal and signalUpdate
  hookflash             NULL, -- supports hookflash using signal
  ...,
  extendedAlphanumeric  NULL}

-- ===================================================================================
-- Capability Exchange Definitions: Conference
-- ===================================================================================
ConferenceCapability ::= SEQUENCE {
  nonStandardData
    SEQUENCE OF NonStandardParameter OPTIONAL,
  chairControlCapability                BOOLEAN,
  ...,
  videoIndicateMixingCapability         BOOLEAN,
  multipointVisualizationCapability     BOOLEAN OPTIONAL -- same as H.230 MVC--}

-- ===================================================================================
-- Capability Exchange Definitions: Generic Capability
-- ===================================================================================
GenericCapability ::= SEQUENCE {
  capabilityIdentifier  CapabilityIdentifier,
  maxBitRate            INTEGER(0..4294967295) OPTIONAL, -- Units 100 bit/s
  collapsing            SEQUENCE OF GenericParameter OPTIONAL,
  nonCollapsing         SEQUENCE OF GenericParameter OPTIONAL,
  nonCollapsingRaw      OCTET STRING OPTIONAL, -- Typically contains ASN.1
  
  -- PER encoded data describing capability
  transport             DataProtocolCapability OPTIONAL,
  ...}

CapabilityIdentifier ::= CHOICE {
  standard         OBJECT IDENTIFIER,
  -- e.g. { itu-t (0) recommendation (0) h (8) 267 
  -- version (0) 2 subIdentifier (0)}
  h221NonStandard  NonStandardParameter,
  uuid             OCTET STRING(SIZE (16)),
  domainBased      IA5String(SIZE (1..64)),
  ...}

-- Note. The ranges of parameter values have been selected to ensure that the GenericParameter
-- preamble, standard part of ParameterIdentifier and the encoding of that choice, and the preamble 
-- of ParameterValue to fit into 2 octets.
GenericParameter ::= SEQUENCE {
  parameterIdentifier  ParameterIdentifier,
  parameterValue       ParameterValue,
  supersedes           SEQUENCE OF ParameterIdentifier OPTIONAL,
  ...}

ParameterIdentifier ::= CHOICE {
  standard         INTEGER(0..127), -- Assigned by Capability specifications
  h221NonStandard  NonStandardParameter, -- N.B. NonStandardIdentifier is
  
  -- not sufficient in this case
  uuid             OCTET STRING(SIZE (16)), -- For non-standard
  domainBased      IA5String(SIZE (1..64)),
  ...}

ParameterValue ::= CHOICE {
  logical           NULL, -- Only acceptable if all 
  
  -- entities include this option
  booleanArray      INTEGER(0..255), -- array of 8 logical types
  unsignedMin       INTEGER(0..65535), -- Look for min common value
  unsignedMax       INTEGER(0..65535), -- Look for max common value
  unsigned32Min     INTEGER(0..4294967295), -- Look for min common value
  unsigned32Max     INTEGER(0..4294967295), -- Look for max common value
  octetString       OCTET STRING, -- non-collapsing octet string
  genericParameter  SEQUENCE OF GenericParameter,
  ...}

-- ===================================================================================
-- Capability Exchange Definitions: Multiplexed Stream Capability
-- ===================================================================================
MultiplexedStreamCapability ::= SEQUENCE {
  multiplexFormat        MultiplexFormat,
  controlOnMuxStream     BOOLEAN,
  capabilityOnMuxStream  SET SIZE (1..256) OF AlternativeCapabilitySet OPTIONAL,
  ...}

MultiplexFormat ::= CHOICE {
  nonStandard     NonStandardParameter,
  h222Capability  H222Capability,
  h223Capability  H223Capability,
  ...}

-- ===================================================================================
-- Capability Exchange Definitions: AudioTelephonyEventCapability and AudioToneCapability
-- ===================================================================================
AudioTelephonyEventCapability ::= SEQUENCE {
  dynamicRTPPayloadType  INTEGER(96..127),
  audioTelephoneEvent    GeneralString, -- As per <list of values> in 3.9/RFC2833
  ...}

AudioToneCapability ::= SEQUENCE {dynamicRTPPayloadType  INTEGER(96..127),
                                  ...}

-- The following defintions are as above but without a Payload Type field
NoPTAudioTelephonyEventCapability ::= SEQUENCE {
  audioTelephoneEvent  GeneralString, -- As per <list of values> in 3.9/RFC2833
  ...}

NoPTAudioToneCapability ::= SEQUENCE {...}

-- ===================================================================================
-- Capability Exchange Definitions: MultiplePayloadStreamCapability
-- ===================================================================================
MultiplePayloadStreamCapability ::= SEQUENCE {
  capabilities  SET SIZE (1..256) OF AlternativeCapabilitySet,
  ...}

-- ===================================================================================
-- Capability Exchange Definitions: FECCapability
-- ===================================================================================
FECCapability ::= CHOICE {
  rfc2733
    SEQUENCE {redundancyEncoding  BOOLEAN,
              separateStream
                SEQUENCE {separatePort  BOOLEAN,
                          samePort      BOOLEAN,
                          ...},
              ...},
  ...}

-- ===================================================================================
-- Logical channel signalling definitions
-- ===================================================================================
-- "Forward" is used to refer to transmission in the direction from the terminal making the
-- original request for a logical channel to the other terminal, and "reverse" is used to refer
-- to the opposite direction of transmission, in the case of a bi-directional channel request.
OpenLogicalChannel ::= SEQUENCE {
  forwardLogicalChannelNumber      LogicalChannelNumber,
  forwardLogicalChannelParameters
    SEQUENCE {portNumber                          INTEGER(0..65535) OPTIONAL,
              dataType                            DataType,
              multiplexParameters
                CHOICE {h222LogicalChannelParameters
                          H222LogicalChannelParameters,
                        h223LogicalChannelParameters
                          H223LogicalChannelParameters,
                        v76LogicalChannelParameters
                          V76LogicalChannelParameters,
                        ...,
                        h2250LogicalChannelParameters
                          H2250LogicalChannelParameters,
                        none
                          NULL-- for use with Separate Stack when--
                        -- multiplexParameters are not required
                        -- or appropriate--},
              ...,
              forwardLogicalChannelDependency     LogicalChannelNumber OPTIONAL,
              -- also used to refer to the primary logical channel when using video redundancy coding
              replacementFor                      LogicalChannelNumber OPTIONAL},
  -- Used to specify the reverse channel for bi-directional open request
  reverseLogicalChannelParameters
    SEQUENCE {dataType                            DataType,
              multiplexParameters
                CHOICE {-- H.222 parameters are never present in reverse direction
                        h223LogicalChannelParameters
                          H223LogicalChannelParameters,
                        v76LogicalChannelParameters
                          V76LogicalChannelParameters,
                        ...,
                        h2250LogicalChannelParameters
                          H2250LogicalChannelParameters} OPTIONAL, -- Not present for H.222--
              ...,
              reverseLogicalChannelDependency     LogicalChannelNumber OPTIONAL,
              -- also used to refer to the primary logical channel when using video redundancy coding
              replacementFor                      LogicalChannelNumber OPTIONAL}
      OPTIONAL, -- Not present for uni-directional channel request
  ...,
  separateStack                    NetworkAccessParameters OPTIONAL,
  -- for Open responder to establish the stack
  encryptionSync                   EncryptionSync OPTIONAL -- used only by Master--}

LogicalChannelNumber ::= INTEGER(1..65535)

NetworkAccessParameters ::= SEQUENCE {
  distribution
    CHOICE {unicast    NULL,
            multicast  NULL, -- For Further Study in T.120--
            ...} OPTIONAL,
  networkAddress
    CHOICE {q2931Address      Q2931Address,
            e164Address       IA5String(SIZE (1..128))(FROM ("0123456789#*,")),
            localAreaAddress  TransportAddress,
            ...},
  associateConference    BOOLEAN,
  externalReference      OCTET STRING(SIZE (1..255)) OPTIONAL,
  ...,
  t120SetupProcedure
    CHOICE {originateCall  NULL,
            waitForCall    NULL,
            issueQuery     NULL,
            ...} OPTIONAL}

Q2931Address ::= SEQUENCE {
  address
    CHOICE {internationalNumber  NumericString(SIZE (1..16)),
            nsapAddress          OCTET STRING(SIZE (1..20)),
            ...},
  subaddress  OCTET STRING(SIZE (1..20)) OPTIONAL,
  ...}

V75Parameters ::= SEQUENCE {audioHeaderPresent  BOOLEAN,
                            ...}

DataType ::= CHOICE {
  nonStandard            NonStandardParameter,
  nullData               NULL,
  videoData              VideoCapability,
  audioData              AudioCapability,
  data                   DataApplicationCapability,
  encryptionData         EncryptionMode,
  ...,
  h235Control            NonStandardParameter,
  h235Media              H235Media,
  multiplexedStream      MultiplexedStreamParameter,
  redundancyEncoding     RedundancyEncoding,
  multiplePayloadStream  MultiplePayloadStream,
  fec                    FECData}

H235Media ::= SEQUENCE {
  encryptionAuthenticationAndIntegrity  EncryptionAuthenticationAndIntegrity,
  mediaType
    CHOICE {nonStandard            NonStandardParameter,
            videoData              VideoCapability,
            audioData              AudioCapability,
            data                   DataApplicationCapability,
            ...,
            redundancyEncoding     RedundancyEncoding,
            multiplePayloadStream  MultiplePayloadStream,
            fec                    FECData},
  ...}

MultiplexedStreamParameter ::= SEQUENCE {
  multiplexFormat     MultiplexFormat,
  controlOnMuxStream  BOOLEAN,
  ...}

H222LogicalChannelParameters ::= SEQUENCE {
  resourceID          INTEGER(0..65535),
  subChannelID        INTEGER(0..8191),
  pcr-pid             INTEGER(0..8191) OPTIONAL,
  programDescriptors  OCTET STRING OPTIONAL,
  streamDescriptors   OCTET STRING OPTIONAL,
  ...}

H223LogicalChannelParameters ::= SEQUENCE {
  adaptationLayerType
    CHOICE {nonStandard                NonStandardParameter,
            al1Framed                  NULL,
            al1NotFramed               NULL,
            al2WithoutSequenceNumbers  NULL,
            al2WithSequenceNumbers     NULL,
            al3
              SEQUENCE {controlFieldOctets  INTEGER(0..2),
                        sendBufferSize      INTEGER(0..16777215) -- units octets--},
            ...,
            al1M                       H223AL1MParameters,
            al2M                       H223AL2MParameters,
            al3M                       H223AL3MParameters},
  segmentableFlag      BOOLEAN,
  ...}

H223AL1MParameters ::= SEQUENCE {
  transferMode         CHOICE {framed    NULL,
                               unframed  NULL,
                               ...},
  headerFEC            CHOICE {sebch16-7   NULL,
                               golay24-12  NULL,
                               ...},
  crcLength
    CHOICE {crc4bit     NULL,
            crc12bit    NULL,
            crc20bit    NULL,
            crc28bit    NULL,
            ...,
            crc8bit     NULL,
            crc16bit    NULL,
            crc32bit    NULL,
            crcNotUsed  NULL},
  rcpcCodeRate         INTEGER(8..32),
  arqType
    CHOICE {noArq      NULL,
            typeIArq   H223AnnexCArqParameters,
            typeIIArq  H223AnnexCArqParameters,
            ...},
  alpduInterleaving    BOOLEAN,
  alsduSplitting       BOOLEAN,
  ...,
  rsCodeCorrection     INTEGER(0..127) OPTIONAL}

H223AL2MParameters ::= SEQUENCE {
  headerFEC          CHOICE {sebch16-5   NULL,
                             golay24-12  NULL,
                             ...},
  alpduInterleaving  BOOLEAN,
  ...}

H223AL3MParameters ::= SEQUENCE {
  headerFormat         CHOICE {sebch16-7   NULL,
                               golay24-12  NULL,
                               ...},
  crcLength
    CHOICE {crc4bit     NULL,
            crc12bit    NULL,
            crc20bit    NULL,
            crc28bit    NULL,
            ...,
            crc8bit     NULL,
            crc16bit    NULL,
            crc32bit    NULL,
            crcNotUsed  NULL},
  rcpcCodeRate         INTEGER(8..32),
  arqType
    CHOICE {noArq      NULL,
            typeIArq   H223AnnexCArqParameters,
            typeIIArq  H223AnnexCArqParameters,
            ...},
  alpduInterleaving    BOOLEAN,
  ...,
  rsCodeCorrection     INTEGER(0..127) OPTIONAL}

H223AnnexCArqParameters ::= SEQUENCE {
  numberOfRetransmissions
    CHOICE {finite    INTEGER(0..16),
            infinite  NULL,
            ...},
  sendBufferSize           INTEGER(0..16777215), -- units octets
  ...}

V76LogicalChannelParameters ::= SEQUENCE {
  hdlcParameters  V76HDLCParameters,
  suspendResume
    CHOICE {noSuspendResume         NULL,
            suspendResumewAddress   NULL,
            suspendResumewoAddress  NULL,
            ...},
  uIH             BOOLEAN,
  mode
    CHOICE {eRM
              SEQUENCE {windowSize  INTEGER(1..127),
                        recovery
                          CHOICE {rej    NULL,
                                  sREJ   NULL,
                                  mSREJ  NULL,
                                  ...},
                        ...},
            uNERM  NULL,
            ...},
  v75Parameters   V75Parameters,
  ...}

V76HDLCParameters ::= SEQUENCE {
  crcLength              CRCLength,
  n401                   INTEGER(1..4095),
  loopbackTestProcedure  BOOLEAN,
  ...}

CRCLength ::= CHOICE {crc8bit   NULL,
                      crc16bit  NULL,
                      crc32bit  NULL,
                      ...}

H2250LogicalChannelParameters ::= SEQUENCE {
  nonStandard                     SEQUENCE OF NonStandardParameter OPTIONAL,
  sessionID                       INTEGER(0..255),
  associatedSessionID             INTEGER(1..255) OPTIONAL,
  mediaChannel                    TransportAddress OPTIONAL,
  mediaGuaranteedDelivery         BOOLEAN OPTIONAL,
  mediaControlChannel             TransportAddress OPTIONAL, -- reverse RTCP channel
  mediaControlGuaranteedDelivery  BOOLEAN OPTIONAL,
  silenceSuppression              BOOLEAN OPTIONAL,
  destination                     TerminalLabel OPTIONAL,
  dynamicRTPPayloadType           INTEGER(96..127) OPTIONAL,
  mediaPacketization
    CHOICE {h261aVideoPacketization  NULL,
            ...,
            rtpPayloadType