All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.cloudshiftdev.awscdk.services.medialive.CfnChannel.kt Maven / Gradle / Ivy

The newest version!
@file:Suppress("RedundantVisibilityModifier","RedundantUnitReturnType","RemoveRedundantQualifierName","unused","UnusedImport","ClassName","REDUNDANT_PROJECTION","DEPRECATION")

package io.cloudshiftdev.awscdk.services.medialive

import io.cloudshiftdev.awscdk.CfnResource
import io.cloudshiftdev.awscdk.IInspectable
import io.cloudshiftdev.awscdk.IResolvable
import io.cloudshiftdev.awscdk.ITaggable
import io.cloudshiftdev.awscdk.TagManager
import io.cloudshiftdev.awscdk.TreeInspector
import io.cloudshiftdev.awscdk.common.CdkDslMarker
import io.cloudshiftdev.awscdk.common.CdkObject
import io.cloudshiftdev.awscdk.common.CdkObjectWrappers
import kotlin.Any
import kotlin.Number
import kotlin.String
import kotlin.Unit
import kotlin.collections.List
import kotlin.jvm.JvmName
import io.cloudshiftdev.constructs.Construct as CloudshiftdevConstructsConstruct
import software.constructs.Construct as SoftwareConstructsConstruct

/**
 * The AWS::MediaLive::Channel resource is a MediaLive resource type that creates a channel.
 *
 * A MediaLive channel ingests and transcodes (decodes and encodes) source content from the inputs
 * that are attached to that channel, and packages the new content into outputs.
 *
 * Example:
 *
 * ```
 * ```
 *
 * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html)
 */
public open class CfnChannel(
  cdkObject: software.amazon.awscdk.services.medialive.CfnChannel,
) : CfnResource(cdkObject),
    IInspectable,
    ITaggable {
  public constructor(scope: CloudshiftdevConstructsConstruct, id: String) :
      this(software.amazon.awscdk.services.medialive.CfnChannel(scope.let(CloudshiftdevConstructsConstruct.Companion::unwrap),
      id)
  )

  public constructor(
    scope: CloudshiftdevConstructsConstruct,
    id: String,
    props: CfnChannelProps,
  ) :
      this(software.amazon.awscdk.services.medialive.CfnChannel(scope.let(CloudshiftdevConstructsConstruct.Companion::unwrap),
      id, props.let(CfnChannelProps.Companion::unwrap))
  )

  public constructor(
    scope: CloudshiftdevConstructsConstruct,
    id: String,
    props: CfnChannelProps.Builder.() -> Unit,
  ) : this(scope, id, CfnChannelProps(props)
  )

  /**
   * The ARN of the MediaLive channel.
   *
   * For example: arn:aws:medialive:us-west-1:111122223333:medialive:channel:1234567
   */
  public open fun attrArn(): String = unwrap(this).getAttrArn()

  /**
   * User-specified id.
   *
   * This is used in an output group or an output.
   */
  public open fun attrId(): String = unwrap(this).getAttrId()

  /**
   * The inputs that are attached to this channel.
   *
   * The inputs are identified by their IDs (not by their names or their ARNs).
   */
  public open fun attrInputs(): List = unwrap(this).getAttrInputs()

  /**
   * Specification of CDI inputs for this channel.
   */
  public open fun cdiInputSpecification(): Any? = unwrap(this).getCdiInputSpecification()

  /**
   * Specification of CDI inputs for this channel.
   */
  public open fun cdiInputSpecification(`value`: IResolvable) {
    unwrap(this).setCdiInputSpecification(`value`.let(IResolvable.Companion::unwrap))
  }

  /**
   * Specification of CDI inputs for this channel.
   */
  public open fun cdiInputSpecification(`value`: CdiInputSpecificationProperty) {
    unwrap(this).setCdiInputSpecification(`value`.let(CdiInputSpecificationProperty.Companion::unwrap))
  }

  /**
   * Specification of CDI inputs for this channel.
   */
  @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
  @JvmName("fcfa51c6f16e1e1908836e6f720594b5773c3e8696abdb37d830817755b611a5")
  public open fun cdiInputSpecification(`value`: CdiInputSpecificationProperty.Builder.() -> Unit):
      Unit = cdiInputSpecification(CdiInputSpecificationProperty(`value`))

  /**
   * The class for this channel.
   */
  public open fun channelClass(): String? = unwrap(this).getChannelClass()

  /**
   * The class for this channel.
   */
  public open fun channelClass(`value`: String) {
    unwrap(this).setChannelClass(`value`)
  }

  /**
   * The settings that identify the destination for the outputs in this MediaLive output package.
   */
  public open fun destinations(): Any? = unwrap(this).getDestinations()

  /**
   * The settings that identify the destination for the outputs in this MediaLive output package.
   */
  public open fun destinations(`value`: IResolvable) {
    unwrap(this).setDestinations(`value`.let(IResolvable.Companion::unwrap))
  }

  /**
   * The settings that identify the destination for the outputs in this MediaLive output package.
   */
  public open fun destinations(`value`: List) {
    unwrap(this).setDestinations(`value`.map{CdkObjectWrappers.unwrap(it)})
  }

  /**
   * The settings that identify the destination for the outputs in this MediaLive output package.
   */
  public open fun destinations(vararg `value`: Any): Unit = destinations(`value`.toList())

  /**
   * The encoding configuration for the output content.
   */
  public open fun encoderSettings(): Any? = unwrap(this).getEncoderSettings()

  /**
   * The encoding configuration for the output content.
   */
  public open fun encoderSettings(`value`: IResolvable) {
    unwrap(this).setEncoderSettings(`value`.let(IResolvable.Companion::unwrap))
  }

  /**
   * The encoding configuration for the output content.
   */
  public open fun encoderSettings(`value`: EncoderSettingsProperty) {
    unwrap(this).setEncoderSettings(`value`.let(EncoderSettingsProperty.Companion::unwrap))
  }

  /**
   * The encoding configuration for the output content.
   */
  @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
  @JvmName("2335d04014caea3733e5da5f058cd1062c748b4b191b6dbd239d8f37104b0215")
  public open fun encoderSettings(`value`: EncoderSettingsProperty.Builder.() -> Unit): Unit =
      encoderSettings(EncoderSettingsProperty(`value`))

  /**
   * The list of input attachments for the channel.
   */
  public open fun inputAttachments(): Any? = unwrap(this).getInputAttachments()

  /**
   * The list of input attachments for the channel.
   */
  public open fun inputAttachments(`value`: IResolvable) {
    unwrap(this).setInputAttachments(`value`.let(IResolvable.Companion::unwrap))
  }

  /**
   * The list of input attachments for the channel.
   */
  public open fun inputAttachments(`value`: List) {
    unwrap(this).setInputAttachments(`value`.map{CdkObjectWrappers.unwrap(it)})
  }

  /**
   * The list of input attachments for the channel.
   */
  public open fun inputAttachments(vararg `value`: Any): Unit = inputAttachments(`value`.toList())

  /**
   * The input specification for this channel.
   */
  public open fun inputSpecification(): Any? = unwrap(this).getInputSpecification()

  /**
   * The input specification for this channel.
   */
  public open fun inputSpecification(`value`: IResolvable) {
    unwrap(this).setInputSpecification(`value`.let(IResolvable.Companion::unwrap))
  }

  /**
   * The input specification for this channel.
   */
  public open fun inputSpecification(`value`: InputSpecificationProperty) {
    unwrap(this).setInputSpecification(`value`.let(InputSpecificationProperty.Companion::unwrap))
  }

  /**
   * The input specification for this channel.
   */
  @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
  @JvmName("0a8d9f8cca55bc1dd393479d05297434556a561310860bac462ec6311e9a355e")
  public open fun inputSpecification(`value`: InputSpecificationProperty.Builder.() -> Unit): Unit =
      inputSpecification(InputSpecificationProperty(`value`))

  /**
   * Examines the CloudFormation resource and discloses attributes.
   *
   * @param inspector tree inspector to collect and process attributes. 
   */
  public override fun inspect(inspector: TreeInspector) {
    unwrap(this).inspect(inspector.let(TreeInspector.Companion::unwrap))
  }

  /**
   * The verbosity for logging activity for this channel.
   */
  public open fun logLevel(): String? = unwrap(this).getLogLevel()

  /**
   * The verbosity for logging activity for this channel.
   */
  public open fun logLevel(`value`: String) {
    unwrap(this).setLogLevel(`value`)
  }

  /**
   * Maintenance settings for this channel.
   */
  public open fun maintenance(): Any? = unwrap(this).getMaintenance()

  /**
   * Maintenance settings for this channel.
   */
  public open fun maintenance(`value`: IResolvable) {
    unwrap(this).setMaintenance(`value`.let(IResolvable.Companion::unwrap))
  }

  /**
   * Maintenance settings for this channel.
   */
  public open fun maintenance(`value`: MaintenanceCreateSettingsProperty) {
    unwrap(this).setMaintenance(`value`.let(MaintenanceCreateSettingsProperty.Companion::unwrap))
  }

  /**
   * Maintenance settings for this channel.
   */
  @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
  @JvmName("ce29c1528b66103c0458cf59808c08ec027e663dbd553aab7372f24b9f309938")
  public open fun maintenance(`value`: MaintenanceCreateSettingsProperty.Builder.() -> Unit): Unit =
      maintenance(MaintenanceCreateSettingsProperty(`value`))

  /**
   * A name for this audio selector.
   */
  public open fun name(): String? = unwrap(this).getName()

  /**
   * A name for this audio selector.
   */
  public open fun name(`value`: String) {
    unwrap(this).setName(`value`)
  }

  /**
   * The IAM role for MediaLive to assume when running this channel.
   */
  public open fun roleArn(): String? = unwrap(this).getRoleArn()

  /**
   * The IAM role for MediaLive to assume when running this channel.
   */
  public open fun roleArn(`value`: String) {
    unwrap(this).setRoleArn(`value`)
  }

  /**
   * Tag Manager which manages the tags for this resource.
   */
  public override fun tags(): TagManager = unwrap(this).getTags().let(TagManager::wrap)

  /**
   * A collection of tags for this channel.
   */
  public open fun tagsRaw(): Any? = unwrap(this).getTagsRaw()

  /**
   * A collection of tags for this channel.
   */
  public open fun tagsRaw(`value`: Any) {
    unwrap(this).setTagsRaw(`value`)
  }

  /**
   * Settings to enable VPC mode in the channel, so that the endpoints for all outputs are in your
   * VPC.
   */
  public open fun vpc(): Any? = unwrap(this).getVpc()

  /**
   * Settings to enable VPC mode in the channel, so that the endpoints for all outputs are in your
   * VPC.
   */
  public open fun vpc(`value`: IResolvable) {
    unwrap(this).setVpc(`value`.let(IResolvable.Companion::unwrap))
  }

  /**
   * Settings to enable VPC mode in the channel, so that the endpoints for all outputs are in your
   * VPC.
   */
  public open fun vpc(`value`: VpcOutputSettingsProperty) {
    unwrap(this).setVpc(`value`.let(VpcOutputSettingsProperty.Companion::unwrap))
  }

  /**
   * Settings to enable VPC mode in the channel, so that the endpoints for all outputs are in your
   * VPC.
   */
  @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
  @JvmName("dc420a6da3f6e928883ae18d1fa17181cf61dd929ff4b01bb05a37adf7bea77d")
  public open fun vpc(`value`: VpcOutputSettingsProperty.Builder.() -> Unit): Unit =
      vpc(VpcOutputSettingsProperty(`value`))

  /**
   * A fluent builder for [io.cloudshiftdev.awscdk.services.medialive.CfnChannel].
   */
  @CdkDslMarker
  public interface Builder {
    /**
     * Specification of CDI inputs for this channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-cdiinputspecification)
     * @param cdiInputSpecification Specification of CDI inputs for this channel. 
     */
    public fun cdiInputSpecification(cdiInputSpecification: IResolvable)

    /**
     * Specification of CDI inputs for this channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-cdiinputspecification)
     * @param cdiInputSpecification Specification of CDI inputs for this channel. 
     */
    public fun cdiInputSpecification(cdiInputSpecification: CdiInputSpecificationProperty)

    /**
     * Specification of CDI inputs for this channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-cdiinputspecification)
     * @param cdiInputSpecification Specification of CDI inputs for this channel. 
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("aacee8ea7d493868931951676e6a7998b047d4dba5db835e263f5fe2dc77d6ce")
    public
        fun cdiInputSpecification(cdiInputSpecification: CdiInputSpecificationProperty.Builder.() -> Unit)

    /**
     * The class for this channel.
     *
     * For a channel with two pipelines, the class is STANDARD. For a channel with one pipeline, the
     * class is SINGLE_PIPELINE.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-channelclass)
     * @param channelClass The class for this channel. 
     */
    public fun channelClass(channelClass: String)

    /**
     * The settings that identify the destination for the outputs in this MediaLive output package.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-destinations)
     * @param destinations The settings that identify the destination for the outputs in this
     * MediaLive output package. 
     */
    public fun destinations(destinations: IResolvable)

    /**
     * The settings that identify the destination for the outputs in this MediaLive output package.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-destinations)
     * @param destinations The settings that identify the destination for the outputs in this
     * MediaLive output package. 
     */
    public fun destinations(destinations: List)

    /**
     * The settings that identify the destination for the outputs in this MediaLive output package.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-destinations)
     * @param destinations The settings that identify the destination for the outputs in this
     * MediaLive output package. 
     */
    public fun destinations(vararg destinations: Any)

    /**
     * The encoding configuration for the output content.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-encodersettings)
     * @param encoderSettings The encoding configuration for the output content. 
     */
    public fun encoderSettings(encoderSettings: IResolvable)

    /**
     * The encoding configuration for the output content.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-encodersettings)
     * @param encoderSettings The encoding configuration for the output content. 
     */
    public fun encoderSettings(encoderSettings: EncoderSettingsProperty)

    /**
     * The encoding configuration for the output content.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-encodersettings)
     * @param encoderSettings The encoding configuration for the output content. 
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("a2314ed8c6250a2bf5498955db0ad5f303fc86059c73255fa29b50f7f96d35b9")
    public fun encoderSettings(encoderSettings: EncoderSettingsProperty.Builder.() -> Unit)

    /**
     * The list of input attachments for the channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-inputattachments)
     * @param inputAttachments The list of input attachments for the channel. 
     */
    public fun inputAttachments(inputAttachments: IResolvable)

    /**
     * The list of input attachments for the channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-inputattachments)
     * @param inputAttachments The list of input attachments for the channel. 
     */
    public fun inputAttachments(inputAttachments: List)

    /**
     * The list of input attachments for the channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-inputattachments)
     * @param inputAttachments The list of input attachments for the channel. 
     */
    public fun inputAttachments(vararg inputAttachments: Any)

    /**
     * The input specification for this channel.
     *
     * It specifies the key characteristics of the inputs for this channel: the maximum bitrate, the
     * resolution, and the codec.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-inputspecification)
     * @param inputSpecification The input specification for this channel. 
     */
    public fun inputSpecification(inputSpecification: IResolvable)

    /**
     * The input specification for this channel.
     *
     * It specifies the key characteristics of the inputs for this channel: the maximum bitrate, the
     * resolution, and the codec.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-inputspecification)
     * @param inputSpecification The input specification for this channel. 
     */
    public fun inputSpecification(inputSpecification: InputSpecificationProperty)

    /**
     * The input specification for this channel.
     *
     * It specifies the key characteristics of the inputs for this channel: the maximum bitrate, the
     * resolution, and the codec.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-inputspecification)
     * @param inputSpecification The input specification for this channel. 
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("2a09da5b93c8531e73bbabc998e2e89eced34c8bc3c128cced66fb015c0605e7")
    public fun inputSpecification(inputSpecification: InputSpecificationProperty.Builder.() -> Unit)

    /**
     * The verbosity for logging activity for this channel.
     *
     * Charges for logging (which are generated through Amazon CloudWatch Logging) are higher for
     * higher verbosities.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-loglevel)
     * @param logLevel The verbosity for logging activity for this channel. 
     */
    public fun logLevel(logLevel: String)

    /**
     * Maintenance settings for this channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-maintenance)
     * @param maintenance Maintenance settings for this channel. 
     */
    public fun maintenance(maintenance: IResolvable)

    /**
     * Maintenance settings for this channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-maintenance)
     * @param maintenance Maintenance settings for this channel. 
     */
    public fun maintenance(maintenance: MaintenanceCreateSettingsProperty)

    /**
     * Maintenance settings for this channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-maintenance)
     * @param maintenance Maintenance settings for this channel. 
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("45e659608119eb682e4d6abbf1c66ff8f58f4fa7f39e5d6c1f9971d6b0504f15")
    public fun maintenance(maintenance: MaintenanceCreateSettingsProperty.Builder.() -> Unit)

    /**
     * A name for this audio selector.
     *
     * The AudioDescription (in an output) references this name in order to identify a specific
     * input audio to include in that output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-name)
     * @param name A name for this audio selector. 
     */
    public fun name(name: String)

    /**
     * The IAM role for MediaLive to assume when running this channel.
     *
     * The role is identified by its ARN.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-rolearn)
     * @param roleArn The IAM role for MediaLive to assume when running this channel. 
     */
    public fun roleArn(roleArn: String)

    /**
     * A collection of tags for this channel.
     *
     * Each tag is a key-value pair.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-tags)
     * @param tags A collection of tags for this channel. 
     */
    public fun tags(tags: Any)

    /**
     * Settings to enable VPC mode in the channel, so that the endpoints for all outputs are in your
     * VPC.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-vpc)
     * @param vpc Settings to enable VPC mode in the channel, so that the endpoints for all outputs
     * are in your VPC. 
     */
    public fun vpc(vpc: IResolvable)

    /**
     * Settings to enable VPC mode in the channel, so that the endpoints for all outputs are in your
     * VPC.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-vpc)
     * @param vpc Settings to enable VPC mode in the channel, so that the endpoints for all outputs
     * are in your VPC. 
     */
    public fun vpc(vpc: VpcOutputSettingsProperty)

    /**
     * Settings to enable VPC mode in the channel, so that the endpoints for all outputs are in your
     * VPC.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-vpc)
     * @param vpc Settings to enable VPC mode in the channel, so that the endpoints for all outputs
     * are in your VPC. 
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("91b7209b4e48950a8454d6c55ff29b62f8b84b5629568dc42e614dcf2ced1b47")
    public fun vpc(vpc: VpcOutputSettingsProperty.Builder.() -> Unit)
  }

  private class BuilderImpl(
    scope: SoftwareConstructsConstruct,
    id: String,
  ) : Builder {
    private val cdkBuilder: software.amazon.awscdk.services.medialive.CfnChannel.Builder =
        software.amazon.awscdk.services.medialive.CfnChannel.Builder.create(scope, id)

    /**
     * Specification of CDI inputs for this channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-cdiinputspecification)
     * @param cdiInputSpecification Specification of CDI inputs for this channel. 
     */
    override fun cdiInputSpecification(cdiInputSpecification: IResolvable) {
      cdkBuilder.cdiInputSpecification(cdiInputSpecification.let(IResolvable.Companion::unwrap))
    }

    /**
     * Specification of CDI inputs for this channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-cdiinputspecification)
     * @param cdiInputSpecification Specification of CDI inputs for this channel. 
     */
    override fun cdiInputSpecification(cdiInputSpecification: CdiInputSpecificationProperty) {
      cdkBuilder.cdiInputSpecification(cdiInputSpecification.let(CdiInputSpecificationProperty.Companion::unwrap))
    }

    /**
     * Specification of CDI inputs for this channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-cdiinputspecification)
     * @param cdiInputSpecification Specification of CDI inputs for this channel. 
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("aacee8ea7d493868931951676e6a7998b047d4dba5db835e263f5fe2dc77d6ce")
    override
        fun cdiInputSpecification(cdiInputSpecification: CdiInputSpecificationProperty.Builder.() -> Unit):
        Unit = cdiInputSpecification(CdiInputSpecificationProperty(cdiInputSpecification))

    /**
     * The class for this channel.
     *
     * For a channel with two pipelines, the class is STANDARD. For a channel with one pipeline, the
     * class is SINGLE_PIPELINE.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-channelclass)
     * @param channelClass The class for this channel. 
     */
    override fun channelClass(channelClass: String) {
      cdkBuilder.channelClass(channelClass)
    }

    /**
     * The settings that identify the destination for the outputs in this MediaLive output package.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-destinations)
     * @param destinations The settings that identify the destination for the outputs in this
     * MediaLive output package. 
     */
    override fun destinations(destinations: IResolvable) {
      cdkBuilder.destinations(destinations.let(IResolvable.Companion::unwrap))
    }

    /**
     * The settings that identify the destination for the outputs in this MediaLive output package.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-destinations)
     * @param destinations The settings that identify the destination for the outputs in this
     * MediaLive output package. 
     */
    override fun destinations(destinations: List) {
      cdkBuilder.destinations(destinations.map{CdkObjectWrappers.unwrap(it)})
    }

    /**
     * The settings that identify the destination for the outputs in this MediaLive output package.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-destinations)
     * @param destinations The settings that identify the destination for the outputs in this
     * MediaLive output package. 
     */
    override fun destinations(vararg destinations: Any): Unit = destinations(destinations.toList())

    /**
     * The encoding configuration for the output content.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-encodersettings)
     * @param encoderSettings The encoding configuration for the output content. 
     */
    override fun encoderSettings(encoderSettings: IResolvable) {
      cdkBuilder.encoderSettings(encoderSettings.let(IResolvable.Companion::unwrap))
    }

    /**
     * The encoding configuration for the output content.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-encodersettings)
     * @param encoderSettings The encoding configuration for the output content. 
     */
    override fun encoderSettings(encoderSettings: EncoderSettingsProperty) {
      cdkBuilder.encoderSettings(encoderSettings.let(EncoderSettingsProperty.Companion::unwrap))
    }

    /**
     * The encoding configuration for the output content.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-encodersettings)
     * @param encoderSettings The encoding configuration for the output content. 
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("a2314ed8c6250a2bf5498955db0ad5f303fc86059c73255fa29b50f7f96d35b9")
    override fun encoderSettings(encoderSettings: EncoderSettingsProperty.Builder.() -> Unit): Unit
        = encoderSettings(EncoderSettingsProperty(encoderSettings))

    /**
     * The list of input attachments for the channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-inputattachments)
     * @param inputAttachments The list of input attachments for the channel. 
     */
    override fun inputAttachments(inputAttachments: IResolvable) {
      cdkBuilder.inputAttachments(inputAttachments.let(IResolvable.Companion::unwrap))
    }

    /**
     * The list of input attachments for the channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-inputattachments)
     * @param inputAttachments The list of input attachments for the channel. 
     */
    override fun inputAttachments(inputAttachments: List) {
      cdkBuilder.inputAttachments(inputAttachments.map{CdkObjectWrappers.unwrap(it)})
    }

    /**
     * The list of input attachments for the channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-inputattachments)
     * @param inputAttachments The list of input attachments for the channel. 
     */
    override fun inputAttachments(vararg inputAttachments: Any): Unit =
        inputAttachments(inputAttachments.toList())

    /**
     * The input specification for this channel.
     *
     * It specifies the key characteristics of the inputs for this channel: the maximum bitrate, the
     * resolution, and the codec.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-inputspecification)
     * @param inputSpecification The input specification for this channel. 
     */
    override fun inputSpecification(inputSpecification: IResolvable) {
      cdkBuilder.inputSpecification(inputSpecification.let(IResolvable.Companion::unwrap))
    }

    /**
     * The input specification for this channel.
     *
     * It specifies the key characteristics of the inputs for this channel: the maximum bitrate, the
     * resolution, and the codec.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-inputspecification)
     * @param inputSpecification The input specification for this channel. 
     */
    override fun inputSpecification(inputSpecification: InputSpecificationProperty) {
      cdkBuilder.inputSpecification(inputSpecification.let(InputSpecificationProperty.Companion::unwrap))
    }

    /**
     * The input specification for this channel.
     *
     * It specifies the key characteristics of the inputs for this channel: the maximum bitrate, the
     * resolution, and the codec.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-inputspecification)
     * @param inputSpecification The input specification for this channel. 
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("2a09da5b93c8531e73bbabc998e2e89eced34c8bc3c128cced66fb015c0605e7")
    override
        fun inputSpecification(inputSpecification: InputSpecificationProperty.Builder.() -> Unit):
        Unit = inputSpecification(InputSpecificationProperty(inputSpecification))

    /**
     * The verbosity for logging activity for this channel.
     *
     * Charges for logging (which are generated through Amazon CloudWatch Logging) are higher for
     * higher verbosities.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-loglevel)
     * @param logLevel The verbosity for logging activity for this channel. 
     */
    override fun logLevel(logLevel: String) {
      cdkBuilder.logLevel(logLevel)
    }

    /**
     * Maintenance settings for this channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-maintenance)
     * @param maintenance Maintenance settings for this channel. 
     */
    override fun maintenance(maintenance: IResolvable) {
      cdkBuilder.maintenance(maintenance.let(IResolvable.Companion::unwrap))
    }

    /**
     * Maintenance settings for this channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-maintenance)
     * @param maintenance Maintenance settings for this channel. 
     */
    override fun maintenance(maintenance: MaintenanceCreateSettingsProperty) {
      cdkBuilder.maintenance(maintenance.let(MaintenanceCreateSettingsProperty.Companion::unwrap))
    }

    /**
     * Maintenance settings for this channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-maintenance)
     * @param maintenance Maintenance settings for this channel. 
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("45e659608119eb682e4d6abbf1c66ff8f58f4fa7f39e5d6c1f9971d6b0504f15")
    override fun maintenance(maintenance: MaintenanceCreateSettingsProperty.Builder.() -> Unit):
        Unit = maintenance(MaintenanceCreateSettingsProperty(maintenance))

    /**
     * A name for this audio selector.
     *
     * The AudioDescription (in an output) references this name in order to identify a specific
     * input audio to include in that output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-name)
     * @param name A name for this audio selector. 
     */
    override fun name(name: String) {
      cdkBuilder.name(name)
    }

    /**
     * The IAM role for MediaLive to assume when running this channel.
     *
     * The role is identified by its ARN.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-rolearn)
     * @param roleArn The IAM role for MediaLive to assume when running this channel. 
     */
    override fun roleArn(roleArn: String) {
      cdkBuilder.roleArn(roleArn)
    }

    /**
     * A collection of tags for this channel.
     *
     * Each tag is a key-value pair.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-tags)
     * @param tags A collection of tags for this channel. 
     */
    override fun tags(tags: Any) {
      cdkBuilder.tags(tags)
    }

    /**
     * Settings to enable VPC mode in the channel, so that the endpoints for all outputs are in your
     * VPC.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-vpc)
     * @param vpc Settings to enable VPC mode in the channel, so that the endpoints for all outputs
     * are in your VPC. 
     */
    override fun vpc(vpc: IResolvable) {
      cdkBuilder.vpc(vpc.let(IResolvable.Companion::unwrap))
    }

    /**
     * Settings to enable VPC mode in the channel, so that the endpoints for all outputs are in your
     * VPC.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-vpc)
     * @param vpc Settings to enable VPC mode in the channel, so that the endpoints for all outputs
     * are in your VPC. 
     */
    override fun vpc(vpc: VpcOutputSettingsProperty) {
      cdkBuilder.vpc(vpc.let(VpcOutputSettingsProperty.Companion::unwrap))
    }

    /**
     * Settings to enable VPC mode in the channel, so that the endpoints for all outputs are in your
     * VPC.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-vpc)
     * @param vpc Settings to enable VPC mode in the channel, so that the endpoints for all outputs
     * are in your VPC. 
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("91b7209b4e48950a8454d6c55ff29b62f8b84b5629568dc42e614dcf2ced1b47")
    override fun vpc(vpc: VpcOutputSettingsProperty.Builder.() -> Unit): Unit =
        vpc(VpcOutputSettingsProperty(vpc))

    public fun build(): software.amazon.awscdk.services.medialive.CfnChannel = cdkBuilder.build()
  }

  public companion object {
    public val CFN_RESOURCE_TYPE_NAME: String =
        software.amazon.awscdk.services.medialive.CfnChannel.CFN_RESOURCE_TYPE_NAME

    public operator fun invoke(
      scope: CloudshiftdevConstructsConstruct,
      id: String,
      block: Builder.() -> Unit = {},
    ): CfnChannel {
      val builderImpl = BuilderImpl(CloudshiftdevConstructsConstruct.unwrap(scope), id)
      return CfnChannel(builderImpl.apply(block).build())
    }

    internal fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel): CfnChannel =
        CfnChannel(cdkObject)

    internal fun unwrap(wrapped: CfnChannel): software.amazon.awscdk.services.medialive.CfnChannel =
        wrapped.cdkObject as software.amazon.awscdk.services.medialive.CfnChannel
  }

  /**
   * The settings for an AAC audio encode in the output.
   *
   * The parent of this entity is AudioCodecSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * AacSettingsProperty aacSettingsProperty = AacSettingsProperty.builder()
   * .bitrate(123)
   * .codingMode("codingMode")
   * .inputType("inputType")
   * .profile("profile")
   * .rateControlMode("rateControlMode")
   * .rawFormat("rawFormat")
   * .sampleRate(123)
   * .spec("spec")
   * .vbrQuality("vbrQuality")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html)
   */
  public interface AacSettingsProperty {
    /**
     * The average bitrate in bits/second.
     *
     * Valid values depend on the rate control mode and profile.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-bitrate)
     */
    public fun bitrate(): Number? = unwrap(this).getBitrate()

    /**
     * Mono, stereo, or 5.1 channel layout. Valid values depend on the rate control mode and
     * profile. The adReceiverMix setting receives a stereo description plus control track, and emits a
     * mono AAC encode of the description track, with control data emitted in the PES header as per
     * ETSI TS 101 154 Annex E.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-codingmode)
     */
    public fun codingMode(): String? = unwrap(this).getCodingMode()

    /**
     * Set to broadcasterMixedAd when the input contains pre-mixed main audio + AD (narration) as a
     * stereo pair.
     *
     * The Audio Type field (audioType) will be set to 3, which signals to downstream systems that
     * this stream contains broadcaster mixed AD. Note that the input received by the encoder must
     * contain pre-mixed audio; MediaLive does not perform the mixing. The values in audioTypeControl
     * and audioType (in AudioDescription) are ignored when set to broadcasterMixedAd. Leave this set
     * to normal when the input does not contain pre-mixed audio + AD.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-inputtype)
     */
    public fun inputType(): String? = unwrap(this).getInputType()

    /**
     * The AAC profile.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-profile)
     */
    public fun profile(): String? = unwrap(this).getProfile()

    /**
     * The rate control mode.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-ratecontrolmode)
     */
    public fun rateControlMode(): String? = unwrap(this).getRateControlMode()

    /**
     * Sets the LATM/LOAS AAC output for raw containers.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-rawformat)
     */
    public fun rawFormat(): String? = unwrap(this).getRawFormat()

    /**
     * The sample rate in Hz.
     *
     * Valid values depend on the rate control mode and profile.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-samplerate)
     */
    public fun sampleRate(): Number? = unwrap(this).getSampleRate()

    /**
     * Uses MPEG-2 AAC audio instead of MPEG-4 AAC audio for raw or MPEG-2 Transport Stream
     * containers.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-spec)
     */
    public fun spec(): String? = unwrap(this).getSpec()

    /**
     * The VBR quality level.
     *
     * This is used only if rateControlMode is VBR.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-vbrquality)
     */
    public fun vbrQuality(): String? = unwrap(this).getVbrQuality()

    /**
     * A builder for [AacSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param bitrate The average bitrate in bits/second.
       * Valid values depend on the rate control mode and profile.
       */
      public fun bitrate(bitrate: Number)

      /**
       * @param codingMode Mono, stereo, or 5.1 channel layout. Valid values depend on the rate
       * control mode and profile. The adReceiverMix setting receives a stereo description plus control
       * track, and emits a mono AAC encode of the description track, with control data emitted in the
       * PES header as per ETSI TS 101 154 Annex E.
       */
      public fun codingMode(codingMode: String)

      /**
       * @param inputType Set to broadcasterMixedAd when the input contains pre-mixed main audio +
       * AD (narration) as a stereo pair.
       * The Audio Type field (audioType) will be set to 3, which signals to downstream systems that
       * this stream contains broadcaster mixed AD. Note that the input received by the encoder must
       * contain pre-mixed audio; MediaLive does not perform the mixing. The values in audioTypeControl
       * and audioType (in AudioDescription) are ignored when set to broadcasterMixedAd. Leave this set
       * to normal when the input does not contain pre-mixed audio + AD.
       */
      public fun inputType(inputType: String)

      /**
       * @param profile The AAC profile.
       */
      public fun profile(profile: String)

      /**
       * @param rateControlMode The rate control mode.
       */
      public fun rateControlMode(rateControlMode: String)

      /**
       * @param rawFormat Sets the LATM/LOAS AAC output for raw containers.
       */
      public fun rawFormat(rawFormat: String)

      /**
       * @param sampleRate The sample rate in Hz.
       * Valid values depend on the rate control mode and profile.
       */
      public fun sampleRate(sampleRate: Number)

      /**
       * @param spec Uses MPEG-2 AAC audio instead of MPEG-4 AAC audio for raw or MPEG-2 Transport
       * Stream containers.
       */
      public fun spec(spec: String)

      /**
       * @param vbrQuality The VBR quality level.
       * This is used only if rateControlMode is VBR.
       */
      public fun vbrQuality(vbrQuality: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.AacSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.AacSettingsProperty.builder()

      /**
       * @param bitrate The average bitrate in bits/second.
       * Valid values depend on the rate control mode and profile.
       */
      override fun bitrate(bitrate: Number) {
        cdkBuilder.bitrate(bitrate)
      }

      /**
       * @param codingMode Mono, stereo, or 5.1 channel layout. Valid values depend on the rate
       * control mode and profile. The adReceiverMix setting receives a stereo description plus control
       * track, and emits a mono AAC encode of the description track, with control data emitted in the
       * PES header as per ETSI TS 101 154 Annex E.
       */
      override fun codingMode(codingMode: String) {
        cdkBuilder.codingMode(codingMode)
      }

      /**
       * @param inputType Set to broadcasterMixedAd when the input contains pre-mixed main audio +
       * AD (narration) as a stereo pair.
       * The Audio Type field (audioType) will be set to 3, which signals to downstream systems that
       * this stream contains broadcaster mixed AD. Note that the input received by the encoder must
       * contain pre-mixed audio; MediaLive does not perform the mixing. The values in audioTypeControl
       * and audioType (in AudioDescription) are ignored when set to broadcasterMixedAd. Leave this set
       * to normal when the input does not contain pre-mixed audio + AD.
       */
      override fun inputType(inputType: String) {
        cdkBuilder.inputType(inputType)
      }

      /**
       * @param profile The AAC profile.
       */
      override fun profile(profile: String) {
        cdkBuilder.profile(profile)
      }

      /**
       * @param rateControlMode The rate control mode.
       */
      override fun rateControlMode(rateControlMode: String) {
        cdkBuilder.rateControlMode(rateControlMode)
      }

      /**
       * @param rawFormat Sets the LATM/LOAS AAC output for raw containers.
       */
      override fun rawFormat(rawFormat: String) {
        cdkBuilder.rawFormat(rawFormat)
      }

      /**
       * @param sampleRate The sample rate in Hz.
       * Valid values depend on the rate control mode and profile.
       */
      override fun sampleRate(sampleRate: Number) {
        cdkBuilder.sampleRate(sampleRate)
      }

      /**
       * @param spec Uses MPEG-2 AAC audio instead of MPEG-4 AAC audio for raw or MPEG-2 Transport
       * Stream containers.
       */
      override fun spec(spec: String) {
        cdkBuilder.spec(spec)
      }

      /**
       * @param vbrQuality The VBR quality level.
       * This is used only if rateControlMode is VBR.
       */
      override fun vbrQuality(vbrQuality: String) {
        cdkBuilder.vbrQuality(vbrQuality)
      }

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.AacSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AacSettingsProperty,
    ) : CdkObject(cdkObject),
        AacSettingsProperty {
      /**
       * The average bitrate in bits/second.
       *
       * Valid values depend on the rate control mode and profile.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-bitrate)
       */
      override fun bitrate(): Number? = unwrap(this).getBitrate()

      /**
       * Mono, stereo, or 5.1 channel layout. Valid values depend on the rate control mode and
       * profile. The adReceiverMix setting receives a stereo description plus control track, and emits
       * a mono AAC encode of the description track, with control data emitted in the PES header as per
       * ETSI TS 101 154 Annex E.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-codingmode)
       */
      override fun codingMode(): String? = unwrap(this).getCodingMode()

      /**
       * Set to broadcasterMixedAd when the input contains pre-mixed main audio + AD (narration) as
       * a stereo pair.
       *
       * The Audio Type field (audioType) will be set to 3, which signals to downstream systems that
       * this stream contains broadcaster mixed AD. Note that the input received by the encoder must
       * contain pre-mixed audio; MediaLive does not perform the mixing. The values in audioTypeControl
       * and audioType (in AudioDescription) are ignored when set to broadcasterMixedAd. Leave this set
       * to normal when the input does not contain pre-mixed audio + AD.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-inputtype)
       */
      override fun inputType(): String? = unwrap(this).getInputType()

      /**
       * The AAC profile.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-profile)
       */
      override fun profile(): String? = unwrap(this).getProfile()

      /**
       * The rate control mode.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-ratecontrolmode)
       */
      override fun rateControlMode(): String? = unwrap(this).getRateControlMode()

      /**
       * Sets the LATM/LOAS AAC output for raw containers.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-rawformat)
       */
      override fun rawFormat(): String? = unwrap(this).getRawFormat()

      /**
       * The sample rate in Hz.
       *
       * Valid values depend on the rate control mode and profile.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-samplerate)
       */
      override fun sampleRate(): Number? = unwrap(this).getSampleRate()

      /**
       * Uses MPEG-2 AAC audio instead of MPEG-4 AAC audio for raw or MPEG-2 Transport Stream
       * containers.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-spec)
       */
      override fun spec(): String? = unwrap(this).getSpec()

      /**
       * The VBR quality level.
       *
       * This is used only if rateControlMode is VBR.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-vbrquality)
       */
      override fun vbrQuality(): String? = unwrap(this).getVbrQuality()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): AacSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AacSettingsProperty):
          AacSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? AacSettingsProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: AacSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.AacSettingsProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.AacSettingsProperty
    }
  }

  /**
   * The settings for an AC3 audio encode in the output.
   *
   * The parent of this entity is AudioCodecSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * Ac3SettingsProperty ac3SettingsProperty = Ac3SettingsProperty.builder()
   * .attenuationControl("attenuationControl")
   * .bitrate(123)
   * .bitstreamMode("bitstreamMode")
   * .codingMode("codingMode")
   * .dialnorm(123)
   * .drcProfile("drcProfile")
   * .lfeFilter("lfeFilter")
   * .metadataControl("metadataControl")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ac3settings.html)
   */
  public interface Ac3SettingsProperty {
    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ac3settings.html#cfn-medialive-channel-ac3settings-attenuationcontrol)
     */
    public fun attenuationControl(): String? = unwrap(this).getAttenuationControl()

    /**
     * The average bitrate in bits/second.
     *
     * Valid bitrates depend on the coding mode.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ac3settings.html#cfn-medialive-channel-ac3settings-bitrate)
     */
    public fun bitrate(): Number? = unwrap(this).getBitrate()

    /**
     * Specifies the bitstream mode (bsmod) for the emitted AC-3 stream.
     *
     * For more information about these values, see ATSC A/52-2012.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ac3settings.html#cfn-medialive-channel-ac3settings-bitstreammode)
     */
    public fun bitstreamMode(): String? = unwrap(this).getBitstreamMode()

    /**
     * The Dolby Digital coding mode.
     *
     * This determines the number of channels.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ac3settings.html#cfn-medialive-channel-ac3settings-codingmode)
     */
    public fun codingMode(): String? = unwrap(this).getCodingMode()

    /**
     * Sets the dialnorm for the output.
     *
     * If excluded and the input audio is Dolby Digital, dialnorm is passed through.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ac3settings.html#cfn-medialive-channel-ac3settings-dialnorm)
     */
    public fun dialnorm(): Number? = unwrap(this).getDialnorm()

    /**
     * If set to filmStandard, adds dynamic range compression signaling to the output bitstream as
     * defined in the Dolby Digital specification.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ac3settings.html#cfn-medialive-channel-ac3settings-drcprofile)
     */
    public fun drcProfile(): String? = unwrap(this).getDrcProfile()

    /**
     * When set to enabled, applies a 120Hz lowpass filter to the LFE channel prior to encoding.
     *
     * This is valid only in codingMode32Lfe mode.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ac3settings.html#cfn-medialive-channel-ac3settings-lfefilter)
     */
    public fun lfeFilter(): String? = unwrap(this).getLfeFilter()

    /**
     * When set to followInput, encoder metadata is sourced from the DD, DD+, or DolbyE decoder that
     * supplies this audio data.
     *
     * If the audio is supplied from one of these streams, the static metadata settings are used.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ac3settings.html#cfn-medialive-channel-ac3settings-metadatacontrol)
     */
    public fun metadataControl(): String? = unwrap(this).getMetadataControl()

    /**
     * A builder for [Ac3SettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param attenuationControl the value to be set.
       */
      public fun attenuationControl(attenuationControl: String)

      /**
       * @param bitrate The average bitrate in bits/second.
       * Valid bitrates depend on the coding mode.
       */
      public fun bitrate(bitrate: Number)

      /**
       * @param bitstreamMode Specifies the bitstream mode (bsmod) for the emitted AC-3 stream.
       * For more information about these values, see ATSC A/52-2012.
       */
      public fun bitstreamMode(bitstreamMode: String)

      /**
       * @param codingMode The Dolby Digital coding mode.
       * This determines the number of channels.
       */
      public fun codingMode(codingMode: String)

      /**
       * @param dialnorm Sets the dialnorm for the output.
       * If excluded and the input audio is Dolby Digital, dialnorm is passed through.
       */
      public fun dialnorm(dialnorm: Number)

      /**
       * @param drcProfile If set to filmStandard, adds dynamic range compression signaling to the
       * output bitstream as defined in the Dolby Digital specification.
       */
      public fun drcProfile(drcProfile: String)

      /**
       * @param lfeFilter When set to enabled, applies a 120Hz lowpass filter to the LFE channel
       * prior to encoding.
       * This is valid only in codingMode32Lfe mode.
       */
      public fun lfeFilter(lfeFilter: String)

      /**
       * @param metadataControl When set to followInput, encoder metadata is sourced from the DD,
       * DD+, or DolbyE decoder that supplies this audio data.
       * If the audio is supplied from one of these streams, the static metadata settings are used.
       */
      public fun metadataControl(metadataControl: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.Ac3SettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.Ac3SettingsProperty.builder()

      /**
       * @param attenuationControl the value to be set.
       */
      override fun attenuationControl(attenuationControl: String) {
        cdkBuilder.attenuationControl(attenuationControl)
      }

      /**
       * @param bitrate The average bitrate in bits/second.
       * Valid bitrates depend on the coding mode.
       */
      override fun bitrate(bitrate: Number) {
        cdkBuilder.bitrate(bitrate)
      }

      /**
       * @param bitstreamMode Specifies the bitstream mode (bsmod) for the emitted AC-3 stream.
       * For more information about these values, see ATSC A/52-2012.
       */
      override fun bitstreamMode(bitstreamMode: String) {
        cdkBuilder.bitstreamMode(bitstreamMode)
      }

      /**
       * @param codingMode The Dolby Digital coding mode.
       * This determines the number of channels.
       */
      override fun codingMode(codingMode: String) {
        cdkBuilder.codingMode(codingMode)
      }

      /**
       * @param dialnorm Sets the dialnorm for the output.
       * If excluded and the input audio is Dolby Digital, dialnorm is passed through.
       */
      override fun dialnorm(dialnorm: Number) {
        cdkBuilder.dialnorm(dialnorm)
      }

      /**
       * @param drcProfile If set to filmStandard, adds dynamic range compression signaling to the
       * output bitstream as defined in the Dolby Digital specification.
       */
      override fun drcProfile(drcProfile: String) {
        cdkBuilder.drcProfile(drcProfile)
      }

      /**
       * @param lfeFilter When set to enabled, applies a 120Hz lowpass filter to the LFE channel
       * prior to encoding.
       * This is valid only in codingMode32Lfe mode.
       */
      override fun lfeFilter(lfeFilter: String) {
        cdkBuilder.lfeFilter(lfeFilter)
      }

      /**
       * @param metadataControl When set to followInput, encoder metadata is sourced from the DD,
       * DD+, or DolbyE decoder that supplies this audio data.
       * If the audio is supplied from one of these streams, the static metadata settings are used.
       */
      override fun metadataControl(metadataControl: String) {
        cdkBuilder.metadataControl(metadataControl)
      }

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.Ac3SettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Ac3SettingsProperty,
    ) : CdkObject(cdkObject),
        Ac3SettingsProperty {
      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ac3settings.html#cfn-medialive-channel-ac3settings-attenuationcontrol)
       */
      override fun attenuationControl(): String? = unwrap(this).getAttenuationControl()

      /**
       * The average bitrate in bits/second.
       *
       * Valid bitrates depend on the coding mode.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ac3settings.html#cfn-medialive-channel-ac3settings-bitrate)
       */
      override fun bitrate(): Number? = unwrap(this).getBitrate()

      /**
       * Specifies the bitstream mode (bsmod) for the emitted AC-3 stream.
       *
       * For more information about these values, see ATSC A/52-2012.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ac3settings.html#cfn-medialive-channel-ac3settings-bitstreammode)
       */
      override fun bitstreamMode(): String? = unwrap(this).getBitstreamMode()

      /**
       * The Dolby Digital coding mode.
       *
       * This determines the number of channels.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ac3settings.html#cfn-medialive-channel-ac3settings-codingmode)
       */
      override fun codingMode(): String? = unwrap(this).getCodingMode()

      /**
       * Sets the dialnorm for the output.
       *
       * If excluded and the input audio is Dolby Digital, dialnorm is passed through.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ac3settings.html#cfn-medialive-channel-ac3settings-dialnorm)
       */
      override fun dialnorm(): Number? = unwrap(this).getDialnorm()

      /**
       * If set to filmStandard, adds dynamic range compression signaling to the output bitstream as
       * defined in the Dolby Digital specification.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ac3settings.html#cfn-medialive-channel-ac3settings-drcprofile)
       */
      override fun drcProfile(): String? = unwrap(this).getDrcProfile()

      /**
       * When set to enabled, applies a 120Hz lowpass filter to the LFE channel prior to encoding.
       *
       * This is valid only in codingMode32Lfe mode.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ac3settings.html#cfn-medialive-channel-ac3settings-lfefilter)
       */
      override fun lfeFilter(): String? = unwrap(this).getLfeFilter()

      /**
       * When set to followInput, encoder metadata is sourced from the DD, DD+, or DolbyE decoder
       * that supplies this audio data.
       *
       * If the audio is supplied from one of these streams, the static metadata settings are used.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ac3settings.html#cfn-medialive-channel-ac3settings-metadatacontrol)
       */
      override fun metadataControl(): String? = unwrap(this).getMetadataControl()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): Ac3SettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Ac3SettingsProperty):
          Ac3SettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? Ac3SettingsProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: Ac3SettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.Ac3SettingsProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.Ac3SettingsProperty
    }
  }

  /**
   * Information about the ancillary captions to extract from the input.
   *
   * The parent of this entity is CaptionSelectorSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * AncillarySourceSettingsProperty ancillarySourceSettingsProperty =
   * AncillarySourceSettingsProperty.builder()
   * .sourceAncillaryChannelNumber(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ancillarysourcesettings.html)
   */
  public interface AncillarySourceSettingsProperty {
    /**
     * Specifies the number (1 to 4) of the captions channel you want to extract from the ancillary
     * captions.
     *
     * If you plan to convert the ancillary captions to another format, complete this field. If you
     * plan to choose Embedded as the captions destination in the output (to pass through all the
     * channels in the ancillary captions), leave this field blank because MediaLive ignores the field.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ancillarysourcesettings.html#cfn-medialive-channel-ancillarysourcesettings-sourceancillarychannelnumber)
     */
    public fun sourceAncillaryChannelNumber(): Number? =
        unwrap(this).getSourceAncillaryChannelNumber()

    /**
     * A builder for [AncillarySourceSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param sourceAncillaryChannelNumber Specifies the number (1 to 4) of the captions channel
       * you want to extract from the ancillary captions.
       * If you plan to convert the ancillary captions to another format, complete this field. If
       * you plan to choose Embedded as the captions destination in the output (to pass through all the
       * channels in the ancillary captions), leave this field blank because MediaLive ignores the
       * field.
       */
      public fun sourceAncillaryChannelNumber(sourceAncillaryChannelNumber: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.AncillarySourceSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.AncillarySourceSettingsProperty.builder()

      /**
       * @param sourceAncillaryChannelNumber Specifies the number (1 to 4) of the captions channel
       * you want to extract from the ancillary captions.
       * If you plan to convert the ancillary captions to another format, complete this field. If
       * you plan to choose Embedded as the captions destination in the output (to pass through all the
       * channels in the ancillary captions), leave this field blank because MediaLive ignores the
       * field.
       */
      override fun sourceAncillaryChannelNumber(sourceAncillaryChannelNumber: Number) {
        cdkBuilder.sourceAncillaryChannelNumber(sourceAncillaryChannelNumber)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.AncillarySourceSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AncillarySourceSettingsProperty,
    ) : CdkObject(cdkObject),
        AncillarySourceSettingsProperty {
      /**
       * Specifies the number (1 to 4) of the captions channel you want to extract from the
       * ancillary captions.
       *
       * If you plan to convert the ancillary captions to another format, complete this field. If
       * you plan to choose Embedded as the captions destination in the output (to pass through all the
       * channels in the ancillary captions), leave this field blank because MediaLive ignores the
       * field.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ancillarysourcesettings.html#cfn-medialive-channel-ancillarysourcesettings-sourceancillarychannelnumber)
       */
      override fun sourceAncillaryChannelNumber(): Number? =
          unwrap(this).getSourceAncillaryChannelNumber()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): AncillarySourceSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AncillarySourceSettingsProperty):
          AncillarySourceSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          AncillarySourceSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: AncillarySourceSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.AncillarySourceSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.AncillarySourceSettingsProperty
    }
  }

  /**
   * Settings to configure the destination of an Archive output.
   *
   * The parent of this entity is ArchiveGroupSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * ArchiveCdnSettingsProperty archiveCdnSettingsProperty = ArchiveCdnSettingsProperty.builder()
   * .archiveS3Settings(ArchiveS3SettingsProperty.builder()
   * .cannedAcl("cannedAcl")
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivecdnsettings.html)
   */
  public interface ArchiveCdnSettingsProperty {
    /**
     * Sets up Amazon S3 as the destination for this Archive output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivecdnsettings.html#cfn-medialive-channel-archivecdnsettings-archives3settings)
     */
    public fun archiveS3Settings(): Any? = unwrap(this).getArchiveS3Settings()

    /**
     * A builder for [ArchiveCdnSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param archiveS3Settings Sets up Amazon S3 as the destination for this Archive output.
       */
      public fun archiveS3Settings(archiveS3Settings: IResolvable)

      /**
       * @param archiveS3Settings Sets up Amazon S3 as the destination for this Archive output.
       */
      public fun archiveS3Settings(archiveS3Settings: ArchiveS3SettingsProperty)

      /**
       * @param archiveS3Settings Sets up Amazon S3 as the destination for this Archive output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("250acecba5671297fd79bf23aef4d0a15a8a10ee8362caee84c0b96686eb4498")
      public fun archiveS3Settings(archiveS3Settings: ArchiveS3SettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.ArchiveCdnSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.ArchiveCdnSettingsProperty.builder()

      /**
       * @param archiveS3Settings Sets up Amazon S3 as the destination for this Archive output.
       */
      override fun archiveS3Settings(archiveS3Settings: IResolvable) {
        cdkBuilder.archiveS3Settings(archiveS3Settings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param archiveS3Settings Sets up Amazon S3 as the destination for this Archive output.
       */
      override fun archiveS3Settings(archiveS3Settings: ArchiveS3SettingsProperty) {
        cdkBuilder.archiveS3Settings(archiveS3Settings.let(ArchiveS3SettingsProperty.Companion::unwrap))
      }

      /**
       * @param archiveS3Settings Sets up Amazon S3 as the destination for this Archive output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("250acecba5671297fd79bf23aef4d0a15a8a10ee8362caee84c0b96686eb4498")
      override
          fun archiveS3Settings(archiveS3Settings: ArchiveS3SettingsProperty.Builder.() -> Unit):
          Unit = archiveS3Settings(ArchiveS3SettingsProperty(archiveS3Settings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.ArchiveCdnSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.ArchiveCdnSettingsProperty,
    ) : CdkObject(cdkObject),
        ArchiveCdnSettingsProperty {
      /**
       * Sets up Amazon S3 as the destination for this Archive output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivecdnsettings.html#cfn-medialive-channel-archivecdnsettings-archives3settings)
       */
      override fun archiveS3Settings(): Any? = unwrap(this).getArchiveS3Settings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): ArchiveCdnSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.ArchiveCdnSettingsProperty):
          ArchiveCdnSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          ArchiveCdnSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: ArchiveCdnSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.ArchiveCdnSettingsProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.ArchiveCdnSettingsProperty
    }
  }

  /**
   * The archive container settings.
   *
   * The parent of this entity is ArchiveOutputSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * ArchiveContainerSettingsProperty archiveContainerSettingsProperty =
   * ArchiveContainerSettingsProperty.builder()
   * .m2TsSettings(M2tsSettingsProperty.builder()
   * .absentInputAudioBehavior("absentInputAudioBehavior")
   * .arib("arib")
   * .aribCaptionsPid("aribCaptionsPid")
   * .aribCaptionsPidControl("aribCaptionsPidControl")
   * .audioBufferModel("audioBufferModel")
   * .audioFramesPerPes(123)
   * .audioPids("audioPids")
   * .audioStreamType("audioStreamType")
   * .bitrate(123)
   * .bufferModel("bufferModel")
   * .ccDescriptor("ccDescriptor")
   * .dvbNitSettings(DvbNitSettingsProperty.builder()
   * .networkId(123)
   * .networkName("networkName")
   * .repInterval(123)
   * .build())
   * .dvbSdtSettings(DvbSdtSettingsProperty.builder()
   * .outputSdt("outputSdt")
   * .repInterval(123)
   * .serviceName("serviceName")
   * .serviceProviderName("serviceProviderName")
   * .build())
   * .dvbSubPids("dvbSubPids")
   * .dvbTdtSettings(DvbTdtSettingsProperty.builder()
   * .repInterval(123)
   * .build())
   * .dvbTeletextPid("dvbTeletextPid")
   * .ebif("ebif")
   * .ebpAudioInterval("ebpAudioInterval")
   * .ebpLookaheadMs(123)
   * .ebpPlacement("ebpPlacement")
   * .ecmPid("ecmPid")
   * .esRateInPes("esRateInPes")
   * .etvPlatformPid("etvPlatformPid")
   * .etvSignalPid("etvSignalPid")
   * .fragmentTime(123)
   * .klv("klv")
   * .klvDataPids("klvDataPids")
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .nullPacketBitrate(123)
   * .patInterval(123)
   * .pcrControl("pcrControl")
   * .pcrPeriod(123)
   * .pcrPid("pcrPid")
   * .pmtInterval(123)
   * .pmtPid("pmtPid")
   * .programNum(123)
   * .rateMode("rateMode")
   * .scte27Pids("scte27Pids")
   * .scte35Control("scte35Control")
   * .scte35Pid("scte35Pid")
   * .scte35PrerollPullupMilliseconds(123)
   * .segmentationMarkers("segmentationMarkers")
   * .segmentationStyle("segmentationStyle")
   * .segmentationTime(123)
   * .timedMetadataBehavior("timedMetadataBehavior")
   * .timedMetadataPid("timedMetadataPid")
   * .transportStreamId(123)
   * .videoPid("videoPid")
   * .build())
   * .rawSettings(RawSettingsProperty.builder().build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivecontainersettings.html)
   */
  public interface ArchiveContainerSettingsProperty {
    /**
     * The settings for the M2TS in the archive output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivecontainersettings.html#cfn-medialive-channel-archivecontainersettings-m2tssettings)
     */
    public fun m2TsSettings(): Any? = unwrap(this).getM2TsSettings()

    /**
     * The settings for Raw archive output type.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivecontainersettings.html#cfn-medialive-channel-archivecontainersettings-rawsettings)
     */
    public fun rawSettings(): Any? = unwrap(this).getRawSettings()

    /**
     * A builder for [ArchiveContainerSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param m2TsSettings The settings for the M2TS in the archive output.
       */
      public fun m2TsSettings(m2TsSettings: IResolvable)

      /**
       * @param m2TsSettings The settings for the M2TS in the archive output.
       */
      public fun m2TsSettings(m2TsSettings: M2tsSettingsProperty)

      /**
       * @param m2TsSettings The settings for the M2TS in the archive output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("7093d6686b5ef527935fe685b74943267db4667834199c668465e8912aa1d4c8")
      public fun m2TsSettings(m2TsSettings: M2tsSettingsProperty.Builder.() -> Unit)

      /**
       * @param rawSettings The settings for Raw archive output type.
       */
      public fun rawSettings(rawSettings: IResolvable)

      /**
       * @param rawSettings The settings for Raw archive output type.
       */
      public fun rawSettings(rawSettings: RawSettingsProperty)

      /**
       * @param rawSettings The settings for Raw archive output type.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("41c1753d7e4b83a3e8537edf2c5e975c81df6f13161acd84c5118feb73038412")
      public fun rawSettings(rawSettings: RawSettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.ArchiveContainerSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.ArchiveContainerSettingsProperty.builder()

      /**
       * @param m2TsSettings The settings for the M2TS in the archive output.
       */
      override fun m2TsSettings(m2TsSettings: IResolvable) {
        cdkBuilder.m2TsSettings(m2TsSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param m2TsSettings The settings for the M2TS in the archive output.
       */
      override fun m2TsSettings(m2TsSettings: M2tsSettingsProperty) {
        cdkBuilder.m2TsSettings(m2TsSettings.let(M2tsSettingsProperty.Companion::unwrap))
      }

      /**
       * @param m2TsSettings The settings for the M2TS in the archive output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("7093d6686b5ef527935fe685b74943267db4667834199c668465e8912aa1d4c8")
      override fun m2TsSettings(m2TsSettings: M2tsSettingsProperty.Builder.() -> Unit): Unit =
          m2TsSettings(M2tsSettingsProperty(m2TsSettings))

      /**
       * @param rawSettings The settings for Raw archive output type.
       */
      override fun rawSettings(rawSettings: IResolvable) {
        cdkBuilder.rawSettings(rawSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param rawSettings The settings for Raw archive output type.
       */
      override fun rawSettings(rawSettings: RawSettingsProperty) {
        cdkBuilder.rawSettings(rawSettings.let(RawSettingsProperty.Companion::unwrap))
      }

      /**
       * @param rawSettings The settings for Raw archive output type.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("41c1753d7e4b83a3e8537edf2c5e975c81df6f13161acd84c5118feb73038412")
      override fun rawSettings(rawSettings: RawSettingsProperty.Builder.() -> Unit): Unit =
          rawSettings(RawSettingsProperty(rawSettings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.ArchiveContainerSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.ArchiveContainerSettingsProperty,
    ) : CdkObject(cdkObject),
        ArchiveContainerSettingsProperty {
      /**
       * The settings for the M2TS in the archive output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivecontainersettings.html#cfn-medialive-channel-archivecontainersettings-m2tssettings)
       */
      override fun m2TsSettings(): Any? = unwrap(this).getM2TsSettings()

      /**
       * The settings for Raw archive output type.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivecontainersettings.html#cfn-medialive-channel-archivecontainersettings-rawsettings)
       */
      override fun rawSettings(): Any? = unwrap(this).getRawSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): ArchiveContainerSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.ArchiveContainerSettingsProperty):
          ArchiveContainerSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          ArchiveContainerSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: ArchiveContainerSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.ArchiveContainerSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.ArchiveContainerSettingsProperty
    }
  }

  /**
   * The settings for an archive output group.
   *
   * The parent of this entity is OutputGroupSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * ArchiveGroupSettingsProperty archiveGroupSettingsProperty =
   * ArchiveGroupSettingsProperty.builder()
   * .archiveCdnSettings(ArchiveCdnSettingsProperty.builder()
   * .archiveS3Settings(ArchiveS3SettingsProperty.builder()
   * .cannedAcl("cannedAcl")
   * .build())
   * .build())
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .rolloverInterval(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivegroupsettings.html)
   */
  public interface ArchiveGroupSettingsProperty {
    /**
     * Settings to configure the destination of an Archive output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivegroupsettings.html#cfn-medialive-channel-archivegroupsettings-archivecdnsettings)
     */
    public fun archiveCdnSettings(): Any? = unwrap(this).getArchiveCdnSettings()

    /**
     * A directory and base file name where archive files should be written.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivegroupsettings.html#cfn-medialive-channel-archivegroupsettings-destination)
     */
    public fun destination(): Any? = unwrap(this).getDestination()

    /**
     * The number of seconds to write to an archive file before closing and starting a new one.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivegroupsettings.html#cfn-medialive-channel-archivegroupsettings-rolloverinterval)
     */
    public fun rolloverInterval(): Number? = unwrap(this).getRolloverInterval()

    /**
     * A builder for [ArchiveGroupSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param archiveCdnSettings Settings to configure the destination of an Archive output.
       */
      public fun archiveCdnSettings(archiveCdnSettings: IResolvable)

      /**
       * @param archiveCdnSettings Settings to configure the destination of an Archive output.
       */
      public fun archiveCdnSettings(archiveCdnSettings: ArchiveCdnSettingsProperty)

      /**
       * @param archiveCdnSettings Settings to configure the destination of an Archive output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("9b80cc730b6b2162a011a34d3dcad0860dd4100c68ca411a813152e32071dae0")
      public
          fun archiveCdnSettings(archiveCdnSettings: ArchiveCdnSettingsProperty.Builder.() -> Unit)

      /**
       * @param destination A directory and base file name where archive files should be written.
       */
      public fun destination(destination: IResolvable)

      /**
       * @param destination A directory and base file name where archive files should be written.
       */
      public fun destination(destination: OutputLocationRefProperty)

      /**
       * @param destination A directory and base file name where archive files should be written.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ebe47c70734a0f9cb9b1401503411b86635b867034c353504b63fc3e8c52c4bc")
      public fun destination(destination: OutputLocationRefProperty.Builder.() -> Unit)

      /**
       * @param rolloverInterval The number of seconds to write to an archive file before closing
       * and starting a new one.
       */
      public fun rolloverInterval(rolloverInterval: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.ArchiveGroupSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.ArchiveGroupSettingsProperty.builder()

      /**
       * @param archiveCdnSettings Settings to configure the destination of an Archive output.
       */
      override fun archiveCdnSettings(archiveCdnSettings: IResolvable) {
        cdkBuilder.archiveCdnSettings(archiveCdnSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param archiveCdnSettings Settings to configure the destination of an Archive output.
       */
      override fun archiveCdnSettings(archiveCdnSettings: ArchiveCdnSettingsProperty) {
        cdkBuilder.archiveCdnSettings(archiveCdnSettings.let(ArchiveCdnSettingsProperty.Companion::unwrap))
      }

      /**
       * @param archiveCdnSettings Settings to configure the destination of an Archive output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("9b80cc730b6b2162a011a34d3dcad0860dd4100c68ca411a813152e32071dae0")
      override
          fun archiveCdnSettings(archiveCdnSettings: ArchiveCdnSettingsProperty.Builder.() -> Unit):
          Unit = archiveCdnSettings(ArchiveCdnSettingsProperty(archiveCdnSettings))

      /**
       * @param destination A directory and base file name where archive files should be written.
       */
      override fun destination(destination: IResolvable) {
        cdkBuilder.destination(destination.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param destination A directory and base file name where archive files should be written.
       */
      override fun destination(destination: OutputLocationRefProperty) {
        cdkBuilder.destination(destination.let(OutputLocationRefProperty.Companion::unwrap))
      }

      /**
       * @param destination A directory and base file name where archive files should be written.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ebe47c70734a0f9cb9b1401503411b86635b867034c353504b63fc3e8c52c4bc")
      override fun destination(destination: OutputLocationRefProperty.Builder.() -> Unit): Unit =
          destination(OutputLocationRefProperty(destination))

      /**
       * @param rolloverInterval The number of seconds to write to an archive file before closing
       * and starting a new one.
       */
      override fun rolloverInterval(rolloverInterval: Number) {
        cdkBuilder.rolloverInterval(rolloverInterval)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.ArchiveGroupSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.ArchiveGroupSettingsProperty,
    ) : CdkObject(cdkObject),
        ArchiveGroupSettingsProperty {
      /**
       * Settings to configure the destination of an Archive output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivegroupsettings.html#cfn-medialive-channel-archivegroupsettings-archivecdnsettings)
       */
      override fun archiveCdnSettings(): Any? = unwrap(this).getArchiveCdnSettings()

      /**
       * A directory and base file name where archive files should be written.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivegroupsettings.html#cfn-medialive-channel-archivegroupsettings-destination)
       */
      override fun destination(): Any? = unwrap(this).getDestination()

      /**
       * The number of seconds to write to an archive file before closing and starting a new one.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivegroupsettings.html#cfn-medialive-channel-archivegroupsettings-rolloverinterval)
       */
      override fun rolloverInterval(): Number? = unwrap(this).getRolloverInterval()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): ArchiveGroupSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.ArchiveGroupSettingsProperty):
          ArchiveGroupSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          ArchiveGroupSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: ArchiveGroupSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.ArchiveGroupSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.ArchiveGroupSettingsProperty
    }
  }

  /**
   * The archive output settings.
   *
   * The parent of this entity is OutputSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * ArchiveOutputSettingsProperty archiveOutputSettingsProperty =
   * ArchiveOutputSettingsProperty.builder()
   * .containerSettings(ArchiveContainerSettingsProperty.builder()
   * .m2TsSettings(M2tsSettingsProperty.builder()
   * .absentInputAudioBehavior("absentInputAudioBehavior")
   * .arib("arib")
   * .aribCaptionsPid("aribCaptionsPid")
   * .aribCaptionsPidControl("aribCaptionsPidControl")
   * .audioBufferModel("audioBufferModel")
   * .audioFramesPerPes(123)
   * .audioPids("audioPids")
   * .audioStreamType("audioStreamType")
   * .bitrate(123)
   * .bufferModel("bufferModel")
   * .ccDescriptor("ccDescriptor")
   * .dvbNitSettings(DvbNitSettingsProperty.builder()
   * .networkId(123)
   * .networkName("networkName")
   * .repInterval(123)
   * .build())
   * .dvbSdtSettings(DvbSdtSettingsProperty.builder()
   * .outputSdt("outputSdt")
   * .repInterval(123)
   * .serviceName("serviceName")
   * .serviceProviderName("serviceProviderName")
   * .build())
   * .dvbSubPids("dvbSubPids")
   * .dvbTdtSettings(DvbTdtSettingsProperty.builder()
   * .repInterval(123)
   * .build())
   * .dvbTeletextPid("dvbTeletextPid")
   * .ebif("ebif")
   * .ebpAudioInterval("ebpAudioInterval")
   * .ebpLookaheadMs(123)
   * .ebpPlacement("ebpPlacement")
   * .ecmPid("ecmPid")
   * .esRateInPes("esRateInPes")
   * .etvPlatformPid("etvPlatformPid")
   * .etvSignalPid("etvSignalPid")
   * .fragmentTime(123)
   * .klv("klv")
   * .klvDataPids("klvDataPids")
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .nullPacketBitrate(123)
   * .patInterval(123)
   * .pcrControl("pcrControl")
   * .pcrPeriod(123)
   * .pcrPid("pcrPid")
   * .pmtInterval(123)
   * .pmtPid("pmtPid")
   * .programNum(123)
   * .rateMode("rateMode")
   * .scte27Pids("scte27Pids")
   * .scte35Control("scte35Control")
   * .scte35Pid("scte35Pid")
   * .scte35PrerollPullupMilliseconds(123)
   * .segmentationMarkers("segmentationMarkers")
   * .segmentationStyle("segmentationStyle")
   * .segmentationTime(123)
   * .timedMetadataBehavior("timedMetadataBehavior")
   * .timedMetadataPid("timedMetadataPid")
   * .transportStreamId(123)
   * .videoPid("videoPid")
   * .build())
   * .rawSettings(RawSettingsProperty.builder().build())
   * .build())
   * .extension("extension")
   * .nameModifier("nameModifier")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archiveoutputsettings.html)
   */
  public interface ArchiveOutputSettingsProperty {
    /**
     * The settings that are specific to the container type of the file.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archiveoutputsettings.html#cfn-medialive-channel-archiveoutputsettings-containersettings)
     */
    public fun containerSettings(): Any? = unwrap(this).getContainerSettings()

    /**
     * The output file extension.
     *
     * If excluded, this is auto-selected from the container type.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archiveoutputsettings.html#cfn-medialive-channel-archiveoutputsettings-extension)
     */
    public fun extension(): String? = unwrap(this).getExtension()

    /**
     * A string that is concatenated to the end of the destination file name.
     *
     * The string is required for multiple outputs of the same type.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archiveoutputsettings.html#cfn-medialive-channel-archiveoutputsettings-namemodifier)
     */
    public fun nameModifier(): String? = unwrap(this).getNameModifier()

    /**
     * A builder for [ArchiveOutputSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param containerSettings The settings that are specific to the container type of the file.
       */
      public fun containerSettings(containerSettings: IResolvable)

      /**
       * @param containerSettings The settings that are specific to the container type of the file.
       */
      public fun containerSettings(containerSettings: ArchiveContainerSettingsProperty)

      /**
       * @param containerSettings The settings that are specific to the container type of the file.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("4b10f91128a6e98b3cdbfdeb6678f677ef83dcf43bea00aa4f041ec7fd1df8f7")
      public
          fun containerSettings(containerSettings: ArchiveContainerSettingsProperty.Builder.() -> Unit)

      /**
       * @param extension The output file extension.
       * If excluded, this is auto-selected from the container type.
       */
      public fun extension(extension: String)

      /**
       * @param nameModifier A string that is concatenated to the end of the destination file name.
       * The string is required for multiple outputs of the same type.
       */
      public fun nameModifier(nameModifier: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.ArchiveOutputSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.ArchiveOutputSettingsProperty.builder()

      /**
       * @param containerSettings The settings that are specific to the container type of the file.
       */
      override fun containerSettings(containerSettings: IResolvable) {
        cdkBuilder.containerSettings(containerSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param containerSettings The settings that are specific to the container type of the file.
       */
      override fun containerSettings(containerSettings: ArchiveContainerSettingsProperty) {
        cdkBuilder.containerSettings(containerSettings.let(ArchiveContainerSettingsProperty.Companion::unwrap))
      }

      /**
       * @param containerSettings The settings that are specific to the container type of the file.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("4b10f91128a6e98b3cdbfdeb6678f677ef83dcf43bea00aa4f041ec7fd1df8f7")
      override
          fun containerSettings(containerSettings: ArchiveContainerSettingsProperty.Builder.() -> Unit):
          Unit = containerSettings(ArchiveContainerSettingsProperty(containerSettings))

      /**
       * @param extension The output file extension.
       * If excluded, this is auto-selected from the container type.
       */
      override fun extension(extension: String) {
        cdkBuilder.extension(extension)
      }

      /**
       * @param nameModifier A string that is concatenated to the end of the destination file name.
       * The string is required for multiple outputs of the same type.
       */
      override fun nameModifier(nameModifier: String) {
        cdkBuilder.nameModifier(nameModifier)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.ArchiveOutputSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.ArchiveOutputSettingsProperty,
    ) : CdkObject(cdkObject),
        ArchiveOutputSettingsProperty {
      /**
       * The settings that are specific to the container type of the file.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archiveoutputsettings.html#cfn-medialive-channel-archiveoutputsettings-containersettings)
       */
      override fun containerSettings(): Any? = unwrap(this).getContainerSettings()

      /**
       * The output file extension.
       *
       * If excluded, this is auto-selected from the container type.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archiveoutputsettings.html#cfn-medialive-channel-archiveoutputsettings-extension)
       */
      override fun extension(): String? = unwrap(this).getExtension()

      /**
       * A string that is concatenated to the end of the destination file name.
       *
       * The string is required for multiple outputs of the same type.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archiveoutputsettings.html#cfn-medialive-channel-archiveoutputsettings-namemodifier)
       */
      override fun nameModifier(): String? = unwrap(this).getNameModifier()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): ArchiveOutputSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.ArchiveOutputSettingsProperty):
          ArchiveOutputSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          ArchiveOutputSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: ArchiveOutputSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.ArchiveOutputSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.ArchiveOutputSettingsProperty
    }
  }

  /**
   * Sets up Amazon S3 as the destination for this Archive output.
   *
   * The parent of this entity is ArchiveCdnSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * ArchiveS3SettingsProperty archiveS3SettingsProperty = ArchiveS3SettingsProperty.builder()
   * .cannedAcl("cannedAcl")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archives3settings.html)
   */
  public interface ArchiveS3SettingsProperty {
    /**
     * Specify the canned ACL to apply to each S3 request.
     *
     * Defaults to none.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archives3settings.html#cfn-medialive-channel-archives3settings-cannedacl)
     */
    public fun cannedAcl(): String? = unwrap(this).getCannedAcl()

    /**
     * A builder for [ArchiveS3SettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param cannedAcl Specify the canned ACL to apply to each S3 request.
       * Defaults to none.
       */
      public fun cannedAcl(cannedAcl: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.ArchiveS3SettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.ArchiveS3SettingsProperty.builder()

      /**
       * @param cannedAcl Specify the canned ACL to apply to each S3 request.
       * Defaults to none.
       */
      override fun cannedAcl(cannedAcl: String) {
        cdkBuilder.cannedAcl(cannedAcl)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.ArchiveS3SettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.ArchiveS3SettingsProperty,
    ) : CdkObject(cdkObject),
        ArchiveS3SettingsProperty {
      /**
       * Specify the canned ACL to apply to each S3 request.
       *
       * Defaults to none.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archives3settings.html#cfn-medialive-channel-archives3settings-cannedacl)
       */
      override fun cannedAcl(): String? = unwrap(this).getCannedAcl()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): ArchiveS3SettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.ArchiveS3SettingsProperty):
          ArchiveS3SettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          ArchiveS3SettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: ArchiveS3SettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.ArchiveS3SettingsProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.ArchiveS3SettingsProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * AribDestinationSettingsProperty aribDestinationSettingsProperty =
   * AribDestinationSettingsProperty.builder().build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aribdestinationsettings.html)
   */
  public interface AribDestinationSettingsProperty {
    /**
     * A builder for [AribDestinationSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.AribDestinationSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.AribDestinationSettingsProperty.builder()

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.AribDestinationSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AribDestinationSettingsProperty,
    ) : CdkObject(cdkObject),
        AribDestinationSettingsProperty

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): AribDestinationSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AribDestinationSettingsProperty):
          AribDestinationSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          AribDestinationSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: AribDestinationSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.AribDestinationSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.AribDestinationSettingsProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * AribSourceSettingsProperty aribSourceSettingsProperty =
   * AribSourceSettingsProperty.builder().build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aribsourcesettings.html)
   */
  public interface AribSourceSettingsProperty {
    /**
     * A builder for [AribSourceSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.AribSourceSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.AribSourceSettingsProperty.builder()

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.AribSourceSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AribSourceSettingsProperty,
    ) : CdkObject(cdkObject),
        AribSourceSettingsProperty

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): AribSourceSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AribSourceSettingsProperty):
          AribSourceSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          AribSourceSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: AribSourceSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.AribSourceSettingsProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.AribSourceSettingsProperty
    }
  }

  /**
   * The settings for remixing audio.
   *
   * The parent of this entity is RemixSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * AudioChannelMappingProperty audioChannelMappingProperty = AudioChannelMappingProperty.builder()
   * .inputChannelLevels(List.of(InputChannelLevelProperty.builder()
   * .gain(123)
   * .inputChannel(123)
   * .build()))
   * .outputChannel(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiochannelmapping.html)
   */
  public interface AudioChannelMappingProperty {
    /**
     * The indices and gain values for each input channel that should be remixed into this output
     * channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiochannelmapping.html#cfn-medialive-channel-audiochannelmapping-inputchannellevels)
     */
    public fun inputChannelLevels(): Any? = unwrap(this).getInputChannelLevels()

    /**
     * The index of the output channel that is being produced.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiochannelmapping.html#cfn-medialive-channel-audiochannelmapping-outputchannel)
     */
    public fun outputChannel(): Number? = unwrap(this).getOutputChannel()

    /**
     * A builder for [AudioChannelMappingProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param inputChannelLevels The indices and gain values for each input channel that should be
       * remixed into this output channel.
       */
      public fun inputChannelLevels(inputChannelLevels: IResolvable)

      /**
       * @param inputChannelLevels The indices and gain values for each input channel that should be
       * remixed into this output channel.
       */
      public fun inputChannelLevels(inputChannelLevels: List)

      /**
       * @param inputChannelLevels The indices and gain values for each input channel that should be
       * remixed into this output channel.
       */
      public fun inputChannelLevels(vararg inputChannelLevels: Any)

      /**
       * @param outputChannel The index of the output channel that is being produced.
       */
      public fun outputChannel(outputChannel: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.AudioChannelMappingProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.AudioChannelMappingProperty.builder()

      /**
       * @param inputChannelLevels The indices and gain values for each input channel that should be
       * remixed into this output channel.
       */
      override fun inputChannelLevels(inputChannelLevels: IResolvable) {
        cdkBuilder.inputChannelLevels(inputChannelLevels.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param inputChannelLevels The indices and gain values for each input channel that should be
       * remixed into this output channel.
       */
      override fun inputChannelLevels(inputChannelLevels: List) {
        cdkBuilder.inputChannelLevels(inputChannelLevels.map{CdkObjectWrappers.unwrap(it)})
      }

      /**
       * @param inputChannelLevels The indices and gain values for each input channel that should be
       * remixed into this output channel.
       */
      override fun inputChannelLevels(vararg inputChannelLevels: Any): Unit =
          inputChannelLevels(inputChannelLevels.toList())

      /**
       * @param outputChannel The index of the output channel that is being produced.
       */
      override fun outputChannel(outputChannel: Number) {
        cdkBuilder.outputChannel(outputChannel)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.AudioChannelMappingProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioChannelMappingProperty,
    ) : CdkObject(cdkObject),
        AudioChannelMappingProperty {
      /**
       * The indices and gain values for each input channel that should be remixed into this output
       * channel.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiochannelmapping.html#cfn-medialive-channel-audiochannelmapping-inputchannellevels)
       */
      override fun inputChannelLevels(): Any? = unwrap(this).getInputChannelLevels()

      /**
       * The index of the output channel that is being produced.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiochannelmapping.html#cfn-medialive-channel-audiochannelmapping-outputchannel)
       */
      override fun outputChannel(): Number? = unwrap(this).getOutputChannel()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): AudioChannelMappingProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioChannelMappingProperty):
          AudioChannelMappingProperty = CdkObjectWrappers.wrap(cdkObject) as?
          AudioChannelMappingProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: AudioChannelMappingProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.AudioChannelMappingProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.AudioChannelMappingProperty
    }
  }

  /**
   * The configuration of the audio codec in the audio output.
   *
   * The parent of this entity is AudioDescription.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * AudioCodecSettingsProperty audioCodecSettingsProperty = AudioCodecSettingsProperty.builder()
   * .aacSettings(AacSettingsProperty.builder()
   * .bitrate(123)
   * .codingMode("codingMode")
   * .inputType("inputType")
   * .profile("profile")
   * .rateControlMode("rateControlMode")
   * .rawFormat("rawFormat")
   * .sampleRate(123)
   * .spec("spec")
   * .vbrQuality("vbrQuality")
   * .build())
   * .ac3Settings(Ac3SettingsProperty.builder()
   * .attenuationControl("attenuationControl")
   * .bitrate(123)
   * .bitstreamMode("bitstreamMode")
   * .codingMode("codingMode")
   * .dialnorm(123)
   * .drcProfile("drcProfile")
   * .lfeFilter("lfeFilter")
   * .metadataControl("metadataControl")
   * .build())
   * .eac3AtmosSettings(Eac3AtmosSettingsProperty.builder()
   * .bitrate(123)
   * .codingMode("codingMode")
   * .dialnorm(123)
   * .drcLine("drcLine")
   * .drcRf("drcRf")
   * .heightTrim(123)
   * .surroundTrim(123)
   * .build())
   * .eac3Settings(Eac3SettingsProperty.builder()
   * .attenuationControl("attenuationControl")
   * .bitrate(123)
   * .bitstreamMode("bitstreamMode")
   * .codingMode("codingMode")
   * .dcFilter("dcFilter")
   * .dialnorm(123)
   * .drcLine("drcLine")
   * .drcRf("drcRf")
   * .lfeControl("lfeControl")
   * .lfeFilter("lfeFilter")
   * .loRoCenterMixLevel(123)
   * .loRoSurroundMixLevel(123)
   * .ltRtCenterMixLevel(123)
   * .ltRtSurroundMixLevel(123)
   * .metadataControl("metadataControl")
   * .passthroughControl("passthroughControl")
   * .phaseControl("phaseControl")
   * .stereoDownmix("stereoDownmix")
   * .surroundExMode("surroundExMode")
   * .surroundMode("surroundMode")
   * .build())
   * .mp2Settings(Mp2SettingsProperty.builder()
   * .bitrate(123)
   * .codingMode("codingMode")
   * .sampleRate(123)
   * .build())
   * .passThroughSettings(PassThroughSettingsProperty.builder().build())
   * .wavSettings(WavSettingsProperty.builder()
   * .bitDepth(123)
   * .codingMode("codingMode")
   * .sampleRate(123)
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiocodecsettings.html)
   */
  public interface AudioCodecSettingsProperty {
    /**
     * The setup of the AAC audio codec in the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiocodecsettings.html#cfn-medialive-channel-audiocodecsettings-aacsettings)
     */
    public fun aacSettings(): Any? = unwrap(this).getAacSettings()

    /**
     * The setup of an AC3 audio codec in the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiocodecsettings.html#cfn-medialive-channel-audiocodecsettings-ac3settings)
     */
    public fun ac3Settings(): Any? = unwrap(this).getAc3Settings()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiocodecsettings.html#cfn-medialive-channel-audiocodecsettings-eac3atmossettings)
     */
    public fun eac3AtmosSettings(): Any? = unwrap(this).getEac3AtmosSettings()

    /**
     * The setup of an EAC3 audio codec in the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiocodecsettings.html#cfn-medialive-channel-audiocodecsettings-eac3settings)
     */
    public fun eac3Settings(): Any? = unwrap(this).getEac3Settings()

    /**
     * The setup of an MP2 audio codec in the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiocodecsettings.html#cfn-medialive-channel-audiocodecsettings-mp2settings)
     */
    public fun mp2Settings(): Any? = unwrap(this).getMp2Settings()

    /**
     * The setup to pass through the Dolby audio codec to the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiocodecsettings.html#cfn-medialive-channel-audiocodecsettings-passthroughsettings)
     */
    public fun passThroughSettings(): Any? = unwrap(this).getPassThroughSettings()

    /**
     * Settings for audio encoded with the WAV codec.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiocodecsettings.html#cfn-medialive-channel-audiocodecsettings-wavsettings)
     */
    public fun wavSettings(): Any? = unwrap(this).getWavSettings()

    /**
     * A builder for [AudioCodecSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param aacSettings The setup of the AAC audio codec in the output.
       */
      public fun aacSettings(aacSettings: IResolvable)

      /**
       * @param aacSettings The setup of the AAC audio codec in the output.
       */
      public fun aacSettings(aacSettings: AacSettingsProperty)

      /**
       * @param aacSettings The setup of the AAC audio codec in the output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("cb3d8bbb6c06e236e6292600ece96fb30e4abdcf719e39087e5840348da476c3")
      public fun aacSettings(aacSettings: AacSettingsProperty.Builder.() -> Unit)

      /**
       * @param ac3Settings The setup of an AC3 audio codec in the output.
       */
      public fun ac3Settings(ac3Settings: IResolvable)

      /**
       * @param ac3Settings The setup of an AC3 audio codec in the output.
       */
      public fun ac3Settings(ac3Settings: Ac3SettingsProperty)

      /**
       * @param ac3Settings The setup of an AC3 audio codec in the output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("3e9dec7e39639776b792de10f424b5e64c7a6b1497b3681c1b2a222e702d0bb3")
      public fun ac3Settings(ac3Settings: Ac3SettingsProperty.Builder.() -> Unit)

      /**
       * @param eac3AtmosSettings the value to be set.
       */
      public fun eac3AtmosSettings(eac3AtmosSettings: IResolvable)

      /**
       * @param eac3AtmosSettings the value to be set.
       */
      public fun eac3AtmosSettings(eac3AtmosSettings: Eac3AtmosSettingsProperty)

      /**
       * @param eac3AtmosSettings the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("46036ada089740fa53234723fce5bc8dab10fc5fd212d766a051f5084871af43")
      public fun eac3AtmosSettings(eac3AtmosSettings: Eac3AtmosSettingsProperty.Builder.() -> Unit)

      /**
       * @param eac3Settings The setup of an EAC3 audio codec in the output.
       */
      public fun eac3Settings(eac3Settings: IResolvable)

      /**
       * @param eac3Settings The setup of an EAC3 audio codec in the output.
       */
      public fun eac3Settings(eac3Settings: Eac3SettingsProperty)

      /**
       * @param eac3Settings The setup of an EAC3 audio codec in the output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("e079ab7c3c2717b053f8936d3b8c3a3d0a41c87cc849aedc8165761d9b9b168e")
      public fun eac3Settings(eac3Settings: Eac3SettingsProperty.Builder.() -> Unit)

      /**
       * @param mp2Settings The setup of an MP2 audio codec in the output.
       */
      public fun mp2Settings(mp2Settings: IResolvable)

      /**
       * @param mp2Settings The setup of an MP2 audio codec in the output.
       */
      public fun mp2Settings(mp2Settings: Mp2SettingsProperty)

      /**
       * @param mp2Settings The setup of an MP2 audio codec in the output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("8dd377a944c5b24bc2b89dbb05688227491c4bf7e380f5877e6d0013e968038f")
      public fun mp2Settings(mp2Settings: Mp2SettingsProperty.Builder.() -> Unit)

      /**
       * @param passThroughSettings The setup to pass through the Dolby audio codec to the output.
       */
      public fun passThroughSettings(passThroughSettings: IResolvable)

      /**
       * @param passThroughSettings The setup to pass through the Dolby audio codec to the output.
       */
      public fun passThroughSettings(passThroughSettings: PassThroughSettingsProperty)

      /**
       * @param passThroughSettings The setup to pass through the Dolby audio codec to the output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("c975aa5d5defefacdb94ae44d94fde35164b786bab0bd1de87d32cd1988113a5")
      public
          fun passThroughSettings(passThroughSettings: PassThroughSettingsProperty.Builder.() -> Unit)

      /**
       * @param wavSettings Settings for audio encoded with the WAV codec.
       */
      public fun wavSettings(wavSettings: IResolvable)

      /**
       * @param wavSettings Settings for audio encoded with the WAV codec.
       */
      public fun wavSettings(wavSettings: WavSettingsProperty)

      /**
       * @param wavSettings Settings for audio encoded with the WAV codec.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("17813353f8d0c733258c398a29a167358c5c1cc2f93bfda1583b8f0701c2c55d")
      public fun wavSettings(wavSettings: WavSettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.AudioCodecSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.AudioCodecSettingsProperty.builder()

      /**
       * @param aacSettings The setup of the AAC audio codec in the output.
       */
      override fun aacSettings(aacSettings: IResolvable) {
        cdkBuilder.aacSettings(aacSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param aacSettings The setup of the AAC audio codec in the output.
       */
      override fun aacSettings(aacSettings: AacSettingsProperty) {
        cdkBuilder.aacSettings(aacSettings.let(AacSettingsProperty.Companion::unwrap))
      }

      /**
       * @param aacSettings The setup of the AAC audio codec in the output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("cb3d8bbb6c06e236e6292600ece96fb30e4abdcf719e39087e5840348da476c3")
      override fun aacSettings(aacSettings: AacSettingsProperty.Builder.() -> Unit): Unit =
          aacSettings(AacSettingsProperty(aacSettings))

      /**
       * @param ac3Settings The setup of an AC3 audio codec in the output.
       */
      override fun ac3Settings(ac3Settings: IResolvable) {
        cdkBuilder.ac3Settings(ac3Settings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param ac3Settings The setup of an AC3 audio codec in the output.
       */
      override fun ac3Settings(ac3Settings: Ac3SettingsProperty) {
        cdkBuilder.ac3Settings(ac3Settings.let(Ac3SettingsProperty.Companion::unwrap))
      }

      /**
       * @param ac3Settings The setup of an AC3 audio codec in the output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("3e9dec7e39639776b792de10f424b5e64c7a6b1497b3681c1b2a222e702d0bb3")
      override fun ac3Settings(ac3Settings: Ac3SettingsProperty.Builder.() -> Unit): Unit =
          ac3Settings(Ac3SettingsProperty(ac3Settings))

      /**
       * @param eac3AtmosSettings the value to be set.
       */
      override fun eac3AtmosSettings(eac3AtmosSettings: IResolvable) {
        cdkBuilder.eac3AtmosSettings(eac3AtmosSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param eac3AtmosSettings the value to be set.
       */
      override fun eac3AtmosSettings(eac3AtmosSettings: Eac3AtmosSettingsProperty) {
        cdkBuilder.eac3AtmosSettings(eac3AtmosSettings.let(Eac3AtmosSettingsProperty.Companion::unwrap))
      }

      /**
       * @param eac3AtmosSettings the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("46036ada089740fa53234723fce5bc8dab10fc5fd212d766a051f5084871af43")
      override
          fun eac3AtmosSettings(eac3AtmosSettings: Eac3AtmosSettingsProperty.Builder.() -> Unit):
          Unit = eac3AtmosSettings(Eac3AtmosSettingsProperty(eac3AtmosSettings))

      /**
       * @param eac3Settings The setup of an EAC3 audio codec in the output.
       */
      override fun eac3Settings(eac3Settings: IResolvable) {
        cdkBuilder.eac3Settings(eac3Settings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param eac3Settings The setup of an EAC3 audio codec in the output.
       */
      override fun eac3Settings(eac3Settings: Eac3SettingsProperty) {
        cdkBuilder.eac3Settings(eac3Settings.let(Eac3SettingsProperty.Companion::unwrap))
      }

      /**
       * @param eac3Settings The setup of an EAC3 audio codec in the output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("e079ab7c3c2717b053f8936d3b8c3a3d0a41c87cc849aedc8165761d9b9b168e")
      override fun eac3Settings(eac3Settings: Eac3SettingsProperty.Builder.() -> Unit): Unit =
          eac3Settings(Eac3SettingsProperty(eac3Settings))

      /**
       * @param mp2Settings The setup of an MP2 audio codec in the output.
       */
      override fun mp2Settings(mp2Settings: IResolvable) {
        cdkBuilder.mp2Settings(mp2Settings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param mp2Settings The setup of an MP2 audio codec in the output.
       */
      override fun mp2Settings(mp2Settings: Mp2SettingsProperty) {
        cdkBuilder.mp2Settings(mp2Settings.let(Mp2SettingsProperty.Companion::unwrap))
      }

      /**
       * @param mp2Settings The setup of an MP2 audio codec in the output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("8dd377a944c5b24bc2b89dbb05688227491c4bf7e380f5877e6d0013e968038f")
      override fun mp2Settings(mp2Settings: Mp2SettingsProperty.Builder.() -> Unit): Unit =
          mp2Settings(Mp2SettingsProperty(mp2Settings))

      /**
       * @param passThroughSettings The setup to pass through the Dolby audio codec to the output.
       */
      override fun passThroughSettings(passThroughSettings: IResolvable) {
        cdkBuilder.passThroughSettings(passThroughSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param passThroughSettings The setup to pass through the Dolby audio codec to the output.
       */
      override fun passThroughSettings(passThroughSettings: PassThroughSettingsProperty) {
        cdkBuilder.passThroughSettings(passThroughSettings.let(PassThroughSettingsProperty.Companion::unwrap))
      }

      /**
       * @param passThroughSettings The setup to pass through the Dolby audio codec to the output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("c975aa5d5defefacdb94ae44d94fde35164b786bab0bd1de87d32cd1988113a5")
      override
          fun passThroughSettings(passThroughSettings: PassThroughSettingsProperty.Builder.() -> Unit):
          Unit = passThroughSettings(PassThroughSettingsProperty(passThroughSettings))

      /**
       * @param wavSettings Settings for audio encoded with the WAV codec.
       */
      override fun wavSettings(wavSettings: IResolvable) {
        cdkBuilder.wavSettings(wavSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param wavSettings Settings for audio encoded with the WAV codec.
       */
      override fun wavSettings(wavSettings: WavSettingsProperty) {
        cdkBuilder.wavSettings(wavSettings.let(WavSettingsProperty.Companion::unwrap))
      }

      /**
       * @param wavSettings Settings for audio encoded with the WAV codec.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("17813353f8d0c733258c398a29a167358c5c1cc2f93bfda1583b8f0701c2c55d")
      override fun wavSettings(wavSettings: WavSettingsProperty.Builder.() -> Unit): Unit =
          wavSettings(WavSettingsProperty(wavSettings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.AudioCodecSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioCodecSettingsProperty,
    ) : CdkObject(cdkObject),
        AudioCodecSettingsProperty {
      /**
       * The setup of the AAC audio codec in the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiocodecsettings.html#cfn-medialive-channel-audiocodecsettings-aacsettings)
       */
      override fun aacSettings(): Any? = unwrap(this).getAacSettings()

      /**
       * The setup of an AC3 audio codec in the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiocodecsettings.html#cfn-medialive-channel-audiocodecsettings-ac3settings)
       */
      override fun ac3Settings(): Any? = unwrap(this).getAc3Settings()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiocodecsettings.html#cfn-medialive-channel-audiocodecsettings-eac3atmossettings)
       */
      override fun eac3AtmosSettings(): Any? = unwrap(this).getEac3AtmosSettings()

      /**
       * The setup of an EAC3 audio codec in the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiocodecsettings.html#cfn-medialive-channel-audiocodecsettings-eac3settings)
       */
      override fun eac3Settings(): Any? = unwrap(this).getEac3Settings()

      /**
       * The setup of an MP2 audio codec in the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiocodecsettings.html#cfn-medialive-channel-audiocodecsettings-mp2settings)
       */
      override fun mp2Settings(): Any? = unwrap(this).getMp2Settings()

      /**
       * The setup to pass through the Dolby audio codec to the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiocodecsettings.html#cfn-medialive-channel-audiocodecsettings-passthroughsettings)
       */
      override fun passThroughSettings(): Any? = unwrap(this).getPassThroughSettings()

      /**
       * Settings for audio encoded with the WAV codec.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiocodecsettings.html#cfn-medialive-channel-audiocodecsettings-wavsettings)
       */
      override fun wavSettings(): Any? = unwrap(this).getWavSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): AudioCodecSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioCodecSettingsProperty):
          AudioCodecSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          AudioCodecSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: AudioCodecSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.AudioCodecSettingsProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.AudioCodecSettingsProperty
    }
  }

  /**
   * The encoding information for one output audio.
   *
   * The parent of this entity is EncoderSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * AudioDescriptionProperty audioDescriptionProperty = AudioDescriptionProperty.builder()
   * .audioDashRoles(List.of("audioDashRoles"))
   * .audioNormalizationSettings(AudioNormalizationSettingsProperty.builder()
   * .algorithm("algorithm")
   * .algorithmControl("algorithmControl")
   * .targetLkfs(123)
   * .build())
   * .audioSelectorName("audioSelectorName")
   * .audioType("audioType")
   * .audioTypeControl("audioTypeControl")
   * .audioWatermarkingSettings(AudioWatermarkSettingsProperty.builder()
   * .nielsenWatermarksSettings(NielsenWatermarksSettingsProperty.builder()
   * .nielsenCbetSettings(NielsenCBETProperty.builder()
   * .cbetCheckDigitString("cbetCheckDigitString")
   * .cbetStepaside("cbetStepaside")
   * .csid("csid")
   * .build())
   * .nielsenDistributionType("nielsenDistributionType")
   * .nielsenNaesIiNwSettings(NielsenNaesIiNwProperty.builder()
   * .checkDigitString("checkDigitString")
   * .sid(123)
   * .timezone("timezone")
   * .build())
   * .build())
   * .build())
   * .codecSettings(AudioCodecSettingsProperty.builder()
   * .aacSettings(AacSettingsProperty.builder()
   * .bitrate(123)
   * .codingMode("codingMode")
   * .inputType("inputType")
   * .profile("profile")
   * .rateControlMode("rateControlMode")
   * .rawFormat("rawFormat")
   * .sampleRate(123)
   * .spec("spec")
   * .vbrQuality("vbrQuality")
   * .build())
   * .ac3Settings(Ac3SettingsProperty.builder()
   * .attenuationControl("attenuationControl")
   * .bitrate(123)
   * .bitstreamMode("bitstreamMode")
   * .codingMode("codingMode")
   * .dialnorm(123)
   * .drcProfile("drcProfile")
   * .lfeFilter("lfeFilter")
   * .metadataControl("metadataControl")
   * .build())
   * .eac3AtmosSettings(Eac3AtmosSettingsProperty.builder()
   * .bitrate(123)
   * .codingMode("codingMode")
   * .dialnorm(123)
   * .drcLine("drcLine")
   * .drcRf("drcRf")
   * .heightTrim(123)
   * .surroundTrim(123)
   * .build())
   * .eac3Settings(Eac3SettingsProperty.builder()
   * .attenuationControl("attenuationControl")
   * .bitrate(123)
   * .bitstreamMode("bitstreamMode")
   * .codingMode("codingMode")
   * .dcFilter("dcFilter")
   * .dialnorm(123)
   * .drcLine("drcLine")
   * .drcRf("drcRf")
   * .lfeControl("lfeControl")
   * .lfeFilter("lfeFilter")
   * .loRoCenterMixLevel(123)
   * .loRoSurroundMixLevel(123)
   * .ltRtCenterMixLevel(123)
   * .ltRtSurroundMixLevel(123)
   * .metadataControl("metadataControl")
   * .passthroughControl("passthroughControl")
   * .phaseControl("phaseControl")
   * .stereoDownmix("stereoDownmix")
   * .surroundExMode("surroundExMode")
   * .surroundMode("surroundMode")
   * .build())
   * .mp2Settings(Mp2SettingsProperty.builder()
   * .bitrate(123)
   * .codingMode("codingMode")
   * .sampleRate(123)
   * .build())
   * .passThroughSettings(PassThroughSettingsProperty.builder().build())
   * .wavSettings(WavSettingsProperty.builder()
   * .bitDepth(123)
   * .codingMode("codingMode")
   * .sampleRate(123)
   * .build())
   * .build())
   * .dvbDashAccessibility("dvbDashAccessibility")
   * .languageCode("languageCode")
   * .languageCodeControl("languageCodeControl")
   * .name("name")
   * .remixSettings(RemixSettingsProperty.builder()
   * .channelMappings(List.of(AudioChannelMappingProperty.builder()
   * .inputChannelLevels(List.of(InputChannelLevelProperty.builder()
   * .gain(123)
   * .inputChannel(123)
   * .build()))
   * .outputChannel(123)
   * .build()))
   * .channelsIn(123)
   * .channelsOut(123)
   * .build())
   * .streamName("streamName")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html)
   */
  public interface AudioDescriptionProperty {
    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-audiodashroles)
     */
    public fun audioDashRoles(): List = unwrap(this).getAudioDashRoles() ?: emptyList()

    /**
     * The advanced audio normalization settings.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-audionormalizationsettings)
     */
    public fun audioNormalizationSettings(): Any? = unwrap(this).getAudioNormalizationSettings()

    /**
     * The name of the AudioSelector that is used as the source for this AudioDescription.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-audioselectorname)
     */
    public fun audioSelectorName(): String? = unwrap(this).getAudioSelectorName()

    /**
     * Applies only if audioTypeControl is useConfigured.
     *
     * The values for audioType are defined in ISO-IEC 13818-1.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-audiotype)
     */
    public fun audioType(): String? = unwrap(this).getAudioType()

    /**
     * Determines how audio type is determined.
     *
     * followInput: If the input contains an ISO 639 audioType, then that value is passed through to
     * the output. If the input contains no ISO 639 audioType, the value in Audio Type is included in
     * the output. useConfigured: The value in Audio Type is included in the output. Note that this
     * field and audioType are both ignored if inputType is broadcasterMixedAd.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-audiotypecontrol)
     */
    public fun audioTypeControl(): String? = unwrap(this).getAudioTypeControl()

    /**
     * Settings to configure one or more solutions that insert audio watermarks in the audio encode.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-audiowatermarkingsettings)
     */
    public fun audioWatermarkingSettings(): Any? = unwrap(this).getAudioWatermarkingSettings()

    /**
     * The audio codec settings.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-codecsettings)
     */
    public fun codecSettings(): Any? = unwrap(this).getCodecSettings()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-dvbdashaccessibility)
     */
    public fun dvbDashAccessibility(): String? = unwrap(this).getDvbDashAccessibility()

    /**
     * Indicates the language of the audio output track.
     *
     * Used only if languageControlMode is useConfigured, or there is no ISO 639 language code
     * specified in the input.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-languagecode)
     */
    public fun languageCode(): String? = unwrap(this).getLanguageCode()

    /**
     * Choosing followInput causes the ISO 639 language code of the output to follow the ISO 639
     * language code of the input.
     *
     * The languageCode setting is used when useConfigured is set, or when followInput is selected
     * but there is no ISO 639 language code specified by the input.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-languagecodecontrol)
     */
    public fun languageCodeControl(): String? = unwrap(this).getLanguageCodeControl()

    /**
     * The name of this AudioDescription.
     *
     * Outputs use this name to uniquely identify this AudioDescription. Description names should be
     * unique within this channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-name)
     */
    public fun name(): String? = unwrap(this).getName()

    /**
     * The settings that control how input audio channels are remixed into the output audio
     * channels.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-remixsettings)
     */
    public fun remixSettings(): Any? = unwrap(this).getRemixSettings()

    /**
     * Used for Microsoft Smooth and Apple HLS outputs.
     *
     * Indicates the name displayed by the player (for example, English or Director Commentary).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-streamname)
     */
    public fun streamName(): String? = unwrap(this).getStreamName()

    /**
     * A builder for [AudioDescriptionProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param audioDashRoles the value to be set.
       */
      public fun audioDashRoles(audioDashRoles: List)

      /**
       * @param audioDashRoles the value to be set.
       */
      public fun audioDashRoles(vararg audioDashRoles: String)

      /**
       * @param audioNormalizationSettings The advanced audio normalization settings.
       */
      public fun audioNormalizationSettings(audioNormalizationSettings: IResolvable)

      /**
       * @param audioNormalizationSettings The advanced audio normalization settings.
       */
      public
          fun audioNormalizationSettings(audioNormalizationSettings: AudioNormalizationSettingsProperty)

      /**
       * @param audioNormalizationSettings The advanced audio normalization settings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("216768d41e6e6d1f80bcb8f843aceb98dbc5aed86cc5134a7fc84ee122c996e6")
      public
          fun audioNormalizationSettings(audioNormalizationSettings: AudioNormalizationSettingsProperty.Builder.() -> Unit)

      /**
       * @param audioSelectorName The name of the AudioSelector that is used as the source for this
       * AudioDescription.
       */
      public fun audioSelectorName(audioSelectorName: String)

      /**
       * @param audioType Applies only if audioTypeControl is useConfigured.
       * The values for audioType are defined in ISO-IEC 13818-1.
       */
      public fun audioType(audioType: String)

      /**
       * @param audioTypeControl Determines how audio type is determined.
       * followInput: If the input contains an ISO 639 audioType, then that value is passed through
       * to the output. If the input contains no ISO 639 audioType, the value in Audio Type is included
       * in the output. useConfigured: The value in Audio Type is included in the output. Note that
       * this field and audioType are both ignored if inputType is broadcasterMixedAd.
       */
      public fun audioTypeControl(audioTypeControl: String)

      /**
       * @param audioWatermarkingSettings Settings to configure one or more solutions that insert
       * audio watermarks in the audio encode.
       */
      public fun audioWatermarkingSettings(audioWatermarkingSettings: IResolvable)

      /**
       * @param audioWatermarkingSettings Settings to configure one or more solutions that insert
       * audio watermarks in the audio encode.
       */
      public
          fun audioWatermarkingSettings(audioWatermarkingSettings: AudioWatermarkSettingsProperty)

      /**
       * @param audioWatermarkingSettings Settings to configure one or more solutions that insert
       * audio watermarks in the audio encode.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("1e08144084fc63acb6cff58ce1f9ef24cc9a57617e9be88455e6ec17729e6af3")
      public
          fun audioWatermarkingSettings(audioWatermarkingSettings: AudioWatermarkSettingsProperty.Builder.() -> Unit)

      /**
       * @param codecSettings The audio codec settings.
       */
      public fun codecSettings(codecSettings: IResolvable)

      /**
       * @param codecSettings The audio codec settings.
       */
      public fun codecSettings(codecSettings: AudioCodecSettingsProperty)

      /**
       * @param codecSettings The audio codec settings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("32c42506e665d5fcf25b8618524c3292f798a8472eb4f40265596a7a76145f57")
      public fun codecSettings(codecSettings: AudioCodecSettingsProperty.Builder.() -> Unit)

      /**
       * @param dvbDashAccessibility the value to be set.
       */
      public fun dvbDashAccessibility(dvbDashAccessibility: String)

      /**
       * @param languageCode Indicates the language of the audio output track.
       * Used only if languageControlMode is useConfigured, or there is no ISO 639 language code
       * specified in the input.
       */
      public fun languageCode(languageCode: String)

      /**
       * @param languageCodeControl Choosing followInput causes the ISO 639 language code of the
       * output to follow the ISO 639 language code of the input.
       * The languageCode setting is used when useConfigured is set, or when followInput is selected
       * but there is no ISO 639 language code specified by the input.
       */
      public fun languageCodeControl(languageCodeControl: String)

      /**
       * @param name The name of this AudioDescription.
       * Outputs use this name to uniquely identify this AudioDescription. Description names should
       * be unique within this channel.
       */
      public fun name(name: String)

      /**
       * @param remixSettings The settings that control how input audio channels are remixed into
       * the output audio channels.
       */
      public fun remixSettings(remixSettings: IResolvable)

      /**
       * @param remixSettings The settings that control how input audio channels are remixed into
       * the output audio channels.
       */
      public fun remixSettings(remixSettings: RemixSettingsProperty)

      /**
       * @param remixSettings The settings that control how input audio channels are remixed into
       * the output audio channels.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("297466270cb6d7f67c19dda437ee28668d92ca5958cbc52ba9ba212200abd6e3")
      public fun remixSettings(remixSettings: RemixSettingsProperty.Builder.() -> Unit)

      /**
       * @param streamName Used for Microsoft Smooth and Apple HLS outputs.
       * Indicates the name displayed by the player (for example, English or Director Commentary).
       */
      public fun streamName(streamName: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.AudioDescriptionProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.AudioDescriptionProperty.builder()

      /**
       * @param audioDashRoles the value to be set.
       */
      override fun audioDashRoles(audioDashRoles: List) {
        cdkBuilder.audioDashRoles(audioDashRoles)
      }

      /**
       * @param audioDashRoles the value to be set.
       */
      override fun audioDashRoles(vararg audioDashRoles: String): Unit =
          audioDashRoles(audioDashRoles.toList())

      /**
       * @param audioNormalizationSettings The advanced audio normalization settings.
       */
      override fun audioNormalizationSettings(audioNormalizationSettings: IResolvable) {
        cdkBuilder.audioNormalizationSettings(audioNormalizationSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param audioNormalizationSettings The advanced audio normalization settings.
       */
      override
          fun audioNormalizationSettings(audioNormalizationSettings: AudioNormalizationSettingsProperty) {
        cdkBuilder.audioNormalizationSettings(audioNormalizationSettings.let(AudioNormalizationSettingsProperty.Companion::unwrap))
      }

      /**
       * @param audioNormalizationSettings The advanced audio normalization settings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("216768d41e6e6d1f80bcb8f843aceb98dbc5aed86cc5134a7fc84ee122c996e6")
      override
          fun audioNormalizationSettings(audioNormalizationSettings: AudioNormalizationSettingsProperty.Builder.() -> Unit):
          Unit =
          audioNormalizationSettings(AudioNormalizationSettingsProperty(audioNormalizationSettings))

      /**
       * @param audioSelectorName The name of the AudioSelector that is used as the source for this
       * AudioDescription.
       */
      override fun audioSelectorName(audioSelectorName: String) {
        cdkBuilder.audioSelectorName(audioSelectorName)
      }

      /**
       * @param audioType Applies only if audioTypeControl is useConfigured.
       * The values for audioType are defined in ISO-IEC 13818-1.
       */
      override fun audioType(audioType: String) {
        cdkBuilder.audioType(audioType)
      }

      /**
       * @param audioTypeControl Determines how audio type is determined.
       * followInput: If the input contains an ISO 639 audioType, then that value is passed through
       * to the output. If the input contains no ISO 639 audioType, the value in Audio Type is included
       * in the output. useConfigured: The value in Audio Type is included in the output. Note that
       * this field and audioType are both ignored if inputType is broadcasterMixedAd.
       */
      override fun audioTypeControl(audioTypeControl: String) {
        cdkBuilder.audioTypeControl(audioTypeControl)
      }

      /**
       * @param audioWatermarkingSettings Settings to configure one or more solutions that insert
       * audio watermarks in the audio encode.
       */
      override fun audioWatermarkingSettings(audioWatermarkingSettings: IResolvable) {
        cdkBuilder.audioWatermarkingSettings(audioWatermarkingSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param audioWatermarkingSettings Settings to configure one or more solutions that insert
       * audio watermarks in the audio encode.
       */
      override
          fun audioWatermarkingSettings(audioWatermarkingSettings: AudioWatermarkSettingsProperty) {
        cdkBuilder.audioWatermarkingSettings(audioWatermarkingSettings.let(AudioWatermarkSettingsProperty.Companion::unwrap))
      }

      /**
       * @param audioWatermarkingSettings Settings to configure one or more solutions that insert
       * audio watermarks in the audio encode.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("1e08144084fc63acb6cff58ce1f9ef24cc9a57617e9be88455e6ec17729e6af3")
      override
          fun audioWatermarkingSettings(audioWatermarkingSettings: AudioWatermarkSettingsProperty.Builder.() -> Unit):
          Unit =
          audioWatermarkingSettings(AudioWatermarkSettingsProperty(audioWatermarkingSettings))

      /**
       * @param codecSettings The audio codec settings.
       */
      override fun codecSettings(codecSettings: IResolvable) {
        cdkBuilder.codecSettings(codecSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param codecSettings The audio codec settings.
       */
      override fun codecSettings(codecSettings: AudioCodecSettingsProperty) {
        cdkBuilder.codecSettings(codecSettings.let(AudioCodecSettingsProperty.Companion::unwrap))
      }

      /**
       * @param codecSettings The audio codec settings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("32c42506e665d5fcf25b8618524c3292f798a8472eb4f40265596a7a76145f57")
      override fun codecSettings(codecSettings: AudioCodecSettingsProperty.Builder.() -> Unit): Unit
          = codecSettings(AudioCodecSettingsProperty(codecSettings))

      /**
       * @param dvbDashAccessibility the value to be set.
       */
      override fun dvbDashAccessibility(dvbDashAccessibility: String) {
        cdkBuilder.dvbDashAccessibility(dvbDashAccessibility)
      }

      /**
       * @param languageCode Indicates the language of the audio output track.
       * Used only if languageControlMode is useConfigured, or there is no ISO 639 language code
       * specified in the input.
       */
      override fun languageCode(languageCode: String) {
        cdkBuilder.languageCode(languageCode)
      }

      /**
       * @param languageCodeControl Choosing followInput causes the ISO 639 language code of the
       * output to follow the ISO 639 language code of the input.
       * The languageCode setting is used when useConfigured is set, or when followInput is selected
       * but there is no ISO 639 language code specified by the input.
       */
      override fun languageCodeControl(languageCodeControl: String) {
        cdkBuilder.languageCodeControl(languageCodeControl)
      }

      /**
       * @param name The name of this AudioDescription.
       * Outputs use this name to uniquely identify this AudioDescription. Description names should
       * be unique within this channel.
       */
      override fun name(name: String) {
        cdkBuilder.name(name)
      }

      /**
       * @param remixSettings The settings that control how input audio channels are remixed into
       * the output audio channels.
       */
      override fun remixSettings(remixSettings: IResolvable) {
        cdkBuilder.remixSettings(remixSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param remixSettings The settings that control how input audio channels are remixed into
       * the output audio channels.
       */
      override fun remixSettings(remixSettings: RemixSettingsProperty) {
        cdkBuilder.remixSettings(remixSettings.let(RemixSettingsProperty.Companion::unwrap))
      }

      /**
       * @param remixSettings The settings that control how input audio channels are remixed into
       * the output audio channels.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("297466270cb6d7f67c19dda437ee28668d92ca5958cbc52ba9ba212200abd6e3")
      override fun remixSettings(remixSettings: RemixSettingsProperty.Builder.() -> Unit): Unit =
          remixSettings(RemixSettingsProperty(remixSettings))

      /**
       * @param streamName Used for Microsoft Smooth and Apple HLS outputs.
       * Indicates the name displayed by the player (for example, English or Director Commentary).
       */
      override fun streamName(streamName: String) {
        cdkBuilder.streamName(streamName)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.AudioDescriptionProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioDescriptionProperty,
    ) : CdkObject(cdkObject),
        AudioDescriptionProperty {
      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-audiodashroles)
       */
      override fun audioDashRoles(): List = unwrap(this).getAudioDashRoles() ?: emptyList()

      /**
       * The advanced audio normalization settings.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-audionormalizationsettings)
       */
      override fun audioNormalizationSettings(): Any? = unwrap(this).getAudioNormalizationSettings()

      /**
       * The name of the AudioSelector that is used as the source for this AudioDescription.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-audioselectorname)
       */
      override fun audioSelectorName(): String? = unwrap(this).getAudioSelectorName()

      /**
       * Applies only if audioTypeControl is useConfigured.
       *
       * The values for audioType are defined in ISO-IEC 13818-1.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-audiotype)
       */
      override fun audioType(): String? = unwrap(this).getAudioType()

      /**
       * Determines how audio type is determined.
       *
       * followInput: If the input contains an ISO 639 audioType, then that value is passed through
       * to the output. If the input contains no ISO 639 audioType, the value in Audio Type is included
       * in the output. useConfigured: The value in Audio Type is included in the output. Note that
       * this field and audioType are both ignored if inputType is broadcasterMixedAd.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-audiotypecontrol)
       */
      override fun audioTypeControl(): String? = unwrap(this).getAudioTypeControl()

      /**
       * Settings to configure one or more solutions that insert audio watermarks in the audio
       * encode.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-audiowatermarkingsettings)
       */
      override fun audioWatermarkingSettings(): Any? = unwrap(this).getAudioWatermarkingSettings()

      /**
       * The audio codec settings.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-codecsettings)
       */
      override fun codecSettings(): Any? = unwrap(this).getCodecSettings()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-dvbdashaccessibility)
       */
      override fun dvbDashAccessibility(): String? = unwrap(this).getDvbDashAccessibility()

      /**
       * Indicates the language of the audio output track.
       *
       * Used only if languageControlMode is useConfigured, or there is no ISO 639 language code
       * specified in the input.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-languagecode)
       */
      override fun languageCode(): String? = unwrap(this).getLanguageCode()

      /**
       * Choosing followInput causes the ISO 639 language code of the output to follow the ISO 639
       * language code of the input.
       *
       * The languageCode setting is used when useConfigured is set, or when followInput is selected
       * but there is no ISO 639 language code specified by the input.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-languagecodecontrol)
       */
      override fun languageCodeControl(): String? = unwrap(this).getLanguageCodeControl()

      /**
       * The name of this AudioDescription.
       *
       * Outputs use this name to uniquely identify this AudioDescription. Description names should
       * be unique within this channel.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-name)
       */
      override fun name(): String? = unwrap(this).getName()

      /**
       * The settings that control how input audio channels are remixed into the output audio
       * channels.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-remixsettings)
       */
      override fun remixSettings(): Any? = unwrap(this).getRemixSettings()

      /**
       * Used for Microsoft Smooth and Apple HLS outputs.
       *
       * Indicates the name displayed by the player (for example, English or Director Commentary).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-streamname)
       */
      override fun streamName(): String? = unwrap(this).getStreamName()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): AudioDescriptionProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioDescriptionProperty):
          AudioDescriptionProperty = CdkObjectWrappers.wrap(cdkObject) as? AudioDescriptionProperty
          ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: AudioDescriptionProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.AudioDescriptionProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.AudioDescriptionProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * AudioDolbyEDecodeProperty audioDolbyEDecodeProperty = AudioDolbyEDecodeProperty.builder()
   * .programSelection("programSelection")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodolbyedecode.html)
   */
  public interface AudioDolbyEDecodeProperty {
    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodolbyedecode.html#cfn-medialive-channel-audiodolbyedecode-programselection)
     */
    public fun programSelection(): String? = unwrap(this).getProgramSelection()

    /**
     * A builder for [AudioDolbyEDecodeProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param programSelection the value to be set.
       */
      public fun programSelection(programSelection: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.AudioDolbyEDecodeProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.AudioDolbyEDecodeProperty.builder()

      /**
       * @param programSelection the value to be set.
       */
      override fun programSelection(programSelection: String) {
        cdkBuilder.programSelection(programSelection)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.AudioDolbyEDecodeProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioDolbyEDecodeProperty,
    ) : CdkObject(cdkObject),
        AudioDolbyEDecodeProperty {
      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodolbyedecode.html#cfn-medialive-channel-audiodolbyedecode-programselection)
       */
      override fun programSelection(): String? = unwrap(this).getProgramSelection()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): AudioDolbyEDecodeProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioDolbyEDecodeProperty):
          AudioDolbyEDecodeProperty = CdkObjectWrappers.wrap(cdkObject) as?
          AudioDolbyEDecodeProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: AudioDolbyEDecodeProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.AudioDolbyEDecodeProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.AudioDolbyEDecodeProperty
    }
  }

  /**
   * Selector for HLS audio rendition.
   *
   * The parent of this entity is AudioSelectorSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * AudioHlsRenditionSelectionProperty audioHlsRenditionSelectionProperty =
   * AudioHlsRenditionSelectionProperty.builder()
   * .groupId("groupId")
   * .name("name")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiohlsrenditionselection.html)
   */
  public interface AudioHlsRenditionSelectionProperty {
    /**
     * Specifies the GROUP-ID in the #EXT-X-MEDIA tag of the target HLS audio rendition.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiohlsrenditionselection.html#cfn-medialive-channel-audiohlsrenditionselection-groupid)
     */
    public fun groupId(): String? = unwrap(this).getGroupId()

    /**
     * Specifies the NAME in the #EXT-X-MEDIA tag of the target HLS audio rendition.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiohlsrenditionselection.html#cfn-medialive-channel-audiohlsrenditionselection-name)
     */
    public fun name(): String? = unwrap(this).getName()

    /**
     * A builder for [AudioHlsRenditionSelectionProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param groupId Specifies the GROUP-ID in the #EXT-X-MEDIA tag of the target HLS audio
       * rendition.
       */
      public fun groupId(groupId: String)

      /**
       * @param name Specifies the NAME in the #EXT-X-MEDIA tag of the target HLS audio rendition.
       */
      public fun name(name: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.AudioHlsRenditionSelectionProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.AudioHlsRenditionSelectionProperty.builder()

      /**
       * @param groupId Specifies the GROUP-ID in the #EXT-X-MEDIA tag of the target HLS audio
       * rendition.
       */
      override fun groupId(groupId: String) {
        cdkBuilder.groupId(groupId)
      }

      /**
       * @param name Specifies the NAME in the #EXT-X-MEDIA tag of the target HLS audio rendition.
       */
      override fun name(name: String) {
        cdkBuilder.name(name)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.AudioHlsRenditionSelectionProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioHlsRenditionSelectionProperty,
    ) : CdkObject(cdkObject),
        AudioHlsRenditionSelectionProperty {
      /**
       * Specifies the GROUP-ID in the #EXT-X-MEDIA tag of the target HLS audio rendition.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiohlsrenditionselection.html#cfn-medialive-channel-audiohlsrenditionselection-groupid)
       */
      override fun groupId(): String? = unwrap(this).getGroupId()

      /**
       * Specifies the NAME in the #EXT-X-MEDIA tag of the target HLS audio rendition.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiohlsrenditionselection.html#cfn-medialive-channel-audiohlsrenditionselection-name)
       */
      override fun name(): String? = unwrap(this).getName()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          AudioHlsRenditionSelectionProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioHlsRenditionSelectionProperty):
          AudioHlsRenditionSelectionProperty = CdkObjectWrappers.wrap(cdkObject) as?
          AudioHlsRenditionSelectionProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: AudioHlsRenditionSelectionProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.AudioHlsRenditionSelectionProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.AudioHlsRenditionSelectionProperty
    }
  }

  /**
   * Information about the audio language to extract.
   *
   * The parent of this entity is AudioSelectorSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * AudioLanguageSelectionProperty audioLanguageSelectionProperty =
   * AudioLanguageSelectionProperty.builder()
   * .languageCode("languageCode")
   * .languageSelectionPolicy("languageSelectionPolicy")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiolanguageselection.html)
   */
  public interface AudioLanguageSelectionProperty {
    /**
     * Selects a specific three-letter language code from within an audio source.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiolanguageselection.html#cfn-medialive-channel-audiolanguageselection-languagecode)
     */
    public fun languageCode(): String? = unwrap(this).getLanguageCode()

    /**
     * When set to "strict," the transport stream demux strictly identifies audio streams by their
     * language descriptor.
     *
     * If a PMT update occurs such that an audio stream matching the initially selected language is
     * no longer present, then mute is encoded until the language returns. If set to "loose," then on a
     * PMT update the demux chooses another audio stream in the program with the same stream type if it
     * can't find one with the same language.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiolanguageselection.html#cfn-medialive-channel-audiolanguageselection-languageselectionpolicy)
     */
    public fun languageSelectionPolicy(): String? = unwrap(this).getLanguageSelectionPolicy()

    /**
     * A builder for [AudioLanguageSelectionProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param languageCode Selects a specific three-letter language code from within an audio
       * source.
       */
      public fun languageCode(languageCode: String)

      /**
       * @param languageSelectionPolicy When set to "strict," the transport stream demux strictly
       * identifies audio streams by their language descriptor.
       * If a PMT update occurs such that an audio stream matching the initially selected language
       * is no longer present, then mute is encoded until the language returns. If set to "loose," then
       * on a PMT update the demux chooses another audio stream in the program with the same stream
       * type if it can't find one with the same language.
       */
      public fun languageSelectionPolicy(languageSelectionPolicy: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.AudioLanguageSelectionProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.AudioLanguageSelectionProperty.builder()

      /**
       * @param languageCode Selects a specific three-letter language code from within an audio
       * source.
       */
      override fun languageCode(languageCode: String) {
        cdkBuilder.languageCode(languageCode)
      }

      /**
       * @param languageSelectionPolicy When set to "strict," the transport stream demux strictly
       * identifies audio streams by their language descriptor.
       * If a PMT update occurs such that an audio stream matching the initially selected language
       * is no longer present, then mute is encoded until the language returns. If set to "loose," then
       * on a PMT update the demux chooses another audio stream in the program with the same stream
       * type if it can't find one with the same language.
       */
      override fun languageSelectionPolicy(languageSelectionPolicy: String) {
        cdkBuilder.languageSelectionPolicy(languageSelectionPolicy)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.AudioLanguageSelectionProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioLanguageSelectionProperty,
    ) : CdkObject(cdkObject),
        AudioLanguageSelectionProperty {
      /**
       * Selects a specific three-letter language code from within an audio source.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiolanguageselection.html#cfn-medialive-channel-audiolanguageselection-languagecode)
       */
      override fun languageCode(): String? = unwrap(this).getLanguageCode()

      /**
       * When set to "strict," the transport stream demux strictly identifies audio streams by their
       * language descriptor.
       *
       * If a PMT update occurs such that an audio stream matching the initially selected language
       * is no longer present, then mute is encoded until the language returns. If set to "loose," then
       * on a PMT update the demux chooses another audio stream in the program with the same stream
       * type if it can't find one with the same language.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiolanguageselection.html#cfn-medialive-channel-audiolanguageselection-languageselectionpolicy)
       */
      override fun languageSelectionPolicy(): String? = unwrap(this).getLanguageSelectionPolicy()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): AudioLanguageSelectionProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioLanguageSelectionProperty):
          AudioLanguageSelectionProperty = CdkObjectWrappers.wrap(cdkObject) as?
          AudioLanguageSelectionProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: AudioLanguageSelectionProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.AudioLanguageSelectionProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.AudioLanguageSelectionProperty
    }
  }

  /**
   * The settings for normalizing video.
   *
   * The parent of this entity is AudioDescription.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * AudioNormalizationSettingsProperty audioNormalizationSettingsProperty =
   * AudioNormalizationSettingsProperty.builder()
   * .algorithm("algorithm")
   * .algorithmControl("algorithmControl")
   * .targetLkfs(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audionormalizationsettings.html)
   */
  public interface AudioNormalizationSettingsProperty {
    /**
     * The audio normalization algorithm to use.
     *
     * itu17701 conforms to the CALM Act specification. itu17702 conforms to the EBU R-128
     * specification.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audionormalizationsettings.html#cfn-medialive-channel-audionormalizationsettings-algorithm)
     */
    public fun algorithm(): String? = unwrap(this).getAlgorithm()

    /**
     * When set to correctAudio, the output audio is corrected using the chosen algorithm.
     *
     * If set to measureOnly, the audio is measured but not adjusted.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audionormalizationsettings.html#cfn-medialive-channel-audionormalizationsettings-algorithmcontrol)
     */
    public fun algorithmControl(): String? = unwrap(this).getAlgorithmControl()

    /**
     * The Target LKFS(loudness) to adjust volume to.
     *
     * If no value is entered, a default value is used according to the chosen algorithm. The CALM
     * Act (1770-1) recommends a target of -24 LKFS. The EBU R-128 specification (1770-2) recommends a
     * target of -23 LKFS.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audionormalizationsettings.html#cfn-medialive-channel-audionormalizationsettings-targetlkfs)
     */
    public fun targetLkfs(): Number? = unwrap(this).getTargetLkfs()

    /**
     * A builder for [AudioNormalizationSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param algorithm The audio normalization algorithm to use.
       * itu17701 conforms to the CALM Act specification. itu17702 conforms to the EBU R-128
       * specification.
       */
      public fun algorithm(algorithm: String)

      /**
       * @param algorithmControl When set to correctAudio, the output audio is corrected using the
       * chosen algorithm.
       * If set to measureOnly, the audio is measured but not adjusted.
       */
      public fun algorithmControl(algorithmControl: String)

      /**
       * @param targetLkfs The Target LKFS(loudness) to adjust volume to.
       * If no value is entered, a default value is used according to the chosen algorithm. The CALM
       * Act (1770-1) recommends a target of -24 LKFS. The EBU R-128 specification (1770-2) recommends
       * a target of -23 LKFS.
       */
      public fun targetLkfs(targetLkfs: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.AudioNormalizationSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.AudioNormalizationSettingsProperty.builder()

      /**
       * @param algorithm The audio normalization algorithm to use.
       * itu17701 conforms to the CALM Act specification. itu17702 conforms to the EBU R-128
       * specification.
       */
      override fun algorithm(algorithm: String) {
        cdkBuilder.algorithm(algorithm)
      }

      /**
       * @param algorithmControl When set to correctAudio, the output audio is corrected using the
       * chosen algorithm.
       * If set to measureOnly, the audio is measured but not adjusted.
       */
      override fun algorithmControl(algorithmControl: String) {
        cdkBuilder.algorithmControl(algorithmControl)
      }

      /**
       * @param targetLkfs The Target LKFS(loudness) to adjust volume to.
       * If no value is entered, a default value is used according to the chosen algorithm. The CALM
       * Act (1770-1) recommends a target of -24 LKFS. The EBU R-128 specification (1770-2) recommends
       * a target of -23 LKFS.
       */
      override fun targetLkfs(targetLkfs: Number) {
        cdkBuilder.targetLkfs(targetLkfs)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.AudioNormalizationSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioNormalizationSettingsProperty,
    ) : CdkObject(cdkObject),
        AudioNormalizationSettingsProperty {
      /**
       * The audio normalization algorithm to use.
       *
       * itu17701 conforms to the CALM Act specification. itu17702 conforms to the EBU R-128
       * specification.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audionormalizationsettings.html#cfn-medialive-channel-audionormalizationsettings-algorithm)
       */
      override fun algorithm(): String? = unwrap(this).getAlgorithm()

      /**
       * When set to correctAudio, the output audio is corrected using the chosen algorithm.
       *
       * If set to measureOnly, the audio is measured but not adjusted.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audionormalizationsettings.html#cfn-medialive-channel-audionormalizationsettings-algorithmcontrol)
       */
      override fun algorithmControl(): String? = unwrap(this).getAlgorithmControl()

      /**
       * The Target LKFS(loudness) to adjust volume to.
       *
       * If no value is entered, a default value is used according to the chosen algorithm. The CALM
       * Act (1770-1) recommends a target of -24 LKFS. The EBU R-128 specification (1770-2) recommends
       * a target of -23 LKFS.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audionormalizationsettings.html#cfn-medialive-channel-audionormalizationsettings-targetlkfs)
       */
      override fun targetLkfs(): Number? = unwrap(this).getTargetLkfs()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          AudioNormalizationSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioNormalizationSettingsProperty):
          AudioNormalizationSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          AudioNormalizationSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: AudioNormalizationSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.AudioNormalizationSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.AudioNormalizationSettingsProperty
    }
  }

  /**
   * The configuration of an audio-only HLS output.
   *
   * The parent of this entity is HlsSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * AudioOnlyHlsSettingsProperty audioOnlyHlsSettingsProperty =
   * AudioOnlyHlsSettingsProperty.builder()
   * .audioGroupId("audioGroupId")
   * .audioOnlyImage(InputLocationProperty.builder()
   * .passwordParam("passwordParam")
   * .uri("uri")
   * .username("username")
   * .build())
   * .audioTrackType("audioTrackType")
   * .segmentType("segmentType")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioonlyhlssettings.html)
   */
  public interface AudioOnlyHlsSettingsProperty {
    /**
     * Specifies the group that the audio rendition belongs to.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioonlyhlssettings.html#cfn-medialive-channel-audioonlyhlssettings-audiogroupid)
     */
    public fun audioGroupId(): String? = unwrap(this).getAudioGroupId()

    /**
     * Used with an audio-only stream.
     *
     * It must be a .jpg or .png file. If given, this image is used as the cover art for the
     * audio-only output. Ideally, it should be formatted for an iPhone screen for two reasons. The
     * iPhone does not resize the image; instead, it crops a centered image on the top/bottom and
     * left/right. Additionally, this image file gets saved bit-for-bit into every 10-second segment
     * file, so it increases bandwidth by {image file size} * {segment count} * {user count.}.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioonlyhlssettings.html#cfn-medialive-channel-audioonlyhlssettings-audioonlyimage)
     */
    public fun audioOnlyImage(): Any? = unwrap(this).getAudioOnlyImage()

    /**
     * Four types of audio-only tracks are supported: Audio-Only Variant Stream The client can play
     * back this audio-only stream instead of video in low-bandwidth scenarios.
     *
     * Represented as an EXT-X-STREAM-INF in the HLS manifest. Alternate Audio, Auto Select, Default
     * Alternate rendition that the client should try to play back by default. Represented as an
     * EXT-X-MEDIA in the HLS manifest with DEFAULT=YES, AUTOSELECT=YES Alternate Audio, Auto Select,
     * Not Default Alternate rendition that the client might try to play back by default. Represented
     * as an EXT-X-MEDIA in the HLS manifest with DEFAULT=NO, AUTOSELECT=YES Alternate Audio, not Auto
     * Select Alternate rendition that the client will not try to play back by default. Represented as
     * an EXT-X-MEDIA in the HLS manifest with DEFAULT=NO, AUTOSELECT=NO.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioonlyhlssettings.html#cfn-medialive-channel-audioonlyhlssettings-audiotracktype)
     */
    public fun audioTrackType(): String? = unwrap(this).getAudioTrackType()

    /**
     * Specifies the segment type.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioonlyhlssettings.html#cfn-medialive-channel-audioonlyhlssettings-segmenttype)
     */
    public fun segmentType(): String? = unwrap(this).getSegmentType()

    /**
     * A builder for [AudioOnlyHlsSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param audioGroupId Specifies the group that the audio rendition belongs to.
       */
      public fun audioGroupId(audioGroupId: String)

      /**
       * @param audioOnlyImage Used with an audio-only stream.
       * It must be a .jpg or .png file. If given, this image is used as the cover art for the
       * audio-only output. Ideally, it should be formatted for an iPhone screen for two reasons. The
       * iPhone does not resize the image; instead, it crops a centered image on the top/bottom and
       * left/right. Additionally, this image file gets saved bit-for-bit into every 10-second segment
       * file, so it increases bandwidth by {image file size} * {segment count} * {user count.}.
       */
      public fun audioOnlyImage(audioOnlyImage: IResolvable)

      /**
       * @param audioOnlyImage Used with an audio-only stream.
       * It must be a .jpg or .png file. If given, this image is used as the cover art for the
       * audio-only output. Ideally, it should be formatted for an iPhone screen for two reasons. The
       * iPhone does not resize the image; instead, it crops a centered image on the top/bottom and
       * left/right. Additionally, this image file gets saved bit-for-bit into every 10-second segment
       * file, so it increases bandwidth by {image file size} * {segment count} * {user count.}.
       */
      public fun audioOnlyImage(audioOnlyImage: InputLocationProperty)

      /**
       * @param audioOnlyImage Used with an audio-only stream.
       * It must be a .jpg or .png file. If given, this image is used as the cover art for the
       * audio-only output. Ideally, it should be formatted for an iPhone screen for two reasons. The
       * iPhone does not resize the image; instead, it crops a centered image on the top/bottom and
       * left/right. Additionally, this image file gets saved bit-for-bit into every 10-second segment
       * file, so it increases bandwidth by {image file size} * {segment count} * {user count.}.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("d0b904ecc0cd02d179624f5b7eda3212371cd969fd95cde2563b4f1e64da7ff8")
      public fun audioOnlyImage(audioOnlyImage: InputLocationProperty.Builder.() -> Unit)

      /**
       * @param audioTrackType Four types of audio-only tracks are supported: Audio-Only Variant
       * Stream The client can play back this audio-only stream instead of video in low-bandwidth
       * scenarios.
       * Represented as an EXT-X-STREAM-INF in the HLS manifest. Alternate Audio, Auto Select,
       * Default Alternate rendition that the client should try to play back by default. Represented as
       * an EXT-X-MEDIA in the HLS manifest with DEFAULT=YES, AUTOSELECT=YES Alternate Audio, Auto
       * Select, Not Default Alternate rendition that the client might try to play back by default.
       * Represented as an EXT-X-MEDIA in the HLS manifest with DEFAULT=NO, AUTOSELECT=YES Alternate
       * Audio, not Auto Select Alternate rendition that the client will not try to play back by
       * default. Represented as an EXT-X-MEDIA in the HLS manifest with DEFAULT=NO, AUTOSELECT=NO.
       */
      public fun audioTrackType(audioTrackType: String)

      /**
       * @param segmentType Specifies the segment type.
       */
      public fun segmentType(segmentType: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.AudioOnlyHlsSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.AudioOnlyHlsSettingsProperty.builder()

      /**
       * @param audioGroupId Specifies the group that the audio rendition belongs to.
       */
      override fun audioGroupId(audioGroupId: String) {
        cdkBuilder.audioGroupId(audioGroupId)
      }

      /**
       * @param audioOnlyImage Used with an audio-only stream.
       * It must be a .jpg or .png file. If given, this image is used as the cover art for the
       * audio-only output. Ideally, it should be formatted for an iPhone screen for two reasons. The
       * iPhone does not resize the image; instead, it crops a centered image on the top/bottom and
       * left/right. Additionally, this image file gets saved bit-for-bit into every 10-second segment
       * file, so it increases bandwidth by {image file size} * {segment count} * {user count.}.
       */
      override fun audioOnlyImage(audioOnlyImage: IResolvable) {
        cdkBuilder.audioOnlyImage(audioOnlyImage.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param audioOnlyImage Used with an audio-only stream.
       * It must be a .jpg or .png file. If given, this image is used as the cover art for the
       * audio-only output. Ideally, it should be formatted for an iPhone screen for two reasons. The
       * iPhone does not resize the image; instead, it crops a centered image on the top/bottom and
       * left/right. Additionally, this image file gets saved bit-for-bit into every 10-second segment
       * file, so it increases bandwidth by {image file size} * {segment count} * {user count.}.
       */
      override fun audioOnlyImage(audioOnlyImage: InputLocationProperty) {
        cdkBuilder.audioOnlyImage(audioOnlyImage.let(InputLocationProperty.Companion::unwrap))
      }

      /**
       * @param audioOnlyImage Used with an audio-only stream.
       * It must be a .jpg or .png file. If given, this image is used as the cover art for the
       * audio-only output. Ideally, it should be formatted for an iPhone screen for two reasons. The
       * iPhone does not resize the image; instead, it crops a centered image on the top/bottom and
       * left/right. Additionally, this image file gets saved bit-for-bit into every 10-second segment
       * file, so it increases bandwidth by {image file size} * {segment count} * {user count.}.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("d0b904ecc0cd02d179624f5b7eda3212371cd969fd95cde2563b4f1e64da7ff8")
      override fun audioOnlyImage(audioOnlyImage: InputLocationProperty.Builder.() -> Unit): Unit =
          audioOnlyImage(InputLocationProperty(audioOnlyImage))

      /**
       * @param audioTrackType Four types of audio-only tracks are supported: Audio-Only Variant
       * Stream The client can play back this audio-only stream instead of video in low-bandwidth
       * scenarios.
       * Represented as an EXT-X-STREAM-INF in the HLS manifest. Alternate Audio, Auto Select,
       * Default Alternate rendition that the client should try to play back by default. Represented as
       * an EXT-X-MEDIA in the HLS manifest with DEFAULT=YES, AUTOSELECT=YES Alternate Audio, Auto
       * Select, Not Default Alternate rendition that the client might try to play back by default.
       * Represented as an EXT-X-MEDIA in the HLS manifest with DEFAULT=NO, AUTOSELECT=YES Alternate
       * Audio, not Auto Select Alternate rendition that the client will not try to play back by
       * default. Represented as an EXT-X-MEDIA in the HLS manifest with DEFAULT=NO, AUTOSELECT=NO.
       */
      override fun audioTrackType(audioTrackType: String) {
        cdkBuilder.audioTrackType(audioTrackType)
      }

      /**
       * @param segmentType Specifies the segment type.
       */
      override fun segmentType(segmentType: String) {
        cdkBuilder.segmentType(segmentType)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.AudioOnlyHlsSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioOnlyHlsSettingsProperty,
    ) : CdkObject(cdkObject),
        AudioOnlyHlsSettingsProperty {
      /**
       * Specifies the group that the audio rendition belongs to.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioonlyhlssettings.html#cfn-medialive-channel-audioonlyhlssettings-audiogroupid)
       */
      override fun audioGroupId(): String? = unwrap(this).getAudioGroupId()

      /**
       * Used with an audio-only stream.
       *
       * It must be a .jpg or .png file. If given, this image is used as the cover art for the
       * audio-only output. Ideally, it should be formatted for an iPhone screen for two reasons. The
       * iPhone does not resize the image; instead, it crops a centered image on the top/bottom and
       * left/right. Additionally, this image file gets saved bit-for-bit into every 10-second segment
       * file, so it increases bandwidth by {image file size} * {segment count} * {user count.}.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioonlyhlssettings.html#cfn-medialive-channel-audioonlyhlssettings-audioonlyimage)
       */
      override fun audioOnlyImage(): Any? = unwrap(this).getAudioOnlyImage()

      /**
       * Four types of audio-only tracks are supported: Audio-Only Variant Stream The client can
       * play back this audio-only stream instead of video in low-bandwidth scenarios.
       *
       * Represented as an EXT-X-STREAM-INF in the HLS manifest. Alternate Audio, Auto Select,
       * Default Alternate rendition that the client should try to play back by default. Represented as
       * an EXT-X-MEDIA in the HLS manifest with DEFAULT=YES, AUTOSELECT=YES Alternate Audio, Auto
       * Select, Not Default Alternate rendition that the client might try to play back by default.
       * Represented as an EXT-X-MEDIA in the HLS manifest with DEFAULT=NO, AUTOSELECT=YES Alternate
       * Audio, not Auto Select Alternate rendition that the client will not try to play back by
       * default. Represented as an EXT-X-MEDIA in the HLS manifest with DEFAULT=NO, AUTOSELECT=NO.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioonlyhlssettings.html#cfn-medialive-channel-audioonlyhlssettings-audiotracktype)
       */
      override fun audioTrackType(): String? = unwrap(this).getAudioTrackType()

      /**
       * Specifies the segment type.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioonlyhlssettings.html#cfn-medialive-channel-audioonlyhlssettings-segmenttype)
       */
      override fun segmentType(): String? = unwrap(this).getSegmentType()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): AudioOnlyHlsSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioOnlyHlsSettingsProperty):
          AudioOnlyHlsSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          AudioOnlyHlsSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: AudioOnlyHlsSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.AudioOnlyHlsSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.AudioOnlyHlsSettingsProperty
    }
  }

  /**
   * Used to extract audio by The PID.
   *
   * The parent of this entity is AudioSelectorSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * AudioPidSelectionProperty audioPidSelectionProperty = AudioPidSelectionProperty.builder()
   * .pid(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiopidselection.html)
   */
  public interface AudioPidSelectionProperty {
    /**
     * Select the audio by this PID.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiopidselection.html#cfn-medialive-channel-audiopidselection-pid)
     */
    public fun pid(): Number? = unwrap(this).getPid()

    /**
     * A builder for [AudioPidSelectionProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param pid Select the audio by this PID.
       */
      public fun pid(pid: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.AudioPidSelectionProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.AudioPidSelectionProperty.builder()

      /**
       * @param pid Select the audio by this PID.
       */
      override fun pid(pid: Number) {
        cdkBuilder.pid(pid)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.AudioPidSelectionProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioPidSelectionProperty,
    ) : CdkObject(cdkObject),
        AudioPidSelectionProperty {
      /**
       * Select the audio by this PID.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiopidselection.html#cfn-medialive-channel-audiopidselection-pid)
       */
      override fun pid(): Number? = unwrap(this).getPid()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): AudioPidSelectionProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioPidSelectionProperty):
          AudioPidSelectionProperty = CdkObjectWrappers.wrap(cdkObject) as?
          AudioPidSelectionProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: AudioPidSelectionProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.AudioPidSelectionProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.AudioPidSelectionProperty
    }
  }

  /**
   * Information about one audio to extract from the input.
   *
   * The parent of this entity is InputSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * AudioSelectorProperty audioSelectorProperty = AudioSelectorProperty.builder()
   * .name("name")
   * .selectorSettings(AudioSelectorSettingsProperty.builder()
   * .audioHlsRenditionSelection(AudioHlsRenditionSelectionProperty.builder()
   * .groupId("groupId")
   * .name("name")
   * .build())
   * .audioLanguageSelection(AudioLanguageSelectionProperty.builder()
   * .languageCode("languageCode")
   * .languageSelectionPolicy("languageSelectionPolicy")
   * .build())
   * .audioPidSelection(AudioPidSelectionProperty.builder()
   * .pid(123)
   * .build())
   * .audioTrackSelection(AudioTrackSelectionProperty.builder()
   * .dolbyEDecode(AudioDolbyEDecodeProperty.builder()
   * .programSelection("programSelection")
   * .build())
   * .tracks(List.of(AudioTrackProperty.builder()
   * .track(123)
   * .build()))
   * .build())
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioselector.html)
   */
  public interface AudioSelectorProperty {
    /**
     * A name for this AudioSelector.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioselector.html#cfn-medialive-channel-audioselector-name)
     */
    public fun name(): String? = unwrap(this).getName()

    /**
     * Information about the specific audio to extract from the input.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioselector.html#cfn-medialive-channel-audioselector-selectorsettings)
     */
    public fun selectorSettings(): Any? = unwrap(this).getSelectorSettings()

    /**
     * A builder for [AudioSelectorProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param name A name for this AudioSelector.
       */
      public fun name(name: String)

      /**
       * @param selectorSettings Information about the specific audio to extract from the input.
       */
      public fun selectorSettings(selectorSettings: IResolvable)

      /**
       * @param selectorSettings Information about the specific audio to extract from the input.
       */
      public fun selectorSettings(selectorSettings: AudioSelectorSettingsProperty)

      /**
       * @param selectorSettings Information about the specific audio to extract from the input.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("b47d54560858067562f2574450a11cb064f5e35f13dac5550686750c80cbba97")
      public
          fun selectorSettings(selectorSettings: AudioSelectorSettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.AudioSelectorProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.AudioSelectorProperty.builder()

      /**
       * @param name A name for this AudioSelector.
       */
      override fun name(name: String) {
        cdkBuilder.name(name)
      }

      /**
       * @param selectorSettings Information about the specific audio to extract from the input.
       */
      override fun selectorSettings(selectorSettings: IResolvable) {
        cdkBuilder.selectorSettings(selectorSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param selectorSettings Information about the specific audio to extract from the input.
       */
      override fun selectorSettings(selectorSettings: AudioSelectorSettingsProperty) {
        cdkBuilder.selectorSettings(selectorSettings.let(AudioSelectorSettingsProperty.Companion::unwrap))
      }

      /**
       * @param selectorSettings Information about the specific audio to extract from the input.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("b47d54560858067562f2574450a11cb064f5e35f13dac5550686750c80cbba97")
      override
          fun selectorSettings(selectorSettings: AudioSelectorSettingsProperty.Builder.() -> Unit):
          Unit = selectorSettings(AudioSelectorSettingsProperty(selectorSettings))

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.AudioSelectorProperty
          = cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioSelectorProperty,
    ) : CdkObject(cdkObject),
        AudioSelectorProperty {
      /**
       * A name for this AudioSelector.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioselector.html#cfn-medialive-channel-audioselector-name)
       */
      override fun name(): String? = unwrap(this).getName()

      /**
       * Information about the specific audio to extract from the input.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioselector.html#cfn-medialive-channel-audioselector-selectorsettings)
       */
      override fun selectorSettings(): Any? = unwrap(this).getSelectorSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): AudioSelectorProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioSelectorProperty):
          AudioSelectorProperty = CdkObjectWrappers.wrap(cdkObject) as? AudioSelectorProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: AudioSelectorProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.AudioSelectorProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.AudioSelectorProperty
    }
  }

  /**
   * Information about the audio to extract from the input.
   *
   * The parent of this entity is AudioSelector.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * AudioSelectorSettingsProperty audioSelectorSettingsProperty =
   * AudioSelectorSettingsProperty.builder()
   * .audioHlsRenditionSelection(AudioHlsRenditionSelectionProperty.builder()
   * .groupId("groupId")
   * .name("name")
   * .build())
   * .audioLanguageSelection(AudioLanguageSelectionProperty.builder()
   * .languageCode("languageCode")
   * .languageSelectionPolicy("languageSelectionPolicy")
   * .build())
   * .audioPidSelection(AudioPidSelectionProperty.builder()
   * .pid(123)
   * .build())
   * .audioTrackSelection(AudioTrackSelectionProperty.builder()
   * .dolbyEDecode(AudioDolbyEDecodeProperty.builder()
   * .programSelection("programSelection")
   * .build())
   * .tracks(List.of(AudioTrackProperty.builder()
   * .track(123)
   * .build()))
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioselectorsettings.html)
   */
  public interface AudioSelectorSettingsProperty {
    /**
     * Selector for HLS audio rendition.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioselectorsettings.html#cfn-medialive-channel-audioselectorsettings-audiohlsrenditionselection)
     */
    public fun audioHlsRenditionSelection(): Any? = unwrap(this).getAudioHlsRenditionSelection()

    /**
     * The language code of the audio to select.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioselectorsettings.html#cfn-medialive-channel-audioselectorsettings-audiolanguageselection)
     */
    public fun audioLanguageSelection(): Any? = unwrap(this).getAudioLanguageSelection()

    /**
     * The PID of the audio to select.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioselectorsettings.html#cfn-medialive-channel-audioselectorsettings-audiopidselection)
     */
    public fun audioPidSelection(): Any? = unwrap(this).getAudioPidSelection()

    /**
     * Information about the audio track to extract.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioselectorsettings.html#cfn-medialive-channel-audioselectorsettings-audiotrackselection)
     */
    public fun audioTrackSelection(): Any? = unwrap(this).getAudioTrackSelection()

    /**
     * A builder for [AudioSelectorSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param audioHlsRenditionSelection Selector for HLS audio rendition.
       */
      public fun audioHlsRenditionSelection(audioHlsRenditionSelection: IResolvable)

      /**
       * @param audioHlsRenditionSelection Selector for HLS audio rendition.
       */
      public
          fun audioHlsRenditionSelection(audioHlsRenditionSelection: AudioHlsRenditionSelectionProperty)

      /**
       * @param audioHlsRenditionSelection Selector for HLS audio rendition.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("57f473f69aabcdb6115510d9522d392da088acd1a80699e2531c70834760e221")
      public
          fun audioHlsRenditionSelection(audioHlsRenditionSelection: AudioHlsRenditionSelectionProperty.Builder.() -> Unit)

      /**
       * @param audioLanguageSelection The language code of the audio to select.
       */
      public fun audioLanguageSelection(audioLanguageSelection: IResolvable)

      /**
       * @param audioLanguageSelection The language code of the audio to select.
       */
      public fun audioLanguageSelection(audioLanguageSelection: AudioLanguageSelectionProperty)

      /**
       * @param audioLanguageSelection The language code of the audio to select.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("365c1b38fd9d10caf08061a5220659122c6d8b8c949b627c9b1dc914540f8d12")
      public
          fun audioLanguageSelection(audioLanguageSelection: AudioLanguageSelectionProperty.Builder.() -> Unit)

      /**
       * @param audioPidSelection The PID of the audio to select.
       */
      public fun audioPidSelection(audioPidSelection: IResolvable)

      /**
       * @param audioPidSelection The PID of the audio to select.
       */
      public fun audioPidSelection(audioPidSelection: AudioPidSelectionProperty)

      /**
       * @param audioPidSelection The PID of the audio to select.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("4031aa8fdb005243ae93caca7816ed10aad1c82b3568da36acdeea067a639e45")
      public fun audioPidSelection(audioPidSelection: AudioPidSelectionProperty.Builder.() -> Unit)

      /**
       * @param audioTrackSelection Information about the audio track to extract.
       */
      public fun audioTrackSelection(audioTrackSelection: IResolvable)

      /**
       * @param audioTrackSelection Information about the audio track to extract.
       */
      public fun audioTrackSelection(audioTrackSelection: AudioTrackSelectionProperty)

      /**
       * @param audioTrackSelection Information about the audio track to extract.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("cec170abbe3c52964153da491e53bfeb7340d8de0822a228ba39dee4a09876f6")
      public
          fun audioTrackSelection(audioTrackSelection: AudioTrackSelectionProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.AudioSelectorSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.AudioSelectorSettingsProperty.builder()

      /**
       * @param audioHlsRenditionSelection Selector for HLS audio rendition.
       */
      override fun audioHlsRenditionSelection(audioHlsRenditionSelection: IResolvable) {
        cdkBuilder.audioHlsRenditionSelection(audioHlsRenditionSelection.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param audioHlsRenditionSelection Selector for HLS audio rendition.
       */
      override
          fun audioHlsRenditionSelection(audioHlsRenditionSelection: AudioHlsRenditionSelectionProperty) {
        cdkBuilder.audioHlsRenditionSelection(audioHlsRenditionSelection.let(AudioHlsRenditionSelectionProperty.Companion::unwrap))
      }

      /**
       * @param audioHlsRenditionSelection Selector for HLS audio rendition.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("57f473f69aabcdb6115510d9522d392da088acd1a80699e2531c70834760e221")
      override
          fun audioHlsRenditionSelection(audioHlsRenditionSelection: AudioHlsRenditionSelectionProperty.Builder.() -> Unit):
          Unit =
          audioHlsRenditionSelection(AudioHlsRenditionSelectionProperty(audioHlsRenditionSelection))

      /**
       * @param audioLanguageSelection The language code of the audio to select.
       */
      override fun audioLanguageSelection(audioLanguageSelection: IResolvable) {
        cdkBuilder.audioLanguageSelection(audioLanguageSelection.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param audioLanguageSelection The language code of the audio to select.
       */
      override fun audioLanguageSelection(audioLanguageSelection: AudioLanguageSelectionProperty) {
        cdkBuilder.audioLanguageSelection(audioLanguageSelection.let(AudioLanguageSelectionProperty.Companion::unwrap))
      }

      /**
       * @param audioLanguageSelection The language code of the audio to select.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("365c1b38fd9d10caf08061a5220659122c6d8b8c949b627c9b1dc914540f8d12")
      override
          fun audioLanguageSelection(audioLanguageSelection: AudioLanguageSelectionProperty.Builder.() -> Unit):
          Unit = audioLanguageSelection(AudioLanguageSelectionProperty(audioLanguageSelection))

      /**
       * @param audioPidSelection The PID of the audio to select.
       */
      override fun audioPidSelection(audioPidSelection: IResolvable) {
        cdkBuilder.audioPidSelection(audioPidSelection.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param audioPidSelection The PID of the audio to select.
       */
      override fun audioPidSelection(audioPidSelection: AudioPidSelectionProperty) {
        cdkBuilder.audioPidSelection(audioPidSelection.let(AudioPidSelectionProperty.Companion::unwrap))
      }

      /**
       * @param audioPidSelection The PID of the audio to select.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("4031aa8fdb005243ae93caca7816ed10aad1c82b3568da36acdeea067a639e45")
      override
          fun audioPidSelection(audioPidSelection: AudioPidSelectionProperty.Builder.() -> Unit):
          Unit = audioPidSelection(AudioPidSelectionProperty(audioPidSelection))

      /**
       * @param audioTrackSelection Information about the audio track to extract.
       */
      override fun audioTrackSelection(audioTrackSelection: IResolvable) {
        cdkBuilder.audioTrackSelection(audioTrackSelection.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param audioTrackSelection Information about the audio track to extract.
       */
      override fun audioTrackSelection(audioTrackSelection: AudioTrackSelectionProperty) {
        cdkBuilder.audioTrackSelection(audioTrackSelection.let(AudioTrackSelectionProperty.Companion::unwrap))
      }

      /**
       * @param audioTrackSelection Information about the audio track to extract.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("cec170abbe3c52964153da491e53bfeb7340d8de0822a228ba39dee4a09876f6")
      override
          fun audioTrackSelection(audioTrackSelection: AudioTrackSelectionProperty.Builder.() -> Unit):
          Unit = audioTrackSelection(AudioTrackSelectionProperty(audioTrackSelection))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.AudioSelectorSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioSelectorSettingsProperty,
    ) : CdkObject(cdkObject),
        AudioSelectorSettingsProperty {
      /**
       * Selector for HLS audio rendition.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioselectorsettings.html#cfn-medialive-channel-audioselectorsettings-audiohlsrenditionselection)
       */
      override fun audioHlsRenditionSelection(): Any? = unwrap(this).getAudioHlsRenditionSelection()

      /**
       * The language code of the audio to select.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioselectorsettings.html#cfn-medialive-channel-audioselectorsettings-audiolanguageselection)
       */
      override fun audioLanguageSelection(): Any? = unwrap(this).getAudioLanguageSelection()

      /**
       * The PID of the audio to select.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioselectorsettings.html#cfn-medialive-channel-audioselectorsettings-audiopidselection)
       */
      override fun audioPidSelection(): Any? = unwrap(this).getAudioPidSelection()

      /**
       * Information about the audio track to extract.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioselectorsettings.html#cfn-medialive-channel-audioselectorsettings-audiotrackselection)
       */
      override fun audioTrackSelection(): Any? = unwrap(this).getAudioTrackSelection()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): AudioSelectorSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioSelectorSettingsProperty):
          AudioSelectorSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          AudioSelectorSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: AudioSelectorSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.AudioSelectorSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.AudioSelectorSettingsProperty
    }
  }

  /**
   * MediaLive will perform a failover if audio is not detected in this input for the specified
   * period.
   *
   * The parent of this entity is FailoverConditionSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * AudioSilenceFailoverSettingsProperty audioSilenceFailoverSettingsProperty =
   * AudioSilenceFailoverSettingsProperty.builder()
   * .audioSelectorName("audioSelectorName")
   * .audioSilenceThresholdMsec(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiosilencefailoversettings.html)
   */
  public interface AudioSilenceFailoverSettingsProperty {
    /**
     * The name of the audio selector in the input that MediaLive should monitor to detect silence.
     *
     * Select your most important rendition. If you didn't create an audio selector in this input,
     * leave blank.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiosilencefailoversettings.html#cfn-medialive-channel-audiosilencefailoversettings-audioselectorname)
     */
    public fun audioSelectorName(): String? = unwrap(this).getAudioSelectorName()

    /**
     * The amount of time (in milliseconds) that the active input must be silent before automatic
     * input failover occurs.
     *
     * Silence is defined as audio loss or audio quieter than -50 dBFS.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiosilencefailoversettings.html#cfn-medialive-channel-audiosilencefailoversettings-audiosilencethresholdmsec)
     */
    public fun audioSilenceThresholdMsec(): Number? = unwrap(this).getAudioSilenceThresholdMsec()

    /**
     * A builder for [AudioSilenceFailoverSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param audioSelectorName The name of the audio selector in the input that MediaLive should
       * monitor to detect silence.
       * Select your most important rendition. If you didn't create an audio selector in this input,
       * leave blank.
       */
      public fun audioSelectorName(audioSelectorName: String)

      /**
       * @param audioSilenceThresholdMsec The amount of time (in milliseconds) that the active input
       * must be silent before automatic input failover occurs.
       * Silence is defined as audio loss or audio quieter than -50 dBFS.
       */
      public fun audioSilenceThresholdMsec(audioSilenceThresholdMsec: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.AudioSilenceFailoverSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.AudioSilenceFailoverSettingsProperty.builder()

      /**
       * @param audioSelectorName The name of the audio selector in the input that MediaLive should
       * monitor to detect silence.
       * Select your most important rendition. If you didn't create an audio selector in this input,
       * leave blank.
       */
      override fun audioSelectorName(audioSelectorName: String) {
        cdkBuilder.audioSelectorName(audioSelectorName)
      }

      /**
       * @param audioSilenceThresholdMsec The amount of time (in milliseconds) that the active input
       * must be silent before automatic input failover occurs.
       * Silence is defined as audio loss or audio quieter than -50 dBFS.
       */
      override fun audioSilenceThresholdMsec(audioSilenceThresholdMsec: Number) {
        cdkBuilder.audioSilenceThresholdMsec(audioSilenceThresholdMsec)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.AudioSilenceFailoverSettingsProperty
          = cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioSilenceFailoverSettingsProperty,
    ) : CdkObject(cdkObject),
        AudioSilenceFailoverSettingsProperty {
      /**
       * The name of the audio selector in the input that MediaLive should monitor to detect
       * silence.
       *
       * Select your most important rendition. If you didn't create an audio selector in this input,
       * leave blank.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiosilencefailoversettings.html#cfn-medialive-channel-audiosilencefailoversettings-audioselectorname)
       */
      override fun audioSelectorName(): String? = unwrap(this).getAudioSelectorName()

      /**
       * The amount of time (in milliseconds) that the active input must be silent before automatic
       * input failover occurs.
       *
       * Silence is defined as audio loss or audio quieter than -50 dBFS.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiosilencefailoversettings.html#cfn-medialive-channel-audiosilencefailoversettings-audiosilencethresholdmsec)
       */
      override fun audioSilenceThresholdMsec(): Number? =
          unwrap(this).getAudioSilenceThresholdMsec()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          AudioSilenceFailoverSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioSilenceFailoverSettingsProperty):
          AudioSilenceFailoverSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          AudioSilenceFailoverSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: AudioSilenceFailoverSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.AudioSilenceFailoverSettingsProperty
          = (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.AudioSilenceFailoverSettingsProperty
    }
  }

  /**
   * Information about one audio track to extract. You can select multiple tracks.
   *
   * The parent of this entity is AudioTrackSelection.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * AudioTrackProperty audioTrackProperty = AudioTrackProperty.builder()
   * .track(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiotrack.html)
   */
  public interface AudioTrackProperty {
    /**
     * 1-based integer value that maps to a specific audio track.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiotrack.html#cfn-medialive-channel-audiotrack-track)
     */
    public fun track(): Number? = unwrap(this).getTrack()

    /**
     * A builder for [AudioTrackProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param track 1-based integer value that maps to a specific audio track.
       */
      public fun track(track: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.AudioTrackProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.AudioTrackProperty.builder()

      /**
       * @param track 1-based integer value that maps to a specific audio track.
       */
      override fun track(track: Number) {
        cdkBuilder.track(track)
      }

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.AudioTrackProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioTrackProperty,
    ) : CdkObject(cdkObject),
        AudioTrackProperty {
      /**
       * 1-based integer value that maps to a specific audio track.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiotrack.html#cfn-medialive-channel-audiotrack-track)
       */
      override fun track(): Number? = unwrap(this).getTrack()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): AudioTrackProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioTrackProperty):
          AudioTrackProperty = CdkObjectWrappers.wrap(cdkObject) as? AudioTrackProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: AudioTrackProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.AudioTrackProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.AudioTrackProperty
    }
  }

  /**
   * Information about the audio track to extract.
   *
   * The parent of this entity is AudioSelectorSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * AudioTrackSelectionProperty audioTrackSelectionProperty = AudioTrackSelectionProperty.builder()
   * .dolbyEDecode(AudioDolbyEDecodeProperty.builder()
   * .programSelection("programSelection")
   * .build())
   * .tracks(List.of(AudioTrackProperty.builder()
   * .track(123)
   * .build()))
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiotrackselection.html)
   */
  public interface AudioTrackSelectionProperty {
    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiotrackselection.html#cfn-medialive-channel-audiotrackselection-dolbyedecode)
     */
    public fun dolbyEDecode(): Any? = unwrap(this).getDolbyEDecode()

    /**
     * Selects one or more unique audio tracks from within a source.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiotrackselection.html#cfn-medialive-channel-audiotrackselection-tracks)
     */
    public fun tracks(): Any? = unwrap(this).getTracks()

    /**
     * A builder for [AudioTrackSelectionProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param dolbyEDecode the value to be set.
       */
      public fun dolbyEDecode(dolbyEDecode: IResolvable)

      /**
       * @param dolbyEDecode the value to be set.
       */
      public fun dolbyEDecode(dolbyEDecode: AudioDolbyEDecodeProperty)

      /**
       * @param dolbyEDecode the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ae18f041583763468cb1efee730015c0485091c0148b2b88a351e1bc4623e002")
      public fun dolbyEDecode(dolbyEDecode: AudioDolbyEDecodeProperty.Builder.() -> Unit)

      /**
       * @param tracks Selects one or more unique audio tracks from within a source.
       */
      public fun tracks(tracks: IResolvable)

      /**
       * @param tracks Selects one or more unique audio tracks from within a source.
       */
      public fun tracks(tracks: List)

      /**
       * @param tracks Selects one or more unique audio tracks from within a source.
       */
      public fun tracks(vararg tracks: Any)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.AudioTrackSelectionProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.AudioTrackSelectionProperty.builder()

      /**
       * @param dolbyEDecode the value to be set.
       */
      override fun dolbyEDecode(dolbyEDecode: IResolvable) {
        cdkBuilder.dolbyEDecode(dolbyEDecode.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param dolbyEDecode the value to be set.
       */
      override fun dolbyEDecode(dolbyEDecode: AudioDolbyEDecodeProperty) {
        cdkBuilder.dolbyEDecode(dolbyEDecode.let(AudioDolbyEDecodeProperty.Companion::unwrap))
      }

      /**
       * @param dolbyEDecode the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ae18f041583763468cb1efee730015c0485091c0148b2b88a351e1bc4623e002")
      override fun dolbyEDecode(dolbyEDecode: AudioDolbyEDecodeProperty.Builder.() -> Unit): Unit =
          dolbyEDecode(AudioDolbyEDecodeProperty(dolbyEDecode))

      /**
       * @param tracks Selects one or more unique audio tracks from within a source.
       */
      override fun tracks(tracks: IResolvable) {
        cdkBuilder.tracks(tracks.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param tracks Selects one or more unique audio tracks from within a source.
       */
      override fun tracks(tracks: List) {
        cdkBuilder.tracks(tracks.map{CdkObjectWrappers.unwrap(it)})
      }

      /**
       * @param tracks Selects one or more unique audio tracks from within a source.
       */
      override fun tracks(vararg tracks: Any): Unit = tracks(tracks.toList())

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.AudioTrackSelectionProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioTrackSelectionProperty,
    ) : CdkObject(cdkObject),
        AudioTrackSelectionProperty {
      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiotrackselection.html#cfn-medialive-channel-audiotrackselection-dolbyedecode)
       */
      override fun dolbyEDecode(): Any? = unwrap(this).getDolbyEDecode()

      /**
       * Selects one or more unique audio tracks from within a source.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiotrackselection.html#cfn-medialive-channel-audiotrackselection-tracks)
       */
      override fun tracks(): Any? = unwrap(this).getTracks()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): AudioTrackSelectionProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioTrackSelectionProperty):
          AudioTrackSelectionProperty = CdkObjectWrappers.wrap(cdkObject) as?
          AudioTrackSelectionProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: AudioTrackSelectionProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.AudioTrackSelectionProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.AudioTrackSelectionProperty
    }
  }

  /**
   * Audio Watermark Settings.
   *
   * The parent of this entity is AudioDescription.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * AudioWatermarkSettingsProperty audioWatermarkSettingsProperty =
   * AudioWatermarkSettingsProperty.builder()
   * .nielsenWatermarksSettings(NielsenWatermarksSettingsProperty.builder()
   * .nielsenCbetSettings(NielsenCBETProperty.builder()
   * .cbetCheckDigitString("cbetCheckDigitString")
   * .cbetStepaside("cbetStepaside")
   * .csid("csid")
   * .build())
   * .nielsenDistributionType("nielsenDistributionType")
   * .nielsenNaesIiNwSettings(NielsenNaesIiNwProperty.builder()
   * .checkDigitString("checkDigitString")
   * .sid(123)
   * .timezone("timezone")
   * .build())
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiowatermarksettings.html)
   */
  public interface AudioWatermarkSettingsProperty {
    /**
     * Settings to configure Nielsen Watermarks in the audio encode.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiowatermarksettings.html#cfn-medialive-channel-audiowatermarksettings-nielsenwatermarkssettings)
     */
    public fun nielsenWatermarksSettings(): Any? = unwrap(this).getNielsenWatermarksSettings()

    /**
     * A builder for [AudioWatermarkSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param nielsenWatermarksSettings Settings to configure Nielsen Watermarks in the audio
       * encode.
       */
      public fun nielsenWatermarksSettings(nielsenWatermarksSettings: IResolvable)

      /**
       * @param nielsenWatermarksSettings Settings to configure Nielsen Watermarks in the audio
       * encode.
       */
      public
          fun nielsenWatermarksSettings(nielsenWatermarksSettings: NielsenWatermarksSettingsProperty)

      /**
       * @param nielsenWatermarksSettings Settings to configure Nielsen Watermarks in the audio
       * encode.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("d64823136217a65b6861749cca35190781e837c4765c763fcc01de6191621fe6")
      public
          fun nielsenWatermarksSettings(nielsenWatermarksSettings: NielsenWatermarksSettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.AudioWatermarkSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.AudioWatermarkSettingsProperty.builder()

      /**
       * @param nielsenWatermarksSettings Settings to configure Nielsen Watermarks in the audio
       * encode.
       */
      override fun nielsenWatermarksSettings(nielsenWatermarksSettings: IResolvable) {
        cdkBuilder.nielsenWatermarksSettings(nielsenWatermarksSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param nielsenWatermarksSettings Settings to configure Nielsen Watermarks in the audio
       * encode.
       */
      override
          fun nielsenWatermarksSettings(nielsenWatermarksSettings: NielsenWatermarksSettingsProperty) {
        cdkBuilder.nielsenWatermarksSettings(nielsenWatermarksSettings.let(NielsenWatermarksSettingsProperty.Companion::unwrap))
      }

      /**
       * @param nielsenWatermarksSettings Settings to configure Nielsen Watermarks in the audio
       * encode.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("d64823136217a65b6861749cca35190781e837c4765c763fcc01de6191621fe6")
      override
          fun nielsenWatermarksSettings(nielsenWatermarksSettings: NielsenWatermarksSettingsProperty.Builder.() -> Unit):
          Unit =
          nielsenWatermarksSettings(NielsenWatermarksSettingsProperty(nielsenWatermarksSettings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.AudioWatermarkSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioWatermarkSettingsProperty,
    ) : CdkObject(cdkObject),
        AudioWatermarkSettingsProperty {
      /**
       * Settings to configure Nielsen Watermarks in the audio encode.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiowatermarksettings.html#cfn-medialive-channel-audiowatermarksettings-nielsenwatermarkssettings)
       */
      override fun nielsenWatermarksSettings(): Any? = unwrap(this).getNielsenWatermarksSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): AudioWatermarkSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AudioWatermarkSettingsProperty):
          AudioWatermarkSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          AudioWatermarkSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: AudioWatermarkSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.AudioWatermarkSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.AudioWatermarkSettingsProperty
    }
  }

  /**
   * Settings to configure the conditions that will define the input as unhealthy and that will make
   * MediaLive fail over to the other input in the input failover pair.
   *
   * The parent of this entity is InputAttachment.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * AutomaticInputFailoverSettingsProperty automaticInputFailoverSettingsProperty =
   * AutomaticInputFailoverSettingsProperty.builder()
   * .errorClearTimeMsec(123)
   * .failoverConditions(List.of(FailoverConditionProperty.builder()
   * .failoverConditionSettings(FailoverConditionSettingsProperty.builder()
   * .audioSilenceSettings(AudioSilenceFailoverSettingsProperty.builder()
   * .audioSelectorName("audioSelectorName")
   * .audioSilenceThresholdMsec(123)
   * .build())
   * .inputLossSettings(InputLossFailoverSettingsProperty.builder()
   * .inputLossThresholdMsec(123)
   * .build())
   * .videoBlackSettings(VideoBlackFailoverSettingsProperty.builder()
   * .blackDetectThreshold(123)
   * .videoBlackThresholdMsec(123)
   * .build())
   * .build())
   * .build()))
   * .inputPreference("inputPreference")
   * .secondaryInputId("secondaryInputId")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-automaticinputfailoversettings.html)
   */
  public interface AutomaticInputFailoverSettingsProperty {
    /**
     * This clear time defines the requirement a recovered input must meet to be considered healthy.
     *
     * The input must have no failover conditions for this length of time. Enter a time in
     * milliseconds. This value is particularly important if the input_preference for the failover pair
     * is set to PRIMARY_INPUT_PREFERRED, because after this time, MediaLive will switch back to the
     * primary input.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-automaticinputfailoversettings.html#cfn-medialive-channel-automaticinputfailoversettings-errorcleartimemsec)
     */
    public fun errorClearTimeMsec(): Number? = unwrap(this).getErrorClearTimeMsec()

    /**
     * A list of failover conditions.
     *
     * If any of these conditions occur, MediaLive will perform a failover to the other input.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-automaticinputfailoversettings.html#cfn-medialive-channel-automaticinputfailoversettings-failoverconditions)
     */
    public fun failoverConditions(): Any? = unwrap(this).getFailoverConditions()

    /**
     * Input preference when deciding which input to make active when a previously failed input has
     * recovered.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-automaticinputfailoversettings.html#cfn-medialive-channel-automaticinputfailoversettings-inputpreference)
     */
    public fun inputPreference(): String? = unwrap(this).getInputPreference()

    /**
     * The input ID of the secondary input in the automatic input failover pair.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-automaticinputfailoversettings.html#cfn-medialive-channel-automaticinputfailoversettings-secondaryinputid)
     */
    public fun secondaryInputId(): String? = unwrap(this).getSecondaryInputId()

    /**
     * A builder for [AutomaticInputFailoverSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param errorClearTimeMsec This clear time defines the requirement a recovered input must
       * meet to be considered healthy.
       * The input must have no failover conditions for this length of time. Enter a time in
       * milliseconds. This value is particularly important if the input_preference for the failover
       * pair is set to PRIMARY_INPUT_PREFERRED, because after this time, MediaLive will switch back to
       * the primary input.
       */
      public fun errorClearTimeMsec(errorClearTimeMsec: Number)

      /**
       * @param failoverConditions A list of failover conditions.
       * If any of these conditions occur, MediaLive will perform a failover to the other input.
       */
      public fun failoverConditions(failoverConditions: IResolvable)

      /**
       * @param failoverConditions A list of failover conditions.
       * If any of these conditions occur, MediaLive will perform a failover to the other input.
       */
      public fun failoverConditions(failoverConditions: List)

      /**
       * @param failoverConditions A list of failover conditions.
       * If any of these conditions occur, MediaLive will perform a failover to the other input.
       */
      public fun failoverConditions(vararg failoverConditions: Any)

      /**
       * @param inputPreference Input preference when deciding which input to make active when a
       * previously failed input has recovered.
       */
      public fun inputPreference(inputPreference: String)

      /**
       * @param secondaryInputId The input ID of the secondary input in the automatic input failover
       * pair.
       */
      public fun secondaryInputId(secondaryInputId: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.AutomaticInputFailoverSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.AutomaticInputFailoverSettingsProperty.builder()

      /**
       * @param errorClearTimeMsec This clear time defines the requirement a recovered input must
       * meet to be considered healthy.
       * The input must have no failover conditions for this length of time. Enter a time in
       * milliseconds. This value is particularly important if the input_preference for the failover
       * pair is set to PRIMARY_INPUT_PREFERRED, because after this time, MediaLive will switch back to
       * the primary input.
       */
      override fun errorClearTimeMsec(errorClearTimeMsec: Number) {
        cdkBuilder.errorClearTimeMsec(errorClearTimeMsec)
      }

      /**
       * @param failoverConditions A list of failover conditions.
       * If any of these conditions occur, MediaLive will perform a failover to the other input.
       */
      override fun failoverConditions(failoverConditions: IResolvable) {
        cdkBuilder.failoverConditions(failoverConditions.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param failoverConditions A list of failover conditions.
       * If any of these conditions occur, MediaLive will perform a failover to the other input.
       */
      override fun failoverConditions(failoverConditions: List) {
        cdkBuilder.failoverConditions(failoverConditions.map{CdkObjectWrappers.unwrap(it)})
      }

      /**
       * @param failoverConditions A list of failover conditions.
       * If any of these conditions occur, MediaLive will perform a failover to the other input.
       */
      override fun failoverConditions(vararg failoverConditions: Any): Unit =
          failoverConditions(failoverConditions.toList())

      /**
       * @param inputPreference Input preference when deciding which input to make active when a
       * previously failed input has recovered.
       */
      override fun inputPreference(inputPreference: String) {
        cdkBuilder.inputPreference(inputPreference)
      }

      /**
       * @param secondaryInputId The input ID of the secondary input in the automatic input failover
       * pair.
       */
      override fun secondaryInputId(secondaryInputId: String) {
        cdkBuilder.secondaryInputId(secondaryInputId)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.AutomaticInputFailoverSettingsProperty
          = cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AutomaticInputFailoverSettingsProperty,
    ) : CdkObject(cdkObject),
        AutomaticInputFailoverSettingsProperty {
      /**
       * This clear time defines the requirement a recovered input must meet to be considered
       * healthy.
       *
       * The input must have no failover conditions for this length of time. Enter a time in
       * milliseconds. This value is particularly important if the input_preference for the failover
       * pair is set to PRIMARY_INPUT_PREFERRED, because after this time, MediaLive will switch back to
       * the primary input.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-automaticinputfailoversettings.html#cfn-medialive-channel-automaticinputfailoversettings-errorcleartimemsec)
       */
      override fun errorClearTimeMsec(): Number? = unwrap(this).getErrorClearTimeMsec()

      /**
       * A list of failover conditions.
       *
       * If any of these conditions occur, MediaLive will perform a failover to the other input.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-automaticinputfailoversettings.html#cfn-medialive-channel-automaticinputfailoversettings-failoverconditions)
       */
      override fun failoverConditions(): Any? = unwrap(this).getFailoverConditions()

      /**
       * Input preference when deciding which input to make active when a previously failed input
       * has recovered.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-automaticinputfailoversettings.html#cfn-medialive-channel-automaticinputfailoversettings-inputpreference)
       */
      override fun inputPreference(): String? = unwrap(this).getInputPreference()

      /**
       * The input ID of the secondary input in the automatic input failover pair.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-automaticinputfailoversettings.html#cfn-medialive-channel-automaticinputfailoversettings-secondaryinputid)
       */
      override fun secondaryInputId(): String? = unwrap(this).getSecondaryInputId()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          AutomaticInputFailoverSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AutomaticInputFailoverSettingsProperty):
          AutomaticInputFailoverSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          AutomaticInputFailoverSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: AutomaticInputFailoverSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.AutomaticInputFailoverSettingsProperty
          = (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.AutomaticInputFailoverSettingsProperty
    }
  }

  /**
   * The configuration of ad avail blanking in the output.
   *
   * The parent of this entity is EncoderSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * AvailBlankingProperty availBlankingProperty = AvailBlankingProperty.builder()
   * .availBlankingImage(InputLocationProperty.builder()
   * .passwordParam("passwordParam")
   * .uri("uri")
   * .username("username")
   * .build())
   * .state("state")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-availblanking.html)
   */
  public interface AvailBlankingProperty {
    /**
     * The blanking image to be used.
     *
     * Keep empty for solid black. Only .bmp and .png images are supported.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-availblanking.html#cfn-medialive-channel-availblanking-availblankingimage)
     */
    public fun availBlankingImage(): Any? = unwrap(this).getAvailBlankingImage()

    /**
     * When set to enabled, the video, audio, and captions are blanked when insertion metadata is
     * added.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-availblanking.html#cfn-medialive-channel-availblanking-state)
     */
    public fun state(): String? = unwrap(this).getState()

    /**
     * A builder for [AvailBlankingProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param availBlankingImage The blanking image to be used.
       * Keep empty for solid black. Only .bmp and .png images are supported.
       */
      public fun availBlankingImage(availBlankingImage: IResolvable)

      /**
       * @param availBlankingImage The blanking image to be used.
       * Keep empty for solid black. Only .bmp and .png images are supported.
       */
      public fun availBlankingImage(availBlankingImage: InputLocationProperty)

      /**
       * @param availBlankingImage The blanking image to be used.
       * Keep empty for solid black. Only .bmp and .png images are supported.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ac579c524f824b06d7349c8cced246b66e95444570e4303f02723bc77a6c9e68")
      public fun availBlankingImage(availBlankingImage: InputLocationProperty.Builder.() -> Unit)

      /**
       * @param state When set to enabled, the video, audio, and captions are blanked when insertion
       * metadata is added.
       */
      public fun state(state: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.AvailBlankingProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.AvailBlankingProperty.builder()

      /**
       * @param availBlankingImage The blanking image to be used.
       * Keep empty for solid black. Only .bmp and .png images are supported.
       */
      override fun availBlankingImage(availBlankingImage: IResolvable) {
        cdkBuilder.availBlankingImage(availBlankingImage.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param availBlankingImage The blanking image to be used.
       * Keep empty for solid black. Only .bmp and .png images are supported.
       */
      override fun availBlankingImage(availBlankingImage: InputLocationProperty) {
        cdkBuilder.availBlankingImage(availBlankingImage.let(InputLocationProperty.Companion::unwrap))
      }

      /**
       * @param availBlankingImage The blanking image to be used.
       * Keep empty for solid black. Only .bmp and .png images are supported.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ac579c524f824b06d7349c8cced246b66e95444570e4303f02723bc77a6c9e68")
      override fun availBlankingImage(availBlankingImage: InputLocationProperty.Builder.() -> Unit):
          Unit = availBlankingImage(InputLocationProperty(availBlankingImage))

      /**
       * @param state When set to enabled, the video, audio, and captions are blanked when insertion
       * metadata is added.
       */
      override fun state(state: String) {
        cdkBuilder.state(state)
      }

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.AvailBlankingProperty
          = cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AvailBlankingProperty,
    ) : CdkObject(cdkObject),
        AvailBlankingProperty {
      /**
       * The blanking image to be used.
       *
       * Keep empty for solid black. Only .bmp and .png images are supported.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-availblanking.html#cfn-medialive-channel-availblanking-availblankingimage)
       */
      override fun availBlankingImage(): Any? = unwrap(this).getAvailBlankingImage()

      /**
       * When set to enabled, the video, audio, and captions are blanked when insertion metadata is
       * added.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-availblanking.html#cfn-medialive-channel-availblanking-state)
       */
      override fun state(): String? = unwrap(this).getState()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): AvailBlankingProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AvailBlankingProperty):
          AvailBlankingProperty = CdkObjectWrappers.wrap(cdkObject) as? AvailBlankingProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: AvailBlankingProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.AvailBlankingProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.AvailBlankingProperty
    }
  }

  /**
   * The setup of ad avail handling in the output.
   *
   * The parent of this entity is EncoderSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * AvailConfigurationProperty availConfigurationProperty = AvailConfigurationProperty.builder()
   * .availSettings(AvailSettingsProperty.builder()
   * .esam(EsamProperty.builder()
   * .acquisitionPointId("acquisitionPointId")
   * .adAvailOffset(123)
   * .passwordParam("passwordParam")
   * .poisEndpoint("poisEndpoint")
   * .username("username")
   * .zoneIdentity("zoneIdentity")
   * .build())
   * .scte35SpliceInsert(Scte35SpliceInsertProperty.builder()
   * .adAvailOffset(123)
   * .noRegionalBlackoutFlag("noRegionalBlackoutFlag")
   * .webDeliveryAllowedFlag("webDeliveryAllowedFlag")
   * .build())
   * .scte35TimeSignalApos(Scte35TimeSignalAposProperty.builder()
   * .adAvailOffset(123)
   * .noRegionalBlackoutFlag("noRegionalBlackoutFlag")
   * .webDeliveryAllowedFlag("webDeliveryAllowedFlag")
   * .build())
   * .build())
   * .scte35SegmentationScope("scte35SegmentationScope")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-availconfiguration.html)
   */
  public interface AvailConfigurationProperty {
    /**
     * The setup of ad avail handling in the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-availconfiguration.html#cfn-medialive-channel-availconfiguration-availsettings)
     */
    public fun availSettings(): Any? = unwrap(this).getAvailSettings()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-availconfiguration.html#cfn-medialive-channel-availconfiguration-scte35segmentationscope)
     */
    public fun scte35SegmentationScope(): String? = unwrap(this).getScte35SegmentationScope()

    /**
     * A builder for [AvailConfigurationProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param availSettings The setup of ad avail handling in the output.
       */
      public fun availSettings(availSettings: IResolvable)

      /**
       * @param availSettings The setup of ad avail handling in the output.
       */
      public fun availSettings(availSettings: AvailSettingsProperty)

      /**
       * @param availSettings The setup of ad avail handling in the output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("240d5e0606d729c84794d102fb2ba988f76c879c4aaef20e19080d639b518ac5")
      public fun availSettings(availSettings: AvailSettingsProperty.Builder.() -> Unit)

      /**
       * @param scte35SegmentationScope the value to be set.
       */
      public fun scte35SegmentationScope(scte35SegmentationScope: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.AvailConfigurationProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.AvailConfigurationProperty.builder()

      /**
       * @param availSettings The setup of ad avail handling in the output.
       */
      override fun availSettings(availSettings: IResolvable) {
        cdkBuilder.availSettings(availSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param availSettings The setup of ad avail handling in the output.
       */
      override fun availSettings(availSettings: AvailSettingsProperty) {
        cdkBuilder.availSettings(availSettings.let(AvailSettingsProperty.Companion::unwrap))
      }

      /**
       * @param availSettings The setup of ad avail handling in the output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("240d5e0606d729c84794d102fb2ba988f76c879c4aaef20e19080d639b518ac5")
      override fun availSettings(availSettings: AvailSettingsProperty.Builder.() -> Unit): Unit =
          availSettings(AvailSettingsProperty(availSettings))

      /**
       * @param scte35SegmentationScope the value to be set.
       */
      override fun scte35SegmentationScope(scte35SegmentationScope: String) {
        cdkBuilder.scte35SegmentationScope(scte35SegmentationScope)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.AvailConfigurationProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AvailConfigurationProperty,
    ) : CdkObject(cdkObject),
        AvailConfigurationProperty {
      /**
       * The setup of ad avail handling in the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-availconfiguration.html#cfn-medialive-channel-availconfiguration-availsettings)
       */
      override fun availSettings(): Any? = unwrap(this).getAvailSettings()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-availconfiguration.html#cfn-medialive-channel-availconfiguration-scte35segmentationscope)
       */
      override fun scte35SegmentationScope(): String? = unwrap(this).getScte35SegmentationScope()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): AvailConfigurationProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AvailConfigurationProperty):
          AvailConfigurationProperty = CdkObjectWrappers.wrap(cdkObject) as?
          AvailConfigurationProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: AvailConfigurationProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.AvailConfigurationProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.AvailConfigurationProperty
    }
  }

  /**
   * The settings for the ad avail setup in the output.
   *
   * The parent of this entity is AvailConfiguration.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * AvailSettingsProperty availSettingsProperty = AvailSettingsProperty.builder()
   * .esam(EsamProperty.builder()
   * .acquisitionPointId("acquisitionPointId")
   * .adAvailOffset(123)
   * .passwordParam("passwordParam")
   * .poisEndpoint("poisEndpoint")
   * .username("username")
   * .zoneIdentity("zoneIdentity")
   * .build())
   * .scte35SpliceInsert(Scte35SpliceInsertProperty.builder()
   * .adAvailOffset(123)
   * .noRegionalBlackoutFlag("noRegionalBlackoutFlag")
   * .webDeliveryAllowedFlag("webDeliveryAllowedFlag")
   * .build())
   * .scte35TimeSignalApos(Scte35TimeSignalAposProperty.builder()
   * .adAvailOffset(123)
   * .noRegionalBlackoutFlag("noRegionalBlackoutFlag")
   * .webDeliveryAllowedFlag("webDeliveryAllowedFlag")
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-availsettings.html)
   */
  public interface AvailSettingsProperty {
    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-availsettings.html#cfn-medialive-channel-availsettings-esam)
     */
    public fun esam(): Any? = unwrap(this).getEsam()

    /**
     * The setup for SCTE-35 splice insert handling.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-availsettings.html#cfn-medialive-channel-availsettings-scte35spliceinsert)
     */
    public fun scte35SpliceInsert(): Any? = unwrap(this).getScte35SpliceInsert()

    /**
     * The setup for SCTE-35 time signal APOS handling.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-availsettings.html#cfn-medialive-channel-availsettings-scte35timesignalapos)
     */
    public fun scte35TimeSignalApos(): Any? = unwrap(this).getScte35TimeSignalApos()

    /**
     * A builder for [AvailSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param esam the value to be set.
       */
      public fun esam(esam: IResolvable)

      /**
       * @param esam the value to be set.
       */
      public fun esam(esam: EsamProperty)

      /**
       * @param esam the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ed5f7c3bb0f2db73506c673ced941f1e87182447d144dcfe09b998539a44844a")
      public fun esam(esam: EsamProperty.Builder.() -> Unit)

      /**
       * @param scte35SpliceInsert The setup for SCTE-35 splice insert handling.
       */
      public fun scte35SpliceInsert(scte35SpliceInsert: IResolvable)

      /**
       * @param scte35SpliceInsert The setup for SCTE-35 splice insert handling.
       */
      public fun scte35SpliceInsert(scte35SpliceInsert: Scte35SpliceInsertProperty)

      /**
       * @param scte35SpliceInsert The setup for SCTE-35 splice insert handling.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("867a67f52a8d8ab533710c200e2111aedee7f3a666d2206c424e528d79e97be0")
      public
          fun scte35SpliceInsert(scte35SpliceInsert: Scte35SpliceInsertProperty.Builder.() -> Unit)

      /**
       * @param scte35TimeSignalApos The setup for SCTE-35 time signal APOS handling.
       */
      public fun scte35TimeSignalApos(scte35TimeSignalApos: IResolvable)

      /**
       * @param scte35TimeSignalApos The setup for SCTE-35 time signal APOS handling.
       */
      public fun scte35TimeSignalApos(scte35TimeSignalApos: Scte35TimeSignalAposProperty)

      /**
       * @param scte35TimeSignalApos The setup for SCTE-35 time signal APOS handling.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("1fbccce3e31010e4a4409f84ad95318d6008e84ec33652c390db519b8a021152")
      public
          fun scte35TimeSignalApos(scte35TimeSignalApos: Scte35TimeSignalAposProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.AvailSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.AvailSettingsProperty.builder()

      /**
       * @param esam the value to be set.
       */
      override fun esam(esam: IResolvable) {
        cdkBuilder.esam(esam.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param esam the value to be set.
       */
      override fun esam(esam: EsamProperty) {
        cdkBuilder.esam(esam.let(EsamProperty.Companion::unwrap))
      }

      /**
       * @param esam the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ed5f7c3bb0f2db73506c673ced941f1e87182447d144dcfe09b998539a44844a")
      override fun esam(esam: EsamProperty.Builder.() -> Unit): Unit = esam(EsamProperty(esam))

      /**
       * @param scte35SpliceInsert The setup for SCTE-35 splice insert handling.
       */
      override fun scte35SpliceInsert(scte35SpliceInsert: IResolvable) {
        cdkBuilder.scte35SpliceInsert(scte35SpliceInsert.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param scte35SpliceInsert The setup for SCTE-35 splice insert handling.
       */
      override fun scte35SpliceInsert(scte35SpliceInsert: Scte35SpliceInsertProperty) {
        cdkBuilder.scte35SpliceInsert(scte35SpliceInsert.let(Scte35SpliceInsertProperty.Companion::unwrap))
      }

      /**
       * @param scte35SpliceInsert The setup for SCTE-35 splice insert handling.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("867a67f52a8d8ab533710c200e2111aedee7f3a666d2206c424e528d79e97be0")
      override
          fun scte35SpliceInsert(scte35SpliceInsert: Scte35SpliceInsertProperty.Builder.() -> Unit):
          Unit = scte35SpliceInsert(Scte35SpliceInsertProperty(scte35SpliceInsert))

      /**
       * @param scte35TimeSignalApos The setup for SCTE-35 time signal APOS handling.
       */
      override fun scte35TimeSignalApos(scte35TimeSignalApos: IResolvable) {
        cdkBuilder.scte35TimeSignalApos(scte35TimeSignalApos.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param scte35TimeSignalApos The setup for SCTE-35 time signal APOS handling.
       */
      override fun scte35TimeSignalApos(scte35TimeSignalApos: Scte35TimeSignalAposProperty) {
        cdkBuilder.scte35TimeSignalApos(scte35TimeSignalApos.let(Scte35TimeSignalAposProperty.Companion::unwrap))
      }

      /**
       * @param scte35TimeSignalApos The setup for SCTE-35 time signal APOS handling.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("1fbccce3e31010e4a4409f84ad95318d6008e84ec33652c390db519b8a021152")
      override
          fun scte35TimeSignalApos(scte35TimeSignalApos: Scte35TimeSignalAposProperty.Builder.() -> Unit):
          Unit = scte35TimeSignalApos(Scte35TimeSignalAposProperty(scte35TimeSignalApos))

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.AvailSettingsProperty
          = cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AvailSettingsProperty,
    ) : CdkObject(cdkObject),
        AvailSettingsProperty {
      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-availsettings.html#cfn-medialive-channel-availsettings-esam)
       */
      override fun esam(): Any? = unwrap(this).getEsam()

      /**
       * The setup for SCTE-35 splice insert handling.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-availsettings.html#cfn-medialive-channel-availsettings-scte35spliceinsert)
       */
      override fun scte35SpliceInsert(): Any? = unwrap(this).getScte35SpliceInsert()

      /**
       * The setup for SCTE-35 time signal APOS handling.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-availsettings.html#cfn-medialive-channel-availsettings-scte35timesignalapos)
       */
      override fun scte35TimeSignalApos(): Any? = unwrap(this).getScte35TimeSignalApos()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): AvailSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.AvailSettingsProperty):
          AvailSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? AvailSettingsProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: AvailSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.AvailSettingsProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.AvailSettingsProperty
    }
  }

  /**
   * The settings for a blackout slate.
   *
   * The parent of this entity is EncoderSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * BlackoutSlateProperty blackoutSlateProperty = BlackoutSlateProperty.builder()
   * .blackoutSlateImage(InputLocationProperty.builder()
   * .passwordParam("passwordParam")
   * .uri("uri")
   * .username("username")
   * .build())
   * .networkEndBlackout("networkEndBlackout")
   * .networkEndBlackoutImage(InputLocationProperty.builder()
   * .passwordParam("passwordParam")
   * .uri("uri")
   * .username("username")
   * .build())
   * .networkId("networkId")
   * .state("state")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-blackoutslate.html)
   */
  public interface BlackoutSlateProperty {
    /**
     * The blackout slate image to be used.
     *
     * Keep empty for solid black. Only .bmp and .png images are supported.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-blackoutslate.html#cfn-medialive-channel-blackoutslate-blackoutslateimage)
     */
    public fun blackoutSlateImage(): Any? = unwrap(this).getBlackoutSlateImage()

    /**
     * Setting to enabled causes MediaLive to blackout the video, audio, and captions, and raise the
     * "Network Blackout Image" slate when an SCTE104/35 Network End Segmentation Descriptor is
     * encountered.
     *
     * The blackout is lifted when the Network Start Segmentation Descriptor is encountered. The
     * Network End and Network Start descriptors must contain a network ID that matches the value
     * entered in Network ID.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-blackoutslate.html#cfn-medialive-channel-blackoutslate-networkendblackout)
     */
    public fun networkEndBlackout(): String? = unwrap(this).getNetworkEndBlackout()

    /**
     * The path to the local file to use as the Network End Blackout image.
     *
     * The image is scaled to fill the entire output raster.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-blackoutslate.html#cfn-medialive-channel-blackoutslate-networkendblackoutimage)
     */
    public fun networkEndBlackoutImage(): Any? = unwrap(this).getNetworkEndBlackoutImage()

    /**
     * Provides a Network ID that matches EIDR ID format (for example,
     * "10.XXXX/XXXX-XXXX-XXXX-XXXX-XXXX-C").
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-blackoutslate.html#cfn-medialive-channel-blackoutslate-networkid)
     */
    public fun networkId(): String? = unwrap(this).getNetworkId()

    /**
     * When set to enabled, this causes video, audio, and captions to be blanked when indicated by
     * program metadata.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-blackoutslate.html#cfn-medialive-channel-blackoutslate-state)
     */
    public fun state(): String? = unwrap(this).getState()

    /**
     * A builder for [BlackoutSlateProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param blackoutSlateImage The blackout slate image to be used.
       * Keep empty for solid black. Only .bmp and .png images are supported.
       */
      public fun blackoutSlateImage(blackoutSlateImage: IResolvable)

      /**
       * @param blackoutSlateImage The blackout slate image to be used.
       * Keep empty for solid black. Only .bmp and .png images are supported.
       */
      public fun blackoutSlateImage(blackoutSlateImage: InputLocationProperty)

      /**
       * @param blackoutSlateImage The blackout slate image to be used.
       * Keep empty for solid black. Only .bmp and .png images are supported.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("c1a4bfe7ddb7de6188dce591adb16cc21b40f1effc794e606f15c56b4592f423")
      public fun blackoutSlateImage(blackoutSlateImage: InputLocationProperty.Builder.() -> Unit)

      /**
       * @param networkEndBlackout Setting to enabled causes MediaLive to blackout the video, audio,
       * and captions, and raise the "Network Blackout Image" slate when an SCTE104/35 Network End
       * Segmentation Descriptor is encountered.
       * The blackout is lifted when the Network Start Segmentation Descriptor is encountered. The
       * Network End and Network Start descriptors must contain a network ID that matches the value
       * entered in Network ID.
       */
      public fun networkEndBlackout(networkEndBlackout: String)

      /**
       * @param networkEndBlackoutImage The path to the local file to use as the Network End
       * Blackout image.
       * The image is scaled to fill the entire output raster.
       */
      public fun networkEndBlackoutImage(networkEndBlackoutImage: IResolvable)

      /**
       * @param networkEndBlackoutImage The path to the local file to use as the Network End
       * Blackout image.
       * The image is scaled to fill the entire output raster.
       */
      public fun networkEndBlackoutImage(networkEndBlackoutImage: InputLocationProperty)

      /**
       * @param networkEndBlackoutImage The path to the local file to use as the Network End
       * Blackout image.
       * The image is scaled to fill the entire output raster.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("662fe3b56989a7090783508b63dce0c8b01436811c3f3d41512dc62da17b7901")
      public
          fun networkEndBlackoutImage(networkEndBlackoutImage: InputLocationProperty.Builder.() -> Unit)

      /**
       * @param networkId Provides a Network ID that matches EIDR ID format (for example,
       * "10.XXXX/XXXX-XXXX-XXXX-XXXX-XXXX-C").
       */
      public fun networkId(networkId: String)

      /**
       * @param state When set to enabled, this causes video, audio, and captions to be blanked when
       * indicated by program metadata.
       */
      public fun state(state: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.BlackoutSlateProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.BlackoutSlateProperty.builder()

      /**
       * @param blackoutSlateImage The blackout slate image to be used.
       * Keep empty for solid black. Only .bmp and .png images are supported.
       */
      override fun blackoutSlateImage(blackoutSlateImage: IResolvable) {
        cdkBuilder.blackoutSlateImage(blackoutSlateImage.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param blackoutSlateImage The blackout slate image to be used.
       * Keep empty for solid black. Only .bmp and .png images are supported.
       */
      override fun blackoutSlateImage(blackoutSlateImage: InputLocationProperty) {
        cdkBuilder.blackoutSlateImage(blackoutSlateImage.let(InputLocationProperty.Companion::unwrap))
      }

      /**
       * @param blackoutSlateImage The blackout slate image to be used.
       * Keep empty for solid black. Only .bmp and .png images are supported.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("c1a4bfe7ddb7de6188dce591adb16cc21b40f1effc794e606f15c56b4592f423")
      override fun blackoutSlateImage(blackoutSlateImage: InputLocationProperty.Builder.() -> Unit):
          Unit = blackoutSlateImage(InputLocationProperty(blackoutSlateImage))

      /**
       * @param networkEndBlackout Setting to enabled causes MediaLive to blackout the video, audio,
       * and captions, and raise the "Network Blackout Image" slate when an SCTE104/35 Network End
       * Segmentation Descriptor is encountered.
       * The blackout is lifted when the Network Start Segmentation Descriptor is encountered. The
       * Network End and Network Start descriptors must contain a network ID that matches the value
       * entered in Network ID.
       */
      override fun networkEndBlackout(networkEndBlackout: String) {
        cdkBuilder.networkEndBlackout(networkEndBlackout)
      }

      /**
       * @param networkEndBlackoutImage The path to the local file to use as the Network End
       * Blackout image.
       * The image is scaled to fill the entire output raster.
       */
      override fun networkEndBlackoutImage(networkEndBlackoutImage: IResolvable) {
        cdkBuilder.networkEndBlackoutImage(networkEndBlackoutImage.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param networkEndBlackoutImage The path to the local file to use as the Network End
       * Blackout image.
       * The image is scaled to fill the entire output raster.
       */
      override fun networkEndBlackoutImage(networkEndBlackoutImage: InputLocationProperty) {
        cdkBuilder.networkEndBlackoutImage(networkEndBlackoutImage.let(InputLocationProperty.Companion::unwrap))
      }

      /**
       * @param networkEndBlackoutImage The path to the local file to use as the Network End
       * Blackout image.
       * The image is scaled to fill the entire output raster.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("662fe3b56989a7090783508b63dce0c8b01436811c3f3d41512dc62da17b7901")
      override
          fun networkEndBlackoutImage(networkEndBlackoutImage: InputLocationProperty.Builder.() -> Unit):
          Unit = networkEndBlackoutImage(InputLocationProperty(networkEndBlackoutImage))

      /**
       * @param networkId Provides a Network ID that matches EIDR ID format (for example,
       * "10.XXXX/XXXX-XXXX-XXXX-XXXX-XXXX-C").
       */
      override fun networkId(networkId: String) {
        cdkBuilder.networkId(networkId)
      }

      /**
       * @param state When set to enabled, this causes video, audio, and captions to be blanked when
       * indicated by program metadata.
       */
      override fun state(state: String) {
        cdkBuilder.state(state)
      }

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.BlackoutSlateProperty
          = cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.BlackoutSlateProperty,
    ) : CdkObject(cdkObject),
        BlackoutSlateProperty {
      /**
       * The blackout slate image to be used.
       *
       * Keep empty for solid black. Only .bmp and .png images are supported.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-blackoutslate.html#cfn-medialive-channel-blackoutslate-blackoutslateimage)
       */
      override fun blackoutSlateImage(): Any? = unwrap(this).getBlackoutSlateImage()

      /**
       * Setting to enabled causes MediaLive to blackout the video, audio, and captions, and raise
       * the "Network Blackout Image" slate when an SCTE104/35 Network End Segmentation Descriptor is
       * encountered.
       *
       * The blackout is lifted when the Network Start Segmentation Descriptor is encountered. The
       * Network End and Network Start descriptors must contain a network ID that matches the value
       * entered in Network ID.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-blackoutslate.html#cfn-medialive-channel-blackoutslate-networkendblackout)
       */
      override fun networkEndBlackout(): String? = unwrap(this).getNetworkEndBlackout()

      /**
       * The path to the local file to use as the Network End Blackout image.
       *
       * The image is scaled to fill the entire output raster.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-blackoutslate.html#cfn-medialive-channel-blackoutslate-networkendblackoutimage)
       */
      override fun networkEndBlackoutImage(): Any? = unwrap(this).getNetworkEndBlackoutImage()

      /**
       * Provides a Network ID that matches EIDR ID format (for example,
       * "10.XXXX/XXXX-XXXX-XXXX-XXXX-XXXX-C").
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-blackoutslate.html#cfn-medialive-channel-blackoutslate-networkid)
       */
      override fun networkId(): String? = unwrap(this).getNetworkId()

      /**
       * When set to enabled, this causes video, audio, and captions to be blanked when indicated by
       * program metadata.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-blackoutslate.html#cfn-medialive-channel-blackoutslate-state)
       */
      override fun state(): String? = unwrap(this).getState()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): BlackoutSlateProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.BlackoutSlateProperty):
          BlackoutSlateProperty = CdkObjectWrappers.wrap(cdkObject) as? BlackoutSlateProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: BlackoutSlateProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.BlackoutSlateProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.BlackoutSlateProperty
    }
  }

  /**
   * The settings for burn-in captions in the output.
   *
   * The parent of this entity is CaptionDestinationSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * BurnInDestinationSettingsProperty burnInDestinationSettingsProperty =
   * BurnInDestinationSettingsProperty.builder()
   * .alignment("alignment")
   * .backgroundColor("backgroundColor")
   * .backgroundOpacity(123)
   * .font(InputLocationProperty.builder()
   * .passwordParam("passwordParam")
   * .uri("uri")
   * .username("username")
   * .build())
   * .fontColor("fontColor")
   * .fontOpacity(123)
   * .fontResolution(123)
   * .fontSize("fontSize")
   * .outlineColor("outlineColor")
   * .outlineSize(123)
   * .shadowColor("shadowColor")
   * .shadowOpacity(123)
   * .shadowXOffset(123)
   * .shadowYOffset(123)
   * .teletextGridControl("teletextGridControl")
   * .xPosition(123)
   * .yPosition(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html)
   */
  public interface BurnInDestinationSettingsProperty {
    /**
     * If no explicit xPosition or yPosition is provided, setting alignment to centered places the
     * captions at the bottom center of the output.
     *
     * Similarly, setting a left alignment aligns captions to the bottom left of the output. If x
     * and y positions are specified in conjunction with the alignment parameter, the font is justified
     * (either left or centered) relative to those coordinates. Selecting "smart" justification
     * left-justifies live subtitles and center-justifies pre-recorded subtitles. All burn-in and
     * DVB-Sub font settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-alignment)
     */
    public fun alignment(): String? = unwrap(this).getAlignment()

    /**
     * Specifies the color of the rectangle behind the captions.
     *
     * All burn-in and DVB-Sub font settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-backgroundcolor)
     */
    public fun backgroundColor(): String? = unwrap(this).getBackgroundColor()

    /**
     * Specifies the opacity of the background rectangle.
     *
     * 255 is opaque; 0 is transparent. Keeping this parameter blank is equivalent to setting it to
     * 0 (transparent). All burn-in and DVB-Sub font settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-backgroundopacity)
     */
    public fun backgroundOpacity(): Number? = unwrap(this).getBackgroundOpacity()

    /**
     * The external font file that is used for captions burn-in.
     *
     * The file extension must be .ttf or .tte. Although you can select output fonts for many
     * different types of input captions, embedded, STL, and Teletext sources use a strict grid system.
     * Using external fonts with these captions sources could cause an unexpected display of
     * proportional fonts. All burn-in and DVB-Sub font settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-font)
     */
    public fun font(): Any? = unwrap(this).getFont()

    /**
     * Specifies the color of the burned-in captions.
     *
     * This option is not valid for source captions that are STL, 608/embedded, or Teletext. These
     * source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font
     * settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-fontcolor)
     */
    public fun fontColor(): String? = unwrap(this).getFontColor()

    /**
     * Specifies the opacity of the burned-in captions.
     *
     * 255 is opaque; 0 is transparent. All burn-in and DVB-Sub font settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-fontopacity)
     */
    public fun fontOpacity(): Number? = unwrap(this).getFontOpacity()

    /**
     * The font resolution in DPI (dots per inch).
     *
     * The default is 96 dpi. All burn-in and DVB-Sub font settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-fontresolution)
     */
    public fun fontResolution(): Number? = unwrap(this).getFontResolution()

    /**
     * When set to auto, fontSize scales depending on the size of the output.
     *
     * Providing a positive integer specifies the exact font size in points. All burn-in and DVB-Sub
     * font settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-fontsize)
     */
    public fun fontSize(): String? = unwrap(this).getFontSize()

    /**
     * Specifies the font outline color.
     *
     * This option is not valid for source captions that are either 608/embedded or Teletext. These
     * source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font
     * settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-outlinecolor)
     */
    public fun outlineColor(): String? = unwrap(this).getOutlineColor()

    /**
     * Specifies font outline size in pixels.
     *
     * This option is not valid for source captions that are either 608/embedded or Teletext. These
     * source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font
     * settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-outlinesize)
     */
    public fun outlineSize(): Number? = unwrap(this).getOutlineSize()

    /**
     * Specifies the color of the shadow cast by the captions.
     *
     * All burn-in and DVB-Sub font settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-shadowcolor)
     */
    public fun shadowColor(): String? = unwrap(this).getShadowColor()

    /**
     * Specifies the opacity of the shadow.
     *
     * 255 is opaque; 0 is transparent. Keeping this parameter blank is equivalent to setting it to
     * 0 (transparent). All burn-in and DVB-Sub font settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-shadowopacity)
     */
    public fun shadowOpacity(): Number? = unwrap(this).getShadowOpacity()

    /**
     * Specifies the horizontal offset of the shadow that is relative to the captions in pixels.
     *
     * A value of -2 would result in a shadow offset 2 pixels to the left. All burn-in and DVB-Sub
     * font settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-shadowxoffset)
     */
    public fun shadowXOffset(): Number? = unwrap(this).getShadowXOffset()

    /**
     * Specifies the vertical offset of the shadow that is relative to the captions in pixels.
     *
     * A value of -2 would result in a shadow offset 2 pixels above the text. All burn-in and
     * DVB-Sub font settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-shadowyoffset)
     */
    public fun shadowYOffset(): Number? = unwrap(this).getShadowYOffset()

    /**
     * Controls whether a fixed grid size is used to generate the output subtitles bitmap.
     *
     * This applies only to Teletext inputs and DVB-Sub/Burn-in outputs.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-teletextgridcontrol)
     */
    public fun teletextGridControl(): String? = unwrap(this).getTeletextGridControl()

    /**
     * Specifies the horizontal position of the captions relative to the left side of the output in
     * pixels.
     *
     * A value of 10 would result in the captions starting 10 pixels from the left of the output. If
     * no explicit xPosition is provided, the horizontal captions position is determined by the
     * alignment parameter. All burn-in and DVB-Sub font settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-xposition)
     */
    public fun xPosition(): Number? = unwrap(this).getXPosition()

    /**
     * Specifies the vertical position of the captions relative to the top of the output in pixels.
     *
     * A value of 10 would result in the captions starting 10 pixels from the top of the output. If
     * no explicit yPosition is provided, the captions are positioned towards the bottom of the output.
     * All burn-in and DVB-Sub font settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-yposition)
     */
    public fun yPosition(): Number? = unwrap(this).getYPosition()

    /**
     * A builder for [BurnInDestinationSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param alignment If no explicit xPosition or yPosition is provided, setting alignment to
       * centered places the captions at the bottom center of the output.
       * Similarly, setting a left alignment aligns captions to the bottom left of the output. If x
       * and y positions are specified in conjunction with the alignment parameter, the font is
       * justified (either left or centered) relative to those coordinates. Selecting "smart"
       * justification left-justifies live subtitles and center-justifies pre-recorded subtitles. All
       * burn-in and DVB-Sub font settings must match.
       */
      public fun alignment(alignment: String)

      /**
       * @param backgroundColor Specifies the color of the rectangle behind the captions.
       * All burn-in and DVB-Sub font settings must match.
       */
      public fun backgroundColor(backgroundColor: String)

      /**
       * @param backgroundOpacity Specifies the opacity of the background rectangle.
       * 255 is opaque; 0 is transparent. Keeping this parameter blank is equivalent to setting it
       * to 0 (transparent). All burn-in and DVB-Sub font settings must match.
       */
      public fun backgroundOpacity(backgroundOpacity: Number)

      /**
       * @param font The external font file that is used for captions burn-in.
       * The file extension must be .ttf or .tte. Although you can select output fonts for many
       * different types of input captions, embedded, STL, and Teletext sources use a strict grid
       * system. Using external fonts with these captions sources could cause an unexpected display of
       * proportional fonts. All burn-in and DVB-Sub font settings must match.
       */
      public fun font(font: IResolvable)

      /**
       * @param font The external font file that is used for captions burn-in.
       * The file extension must be .ttf or .tte. Although you can select output fonts for many
       * different types of input captions, embedded, STL, and Teletext sources use a strict grid
       * system. Using external fonts with these captions sources could cause an unexpected display of
       * proportional fonts. All burn-in and DVB-Sub font settings must match.
       */
      public fun font(font: InputLocationProperty)

      /**
       * @param font The external font file that is used for captions burn-in.
       * The file extension must be .ttf or .tte. Although you can select output fonts for many
       * different types of input captions, embedded, STL, and Teletext sources use a strict grid
       * system. Using external fonts with these captions sources could cause an unexpected display of
       * proportional fonts. All burn-in and DVB-Sub font settings must match.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("598a8f83dd8bb448689e6b1dce1eeab6686b5bed8a56f49049737c1eb08f2a6b")
      public fun font(font: InputLocationProperty.Builder.() -> Unit)

      /**
       * @param fontColor Specifies the color of the burned-in captions.
       * This option is not valid for source captions that are STL, 608/embedded, or Teletext. These
       * source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font
       * settings must match.
       */
      public fun fontColor(fontColor: String)

      /**
       * @param fontOpacity Specifies the opacity of the burned-in captions.
       * 255 is opaque; 0 is transparent. All burn-in and DVB-Sub font settings must match.
       */
      public fun fontOpacity(fontOpacity: Number)

      /**
       * @param fontResolution The font resolution in DPI (dots per inch).
       * The default is 96 dpi. All burn-in and DVB-Sub font settings must match.
       */
      public fun fontResolution(fontResolution: Number)

      /**
       * @param fontSize When set to auto, fontSize scales depending on the size of the output.
       * Providing a positive integer specifies the exact font size in points. All burn-in and
       * DVB-Sub font settings must match.
       */
      public fun fontSize(fontSize: String)

      /**
       * @param outlineColor Specifies the font outline color.
       * This option is not valid for source captions that are either 608/embedded or Teletext.
       * These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub
       * font settings must match.
       */
      public fun outlineColor(outlineColor: String)

      /**
       * @param outlineSize Specifies font outline size in pixels.
       * This option is not valid for source captions that are either 608/embedded or Teletext.
       * These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub
       * font settings must match.
       */
      public fun outlineSize(outlineSize: Number)

      /**
       * @param shadowColor Specifies the color of the shadow cast by the captions.
       * All burn-in and DVB-Sub font settings must match.
       */
      public fun shadowColor(shadowColor: String)

      /**
       * @param shadowOpacity Specifies the opacity of the shadow.
       * 255 is opaque; 0 is transparent. Keeping this parameter blank is equivalent to setting it
       * to 0 (transparent). All burn-in and DVB-Sub font settings must match.
       */
      public fun shadowOpacity(shadowOpacity: Number)

      /**
       * @param shadowXOffset Specifies the horizontal offset of the shadow that is relative to the
       * captions in pixels.
       * A value of -2 would result in a shadow offset 2 pixels to the left. All burn-in and DVB-Sub
       * font settings must match.
       */
      public fun shadowXOffset(shadowXOffset: Number)

      /**
       * @param shadowYOffset Specifies the vertical offset of the shadow that is relative to the
       * captions in pixels.
       * A value of -2 would result in a shadow offset 2 pixels above the text. All burn-in and
       * DVB-Sub font settings must match.
       */
      public fun shadowYOffset(shadowYOffset: Number)

      /**
       * @param teletextGridControl Controls whether a fixed grid size is used to generate the
       * output subtitles bitmap.
       * This applies only to Teletext inputs and DVB-Sub/Burn-in outputs.
       */
      public fun teletextGridControl(teletextGridControl: String)

      /**
       * @param xPosition Specifies the horizontal position of the captions relative to the left
       * side of the output in pixels.
       * A value of 10 would result in the captions starting 10 pixels from the left of the output.
       * If no explicit xPosition is provided, the horizontal captions position is determined by the
       * alignment parameter. All burn-in and DVB-Sub font settings must match.
       */
      public fun xPosition(xPosition: Number)

      /**
       * @param yPosition Specifies the vertical position of the captions relative to the top of the
       * output in pixels.
       * A value of 10 would result in the captions starting 10 pixels from the top of the output.
       * If no explicit yPosition is provided, the captions are positioned towards the bottom of the
       * output. All burn-in and DVB-Sub font settings must match.
       */
      public fun yPosition(yPosition: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.BurnInDestinationSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.BurnInDestinationSettingsProperty.builder()

      /**
       * @param alignment If no explicit xPosition or yPosition is provided, setting alignment to
       * centered places the captions at the bottom center of the output.
       * Similarly, setting a left alignment aligns captions to the bottom left of the output. If x
       * and y positions are specified in conjunction with the alignment parameter, the font is
       * justified (either left or centered) relative to those coordinates. Selecting "smart"
       * justification left-justifies live subtitles and center-justifies pre-recorded subtitles. All
       * burn-in and DVB-Sub font settings must match.
       */
      override fun alignment(alignment: String) {
        cdkBuilder.alignment(alignment)
      }

      /**
       * @param backgroundColor Specifies the color of the rectangle behind the captions.
       * All burn-in and DVB-Sub font settings must match.
       */
      override fun backgroundColor(backgroundColor: String) {
        cdkBuilder.backgroundColor(backgroundColor)
      }

      /**
       * @param backgroundOpacity Specifies the opacity of the background rectangle.
       * 255 is opaque; 0 is transparent. Keeping this parameter blank is equivalent to setting it
       * to 0 (transparent). All burn-in and DVB-Sub font settings must match.
       */
      override fun backgroundOpacity(backgroundOpacity: Number) {
        cdkBuilder.backgroundOpacity(backgroundOpacity)
      }

      /**
       * @param font The external font file that is used for captions burn-in.
       * The file extension must be .ttf or .tte. Although you can select output fonts for many
       * different types of input captions, embedded, STL, and Teletext sources use a strict grid
       * system. Using external fonts with these captions sources could cause an unexpected display of
       * proportional fonts. All burn-in and DVB-Sub font settings must match.
       */
      override fun font(font: IResolvable) {
        cdkBuilder.font(font.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param font The external font file that is used for captions burn-in.
       * The file extension must be .ttf or .tte. Although you can select output fonts for many
       * different types of input captions, embedded, STL, and Teletext sources use a strict grid
       * system. Using external fonts with these captions sources could cause an unexpected display of
       * proportional fonts. All burn-in and DVB-Sub font settings must match.
       */
      override fun font(font: InputLocationProperty) {
        cdkBuilder.font(font.let(InputLocationProperty.Companion::unwrap))
      }

      /**
       * @param font The external font file that is used for captions burn-in.
       * The file extension must be .ttf or .tte. Although you can select output fonts for many
       * different types of input captions, embedded, STL, and Teletext sources use a strict grid
       * system. Using external fonts with these captions sources could cause an unexpected display of
       * proportional fonts. All burn-in and DVB-Sub font settings must match.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("598a8f83dd8bb448689e6b1dce1eeab6686b5bed8a56f49049737c1eb08f2a6b")
      override fun font(font: InputLocationProperty.Builder.() -> Unit): Unit =
          font(InputLocationProperty(font))

      /**
       * @param fontColor Specifies the color of the burned-in captions.
       * This option is not valid for source captions that are STL, 608/embedded, or Teletext. These
       * source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font
       * settings must match.
       */
      override fun fontColor(fontColor: String) {
        cdkBuilder.fontColor(fontColor)
      }

      /**
       * @param fontOpacity Specifies the opacity of the burned-in captions.
       * 255 is opaque; 0 is transparent. All burn-in and DVB-Sub font settings must match.
       */
      override fun fontOpacity(fontOpacity: Number) {
        cdkBuilder.fontOpacity(fontOpacity)
      }

      /**
       * @param fontResolution The font resolution in DPI (dots per inch).
       * The default is 96 dpi. All burn-in and DVB-Sub font settings must match.
       */
      override fun fontResolution(fontResolution: Number) {
        cdkBuilder.fontResolution(fontResolution)
      }

      /**
       * @param fontSize When set to auto, fontSize scales depending on the size of the output.
       * Providing a positive integer specifies the exact font size in points. All burn-in and
       * DVB-Sub font settings must match.
       */
      override fun fontSize(fontSize: String) {
        cdkBuilder.fontSize(fontSize)
      }

      /**
       * @param outlineColor Specifies the font outline color.
       * This option is not valid for source captions that are either 608/embedded or Teletext.
       * These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub
       * font settings must match.
       */
      override fun outlineColor(outlineColor: String) {
        cdkBuilder.outlineColor(outlineColor)
      }

      /**
       * @param outlineSize Specifies font outline size in pixels.
       * This option is not valid for source captions that are either 608/embedded or Teletext.
       * These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub
       * font settings must match.
       */
      override fun outlineSize(outlineSize: Number) {
        cdkBuilder.outlineSize(outlineSize)
      }

      /**
       * @param shadowColor Specifies the color of the shadow cast by the captions.
       * All burn-in and DVB-Sub font settings must match.
       */
      override fun shadowColor(shadowColor: String) {
        cdkBuilder.shadowColor(shadowColor)
      }

      /**
       * @param shadowOpacity Specifies the opacity of the shadow.
       * 255 is opaque; 0 is transparent. Keeping this parameter blank is equivalent to setting it
       * to 0 (transparent). All burn-in and DVB-Sub font settings must match.
       */
      override fun shadowOpacity(shadowOpacity: Number) {
        cdkBuilder.shadowOpacity(shadowOpacity)
      }

      /**
       * @param shadowXOffset Specifies the horizontal offset of the shadow that is relative to the
       * captions in pixels.
       * A value of -2 would result in a shadow offset 2 pixels to the left. All burn-in and DVB-Sub
       * font settings must match.
       */
      override fun shadowXOffset(shadowXOffset: Number) {
        cdkBuilder.shadowXOffset(shadowXOffset)
      }

      /**
       * @param shadowYOffset Specifies the vertical offset of the shadow that is relative to the
       * captions in pixels.
       * A value of -2 would result in a shadow offset 2 pixels above the text. All burn-in and
       * DVB-Sub font settings must match.
       */
      override fun shadowYOffset(shadowYOffset: Number) {
        cdkBuilder.shadowYOffset(shadowYOffset)
      }

      /**
       * @param teletextGridControl Controls whether a fixed grid size is used to generate the
       * output subtitles bitmap.
       * This applies only to Teletext inputs and DVB-Sub/Burn-in outputs.
       */
      override fun teletextGridControl(teletextGridControl: String) {
        cdkBuilder.teletextGridControl(teletextGridControl)
      }

      /**
       * @param xPosition Specifies the horizontal position of the captions relative to the left
       * side of the output in pixels.
       * A value of 10 would result in the captions starting 10 pixels from the left of the output.
       * If no explicit xPosition is provided, the horizontal captions position is determined by the
       * alignment parameter. All burn-in and DVB-Sub font settings must match.
       */
      override fun xPosition(xPosition: Number) {
        cdkBuilder.xPosition(xPosition)
      }

      /**
       * @param yPosition Specifies the vertical position of the captions relative to the top of the
       * output in pixels.
       * A value of 10 would result in the captions starting 10 pixels from the top of the output.
       * If no explicit yPosition is provided, the captions are positioned towards the bottom of the
       * output. All burn-in and DVB-Sub font settings must match.
       */
      override fun yPosition(yPosition: Number) {
        cdkBuilder.yPosition(yPosition)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.BurnInDestinationSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.BurnInDestinationSettingsProperty,
    ) : CdkObject(cdkObject),
        BurnInDestinationSettingsProperty {
      /**
       * If no explicit xPosition or yPosition is provided, setting alignment to centered places the
       * captions at the bottom center of the output.
       *
       * Similarly, setting a left alignment aligns captions to the bottom left of the output. If x
       * and y positions are specified in conjunction with the alignment parameter, the font is
       * justified (either left or centered) relative to those coordinates. Selecting "smart"
       * justification left-justifies live subtitles and center-justifies pre-recorded subtitles. All
       * burn-in and DVB-Sub font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-alignment)
       */
      override fun alignment(): String? = unwrap(this).getAlignment()

      /**
       * Specifies the color of the rectangle behind the captions.
       *
       * All burn-in and DVB-Sub font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-backgroundcolor)
       */
      override fun backgroundColor(): String? = unwrap(this).getBackgroundColor()

      /**
       * Specifies the opacity of the background rectangle.
       *
       * 255 is opaque; 0 is transparent. Keeping this parameter blank is equivalent to setting it
       * to 0 (transparent). All burn-in and DVB-Sub font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-backgroundopacity)
       */
      override fun backgroundOpacity(): Number? = unwrap(this).getBackgroundOpacity()

      /**
       * The external font file that is used for captions burn-in.
       *
       * The file extension must be .ttf or .tte. Although you can select output fonts for many
       * different types of input captions, embedded, STL, and Teletext sources use a strict grid
       * system. Using external fonts with these captions sources could cause an unexpected display of
       * proportional fonts. All burn-in and DVB-Sub font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-font)
       */
      override fun font(): Any? = unwrap(this).getFont()

      /**
       * Specifies the color of the burned-in captions.
       *
       * This option is not valid for source captions that are STL, 608/embedded, or Teletext. These
       * source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font
       * settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-fontcolor)
       */
      override fun fontColor(): String? = unwrap(this).getFontColor()

      /**
       * Specifies the opacity of the burned-in captions.
       *
       * 255 is opaque; 0 is transparent. All burn-in and DVB-Sub font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-fontopacity)
       */
      override fun fontOpacity(): Number? = unwrap(this).getFontOpacity()

      /**
       * The font resolution in DPI (dots per inch).
       *
       * The default is 96 dpi. All burn-in and DVB-Sub font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-fontresolution)
       */
      override fun fontResolution(): Number? = unwrap(this).getFontResolution()

      /**
       * When set to auto, fontSize scales depending on the size of the output.
       *
       * Providing a positive integer specifies the exact font size in points. All burn-in and
       * DVB-Sub font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-fontsize)
       */
      override fun fontSize(): String? = unwrap(this).getFontSize()

      /**
       * Specifies the font outline color.
       *
       * This option is not valid for source captions that are either 608/embedded or Teletext.
       * These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub
       * font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-outlinecolor)
       */
      override fun outlineColor(): String? = unwrap(this).getOutlineColor()

      /**
       * Specifies font outline size in pixels.
       *
       * This option is not valid for source captions that are either 608/embedded or Teletext.
       * These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub
       * font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-outlinesize)
       */
      override fun outlineSize(): Number? = unwrap(this).getOutlineSize()

      /**
       * Specifies the color of the shadow cast by the captions.
       *
       * All burn-in and DVB-Sub font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-shadowcolor)
       */
      override fun shadowColor(): String? = unwrap(this).getShadowColor()

      /**
       * Specifies the opacity of the shadow.
       *
       * 255 is opaque; 0 is transparent. Keeping this parameter blank is equivalent to setting it
       * to 0 (transparent). All burn-in and DVB-Sub font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-shadowopacity)
       */
      override fun shadowOpacity(): Number? = unwrap(this).getShadowOpacity()

      /**
       * Specifies the horizontal offset of the shadow that is relative to the captions in pixels.
       *
       * A value of -2 would result in a shadow offset 2 pixels to the left. All burn-in and DVB-Sub
       * font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-shadowxoffset)
       */
      override fun shadowXOffset(): Number? = unwrap(this).getShadowXOffset()

      /**
       * Specifies the vertical offset of the shadow that is relative to the captions in pixels.
       *
       * A value of -2 would result in a shadow offset 2 pixels above the text. All burn-in and
       * DVB-Sub font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-shadowyoffset)
       */
      override fun shadowYOffset(): Number? = unwrap(this).getShadowYOffset()

      /**
       * Controls whether a fixed grid size is used to generate the output subtitles bitmap.
       *
       * This applies only to Teletext inputs and DVB-Sub/Burn-in outputs.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-teletextgridcontrol)
       */
      override fun teletextGridControl(): String? = unwrap(this).getTeletextGridControl()

      /**
       * Specifies the horizontal position of the captions relative to the left side of the output
       * in pixels.
       *
       * A value of 10 would result in the captions starting 10 pixels from the left of the output.
       * If no explicit xPosition is provided, the horizontal captions position is determined by the
       * alignment parameter. All burn-in and DVB-Sub font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-xposition)
       */
      override fun xPosition(): Number? = unwrap(this).getXPosition()

      /**
       * Specifies the vertical position of the captions relative to the top of the output in
       * pixels.
       *
       * A value of 10 would result in the captions starting 10 pixels from the top of the output.
       * If no explicit yPosition is provided, the captions are positioned towards the bottom of the
       * output. All burn-in and DVB-Sub font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-yposition)
       */
      override fun yPosition(): Number? = unwrap(this).getYPosition()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          BurnInDestinationSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.BurnInDestinationSettingsProperty):
          BurnInDestinationSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          BurnInDestinationSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: BurnInDestinationSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.BurnInDestinationSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.BurnInDestinationSettingsProperty
    }
  }

  /**
   * The encoding information for output captions.
   *
   * The parent of this entity is EncoderSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * CaptionDescriptionProperty captionDescriptionProperty = CaptionDescriptionProperty.builder()
   * .accessibility("accessibility")
   * .captionDashRoles(List.of("captionDashRoles"))
   * .captionSelectorName("captionSelectorName")
   * .destinationSettings(CaptionDestinationSettingsProperty.builder()
   * .aribDestinationSettings(AribDestinationSettingsProperty.builder().build())
   * .burnInDestinationSettings(BurnInDestinationSettingsProperty.builder()
   * .alignment("alignment")
   * .backgroundColor("backgroundColor")
   * .backgroundOpacity(123)
   * .font(InputLocationProperty.builder()
   * .passwordParam("passwordParam")
   * .uri("uri")
   * .username("username")
   * .build())
   * .fontColor("fontColor")
   * .fontOpacity(123)
   * .fontResolution(123)
   * .fontSize("fontSize")
   * .outlineColor("outlineColor")
   * .outlineSize(123)
   * .shadowColor("shadowColor")
   * .shadowOpacity(123)
   * .shadowXOffset(123)
   * .shadowYOffset(123)
   * .teletextGridControl("teletextGridControl")
   * .xPosition(123)
   * .yPosition(123)
   * .build())
   * .dvbSubDestinationSettings(DvbSubDestinationSettingsProperty.builder()
   * .alignment("alignment")
   * .backgroundColor("backgroundColor")
   * .backgroundOpacity(123)
   * .font(InputLocationProperty.builder()
   * .passwordParam("passwordParam")
   * .uri("uri")
   * .username("username")
   * .build())
   * .fontColor("fontColor")
   * .fontOpacity(123)
   * .fontResolution(123)
   * .fontSize("fontSize")
   * .outlineColor("outlineColor")
   * .outlineSize(123)
   * .shadowColor("shadowColor")
   * .shadowOpacity(123)
   * .shadowXOffset(123)
   * .shadowYOffset(123)
   * .teletextGridControl("teletextGridControl")
   * .xPosition(123)
   * .yPosition(123)
   * .build())
   * .ebuTtDDestinationSettings(EbuTtDDestinationSettingsProperty.builder()
   * .copyrightHolder("copyrightHolder")
   * .fillLineGap("fillLineGap")
   * .fontFamily("fontFamily")
   * .styleControl("styleControl")
   * .build())
   * .embeddedDestinationSettings(EmbeddedDestinationSettingsProperty.builder().build())
   * .embeddedPlusScte20DestinationSettings(EmbeddedPlusScte20DestinationSettingsProperty.builder().build())
   * .rtmpCaptionInfoDestinationSettings(RtmpCaptionInfoDestinationSettingsProperty.builder().build())
   * .scte20PlusEmbeddedDestinationSettings(Scte20PlusEmbeddedDestinationSettingsProperty.builder().build())
   * .scte27DestinationSettings(Scte27DestinationSettingsProperty.builder().build())
   * .smpteTtDestinationSettings(SmpteTtDestinationSettingsProperty.builder().build())
   * .teletextDestinationSettings(TeletextDestinationSettingsProperty.builder().build())
   * .ttmlDestinationSettings(TtmlDestinationSettingsProperty.builder()
   * .styleControl("styleControl")
   * .build())
   * .webvttDestinationSettings(WebvttDestinationSettingsProperty.builder()
   * .styleControl("styleControl")
   * .build())
   * .build())
   * .dvbDashAccessibility("dvbDashAccessibility")
   * .languageCode("languageCode")
   * .languageDescription("languageDescription")
   * .name("name")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondescription.html)
   */
  public interface CaptionDescriptionProperty {
    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondescription.html#cfn-medialive-channel-captiondescription-accessibility)
     */
    public fun accessibility(): String? = unwrap(this).getAccessibility()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondescription.html#cfn-medialive-channel-captiondescription-captiondashroles)
     */
    public fun captionDashRoles(): List = unwrap(this).getCaptionDashRoles() ?: emptyList()

    /**
     * Specifies which input captions selector to use as a captions source when generating output
     * captions.
     *
     * This field should match a captionSelector name.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondescription.html#cfn-medialive-channel-captiondescription-captionselectorname)
     */
    public fun captionSelectorName(): String? = unwrap(this).getCaptionSelectorName()

    /**
     * Additional settings for a captions destination that depend on the destination type.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondescription.html#cfn-medialive-channel-captiondescription-destinationsettings)
     */
    public fun destinationSettings(): Any? = unwrap(this).getDestinationSettings()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondescription.html#cfn-medialive-channel-captiondescription-dvbdashaccessibility)
     */
    public fun dvbDashAccessibility(): String? = unwrap(this).getDvbDashAccessibility()

    /**
     * An ISO 639-2 three-digit code.
     *
     * For more information, see http://www.loc.gov/standards/iso639-2/.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondescription.html#cfn-medialive-channel-captiondescription-languagecode)
     */
    public fun languageCode(): String? = unwrap(this).getLanguageCode()

    /**
     * Human-readable information to indicate the captions that are available for players (for
     * example, English or Spanish).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondescription.html#cfn-medialive-channel-captiondescription-languagedescription)
     */
    public fun languageDescription(): String? = unwrap(this).getLanguageDescription()

    /**
     * The name of the captions description.
     *
     * The name is used to associate a captions description with an output. Names must be unique
     * within a channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondescription.html#cfn-medialive-channel-captiondescription-name)
     */
    public fun name(): String? = unwrap(this).getName()

    /**
     * A builder for [CaptionDescriptionProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param accessibility the value to be set.
       */
      public fun accessibility(accessibility: String)

      /**
       * @param captionDashRoles the value to be set.
       */
      public fun captionDashRoles(captionDashRoles: List)

      /**
       * @param captionDashRoles the value to be set.
       */
      public fun captionDashRoles(vararg captionDashRoles: String)

      /**
       * @param captionSelectorName Specifies which input captions selector to use as a captions
       * source when generating output captions.
       * This field should match a captionSelector name.
       */
      public fun captionSelectorName(captionSelectorName: String)

      /**
       * @param destinationSettings Additional settings for a captions destination that depend on
       * the destination type.
       */
      public fun destinationSettings(destinationSettings: IResolvable)

      /**
       * @param destinationSettings Additional settings for a captions destination that depend on
       * the destination type.
       */
      public fun destinationSettings(destinationSettings: CaptionDestinationSettingsProperty)

      /**
       * @param destinationSettings Additional settings for a captions destination that depend on
       * the destination type.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("0f1770abcbc58775ad8bd56af514fbcdc88ca0b96ef4da293ace57be6c40f7e2")
      public
          fun destinationSettings(destinationSettings: CaptionDestinationSettingsProperty.Builder.() -> Unit)

      /**
       * @param dvbDashAccessibility the value to be set.
       */
      public fun dvbDashAccessibility(dvbDashAccessibility: String)

      /**
       * @param languageCode An ISO 639-2 three-digit code.
       * For more information, see http://www.loc.gov/standards/iso639-2/.
       */
      public fun languageCode(languageCode: String)

      /**
       * @param languageDescription Human-readable information to indicate the captions that are
       * available for players (for example, English or Spanish).
       */
      public fun languageDescription(languageDescription: String)

      /**
       * @param name The name of the captions description.
       * The name is used to associate a captions description with an output. Names must be unique
       * within a channel.
       */
      public fun name(name: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionDescriptionProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionDescriptionProperty.builder()

      /**
       * @param accessibility the value to be set.
       */
      override fun accessibility(accessibility: String) {
        cdkBuilder.accessibility(accessibility)
      }

      /**
       * @param captionDashRoles the value to be set.
       */
      override fun captionDashRoles(captionDashRoles: List) {
        cdkBuilder.captionDashRoles(captionDashRoles)
      }

      /**
       * @param captionDashRoles the value to be set.
       */
      override fun captionDashRoles(vararg captionDashRoles: String): Unit =
          captionDashRoles(captionDashRoles.toList())

      /**
       * @param captionSelectorName Specifies which input captions selector to use as a captions
       * source when generating output captions.
       * This field should match a captionSelector name.
       */
      override fun captionSelectorName(captionSelectorName: String) {
        cdkBuilder.captionSelectorName(captionSelectorName)
      }

      /**
       * @param destinationSettings Additional settings for a captions destination that depend on
       * the destination type.
       */
      override fun destinationSettings(destinationSettings: IResolvable) {
        cdkBuilder.destinationSettings(destinationSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param destinationSettings Additional settings for a captions destination that depend on
       * the destination type.
       */
      override fun destinationSettings(destinationSettings: CaptionDestinationSettingsProperty) {
        cdkBuilder.destinationSettings(destinationSettings.let(CaptionDestinationSettingsProperty.Companion::unwrap))
      }

      /**
       * @param destinationSettings Additional settings for a captions destination that depend on
       * the destination type.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("0f1770abcbc58775ad8bd56af514fbcdc88ca0b96ef4da293ace57be6c40f7e2")
      override
          fun destinationSettings(destinationSettings: CaptionDestinationSettingsProperty.Builder.() -> Unit):
          Unit = destinationSettings(CaptionDestinationSettingsProperty(destinationSettings))

      /**
       * @param dvbDashAccessibility the value to be set.
       */
      override fun dvbDashAccessibility(dvbDashAccessibility: String) {
        cdkBuilder.dvbDashAccessibility(dvbDashAccessibility)
      }

      /**
       * @param languageCode An ISO 639-2 three-digit code.
       * For more information, see http://www.loc.gov/standards/iso639-2/.
       */
      override fun languageCode(languageCode: String) {
        cdkBuilder.languageCode(languageCode)
      }

      /**
       * @param languageDescription Human-readable information to indicate the captions that are
       * available for players (for example, English or Spanish).
       */
      override fun languageDescription(languageDescription: String) {
        cdkBuilder.languageDescription(languageDescription)
      }

      /**
       * @param name The name of the captions description.
       * The name is used to associate a captions description with an output. Names must be unique
       * within a channel.
       */
      override fun name(name: String) {
        cdkBuilder.name(name)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionDescriptionProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.CaptionDescriptionProperty,
    ) : CdkObject(cdkObject),
        CaptionDescriptionProperty {
      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondescription.html#cfn-medialive-channel-captiondescription-accessibility)
       */
      override fun accessibility(): String? = unwrap(this).getAccessibility()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondescription.html#cfn-medialive-channel-captiondescription-captiondashroles)
       */
      override fun captionDashRoles(): List = unwrap(this).getCaptionDashRoles() ?:
          emptyList()

      /**
       * Specifies which input captions selector to use as a captions source when generating output
       * captions.
       *
       * This field should match a captionSelector name.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondescription.html#cfn-medialive-channel-captiondescription-captionselectorname)
       */
      override fun captionSelectorName(): String? = unwrap(this).getCaptionSelectorName()

      /**
       * Additional settings for a captions destination that depend on the destination type.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondescription.html#cfn-medialive-channel-captiondescription-destinationsettings)
       */
      override fun destinationSettings(): Any? = unwrap(this).getDestinationSettings()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondescription.html#cfn-medialive-channel-captiondescription-dvbdashaccessibility)
       */
      override fun dvbDashAccessibility(): String? = unwrap(this).getDvbDashAccessibility()

      /**
       * An ISO 639-2 three-digit code.
       *
       * For more information, see http://www.loc.gov/standards/iso639-2/.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondescription.html#cfn-medialive-channel-captiondescription-languagecode)
       */
      override fun languageCode(): String? = unwrap(this).getLanguageCode()

      /**
       * Human-readable information to indicate the captions that are available for players (for
       * example, English or Spanish).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondescription.html#cfn-medialive-channel-captiondescription-languagedescription)
       */
      override fun languageDescription(): String? = unwrap(this).getLanguageDescription()

      /**
       * The name of the captions description.
       *
       * The name is used to associate a captions description with an output. Names must be unique
       * within a channel.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondescription.html#cfn-medialive-channel-captiondescription-name)
       */
      override fun name(): String? = unwrap(this).getName()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): CaptionDescriptionProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.CaptionDescriptionProperty):
          CaptionDescriptionProperty = CdkObjectWrappers.wrap(cdkObject) as?
          CaptionDescriptionProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: CaptionDescriptionProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionDescriptionProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionDescriptionProperty
    }
  }

  /**
   * The configuration of one captions encode in the output.
   *
   * The parent of this entity is CaptionDescription.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * CaptionDestinationSettingsProperty captionDestinationSettingsProperty =
   * CaptionDestinationSettingsProperty.builder()
   * .aribDestinationSettings(AribDestinationSettingsProperty.builder().build())
   * .burnInDestinationSettings(BurnInDestinationSettingsProperty.builder()
   * .alignment("alignment")
   * .backgroundColor("backgroundColor")
   * .backgroundOpacity(123)
   * .font(InputLocationProperty.builder()
   * .passwordParam("passwordParam")
   * .uri("uri")
   * .username("username")
   * .build())
   * .fontColor("fontColor")
   * .fontOpacity(123)
   * .fontResolution(123)
   * .fontSize("fontSize")
   * .outlineColor("outlineColor")
   * .outlineSize(123)
   * .shadowColor("shadowColor")
   * .shadowOpacity(123)
   * .shadowXOffset(123)
   * .shadowYOffset(123)
   * .teletextGridControl("teletextGridControl")
   * .xPosition(123)
   * .yPosition(123)
   * .build())
   * .dvbSubDestinationSettings(DvbSubDestinationSettingsProperty.builder()
   * .alignment("alignment")
   * .backgroundColor("backgroundColor")
   * .backgroundOpacity(123)
   * .font(InputLocationProperty.builder()
   * .passwordParam("passwordParam")
   * .uri("uri")
   * .username("username")
   * .build())
   * .fontColor("fontColor")
   * .fontOpacity(123)
   * .fontResolution(123)
   * .fontSize("fontSize")
   * .outlineColor("outlineColor")
   * .outlineSize(123)
   * .shadowColor("shadowColor")
   * .shadowOpacity(123)
   * .shadowXOffset(123)
   * .shadowYOffset(123)
   * .teletextGridControl("teletextGridControl")
   * .xPosition(123)
   * .yPosition(123)
   * .build())
   * .ebuTtDDestinationSettings(EbuTtDDestinationSettingsProperty.builder()
   * .copyrightHolder("copyrightHolder")
   * .fillLineGap("fillLineGap")
   * .fontFamily("fontFamily")
   * .styleControl("styleControl")
   * .build())
   * .embeddedDestinationSettings(EmbeddedDestinationSettingsProperty.builder().build())
   * .embeddedPlusScte20DestinationSettings(EmbeddedPlusScte20DestinationSettingsProperty.builder().build())
   * .rtmpCaptionInfoDestinationSettings(RtmpCaptionInfoDestinationSettingsProperty.builder().build())
   * .scte20PlusEmbeddedDestinationSettings(Scte20PlusEmbeddedDestinationSettingsProperty.builder().build())
   * .scte27DestinationSettings(Scte27DestinationSettingsProperty.builder().build())
   * .smpteTtDestinationSettings(SmpteTtDestinationSettingsProperty.builder().build())
   * .teletextDestinationSettings(TeletextDestinationSettingsProperty.builder().build())
   * .ttmlDestinationSettings(TtmlDestinationSettingsProperty.builder()
   * .styleControl("styleControl")
   * .build())
   * .webvttDestinationSettings(WebvttDestinationSettingsProperty.builder()
   * .styleControl("styleControl")
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html)
   */
  public interface CaptionDestinationSettingsProperty {
    /**
     * The configuration of one ARIB captions encode in the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-aribdestinationsettings)
     */
    public fun aribDestinationSettings(): Any? = unwrap(this).getAribDestinationSettings()

    /**
     * The configuration of one burn-in captions encode in the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-burnindestinationsettings)
     */
    public fun burnInDestinationSettings(): Any? = unwrap(this).getBurnInDestinationSettings()

    /**
     * The configuration of one DVB Sub captions encode in the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-dvbsubdestinationsettings)
     */
    public fun dvbSubDestinationSettings(): Any? = unwrap(this).getDvbSubDestinationSettings()

    /**
     * Settings for EBU-TT captions in the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-ebuttddestinationsettings)
     */
    public fun ebuTtDDestinationSettings(): Any? = unwrap(this).getEbuTtDDestinationSettings()

    /**
     * The configuration of one embedded captions encode in the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-embeddeddestinationsettings)
     */
    public fun embeddedDestinationSettings(): Any? = unwrap(this).getEmbeddedDestinationSettings()

    /**
     * The configuration of one embedded plus SCTE-20 captions encode in the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-embeddedplusscte20destinationsettings)
     */
    public fun embeddedPlusScte20DestinationSettings(): Any? =
        unwrap(this).getEmbeddedPlusScte20DestinationSettings()

    /**
     * The configuration of one RTMPCaptionInfo captions encode in the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-rtmpcaptioninfodestinationsettings)
     */
    public fun rtmpCaptionInfoDestinationSettings(): Any? =
        unwrap(this).getRtmpCaptionInfoDestinationSettings()

    /**
     * The configuration of one SCTE20 plus embedded captions encode in the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-scte20plusembeddeddestinationsettings)
     */
    public fun scte20PlusEmbeddedDestinationSettings(): Any? =
        unwrap(this).getScte20PlusEmbeddedDestinationSettings()

    /**
     * The configuration of one SCTE-27 captions encode in the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-scte27destinationsettings)
     */
    public fun scte27DestinationSettings(): Any? = unwrap(this).getScte27DestinationSettings()

    /**
     * The configuration of one SMPTE-TT captions encode in the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-smptettdestinationsettings)
     */
    public fun smpteTtDestinationSettings(): Any? = unwrap(this).getSmpteTtDestinationSettings()

    /**
     * The configuration of one Teletext captions encode in the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-teletextdestinationsettings)
     */
    public fun teletextDestinationSettings(): Any? = unwrap(this).getTeletextDestinationSettings()

    /**
     * The configuration of one TTML captions encode in the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-ttmldestinationsettings)
     */
    public fun ttmlDestinationSettings(): Any? = unwrap(this).getTtmlDestinationSettings()

    /**
     * The configuration of one WebVTT captions encode in the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-webvttdestinationsettings)
     */
    public fun webvttDestinationSettings(): Any? = unwrap(this).getWebvttDestinationSettings()

    /**
     * A builder for [CaptionDestinationSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param aribDestinationSettings The configuration of one ARIB captions encode in the output.
       */
      public fun aribDestinationSettings(aribDestinationSettings: IResolvable)

      /**
       * @param aribDestinationSettings The configuration of one ARIB captions encode in the output.
       */
      public fun aribDestinationSettings(aribDestinationSettings: AribDestinationSettingsProperty)

      /**
       * @param aribDestinationSettings The configuration of one ARIB captions encode in the output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("9924425c9a3a1b178f1a0a461ae690ba282649b6b96300d474bf7e78f01160cb")
      public
          fun aribDestinationSettings(aribDestinationSettings: AribDestinationSettingsProperty.Builder.() -> Unit)

      /**
       * @param burnInDestinationSettings The configuration of one burn-in captions encode in the
       * output.
       */
      public fun burnInDestinationSettings(burnInDestinationSettings: IResolvable)

      /**
       * @param burnInDestinationSettings The configuration of one burn-in captions encode in the
       * output.
       */
      public
          fun burnInDestinationSettings(burnInDestinationSettings: BurnInDestinationSettingsProperty)

      /**
       * @param burnInDestinationSettings The configuration of one burn-in captions encode in the
       * output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("c1ab6db43caec45221944294f84565ddf5860051552bce6ec66c12ba63154755")
      public
          fun burnInDestinationSettings(burnInDestinationSettings: BurnInDestinationSettingsProperty.Builder.() -> Unit)

      /**
       * @param dvbSubDestinationSettings The configuration of one DVB Sub captions encode in the
       * output.
       */
      public fun dvbSubDestinationSettings(dvbSubDestinationSettings: IResolvable)

      /**
       * @param dvbSubDestinationSettings The configuration of one DVB Sub captions encode in the
       * output.
       */
      public
          fun dvbSubDestinationSettings(dvbSubDestinationSettings: DvbSubDestinationSettingsProperty)

      /**
       * @param dvbSubDestinationSettings The configuration of one DVB Sub captions encode in the
       * output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("cfd24d60c5cf9a28eed30c83dc757a614b6bf038e55c065ef282f49768a0be59")
      public
          fun dvbSubDestinationSettings(dvbSubDestinationSettings: DvbSubDestinationSettingsProperty.Builder.() -> Unit)

      /**
       * @param ebuTtDDestinationSettings Settings for EBU-TT captions in the output.
       */
      public fun ebuTtDDestinationSettings(ebuTtDDestinationSettings: IResolvable)

      /**
       * @param ebuTtDDestinationSettings Settings for EBU-TT captions in the output.
       */
      public
          fun ebuTtDDestinationSettings(ebuTtDDestinationSettings: EbuTtDDestinationSettingsProperty)

      /**
       * @param ebuTtDDestinationSettings Settings for EBU-TT captions in the output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("5cc852a803c72bf30f5a1f47db88388014afb7d236a5d33e491f1b4c301cee6f")
      public
          fun ebuTtDDestinationSettings(ebuTtDDestinationSettings: EbuTtDDestinationSettingsProperty.Builder.() -> Unit)

      /**
       * @param embeddedDestinationSettings The configuration of one embedded captions encode in the
       * output.
       */
      public fun embeddedDestinationSettings(embeddedDestinationSettings: IResolvable)

      /**
       * @param embeddedDestinationSettings The configuration of one embedded captions encode in the
       * output.
       */
      public
          fun embeddedDestinationSettings(embeddedDestinationSettings: EmbeddedDestinationSettingsProperty)

      /**
       * @param embeddedDestinationSettings The configuration of one embedded captions encode in the
       * output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("1ef1e9387047b8b7c83b7cb13467485cd2fe653e2e1eb711c5b0fe251ca08625")
      public
          fun embeddedDestinationSettings(embeddedDestinationSettings: EmbeddedDestinationSettingsProperty.Builder.() -> Unit)

      /**
       * @param embeddedPlusScte20DestinationSettings The configuration of one embedded plus SCTE-20
       * captions encode in the output.
       */
      public
          fun embeddedPlusScte20DestinationSettings(embeddedPlusScte20DestinationSettings: IResolvable)

      /**
       * @param embeddedPlusScte20DestinationSettings The configuration of one embedded plus SCTE-20
       * captions encode in the output.
       */
      public
          fun embeddedPlusScte20DestinationSettings(embeddedPlusScte20DestinationSettings: EmbeddedPlusScte20DestinationSettingsProperty)

      /**
       * @param embeddedPlusScte20DestinationSettings The configuration of one embedded plus SCTE-20
       * captions encode in the output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("00c9aa9109abee9fd7fca8eed5ca2f69850bd750fdbd7ea198da53801e1bf82d")
      public
          fun embeddedPlusScte20DestinationSettings(embeddedPlusScte20DestinationSettings: EmbeddedPlusScte20DestinationSettingsProperty.Builder.() -> Unit)

      /**
       * @param rtmpCaptionInfoDestinationSettings The configuration of one RTMPCaptionInfo captions
       * encode in the output.
       */
      public fun rtmpCaptionInfoDestinationSettings(rtmpCaptionInfoDestinationSettings: IResolvable)

      /**
       * @param rtmpCaptionInfoDestinationSettings The configuration of one RTMPCaptionInfo captions
       * encode in the output.
       */
      public
          fun rtmpCaptionInfoDestinationSettings(rtmpCaptionInfoDestinationSettings: RtmpCaptionInfoDestinationSettingsProperty)

      /**
       * @param rtmpCaptionInfoDestinationSettings The configuration of one RTMPCaptionInfo captions
       * encode in the output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("1a1fac1026402dc57b1fa40332a62e214f03036b60c3fb7f639cb262bbd0470c")
      public
          fun rtmpCaptionInfoDestinationSettings(rtmpCaptionInfoDestinationSettings: RtmpCaptionInfoDestinationSettingsProperty.Builder.() -> Unit)

      /**
       * @param scte20PlusEmbeddedDestinationSettings The configuration of one SCTE20 plus embedded
       * captions encode in the output.
       */
      public
          fun scte20PlusEmbeddedDestinationSettings(scte20PlusEmbeddedDestinationSettings: IResolvable)

      /**
       * @param scte20PlusEmbeddedDestinationSettings The configuration of one SCTE20 plus embedded
       * captions encode in the output.
       */
      public
          fun scte20PlusEmbeddedDestinationSettings(scte20PlusEmbeddedDestinationSettings: Scte20PlusEmbeddedDestinationSettingsProperty)

      /**
       * @param scte20PlusEmbeddedDestinationSettings The configuration of one SCTE20 plus embedded
       * captions encode in the output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("c84eecbc71f5512a0981a731885258bcab29da3ae2d77ced74466733c8f24434")
      public
          fun scte20PlusEmbeddedDestinationSettings(scte20PlusEmbeddedDestinationSettings: Scte20PlusEmbeddedDestinationSettingsProperty.Builder.() -> Unit)

      /**
       * @param scte27DestinationSettings The configuration of one SCTE-27 captions encode in the
       * output.
       */
      public fun scte27DestinationSettings(scte27DestinationSettings: IResolvable)

      /**
       * @param scte27DestinationSettings The configuration of one SCTE-27 captions encode in the
       * output.
       */
      public
          fun scte27DestinationSettings(scte27DestinationSettings: Scte27DestinationSettingsProperty)

      /**
       * @param scte27DestinationSettings The configuration of one SCTE-27 captions encode in the
       * output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("c8b0fe46cfbd068efea72762170dc6fd899d94d5613734d7956a12e474be2812")
      public
          fun scte27DestinationSettings(scte27DestinationSettings: Scte27DestinationSettingsProperty.Builder.() -> Unit)

      /**
       * @param smpteTtDestinationSettings The configuration of one SMPTE-TT captions encode in the
       * output.
       */
      public fun smpteTtDestinationSettings(smpteTtDestinationSettings: IResolvable)

      /**
       * @param smpteTtDestinationSettings The configuration of one SMPTE-TT captions encode in the
       * output.
       */
      public
          fun smpteTtDestinationSettings(smpteTtDestinationSettings: SmpteTtDestinationSettingsProperty)

      /**
       * @param smpteTtDestinationSettings The configuration of one SMPTE-TT captions encode in the
       * output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("243045e0056e48ab19cf97a16552e087ace3d96f0dc98c05c4b8783ae61bcb27")
      public
          fun smpteTtDestinationSettings(smpteTtDestinationSettings: SmpteTtDestinationSettingsProperty.Builder.() -> Unit)

      /**
       * @param teletextDestinationSettings The configuration of one Teletext captions encode in the
       * output.
       */
      public fun teletextDestinationSettings(teletextDestinationSettings: IResolvable)

      /**
       * @param teletextDestinationSettings The configuration of one Teletext captions encode in the
       * output.
       */
      public
          fun teletextDestinationSettings(teletextDestinationSettings: TeletextDestinationSettingsProperty)

      /**
       * @param teletextDestinationSettings The configuration of one Teletext captions encode in the
       * output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("24fd78b59fa8b08238a4a3e1d5900a72b01abfcbedecdbb73c299f211e69a3d7")
      public
          fun teletextDestinationSettings(teletextDestinationSettings: TeletextDestinationSettingsProperty.Builder.() -> Unit)

      /**
       * @param ttmlDestinationSettings The configuration of one TTML captions encode in the output.
       */
      public fun ttmlDestinationSettings(ttmlDestinationSettings: IResolvable)

      /**
       * @param ttmlDestinationSettings The configuration of one TTML captions encode in the output.
       */
      public fun ttmlDestinationSettings(ttmlDestinationSettings: TtmlDestinationSettingsProperty)

      /**
       * @param ttmlDestinationSettings The configuration of one TTML captions encode in the output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("7733463d00c11736790e121b842e4098cccac26d8b6d55e6f6667e37c9b982ca")
      public
          fun ttmlDestinationSettings(ttmlDestinationSettings: TtmlDestinationSettingsProperty.Builder.() -> Unit)

      /**
       * @param webvttDestinationSettings The configuration of one WebVTT captions encode in the
       * output.
       */
      public fun webvttDestinationSettings(webvttDestinationSettings: IResolvable)

      /**
       * @param webvttDestinationSettings The configuration of one WebVTT captions encode in the
       * output.
       */
      public
          fun webvttDestinationSettings(webvttDestinationSettings: WebvttDestinationSettingsProperty)

      /**
       * @param webvttDestinationSettings The configuration of one WebVTT captions encode in the
       * output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("9bb9d0998adbfbe443b42629ccfcaa9e8cb937c88d156d6f9c9afda12e867cc5")
      public
          fun webvttDestinationSettings(webvttDestinationSettings: WebvttDestinationSettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionDestinationSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionDestinationSettingsProperty.builder()

      /**
       * @param aribDestinationSettings The configuration of one ARIB captions encode in the output.
       */
      override fun aribDestinationSettings(aribDestinationSettings: IResolvable) {
        cdkBuilder.aribDestinationSettings(aribDestinationSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param aribDestinationSettings The configuration of one ARIB captions encode in the output.
       */
      override
          fun aribDestinationSettings(aribDestinationSettings: AribDestinationSettingsProperty) {
        cdkBuilder.aribDestinationSettings(aribDestinationSettings.let(AribDestinationSettingsProperty.Companion::unwrap))
      }

      /**
       * @param aribDestinationSettings The configuration of one ARIB captions encode in the output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("9924425c9a3a1b178f1a0a461ae690ba282649b6b96300d474bf7e78f01160cb")
      override
          fun aribDestinationSettings(aribDestinationSettings: AribDestinationSettingsProperty.Builder.() -> Unit):
          Unit = aribDestinationSettings(AribDestinationSettingsProperty(aribDestinationSettings))

      /**
       * @param burnInDestinationSettings The configuration of one burn-in captions encode in the
       * output.
       */
      override fun burnInDestinationSettings(burnInDestinationSettings: IResolvable) {
        cdkBuilder.burnInDestinationSettings(burnInDestinationSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param burnInDestinationSettings The configuration of one burn-in captions encode in the
       * output.
       */
      override
          fun burnInDestinationSettings(burnInDestinationSettings: BurnInDestinationSettingsProperty) {
        cdkBuilder.burnInDestinationSettings(burnInDestinationSettings.let(BurnInDestinationSettingsProperty.Companion::unwrap))
      }

      /**
       * @param burnInDestinationSettings The configuration of one burn-in captions encode in the
       * output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("c1ab6db43caec45221944294f84565ddf5860051552bce6ec66c12ba63154755")
      override
          fun burnInDestinationSettings(burnInDestinationSettings: BurnInDestinationSettingsProperty.Builder.() -> Unit):
          Unit =
          burnInDestinationSettings(BurnInDestinationSettingsProperty(burnInDestinationSettings))

      /**
       * @param dvbSubDestinationSettings The configuration of one DVB Sub captions encode in the
       * output.
       */
      override fun dvbSubDestinationSettings(dvbSubDestinationSettings: IResolvable) {
        cdkBuilder.dvbSubDestinationSettings(dvbSubDestinationSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param dvbSubDestinationSettings The configuration of one DVB Sub captions encode in the
       * output.
       */
      override
          fun dvbSubDestinationSettings(dvbSubDestinationSettings: DvbSubDestinationSettingsProperty) {
        cdkBuilder.dvbSubDestinationSettings(dvbSubDestinationSettings.let(DvbSubDestinationSettingsProperty.Companion::unwrap))
      }

      /**
       * @param dvbSubDestinationSettings The configuration of one DVB Sub captions encode in the
       * output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("cfd24d60c5cf9a28eed30c83dc757a614b6bf038e55c065ef282f49768a0be59")
      override
          fun dvbSubDestinationSettings(dvbSubDestinationSettings: DvbSubDestinationSettingsProperty.Builder.() -> Unit):
          Unit =
          dvbSubDestinationSettings(DvbSubDestinationSettingsProperty(dvbSubDestinationSettings))

      /**
       * @param ebuTtDDestinationSettings Settings for EBU-TT captions in the output.
       */
      override fun ebuTtDDestinationSettings(ebuTtDDestinationSettings: IResolvable) {
        cdkBuilder.ebuTtDDestinationSettings(ebuTtDDestinationSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param ebuTtDDestinationSettings Settings for EBU-TT captions in the output.
       */
      override
          fun ebuTtDDestinationSettings(ebuTtDDestinationSettings: EbuTtDDestinationSettingsProperty) {
        cdkBuilder.ebuTtDDestinationSettings(ebuTtDDestinationSettings.let(EbuTtDDestinationSettingsProperty.Companion::unwrap))
      }

      /**
       * @param ebuTtDDestinationSettings Settings for EBU-TT captions in the output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("5cc852a803c72bf30f5a1f47db88388014afb7d236a5d33e491f1b4c301cee6f")
      override
          fun ebuTtDDestinationSettings(ebuTtDDestinationSettings: EbuTtDDestinationSettingsProperty.Builder.() -> Unit):
          Unit =
          ebuTtDDestinationSettings(EbuTtDDestinationSettingsProperty(ebuTtDDestinationSettings))

      /**
       * @param embeddedDestinationSettings The configuration of one embedded captions encode in the
       * output.
       */
      override fun embeddedDestinationSettings(embeddedDestinationSettings: IResolvable) {
        cdkBuilder.embeddedDestinationSettings(embeddedDestinationSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param embeddedDestinationSettings The configuration of one embedded captions encode in the
       * output.
       */
      override
          fun embeddedDestinationSettings(embeddedDestinationSettings: EmbeddedDestinationSettingsProperty) {
        cdkBuilder.embeddedDestinationSettings(embeddedDestinationSettings.let(EmbeddedDestinationSettingsProperty.Companion::unwrap))
      }

      /**
       * @param embeddedDestinationSettings The configuration of one embedded captions encode in the
       * output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("1ef1e9387047b8b7c83b7cb13467485cd2fe653e2e1eb711c5b0fe251ca08625")
      override
          fun embeddedDestinationSettings(embeddedDestinationSettings: EmbeddedDestinationSettingsProperty.Builder.() -> Unit):
          Unit =
          embeddedDestinationSettings(EmbeddedDestinationSettingsProperty(embeddedDestinationSettings))

      /**
       * @param embeddedPlusScte20DestinationSettings The configuration of one embedded plus SCTE-20
       * captions encode in the output.
       */
      override
          fun embeddedPlusScte20DestinationSettings(embeddedPlusScte20DestinationSettings: IResolvable) {
        cdkBuilder.embeddedPlusScte20DestinationSettings(embeddedPlusScte20DestinationSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param embeddedPlusScte20DestinationSettings The configuration of one embedded plus SCTE-20
       * captions encode in the output.
       */
      override
          fun embeddedPlusScte20DestinationSettings(embeddedPlusScte20DestinationSettings: EmbeddedPlusScte20DestinationSettingsProperty) {
        cdkBuilder.embeddedPlusScte20DestinationSettings(embeddedPlusScte20DestinationSettings.let(EmbeddedPlusScte20DestinationSettingsProperty.Companion::unwrap))
      }

      /**
       * @param embeddedPlusScte20DestinationSettings The configuration of one embedded plus SCTE-20
       * captions encode in the output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("00c9aa9109abee9fd7fca8eed5ca2f69850bd750fdbd7ea198da53801e1bf82d")
      override
          fun embeddedPlusScte20DestinationSettings(embeddedPlusScte20DestinationSettings: EmbeddedPlusScte20DestinationSettingsProperty.Builder.() -> Unit):
          Unit =
          embeddedPlusScte20DestinationSettings(EmbeddedPlusScte20DestinationSettingsProperty(embeddedPlusScte20DestinationSettings))

      /**
       * @param rtmpCaptionInfoDestinationSettings The configuration of one RTMPCaptionInfo captions
       * encode in the output.
       */
      override
          fun rtmpCaptionInfoDestinationSettings(rtmpCaptionInfoDestinationSettings: IResolvable) {
        cdkBuilder.rtmpCaptionInfoDestinationSettings(rtmpCaptionInfoDestinationSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param rtmpCaptionInfoDestinationSettings The configuration of one RTMPCaptionInfo captions
       * encode in the output.
       */
      override
          fun rtmpCaptionInfoDestinationSettings(rtmpCaptionInfoDestinationSettings: RtmpCaptionInfoDestinationSettingsProperty) {
        cdkBuilder.rtmpCaptionInfoDestinationSettings(rtmpCaptionInfoDestinationSettings.let(RtmpCaptionInfoDestinationSettingsProperty.Companion::unwrap))
      }

      /**
       * @param rtmpCaptionInfoDestinationSettings The configuration of one RTMPCaptionInfo captions
       * encode in the output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("1a1fac1026402dc57b1fa40332a62e214f03036b60c3fb7f639cb262bbd0470c")
      override
          fun rtmpCaptionInfoDestinationSettings(rtmpCaptionInfoDestinationSettings: RtmpCaptionInfoDestinationSettingsProperty.Builder.() -> Unit):
          Unit =
          rtmpCaptionInfoDestinationSettings(RtmpCaptionInfoDestinationSettingsProperty(rtmpCaptionInfoDestinationSettings))

      /**
       * @param scte20PlusEmbeddedDestinationSettings The configuration of one SCTE20 plus embedded
       * captions encode in the output.
       */
      override
          fun scte20PlusEmbeddedDestinationSettings(scte20PlusEmbeddedDestinationSettings: IResolvable) {
        cdkBuilder.scte20PlusEmbeddedDestinationSettings(scte20PlusEmbeddedDestinationSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param scte20PlusEmbeddedDestinationSettings The configuration of one SCTE20 plus embedded
       * captions encode in the output.
       */
      override
          fun scte20PlusEmbeddedDestinationSettings(scte20PlusEmbeddedDestinationSettings: Scte20PlusEmbeddedDestinationSettingsProperty) {
        cdkBuilder.scte20PlusEmbeddedDestinationSettings(scte20PlusEmbeddedDestinationSettings.let(Scte20PlusEmbeddedDestinationSettingsProperty.Companion::unwrap))
      }

      /**
       * @param scte20PlusEmbeddedDestinationSettings The configuration of one SCTE20 plus embedded
       * captions encode in the output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("c84eecbc71f5512a0981a731885258bcab29da3ae2d77ced74466733c8f24434")
      override
          fun scte20PlusEmbeddedDestinationSettings(scte20PlusEmbeddedDestinationSettings: Scte20PlusEmbeddedDestinationSettingsProperty.Builder.() -> Unit):
          Unit =
          scte20PlusEmbeddedDestinationSettings(Scte20PlusEmbeddedDestinationSettingsProperty(scte20PlusEmbeddedDestinationSettings))

      /**
       * @param scte27DestinationSettings The configuration of one SCTE-27 captions encode in the
       * output.
       */
      override fun scte27DestinationSettings(scte27DestinationSettings: IResolvable) {
        cdkBuilder.scte27DestinationSettings(scte27DestinationSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param scte27DestinationSettings The configuration of one SCTE-27 captions encode in the
       * output.
       */
      override
          fun scte27DestinationSettings(scte27DestinationSettings: Scte27DestinationSettingsProperty) {
        cdkBuilder.scte27DestinationSettings(scte27DestinationSettings.let(Scte27DestinationSettingsProperty.Companion::unwrap))
      }

      /**
       * @param scte27DestinationSettings The configuration of one SCTE-27 captions encode in the
       * output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("c8b0fe46cfbd068efea72762170dc6fd899d94d5613734d7956a12e474be2812")
      override
          fun scte27DestinationSettings(scte27DestinationSettings: Scte27DestinationSettingsProperty.Builder.() -> Unit):
          Unit =
          scte27DestinationSettings(Scte27DestinationSettingsProperty(scte27DestinationSettings))

      /**
       * @param smpteTtDestinationSettings The configuration of one SMPTE-TT captions encode in the
       * output.
       */
      override fun smpteTtDestinationSettings(smpteTtDestinationSettings: IResolvable) {
        cdkBuilder.smpteTtDestinationSettings(smpteTtDestinationSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param smpteTtDestinationSettings The configuration of one SMPTE-TT captions encode in the
       * output.
       */
      override
          fun smpteTtDestinationSettings(smpteTtDestinationSettings: SmpteTtDestinationSettingsProperty) {
        cdkBuilder.smpteTtDestinationSettings(smpteTtDestinationSettings.let(SmpteTtDestinationSettingsProperty.Companion::unwrap))
      }

      /**
       * @param smpteTtDestinationSettings The configuration of one SMPTE-TT captions encode in the
       * output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("243045e0056e48ab19cf97a16552e087ace3d96f0dc98c05c4b8783ae61bcb27")
      override
          fun smpteTtDestinationSettings(smpteTtDestinationSettings: SmpteTtDestinationSettingsProperty.Builder.() -> Unit):
          Unit =
          smpteTtDestinationSettings(SmpteTtDestinationSettingsProperty(smpteTtDestinationSettings))

      /**
       * @param teletextDestinationSettings The configuration of one Teletext captions encode in the
       * output.
       */
      override fun teletextDestinationSettings(teletextDestinationSettings: IResolvable) {
        cdkBuilder.teletextDestinationSettings(teletextDestinationSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param teletextDestinationSettings The configuration of one Teletext captions encode in the
       * output.
       */
      override
          fun teletextDestinationSettings(teletextDestinationSettings: TeletextDestinationSettingsProperty) {
        cdkBuilder.teletextDestinationSettings(teletextDestinationSettings.let(TeletextDestinationSettingsProperty.Companion::unwrap))
      }

      /**
       * @param teletextDestinationSettings The configuration of one Teletext captions encode in the
       * output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("24fd78b59fa8b08238a4a3e1d5900a72b01abfcbedecdbb73c299f211e69a3d7")
      override
          fun teletextDestinationSettings(teletextDestinationSettings: TeletextDestinationSettingsProperty.Builder.() -> Unit):
          Unit =
          teletextDestinationSettings(TeletextDestinationSettingsProperty(teletextDestinationSettings))

      /**
       * @param ttmlDestinationSettings The configuration of one TTML captions encode in the output.
       */
      override fun ttmlDestinationSettings(ttmlDestinationSettings: IResolvable) {
        cdkBuilder.ttmlDestinationSettings(ttmlDestinationSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param ttmlDestinationSettings The configuration of one TTML captions encode in the output.
       */
      override
          fun ttmlDestinationSettings(ttmlDestinationSettings: TtmlDestinationSettingsProperty) {
        cdkBuilder.ttmlDestinationSettings(ttmlDestinationSettings.let(TtmlDestinationSettingsProperty.Companion::unwrap))
      }

      /**
       * @param ttmlDestinationSettings The configuration of one TTML captions encode in the output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("7733463d00c11736790e121b842e4098cccac26d8b6d55e6f6667e37c9b982ca")
      override
          fun ttmlDestinationSettings(ttmlDestinationSettings: TtmlDestinationSettingsProperty.Builder.() -> Unit):
          Unit = ttmlDestinationSettings(TtmlDestinationSettingsProperty(ttmlDestinationSettings))

      /**
       * @param webvttDestinationSettings The configuration of one WebVTT captions encode in the
       * output.
       */
      override fun webvttDestinationSettings(webvttDestinationSettings: IResolvable) {
        cdkBuilder.webvttDestinationSettings(webvttDestinationSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param webvttDestinationSettings The configuration of one WebVTT captions encode in the
       * output.
       */
      override
          fun webvttDestinationSettings(webvttDestinationSettings: WebvttDestinationSettingsProperty) {
        cdkBuilder.webvttDestinationSettings(webvttDestinationSettings.let(WebvttDestinationSettingsProperty.Companion::unwrap))
      }

      /**
       * @param webvttDestinationSettings The configuration of one WebVTT captions encode in the
       * output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("9bb9d0998adbfbe443b42629ccfcaa9e8cb937c88d156d6f9c9afda12e867cc5")
      override
          fun webvttDestinationSettings(webvttDestinationSettings: WebvttDestinationSettingsProperty.Builder.() -> Unit):
          Unit =
          webvttDestinationSettings(WebvttDestinationSettingsProperty(webvttDestinationSettings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionDestinationSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.CaptionDestinationSettingsProperty,
    ) : CdkObject(cdkObject),
        CaptionDestinationSettingsProperty {
      /**
       * The configuration of one ARIB captions encode in the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-aribdestinationsettings)
       */
      override fun aribDestinationSettings(): Any? = unwrap(this).getAribDestinationSettings()

      /**
       * The configuration of one burn-in captions encode in the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-burnindestinationsettings)
       */
      override fun burnInDestinationSettings(): Any? = unwrap(this).getBurnInDestinationSettings()

      /**
       * The configuration of one DVB Sub captions encode in the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-dvbsubdestinationsettings)
       */
      override fun dvbSubDestinationSettings(): Any? = unwrap(this).getDvbSubDestinationSettings()

      /**
       * Settings for EBU-TT captions in the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-ebuttddestinationsettings)
       */
      override fun ebuTtDDestinationSettings(): Any? = unwrap(this).getEbuTtDDestinationSettings()

      /**
       * The configuration of one embedded captions encode in the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-embeddeddestinationsettings)
       */
      override fun embeddedDestinationSettings(): Any? =
          unwrap(this).getEmbeddedDestinationSettings()

      /**
       * The configuration of one embedded plus SCTE-20 captions encode in the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-embeddedplusscte20destinationsettings)
       */
      override fun embeddedPlusScte20DestinationSettings(): Any? =
          unwrap(this).getEmbeddedPlusScte20DestinationSettings()

      /**
       * The configuration of one RTMPCaptionInfo captions encode in the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-rtmpcaptioninfodestinationsettings)
       */
      override fun rtmpCaptionInfoDestinationSettings(): Any? =
          unwrap(this).getRtmpCaptionInfoDestinationSettings()

      /**
       * The configuration of one SCTE20 plus embedded captions encode in the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-scte20plusembeddeddestinationsettings)
       */
      override fun scte20PlusEmbeddedDestinationSettings(): Any? =
          unwrap(this).getScte20PlusEmbeddedDestinationSettings()

      /**
       * The configuration of one SCTE-27 captions encode in the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-scte27destinationsettings)
       */
      override fun scte27DestinationSettings(): Any? = unwrap(this).getScte27DestinationSettings()

      /**
       * The configuration of one SMPTE-TT captions encode in the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-smptettdestinationsettings)
       */
      override fun smpteTtDestinationSettings(): Any? = unwrap(this).getSmpteTtDestinationSettings()

      /**
       * The configuration of one Teletext captions encode in the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-teletextdestinationsettings)
       */
      override fun teletextDestinationSettings(): Any? =
          unwrap(this).getTeletextDestinationSettings()

      /**
       * The configuration of one TTML captions encode in the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-ttmldestinationsettings)
       */
      override fun ttmlDestinationSettings(): Any? = unwrap(this).getTtmlDestinationSettings()

      /**
       * The configuration of one WebVTT captions encode in the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-webvttdestinationsettings)
       */
      override fun webvttDestinationSettings(): Any? = unwrap(this).getWebvttDestinationSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          CaptionDestinationSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.CaptionDestinationSettingsProperty):
          CaptionDestinationSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          CaptionDestinationSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: CaptionDestinationSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionDestinationSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionDestinationSettingsProperty
    }
  }

  /**
   * Maps a captions channel to an ISO 693-2 language code (http://www.loc.gov/standards/iso639-2),
   * with an optional description.
   *
   * The parent of this entity is HlsGroupSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * CaptionLanguageMappingProperty captionLanguageMappingProperty =
   * CaptionLanguageMappingProperty.builder()
   * .captionChannel(123)
   * .languageCode("languageCode")
   * .languageDescription("languageDescription")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionlanguagemapping.html)
   */
  public interface CaptionLanguageMappingProperty {
    /**
     * The closed caption channel being described by this CaptionLanguageMapping.
     *
     * Each channel mapping must have a unique channel number (maximum of 4).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionlanguagemapping.html#cfn-medialive-channel-captionlanguagemapping-captionchannel)
     */
    public fun captionChannel(): Number? = unwrap(this).getCaptionChannel()

    /**
     * A three-character ISO 639-2 language code (see http://www.loc.gov/standards/iso639-2).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionlanguagemapping.html#cfn-medialive-channel-captionlanguagemapping-languagecode)
     */
    public fun languageCode(): String? = unwrap(this).getLanguageCode()

    /**
     * The textual description of language.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionlanguagemapping.html#cfn-medialive-channel-captionlanguagemapping-languagedescription)
     */
    public fun languageDescription(): String? = unwrap(this).getLanguageDescription()

    /**
     * A builder for [CaptionLanguageMappingProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param captionChannel The closed caption channel being described by this
       * CaptionLanguageMapping.
       * Each channel mapping must have a unique channel number (maximum of 4).
       */
      public fun captionChannel(captionChannel: Number)

      /**
       * @param languageCode A three-character ISO 639-2 language code (see
       * http://www.loc.gov/standards/iso639-2).
       */
      public fun languageCode(languageCode: String)

      /**
       * @param languageDescription The textual description of language.
       */
      public fun languageDescription(languageDescription: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionLanguageMappingProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionLanguageMappingProperty.builder()

      /**
       * @param captionChannel The closed caption channel being described by this
       * CaptionLanguageMapping.
       * Each channel mapping must have a unique channel number (maximum of 4).
       */
      override fun captionChannel(captionChannel: Number) {
        cdkBuilder.captionChannel(captionChannel)
      }

      /**
       * @param languageCode A three-character ISO 639-2 language code (see
       * http://www.loc.gov/standards/iso639-2).
       */
      override fun languageCode(languageCode: String) {
        cdkBuilder.languageCode(languageCode)
      }

      /**
       * @param languageDescription The textual description of language.
       */
      override fun languageDescription(languageDescription: String) {
        cdkBuilder.languageDescription(languageDescription)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionLanguageMappingProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.CaptionLanguageMappingProperty,
    ) : CdkObject(cdkObject),
        CaptionLanguageMappingProperty {
      /**
       * The closed caption channel being described by this CaptionLanguageMapping.
       *
       * Each channel mapping must have a unique channel number (maximum of 4).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionlanguagemapping.html#cfn-medialive-channel-captionlanguagemapping-captionchannel)
       */
      override fun captionChannel(): Number? = unwrap(this).getCaptionChannel()

      /**
       * A three-character ISO 639-2 language code (see http://www.loc.gov/standards/iso639-2).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionlanguagemapping.html#cfn-medialive-channel-captionlanguagemapping-languagecode)
       */
      override fun languageCode(): String? = unwrap(this).getLanguageCode()

      /**
       * The textual description of language.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionlanguagemapping.html#cfn-medialive-channel-captionlanguagemapping-languagedescription)
       */
      override fun languageDescription(): String? = unwrap(this).getLanguageDescription()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): CaptionLanguageMappingProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.CaptionLanguageMappingProperty):
          CaptionLanguageMappingProperty = CdkObjectWrappers.wrap(cdkObject) as?
          CaptionLanguageMappingProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: CaptionLanguageMappingProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionLanguageMappingProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionLanguageMappingProperty
    }
  }

  /**
   * Settings to configure the caption rectangle for an output captions that will be created using
   * this Teletext source captions.
   *
   * The parent of this entity is TeletextSourceSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * CaptionRectangleProperty captionRectangleProperty = CaptionRectangleProperty.builder()
   * .height(123)
   * .leftOffset(123)
   * .topOffset(123)
   * .width(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionrectangle.html)
   */
  public interface CaptionRectangleProperty {
    /**
     * See the description in leftOffset.
     *
     * For height, specify the entire height of the rectangle as a percentage of the underlying
     * frame height. For example, "80" means the rectangle height is 80% of the underlying frame
     * height. The topOffset and rectangleHeight must add up to 100% or less. This field corresponds to
     * tts:extent - Y in the TTML standard.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionrectangle.html#cfn-medialive-channel-captionrectangle-height)
     */
    public fun height(): Number? = unwrap(this).getHeight()

    /**
     * Applies only if you plan to convert these source captions to EBU-TT-D or TTML in an output.
     *
     * (Make sure to leave the default if you don't have either of these formats in the output.) You
     * can define a display rectangle for the captions that is smaller than the underlying video frame.
     * You define the rectangle by specifying the position of the left edge, top edge, bottom edge, and
     * right edge of the rectangle, all within the underlying video frame. The units for the
     * measurements are percentages. If you specify a value for one of these fields, you must specify a
     * value for all of them.
     *
     * For leftOffset, specify the position of the left edge of the rectangle, as a percentage of
     * the underlying frame width, and relative to the left edge of the frame. For example, "10" means
     * the measurement is 10% of the underlying frame width. The rectangle left edge starts at that
     * position from the left edge of the frame. This field corresponds to tts:origin - X in the TTML
     * standard.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionrectangle.html#cfn-medialive-channel-captionrectangle-leftoffset)
     */
    public fun leftOffset(): Number? = unwrap(this).getLeftOffset()

    /**
     * See the description in leftOffset.
     *
     * For topOffset, specify the position of the top edge of the rectangle, as a percentage of the
     * underlying frame height, and relative to the top edge of the frame. For example, "10" means the
     * measurement is 10% of the underlying frame height. The rectangle top edge starts at that
     * position from the top edge of the frame. This field corresponds to tts:origin - Y in the TTML
     * standard.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionrectangle.html#cfn-medialive-channel-captionrectangle-topoffset)
     */
    public fun topOffset(): Number? = unwrap(this).getTopOffset()

    /**
     * See the description in leftOffset.
     *
     * For width, specify the entire width of the rectangle as a percentage of the underlying frame
     * width. For example, "80" means the rectangle width is 80% of the underlying frame width. The
     * leftOffset and rectangleWidth must add up to 100% or less. This field corresponds to
     * tts:extent - X in the TTML standard.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionrectangle.html#cfn-medialive-channel-captionrectangle-width)
     */
    public fun width(): Number? = unwrap(this).getWidth()

    /**
     * A builder for [CaptionRectangleProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param height See the description in leftOffset.
       * For height, specify the entire height of the rectangle as a percentage of the underlying
       * frame height. For example, "80" means the rectangle height is 80% of the underlying frame
       * height. The topOffset and rectangleHeight must add up to 100% or less. This field corresponds
       * to tts:extent - Y in the TTML standard.
       */
      public fun height(height: Number)

      /**
       * @param leftOffset Applies only if you plan to convert these source captions to EBU-TT-D or
       * TTML in an output.
       * (Make sure to leave the default if you don't have either of these formats in the output.)
       * You can define a display rectangle for the captions that is smaller than the underlying video
       * frame. You define the rectangle by specifying the position of the left edge, top edge, bottom
       * edge, and right edge of the rectangle, all within the underlying video frame. The units for
       * the measurements are percentages. If you specify a value for one of these fields, you must
       * specify a value for all of them.
       *
       * For leftOffset, specify the position of the left edge of the rectangle, as a percentage of
       * the underlying frame width, and relative to the left edge of the frame. For example, "10"
       * means the measurement is 10% of the underlying frame width. The rectangle left edge starts at
       * that position from the left edge of the frame. This field corresponds to tts:origin - X in the
       * TTML standard.
       */
      public fun leftOffset(leftOffset: Number)

      /**
       * @param topOffset See the description in leftOffset.
       * For topOffset, specify the position of the top edge of the rectangle, as a percentage of
       * the underlying frame height, and relative to the top edge of the frame. For example, "10"
       * means the measurement is 10% of the underlying frame height. The rectangle top edge starts at
       * that position from the top edge of the frame. This field corresponds to tts:origin - Y in the
       * TTML standard.
       */
      public fun topOffset(topOffset: Number)

      /**
       * @param width See the description in leftOffset.
       * For width, specify the entire width of the rectangle as a percentage of the underlying
       * frame width. For example, "80" means the rectangle width is 80% of the underlying frame width.
       * The leftOffset and rectangleWidth must add up to 100% or less. This field corresponds to
       * tts:extent - X in the TTML standard.
       */
      public fun width(width: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionRectangleProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionRectangleProperty.builder()

      /**
       * @param height See the description in leftOffset.
       * For height, specify the entire height of the rectangle as a percentage of the underlying
       * frame height. For example, "80" means the rectangle height is 80% of the underlying frame
       * height. The topOffset and rectangleHeight must add up to 100% or less. This field corresponds
       * to tts:extent - Y in the TTML standard.
       */
      override fun height(height: Number) {
        cdkBuilder.height(height)
      }

      /**
       * @param leftOffset Applies only if you plan to convert these source captions to EBU-TT-D or
       * TTML in an output.
       * (Make sure to leave the default if you don't have either of these formats in the output.)
       * You can define a display rectangle for the captions that is smaller than the underlying video
       * frame. You define the rectangle by specifying the position of the left edge, top edge, bottom
       * edge, and right edge of the rectangle, all within the underlying video frame. The units for
       * the measurements are percentages. If you specify a value for one of these fields, you must
       * specify a value for all of them.
       *
       * For leftOffset, specify the position of the left edge of the rectangle, as a percentage of
       * the underlying frame width, and relative to the left edge of the frame. For example, "10"
       * means the measurement is 10% of the underlying frame width. The rectangle left edge starts at
       * that position from the left edge of the frame. This field corresponds to tts:origin - X in the
       * TTML standard.
       */
      override fun leftOffset(leftOffset: Number) {
        cdkBuilder.leftOffset(leftOffset)
      }

      /**
       * @param topOffset See the description in leftOffset.
       * For topOffset, specify the position of the top edge of the rectangle, as a percentage of
       * the underlying frame height, and relative to the top edge of the frame. For example, "10"
       * means the measurement is 10% of the underlying frame height. The rectangle top edge starts at
       * that position from the top edge of the frame. This field corresponds to tts:origin - Y in the
       * TTML standard.
       */
      override fun topOffset(topOffset: Number) {
        cdkBuilder.topOffset(topOffset)
      }

      /**
       * @param width See the description in leftOffset.
       * For width, specify the entire width of the rectangle as a percentage of the underlying
       * frame width. For example, "80" means the rectangle width is 80% of the underlying frame width.
       * The leftOffset and rectangleWidth must add up to 100% or less. This field corresponds to
       * tts:extent - X in the TTML standard.
       */
      override fun width(width: Number) {
        cdkBuilder.width(width)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionRectangleProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.CaptionRectangleProperty,
    ) : CdkObject(cdkObject),
        CaptionRectangleProperty {
      /**
       * See the description in leftOffset.
       *
       * For height, specify the entire height of the rectangle as a percentage of the underlying
       * frame height. For example, "80" means the rectangle height is 80% of the underlying frame
       * height. The topOffset and rectangleHeight must add up to 100% or less. This field corresponds
       * to tts:extent - Y in the TTML standard.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionrectangle.html#cfn-medialive-channel-captionrectangle-height)
       */
      override fun height(): Number? = unwrap(this).getHeight()

      /**
       * Applies only if you plan to convert these source captions to EBU-TT-D or TTML in an output.
       *
       * (Make sure to leave the default if you don't have either of these formats in the output.)
       * You can define a display rectangle for the captions that is smaller than the underlying video
       * frame. You define the rectangle by specifying the position of the left edge, top edge, bottom
       * edge, and right edge of the rectangle, all within the underlying video frame. The units for
       * the measurements are percentages. If you specify a value for one of these fields, you must
       * specify a value for all of them.
       *
       * For leftOffset, specify the position of the left edge of the rectangle, as a percentage of
       * the underlying frame width, and relative to the left edge of the frame. For example, "10"
       * means the measurement is 10% of the underlying frame width. The rectangle left edge starts at
       * that position from the left edge of the frame. This field corresponds to tts:origin - X in the
       * TTML standard.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionrectangle.html#cfn-medialive-channel-captionrectangle-leftoffset)
       */
      override fun leftOffset(): Number? = unwrap(this).getLeftOffset()

      /**
       * See the description in leftOffset.
       *
       * For topOffset, specify the position of the top edge of the rectangle, as a percentage of
       * the underlying frame height, and relative to the top edge of the frame. For example, "10"
       * means the measurement is 10% of the underlying frame height. The rectangle top edge starts at
       * that position from the top edge of the frame. This field corresponds to tts:origin - Y in the
       * TTML standard.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionrectangle.html#cfn-medialive-channel-captionrectangle-topoffset)
       */
      override fun topOffset(): Number? = unwrap(this).getTopOffset()

      /**
       * See the description in leftOffset.
       *
       * For width, specify the entire width of the rectangle as a percentage of the underlying
       * frame width. For example, "80" means the rectangle width is 80% of the underlying frame width.
       * The leftOffset and rectangleWidth must add up to 100% or less. This field corresponds to
       * tts:extent - X in the TTML standard.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionrectangle.html#cfn-medialive-channel-captionrectangle-width)
       */
      override fun width(): Number? = unwrap(this).getWidth()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): CaptionRectangleProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.CaptionRectangleProperty):
          CaptionRectangleProperty = CdkObjectWrappers.wrap(cdkObject) as? CaptionRectangleProperty
          ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: CaptionRectangleProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionRectangleProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionRectangleProperty
    }
  }

  /**
   * Information about one caption to extract from the input.
   *
   * The parent of this entity is InputSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * CaptionSelectorProperty captionSelectorProperty = CaptionSelectorProperty.builder()
   * .languageCode("languageCode")
   * .name("name")
   * .selectorSettings(CaptionSelectorSettingsProperty.builder()
   * .ancillarySourceSettings(AncillarySourceSettingsProperty.builder()
   * .sourceAncillaryChannelNumber(123)
   * .build())
   * .aribSourceSettings(AribSourceSettingsProperty.builder().build())
   * .dvbSubSourceSettings(DvbSubSourceSettingsProperty.builder()
   * .ocrLanguage("ocrLanguage")
   * .pid(123)
   * .build())
   * .embeddedSourceSettings(EmbeddedSourceSettingsProperty.builder()
   * .convert608To708("convert608To708")
   * .scte20Detection("scte20Detection")
   * .source608ChannelNumber(123)
   * .source608TrackNumber(123)
   * .build())
   * .scte20SourceSettings(Scte20SourceSettingsProperty.builder()
   * .convert608To708("convert608To708")
   * .source608ChannelNumber(123)
   * .build())
   * .scte27SourceSettings(Scte27SourceSettingsProperty.builder()
   * .ocrLanguage("ocrLanguage")
   * .pid(123)
   * .build())
   * .teletextSourceSettings(TeletextSourceSettingsProperty.builder()
   * .outputRectangle(CaptionRectangleProperty.builder()
   * .height(123)
   * .leftOffset(123)
   * .topOffset(123)
   * .width(123)
   * .build())
   * .pageNumber("pageNumber")
   * .build())
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselector.html)
   */
  public interface CaptionSelectorProperty {
    /**
     * When specified, this field indicates the three-letter language code of the captions track to
     * extract from the source.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselector.html#cfn-medialive-channel-captionselector-languagecode)
     */
    public fun languageCode(): String? = unwrap(this).getLanguageCode()

    /**
     * The name identifier for a captions selector.
     *
     * This name is used to associate this captions selector with one or more captions descriptions.
     * Names must be unique within a channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselector.html#cfn-medialive-channel-captionselector-name)
     */
    public fun name(): String? = unwrap(this).getName()

    /**
     * Information about the specific audio to extract from the input.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselector.html#cfn-medialive-channel-captionselector-selectorsettings)
     */
    public fun selectorSettings(): Any? = unwrap(this).getSelectorSettings()

    /**
     * A builder for [CaptionSelectorProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param languageCode When specified, this field indicates the three-letter language code of
       * the captions track to extract from the source.
       */
      public fun languageCode(languageCode: String)

      /**
       * @param name The name identifier for a captions selector.
       * This name is used to associate this captions selector with one or more captions
       * descriptions. Names must be unique within a channel.
       */
      public fun name(name: String)

      /**
       * @param selectorSettings Information about the specific audio to extract from the input.
       */
      public fun selectorSettings(selectorSettings: IResolvable)

      /**
       * @param selectorSettings Information about the specific audio to extract from the input.
       */
      public fun selectorSettings(selectorSettings: CaptionSelectorSettingsProperty)

      /**
       * @param selectorSettings Information about the specific audio to extract from the input.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("81158ee68ff4bd4f8535025bc79c2e557c3e5612ad574f8c180adb7c89c943cf")
      public
          fun selectorSettings(selectorSettings: CaptionSelectorSettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionSelectorProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionSelectorProperty.builder()

      /**
       * @param languageCode When specified, this field indicates the three-letter language code of
       * the captions track to extract from the source.
       */
      override fun languageCode(languageCode: String) {
        cdkBuilder.languageCode(languageCode)
      }

      /**
       * @param name The name identifier for a captions selector.
       * This name is used to associate this captions selector with one or more captions
       * descriptions. Names must be unique within a channel.
       */
      override fun name(name: String) {
        cdkBuilder.name(name)
      }

      /**
       * @param selectorSettings Information about the specific audio to extract from the input.
       */
      override fun selectorSettings(selectorSettings: IResolvable) {
        cdkBuilder.selectorSettings(selectorSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param selectorSettings Information about the specific audio to extract from the input.
       */
      override fun selectorSettings(selectorSettings: CaptionSelectorSettingsProperty) {
        cdkBuilder.selectorSettings(selectorSettings.let(CaptionSelectorSettingsProperty.Companion::unwrap))
      }

      /**
       * @param selectorSettings Information about the specific audio to extract from the input.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("81158ee68ff4bd4f8535025bc79c2e557c3e5612ad574f8c180adb7c89c943cf")
      override
          fun selectorSettings(selectorSettings: CaptionSelectorSettingsProperty.Builder.() -> Unit):
          Unit = selectorSettings(CaptionSelectorSettingsProperty(selectorSettings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionSelectorProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.CaptionSelectorProperty,
    ) : CdkObject(cdkObject),
        CaptionSelectorProperty {
      /**
       * When specified, this field indicates the three-letter language code of the captions track
       * to extract from the source.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselector.html#cfn-medialive-channel-captionselector-languagecode)
       */
      override fun languageCode(): String? = unwrap(this).getLanguageCode()

      /**
       * The name identifier for a captions selector.
       *
       * This name is used to associate this captions selector with one or more captions
       * descriptions. Names must be unique within a channel.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselector.html#cfn-medialive-channel-captionselector-name)
       */
      override fun name(): String? = unwrap(this).getName()

      /**
       * Information about the specific audio to extract from the input.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselector.html#cfn-medialive-channel-captionselector-selectorsettings)
       */
      override fun selectorSettings(): Any? = unwrap(this).getSelectorSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): CaptionSelectorProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.CaptionSelectorProperty):
          CaptionSelectorProperty = CdkObjectWrappers.wrap(cdkObject) as? CaptionSelectorProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: CaptionSelectorProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionSelectorProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionSelectorProperty
    }
  }

  /**
   * Captions Selector Settings.
   *
   * The parent of this entity is CaptionSelector.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * CaptionSelectorSettingsProperty captionSelectorSettingsProperty =
   * CaptionSelectorSettingsProperty.builder()
   * .ancillarySourceSettings(AncillarySourceSettingsProperty.builder()
   * .sourceAncillaryChannelNumber(123)
   * .build())
   * .aribSourceSettings(AribSourceSettingsProperty.builder().build())
   * .dvbSubSourceSettings(DvbSubSourceSettingsProperty.builder()
   * .ocrLanguage("ocrLanguage")
   * .pid(123)
   * .build())
   * .embeddedSourceSettings(EmbeddedSourceSettingsProperty.builder()
   * .convert608To708("convert608To708")
   * .scte20Detection("scte20Detection")
   * .source608ChannelNumber(123)
   * .source608TrackNumber(123)
   * .build())
   * .scte20SourceSettings(Scte20SourceSettingsProperty.builder()
   * .convert608To708("convert608To708")
   * .source608ChannelNumber(123)
   * .build())
   * .scte27SourceSettings(Scte27SourceSettingsProperty.builder()
   * .ocrLanguage("ocrLanguage")
   * .pid(123)
   * .build())
   * .teletextSourceSettings(TeletextSourceSettingsProperty.builder()
   * .outputRectangle(CaptionRectangleProperty.builder()
   * .height(123)
   * .leftOffset(123)
   * .topOffset(123)
   * .width(123)
   * .build())
   * .pageNumber("pageNumber")
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html)
   */
  public interface CaptionSelectorSettingsProperty {
    /**
     * Information about the ancillary captions to extract from the input.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html#cfn-medialive-channel-captionselectorsettings-ancillarysourcesettings)
     */
    public fun ancillarySourceSettings(): Any? = unwrap(this).getAncillarySourceSettings()

    /**
     * Information about the ARIB captions to extract from the input.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html#cfn-medialive-channel-captionselectorsettings-aribsourcesettings)
     */
    public fun aribSourceSettings(): Any? = unwrap(this).getAribSourceSettings()

    /**
     * Information about the DVB Sub captions to extract from the input.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html#cfn-medialive-channel-captionselectorsettings-dvbsubsourcesettings)
     */
    public fun dvbSubSourceSettings(): Any? = unwrap(this).getDvbSubSourceSettings()

    /**
     * Information about the embedded captions to extract from the input.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html#cfn-medialive-channel-captionselectorsettings-embeddedsourcesettings)
     */
    public fun embeddedSourceSettings(): Any? = unwrap(this).getEmbeddedSourceSettings()

    /**
     * Information about the SCTE-20 captions to extract from the input.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html#cfn-medialive-channel-captionselectorsettings-scte20sourcesettings)
     */
    public fun scte20SourceSettings(): Any? = unwrap(this).getScte20SourceSettings()

    /**
     * Information about the SCTE-27 captions to extract from the input.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html#cfn-medialive-channel-captionselectorsettings-scte27sourcesettings)
     */
    public fun scte27SourceSettings(): Any? = unwrap(this).getScte27SourceSettings()

    /**
     * Information about the Teletext captions to extract from the input.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html#cfn-medialive-channel-captionselectorsettings-teletextsourcesettings)
     */
    public fun teletextSourceSettings(): Any? = unwrap(this).getTeletextSourceSettings()

    /**
     * A builder for [CaptionSelectorSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param ancillarySourceSettings Information about the ancillary captions to extract from the
       * input.
       */
      public fun ancillarySourceSettings(ancillarySourceSettings: IResolvable)

      /**
       * @param ancillarySourceSettings Information about the ancillary captions to extract from the
       * input.
       */
      public fun ancillarySourceSettings(ancillarySourceSettings: AncillarySourceSettingsProperty)

      /**
       * @param ancillarySourceSettings Information about the ancillary captions to extract from the
       * input.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ace4a48d7bddbc87ae7e74bf4826991eaaf5bf6f0356288c5588277551ecbe7e")
      public
          fun ancillarySourceSettings(ancillarySourceSettings: AncillarySourceSettingsProperty.Builder.() -> Unit)

      /**
       * @param aribSourceSettings Information about the ARIB captions to extract from the input.
       */
      public fun aribSourceSettings(aribSourceSettings: IResolvable)

      /**
       * @param aribSourceSettings Information about the ARIB captions to extract from the input.
       */
      public fun aribSourceSettings(aribSourceSettings: AribSourceSettingsProperty)

      /**
       * @param aribSourceSettings Information about the ARIB captions to extract from the input.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("1b93ef36dc37fd94de3544d364ca1d2c9c1171053b73456ea794ebfb65cc9c64")
      public
          fun aribSourceSettings(aribSourceSettings: AribSourceSettingsProperty.Builder.() -> Unit)

      /**
       * @param dvbSubSourceSettings Information about the DVB Sub captions to extract from the
       * input.
       */
      public fun dvbSubSourceSettings(dvbSubSourceSettings: IResolvable)

      /**
       * @param dvbSubSourceSettings Information about the DVB Sub captions to extract from the
       * input.
       */
      public fun dvbSubSourceSettings(dvbSubSourceSettings: DvbSubSourceSettingsProperty)

      /**
       * @param dvbSubSourceSettings Information about the DVB Sub captions to extract from the
       * input.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("3cfd2c5cbfd735aaef94c13682637afcf8a76e47ac8d223c085a3248ce541ef1")
      public
          fun dvbSubSourceSettings(dvbSubSourceSettings: DvbSubSourceSettingsProperty.Builder.() -> Unit)

      /**
       * @param embeddedSourceSettings Information about the embedded captions to extract from the
       * input.
       */
      public fun embeddedSourceSettings(embeddedSourceSettings: IResolvable)

      /**
       * @param embeddedSourceSettings Information about the embedded captions to extract from the
       * input.
       */
      public fun embeddedSourceSettings(embeddedSourceSettings: EmbeddedSourceSettingsProperty)

      /**
       * @param embeddedSourceSettings Information about the embedded captions to extract from the
       * input.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("fcb575a2e4a1bf74140f84e26c415021cfd67799c5ba8b95ca7fa2367dbc605b")
      public
          fun embeddedSourceSettings(embeddedSourceSettings: EmbeddedSourceSettingsProperty.Builder.() -> Unit)

      /**
       * @param scte20SourceSettings Information about the SCTE-20 captions to extract from the
       * input.
       */
      public fun scte20SourceSettings(scte20SourceSettings: IResolvable)

      /**
       * @param scte20SourceSettings Information about the SCTE-20 captions to extract from the
       * input.
       */
      public fun scte20SourceSettings(scte20SourceSettings: Scte20SourceSettingsProperty)

      /**
       * @param scte20SourceSettings Information about the SCTE-20 captions to extract from the
       * input.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("5602799ca43989f5875f463abe9e8a33a56f5263a515772a0ac402c8b846c41c")
      public
          fun scte20SourceSettings(scte20SourceSettings: Scte20SourceSettingsProperty.Builder.() -> Unit)

      /**
       * @param scte27SourceSettings Information about the SCTE-27 captions to extract from the
       * input.
       */
      public fun scte27SourceSettings(scte27SourceSettings: IResolvable)

      /**
       * @param scte27SourceSettings Information about the SCTE-27 captions to extract from the
       * input.
       */
      public fun scte27SourceSettings(scte27SourceSettings: Scte27SourceSettingsProperty)

      /**
       * @param scte27SourceSettings Information about the SCTE-27 captions to extract from the
       * input.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("84a15d9c6d5a666cc65469dcfc7cd925e9b80a9440f6498bc85f185f66ac8ec7")
      public
          fun scte27SourceSettings(scte27SourceSettings: Scte27SourceSettingsProperty.Builder.() -> Unit)

      /**
       * @param teletextSourceSettings Information about the Teletext captions to extract from the
       * input.
       */
      public fun teletextSourceSettings(teletextSourceSettings: IResolvable)

      /**
       * @param teletextSourceSettings Information about the Teletext captions to extract from the
       * input.
       */
      public fun teletextSourceSettings(teletextSourceSettings: TeletextSourceSettingsProperty)

      /**
       * @param teletextSourceSettings Information about the Teletext captions to extract from the
       * input.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("5194196ebc9a57e0ce6d3a571e20026bbed3b5ef8624f29ac481c202bdbd44ab")
      public
          fun teletextSourceSettings(teletextSourceSettings: TeletextSourceSettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionSelectorSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionSelectorSettingsProperty.builder()

      /**
       * @param ancillarySourceSettings Information about the ancillary captions to extract from the
       * input.
       */
      override fun ancillarySourceSettings(ancillarySourceSettings: IResolvable) {
        cdkBuilder.ancillarySourceSettings(ancillarySourceSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param ancillarySourceSettings Information about the ancillary captions to extract from the
       * input.
       */
      override
          fun ancillarySourceSettings(ancillarySourceSettings: AncillarySourceSettingsProperty) {
        cdkBuilder.ancillarySourceSettings(ancillarySourceSettings.let(AncillarySourceSettingsProperty.Companion::unwrap))
      }

      /**
       * @param ancillarySourceSettings Information about the ancillary captions to extract from the
       * input.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ace4a48d7bddbc87ae7e74bf4826991eaaf5bf6f0356288c5588277551ecbe7e")
      override
          fun ancillarySourceSettings(ancillarySourceSettings: AncillarySourceSettingsProperty.Builder.() -> Unit):
          Unit = ancillarySourceSettings(AncillarySourceSettingsProperty(ancillarySourceSettings))

      /**
       * @param aribSourceSettings Information about the ARIB captions to extract from the input.
       */
      override fun aribSourceSettings(aribSourceSettings: IResolvable) {
        cdkBuilder.aribSourceSettings(aribSourceSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param aribSourceSettings Information about the ARIB captions to extract from the input.
       */
      override fun aribSourceSettings(aribSourceSettings: AribSourceSettingsProperty) {
        cdkBuilder.aribSourceSettings(aribSourceSettings.let(AribSourceSettingsProperty.Companion::unwrap))
      }

      /**
       * @param aribSourceSettings Information about the ARIB captions to extract from the input.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("1b93ef36dc37fd94de3544d364ca1d2c9c1171053b73456ea794ebfb65cc9c64")
      override
          fun aribSourceSettings(aribSourceSettings: AribSourceSettingsProperty.Builder.() -> Unit):
          Unit = aribSourceSettings(AribSourceSettingsProperty(aribSourceSettings))

      /**
       * @param dvbSubSourceSettings Information about the DVB Sub captions to extract from the
       * input.
       */
      override fun dvbSubSourceSettings(dvbSubSourceSettings: IResolvable) {
        cdkBuilder.dvbSubSourceSettings(dvbSubSourceSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param dvbSubSourceSettings Information about the DVB Sub captions to extract from the
       * input.
       */
      override fun dvbSubSourceSettings(dvbSubSourceSettings: DvbSubSourceSettingsProperty) {
        cdkBuilder.dvbSubSourceSettings(dvbSubSourceSettings.let(DvbSubSourceSettingsProperty.Companion::unwrap))
      }

      /**
       * @param dvbSubSourceSettings Information about the DVB Sub captions to extract from the
       * input.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("3cfd2c5cbfd735aaef94c13682637afcf8a76e47ac8d223c085a3248ce541ef1")
      override
          fun dvbSubSourceSettings(dvbSubSourceSettings: DvbSubSourceSettingsProperty.Builder.() -> Unit):
          Unit = dvbSubSourceSettings(DvbSubSourceSettingsProperty(dvbSubSourceSettings))

      /**
       * @param embeddedSourceSettings Information about the embedded captions to extract from the
       * input.
       */
      override fun embeddedSourceSettings(embeddedSourceSettings: IResolvable) {
        cdkBuilder.embeddedSourceSettings(embeddedSourceSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param embeddedSourceSettings Information about the embedded captions to extract from the
       * input.
       */
      override fun embeddedSourceSettings(embeddedSourceSettings: EmbeddedSourceSettingsProperty) {
        cdkBuilder.embeddedSourceSettings(embeddedSourceSettings.let(EmbeddedSourceSettingsProperty.Companion::unwrap))
      }

      /**
       * @param embeddedSourceSettings Information about the embedded captions to extract from the
       * input.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("fcb575a2e4a1bf74140f84e26c415021cfd67799c5ba8b95ca7fa2367dbc605b")
      override
          fun embeddedSourceSettings(embeddedSourceSettings: EmbeddedSourceSettingsProperty.Builder.() -> Unit):
          Unit = embeddedSourceSettings(EmbeddedSourceSettingsProperty(embeddedSourceSettings))

      /**
       * @param scte20SourceSettings Information about the SCTE-20 captions to extract from the
       * input.
       */
      override fun scte20SourceSettings(scte20SourceSettings: IResolvable) {
        cdkBuilder.scte20SourceSettings(scte20SourceSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param scte20SourceSettings Information about the SCTE-20 captions to extract from the
       * input.
       */
      override fun scte20SourceSettings(scte20SourceSettings: Scte20SourceSettingsProperty) {
        cdkBuilder.scte20SourceSettings(scte20SourceSettings.let(Scte20SourceSettingsProperty.Companion::unwrap))
      }

      /**
       * @param scte20SourceSettings Information about the SCTE-20 captions to extract from the
       * input.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("5602799ca43989f5875f463abe9e8a33a56f5263a515772a0ac402c8b846c41c")
      override
          fun scte20SourceSettings(scte20SourceSettings: Scte20SourceSettingsProperty.Builder.() -> Unit):
          Unit = scte20SourceSettings(Scte20SourceSettingsProperty(scte20SourceSettings))

      /**
       * @param scte27SourceSettings Information about the SCTE-27 captions to extract from the
       * input.
       */
      override fun scte27SourceSettings(scte27SourceSettings: IResolvable) {
        cdkBuilder.scte27SourceSettings(scte27SourceSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param scte27SourceSettings Information about the SCTE-27 captions to extract from the
       * input.
       */
      override fun scte27SourceSettings(scte27SourceSettings: Scte27SourceSettingsProperty) {
        cdkBuilder.scte27SourceSettings(scte27SourceSettings.let(Scte27SourceSettingsProperty.Companion::unwrap))
      }

      /**
       * @param scte27SourceSettings Information about the SCTE-27 captions to extract from the
       * input.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("84a15d9c6d5a666cc65469dcfc7cd925e9b80a9440f6498bc85f185f66ac8ec7")
      override
          fun scte27SourceSettings(scte27SourceSettings: Scte27SourceSettingsProperty.Builder.() -> Unit):
          Unit = scte27SourceSettings(Scte27SourceSettingsProperty(scte27SourceSettings))

      /**
       * @param teletextSourceSettings Information about the Teletext captions to extract from the
       * input.
       */
      override fun teletextSourceSettings(teletextSourceSettings: IResolvable) {
        cdkBuilder.teletextSourceSettings(teletextSourceSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param teletextSourceSettings Information about the Teletext captions to extract from the
       * input.
       */
      override fun teletextSourceSettings(teletextSourceSettings: TeletextSourceSettingsProperty) {
        cdkBuilder.teletextSourceSettings(teletextSourceSettings.let(TeletextSourceSettingsProperty.Companion::unwrap))
      }

      /**
       * @param teletextSourceSettings Information about the Teletext captions to extract from the
       * input.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("5194196ebc9a57e0ce6d3a571e20026bbed3b5ef8624f29ac481c202bdbd44ab")
      override
          fun teletextSourceSettings(teletextSourceSettings: TeletextSourceSettingsProperty.Builder.() -> Unit):
          Unit = teletextSourceSettings(TeletextSourceSettingsProperty(teletextSourceSettings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionSelectorSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.CaptionSelectorSettingsProperty,
    ) : CdkObject(cdkObject),
        CaptionSelectorSettingsProperty {
      /**
       * Information about the ancillary captions to extract from the input.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html#cfn-medialive-channel-captionselectorsettings-ancillarysourcesettings)
       */
      override fun ancillarySourceSettings(): Any? = unwrap(this).getAncillarySourceSettings()

      /**
       * Information about the ARIB captions to extract from the input.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html#cfn-medialive-channel-captionselectorsettings-aribsourcesettings)
       */
      override fun aribSourceSettings(): Any? = unwrap(this).getAribSourceSettings()

      /**
       * Information about the DVB Sub captions to extract from the input.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html#cfn-medialive-channel-captionselectorsettings-dvbsubsourcesettings)
       */
      override fun dvbSubSourceSettings(): Any? = unwrap(this).getDvbSubSourceSettings()

      /**
       * Information about the embedded captions to extract from the input.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html#cfn-medialive-channel-captionselectorsettings-embeddedsourcesettings)
       */
      override fun embeddedSourceSettings(): Any? = unwrap(this).getEmbeddedSourceSettings()

      /**
       * Information about the SCTE-20 captions to extract from the input.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html#cfn-medialive-channel-captionselectorsettings-scte20sourcesettings)
       */
      override fun scte20SourceSettings(): Any? = unwrap(this).getScte20SourceSettings()

      /**
       * Information about the SCTE-27 captions to extract from the input.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html#cfn-medialive-channel-captionselectorsettings-scte27sourcesettings)
       */
      override fun scte27SourceSettings(): Any? = unwrap(this).getScte27SourceSettings()

      /**
       * Information about the Teletext captions to extract from the input.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html#cfn-medialive-channel-captionselectorsettings-teletextsourcesettings)
       */
      override fun teletextSourceSettings(): Any? = unwrap(this).getTeletextSourceSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): CaptionSelectorSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.CaptionSelectorSettingsProperty):
          CaptionSelectorSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          CaptionSelectorSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: CaptionSelectorSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionSelectorSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.CaptionSelectorSettingsProperty
    }
  }

  /**
   * The input specification for this channel.
   *
   * It specifies the key characteristics of CDI inputs for this channel, when those characteristics
   * are different from other inputs.
   *
   * This entity is at the top level in the channel.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * CdiInputSpecificationProperty cdiInputSpecificationProperty =
   * CdiInputSpecificationProperty.builder()
   * .resolution("resolution")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-cdiinputspecification.html)
   */
  public interface CdiInputSpecificationProperty {
    /**
     * Maximum CDI input resolution.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-cdiinputspecification.html#cfn-medialive-channel-cdiinputspecification-resolution)
     */
    public fun resolution(): String? = unwrap(this).getResolution()

    /**
     * A builder for [CdiInputSpecificationProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param resolution Maximum CDI input resolution.
       */
      public fun resolution(resolution: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.CdiInputSpecificationProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.CdiInputSpecificationProperty.builder()

      /**
       * @param resolution Maximum CDI input resolution.
       */
      override fun resolution(resolution: String) {
        cdkBuilder.resolution(resolution)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.CdiInputSpecificationProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.CdiInputSpecificationProperty,
    ) : CdkObject(cdkObject),
        CdiInputSpecificationProperty {
      /**
       * Maximum CDI input resolution.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-cdiinputspecification.html#cfn-medialive-channel-cdiinputspecification-resolution)
       */
      override fun resolution(): String? = unwrap(this).getResolution()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): CdiInputSpecificationProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.CdiInputSpecificationProperty):
          CdiInputSpecificationProperty = CdkObjectWrappers.wrap(cdkObject) as?
          CdiInputSpecificationProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: CdiInputSpecificationProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.CdiInputSpecificationProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.CdiInputSpecificationProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * CmafIngestGroupSettingsProperty cmafIngestGroupSettingsProperty =
   * CmafIngestGroupSettingsProperty.builder()
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .scte35Type("scte35Type")
   * .segmentLength(123)
   * .segmentLengthUnits("segmentLengthUnits")
   * .sendDelayMs(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-cmafingestgroupsettings.html)
   */
  public interface CmafIngestGroupSettingsProperty {
    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-cmafingestgroupsettings.html#cfn-medialive-channel-cmafingestgroupsettings-destination)
     */
    public fun destination(): Any? = unwrap(this).getDestination()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-cmafingestgroupsettings.html#cfn-medialive-channel-cmafingestgroupsettings-nielsenid3behavior)
     */
    public fun nielsenId3Behavior(): String? = unwrap(this).getNielsenId3Behavior()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-cmafingestgroupsettings.html#cfn-medialive-channel-cmafingestgroupsettings-scte35type)
     */
    public fun scte35Type(): String? = unwrap(this).getScte35Type()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-cmafingestgroupsettings.html#cfn-medialive-channel-cmafingestgroupsettings-segmentlength)
     */
    public fun segmentLength(): Number? = unwrap(this).getSegmentLength()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-cmafingestgroupsettings.html#cfn-medialive-channel-cmafingestgroupsettings-segmentlengthunits)
     */
    public fun segmentLengthUnits(): String? = unwrap(this).getSegmentLengthUnits()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-cmafingestgroupsettings.html#cfn-medialive-channel-cmafingestgroupsettings-senddelayms)
     */
    public fun sendDelayMs(): Number? = unwrap(this).getSendDelayMs()

    /**
     * A builder for [CmafIngestGroupSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param destination the value to be set.
       */
      public fun destination(destination: IResolvable)

      /**
       * @param destination the value to be set.
       */
      public fun destination(destination: OutputLocationRefProperty)

      /**
       * @param destination the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("f0cc3521bd9c322b62fa4f4ac2fcb90ec21589f994980940ddb23e8c1f1e3f24")
      public fun destination(destination: OutputLocationRefProperty.Builder.() -> Unit)

      /**
       * @param nielsenId3Behavior the value to be set.
       */
      public fun nielsenId3Behavior(nielsenId3Behavior: String)

      /**
       * @param scte35Type the value to be set.
       */
      public fun scte35Type(scte35Type: String)

      /**
       * @param segmentLength the value to be set.
       */
      public fun segmentLength(segmentLength: Number)

      /**
       * @param segmentLengthUnits the value to be set.
       */
      public fun segmentLengthUnits(segmentLengthUnits: String)

      /**
       * @param sendDelayMs the value to be set.
       */
      public fun sendDelayMs(sendDelayMs: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.CmafIngestGroupSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.CmafIngestGroupSettingsProperty.builder()

      /**
       * @param destination the value to be set.
       */
      override fun destination(destination: IResolvable) {
        cdkBuilder.destination(destination.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param destination the value to be set.
       */
      override fun destination(destination: OutputLocationRefProperty) {
        cdkBuilder.destination(destination.let(OutputLocationRefProperty.Companion::unwrap))
      }

      /**
       * @param destination the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("f0cc3521bd9c322b62fa4f4ac2fcb90ec21589f994980940ddb23e8c1f1e3f24")
      override fun destination(destination: OutputLocationRefProperty.Builder.() -> Unit): Unit =
          destination(OutputLocationRefProperty(destination))

      /**
       * @param nielsenId3Behavior the value to be set.
       */
      override fun nielsenId3Behavior(nielsenId3Behavior: String) {
        cdkBuilder.nielsenId3Behavior(nielsenId3Behavior)
      }

      /**
       * @param scte35Type the value to be set.
       */
      override fun scte35Type(scte35Type: String) {
        cdkBuilder.scte35Type(scte35Type)
      }

      /**
       * @param segmentLength the value to be set.
       */
      override fun segmentLength(segmentLength: Number) {
        cdkBuilder.segmentLength(segmentLength)
      }

      /**
       * @param segmentLengthUnits the value to be set.
       */
      override fun segmentLengthUnits(segmentLengthUnits: String) {
        cdkBuilder.segmentLengthUnits(segmentLengthUnits)
      }

      /**
       * @param sendDelayMs the value to be set.
       */
      override fun sendDelayMs(sendDelayMs: Number) {
        cdkBuilder.sendDelayMs(sendDelayMs)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.CmafIngestGroupSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.CmafIngestGroupSettingsProperty,
    ) : CdkObject(cdkObject),
        CmafIngestGroupSettingsProperty {
      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-cmafingestgroupsettings.html#cfn-medialive-channel-cmafingestgroupsettings-destination)
       */
      override fun destination(): Any? = unwrap(this).getDestination()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-cmafingestgroupsettings.html#cfn-medialive-channel-cmafingestgroupsettings-nielsenid3behavior)
       */
      override fun nielsenId3Behavior(): String? = unwrap(this).getNielsenId3Behavior()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-cmafingestgroupsettings.html#cfn-medialive-channel-cmafingestgroupsettings-scte35type)
       */
      override fun scte35Type(): String? = unwrap(this).getScte35Type()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-cmafingestgroupsettings.html#cfn-medialive-channel-cmafingestgroupsettings-segmentlength)
       */
      override fun segmentLength(): Number? = unwrap(this).getSegmentLength()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-cmafingestgroupsettings.html#cfn-medialive-channel-cmafingestgroupsettings-segmentlengthunits)
       */
      override fun segmentLengthUnits(): String? = unwrap(this).getSegmentLengthUnits()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-cmafingestgroupsettings.html#cfn-medialive-channel-cmafingestgroupsettings-senddelayms)
       */
      override fun sendDelayMs(): Number? = unwrap(this).getSendDelayMs()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): CmafIngestGroupSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.CmafIngestGroupSettingsProperty):
          CmafIngestGroupSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          CmafIngestGroupSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: CmafIngestGroupSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.CmafIngestGroupSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.CmafIngestGroupSettingsProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * CmafIngestOutputSettingsProperty cmafIngestOutputSettingsProperty =
   * CmafIngestOutputSettingsProperty.builder()
   * .nameModifier("nameModifier")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-cmafingestoutputsettings.html)
   */
  public interface CmafIngestOutputSettingsProperty {
    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-cmafingestoutputsettings.html#cfn-medialive-channel-cmafingestoutputsettings-namemodifier)
     */
    public fun nameModifier(): String? = unwrap(this).getNameModifier()

    /**
     * A builder for [CmafIngestOutputSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param nameModifier the value to be set.
       */
      public fun nameModifier(nameModifier: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.CmafIngestOutputSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.CmafIngestOutputSettingsProperty.builder()

      /**
       * @param nameModifier the value to be set.
       */
      override fun nameModifier(nameModifier: String) {
        cdkBuilder.nameModifier(nameModifier)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.CmafIngestOutputSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.CmafIngestOutputSettingsProperty,
    ) : CdkObject(cdkObject),
        CmafIngestOutputSettingsProperty {
      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-cmafingestoutputsettings.html#cfn-medialive-channel-cmafingestoutputsettings-namemodifier)
       */
      override fun nameModifier(): String? = unwrap(this).getNameModifier()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): CmafIngestOutputSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.CmafIngestOutputSettingsProperty):
          CmafIngestOutputSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          CmafIngestOutputSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: CmafIngestOutputSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.CmafIngestOutputSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.CmafIngestOutputSettingsProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * ColorCorrectionProperty colorCorrectionProperty = ColorCorrectionProperty.builder()
   * .inputColorSpace("inputColorSpace")
   * .outputColorSpace("outputColorSpace")
   * .uri("uri")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-colorcorrection.html)
   */
  public interface ColorCorrectionProperty {
    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-colorcorrection.html#cfn-medialive-channel-colorcorrection-inputcolorspace)
     */
    public fun inputColorSpace(): String? = unwrap(this).getInputColorSpace()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-colorcorrection.html#cfn-medialive-channel-colorcorrection-outputcolorspace)
     */
    public fun outputColorSpace(): String? = unwrap(this).getOutputColorSpace()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-colorcorrection.html#cfn-medialive-channel-colorcorrection-uri)
     */
    public fun uri(): String? = unwrap(this).getUri()

    /**
     * A builder for [ColorCorrectionProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param inputColorSpace the value to be set.
       */
      public fun inputColorSpace(inputColorSpace: String)

      /**
       * @param outputColorSpace the value to be set.
       */
      public fun outputColorSpace(outputColorSpace: String)

      /**
       * @param uri the value to be set.
       */
      public fun uri(uri: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.ColorCorrectionProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.ColorCorrectionProperty.builder()

      /**
       * @param inputColorSpace the value to be set.
       */
      override fun inputColorSpace(inputColorSpace: String) {
        cdkBuilder.inputColorSpace(inputColorSpace)
      }

      /**
       * @param outputColorSpace the value to be set.
       */
      override fun outputColorSpace(outputColorSpace: String) {
        cdkBuilder.outputColorSpace(outputColorSpace)
      }

      /**
       * @param uri the value to be set.
       */
      override fun uri(uri: String) {
        cdkBuilder.uri(uri)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.ColorCorrectionProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.ColorCorrectionProperty,
    ) : CdkObject(cdkObject),
        ColorCorrectionProperty {
      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-colorcorrection.html#cfn-medialive-channel-colorcorrection-inputcolorspace)
       */
      override fun inputColorSpace(): String? = unwrap(this).getInputColorSpace()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-colorcorrection.html#cfn-medialive-channel-colorcorrection-outputcolorspace)
       */
      override fun outputColorSpace(): String? = unwrap(this).getOutputColorSpace()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-colorcorrection.html#cfn-medialive-channel-colorcorrection-uri)
       */
      override fun uri(): String? = unwrap(this).getUri()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): ColorCorrectionProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.ColorCorrectionProperty):
          ColorCorrectionProperty = CdkObjectWrappers.wrap(cdkObject) as? ColorCorrectionProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: ColorCorrectionProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.ColorCorrectionProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.ColorCorrectionProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * ColorCorrectionSettingsProperty colorCorrectionSettingsProperty =
   * ColorCorrectionSettingsProperty.builder()
   * .globalColorCorrections(List.of(ColorCorrectionProperty.builder()
   * .inputColorSpace("inputColorSpace")
   * .outputColorSpace("outputColorSpace")
   * .uri("uri")
   * .build()))
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-colorcorrectionsettings.html)
   */
  public interface ColorCorrectionSettingsProperty {
    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-colorcorrectionsettings.html#cfn-medialive-channel-colorcorrectionsettings-globalcolorcorrections)
     */
    public fun globalColorCorrections(): Any? = unwrap(this).getGlobalColorCorrections()

    /**
     * A builder for [ColorCorrectionSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param globalColorCorrections the value to be set.
       */
      public fun globalColorCorrections(globalColorCorrections: IResolvable)

      /**
       * @param globalColorCorrections the value to be set.
       */
      public fun globalColorCorrections(globalColorCorrections: List)

      /**
       * @param globalColorCorrections the value to be set.
       */
      public fun globalColorCorrections(vararg globalColorCorrections: Any)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.ColorCorrectionSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.ColorCorrectionSettingsProperty.builder()

      /**
       * @param globalColorCorrections the value to be set.
       */
      override fun globalColorCorrections(globalColorCorrections: IResolvable) {
        cdkBuilder.globalColorCorrections(globalColorCorrections.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param globalColorCorrections the value to be set.
       */
      override fun globalColorCorrections(globalColorCorrections: List) {
        cdkBuilder.globalColorCorrections(globalColorCorrections.map{CdkObjectWrappers.unwrap(it)})
      }

      /**
       * @param globalColorCorrections the value to be set.
       */
      override fun globalColorCorrections(vararg globalColorCorrections: Any): Unit =
          globalColorCorrections(globalColorCorrections.toList())

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.ColorCorrectionSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.ColorCorrectionSettingsProperty,
    ) : CdkObject(cdkObject),
        ColorCorrectionSettingsProperty {
      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-colorcorrectionsettings.html#cfn-medialive-channel-colorcorrectionsettings-globalcolorcorrections)
       */
      override fun globalColorCorrections(): Any? = unwrap(this).getGlobalColorCorrections()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): ColorCorrectionSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.ColorCorrectionSettingsProperty):
          ColorCorrectionSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          ColorCorrectionSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: ColorCorrectionSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.ColorCorrectionSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.ColorCorrectionSettingsProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * ColorSpacePassthroughSettingsProperty colorSpacePassthroughSettingsProperty =
   * ColorSpacePassthroughSettingsProperty.builder().build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-colorspacepassthroughsettings.html)
   */
  public interface ColorSpacePassthroughSettingsProperty {
    /**
     * A builder for [ColorSpacePassthroughSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.ColorSpacePassthroughSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.ColorSpacePassthroughSettingsProperty.builder()

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.ColorSpacePassthroughSettingsProperty
          = cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.ColorSpacePassthroughSettingsProperty,
    ) : CdkObject(cdkObject),
        ColorSpacePassthroughSettingsProperty

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          ColorSpacePassthroughSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.ColorSpacePassthroughSettingsProperty):
          ColorSpacePassthroughSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          ColorSpacePassthroughSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: ColorSpacePassthroughSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.ColorSpacePassthroughSettingsProperty
          = (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.ColorSpacePassthroughSettingsProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * DolbyVision81SettingsProperty dolbyVision81SettingsProperty =
   * DolbyVision81SettingsProperty.builder().build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dolbyvision81settings.html)
   */
  public interface DolbyVision81SettingsProperty {
    /**
     * A builder for [DolbyVision81SettingsProperty]
     */
    @CdkDslMarker
    public interface Builder

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.DolbyVision81SettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.DolbyVision81SettingsProperty.builder()

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.DolbyVision81SettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.DolbyVision81SettingsProperty,
    ) : CdkObject(cdkObject),
        DolbyVision81SettingsProperty

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): DolbyVision81SettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.DolbyVision81SettingsProperty):
          DolbyVision81SettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          DolbyVision81SettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: DolbyVision81SettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.DolbyVision81SettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.DolbyVision81SettingsProperty
    }
  }

  /**
   * The configuration of DVB NIT.
   *
   * The parent of this entity is M2tsSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * DvbNitSettingsProperty dvbNitSettingsProperty = DvbNitSettingsProperty.builder()
   * .networkId(123)
   * .networkName("networkName")
   * .repInterval(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbnitsettings.html)
   */
  public interface DvbNitSettingsProperty {
    /**
     * The numeric value placed in the Network Information Table (NIT).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbnitsettings.html#cfn-medialive-channel-dvbnitsettings-networkid)
     */
    public fun networkId(): Number? = unwrap(this).getNetworkId()

    /**
     * The network name text placed in the networkNameDescriptor inside the Network Information
     * Table (NIT).
     *
     * The maximum length is 256 characters.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbnitsettings.html#cfn-medialive-channel-dvbnitsettings-networkname)
     */
    public fun networkName(): String? = unwrap(this).getNetworkName()

    /**
     * The number of milliseconds between instances of this table in the output transport stream.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbnitsettings.html#cfn-medialive-channel-dvbnitsettings-repinterval)
     */
    public fun repInterval(): Number? = unwrap(this).getRepInterval()

    /**
     * A builder for [DvbNitSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param networkId The numeric value placed in the Network Information Table (NIT).
       */
      public fun networkId(networkId: Number)

      /**
       * @param networkName The network name text placed in the networkNameDescriptor inside the
       * Network Information Table (NIT).
       * The maximum length is 256 characters.
       */
      public fun networkName(networkName: String)

      /**
       * @param repInterval The number of milliseconds between instances of this table in the output
       * transport stream.
       */
      public fun repInterval(repInterval: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.DvbNitSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.DvbNitSettingsProperty.builder()

      /**
       * @param networkId The numeric value placed in the Network Information Table (NIT).
       */
      override fun networkId(networkId: Number) {
        cdkBuilder.networkId(networkId)
      }

      /**
       * @param networkName The network name text placed in the networkNameDescriptor inside the
       * Network Information Table (NIT).
       * The maximum length is 256 characters.
       */
      override fun networkName(networkName: String) {
        cdkBuilder.networkName(networkName)
      }

      /**
       * @param repInterval The number of milliseconds between instances of this table in the output
       * transport stream.
       */
      override fun repInterval(repInterval: Number) {
        cdkBuilder.repInterval(repInterval)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.DvbNitSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.DvbNitSettingsProperty,
    ) : CdkObject(cdkObject),
        DvbNitSettingsProperty {
      /**
       * The numeric value placed in the Network Information Table (NIT).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbnitsettings.html#cfn-medialive-channel-dvbnitsettings-networkid)
       */
      override fun networkId(): Number? = unwrap(this).getNetworkId()

      /**
       * The network name text placed in the networkNameDescriptor inside the Network Information
       * Table (NIT).
       *
       * The maximum length is 256 characters.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbnitsettings.html#cfn-medialive-channel-dvbnitsettings-networkname)
       */
      override fun networkName(): String? = unwrap(this).getNetworkName()

      /**
       * The number of milliseconds between instances of this table in the output transport stream.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbnitsettings.html#cfn-medialive-channel-dvbnitsettings-repinterval)
       */
      override fun repInterval(): Number? = unwrap(this).getRepInterval()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): DvbNitSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.DvbNitSettingsProperty):
          DvbNitSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? DvbNitSettingsProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: DvbNitSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.DvbNitSettingsProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.DvbNitSettingsProperty
    }
  }

  /**
   * A DVB Service Description Table (SDT).
   *
   * The parent of this entity is M2tsSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * DvbSdtSettingsProperty dvbSdtSettingsProperty = DvbSdtSettingsProperty.builder()
   * .outputSdt("outputSdt")
   * .repInterval(123)
   * .serviceName("serviceName")
   * .serviceProviderName("serviceProviderName")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsdtsettings.html)
   */
  public interface DvbSdtSettingsProperty {
    /**
     * Selects a method of inserting SDT information into an output stream.
     *
     * The sdtFollow setting copies SDT information from input stream to output stream. The
     * sdtFollowIfPresent setting copies SDT information from input stream to output stream if SDT
     * information is present in the input. Otherwise, it falls back on the user-defined values. The
     * sdtManual setting means that the user will enter the SDT information. The sdtNone setting means
     * that the output stream will not contain SDT information.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsdtsettings.html#cfn-medialive-channel-dvbsdtsettings-outputsdt)
     */
    public fun outputSdt(): String? = unwrap(this).getOutputSdt()

    /**
     * The number of milliseconds between instances of this table in the output transport stream.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsdtsettings.html#cfn-medialive-channel-dvbsdtsettings-repinterval)
     */
    public fun repInterval(): Number? = unwrap(this).getRepInterval()

    /**
     * The service name placed in the serviceDescriptor in the Service Description Table (SDT).
     *
     * The maximum length is 256 characters.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsdtsettings.html#cfn-medialive-channel-dvbsdtsettings-servicename)
     */
    public fun serviceName(): String? = unwrap(this).getServiceName()

    /**
     * The service provider name placed in the serviceDescriptor in the Service Description Table
     * (SDT).
     *
     * The maximum length is 256 characters.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsdtsettings.html#cfn-medialive-channel-dvbsdtsettings-serviceprovidername)
     */
    public fun serviceProviderName(): String? = unwrap(this).getServiceProviderName()

    /**
     * A builder for [DvbSdtSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param outputSdt Selects a method of inserting SDT information into an output stream.
       * The sdtFollow setting copies SDT information from input stream to output stream. The
       * sdtFollowIfPresent setting copies SDT information from input stream to output stream if SDT
       * information is present in the input. Otherwise, it falls back on the user-defined values. The
       * sdtManual setting means that the user will enter the SDT information. The sdtNone setting
       * means that the output stream will not contain SDT information.
       */
      public fun outputSdt(outputSdt: String)

      /**
       * @param repInterval The number of milliseconds between instances of this table in the output
       * transport stream.
       */
      public fun repInterval(repInterval: Number)

      /**
       * @param serviceName The service name placed in the serviceDescriptor in the Service
       * Description Table (SDT).
       * The maximum length is 256 characters.
       */
      public fun serviceName(serviceName: String)

      /**
       * @param serviceProviderName The service provider name placed in the serviceDescriptor in the
       * Service Description Table (SDT).
       * The maximum length is 256 characters.
       */
      public fun serviceProviderName(serviceProviderName: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.DvbSdtSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.DvbSdtSettingsProperty.builder()

      /**
       * @param outputSdt Selects a method of inserting SDT information into an output stream.
       * The sdtFollow setting copies SDT information from input stream to output stream. The
       * sdtFollowIfPresent setting copies SDT information from input stream to output stream if SDT
       * information is present in the input. Otherwise, it falls back on the user-defined values. The
       * sdtManual setting means that the user will enter the SDT information. The sdtNone setting
       * means that the output stream will not contain SDT information.
       */
      override fun outputSdt(outputSdt: String) {
        cdkBuilder.outputSdt(outputSdt)
      }

      /**
       * @param repInterval The number of milliseconds between instances of this table in the output
       * transport stream.
       */
      override fun repInterval(repInterval: Number) {
        cdkBuilder.repInterval(repInterval)
      }

      /**
       * @param serviceName The service name placed in the serviceDescriptor in the Service
       * Description Table (SDT).
       * The maximum length is 256 characters.
       */
      override fun serviceName(serviceName: String) {
        cdkBuilder.serviceName(serviceName)
      }

      /**
       * @param serviceProviderName The service provider name placed in the serviceDescriptor in the
       * Service Description Table (SDT).
       * The maximum length is 256 characters.
       */
      override fun serviceProviderName(serviceProviderName: String) {
        cdkBuilder.serviceProviderName(serviceProviderName)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.DvbSdtSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.DvbSdtSettingsProperty,
    ) : CdkObject(cdkObject),
        DvbSdtSettingsProperty {
      /**
       * Selects a method of inserting SDT information into an output stream.
       *
       * The sdtFollow setting copies SDT information from input stream to output stream. The
       * sdtFollowIfPresent setting copies SDT information from input stream to output stream if SDT
       * information is present in the input. Otherwise, it falls back on the user-defined values. The
       * sdtManual setting means that the user will enter the SDT information. The sdtNone setting
       * means that the output stream will not contain SDT information.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsdtsettings.html#cfn-medialive-channel-dvbsdtsettings-outputsdt)
       */
      override fun outputSdt(): String? = unwrap(this).getOutputSdt()

      /**
       * The number of milliseconds between instances of this table in the output transport stream.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsdtsettings.html#cfn-medialive-channel-dvbsdtsettings-repinterval)
       */
      override fun repInterval(): Number? = unwrap(this).getRepInterval()

      /**
       * The service name placed in the serviceDescriptor in the Service Description Table (SDT).
       *
       * The maximum length is 256 characters.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsdtsettings.html#cfn-medialive-channel-dvbsdtsettings-servicename)
       */
      override fun serviceName(): String? = unwrap(this).getServiceName()

      /**
       * The service provider name placed in the serviceDescriptor in the Service Description Table
       * (SDT).
       *
       * The maximum length is 256 characters.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsdtsettings.html#cfn-medialive-channel-dvbsdtsettings-serviceprovidername)
       */
      override fun serviceProviderName(): String? = unwrap(this).getServiceProviderName()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): DvbSdtSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.DvbSdtSettingsProperty):
          DvbSdtSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? DvbSdtSettingsProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: DvbSdtSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.DvbSdtSettingsProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.DvbSdtSettingsProperty
    }
  }

  /**
   * The settings for DVB Sub captions in the output.
   *
   * The parent of this entity is CaptionDestinationSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * DvbSubDestinationSettingsProperty dvbSubDestinationSettingsProperty =
   * DvbSubDestinationSettingsProperty.builder()
   * .alignment("alignment")
   * .backgroundColor("backgroundColor")
   * .backgroundOpacity(123)
   * .font(InputLocationProperty.builder()
   * .passwordParam("passwordParam")
   * .uri("uri")
   * .username("username")
   * .build())
   * .fontColor("fontColor")
   * .fontOpacity(123)
   * .fontResolution(123)
   * .fontSize("fontSize")
   * .outlineColor("outlineColor")
   * .outlineSize(123)
   * .shadowColor("shadowColor")
   * .shadowOpacity(123)
   * .shadowXOffset(123)
   * .shadowYOffset(123)
   * .teletextGridControl("teletextGridControl")
   * .xPosition(123)
   * .yPosition(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html)
   */
  public interface DvbSubDestinationSettingsProperty {
    /**
     * If no explicit xPosition or yPosition is provided, setting the alignment to centered places
     * the captions at the bottom center of the output.
     *
     * Similarly, setting a left alignment aligns captions to the bottom left of the output. If x
     * and y positions are specified in conjunction with the alignment parameter, the font is justified
     * (either left or centered) relative to those coordinates. Selecting "smart" justification
     * left-justifies live subtitles and center-justifies pre-recorded subtitles. This option is not
     * valid for source captions that are STL or 608/embedded. These source settings are already
     * pre-defined by the captions stream. All burn-in and DVB-Sub font settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-alignment)
     */
    public fun alignment(): String? = unwrap(this).getAlignment()

    /**
     * Specifies the color of the rectangle behind the captions.
     *
     * All burn-in and DVB-Sub font settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-backgroundcolor)
     */
    public fun backgroundColor(): String? = unwrap(this).getBackgroundColor()

    /**
     * Specifies the opacity of the background rectangle.
     *
     * 255 is opaque; 0 is transparent. Keeping this parameter blank is equivalent to setting it to
     * 0 (transparent). All burn-in and DVB-Sub font settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-backgroundopacity)
     */
    public fun backgroundOpacity(): Number? = unwrap(this).getBackgroundOpacity()

    /**
     * The external font file that is used for captions burn-in.
     *
     * The file extension must be .ttf or .tte. Although you can select output fonts for many
     * different types of input captions, embedded, STL, and Teletext sources use a strict grid system.
     * Using external fonts with these captions sources could cause an unexpected display of
     * proportional fonts. All burn-in and DVB-Sub font settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-font)
     */
    public fun font(): Any? = unwrap(this).getFont()

    /**
     * Specifies the color of the burned-in captions.
     *
     * This option is not valid for source captions that are STL, 608/embedded, or Teletext. These
     * source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font
     * settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-fontcolor)
     */
    public fun fontColor(): String? = unwrap(this).getFontColor()

    /**
     * Specifies the opacity of the burned-in captions.
     *
     * 255 is opaque; 0 is transparent. All burn-in and DVB-Sub font settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-fontopacity)
     */
    public fun fontOpacity(): Number? = unwrap(this).getFontOpacity()

    /**
     * The font resolution in DPI (dots per inch).
     *
     * The default is 96 dpi. All burn-in and DVB-Sub font settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-fontresolution)
     */
    public fun fontResolution(): Number? = unwrap(this).getFontResolution()

    /**
     * When set to auto, fontSize scales depending on the size of the output.
     *
     * Providing a positive integer specifies the exact font size in points. All burn-in and DVB-Sub
     * font settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-fontsize)
     */
    public fun fontSize(): String? = unwrap(this).getFontSize()

    /**
     * Specifies the font outline color.
     *
     * This option is not valid for source captions that are either 608/embedded or Teletext. These
     * source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font
     * settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-outlinecolor)
     */
    public fun outlineColor(): String? = unwrap(this).getOutlineColor()

    /**
     * Specifies the font outline size in pixels.
     *
     * This option is not valid for source captions that are either 608/embedded or Teletext. These
     * source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font
     * settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-outlinesize)
     */
    public fun outlineSize(): Number? = unwrap(this).getOutlineSize()

    /**
     * Specifies the color of the shadow that is cast by the captions.
     *
     * All burn-in and DVB-Sub font settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-shadowcolor)
     */
    public fun shadowColor(): String? = unwrap(this).getShadowColor()

    /**
     * Specifies the opacity of the shadow.
     *
     * 255 is opaque; 0 is transparent. Keeping this parameter blank is equivalent to setting it to
     * 0 (transparent). All burn-in and DVB-Sub font settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-shadowopacity)
     */
    public fun shadowOpacity(): Number? = unwrap(this).getShadowOpacity()

    /**
     * Specifies the horizontal offset of the shadow relative to the captions in pixels.
     *
     * A value of -2 would result in a shadow offset 2 pixels to the left. All burn-in and DVB-Sub
     * font settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-shadowxoffset)
     */
    public fun shadowXOffset(): Number? = unwrap(this).getShadowXOffset()

    /**
     * Specifies the vertical offset of the shadow relative to the captions in pixels.
     *
     * A value of -2 would result in a shadow offset 2 pixels above the text. All burn-in and
     * DVB-Sub font settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-shadowyoffset)
     */
    public fun shadowYOffset(): Number? = unwrap(this).getShadowYOffset()

    /**
     * Controls whether a fixed grid size is used to generate the output subtitles bitmap.
     *
     * This applies to only Teletext inputs and DVB-Sub/Burn-in outputs.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-teletextgridcontrol)
     */
    public fun teletextGridControl(): String? = unwrap(this).getTeletextGridControl()

    /**
     * Specifies the horizontal position of the captions relative to the left side of the output in
     * pixels.
     *
     * A value of 10 would result in the captions starting 10 pixels from the left of the output. If
     * no explicit xPosition is provided, the horizontal captions position is determined by the
     * alignment parameter. This option is not valid for source captions that are STL, 608/embedded, or
     * Teletext. These source settings are already pre-defined by the captions stream. All burn-in and
     * DVB-Sub font settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-xposition)
     */
    public fun xPosition(): Number? = unwrap(this).getXPosition()

    /**
     * Specifies the vertical position of the captions relative to the top of the output in pixels.
     *
     * A value of 10 would result in the captions starting 10 pixels from the top of the output. If
     * no explicit yPosition is provided, the captions are positioned towards the bottom of the output.
     * This option is not valid for source captions that are STL, 608/embedded, or Teletext. These
     * source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font
     * settings must match.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-yposition)
     */
    public fun yPosition(): Number? = unwrap(this).getYPosition()

    /**
     * A builder for [DvbSubDestinationSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param alignment If no explicit xPosition or yPosition is provided, setting the alignment
       * to centered places the captions at the bottom center of the output.
       * Similarly, setting a left alignment aligns captions to the bottom left of the output. If x
       * and y positions are specified in conjunction with the alignment parameter, the font is
       * justified (either left or centered) relative to those coordinates. Selecting "smart"
       * justification left-justifies live subtitles and center-justifies pre-recorded subtitles. This
       * option is not valid for source captions that are STL or 608/embedded. These source settings
       * are already pre-defined by the captions stream. All burn-in and DVB-Sub font settings must
       * match.
       */
      public fun alignment(alignment: String)

      /**
       * @param backgroundColor Specifies the color of the rectangle behind the captions.
       * All burn-in and DVB-Sub font settings must match.
       */
      public fun backgroundColor(backgroundColor: String)

      /**
       * @param backgroundOpacity Specifies the opacity of the background rectangle.
       * 255 is opaque; 0 is transparent. Keeping this parameter blank is equivalent to setting it
       * to 0 (transparent). All burn-in and DVB-Sub font settings must match.
       */
      public fun backgroundOpacity(backgroundOpacity: Number)

      /**
       * @param font The external font file that is used for captions burn-in.
       * The file extension must be .ttf or .tte. Although you can select output fonts for many
       * different types of input captions, embedded, STL, and Teletext sources use a strict grid
       * system. Using external fonts with these captions sources could cause an unexpected display of
       * proportional fonts. All burn-in and DVB-Sub font settings must match.
       */
      public fun font(font: IResolvable)

      /**
       * @param font The external font file that is used for captions burn-in.
       * The file extension must be .ttf or .tte. Although you can select output fonts for many
       * different types of input captions, embedded, STL, and Teletext sources use a strict grid
       * system. Using external fonts with these captions sources could cause an unexpected display of
       * proportional fonts. All burn-in and DVB-Sub font settings must match.
       */
      public fun font(font: InputLocationProperty)

      /**
       * @param font The external font file that is used for captions burn-in.
       * The file extension must be .ttf or .tte. Although you can select output fonts for many
       * different types of input captions, embedded, STL, and Teletext sources use a strict grid
       * system. Using external fonts with these captions sources could cause an unexpected display of
       * proportional fonts. All burn-in and DVB-Sub font settings must match.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("e5227e364a0e2717d6a35bd34eedf478ab33ea797e1595280ee32edac263126a")
      public fun font(font: InputLocationProperty.Builder.() -> Unit)

      /**
       * @param fontColor Specifies the color of the burned-in captions.
       * This option is not valid for source captions that are STL, 608/embedded, or Teletext. These
       * source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font
       * settings must match.
       */
      public fun fontColor(fontColor: String)

      /**
       * @param fontOpacity Specifies the opacity of the burned-in captions.
       * 255 is opaque; 0 is transparent. All burn-in and DVB-Sub font settings must match.
       */
      public fun fontOpacity(fontOpacity: Number)

      /**
       * @param fontResolution The font resolution in DPI (dots per inch).
       * The default is 96 dpi. All burn-in and DVB-Sub font settings must match.
       */
      public fun fontResolution(fontResolution: Number)

      /**
       * @param fontSize When set to auto, fontSize scales depending on the size of the output.
       * Providing a positive integer specifies the exact font size in points. All burn-in and
       * DVB-Sub font settings must match.
       */
      public fun fontSize(fontSize: String)

      /**
       * @param outlineColor Specifies the font outline color.
       * This option is not valid for source captions that are either 608/embedded or Teletext.
       * These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub
       * font settings must match.
       */
      public fun outlineColor(outlineColor: String)

      /**
       * @param outlineSize Specifies the font outline size in pixels.
       * This option is not valid for source captions that are either 608/embedded or Teletext.
       * These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub
       * font settings must match.
       */
      public fun outlineSize(outlineSize: Number)

      /**
       * @param shadowColor Specifies the color of the shadow that is cast by the captions.
       * All burn-in and DVB-Sub font settings must match.
       */
      public fun shadowColor(shadowColor: String)

      /**
       * @param shadowOpacity Specifies the opacity of the shadow.
       * 255 is opaque; 0 is transparent. Keeping this parameter blank is equivalent to setting it
       * to 0 (transparent). All burn-in and DVB-Sub font settings must match.
       */
      public fun shadowOpacity(shadowOpacity: Number)

      /**
       * @param shadowXOffset Specifies the horizontal offset of the shadow relative to the captions
       * in pixels.
       * A value of -2 would result in a shadow offset 2 pixels to the left. All burn-in and DVB-Sub
       * font settings must match.
       */
      public fun shadowXOffset(shadowXOffset: Number)

      /**
       * @param shadowYOffset Specifies the vertical offset of the shadow relative to the captions
       * in pixels.
       * A value of -2 would result in a shadow offset 2 pixels above the text. All burn-in and
       * DVB-Sub font settings must match.
       */
      public fun shadowYOffset(shadowYOffset: Number)

      /**
       * @param teletextGridControl Controls whether a fixed grid size is used to generate the
       * output subtitles bitmap.
       * This applies to only Teletext inputs and DVB-Sub/Burn-in outputs.
       */
      public fun teletextGridControl(teletextGridControl: String)

      /**
       * @param xPosition Specifies the horizontal position of the captions relative to the left
       * side of the output in pixels.
       * A value of 10 would result in the captions starting 10 pixels from the left of the output.
       * If no explicit xPosition is provided, the horizontal captions position is determined by the
       * alignment parameter. This option is not valid for source captions that are STL, 608/embedded,
       * or Teletext. These source settings are already pre-defined by the captions stream. All burn-in
       * and DVB-Sub font settings must match.
       */
      public fun xPosition(xPosition: Number)

      /**
       * @param yPosition Specifies the vertical position of the captions relative to the top of the
       * output in pixels.
       * A value of 10 would result in the captions starting 10 pixels from the top of the output.
       * If no explicit yPosition is provided, the captions are positioned towards the bottom of the
       * output. This option is not valid for source captions that are STL, 608/embedded, or Teletext.
       * These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub
       * font settings must match.
       */
      public fun yPosition(yPosition: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.DvbSubDestinationSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.DvbSubDestinationSettingsProperty.builder()

      /**
       * @param alignment If no explicit xPosition or yPosition is provided, setting the alignment
       * to centered places the captions at the bottom center of the output.
       * Similarly, setting a left alignment aligns captions to the bottom left of the output. If x
       * and y positions are specified in conjunction with the alignment parameter, the font is
       * justified (either left or centered) relative to those coordinates. Selecting "smart"
       * justification left-justifies live subtitles and center-justifies pre-recorded subtitles. This
       * option is not valid for source captions that are STL or 608/embedded. These source settings
       * are already pre-defined by the captions stream. All burn-in and DVB-Sub font settings must
       * match.
       */
      override fun alignment(alignment: String) {
        cdkBuilder.alignment(alignment)
      }

      /**
       * @param backgroundColor Specifies the color of the rectangle behind the captions.
       * All burn-in and DVB-Sub font settings must match.
       */
      override fun backgroundColor(backgroundColor: String) {
        cdkBuilder.backgroundColor(backgroundColor)
      }

      /**
       * @param backgroundOpacity Specifies the opacity of the background rectangle.
       * 255 is opaque; 0 is transparent. Keeping this parameter blank is equivalent to setting it
       * to 0 (transparent). All burn-in and DVB-Sub font settings must match.
       */
      override fun backgroundOpacity(backgroundOpacity: Number) {
        cdkBuilder.backgroundOpacity(backgroundOpacity)
      }

      /**
       * @param font The external font file that is used for captions burn-in.
       * The file extension must be .ttf or .tte. Although you can select output fonts for many
       * different types of input captions, embedded, STL, and Teletext sources use a strict grid
       * system. Using external fonts with these captions sources could cause an unexpected display of
       * proportional fonts. All burn-in and DVB-Sub font settings must match.
       */
      override fun font(font: IResolvable) {
        cdkBuilder.font(font.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param font The external font file that is used for captions burn-in.
       * The file extension must be .ttf or .tte. Although you can select output fonts for many
       * different types of input captions, embedded, STL, and Teletext sources use a strict grid
       * system. Using external fonts with these captions sources could cause an unexpected display of
       * proportional fonts. All burn-in and DVB-Sub font settings must match.
       */
      override fun font(font: InputLocationProperty) {
        cdkBuilder.font(font.let(InputLocationProperty.Companion::unwrap))
      }

      /**
       * @param font The external font file that is used for captions burn-in.
       * The file extension must be .ttf or .tte. Although you can select output fonts for many
       * different types of input captions, embedded, STL, and Teletext sources use a strict grid
       * system. Using external fonts with these captions sources could cause an unexpected display of
       * proportional fonts. All burn-in and DVB-Sub font settings must match.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("e5227e364a0e2717d6a35bd34eedf478ab33ea797e1595280ee32edac263126a")
      override fun font(font: InputLocationProperty.Builder.() -> Unit): Unit =
          font(InputLocationProperty(font))

      /**
       * @param fontColor Specifies the color of the burned-in captions.
       * This option is not valid for source captions that are STL, 608/embedded, or Teletext. These
       * source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font
       * settings must match.
       */
      override fun fontColor(fontColor: String) {
        cdkBuilder.fontColor(fontColor)
      }

      /**
       * @param fontOpacity Specifies the opacity of the burned-in captions.
       * 255 is opaque; 0 is transparent. All burn-in and DVB-Sub font settings must match.
       */
      override fun fontOpacity(fontOpacity: Number) {
        cdkBuilder.fontOpacity(fontOpacity)
      }

      /**
       * @param fontResolution The font resolution in DPI (dots per inch).
       * The default is 96 dpi. All burn-in and DVB-Sub font settings must match.
       */
      override fun fontResolution(fontResolution: Number) {
        cdkBuilder.fontResolution(fontResolution)
      }

      /**
       * @param fontSize When set to auto, fontSize scales depending on the size of the output.
       * Providing a positive integer specifies the exact font size in points. All burn-in and
       * DVB-Sub font settings must match.
       */
      override fun fontSize(fontSize: String) {
        cdkBuilder.fontSize(fontSize)
      }

      /**
       * @param outlineColor Specifies the font outline color.
       * This option is not valid for source captions that are either 608/embedded or Teletext.
       * These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub
       * font settings must match.
       */
      override fun outlineColor(outlineColor: String) {
        cdkBuilder.outlineColor(outlineColor)
      }

      /**
       * @param outlineSize Specifies the font outline size in pixels.
       * This option is not valid for source captions that are either 608/embedded or Teletext.
       * These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub
       * font settings must match.
       */
      override fun outlineSize(outlineSize: Number) {
        cdkBuilder.outlineSize(outlineSize)
      }

      /**
       * @param shadowColor Specifies the color of the shadow that is cast by the captions.
       * All burn-in and DVB-Sub font settings must match.
       */
      override fun shadowColor(shadowColor: String) {
        cdkBuilder.shadowColor(shadowColor)
      }

      /**
       * @param shadowOpacity Specifies the opacity of the shadow.
       * 255 is opaque; 0 is transparent. Keeping this parameter blank is equivalent to setting it
       * to 0 (transparent). All burn-in and DVB-Sub font settings must match.
       */
      override fun shadowOpacity(shadowOpacity: Number) {
        cdkBuilder.shadowOpacity(shadowOpacity)
      }

      /**
       * @param shadowXOffset Specifies the horizontal offset of the shadow relative to the captions
       * in pixels.
       * A value of -2 would result in a shadow offset 2 pixels to the left. All burn-in and DVB-Sub
       * font settings must match.
       */
      override fun shadowXOffset(shadowXOffset: Number) {
        cdkBuilder.shadowXOffset(shadowXOffset)
      }

      /**
       * @param shadowYOffset Specifies the vertical offset of the shadow relative to the captions
       * in pixels.
       * A value of -2 would result in a shadow offset 2 pixels above the text. All burn-in and
       * DVB-Sub font settings must match.
       */
      override fun shadowYOffset(shadowYOffset: Number) {
        cdkBuilder.shadowYOffset(shadowYOffset)
      }

      /**
       * @param teletextGridControl Controls whether a fixed grid size is used to generate the
       * output subtitles bitmap.
       * This applies to only Teletext inputs and DVB-Sub/Burn-in outputs.
       */
      override fun teletextGridControl(teletextGridControl: String) {
        cdkBuilder.teletextGridControl(teletextGridControl)
      }

      /**
       * @param xPosition Specifies the horizontal position of the captions relative to the left
       * side of the output in pixels.
       * A value of 10 would result in the captions starting 10 pixels from the left of the output.
       * If no explicit xPosition is provided, the horizontal captions position is determined by the
       * alignment parameter. This option is not valid for source captions that are STL, 608/embedded,
       * or Teletext. These source settings are already pre-defined by the captions stream. All burn-in
       * and DVB-Sub font settings must match.
       */
      override fun xPosition(xPosition: Number) {
        cdkBuilder.xPosition(xPosition)
      }

      /**
       * @param yPosition Specifies the vertical position of the captions relative to the top of the
       * output in pixels.
       * A value of 10 would result in the captions starting 10 pixels from the top of the output.
       * If no explicit yPosition is provided, the captions are positioned towards the bottom of the
       * output. This option is not valid for source captions that are STL, 608/embedded, or Teletext.
       * These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub
       * font settings must match.
       */
      override fun yPosition(yPosition: Number) {
        cdkBuilder.yPosition(yPosition)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.DvbSubDestinationSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.DvbSubDestinationSettingsProperty,
    ) : CdkObject(cdkObject),
        DvbSubDestinationSettingsProperty {
      /**
       * If no explicit xPosition or yPosition is provided, setting the alignment to centered places
       * the captions at the bottom center of the output.
       *
       * Similarly, setting a left alignment aligns captions to the bottom left of the output. If x
       * and y positions are specified in conjunction with the alignment parameter, the font is
       * justified (either left or centered) relative to those coordinates. Selecting "smart"
       * justification left-justifies live subtitles and center-justifies pre-recorded subtitles. This
       * option is not valid for source captions that are STL or 608/embedded. These source settings
       * are already pre-defined by the captions stream. All burn-in and DVB-Sub font settings must
       * match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-alignment)
       */
      override fun alignment(): String? = unwrap(this).getAlignment()

      /**
       * Specifies the color of the rectangle behind the captions.
       *
       * All burn-in and DVB-Sub font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-backgroundcolor)
       */
      override fun backgroundColor(): String? = unwrap(this).getBackgroundColor()

      /**
       * Specifies the opacity of the background rectangle.
       *
       * 255 is opaque; 0 is transparent. Keeping this parameter blank is equivalent to setting it
       * to 0 (transparent). All burn-in and DVB-Sub font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-backgroundopacity)
       */
      override fun backgroundOpacity(): Number? = unwrap(this).getBackgroundOpacity()

      /**
       * The external font file that is used for captions burn-in.
       *
       * The file extension must be .ttf or .tte. Although you can select output fonts for many
       * different types of input captions, embedded, STL, and Teletext sources use a strict grid
       * system. Using external fonts with these captions sources could cause an unexpected display of
       * proportional fonts. All burn-in and DVB-Sub font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-font)
       */
      override fun font(): Any? = unwrap(this).getFont()

      /**
       * Specifies the color of the burned-in captions.
       *
       * This option is not valid for source captions that are STL, 608/embedded, or Teletext. These
       * source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font
       * settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-fontcolor)
       */
      override fun fontColor(): String? = unwrap(this).getFontColor()

      /**
       * Specifies the opacity of the burned-in captions.
       *
       * 255 is opaque; 0 is transparent. All burn-in and DVB-Sub font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-fontopacity)
       */
      override fun fontOpacity(): Number? = unwrap(this).getFontOpacity()

      /**
       * The font resolution in DPI (dots per inch).
       *
       * The default is 96 dpi. All burn-in and DVB-Sub font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-fontresolution)
       */
      override fun fontResolution(): Number? = unwrap(this).getFontResolution()

      /**
       * When set to auto, fontSize scales depending on the size of the output.
       *
       * Providing a positive integer specifies the exact font size in points. All burn-in and
       * DVB-Sub font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-fontsize)
       */
      override fun fontSize(): String? = unwrap(this).getFontSize()

      /**
       * Specifies the font outline color.
       *
       * This option is not valid for source captions that are either 608/embedded or Teletext.
       * These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub
       * font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-outlinecolor)
       */
      override fun outlineColor(): String? = unwrap(this).getOutlineColor()

      /**
       * Specifies the font outline size in pixels.
       *
       * This option is not valid for source captions that are either 608/embedded or Teletext.
       * These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub
       * font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-outlinesize)
       */
      override fun outlineSize(): Number? = unwrap(this).getOutlineSize()

      /**
       * Specifies the color of the shadow that is cast by the captions.
       *
       * All burn-in and DVB-Sub font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-shadowcolor)
       */
      override fun shadowColor(): String? = unwrap(this).getShadowColor()

      /**
       * Specifies the opacity of the shadow.
       *
       * 255 is opaque; 0 is transparent. Keeping this parameter blank is equivalent to setting it
       * to 0 (transparent). All burn-in and DVB-Sub font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-shadowopacity)
       */
      override fun shadowOpacity(): Number? = unwrap(this).getShadowOpacity()

      /**
       * Specifies the horizontal offset of the shadow relative to the captions in pixels.
       *
       * A value of -2 would result in a shadow offset 2 pixels to the left. All burn-in and DVB-Sub
       * font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-shadowxoffset)
       */
      override fun shadowXOffset(): Number? = unwrap(this).getShadowXOffset()

      /**
       * Specifies the vertical offset of the shadow relative to the captions in pixels.
       *
       * A value of -2 would result in a shadow offset 2 pixels above the text. All burn-in and
       * DVB-Sub font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-shadowyoffset)
       */
      override fun shadowYOffset(): Number? = unwrap(this).getShadowYOffset()

      /**
       * Controls whether a fixed grid size is used to generate the output subtitles bitmap.
       *
       * This applies to only Teletext inputs and DVB-Sub/Burn-in outputs.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-teletextgridcontrol)
       */
      override fun teletextGridControl(): String? = unwrap(this).getTeletextGridControl()

      /**
       * Specifies the horizontal position of the captions relative to the left side of the output
       * in pixels.
       *
       * A value of 10 would result in the captions starting 10 pixels from the left of the output.
       * If no explicit xPosition is provided, the horizontal captions position is determined by the
       * alignment parameter. This option is not valid for source captions that are STL, 608/embedded,
       * or Teletext. These source settings are already pre-defined by the captions stream. All burn-in
       * and DVB-Sub font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-xposition)
       */
      override fun xPosition(): Number? = unwrap(this).getXPosition()

      /**
       * Specifies the vertical position of the captions relative to the top of the output in
       * pixels.
       *
       * A value of 10 would result in the captions starting 10 pixels from the top of the output.
       * If no explicit yPosition is provided, the captions are positioned towards the bottom of the
       * output. This option is not valid for source captions that are STL, 608/embedded, or Teletext.
       * These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub
       * font settings must match.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-yposition)
       */
      override fun yPosition(): Number? = unwrap(this).getYPosition()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          DvbSubDestinationSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.DvbSubDestinationSettingsProperty):
          DvbSubDestinationSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          DvbSubDestinationSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: DvbSubDestinationSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.DvbSubDestinationSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.DvbSubDestinationSettingsProperty
    }
  }

  /**
   * Information about the DVB Sub captions to extract from the input.
   *
   * The parent of this entity is CaptionSelectorSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * DvbSubSourceSettingsProperty dvbSubSourceSettingsProperty =
   * DvbSubSourceSettingsProperty.builder()
   * .ocrLanguage("ocrLanguage")
   * .pid(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubsourcesettings.html)
   */
  public interface DvbSubSourceSettingsProperty {
    /**
     * If you will configure a WebVTT caption description that references this caption selector, use
     * this field to provide the language to consider when translating the image-based source to text.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubsourcesettings.html#cfn-medialive-channel-dvbsubsourcesettings-ocrlanguage)
     */
    public fun ocrLanguage(): String? = unwrap(this).getOcrLanguage()

    /**
     * When using DVB-Sub with burn-in or SMPTE-TT, use this PID for the source content.
     *
     * It is unused for DVB-Sub passthrough. All DVB-Sub content is passed through, regardless of
     * selectors.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubsourcesettings.html#cfn-medialive-channel-dvbsubsourcesettings-pid)
     */
    public fun pid(): Number? = unwrap(this).getPid()

    /**
     * A builder for [DvbSubSourceSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param ocrLanguage If you will configure a WebVTT caption description that references this
       * caption selector, use this field to provide the language to consider when translating the
       * image-based source to text.
       */
      public fun ocrLanguage(ocrLanguage: String)

      /**
       * @param pid When using DVB-Sub with burn-in or SMPTE-TT, use this PID for the source
       * content.
       * It is unused for DVB-Sub passthrough. All DVB-Sub content is passed through, regardless of
       * selectors.
       */
      public fun pid(pid: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.DvbSubSourceSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.DvbSubSourceSettingsProperty.builder()

      /**
       * @param ocrLanguage If you will configure a WebVTT caption description that references this
       * caption selector, use this field to provide the language to consider when translating the
       * image-based source to text.
       */
      override fun ocrLanguage(ocrLanguage: String) {
        cdkBuilder.ocrLanguage(ocrLanguage)
      }

      /**
       * @param pid When using DVB-Sub with burn-in or SMPTE-TT, use this PID for the source
       * content.
       * It is unused for DVB-Sub passthrough. All DVB-Sub content is passed through, regardless of
       * selectors.
       */
      override fun pid(pid: Number) {
        cdkBuilder.pid(pid)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.DvbSubSourceSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.DvbSubSourceSettingsProperty,
    ) : CdkObject(cdkObject),
        DvbSubSourceSettingsProperty {
      /**
       * If you will configure a WebVTT caption description that references this caption selector,
       * use this field to provide the language to consider when translating the image-based source to
       * text.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubsourcesettings.html#cfn-medialive-channel-dvbsubsourcesettings-ocrlanguage)
       */
      override fun ocrLanguage(): String? = unwrap(this).getOcrLanguage()

      /**
       * When using DVB-Sub with burn-in or SMPTE-TT, use this PID for the source content.
       *
       * It is unused for DVB-Sub passthrough. All DVB-Sub content is passed through, regardless of
       * selectors.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubsourcesettings.html#cfn-medialive-channel-dvbsubsourcesettings-pid)
       */
      override fun pid(): Number? = unwrap(this).getPid()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): DvbSubSourceSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.DvbSubSourceSettingsProperty):
          DvbSubSourceSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          DvbSubSourceSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: DvbSubSourceSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.DvbSubSourceSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.DvbSubSourceSettingsProperty
    }
  }

  /**
   * The DVB Time and Date Table (TDT).
   *
   * The parent of this entity is M2tsSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * DvbTdtSettingsProperty dvbTdtSettingsProperty = DvbTdtSettingsProperty.builder()
   * .repInterval(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbtdtsettings.html)
   */
  public interface DvbTdtSettingsProperty {
    /**
     * The number of milliseconds between instances of this table in the output transport stream.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbtdtsettings.html#cfn-medialive-channel-dvbtdtsettings-repinterval)
     */
    public fun repInterval(): Number? = unwrap(this).getRepInterval()

    /**
     * A builder for [DvbTdtSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param repInterval The number of milliseconds between instances of this table in the output
       * transport stream.
       */
      public fun repInterval(repInterval: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.DvbTdtSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.DvbTdtSettingsProperty.builder()

      /**
       * @param repInterval The number of milliseconds between instances of this table in the output
       * transport stream.
       */
      override fun repInterval(repInterval: Number) {
        cdkBuilder.repInterval(repInterval)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.DvbTdtSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.DvbTdtSettingsProperty,
    ) : CdkObject(cdkObject),
        DvbTdtSettingsProperty {
      /**
       * The number of milliseconds between instances of this table in the output transport stream.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbtdtsettings.html#cfn-medialive-channel-dvbtdtsettings-repinterval)
       */
      override fun repInterval(): Number? = unwrap(this).getRepInterval()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): DvbTdtSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.DvbTdtSettingsProperty):
          DvbTdtSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? DvbTdtSettingsProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: DvbTdtSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.DvbTdtSettingsProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.DvbTdtSettingsProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * Eac3AtmosSettingsProperty eac3AtmosSettingsProperty = Eac3AtmosSettingsProperty.builder()
   * .bitrate(123)
   * .codingMode("codingMode")
   * .dialnorm(123)
   * .drcLine("drcLine")
   * .drcRf("drcRf")
   * .heightTrim(123)
   * .surroundTrim(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3atmossettings.html)
   */
  public interface Eac3AtmosSettingsProperty {
    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3atmossettings.html#cfn-medialive-channel-eac3atmossettings-bitrate)
     */
    public fun bitrate(): Number? = unwrap(this).getBitrate()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3atmossettings.html#cfn-medialive-channel-eac3atmossettings-codingmode)
     */
    public fun codingMode(): String? = unwrap(this).getCodingMode()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3atmossettings.html#cfn-medialive-channel-eac3atmossettings-dialnorm)
     */
    public fun dialnorm(): Number? = unwrap(this).getDialnorm()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3atmossettings.html#cfn-medialive-channel-eac3atmossettings-drcline)
     */
    public fun drcLine(): String? = unwrap(this).getDrcLine()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3atmossettings.html#cfn-medialive-channel-eac3atmossettings-drcrf)
     */
    public fun drcRf(): String? = unwrap(this).getDrcRf()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3atmossettings.html#cfn-medialive-channel-eac3atmossettings-heighttrim)
     */
    public fun heightTrim(): Number? = unwrap(this).getHeightTrim()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3atmossettings.html#cfn-medialive-channel-eac3atmossettings-surroundtrim)
     */
    public fun surroundTrim(): Number? = unwrap(this).getSurroundTrim()

    /**
     * A builder for [Eac3AtmosSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param bitrate the value to be set.
       */
      public fun bitrate(bitrate: Number)

      /**
       * @param codingMode the value to be set.
       */
      public fun codingMode(codingMode: String)

      /**
       * @param dialnorm the value to be set.
       */
      public fun dialnorm(dialnorm: Number)

      /**
       * @param drcLine the value to be set.
       */
      public fun drcLine(drcLine: String)

      /**
       * @param drcRf the value to be set.
       */
      public fun drcRf(drcRf: String)

      /**
       * @param heightTrim the value to be set.
       */
      public fun heightTrim(heightTrim: Number)

      /**
       * @param surroundTrim the value to be set.
       */
      public fun surroundTrim(surroundTrim: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.Eac3AtmosSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.Eac3AtmosSettingsProperty.builder()

      /**
       * @param bitrate the value to be set.
       */
      override fun bitrate(bitrate: Number) {
        cdkBuilder.bitrate(bitrate)
      }

      /**
       * @param codingMode the value to be set.
       */
      override fun codingMode(codingMode: String) {
        cdkBuilder.codingMode(codingMode)
      }

      /**
       * @param dialnorm the value to be set.
       */
      override fun dialnorm(dialnorm: Number) {
        cdkBuilder.dialnorm(dialnorm)
      }

      /**
       * @param drcLine the value to be set.
       */
      override fun drcLine(drcLine: String) {
        cdkBuilder.drcLine(drcLine)
      }

      /**
       * @param drcRf the value to be set.
       */
      override fun drcRf(drcRf: String) {
        cdkBuilder.drcRf(drcRf)
      }

      /**
       * @param heightTrim the value to be set.
       */
      override fun heightTrim(heightTrim: Number) {
        cdkBuilder.heightTrim(heightTrim)
      }

      /**
       * @param surroundTrim the value to be set.
       */
      override fun surroundTrim(surroundTrim: Number) {
        cdkBuilder.surroundTrim(surroundTrim)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.Eac3AtmosSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Eac3AtmosSettingsProperty,
    ) : CdkObject(cdkObject),
        Eac3AtmosSettingsProperty {
      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3atmossettings.html#cfn-medialive-channel-eac3atmossettings-bitrate)
       */
      override fun bitrate(): Number? = unwrap(this).getBitrate()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3atmossettings.html#cfn-medialive-channel-eac3atmossettings-codingmode)
       */
      override fun codingMode(): String? = unwrap(this).getCodingMode()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3atmossettings.html#cfn-medialive-channel-eac3atmossettings-dialnorm)
       */
      override fun dialnorm(): Number? = unwrap(this).getDialnorm()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3atmossettings.html#cfn-medialive-channel-eac3atmossettings-drcline)
       */
      override fun drcLine(): String? = unwrap(this).getDrcLine()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3atmossettings.html#cfn-medialive-channel-eac3atmossettings-drcrf)
       */
      override fun drcRf(): String? = unwrap(this).getDrcRf()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3atmossettings.html#cfn-medialive-channel-eac3atmossettings-heighttrim)
       */
      override fun heightTrim(): Number? = unwrap(this).getHeightTrim()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3atmossettings.html#cfn-medialive-channel-eac3atmossettings-surroundtrim)
       */
      override fun surroundTrim(): Number? = unwrap(this).getSurroundTrim()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): Eac3AtmosSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Eac3AtmosSettingsProperty):
          Eac3AtmosSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          Eac3AtmosSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: Eac3AtmosSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.Eac3AtmosSettingsProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.Eac3AtmosSettingsProperty
    }
  }

  /**
   * The settings for an EAC3 audio encode in the output.
   *
   * The parent of this entity is AudioCodecSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * Eac3SettingsProperty eac3SettingsProperty = Eac3SettingsProperty.builder()
   * .attenuationControl("attenuationControl")
   * .bitrate(123)
   * .bitstreamMode("bitstreamMode")
   * .codingMode("codingMode")
   * .dcFilter("dcFilter")
   * .dialnorm(123)
   * .drcLine("drcLine")
   * .drcRf("drcRf")
   * .lfeControl("lfeControl")
   * .lfeFilter("lfeFilter")
   * .loRoCenterMixLevel(123)
   * .loRoSurroundMixLevel(123)
   * .ltRtCenterMixLevel(123)
   * .ltRtSurroundMixLevel(123)
   * .metadataControl("metadataControl")
   * .passthroughControl("passthroughControl")
   * .phaseControl("phaseControl")
   * .stereoDownmix("stereoDownmix")
   * .surroundExMode("surroundExMode")
   * .surroundMode("surroundMode")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html)
   */
  public interface Eac3SettingsProperty {
    /**
     * When set to attenuate3Db, applies a 3 dB attenuation to the surround channels.
     *
     * Used only for the 3/2 coding mode.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-attenuationcontrol)
     */
    public fun attenuationControl(): String? = unwrap(this).getAttenuationControl()

    /**
     * The average bitrate in bits/second.
     *
     * Valid bitrates depend on the coding mode.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-bitrate)
     */
    public fun bitrate(): Number? = unwrap(this).getBitrate()

    /**
     * Specifies the bitstream mode (bsmod) for the emitted E-AC-3 stream.
     *
     * For more information, see ATSC A/52-2012 (Annex E).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-bitstreammode)
     */
    public fun bitstreamMode(): String? = unwrap(this).getBitstreamMode()

    /**
     * The Dolby Digital Plus coding mode.
     *
     * This mode determines the number of channels.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-codingmode)
     */
    public fun codingMode(): String? = unwrap(this).getCodingMode()

    /**
     * When set to enabled, activates a DC highpass filter for all input channels.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-dcfilter)
     */
    public fun dcFilter(): String? = unwrap(this).getDcFilter()

    /**
     * Sets the dialnorm for the output.
     *
     * If blank and the input audio is Dolby Digital Plus, dialnorm will be passed through.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-dialnorm)
     */
    public fun dialnorm(): Number? = unwrap(this).getDialnorm()

    /**
     * Sets the Dolby dynamic range compression profile.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-drcline)
     */
    public fun drcLine(): String? = unwrap(this).getDrcLine()

    /**
     * Sets the profile for heavy Dolby dynamic range compression, ensuring that the instantaneous
     * signal peaks do not exceed specified levels.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-drcrf)
     */
    public fun drcRf(): String? = unwrap(this).getDrcRf()

    /**
     * When encoding 3/2 audio, setting to lfe enables the LFE channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-lfecontrol)
     */
    public fun lfeControl(): String? = unwrap(this).getLfeControl()

    /**
     * When set to enabled, applies a 120Hz lowpass filter to the LFE channel prior to encoding.
     *
     * Valid only with a codingMode32 coding mode.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-lfefilter)
     */
    public fun lfeFilter(): String? = unwrap(this).getLfeFilter()

    /**
     * The Left only/Right only center mix level.
     *
     * Used only for the 3/2 coding mode.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-lorocentermixlevel)
     */
    public fun loRoCenterMixLevel(): Number? = unwrap(this).getLoRoCenterMixLevel()

    /**
     * The Left only/Right only surround mix level.
     *
     * Used only for a 3/2 coding mode.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-lorosurroundmixlevel)
     */
    public fun loRoSurroundMixLevel(): Number? = unwrap(this).getLoRoSurroundMixLevel()

    /**
     * The Left total/Right total center mix level.
     *
     * Used only for a 3/2 coding mode.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-ltrtcentermixlevel)
     */
    public fun ltRtCenterMixLevel(): Number? = unwrap(this).getLtRtCenterMixLevel()

    /**
     * The Left total/Right total surround mix level.
     *
     * Used only for the 3/2 coding mode.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-ltrtsurroundmixlevel)
     */
    public fun ltRtSurroundMixLevel(): Number? = unwrap(this).getLtRtSurroundMixLevel()

    /**
     * When set to followInput, encoder metadata is sourced from the DD, DD+, or DolbyE decoder that
     * supplies this audio data.
     *
     * If the audio is not supplied from one of these streams, then the static metadata settings are
     * used.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-metadatacontrol)
     */
    public fun metadataControl(): String? = unwrap(this).getMetadataControl()

    /**
     * When set to whenPossible, input DD+ audio will be passed through if it is present on the
     * input.
     *
     * This detection is dynamic over the life of the transcode. Inputs that alternate between DD+
     * and non-DD+ content will have a consistent DD+ output as the system alternates between
     * passthrough and encoding.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-passthroughcontrol)
     */
    public fun passthroughControl(): String? = unwrap(this).getPassthroughControl()

    /**
     * When set to shift90Degrees, applies a 90-degree phase shift to the surround channels.
     *
     * Used only for a 3/2 coding mode.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-phasecontrol)
     */
    public fun phaseControl(): String? = unwrap(this).getPhaseControl()

    /**
     * A stereo downmix preference.
     *
     * Used only for the 3/2 coding mode.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-stereodownmix)
     */
    public fun stereoDownmix(): String? = unwrap(this).getStereoDownmix()

    /**
     * When encoding 3/2 audio, sets whether an extra center back surround channel is matrix encoded
     * into the left and right surround channels.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-surroundexmode)
     */
    public fun surroundExMode(): String? = unwrap(this).getSurroundExMode()

    /**
     * When encoding 2/0 audio, sets whether Dolby Surround is matrix-encoded into the two channels.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-surroundmode)
     */
    public fun surroundMode(): String? = unwrap(this).getSurroundMode()

    /**
     * A builder for [Eac3SettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param attenuationControl When set to attenuate3Db, applies a 3 dB attenuation to the
       * surround channels.
       * Used only for the 3/2 coding mode.
       */
      public fun attenuationControl(attenuationControl: String)

      /**
       * @param bitrate The average bitrate in bits/second.
       * Valid bitrates depend on the coding mode.
       */
      public fun bitrate(bitrate: Number)

      /**
       * @param bitstreamMode Specifies the bitstream mode (bsmod) for the emitted E-AC-3 stream.
       * For more information, see ATSC A/52-2012 (Annex E).
       */
      public fun bitstreamMode(bitstreamMode: String)

      /**
       * @param codingMode The Dolby Digital Plus coding mode.
       * This mode determines the number of channels.
       */
      public fun codingMode(codingMode: String)

      /**
       * @param dcFilter When set to enabled, activates a DC highpass filter for all input channels.
       */
      public fun dcFilter(dcFilter: String)

      /**
       * @param dialnorm Sets the dialnorm for the output.
       * If blank and the input audio is Dolby Digital Plus, dialnorm will be passed through.
       */
      public fun dialnorm(dialnorm: Number)

      /**
       * @param drcLine Sets the Dolby dynamic range compression profile.
       */
      public fun drcLine(drcLine: String)

      /**
       * @param drcRf Sets the profile for heavy Dolby dynamic range compression, ensuring that the
       * instantaneous signal peaks do not exceed specified levels.
       */
      public fun drcRf(drcRf: String)

      /**
       * @param lfeControl When encoding 3/2 audio, setting to lfe enables the LFE channel.
       */
      public fun lfeControl(lfeControl: String)

      /**
       * @param lfeFilter When set to enabled, applies a 120Hz lowpass filter to the LFE channel
       * prior to encoding.
       * Valid only with a codingMode32 coding mode.
       */
      public fun lfeFilter(lfeFilter: String)

      /**
       * @param loRoCenterMixLevel The Left only/Right only center mix level.
       * Used only for the 3/2 coding mode.
       */
      public fun loRoCenterMixLevel(loRoCenterMixLevel: Number)

      /**
       * @param loRoSurroundMixLevel The Left only/Right only surround mix level.
       * Used only for a 3/2 coding mode.
       */
      public fun loRoSurroundMixLevel(loRoSurroundMixLevel: Number)

      /**
       * @param ltRtCenterMixLevel The Left total/Right total center mix level.
       * Used only for a 3/2 coding mode.
       */
      public fun ltRtCenterMixLevel(ltRtCenterMixLevel: Number)

      /**
       * @param ltRtSurroundMixLevel The Left total/Right total surround mix level.
       * Used only for the 3/2 coding mode.
       */
      public fun ltRtSurroundMixLevel(ltRtSurroundMixLevel: Number)

      /**
       * @param metadataControl When set to followInput, encoder metadata is sourced from the DD,
       * DD+, or DolbyE decoder that supplies this audio data.
       * If the audio is not supplied from one of these streams, then the static metadata settings
       * are used.
       */
      public fun metadataControl(metadataControl: String)

      /**
       * @param passthroughControl When set to whenPossible, input DD+ audio will be passed through
       * if it is present on the input.
       * This detection is dynamic over the life of the transcode. Inputs that alternate between DD+
       * and non-DD+ content will have a consistent DD+ output as the system alternates between
       * passthrough and encoding.
       */
      public fun passthroughControl(passthroughControl: String)

      /**
       * @param phaseControl When set to shift90Degrees, applies a 90-degree phase shift to the
       * surround channels.
       * Used only for a 3/2 coding mode.
       */
      public fun phaseControl(phaseControl: String)

      /**
       * @param stereoDownmix A stereo downmix preference.
       * Used only for the 3/2 coding mode.
       */
      public fun stereoDownmix(stereoDownmix: String)

      /**
       * @param surroundExMode When encoding 3/2 audio, sets whether an extra center back surround
       * channel is matrix encoded into the left and right surround channels.
       */
      public fun surroundExMode(surroundExMode: String)

      /**
       * @param surroundMode When encoding 2/0 audio, sets whether Dolby Surround is matrix-encoded
       * into the two channels.
       */
      public fun surroundMode(surroundMode: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.Eac3SettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.Eac3SettingsProperty.builder()

      /**
       * @param attenuationControl When set to attenuate3Db, applies a 3 dB attenuation to the
       * surround channels.
       * Used only for the 3/2 coding mode.
       */
      override fun attenuationControl(attenuationControl: String) {
        cdkBuilder.attenuationControl(attenuationControl)
      }

      /**
       * @param bitrate The average bitrate in bits/second.
       * Valid bitrates depend on the coding mode.
       */
      override fun bitrate(bitrate: Number) {
        cdkBuilder.bitrate(bitrate)
      }

      /**
       * @param bitstreamMode Specifies the bitstream mode (bsmod) for the emitted E-AC-3 stream.
       * For more information, see ATSC A/52-2012 (Annex E).
       */
      override fun bitstreamMode(bitstreamMode: String) {
        cdkBuilder.bitstreamMode(bitstreamMode)
      }

      /**
       * @param codingMode The Dolby Digital Plus coding mode.
       * This mode determines the number of channels.
       */
      override fun codingMode(codingMode: String) {
        cdkBuilder.codingMode(codingMode)
      }

      /**
       * @param dcFilter When set to enabled, activates a DC highpass filter for all input channels.
       */
      override fun dcFilter(dcFilter: String) {
        cdkBuilder.dcFilter(dcFilter)
      }

      /**
       * @param dialnorm Sets the dialnorm for the output.
       * If blank and the input audio is Dolby Digital Plus, dialnorm will be passed through.
       */
      override fun dialnorm(dialnorm: Number) {
        cdkBuilder.dialnorm(dialnorm)
      }

      /**
       * @param drcLine Sets the Dolby dynamic range compression profile.
       */
      override fun drcLine(drcLine: String) {
        cdkBuilder.drcLine(drcLine)
      }

      /**
       * @param drcRf Sets the profile for heavy Dolby dynamic range compression, ensuring that the
       * instantaneous signal peaks do not exceed specified levels.
       */
      override fun drcRf(drcRf: String) {
        cdkBuilder.drcRf(drcRf)
      }

      /**
       * @param lfeControl When encoding 3/2 audio, setting to lfe enables the LFE channel.
       */
      override fun lfeControl(lfeControl: String) {
        cdkBuilder.lfeControl(lfeControl)
      }

      /**
       * @param lfeFilter When set to enabled, applies a 120Hz lowpass filter to the LFE channel
       * prior to encoding.
       * Valid only with a codingMode32 coding mode.
       */
      override fun lfeFilter(lfeFilter: String) {
        cdkBuilder.lfeFilter(lfeFilter)
      }

      /**
       * @param loRoCenterMixLevel The Left only/Right only center mix level.
       * Used only for the 3/2 coding mode.
       */
      override fun loRoCenterMixLevel(loRoCenterMixLevel: Number) {
        cdkBuilder.loRoCenterMixLevel(loRoCenterMixLevel)
      }

      /**
       * @param loRoSurroundMixLevel The Left only/Right only surround mix level.
       * Used only for a 3/2 coding mode.
       */
      override fun loRoSurroundMixLevel(loRoSurroundMixLevel: Number) {
        cdkBuilder.loRoSurroundMixLevel(loRoSurroundMixLevel)
      }

      /**
       * @param ltRtCenterMixLevel The Left total/Right total center mix level.
       * Used only for a 3/2 coding mode.
       */
      override fun ltRtCenterMixLevel(ltRtCenterMixLevel: Number) {
        cdkBuilder.ltRtCenterMixLevel(ltRtCenterMixLevel)
      }

      /**
       * @param ltRtSurroundMixLevel The Left total/Right total surround mix level.
       * Used only for the 3/2 coding mode.
       */
      override fun ltRtSurroundMixLevel(ltRtSurroundMixLevel: Number) {
        cdkBuilder.ltRtSurroundMixLevel(ltRtSurroundMixLevel)
      }

      /**
       * @param metadataControl When set to followInput, encoder metadata is sourced from the DD,
       * DD+, or DolbyE decoder that supplies this audio data.
       * If the audio is not supplied from one of these streams, then the static metadata settings
       * are used.
       */
      override fun metadataControl(metadataControl: String) {
        cdkBuilder.metadataControl(metadataControl)
      }

      /**
       * @param passthroughControl When set to whenPossible, input DD+ audio will be passed through
       * if it is present on the input.
       * This detection is dynamic over the life of the transcode. Inputs that alternate between DD+
       * and non-DD+ content will have a consistent DD+ output as the system alternates between
       * passthrough and encoding.
       */
      override fun passthroughControl(passthroughControl: String) {
        cdkBuilder.passthroughControl(passthroughControl)
      }

      /**
       * @param phaseControl When set to shift90Degrees, applies a 90-degree phase shift to the
       * surround channels.
       * Used only for a 3/2 coding mode.
       */
      override fun phaseControl(phaseControl: String) {
        cdkBuilder.phaseControl(phaseControl)
      }

      /**
       * @param stereoDownmix A stereo downmix preference.
       * Used only for the 3/2 coding mode.
       */
      override fun stereoDownmix(stereoDownmix: String) {
        cdkBuilder.stereoDownmix(stereoDownmix)
      }

      /**
       * @param surroundExMode When encoding 3/2 audio, sets whether an extra center back surround
       * channel is matrix encoded into the left and right surround channels.
       */
      override fun surroundExMode(surroundExMode: String) {
        cdkBuilder.surroundExMode(surroundExMode)
      }

      /**
       * @param surroundMode When encoding 2/0 audio, sets whether Dolby Surround is matrix-encoded
       * into the two channels.
       */
      override fun surroundMode(surroundMode: String) {
        cdkBuilder.surroundMode(surroundMode)
      }

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.Eac3SettingsProperty
          = cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Eac3SettingsProperty,
    ) : CdkObject(cdkObject),
        Eac3SettingsProperty {
      /**
       * When set to attenuate3Db, applies a 3 dB attenuation to the surround channels.
       *
       * Used only for the 3/2 coding mode.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-attenuationcontrol)
       */
      override fun attenuationControl(): String? = unwrap(this).getAttenuationControl()

      /**
       * The average bitrate in bits/second.
       *
       * Valid bitrates depend on the coding mode.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-bitrate)
       */
      override fun bitrate(): Number? = unwrap(this).getBitrate()

      /**
       * Specifies the bitstream mode (bsmod) for the emitted E-AC-3 stream.
       *
       * For more information, see ATSC A/52-2012 (Annex E).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-bitstreammode)
       */
      override fun bitstreamMode(): String? = unwrap(this).getBitstreamMode()

      /**
       * The Dolby Digital Plus coding mode.
       *
       * This mode determines the number of channels.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-codingmode)
       */
      override fun codingMode(): String? = unwrap(this).getCodingMode()

      /**
       * When set to enabled, activates a DC highpass filter for all input channels.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-dcfilter)
       */
      override fun dcFilter(): String? = unwrap(this).getDcFilter()

      /**
       * Sets the dialnorm for the output.
       *
       * If blank and the input audio is Dolby Digital Plus, dialnorm will be passed through.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-dialnorm)
       */
      override fun dialnorm(): Number? = unwrap(this).getDialnorm()

      /**
       * Sets the Dolby dynamic range compression profile.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-drcline)
       */
      override fun drcLine(): String? = unwrap(this).getDrcLine()

      /**
       * Sets the profile for heavy Dolby dynamic range compression, ensuring that the instantaneous
       * signal peaks do not exceed specified levels.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-drcrf)
       */
      override fun drcRf(): String? = unwrap(this).getDrcRf()

      /**
       * When encoding 3/2 audio, setting to lfe enables the LFE channel.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-lfecontrol)
       */
      override fun lfeControl(): String? = unwrap(this).getLfeControl()

      /**
       * When set to enabled, applies a 120Hz lowpass filter to the LFE channel prior to encoding.
       *
       * Valid only with a codingMode32 coding mode.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-lfefilter)
       */
      override fun lfeFilter(): String? = unwrap(this).getLfeFilter()

      /**
       * The Left only/Right only center mix level.
       *
       * Used only for the 3/2 coding mode.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-lorocentermixlevel)
       */
      override fun loRoCenterMixLevel(): Number? = unwrap(this).getLoRoCenterMixLevel()

      /**
       * The Left only/Right only surround mix level.
       *
       * Used only for a 3/2 coding mode.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-lorosurroundmixlevel)
       */
      override fun loRoSurroundMixLevel(): Number? = unwrap(this).getLoRoSurroundMixLevel()

      /**
       * The Left total/Right total center mix level.
       *
       * Used only for a 3/2 coding mode.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-ltrtcentermixlevel)
       */
      override fun ltRtCenterMixLevel(): Number? = unwrap(this).getLtRtCenterMixLevel()

      /**
       * The Left total/Right total surround mix level.
       *
       * Used only for the 3/2 coding mode.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-ltrtsurroundmixlevel)
       */
      override fun ltRtSurroundMixLevel(): Number? = unwrap(this).getLtRtSurroundMixLevel()

      /**
       * When set to followInput, encoder metadata is sourced from the DD, DD+, or DolbyE decoder
       * that supplies this audio data.
       *
       * If the audio is not supplied from one of these streams, then the static metadata settings
       * are used.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-metadatacontrol)
       */
      override fun metadataControl(): String? = unwrap(this).getMetadataControl()

      /**
       * When set to whenPossible, input DD+ audio will be passed through if it is present on the
       * input.
       *
       * This detection is dynamic over the life of the transcode. Inputs that alternate between DD+
       * and non-DD+ content will have a consistent DD+ output as the system alternates between
       * passthrough and encoding.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-passthroughcontrol)
       */
      override fun passthroughControl(): String? = unwrap(this).getPassthroughControl()

      /**
       * When set to shift90Degrees, applies a 90-degree phase shift to the surround channels.
       *
       * Used only for a 3/2 coding mode.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-phasecontrol)
       */
      override fun phaseControl(): String? = unwrap(this).getPhaseControl()

      /**
       * A stereo downmix preference.
       *
       * Used only for the 3/2 coding mode.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-stereodownmix)
       */
      override fun stereoDownmix(): String? = unwrap(this).getStereoDownmix()

      /**
       * When encoding 3/2 audio, sets whether an extra center back surround channel is matrix
       * encoded into the left and right surround channels.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-surroundexmode)
       */
      override fun surroundExMode(): String? = unwrap(this).getSurroundExMode()

      /**
       * When encoding 2/0 audio, sets whether Dolby Surround is matrix-encoded into the two
       * channels.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-surroundmode)
       */
      override fun surroundMode(): String? = unwrap(this).getSurroundMode()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): Eac3SettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Eac3SettingsProperty):
          Eac3SettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? Eac3SettingsProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: Eac3SettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.Eac3SettingsProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.Eac3SettingsProperty
    }
  }

  /**
   * Settings for EBU-TT captions in the output.
   *
   * The parent of this entity is CaptionDestinationSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * EbuTtDDestinationSettingsProperty ebuTtDDestinationSettingsProperty =
   * EbuTtDDestinationSettingsProperty.builder()
   * .copyrightHolder("copyrightHolder")
   * .fillLineGap("fillLineGap")
   * .fontFamily("fontFamily")
   * .styleControl("styleControl")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ebuttddestinationsettings.html)
   */
  public interface EbuTtDDestinationSettingsProperty {
    /**
     * Applies only if you plan to convert these source captions to EBU-TT-D or TTML in an output.
     *
     * Complete this field if you want to include the name of the copyright holder in the copyright
     * metadata tag in the TTML
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ebuttddestinationsettings.html#cfn-medialive-channel-ebuttddestinationsettings-copyrightholder)
     */
    public fun copyrightHolder(): String? = unwrap(this).getCopyrightHolder()

    /**
     * Specifies how to handle the gap between the lines (in multi-line captions).
     *
     * * enabled: Fill with the captions background color (as specified in the input captions).
     * * disabled: Leave the gap unfilled.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ebuttddestinationsettings.html#cfn-medialive-channel-ebuttddestinationsettings-filllinegap)
     */
    public fun fillLineGap(): String? = unwrap(this).getFillLineGap()

    /**
     * Specifies the font family to include in the font data attached to the EBU-TT captions.
     *
     * Valid only if styleControl is set to include. If you leave this field empty, the font family
     * is set to "monospaced". (If styleControl is set to exclude, the font family is always set to
     * "monospaced".) You specify only the font family. All other style information (color, bold,
     * position and so on) is copied from the input captions. The size is always set to 100% to allow
     * the downstream player to choose the size. - Enter a list of font families, as a comma-separated
     * list of font names, in order of preference. The name can be a font family (such as “Arial”), or
     * a generic font family (such as “serif”), or “default” (to let the downstream player choose the
     * font).
     *
     * * Leave blank to set the family to “monospace”.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ebuttddestinationsettings.html#cfn-medialive-channel-ebuttddestinationsettings-fontfamily)
     */
    public fun fontFamily(): String? = unwrap(this).getFontFamily()

    /**
     * Specifies the style information (font color, font position, and so on) to include in the font
     * data that is attached to the EBU-TT captions.
     *
     * * include: Take the style information (font color, font position, and so on) from the source
     * captions and include that information in the font data attached to the EBU-TT captions. This
     * option is valid only if the source captions are Embedded or Teletext.
     * * exclude: In the font data attached to the EBU-TT captions, set the font family to
     * "monospaced". Do not include any other style information.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ebuttddestinationsettings.html#cfn-medialive-channel-ebuttddestinationsettings-stylecontrol)
     */
    public fun styleControl(): String? = unwrap(this).getStyleControl()

    /**
     * A builder for [EbuTtDDestinationSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param copyrightHolder Applies only if you plan to convert these source captions to
       * EBU-TT-D or TTML in an output.
       * Complete this field if you want to include the name of the copyright holder in the
       * copyright metadata tag in the TTML
       */
      public fun copyrightHolder(copyrightHolder: String)

      /**
       * @param fillLineGap Specifies how to handle the gap between the lines (in multi-line
       * captions).
       * * enabled: Fill with the captions background color (as specified in the input captions).
       * * disabled: Leave the gap unfilled.
       */
      public fun fillLineGap(fillLineGap: String)

      /**
       * @param fontFamily Specifies the font family to include in the font data attached to the
       * EBU-TT captions.
       * Valid only if styleControl is set to include. If you leave this field empty, the font
       * family is set to "monospaced". (If styleControl is set to exclude, the font family is always
       * set to "monospaced".) You specify only the font family. All other style information (color,
       * bold, position and so on) is copied from the input captions. The size is always set to 100% to
       * allow the downstream player to choose the size. - Enter a list of font families, as a
       * comma-separated list of font names, in order of preference. The name can be a font family
       * (such as “Arial”), or a generic font family (such as “serif”), or “default” (to let the
       * downstream player choose the font).
       *
       * * Leave blank to set the family to “monospace”.
       */
      public fun fontFamily(fontFamily: String)

      /**
       * @param styleControl Specifies the style information (font color, font position, and so on)
       * to include in the font data that is attached to the EBU-TT captions.
       * * include: Take the style information (font color, font position, and so on) from the
       * source captions and include that information in the font data attached to the EBU-TT captions.
       * This option is valid only if the source captions are Embedded or Teletext.
       * * exclude: In the font data attached to the EBU-TT captions, set the font family to
       * "monospaced". Do not include any other style information.
       */
      public fun styleControl(styleControl: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.EbuTtDDestinationSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.EbuTtDDestinationSettingsProperty.builder()

      /**
       * @param copyrightHolder Applies only if you plan to convert these source captions to
       * EBU-TT-D or TTML in an output.
       * Complete this field if you want to include the name of the copyright holder in the
       * copyright metadata tag in the TTML
       */
      override fun copyrightHolder(copyrightHolder: String) {
        cdkBuilder.copyrightHolder(copyrightHolder)
      }

      /**
       * @param fillLineGap Specifies how to handle the gap between the lines (in multi-line
       * captions).
       * * enabled: Fill with the captions background color (as specified in the input captions).
       * * disabled: Leave the gap unfilled.
       */
      override fun fillLineGap(fillLineGap: String) {
        cdkBuilder.fillLineGap(fillLineGap)
      }

      /**
       * @param fontFamily Specifies the font family to include in the font data attached to the
       * EBU-TT captions.
       * Valid only if styleControl is set to include. If you leave this field empty, the font
       * family is set to "monospaced". (If styleControl is set to exclude, the font family is always
       * set to "monospaced".) You specify only the font family. All other style information (color,
       * bold, position and so on) is copied from the input captions. The size is always set to 100% to
       * allow the downstream player to choose the size. - Enter a list of font families, as a
       * comma-separated list of font names, in order of preference. The name can be a font family
       * (such as “Arial”), or a generic font family (such as “serif”), or “default” (to let the
       * downstream player choose the font).
       *
       * * Leave blank to set the family to “monospace”.
       */
      override fun fontFamily(fontFamily: String) {
        cdkBuilder.fontFamily(fontFamily)
      }

      /**
       * @param styleControl Specifies the style information (font color, font position, and so on)
       * to include in the font data that is attached to the EBU-TT captions.
       * * include: Take the style information (font color, font position, and so on) from the
       * source captions and include that information in the font data attached to the EBU-TT captions.
       * This option is valid only if the source captions are Embedded or Teletext.
       * * exclude: In the font data attached to the EBU-TT captions, set the font family to
       * "monospaced". Do not include any other style information.
       */
      override fun styleControl(styleControl: String) {
        cdkBuilder.styleControl(styleControl)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.EbuTtDDestinationSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.EbuTtDDestinationSettingsProperty,
    ) : CdkObject(cdkObject),
        EbuTtDDestinationSettingsProperty {
      /**
       * Applies only if you plan to convert these source captions to EBU-TT-D or TTML in an output.
       *
       * Complete this field if you want to include the name of the copyright holder in the
       * copyright metadata tag in the TTML
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ebuttddestinationsettings.html#cfn-medialive-channel-ebuttddestinationsettings-copyrightholder)
       */
      override fun copyrightHolder(): String? = unwrap(this).getCopyrightHolder()

      /**
       * Specifies how to handle the gap between the lines (in multi-line captions).
       *
       * * enabled: Fill with the captions background color (as specified in the input captions).
       * * disabled: Leave the gap unfilled.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ebuttddestinationsettings.html#cfn-medialive-channel-ebuttddestinationsettings-filllinegap)
       */
      override fun fillLineGap(): String? = unwrap(this).getFillLineGap()

      /**
       * Specifies the font family to include in the font data attached to the EBU-TT captions.
       *
       * Valid only if styleControl is set to include. If you leave this field empty, the font
       * family is set to "monospaced". (If styleControl is set to exclude, the font family is always
       * set to "monospaced".) You specify only the font family. All other style information (color,
       * bold, position and so on) is copied from the input captions. The size is always set to 100% to
       * allow the downstream player to choose the size. - Enter a list of font families, as a
       * comma-separated list of font names, in order of preference. The name can be a font family
       * (such as “Arial”), or a generic font family (such as “serif”), or “default” (to let the
       * downstream player choose the font).
       *
       * * Leave blank to set the family to “monospace”.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ebuttddestinationsettings.html#cfn-medialive-channel-ebuttddestinationsettings-fontfamily)
       */
      override fun fontFamily(): String? = unwrap(this).getFontFamily()

      /**
       * Specifies the style information (font color, font position, and so on) to include in the
       * font data that is attached to the EBU-TT captions.
       *
       * * include: Take the style information (font color, font position, and so on) from the
       * source captions and include that information in the font data attached to the EBU-TT captions.
       * This option is valid only if the source captions are Embedded or Teletext.
       * * exclude: In the font data attached to the EBU-TT captions, set the font family to
       * "monospaced". Do not include any other style information.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ebuttddestinationsettings.html#cfn-medialive-channel-ebuttddestinationsettings-stylecontrol)
       */
      override fun styleControl(): String? = unwrap(this).getStyleControl()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          EbuTtDDestinationSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.EbuTtDDestinationSettingsProperty):
          EbuTtDDestinationSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          EbuTtDDestinationSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: EbuTtDDestinationSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.EbuTtDDestinationSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.EbuTtDDestinationSettingsProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * EmbeddedDestinationSettingsProperty embeddedDestinationSettingsProperty =
   * EmbeddedDestinationSettingsProperty.builder().build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-embeddeddestinationsettings.html)
   */
  public interface EmbeddedDestinationSettingsProperty {
    /**
     * A builder for [EmbeddedDestinationSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.EmbeddedDestinationSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.EmbeddedDestinationSettingsProperty.builder()

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.EmbeddedDestinationSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.EmbeddedDestinationSettingsProperty,
    ) : CdkObject(cdkObject),
        EmbeddedDestinationSettingsProperty

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          EmbeddedDestinationSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.EmbeddedDestinationSettingsProperty):
          EmbeddedDestinationSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          EmbeddedDestinationSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: EmbeddedDestinationSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.EmbeddedDestinationSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.EmbeddedDestinationSettingsProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * EmbeddedPlusScte20DestinationSettingsProperty embeddedPlusScte20DestinationSettingsProperty =
   * EmbeddedPlusScte20DestinationSettingsProperty.builder().build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-embeddedplusscte20destinationsettings.html)
   */
  public interface EmbeddedPlusScte20DestinationSettingsProperty {
    /**
     * A builder for [EmbeddedPlusScte20DestinationSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.EmbeddedPlusScte20DestinationSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.EmbeddedPlusScte20DestinationSettingsProperty.builder()

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.EmbeddedPlusScte20DestinationSettingsProperty
          = cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.EmbeddedPlusScte20DestinationSettingsProperty,
    ) : CdkObject(cdkObject),
        EmbeddedPlusScte20DestinationSettingsProperty

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          EmbeddedPlusScte20DestinationSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.EmbeddedPlusScte20DestinationSettingsProperty):
          EmbeddedPlusScte20DestinationSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          EmbeddedPlusScte20DestinationSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: EmbeddedPlusScte20DestinationSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.EmbeddedPlusScte20DestinationSettingsProperty
          = (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.EmbeddedPlusScte20DestinationSettingsProperty
    }
  }

  /**
   * Information about the embedded captions to extract from the input.
   *
   * The parent of this entity is CaptionSelectorSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * EmbeddedSourceSettingsProperty embeddedSourceSettingsProperty =
   * EmbeddedSourceSettingsProperty.builder()
   * .convert608To708("convert608To708")
   * .scte20Detection("scte20Detection")
   * .source608ChannelNumber(123)
   * .source608TrackNumber(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-embeddedsourcesettings.html)
   */
  public interface EmbeddedSourceSettingsProperty {
    /**
     * If this is upconvert, 608 data is both passed through the "608 compatibility bytes" fields of
     * the 708 wrapper as well as translated into 708.
     *
     * If 708 data is present in the source content, it is discarded.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-embeddedsourcesettings.html#cfn-medialive-channel-embeddedsourcesettings-convert608to708)
     */
    public fun convert608To708(): String? = unwrap(this).getConvert608To708()

    /**
     * Set to "auto" to handle streams with intermittent or non-aligned SCTE-20 and embedded
     * captions.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-embeddedsourcesettings.html#cfn-medialive-channel-embeddedsourcesettings-scte20detection)
     */
    public fun scte20Detection(): String? = unwrap(this).getScte20Detection()

    /**
     * Specifies the 608/708 channel number within the video track from which to extract captions.
     *
     * This is unused for passthrough.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-embeddedsourcesettings.html#cfn-medialive-channel-embeddedsourcesettings-source608channelnumber)
     */
    public fun source608ChannelNumber(): Number? = unwrap(this).getSource608ChannelNumber()

    /**
     * This field is unused and deprecated.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-embeddedsourcesettings.html#cfn-medialive-channel-embeddedsourcesettings-source608tracknumber)
     */
    public fun source608TrackNumber(): Number? = unwrap(this).getSource608TrackNumber()

    /**
     * A builder for [EmbeddedSourceSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param convert608To708 If this is upconvert, 608 data is both passed through the "608
       * compatibility bytes" fields of the 708 wrapper as well as translated into 708.
       * If 708 data is present in the source content, it is discarded.
       */
      public fun convert608To708(convert608To708: String)

      /**
       * @param scte20Detection Set to "auto" to handle streams with intermittent or non-aligned
       * SCTE-20 and embedded captions.
       */
      public fun scte20Detection(scte20Detection: String)

      /**
       * @param source608ChannelNumber Specifies the 608/708 channel number within the video track
       * from which to extract captions.
       * This is unused for passthrough.
       */
      public fun source608ChannelNumber(source608ChannelNumber: Number)

      /**
       * @param source608TrackNumber This field is unused and deprecated.
       */
      public fun source608TrackNumber(source608TrackNumber: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.EmbeddedSourceSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.EmbeddedSourceSettingsProperty.builder()

      /**
       * @param convert608To708 If this is upconvert, 608 data is both passed through the "608
       * compatibility bytes" fields of the 708 wrapper as well as translated into 708.
       * If 708 data is present in the source content, it is discarded.
       */
      override fun convert608To708(convert608To708: String) {
        cdkBuilder.convert608To708(convert608To708)
      }

      /**
       * @param scte20Detection Set to "auto" to handle streams with intermittent or non-aligned
       * SCTE-20 and embedded captions.
       */
      override fun scte20Detection(scte20Detection: String) {
        cdkBuilder.scte20Detection(scte20Detection)
      }

      /**
       * @param source608ChannelNumber Specifies the 608/708 channel number within the video track
       * from which to extract captions.
       * This is unused for passthrough.
       */
      override fun source608ChannelNumber(source608ChannelNumber: Number) {
        cdkBuilder.source608ChannelNumber(source608ChannelNumber)
      }

      /**
       * @param source608TrackNumber This field is unused and deprecated.
       */
      override fun source608TrackNumber(source608TrackNumber: Number) {
        cdkBuilder.source608TrackNumber(source608TrackNumber)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.EmbeddedSourceSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.EmbeddedSourceSettingsProperty,
    ) : CdkObject(cdkObject),
        EmbeddedSourceSettingsProperty {
      /**
       * If this is upconvert, 608 data is both passed through the "608 compatibility bytes" fields
       * of the 708 wrapper as well as translated into 708.
       *
       * If 708 data is present in the source content, it is discarded.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-embeddedsourcesettings.html#cfn-medialive-channel-embeddedsourcesettings-convert608to708)
       */
      override fun convert608To708(): String? = unwrap(this).getConvert608To708()

      /**
       * Set to "auto" to handle streams with intermittent or non-aligned SCTE-20 and embedded
       * captions.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-embeddedsourcesettings.html#cfn-medialive-channel-embeddedsourcesettings-scte20detection)
       */
      override fun scte20Detection(): String? = unwrap(this).getScte20Detection()

      /**
       * Specifies the 608/708 channel number within the video track from which to extract captions.
       *
       * This is unused for passthrough.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-embeddedsourcesettings.html#cfn-medialive-channel-embeddedsourcesettings-source608channelnumber)
       */
      override fun source608ChannelNumber(): Number? = unwrap(this).getSource608ChannelNumber()

      /**
       * This field is unused and deprecated.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-embeddedsourcesettings.html#cfn-medialive-channel-embeddedsourcesettings-source608tracknumber)
       */
      override fun source608TrackNumber(): Number? = unwrap(this).getSource608TrackNumber()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): EmbeddedSourceSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.EmbeddedSourceSettingsProperty):
          EmbeddedSourceSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          EmbeddedSourceSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: EmbeddedSourceSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.EmbeddedSourceSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.EmbeddedSourceSettingsProperty
    }
  }

  /**
   * The settings for the encoding of outputs.
   *
   * This entity is at the top level in the channel.
   *
   * Example:
   *
   * ```
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html)
   */
  public interface EncoderSettingsProperty {
    /**
     * The encoding information for output audio.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-audiodescriptions)
     */
    public fun audioDescriptions(): Any? = unwrap(this).getAudioDescriptions()

    /**
     * The settings for ad avail blanking.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-availblanking)
     */
    public fun availBlanking(): Any? = unwrap(this).getAvailBlanking()

    /**
     * The configuration settings for the ad avail handling.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-availconfiguration)
     */
    public fun availConfiguration(): Any? = unwrap(this).getAvailConfiguration()

    /**
     * The settings for the blackout slate.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-blackoutslate)
     */
    public fun blackoutSlate(): Any? = unwrap(this).getBlackoutSlate()

    /**
     * The encoding information for output captions.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-captiondescriptions)
     */
    public fun captionDescriptions(): Any? = unwrap(this).getCaptionDescriptions()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-colorcorrectionsettings)
     */
    public fun colorCorrectionSettings(): Any? = unwrap(this).getColorCorrectionSettings()

    /**
     * Settings to enable specific features.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-featureactivations)
     */
    public fun featureActivations(): Any? = unwrap(this).getFeatureActivations()

    /**
     * The configuration settings that apply to the entire channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-globalconfiguration)
     */
    public fun globalConfiguration(): Any? = unwrap(this).getGlobalConfiguration()

    /**
     * Settings to enable and configure the motion graphics overlay feature in the channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-motiongraphicsconfiguration)
     */
    public fun motionGraphicsConfiguration(): Any? = unwrap(this).getMotionGraphicsConfiguration()

    /**
     * The settings to configure Nielsen watermarks.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-nielsenconfiguration)
     */
    public fun nielsenConfiguration(): Any? = unwrap(this).getNielsenConfiguration()

    /**
     * The settings for the output groups in the channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-outputgroups)
     */
    public fun outputGroups(): Any? = unwrap(this).getOutputGroups()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-thumbnailconfiguration)
     */
    public fun thumbnailConfiguration(): Any? = unwrap(this).getThumbnailConfiguration()

    /**
     * Contains settings used to acquire and adjust timecode information from the inputs.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-timecodeconfig)
     */
    public fun timecodeConfig(): Any? = unwrap(this).getTimecodeConfig()

    /**
     * The encoding information for output videos.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-videodescriptions)
     */
    public fun videoDescriptions(): Any? = unwrap(this).getVideoDescriptions()

    /**
     * A builder for [EncoderSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param audioDescriptions The encoding information for output audio.
       */
      public fun audioDescriptions(audioDescriptions: IResolvable)

      /**
       * @param audioDescriptions The encoding information for output audio.
       */
      public fun audioDescriptions(audioDescriptions: List)

      /**
       * @param audioDescriptions The encoding information for output audio.
       */
      public fun audioDescriptions(vararg audioDescriptions: Any)

      /**
       * @param availBlanking The settings for ad avail blanking.
       */
      public fun availBlanking(availBlanking: IResolvable)

      /**
       * @param availBlanking The settings for ad avail blanking.
       */
      public fun availBlanking(availBlanking: AvailBlankingProperty)

      /**
       * @param availBlanking The settings for ad avail blanking.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("2d1f256f38a2cfa8279cd0fef64f78c95b365482243a7b7e1f3ac7f35fad2717")
      public fun availBlanking(availBlanking: AvailBlankingProperty.Builder.() -> Unit)

      /**
       * @param availConfiguration The configuration settings for the ad avail handling.
       */
      public fun availConfiguration(availConfiguration: IResolvable)

      /**
       * @param availConfiguration The configuration settings for the ad avail handling.
       */
      public fun availConfiguration(availConfiguration: AvailConfigurationProperty)

      /**
       * @param availConfiguration The configuration settings for the ad avail handling.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("de082af680ca2b39139d9ae193b95b1c5047108cdddfd07607477d5b9d306654")
      public
          fun availConfiguration(availConfiguration: AvailConfigurationProperty.Builder.() -> Unit)

      /**
       * @param blackoutSlate The settings for the blackout slate.
       */
      public fun blackoutSlate(blackoutSlate: IResolvable)

      /**
       * @param blackoutSlate The settings for the blackout slate.
       */
      public fun blackoutSlate(blackoutSlate: BlackoutSlateProperty)

      /**
       * @param blackoutSlate The settings for the blackout slate.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("9baeed143c2abf51a92a53e595ac64742cdbbdb54c67813d0c50c872f07f546e")
      public fun blackoutSlate(blackoutSlate: BlackoutSlateProperty.Builder.() -> Unit)

      /**
       * @param captionDescriptions The encoding information for output captions.
       */
      public fun captionDescriptions(captionDescriptions: IResolvable)

      /**
       * @param captionDescriptions The encoding information for output captions.
       */
      public fun captionDescriptions(captionDescriptions: List)

      /**
       * @param captionDescriptions The encoding information for output captions.
       */
      public fun captionDescriptions(vararg captionDescriptions: Any)

      /**
       * @param colorCorrectionSettings the value to be set.
       */
      public fun colorCorrectionSettings(colorCorrectionSettings: IResolvable)

      /**
       * @param colorCorrectionSettings the value to be set.
       */
      public fun colorCorrectionSettings(colorCorrectionSettings: ColorCorrectionSettingsProperty)

      /**
       * @param colorCorrectionSettings the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("3d7751059623d3453cd3088c55927f6982a5685e67f25fa6bdec7c47e63dc325")
      public
          fun colorCorrectionSettings(colorCorrectionSettings: ColorCorrectionSettingsProperty.Builder.() -> Unit)

      /**
       * @param featureActivations Settings to enable specific features.
       */
      public fun featureActivations(featureActivations: IResolvable)

      /**
       * @param featureActivations Settings to enable specific features.
       */
      public fun featureActivations(featureActivations: FeatureActivationsProperty)

      /**
       * @param featureActivations Settings to enable specific features.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("574c0d37abdb7d1723b40e15113029c9685786d9f41f9af44dd7b97796dcbe74")
      public
          fun featureActivations(featureActivations: FeatureActivationsProperty.Builder.() -> Unit)

      /**
       * @param globalConfiguration The configuration settings that apply to the entire channel.
       */
      public fun globalConfiguration(globalConfiguration: IResolvable)

      /**
       * @param globalConfiguration The configuration settings that apply to the entire channel.
       */
      public fun globalConfiguration(globalConfiguration: GlobalConfigurationProperty)

      /**
       * @param globalConfiguration The configuration settings that apply to the entire channel.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("a27409ab5a4b184643ca0062ca649505ba38dde57b2436514d9adbc4af4d89cf")
      public
          fun globalConfiguration(globalConfiguration: GlobalConfigurationProperty.Builder.() -> Unit)

      /**
       * @param motionGraphicsConfiguration Settings to enable and configure the motion graphics
       * overlay feature in the channel.
       */
      public fun motionGraphicsConfiguration(motionGraphicsConfiguration: IResolvable)

      /**
       * @param motionGraphicsConfiguration Settings to enable and configure the motion graphics
       * overlay feature in the channel.
       */
      public
          fun motionGraphicsConfiguration(motionGraphicsConfiguration: MotionGraphicsConfigurationProperty)

      /**
       * @param motionGraphicsConfiguration Settings to enable and configure the motion graphics
       * overlay feature in the channel.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("bce1eb9cf7b54224c18c75e8ca6dcf9dd3f59b0ca515e7422c8cc4cfcca96450")
      public
          fun motionGraphicsConfiguration(motionGraphicsConfiguration: MotionGraphicsConfigurationProperty.Builder.() -> Unit)

      /**
       * @param nielsenConfiguration The settings to configure Nielsen watermarks.
       */
      public fun nielsenConfiguration(nielsenConfiguration: IResolvable)

      /**
       * @param nielsenConfiguration The settings to configure Nielsen watermarks.
       */
      public fun nielsenConfiguration(nielsenConfiguration: NielsenConfigurationProperty)

      /**
       * @param nielsenConfiguration The settings to configure Nielsen watermarks.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("13d84746321052a6870e72f4b238703d7f7ac248b4369058685ae9b74b3c12b4")
      public
          fun nielsenConfiguration(nielsenConfiguration: NielsenConfigurationProperty.Builder.() -> Unit)

      /**
       * @param outputGroups The settings for the output groups in the channel.
       */
      public fun outputGroups(outputGroups: IResolvable)

      /**
       * @param outputGroups The settings for the output groups in the channel.
       */
      public fun outputGroups(outputGroups: List)

      /**
       * @param outputGroups The settings for the output groups in the channel.
       */
      public fun outputGroups(vararg outputGroups: Any)

      /**
       * @param thumbnailConfiguration the value to be set.
       */
      public fun thumbnailConfiguration(thumbnailConfiguration: IResolvable)

      /**
       * @param thumbnailConfiguration the value to be set.
       */
      public fun thumbnailConfiguration(thumbnailConfiguration: ThumbnailConfigurationProperty)

      /**
       * @param thumbnailConfiguration the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("b8ceafe338ad83f8dc2749873cd585b9935c4b9a6cc703b6d9322f013ef1241e")
      public
          fun thumbnailConfiguration(thumbnailConfiguration: ThumbnailConfigurationProperty.Builder.() -> Unit)

      /**
       * @param timecodeConfig Contains settings used to acquire and adjust timecode information
       * from the inputs.
       */
      public fun timecodeConfig(timecodeConfig: IResolvable)

      /**
       * @param timecodeConfig Contains settings used to acquire and adjust timecode information
       * from the inputs.
       */
      public fun timecodeConfig(timecodeConfig: TimecodeConfigProperty)

      /**
       * @param timecodeConfig Contains settings used to acquire and adjust timecode information
       * from the inputs.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("89b390af5b7bb78099e03d9e5eae9f2c772587e60687200d29b332285d1c40af")
      public fun timecodeConfig(timecodeConfig: TimecodeConfigProperty.Builder.() -> Unit)

      /**
       * @param videoDescriptions The encoding information for output videos.
       */
      public fun videoDescriptions(videoDescriptions: IResolvable)

      /**
       * @param videoDescriptions The encoding information for output videos.
       */
      public fun videoDescriptions(videoDescriptions: List)

      /**
       * @param videoDescriptions The encoding information for output videos.
       */
      public fun videoDescriptions(vararg videoDescriptions: Any)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.EncoderSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.EncoderSettingsProperty.builder()

      /**
       * @param audioDescriptions The encoding information for output audio.
       */
      override fun audioDescriptions(audioDescriptions: IResolvable) {
        cdkBuilder.audioDescriptions(audioDescriptions.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param audioDescriptions The encoding information for output audio.
       */
      override fun audioDescriptions(audioDescriptions: List) {
        cdkBuilder.audioDescriptions(audioDescriptions.map{CdkObjectWrappers.unwrap(it)})
      }

      /**
       * @param audioDescriptions The encoding information for output audio.
       */
      override fun audioDescriptions(vararg audioDescriptions: Any): Unit =
          audioDescriptions(audioDescriptions.toList())

      /**
       * @param availBlanking The settings for ad avail blanking.
       */
      override fun availBlanking(availBlanking: IResolvable) {
        cdkBuilder.availBlanking(availBlanking.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param availBlanking The settings for ad avail blanking.
       */
      override fun availBlanking(availBlanking: AvailBlankingProperty) {
        cdkBuilder.availBlanking(availBlanking.let(AvailBlankingProperty.Companion::unwrap))
      }

      /**
       * @param availBlanking The settings for ad avail blanking.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("2d1f256f38a2cfa8279cd0fef64f78c95b365482243a7b7e1f3ac7f35fad2717")
      override fun availBlanking(availBlanking: AvailBlankingProperty.Builder.() -> Unit): Unit =
          availBlanking(AvailBlankingProperty(availBlanking))

      /**
       * @param availConfiguration The configuration settings for the ad avail handling.
       */
      override fun availConfiguration(availConfiguration: IResolvable) {
        cdkBuilder.availConfiguration(availConfiguration.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param availConfiguration The configuration settings for the ad avail handling.
       */
      override fun availConfiguration(availConfiguration: AvailConfigurationProperty) {
        cdkBuilder.availConfiguration(availConfiguration.let(AvailConfigurationProperty.Companion::unwrap))
      }

      /**
       * @param availConfiguration The configuration settings for the ad avail handling.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("de082af680ca2b39139d9ae193b95b1c5047108cdddfd07607477d5b9d306654")
      override
          fun availConfiguration(availConfiguration: AvailConfigurationProperty.Builder.() -> Unit):
          Unit = availConfiguration(AvailConfigurationProperty(availConfiguration))

      /**
       * @param blackoutSlate The settings for the blackout slate.
       */
      override fun blackoutSlate(blackoutSlate: IResolvable) {
        cdkBuilder.blackoutSlate(blackoutSlate.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param blackoutSlate The settings for the blackout slate.
       */
      override fun blackoutSlate(blackoutSlate: BlackoutSlateProperty) {
        cdkBuilder.blackoutSlate(blackoutSlate.let(BlackoutSlateProperty.Companion::unwrap))
      }

      /**
       * @param blackoutSlate The settings for the blackout slate.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("9baeed143c2abf51a92a53e595ac64742cdbbdb54c67813d0c50c872f07f546e")
      override fun blackoutSlate(blackoutSlate: BlackoutSlateProperty.Builder.() -> Unit): Unit =
          blackoutSlate(BlackoutSlateProperty(blackoutSlate))

      /**
       * @param captionDescriptions The encoding information for output captions.
       */
      override fun captionDescriptions(captionDescriptions: IResolvable) {
        cdkBuilder.captionDescriptions(captionDescriptions.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param captionDescriptions The encoding information for output captions.
       */
      override fun captionDescriptions(captionDescriptions: List) {
        cdkBuilder.captionDescriptions(captionDescriptions.map{CdkObjectWrappers.unwrap(it)})
      }

      /**
       * @param captionDescriptions The encoding information for output captions.
       */
      override fun captionDescriptions(vararg captionDescriptions: Any): Unit =
          captionDescriptions(captionDescriptions.toList())

      /**
       * @param colorCorrectionSettings the value to be set.
       */
      override fun colorCorrectionSettings(colorCorrectionSettings: IResolvable) {
        cdkBuilder.colorCorrectionSettings(colorCorrectionSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param colorCorrectionSettings the value to be set.
       */
      override
          fun colorCorrectionSettings(colorCorrectionSettings: ColorCorrectionSettingsProperty) {
        cdkBuilder.colorCorrectionSettings(colorCorrectionSettings.let(ColorCorrectionSettingsProperty.Companion::unwrap))
      }

      /**
       * @param colorCorrectionSettings the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("3d7751059623d3453cd3088c55927f6982a5685e67f25fa6bdec7c47e63dc325")
      override
          fun colorCorrectionSettings(colorCorrectionSettings: ColorCorrectionSettingsProperty.Builder.() -> Unit):
          Unit = colorCorrectionSettings(ColorCorrectionSettingsProperty(colorCorrectionSettings))

      /**
       * @param featureActivations Settings to enable specific features.
       */
      override fun featureActivations(featureActivations: IResolvable) {
        cdkBuilder.featureActivations(featureActivations.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param featureActivations Settings to enable specific features.
       */
      override fun featureActivations(featureActivations: FeatureActivationsProperty) {
        cdkBuilder.featureActivations(featureActivations.let(FeatureActivationsProperty.Companion::unwrap))
      }

      /**
       * @param featureActivations Settings to enable specific features.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("574c0d37abdb7d1723b40e15113029c9685786d9f41f9af44dd7b97796dcbe74")
      override
          fun featureActivations(featureActivations: FeatureActivationsProperty.Builder.() -> Unit):
          Unit = featureActivations(FeatureActivationsProperty(featureActivations))

      /**
       * @param globalConfiguration The configuration settings that apply to the entire channel.
       */
      override fun globalConfiguration(globalConfiguration: IResolvable) {
        cdkBuilder.globalConfiguration(globalConfiguration.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param globalConfiguration The configuration settings that apply to the entire channel.
       */
      override fun globalConfiguration(globalConfiguration: GlobalConfigurationProperty) {
        cdkBuilder.globalConfiguration(globalConfiguration.let(GlobalConfigurationProperty.Companion::unwrap))
      }

      /**
       * @param globalConfiguration The configuration settings that apply to the entire channel.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("a27409ab5a4b184643ca0062ca649505ba38dde57b2436514d9adbc4af4d89cf")
      override
          fun globalConfiguration(globalConfiguration: GlobalConfigurationProperty.Builder.() -> Unit):
          Unit = globalConfiguration(GlobalConfigurationProperty(globalConfiguration))

      /**
       * @param motionGraphicsConfiguration Settings to enable and configure the motion graphics
       * overlay feature in the channel.
       */
      override fun motionGraphicsConfiguration(motionGraphicsConfiguration: IResolvable) {
        cdkBuilder.motionGraphicsConfiguration(motionGraphicsConfiguration.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param motionGraphicsConfiguration Settings to enable and configure the motion graphics
       * overlay feature in the channel.
       */
      override
          fun motionGraphicsConfiguration(motionGraphicsConfiguration: MotionGraphicsConfigurationProperty) {
        cdkBuilder.motionGraphicsConfiguration(motionGraphicsConfiguration.let(MotionGraphicsConfigurationProperty.Companion::unwrap))
      }

      /**
       * @param motionGraphicsConfiguration Settings to enable and configure the motion graphics
       * overlay feature in the channel.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("bce1eb9cf7b54224c18c75e8ca6dcf9dd3f59b0ca515e7422c8cc4cfcca96450")
      override
          fun motionGraphicsConfiguration(motionGraphicsConfiguration: MotionGraphicsConfigurationProperty.Builder.() -> Unit):
          Unit =
          motionGraphicsConfiguration(MotionGraphicsConfigurationProperty(motionGraphicsConfiguration))

      /**
       * @param nielsenConfiguration The settings to configure Nielsen watermarks.
       */
      override fun nielsenConfiguration(nielsenConfiguration: IResolvable) {
        cdkBuilder.nielsenConfiguration(nielsenConfiguration.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param nielsenConfiguration The settings to configure Nielsen watermarks.
       */
      override fun nielsenConfiguration(nielsenConfiguration: NielsenConfigurationProperty) {
        cdkBuilder.nielsenConfiguration(nielsenConfiguration.let(NielsenConfigurationProperty.Companion::unwrap))
      }

      /**
       * @param nielsenConfiguration The settings to configure Nielsen watermarks.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("13d84746321052a6870e72f4b238703d7f7ac248b4369058685ae9b74b3c12b4")
      override
          fun nielsenConfiguration(nielsenConfiguration: NielsenConfigurationProperty.Builder.() -> Unit):
          Unit = nielsenConfiguration(NielsenConfigurationProperty(nielsenConfiguration))

      /**
       * @param outputGroups The settings for the output groups in the channel.
       */
      override fun outputGroups(outputGroups: IResolvable) {
        cdkBuilder.outputGroups(outputGroups.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param outputGroups The settings for the output groups in the channel.
       */
      override fun outputGroups(outputGroups: List) {
        cdkBuilder.outputGroups(outputGroups.map{CdkObjectWrappers.unwrap(it)})
      }

      /**
       * @param outputGroups The settings for the output groups in the channel.
       */
      override fun outputGroups(vararg outputGroups: Any): Unit =
          outputGroups(outputGroups.toList())

      /**
       * @param thumbnailConfiguration the value to be set.
       */
      override fun thumbnailConfiguration(thumbnailConfiguration: IResolvable) {
        cdkBuilder.thumbnailConfiguration(thumbnailConfiguration.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param thumbnailConfiguration the value to be set.
       */
      override fun thumbnailConfiguration(thumbnailConfiguration: ThumbnailConfigurationProperty) {
        cdkBuilder.thumbnailConfiguration(thumbnailConfiguration.let(ThumbnailConfigurationProperty.Companion::unwrap))
      }

      /**
       * @param thumbnailConfiguration the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("b8ceafe338ad83f8dc2749873cd585b9935c4b9a6cc703b6d9322f013ef1241e")
      override
          fun thumbnailConfiguration(thumbnailConfiguration: ThumbnailConfigurationProperty.Builder.() -> Unit):
          Unit = thumbnailConfiguration(ThumbnailConfigurationProperty(thumbnailConfiguration))

      /**
       * @param timecodeConfig Contains settings used to acquire and adjust timecode information
       * from the inputs.
       */
      override fun timecodeConfig(timecodeConfig: IResolvable) {
        cdkBuilder.timecodeConfig(timecodeConfig.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param timecodeConfig Contains settings used to acquire and adjust timecode information
       * from the inputs.
       */
      override fun timecodeConfig(timecodeConfig: TimecodeConfigProperty) {
        cdkBuilder.timecodeConfig(timecodeConfig.let(TimecodeConfigProperty.Companion::unwrap))
      }

      /**
       * @param timecodeConfig Contains settings used to acquire and adjust timecode information
       * from the inputs.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("89b390af5b7bb78099e03d9e5eae9f2c772587e60687200d29b332285d1c40af")
      override fun timecodeConfig(timecodeConfig: TimecodeConfigProperty.Builder.() -> Unit): Unit =
          timecodeConfig(TimecodeConfigProperty(timecodeConfig))

      /**
       * @param videoDescriptions The encoding information for output videos.
       */
      override fun videoDescriptions(videoDescriptions: IResolvable) {
        cdkBuilder.videoDescriptions(videoDescriptions.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param videoDescriptions The encoding information for output videos.
       */
      override fun videoDescriptions(videoDescriptions: List) {
        cdkBuilder.videoDescriptions(videoDescriptions.map{CdkObjectWrappers.unwrap(it)})
      }

      /**
       * @param videoDescriptions The encoding information for output videos.
       */
      override fun videoDescriptions(vararg videoDescriptions: Any): Unit =
          videoDescriptions(videoDescriptions.toList())

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.EncoderSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.EncoderSettingsProperty,
    ) : CdkObject(cdkObject),
        EncoderSettingsProperty {
      /**
       * The encoding information for output audio.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-audiodescriptions)
       */
      override fun audioDescriptions(): Any? = unwrap(this).getAudioDescriptions()

      /**
       * The settings for ad avail blanking.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-availblanking)
       */
      override fun availBlanking(): Any? = unwrap(this).getAvailBlanking()

      /**
       * The configuration settings for the ad avail handling.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-availconfiguration)
       */
      override fun availConfiguration(): Any? = unwrap(this).getAvailConfiguration()

      /**
       * The settings for the blackout slate.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-blackoutslate)
       */
      override fun blackoutSlate(): Any? = unwrap(this).getBlackoutSlate()

      /**
       * The encoding information for output captions.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-captiondescriptions)
       */
      override fun captionDescriptions(): Any? = unwrap(this).getCaptionDescriptions()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-colorcorrectionsettings)
       */
      override fun colorCorrectionSettings(): Any? = unwrap(this).getColorCorrectionSettings()

      /**
       * Settings to enable specific features.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-featureactivations)
       */
      override fun featureActivations(): Any? = unwrap(this).getFeatureActivations()

      /**
       * The configuration settings that apply to the entire channel.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-globalconfiguration)
       */
      override fun globalConfiguration(): Any? = unwrap(this).getGlobalConfiguration()

      /**
       * Settings to enable and configure the motion graphics overlay feature in the channel.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-motiongraphicsconfiguration)
       */
      override fun motionGraphicsConfiguration(): Any? =
          unwrap(this).getMotionGraphicsConfiguration()

      /**
       * The settings to configure Nielsen watermarks.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-nielsenconfiguration)
       */
      override fun nielsenConfiguration(): Any? = unwrap(this).getNielsenConfiguration()

      /**
       * The settings for the output groups in the channel.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-outputgroups)
       */
      override fun outputGroups(): Any? = unwrap(this).getOutputGroups()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-thumbnailconfiguration)
       */
      override fun thumbnailConfiguration(): Any? = unwrap(this).getThumbnailConfiguration()

      /**
       * Contains settings used to acquire and adjust timecode information from the inputs.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-timecodeconfig)
       */
      override fun timecodeConfig(): Any? = unwrap(this).getTimecodeConfig()

      /**
       * The encoding information for output videos.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-videodescriptions)
       */
      override fun videoDescriptions(): Any? = unwrap(this).getVideoDescriptions()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): EncoderSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.EncoderSettingsProperty):
          EncoderSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? EncoderSettingsProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: EncoderSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.EncoderSettingsProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.EncoderSettingsProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * EpochLockingSettingsProperty epochLockingSettingsProperty =
   * EpochLockingSettingsProperty.builder()
   * .customEpoch("customEpoch")
   * .jamSyncTime("jamSyncTime")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-epochlockingsettings.html)
   */
  public interface EpochLockingSettingsProperty {
    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-epochlockingsettings.html#cfn-medialive-channel-epochlockingsettings-customepoch)
     */
    public fun customEpoch(): String? = unwrap(this).getCustomEpoch()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-epochlockingsettings.html#cfn-medialive-channel-epochlockingsettings-jamsynctime)
     */
    public fun jamSyncTime(): String? = unwrap(this).getJamSyncTime()

    /**
     * A builder for [EpochLockingSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param customEpoch the value to be set.
       */
      public fun customEpoch(customEpoch: String)

      /**
       * @param jamSyncTime the value to be set.
       */
      public fun jamSyncTime(jamSyncTime: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.EpochLockingSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.EpochLockingSettingsProperty.builder()

      /**
       * @param customEpoch the value to be set.
       */
      override fun customEpoch(customEpoch: String) {
        cdkBuilder.customEpoch(customEpoch)
      }

      /**
       * @param jamSyncTime the value to be set.
       */
      override fun jamSyncTime(jamSyncTime: String) {
        cdkBuilder.jamSyncTime(jamSyncTime)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.EpochLockingSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.EpochLockingSettingsProperty,
    ) : CdkObject(cdkObject),
        EpochLockingSettingsProperty {
      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-epochlockingsettings.html#cfn-medialive-channel-epochlockingsettings-customepoch)
       */
      override fun customEpoch(): String? = unwrap(this).getCustomEpoch()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-epochlockingsettings.html#cfn-medialive-channel-epochlockingsettings-jamsynctime)
       */
      override fun jamSyncTime(): String? = unwrap(this).getJamSyncTime()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): EpochLockingSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.EpochLockingSettingsProperty):
          EpochLockingSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          EpochLockingSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: EpochLockingSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.EpochLockingSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.EpochLockingSettingsProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * EsamProperty esamProperty = EsamProperty.builder()
   * .acquisitionPointId("acquisitionPointId")
   * .adAvailOffset(123)
   * .passwordParam("passwordParam")
   * .poisEndpoint("poisEndpoint")
   * .username("username")
   * .zoneIdentity("zoneIdentity")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-esam.html)
   */
  public interface EsamProperty {
    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-esam.html#cfn-medialive-channel-esam-acquisitionpointid)
     */
    public fun acquisitionPointId(): String? = unwrap(this).getAcquisitionPointId()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-esam.html#cfn-medialive-channel-esam-adavailoffset)
     */
    public fun adAvailOffset(): Number? = unwrap(this).getAdAvailOffset()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-esam.html#cfn-medialive-channel-esam-passwordparam)
     */
    public fun passwordParam(): String? = unwrap(this).getPasswordParam()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-esam.html#cfn-medialive-channel-esam-poisendpoint)
     */
    public fun poisEndpoint(): String? = unwrap(this).getPoisEndpoint()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-esam.html#cfn-medialive-channel-esam-username)
     */
    public fun username(): String? = unwrap(this).getUsername()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-esam.html#cfn-medialive-channel-esam-zoneidentity)
     */
    public fun zoneIdentity(): String? = unwrap(this).getZoneIdentity()

    /**
     * A builder for [EsamProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param acquisitionPointId the value to be set.
       */
      public fun acquisitionPointId(acquisitionPointId: String)

      /**
       * @param adAvailOffset the value to be set.
       */
      public fun adAvailOffset(adAvailOffset: Number)

      /**
       * @param passwordParam the value to be set.
       */
      public fun passwordParam(passwordParam: String)

      /**
       * @param poisEndpoint the value to be set.
       */
      public fun poisEndpoint(poisEndpoint: String)

      /**
       * @param username the value to be set.
       */
      public fun username(username: String)

      /**
       * @param zoneIdentity the value to be set.
       */
      public fun zoneIdentity(zoneIdentity: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.EsamProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.EsamProperty.builder()

      /**
       * @param acquisitionPointId the value to be set.
       */
      override fun acquisitionPointId(acquisitionPointId: String) {
        cdkBuilder.acquisitionPointId(acquisitionPointId)
      }

      /**
       * @param adAvailOffset the value to be set.
       */
      override fun adAvailOffset(adAvailOffset: Number) {
        cdkBuilder.adAvailOffset(adAvailOffset)
      }

      /**
       * @param passwordParam the value to be set.
       */
      override fun passwordParam(passwordParam: String) {
        cdkBuilder.passwordParam(passwordParam)
      }

      /**
       * @param poisEndpoint the value to be set.
       */
      override fun poisEndpoint(poisEndpoint: String) {
        cdkBuilder.poisEndpoint(poisEndpoint)
      }

      /**
       * @param username the value to be set.
       */
      override fun username(username: String) {
        cdkBuilder.username(username)
      }

      /**
       * @param zoneIdentity the value to be set.
       */
      override fun zoneIdentity(zoneIdentity: String) {
        cdkBuilder.zoneIdentity(zoneIdentity)
      }

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.EsamProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.EsamProperty,
    ) : CdkObject(cdkObject),
        EsamProperty {
      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-esam.html#cfn-medialive-channel-esam-acquisitionpointid)
       */
      override fun acquisitionPointId(): String? = unwrap(this).getAcquisitionPointId()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-esam.html#cfn-medialive-channel-esam-adavailoffset)
       */
      override fun adAvailOffset(): Number? = unwrap(this).getAdAvailOffset()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-esam.html#cfn-medialive-channel-esam-passwordparam)
       */
      override fun passwordParam(): String? = unwrap(this).getPasswordParam()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-esam.html#cfn-medialive-channel-esam-poisendpoint)
       */
      override fun poisEndpoint(): String? = unwrap(this).getPoisEndpoint()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-esam.html#cfn-medialive-channel-esam-username)
       */
      override fun username(): String? = unwrap(this).getUsername()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-esam.html#cfn-medialive-channel-esam-zoneidentity)
       */
      override fun zoneIdentity(): String? = unwrap(this).getZoneIdentity()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): EsamProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.EsamProperty):
          EsamProperty = CdkObjectWrappers.wrap(cdkObject) as? EsamProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: EsamProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.EsamProperty = (wrapped as
          CdkObject).cdkObject as software.amazon.awscdk.services.medialive.CfnChannel.EsamProperty
    }
  }

  /**
   * Failover Condition settings. There can be multiple failover conditions inside
   * AutomaticInputFailoverSettings.
   *
   * The parent of this entity is AutomaticInputFailoverSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * FailoverConditionProperty failoverConditionProperty = FailoverConditionProperty.builder()
   * .failoverConditionSettings(FailoverConditionSettingsProperty.builder()
   * .audioSilenceSettings(AudioSilenceFailoverSettingsProperty.builder()
   * .audioSelectorName("audioSelectorName")
   * .audioSilenceThresholdMsec(123)
   * .build())
   * .inputLossSettings(InputLossFailoverSettingsProperty.builder()
   * .inputLossThresholdMsec(123)
   * .build())
   * .videoBlackSettings(VideoBlackFailoverSettingsProperty.builder()
   * .blackDetectThreshold(123)
   * .videoBlackThresholdMsec(123)
   * .build())
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failovercondition.html)
   */
  public interface FailoverConditionProperty {
    /**
     * Settings for a specific failover condition.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failovercondition.html#cfn-medialive-channel-failovercondition-failoverconditionsettings)
     */
    public fun failoverConditionSettings(): Any? = unwrap(this).getFailoverConditionSettings()

    /**
     * A builder for [FailoverConditionProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param failoverConditionSettings Settings for a specific failover condition.
       */
      public fun failoverConditionSettings(failoverConditionSettings: IResolvable)

      /**
       * @param failoverConditionSettings Settings for a specific failover condition.
       */
      public
          fun failoverConditionSettings(failoverConditionSettings: FailoverConditionSettingsProperty)

      /**
       * @param failoverConditionSettings Settings for a specific failover condition.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("629b16f62ee290cbd0e82a02bcdbf024d120c3d84b15192f7be5d1b4ca1dc0e0")
      public
          fun failoverConditionSettings(failoverConditionSettings: FailoverConditionSettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.FailoverConditionProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.FailoverConditionProperty.builder()

      /**
       * @param failoverConditionSettings Settings for a specific failover condition.
       */
      override fun failoverConditionSettings(failoverConditionSettings: IResolvable) {
        cdkBuilder.failoverConditionSettings(failoverConditionSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param failoverConditionSettings Settings for a specific failover condition.
       */
      override
          fun failoverConditionSettings(failoverConditionSettings: FailoverConditionSettingsProperty) {
        cdkBuilder.failoverConditionSettings(failoverConditionSettings.let(FailoverConditionSettingsProperty.Companion::unwrap))
      }

      /**
       * @param failoverConditionSettings Settings for a specific failover condition.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("629b16f62ee290cbd0e82a02bcdbf024d120c3d84b15192f7be5d1b4ca1dc0e0")
      override
          fun failoverConditionSettings(failoverConditionSettings: FailoverConditionSettingsProperty.Builder.() -> Unit):
          Unit =
          failoverConditionSettings(FailoverConditionSettingsProperty(failoverConditionSettings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.FailoverConditionProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.FailoverConditionProperty,
    ) : CdkObject(cdkObject),
        FailoverConditionProperty {
      /**
       * Settings for a specific failover condition.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failovercondition.html#cfn-medialive-channel-failovercondition-failoverconditionsettings)
       */
      override fun failoverConditionSettings(): Any? = unwrap(this).getFailoverConditionSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): FailoverConditionProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.FailoverConditionProperty):
          FailoverConditionProperty = CdkObjectWrappers.wrap(cdkObject) as?
          FailoverConditionProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: FailoverConditionProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.FailoverConditionProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.FailoverConditionProperty
    }
  }

  /**
   * Settings for one failover condition.
   *
   * The parent of this entity is FailoverCondition.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * FailoverConditionSettingsProperty failoverConditionSettingsProperty =
   * FailoverConditionSettingsProperty.builder()
   * .audioSilenceSettings(AudioSilenceFailoverSettingsProperty.builder()
   * .audioSelectorName("audioSelectorName")
   * .audioSilenceThresholdMsec(123)
   * .build())
   * .inputLossSettings(InputLossFailoverSettingsProperty.builder()
   * .inputLossThresholdMsec(123)
   * .build())
   * .videoBlackSettings(VideoBlackFailoverSettingsProperty.builder()
   * .blackDetectThreshold(123)
   * .videoBlackThresholdMsec(123)
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failoverconditionsettings.html)
   */
  public interface FailoverConditionSettingsProperty {
    /**
     * MediaLive will perform a failover if the specified audio selector is silent for the specified
     * period.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failoverconditionsettings.html#cfn-medialive-channel-failoverconditionsettings-audiosilencesettings)
     */
    public fun audioSilenceSettings(): Any? = unwrap(this).getAudioSilenceSettings()

    /**
     * MediaLive will perform a failover if content is not detected in this input for the specified
     * period.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failoverconditionsettings.html#cfn-medialive-channel-failoverconditionsettings-inputlosssettings)
     */
    public fun inputLossSettings(): Any? = unwrap(this).getInputLossSettings()

    /**
     * MediaLive will perform a failover if content is considered black for the specified period.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failoverconditionsettings.html#cfn-medialive-channel-failoverconditionsettings-videoblacksettings)
     */
    public fun videoBlackSettings(): Any? = unwrap(this).getVideoBlackSettings()

    /**
     * A builder for [FailoverConditionSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param audioSilenceSettings MediaLive will perform a failover if the specified audio
       * selector is silent for the specified period.
       */
      public fun audioSilenceSettings(audioSilenceSettings: IResolvable)

      /**
       * @param audioSilenceSettings MediaLive will perform a failover if the specified audio
       * selector is silent for the specified period.
       */
      public fun audioSilenceSettings(audioSilenceSettings: AudioSilenceFailoverSettingsProperty)

      /**
       * @param audioSilenceSettings MediaLive will perform a failover if the specified audio
       * selector is silent for the specified period.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("a9a4622e27dc9a59db26568c5068f3dba4c1e90432ad8bcca7d47d9931e9c491")
      public
          fun audioSilenceSettings(audioSilenceSettings: AudioSilenceFailoverSettingsProperty.Builder.() -> Unit)

      /**
       * @param inputLossSettings MediaLive will perform a failover if content is not detected in
       * this input for the specified period.
       */
      public fun inputLossSettings(inputLossSettings: IResolvable)

      /**
       * @param inputLossSettings MediaLive will perform a failover if content is not detected in
       * this input for the specified period.
       */
      public fun inputLossSettings(inputLossSettings: InputLossFailoverSettingsProperty)

      /**
       * @param inputLossSettings MediaLive will perform a failover if content is not detected in
       * this input for the specified period.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ab6873e8132f190fd34bd4925f124e8201c44e6a922b26129aa6dd8851e6cbf9")
      public
          fun inputLossSettings(inputLossSettings: InputLossFailoverSettingsProperty.Builder.() -> Unit)

      /**
       * @param videoBlackSettings MediaLive will perform a failover if content is considered black
       * for the specified period.
       */
      public fun videoBlackSettings(videoBlackSettings: IResolvable)

      /**
       * @param videoBlackSettings MediaLive will perform a failover if content is considered black
       * for the specified period.
       */
      public fun videoBlackSettings(videoBlackSettings: VideoBlackFailoverSettingsProperty)

      /**
       * @param videoBlackSettings MediaLive will perform a failover if content is considered black
       * for the specified period.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("e1eca88803bfaebe36bff25f3b31a2eaf4d314c39ac7d7449b32bd0edb9f7d2b")
      public
          fun videoBlackSettings(videoBlackSettings: VideoBlackFailoverSettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.FailoverConditionSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.FailoverConditionSettingsProperty.builder()

      /**
       * @param audioSilenceSettings MediaLive will perform a failover if the specified audio
       * selector is silent for the specified period.
       */
      override fun audioSilenceSettings(audioSilenceSettings: IResolvable) {
        cdkBuilder.audioSilenceSettings(audioSilenceSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param audioSilenceSettings MediaLive will perform a failover if the specified audio
       * selector is silent for the specified period.
       */
      override
          fun audioSilenceSettings(audioSilenceSettings: AudioSilenceFailoverSettingsProperty) {
        cdkBuilder.audioSilenceSettings(audioSilenceSettings.let(AudioSilenceFailoverSettingsProperty.Companion::unwrap))
      }

      /**
       * @param audioSilenceSettings MediaLive will perform a failover if the specified audio
       * selector is silent for the specified period.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("a9a4622e27dc9a59db26568c5068f3dba4c1e90432ad8bcca7d47d9931e9c491")
      override
          fun audioSilenceSettings(audioSilenceSettings: AudioSilenceFailoverSettingsProperty.Builder.() -> Unit):
          Unit = audioSilenceSettings(AudioSilenceFailoverSettingsProperty(audioSilenceSettings))

      /**
       * @param inputLossSettings MediaLive will perform a failover if content is not detected in
       * this input for the specified period.
       */
      override fun inputLossSettings(inputLossSettings: IResolvable) {
        cdkBuilder.inputLossSettings(inputLossSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param inputLossSettings MediaLive will perform a failover if content is not detected in
       * this input for the specified period.
       */
      override fun inputLossSettings(inputLossSettings: InputLossFailoverSettingsProperty) {
        cdkBuilder.inputLossSettings(inputLossSettings.let(InputLossFailoverSettingsProperty.Companion::unwrap))
      }

      /**
       * @param inputLossSettings MediaLive will perform a failover if content is not detected in
       * this input for the specified period.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ab6873e8132f190fd34bd4925f124e8201c44e6a922b26129aa6dd8851e6cbf9")
      override
          fun inputLossSettings(inputLossSettings: InputLossFailoverSettingsProperty.Builder.() -> Unit):
          Unit = inputLossSettings(InputLossFailoverSettingsProperty(inputLossSettings))

      /**
       * @param videoBlackSettings MediaLive will perform a failover if content is considered black
       * for the specified period.
       */
      override fun videoBlackSettings(videoBlackSettings: IResolvable) {
        cdkBuilder.videoBlackSettings(videoBlackSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param videoBlackSettings MediaLive will perform a failover if content is considered black
       * for the specified period.
       */
      override fun videoBlackSettings(videoBlackSettings: VideoBlackFailoverSettingsProperty) {
        cdkBuilder.videoBlackSettings(videoBlackSettings.let(VideoBlackFailoverSettingsProperty.Companion::unwrap))
      }

      /**
       * @param videoBlackSettings MediaLive will perform a failover if content is considered black
       * for the specified period.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("e1eca88803bfaebe36bff25f3b31a2eaf4d314c39ac7d7449b32bd0edb9f7d2b")
      override
          fun videoBlackSettings(videoBlackSettings: VideoBlackFailoverSettingsProperty.Builder.() -> Unit):
          Unit = videoBlackSettings(VideoBlackFailoverSettingsProperty(videoBlackSettings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.FailoverConditionSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.FailoverConditionSettingsProperty,
    ) : CdkObject(cdkObject),
        FailoverConditionSettingsProperty {
      /**
       * MediaLive will perform a failover if the specified audio selector is silent for the
       * specified period.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failoverconditionsettings.html#cfn-medialive-channel-failoverconditionsettings-audiosilencesettings)
       */
      override fun audioSilenceSettings(): Any? = unwrap(this).getAudioSilenceSettings()

      /**
       * MediaLive will perform a failover if content is not detected in this input for the
       * specified period.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failoverconditionsettings.html#cfn-medialive-channel-failoverconditionsettings-inputlosssettings)
       */
      override fun inputLossSettings(): Any? = unwrap(this).getInputLossSettings()

      /**
       * MediaLive will perform a failover if content is considered black for the specified period.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failoverconditionsettings.html#cfn-medialive-channel-failoverconditionsettings-videoblacksettings)
       */
      override fun videoBlackSettings(): Any? = unwrap(this).getVideoBlackSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          FailoverConditionSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.FailoverConditionSettingsProperty):
          FailoverConditionSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          FailoverConditionSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: FailoverConditionSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.FailoverConditionSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.FailoverConditionSettingsProperty
    }
  }

  /**
   * Settings to enable specific features. You can't configure these features until you have enabled
   * them in the channel.
   *
   * The parent of this entity is EncoderSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * FeatureActivationsProperty featureActivationsProperty = FeatureActivationsProperty.builder()
   * .inputPrepareScheduleActions("inputPrepareScheduleActions")
   * .outputStaticImageOverlayScheduleActions("outputStaticImageOverlayScheduleActions")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-featureactivations.html)
   */
  public interface FeatureActivationsProperty {
    /**
     * Enables the Input Prepare feature.
     *
     * You can create Input Prepare actions in the schedule only if this feature is enabled.
     * If you disable the feature on an existing schedule, make sure that you first delete all input
     * prepare actions from the schedule.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-featureactivations.html#cfn-medialive-channel-featureactivations-inputpreparescheduleactions)
     */
    public fun inputPrepareScheduleActions(): String? =
        unwrap(this).getInputPrepareScheduleActions()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-featureactivations.html#cfn-medialive-channel-featureactivations-outputstaticimageoverlayscheduleactions)
     */
    public fun outputStaticImageOverlayScheduleActions(): String? =
        unwrap(this).getOutputStaticImageOverlayScheduleActions()

    /**
     * A builder for [FeatureActivationsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param inputPrepareScheduleActions Enables the Input Prepare feature.
       * You can create Input Prepare actions in the schedule only if this feature is enabled.
       * If you disable the feature on an existing schedule, make sure that you first delete all
       * input prepare actions from the schedule.
       */
      public fun inputPrepareScheduleActions(inputPrepareScheduleActions: String)

      /**
       * @param outputStaticImageOverlayScheduleActions the value to be set.
       */
      public
          fun outputStaticImageOverlayScheduleActions(outputStaticImageOverlayScheduleActions: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.FeatureActivationsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.FeatureActivationsProperty.builder()

      /**
       * @param inputPrepareScheduleActions Enables the Input Prepare feature.
       * You can create Input Prepare actions in the schedule only if this feature is enabled.
       * If you disable the feature on an existing schedule, make sure that you first delete all
       * input prepare actions from the schedule.
       */
      override fun inputPrepareScheduleActions(inputPrepareScheduleActions: String) {
        cdkBuilder.inputPrepareScheduleActions(inputPrepareScheduleActions)
      }

      /**
       * @param outputStaticImageOverlayScheduleActions the value to be set.
       */
      override
          fun outputStaticImageOverlayScheduleActions(outputStaticImageOverlayScheduleActions: String) {
        cdkBuilder.outputStaticImageOverlayScheduleActions(outputStaticImageOverlayScheduleActions)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.FeatureActivationsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.FeatureActivationsProperty,
    ) : CdkObject(cdkObject),
        FeatureActivationsProperty {
      /**
       * Enables the Input Prepare feature.
       *
       * You can create Input Prepare actions in the schedule only if this feature is enabled.
       * If you disable the feature on an existing schedule, make sure that you first delete all
       * input prepare actions from the schedule.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-featureactivations.html#cfn-medialive-channel-featureactivations-inputpreparescheduleactions)
       */
      override fun inputPrepareScheduleActions(): String? =
          unwrap(this).getInputPrepareScheduleActions()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-featureactivations.html#cfn-medialive-channel-featureactivations-outputstaticimageoverlayscheduleactions)
       */
      override fun outputStaticImageOverlayScheduleActions(): String? =
          unwrap(this).getOutputStaticImageOverlayScheduleActions()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): FeatureActivationsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.FeatureActivationsProperty):
          FeatureActivationsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          FeatureActivationsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: FeatureActivationsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.FeatureActivationsProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.FeatureActivationsProperty
    }
  }

  /**
   * The settings for FEC.
   *
   * The parent of this entity is UdpOutputSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * FecOutputSettingsProperty fecOutputSettingsProperty = FecOutputSettingsProperty.builder()
   * .columnDepth(123)
   * .includeFec("includeFec")
   * .rowLength(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-fecoutputsettings.html)
   */
  public interface FecOutputSettingsProperty {
    /**
     * The parameter D from SMPTE 2022-1.
     *
     * The height of the FEC protection matrix. The number of transport stream packets per column
     * error correction packet. The number must be between 4 and 20, inclusive.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-fecoutputsettings.html#cfn-medialive-channel-fecoutputsettings-columndepth)
     */
    public fun columnDepth(): Number? = unwrap(this).getColumnDepth()

    /**
     * Enables column only or column and row-based FEC.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-fecoutputsettings.html#cfn-medialive-channel-fecoutputsettings-includefec)
     */
    public fun includeFec(): String? = unwrap(this).getIncludeFec()

    /**
     * The parameter L from SMPTE 2022-1.
     *
     * The width of the FEC protection matrix. Must be between 1 and 20, inclusive. If only Column
     * FEC is used, then larger values increase robustness. If Row FEC is used, then this is the number
     * of transport stream packets per row error correction packet, and the value must be between 4 and
     * 20, inclusive, if includeFec is columnAndRow. If includeFec is column, this value must be 1 to
     * 20, inclusive.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-fecoutputsettings.html#cfn-medialive-channel-fecoutputsettings-rowlength)
     */
    public fun rowLength(): Number? = unwrap(this).getRowLength()

    /**
     * A builder for [FecOutputSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param columnDepth The parameter D from SMPTE 2022-1.
       * The height of the FEC protection matrix. The number of transport stream packets per column
       * error correction packet. The number must be between 4 and 20, inclusive.
       */
      public fun columnDepth(columnDepth: Number)

      /**
       * @param includeFec Enables column only or column and row-based FEC.
       */
      public fun includeFec(includeFec: String)

      /**
       * @param rowLength The parameter L from SMPTE 2022-1.
       * The width of the FEC protection matrix. Must be between 1 and 20, inclusive. If only Column
       * FEC is used, then larger values increase robustness. If Row FEC is used, then this is the
       * number of transport stream packets per row error correction packet, and the value must be
       * between 4 and 20, inclusive, if includeFec is columnAndRow. If includeFec is column, this
       * value must be 1 to 20, inclusive.
       */
      public fun rowLength(rowLength: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.FecOutputSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.FecOutputSettingsProperty.builder()

      /**
       * @param columnDepth The parameter D from SMPTE 2022-1.
       * The height of the FEC protection matrix. The number of transport stream packets per column
       * error correction packet. The number must be between 4 and 20, inclusive.
       */
      override fun columnDepth(columnDepth: Number) {
        cdkBuilder.columnDepth(columnDepth)
      }

      /**
       * @param includeFec Enables column only or column and row-based FEC.
       */
      override fun includeFec(includeFec: String) {
        cdkBuilder.includeFec(includeFec)
      }

      /**
       * @param rowLength The parameter L from SMPTE 2022-1.
       * The width of the FEC protection matrix. Must be between 1 and 20, inclusive. If only Column
       * FEC is used, then larger values increase robustness. If Row FEC is used, then this is the
       * number of transport stream packets per row error correction packet, and the value must be
       * between 4 and 20, inclusive, if includeFec is columnAndRow. If includeFec is column, this
       * value must be 1 to 20, inclusive.
       */
      override fun rowLength(rowLength: Number) {
        cdkBuilder.rowLength(rowLength)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.FecOutputSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.FecOutputSettingsProperty,
    ) : CdkObject(cdkObject),
        FecOutputSettingsProperty {
      /**
       * The parameter D from SMPTE 2022-1.
       *
       * The height of the FEC protection matrix. The number of transport stream packets per column
       * error correction packet. The number must be between 4 and 20, inclusive.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-fecoutputsettings.html#cfn-medialive-channel-fecoutputsettings-columndepth)
       */
      override fun columnDepth(): Number? = unwrap(this).getColumnDepth()

      /**
       * Enables column only or column and row-based FEC.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-fecoutputsettings.html#cfn-medialive-channel-fecoutputsettings-includefec)
       */
      override fun includeFec(): String? = unwrap(this).getIncludeFec()

      /**
       * The parameter L from SMPTE 2022-1.
       *
       * The width of the FEC protection matrix. Must be between 1 and 20, inclusive. If only Column
       * FEC is used, then larger values increase robustness. If Row FEC is used, then this is the
       * number of transport stream packets per row error correction packet, and the value must be
       * between 4 and 20, inclusive, if includeFec is columnAndRow. If includeFec is column, this
       * value must be 1 to 20, inclusive.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-fecoutputsettings.html#cfn-medialive-channel-fecoutputsettings-rowlength)
       */
      override fun rowLength(): Number? = unwrap(this).getRowLength()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): FecOutputSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.FecOutputSettingsProperty):
          FecOutputSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          FecOutputSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: FecOutputSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.FecOutputSettingsProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.FecOutputSettingsProperty
    }
  }

  /**
   * Settings for the fMP4 containers.
   *
   * The parent of this entity is HlsSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * Fmp4HlsSettingsProperty fmp4HlsSettingsProperty = Fmp4HlsSettingsProperty.builder()
   * .audioRenditionSets("audioRenditionSets")
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .timedMetadataBehavior("timedMetadataBehavior")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-fmp4hlssettings.html)
   */
  public interface Fmp4HlsSettingsProperty {
    /**
     * List all the audio groups that are used with the video output stream.
     *
     * Input all the audio GROUP-IDs that are associated to the video, separate by ','.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-fmp4hlssettings.html#cfn-medialive-channel-fmp4hlssettings-audiorenditionsets)
     */
    public fun audioRenditionSets(): String? = unwrap(this).getAudioRenditionSets()

    /**
     * If set to passthrough, Nielsen inaudible tones for media tracking will be detected in the
     * input audio and an equivalent ID3 tag will be inserted in the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-fmp4hlssettings.html#cfn-medialive-channel-fmp4hlssettings-nielsenid3behavior)
     */
    public fun nielsenId3Behavior(): String? = unwrap(this).getNielsenId3Behavior()

    /**
     * When set to passthrough, timed metadata is passed through from input to output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-fmp4hlssettings.html#cfn-medialive-channel-fmp4hlssettings-timedmetadatabehavior)
     */
    public fun timedMetadataBehavior(): String? = unwrap(this).getTimedMetadataBehavior()

    /**
     * A builder for [Fmp4HlsSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param audioRenditionSets List all the audio groups that are used with the video output
       * stream.
       * Input all the audio GROUP-IDs that are associated to the video, separate by ','.
       */
      public fun audioRenditionSets(audioRenditionSets: String)

      /**
       * @param nielsenId3Behavior If set to passthrough, Nielsen inaudible tones for media tracking
       * will be detected in the input audio and an equivalent ID3 tag will be inserted in the output.
       */
      public fun nielsenId3Behavior(nielsenId3Behavior: String)

      /**
       * @param timedMetadataBehavior When set to passthrough, timed metadata is passed through from
       * input to output.
       */
      public fun timedMetadataBehavior(timedMetadataBehavior: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.Fmp4HlsSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.Fmp4HlsSettingsProperty.builder()

      /**
       * @param audioRenditionSets List all the audio groups that are used with the video output
       * stream.
       * Input all the audio GROUP-IDs that are associated to the video, separate by ','.
       */
      override fun audioRenditionSets(audioRenditionSets: String) {
        cdkBuilder.audioRenditionSets(audioRenditionSets)
      }

      /**
       * @param nielsenId3Behavior If set to passthrough, Nielsen inaudible tones for media tracking
       * will be detected in the input audio and an equivalent ID3 tag will be inserted in the output.
       */
      override fun nielsenId3Behavior(nielsenId3Behavior: String) {
        cdkBuilder.nielsenId3Behavior(nielsenId3Behavior)
      }

      /**
       * @param timedMetadataBehavior When set to passthrough, timed metadata is passed through from
       * input to output.
       */
      override fun timedMetadataBehavior(timedMetadataBehavior: String) {
        cdkBuilder.timedMetadataBehavior(timedMetadataBehavior)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.Fmp4HlsSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Fmp4HlsSettingsProperty,
    ) : CdkObject(cdkObject),
        Fmp4HlsSettingsProperty {
      /**
       * List all the audio groups that are used with the video output stream.
       *
       * Input all the audio GROUP-IDs that are associated to the video, separate by ','.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-fmp4hlssettings.html#cfn-medialive-channel-fmp4hlssettings-audiorenditionsets)
       */
      override fun audioRenditionSets(): String? = unwrap(this).getAudioRenditionSets()

      /**
       * If set to passthrough, Nielsen inaudible tones for media tracking will be detected in the
       * input audio and an equivalent ID3 tag will be inserted in the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-fmp4hlssettings.html#cfn-medialive-channel-fmp4hlssettings-nielsenid3behavior)
       */
      override fun nielsenId3Behavior(): String? = unwrap(this).getNielsenId3Behavior()

      /**
       * When set to passthrough, timed metadata is passed through from input to output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-fmp4hlssettings.html#cfn-medialive-channel-fmp4hlssettings-timedmetadatabehavior)
       */
      override fun timedMetadataBehavior(): String? = unwrap(this).getTimedMetadataBehavior()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): Fmp4HlsSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Fmp4HlsSettingsProperty):
          Fmp4HlsSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? Fmp4HlsSettingsProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: Fmp4HlsSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.Fmp4HlsSettingsProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.Fmp4HlsSettingsProperty
    }
  }

  /**
   * Settings to configure the destination of a Frame Capture output.
   *
   * The parent of this entity is FrameCaptureGroupSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * FrameCaptureCdnSettingsProperty frameCaptureCdnSettingsProperty =
   * FrameCaptureCdnSettingsProperty.builder()
   * .frameCaptureS3Settings(FrameCaptureS3SettingsProperty.builder()
   * .cannedAcl("cannedAcl")
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecapturecdnsettings.html)
   */
  public interface FrameCaptureCdnSettingsProperty {
    /**
     * Sets up Amazon S3 as the destination for this Frame Capture output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecapturecdnsettings.html#cfn-medialive-channel-framecapturecdnsettings-framecaptures3settings)
     */
    public fun frameCaptureS3Settings(): Any? = unwrap(this).getFrameCaptureS3Settings()

    /**
     * A builder for [FrameCaptureCdnSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param frameCaptureS3Settings Sets up Amazon S3 as the destination for this Frame Capture
       * output.
       */
      public fun frameCaptureS3Settings(frameCaptureS3Settings: IResolvable)

      /**
       * @param frameCaptureS3Settings Sets up Amazon S3 as the destination for this Frame Capture
       * output.
       */
      public fun frameCaptureS3Settings(frameCaptureS3Settings: FrameCaptureS3SettingsProperty)

      /**
       * @param frameCaptureS3Settings Sets up Amazon S3 as the destination for this Frame Capture
       * output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("d13d87e77b9a162260c01338cc60dc3b2d0d02413fd8bc9f1ce8a0eedab5b072")
      public
          fun frameCaptureS3Settings(frameCaptureS3Settings: FrameCaptureS3SettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureCdnSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureCdnSettingsProperty.builder()

      /**
       * @param frameCaptureS3Settings Sets up Amazon S3 as the destination for this Frame Capture
       * output.
       */
      override fun frameCaptureS3Settings(frameCaptureS3Settings: IResolvable) {
        cdkBuilder.frameCaptureS3Settings(frameCaptureS3Settings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param frameCaptureS3Settings Sets up Amazon S3 as the destination for this Frame Capture
       * output.
       */
      override fun frameCaptureS3Settings(frameCaptureS3Settings: FrameCaptureS3SettingsProperty) {
        cdkBuilder.frameCaptureS3Settings(frameCaptureS3Settings.let(FrameCaptureS3SettingsProperty.Companion::unwrap))
      }

      /**
       * @param frameCaptureS3Settings Sets up Amazon S3 as the destination for this Frame Capture
       * output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("d13d87e77b9a162260c01338cc60dc3b2d0d02413fd8bc9f1ce8a0eedab5b072")
      override
          fun frameCaptureS3Settings(frameCaptureS3Settings: FrameCaptureS3SettingsProperty.Builder.() -> Unit):
          Unit = frameCaptureS3Settings(FrameCaptureS3SettingsProperty(frameCaptureS3Settings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureCdnSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureCdnSettingsProperty,
    ) : CdkObject(cdkObject),
        FrameCaptureCdnSettingsProperty {
      /**
       * Sets up Amazon S3 as the destination for this Frame Capture output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecapturecdnsettings.html#cfn-medialive-channel-framecapturecdnsettings-framecaptures3settings)
       */
      override fun frameCaptureS3Settings(): Any? = unwrap(this).getFrameCaptureS3Settings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): FrameCaptureCdnSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureCdnSettingsProperty):
          FrameCaptureCdnSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          FrameCaptureCdnSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: FrameCaptureCdnSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureCdnSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureCdnSettingsProperty
    }
  }

  /**
   * The settings for a frame capture output group.
   *
   * The parent of this entity is OutputGroupSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * FrameCaptureGroupSettingsProperty frameCaptureGroupSettingsProperty =
   * FrameCaptureGroupSettingsProperty.builder()
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .frameCaptureCdnSettings(FrameCaptureCdnSettingsProperty.builder()
   * .frameCaptureS3Settings(FrameCaptureS3SettingsProperty.builder()
   * .cannedAcl("cannedAcl")
   * .build())
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecapturegroupsettings.html)
   */
  public interface FrameCaptureGroupSettingsProperty {
    /**
     * The destination for the frame capture files.
     *
     * The destination is either the URI for an Amazon S3 bucket and object, plus a file name prefix
     * (for example, s3ssl://sportsDelivery/highlights/20180820/curling_) or the URI for a MediaStore
     * container, plus a file name prefix (for example,
     * mediastoressl://sportsDelivery/20180820/curling_). The final file names consist of the prefix
     * from the destination field (for example, "curling_") + name modifier + the counter (5 digits,
     * starting from 00001) + extension (which is always .jpg). For example, curlingLow.00001.jpg.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecapturegroupsettings.html#cfn-medialive-channel-framecapturegroupsettings-destination)
     */
    public fun destination(): Any? = unwrap(this).getDestination()

    /**
     * Settings to configure the destination of a Frame Capture output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecapturegroupsettings.html#cfn-medialive-channel-framecapturegroupsettings-framecapturecdnsettings)
     */
    public fun frameCaptureCdnSettings(): Any? = unwrap(this).getFrameCaptureCdnSettings()

    /**
     * A builder for [FrameCaptureGroupSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param destination The destination for the frame capture files.
       * The destination is either the URI for an Amazon S3 bucket and object, plus a file name
       * prefix (for example, s3ssl://sportsDelivery/highlights/20180820/curling_) or the URI for a
       * MediaStore container, plus a file name prefix (for example,
       * mediastoressl://sportsDelivery/20180820/curling_). The final file names consist of the prefix
       * from the destination field (for example, "curling_") + name modifier + the counter (5 digits,
       * starting from 00001) + extension (which is always .jpg). For example, curlingLow.00001.jpg.
       */
      public fun destination(destination: IResolvable)

      /**
       * @param destination The destination for the frame capture files.
       * The destination is either the URI for an Amazon S3 bucket and object, plus a file name
       * prefix (for example, s3ssl://sportsDelivery/highlights/20180820/curling_) or the URI for a
       * MediaStore container, plus a file name prefix (for example,
       * mediastoressl://sportsDelivery/20180820/curling_). The final file names consist of the prefix
       * from the destination field (for example, "curling_") + name modifier + the counter (5 digits,
       * starting from 00001) + extension (which is always .jpg). For example, curlingLow.00001.jpg.
       */
      public fun destination(destination: OutputLocationRefProperty)

      /**
       * @param destination The destination for the frame capture files.
       * The destination is either the URI for an Amazon S3 bucket and object, plus a file name
       * prefix (for example, s3ssl://sportsDelivery/highlights/20180820/curling_) or the URI for a
       * MediaStore container, plus a file name prefix (for example,
       * mediastoressl://sportsDelivery/20180820/curling_). The final file names consist of the prefix
       * from the destination field (for example, "curling_") + name modifier + the counter (5 digits,
       * starting from 00001) + extension (which is always .jpg). For example, curlingLow.00001.jpg.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("9856cbc3d03f26a360384cab57e12cb1f22a4e06f7c1fac35b80c95e6067e184")
      public fun destination(destination: OutputLocationRefProperty.Builder.() -> Unit)

      /**
       * @param frameCaptureCdnSettings Settings to configure the destination of a Frame Capture
       * output.
       */
      public fun frameCaptureCdnSettings(frameCaptureCdnSettings: IResolvable)

      /**
       * @param frameCaptureCdnSettings Settings to configure the destination of a Frame Capture
       * output.
       */
      public fun frameCaptureCdnSettings(frameCaptureCdnSettings: FrameCaptureCdnSettingsProperty)

      /**
       * @param frameCaptureCdnSettings Settings to configure the destination of a Frame Capture
       * output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("85dbbe320ce33bec193e6f343670d9440c84e5c58aae48abafbce652f98b513e")
      public
          fun frameCaptureCdnSettings(frameCaptureCdnSettings: FrameCaptureCdnSettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureGroupSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureGroupSettingsProperty.builder()

      /**
       * @param destination The destination for the frame capture files.
       * The destination is either the URI for an Amazon S3 bucket and object, plus a file name
       * prefix (for example, s3ssl://sportsDelivery/highlights/20180820/curling_) or the URI for a
       * MediaStore container, plus a file name prefix (for example,
       * mediastoressl://sportsDelivery/20180820/curling_). The final file names consist of the prefix
       * from the destination field (for example, "curling_") + name modifier + the counter (5 digits,
       * starting from 00001) + extension (which is always .jpg). For example, curlingLow.00001.jpg.
       */
      override fun destination(destination: IResolvable) {
        cdkBuilder.destination(destination.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param destination The destination for the frame capture files.
       * The destination is either the URI for an Amazon S3 bucket and object, plus a file name
       * prefix (for example, s3ssl://sportsDelivery/highlights/20180820/curling_) or the URI for a
       * MediaStore container, plus a file name prefix (for example,
       * mediastoressl://sportsDelivery/20180820/curling_). The final file names consist of the prefix
       * from the destination field (for example, "curling_") + name modifier + the counter (5 digits,
       * starting from 00001) + extension (which is always .jpg). For example, curlingLow.00001.jpg.
       */
      override fun destination(destination: OutputLocationRefProperty) {
        cdkBuilder.destination(destination.let(OutputLocationRefProperty.Companion::unwrap))
      }

      /**
       * @param destination The destination for the frame capture files.
       * The destination is either the URI for an Amazon S3 bucket and object, plus a file name
       * prefix (for example, s3ssl://sportsDelivery/highlights/20180820/curling_) or the URI for a
       * MediaStore container, plus a file name prefix (for example,
       * mediastoressl://sportsDelivery/20180820/curling_). The final file names consist of the prefix
       * from the destination field (for example, "curling_") + name modifier + the counter (5 digits,
       * starting from 00001) + extension (which is always .jpg). For example, curlingLow.00001.jpg.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("9856cbc3d03f26a360384cab57e12cb1f22a4e06f7c1fac35b80c95e6067e184")
      override fun destination(destination: OutputLocationRefProperty.Builder.() -> Unit): Unit =
          destination(OutputLocationRefProperty(destination))

      /**
       * @param frameCaptureCdnSettings Settings to configure the destination of a Frame Capture
       * output.
       */
      override fun frameCaptureCdnSettings(frameCaptureCdnSettings: IResolvable) {
        cdkBuilder.frameCaptureCdnSettings(frameCaptureCdnSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param frameCaptureCdnSettings Settings to configure the destination of a Frame Capture
       * output.
       */
      override
          fun frameCaptureCdnSettings(frameCaptureCdnSettings: FrameCaptureCdnSettingsProperty) {
        cdkBuilder.frameCaptureCdnSettings(frameCaptureCdnSettings.let(FrameCaptureCdnSettingsProperty.Companion::unwrap))
      }

      /**
       * @param frameCaptureCdnSettings Settings to configure the destination of a Frame Capture
       * output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("85dbbe320ce33bec193e6f343670d9440c84e5c58aae48abafbce652f98b513e")
      override
          fun frameCaptureCdnSettings(frameCaptureCdnSettings: FrameCaptureCdnSettingsProperty.Builder.() -> Unit):
          Unit = frameCaptureCdnSettings(FrameCaptureCdnSettingsProperty(frameCaptureCdnSettings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureGroupSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureGroupSettingsProperty,
    ) : CdkObject(cdkObject),
        FrameCaptureGroupSettingsProperty {
      /**
       * The destination for the frame capture files.
       *
       * The destination is either the URI for an Amazon S3 bucket and object, plus a file name
       * prefix (for example, s3ssl://sportsDelivery/highlights/20180820/curling_) or the URI for a
       * MediaStore container, plus a file name prefix (for example,
       * mediastoressl://sportsDelivery/20180820/curling_). The final file names consist of the prefix
       * from the destination field (for example, "curling_") + name modifier + the counter (5 digits,
       * starting from 00001) + extension (which is always .jpg). For example, curlingLow.00001.jpg.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecapturegroupsettings.html#cfn-medialive-channel-framecapturegroupsettings-destination)
       */
      override fun destination(): Any? = unwrap(this).getDestination()

      /**
       * Settings to configure the destination of a Frame Capture output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecapturegroupsettings.html#cfn-medialive-channel-framecapturegroupsettings-framecapturecdnsettings)
       */
      override fun frameCaptureCdnSettings(): Any? = unwrap(this).getFrameCaptureCdnSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          FrameCaptureGroupSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureGroupSettingsProperty):
          FrameCaptureGroupSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          FrameCaptureGroupSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: FrameCaptureGroupSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureGroupSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureGroupSettingsProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * FrameCaptureHlsSettingsProperty frameCaptureHlsSettingsProperty =
   * FrameCaptureHlsSettingsProperty.builder().build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecapturehlssettings.html)
   */
  public interface FrameCaptureHlsSettingsProperty {
    /**
     * A builder for [FrameCaptureHlsSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureHlsSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureHlsSettingsProperty.builder()

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureHlsSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureHlsSettingsProperty,
    ) : CdkObject(cdkObject),
        FrameCaptureHlsSettingsProperty

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): FrameCaptureHlsSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureHlsSettingsProperty):
          FrameCaptureHlsSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          FrameCaptureHlsSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: FrameCaptureHlsSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureHlsSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureHlsSettingsProperty
    }
  }

  /**
   * The frame capture output settings.
   *
   * The parent of this entity is OutputSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * FrameCaptureOutputSettingsProperty frameCaptureOutputSettingsProperty =
   * FrameCaptureOutputSettingsProperty.builder()
   * .nameModifier("nameModifier")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecaptureoutputsettings.html)
   */
  public interface FrameCaptureOutputSettingsProperty {
    /**
     * Required if the output group contains more than one output.
     *
     * This modifier forms part of the output file name.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecaptureoutputsettings.html#cfn-medialive-channel-framecaptureoutputsettings-namemodifier)
     */
    public fun nameModifier(): String? = unwrap(this).getNameModifier()

    /**
     * A builder for [FrameCaptureOutputSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param nameModifier Required if the output group contains more than one output.
       * This modifier forms part of the output file name.
       */
      public fun nameModifier(nameModifier: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureOutputSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureOutputSettingsProperty.builder()

      /**
       * @param nameModifier Required if the output group contains more than one output.
       * This modifier forms part of the output file name.
       */
      override fun nameModifier(nameModifier: String) {
        cdkBuilder.nameModifier(nameModifier)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureOutputSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureOutputSettingsProperty,
    ) : CdkObject(cdkObject),
        FrameCaptureOutputSettingsProperty {
      /**
       * Required if the output group contains more than one output.
       *
       * This modifier forms part of the output file name.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecaptureoutputsettings.html#cfn-medialive-channel-framecaptureoutputsettings-namemodifier)
       */
      override fun nameModifier(): String? = unwrap(this).getNameModifier()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          FrameCaptureOutputSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureOutputSettingsProperty):
          FrameCaptureOutputSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          FrameCaptureOutputSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: FrameCaptureOutputSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureOutputSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureOutputSettingsProperty
    }
  }

  /**
   * Sets up Amazon S3 as the destination for this Frame Capture output.
   *
   * The parent of this entity is FrameCaptureCdnSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * FrameCaptureS3SettingsProperty frameCaptureS3SettingsProperty =
   * FrameCaptureS3SettingsProperty.builder()
   * .cannedAcl("cannedAcl")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecaptures3settings.html)
   */
  public interface FrameCaptureS3SettingsProperty {
    /**
     * Specify the canned ACL to apply to each S3 request.
     *
     * Defaults to none.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecaptures3settings.html#cfn-medialive-channel-framecaptures3settings-cannedacl)
     */
    public fun cannedAcl(): String? = unwrap(this).getCannedAcl()

    /**
     * A builder for [FrameCaptureS3SettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param cannedAcl Specify the canned ACL to apply to each S3 request.
       * Defaults to none.
       */
      public fun cannedAcl(cannedAcl: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureS3SettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureS3SettingsProperty.builder()

      /**
       * @param cannedAcl Specify the canned ACL to apply to each S3 request.
       * Defaults to none.
       */
      override fun cannedAcl(cannedAcl: String) {
        cdkBuilder.cannedAcl(cannedAcl)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureS3SettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureS3SettingsProperty,
    ) : CdkObject(cdkObject),
        FrameCaptureS3SettingsProperty {
      /**
       * Specify the canned ACL to apply to each S3 request.
       *
       * Defaults to none.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecaptures3settings.html#cfn-medialive-channel-framecaptures3settings-cannedacl)
       */
      override fun cannedAcl(): String? = unwrap(this).getCannedAcl()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): FrameCaptureS3SettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureS3SettingsProperty):
          FrameCaptureS3SettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          FrameCaptureS3SettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: FrameCaptureS3SettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureS3SettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureS3SettingsProperty
    }
  }

  /**
   * The frame capture settings.
   *
   * The parent of this entity is VideoCodecSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * FrameCaptureSettingsProperty frameCaptureSettingsProperty =
   * FrameCaptureSettingsProperty.builder()
   * .captureInterval(123)
   * .captureIntervalUnits("captureIntervalUnits")
   * .timecodeBurninSettings(TimecodeBurninSettingsProperty.builder()
   * .fontSize("fontSize")
   * .position("position")
   * .prefix("prefix")
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecapturesettings.html)
   */
  public interface FrameCaptureSettingsProperty {
    /**
     * The frequency, in seconds, for capturing frames for inclusion in the output.
     *
     * For example, "10" means capture a frame every 10 seconds.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecapturesettings.html#cfn-medialive-channel-framecapturesettings-captureinterval)
     */
    public fun captureInterval(): Number? = unwrap(this).getCaptureInterval()

    /**
     * Unit for the frame capture interval.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecapturesettings.html#cfn-medialive-channel-framecapturesettings-captureintervalunits)
     */
    public fun captureIntervalUnits(): String? = unwrap(this).getCaptureIntervalUnits()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecapturesettings.html#cfn-medialive-channel-framecapturesettings-timecodeburninsettings)
     */
    public fun timecodeBurninSettings(): Any? = unwrap(this).getTimecodeBurninSettings()

    /**
     * A builder for [FrameCaptureSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param captureInterval The frequency, in seconds, for capturing frames for inclusion in the
       * output.
       * For example, "10" means capture a frame every 10 seconds.
       */
      public fun captureInterval(captureInterval: Number)

      /**
       * @param captureIntervalUnits Unit for the frame capture interval.
       */
      public fun captureIntervalUnits(captureIntervalUnits: String)

      /**
       * @param timecodeBurninSettings the value to be set.
       */
      public fun timecodeBurninSettings(timecodeBurninSettings: IResolvable)

      /**
       * @param timecodeBurninSettings the value to be set.
       */
      public fun timecodeBurninSettings(timecodeBurninSettings: TimecodeBurninSettingsProperty)

      /**
       * @param timecodeBurninSettings the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("c5b4690554ee1d0077f692580204cc0135e0104f7a57fa124127fafa7e75dc43")
      public
          fun timecodeBurninSettings(timecodeBurninSettings: TimecodeBurninSettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureSettingsProperty.builder()

      /**
       * @param captureInterval The frequency, in seconds, for capturing frames for inclusion in the
       * output.
       * For example, "10" means capture a frame every 10 seconds.
       */
      override fun captureInterval(captureInterval: Number) {
        cdkBuilder.captureInterval(captureInterval)
      }

      /**
       * @param captureIntervalUnits Unit for the frame capture interval.
       */
      override fun captureIntervalUnits(captureIntervalUnits: String) {
        cdkBuilder.captureIntervalUnits(captureIntervalUnits)
      }

      /**
       * @param timecodeBurninSettings the value to be set.
       */
      override fun timecodeBurninSettings(timecodeBurninSettings: IResolvable) {
        cdkBuilder.timecodeBurninSettings(timecodeBurninSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param timecodeBurninSettings the value to be set.
       */
      override fun timecodeBurninSettings(timecodeBurninSettings: TimecodeBurninSettingsProperty) {
        cdkBuilder.timecodeBurninSettings(timecodeBurninSettings.let(TimecodeBurninSettingsProperty.Companion::unwrap))
      }

      /**
       * @param timecodeBurninSettings the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("c5b4690554ee1d0077f692580204cc0135e0104f7a57fa124127fafa7e75dc43")
      override
          fun timecodeBurninSettings(timecodeBurninSettings: TimecodeBurninSettingsProperty.Builder.() -> Unit):
          Unit = timecodeBurninSettings(TimecodeBurninSettingsProperty(timecodeBurninSettings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureSettingsProperty,
    ) : CdkObject(cdkObject),
        FrameCaptureSettingsProperty {
      /**
       * The frequency, in seconds, for capturing frames for inclusion in the output.
       *
       * For example, "10" means capture a frame every 10 seconds.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecapturesettings.html#cfn-medialive-channel-framecapturesettings-captureinterval)
       */
      override fun captureInterval(): Number? = unwrap(this).getCaptureInterval()

      /**
       * Unit for the frame capture interval.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecapturesettings.html#cfn-medialive-channel-framecapturesettings-captureintervalunits)
       */
      override fun captureIntervalUnits(): String? = unwrap(this).getCaptureIntervalUnits()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecapturesettings.html#cfn-medialive-channel-framecapturesettings-timecodeburninsettings)
       */
      override fun timecodeBurninSettings(): Any? = unwrap(this).getTimecodeBurninSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): FrameCaptureSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureSettingsProperty):
          FrameCaptureSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          FrameCaptureSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: FrameCaptureSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.FrameCaptureSettingsProperty
    }
  }

  /**
   * The configuration settings that apply to the entire channel.
   *
   * The parent of this entity is EncoderSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * Object pipelineLockingSettings;
   * GlobalConfigurationProperty globalConfigurationProperty = GlobalConfigurationProperty.builder()
   * .initialAudioGain(123)
   * .inputEndAction("inputEndAction")
   * .inputLossBehavior(InputLossBehaviorProperty.builder()
   * .blackFrameMsec(123)
   * .inputLossImageColor("inputLossImageColor")
   * .inputLossImageSlate(InputLocationProperty.builder()
   * .passwordParam("passwordParam")
   * .uri("uri")
   * .username("username")
   * .build())
   * .inputLossImageType("inputLossImageType")
   * .repeatFrameMsec(123)
   * .build())
   * .outputLockingMode("outputLockingMode")
   * .outputLockingSettings(OutputLockingSettingsProperty.builder()
   * .epochLockingSettings(EpochLockingSettingsProperty.builder()
   * .customEpoch("customEpoch")
   * .jamSyncTime("jamSyncTime")
   * .build())
   * .pipelineLockingSettings(pipelineLockingSettings)
   * .build())
   * .outputTimingSource("outputTimingSource")
   * .supportLowFramerateInputs("supportLowFramerateInputs")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-globalconfiguration.html)
   */
  public interface GlobalConfigurationProperty {
    /**
     * The value to set the initial audio gain for the channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-globalconfiguration.html#cfn-medialive-channel-globalconfiguration-initialaudiogain)
     */
    public fun initialAudioGain(): Number? = unwrap(this).getInitialAudioGain()

    /**
     * Indicates the action to take when the current input completes (for example, end-of-file).
     *
     * When switchAndLoopInputs is configured, MediaLive restarts at the beginning of the first
     * input. When "none" is configured, MediaLive transcodes either black, a solid color, or a
     * user-specified slate images per the "Input Loss Behavior" configuration until the next input
     * switch occurs (which is controlled through the Channel Schedule API).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-globalconfiguration.html#cfn-medialive-channel-globalconfiguration-inputendaction)
     */
    public fun inputEndAction(): String? = unwrap(this).getInputEndAction()

    /**
     * The settings for system actions when the input is lost.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-globalconfiguration.html#cfn-medialive-channel-globalconfiguration-inputlossbehavior)
     */
    public fun inputLossBehavior(): Any? = unwrap(this).getInputLossBehavior()

    /**
     * Indicates how MediaLive pipelines are synchronized.
     *
     * PIPELINELOCKING - MediaLive attempts to synchronize the output of each pipeline to the other.
     * EPOCHLOCKING - MediaLive attempts to synchronize the output of each pipeline to the Unix epoch.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-globalconfiguration.html#cfn-medialive-channel-globalconfiguration-outputlockingmode)
     */
    public fun outputLockingMode(): String? = unwrap(this).getOutputLockingMode()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-globalconfiguration.html#cfn-medialive-channel-globalconfiguration-outputlockingsettings)
     */
    public fun outputLockingSettings(): Any? = unwrap(this).getOutputLockingSettings()

    /**
     * Indicates whether the rate of frames emitted by the Live encoder should be paced by its
     * system clock (which optionally might be locked to another source through NTP) or should be
     * locked to the clock of the source that is providing the input stream.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-globalconfiguration.html#cfn-medialive-channel-globalconfiguration-outputtimingsource)
     */
    public fun outputTimingSource(): String? = unwrap(this).getOutputTimingSource()

    /**
     * Adjusts the video input buffer for streams with very low video frame rates.
     *
     * This is commonly set to enabled for music channels with less than one video frame per second.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-globalconfiguration.html#cfn-medialive-channel-globalconfiguration-supportlowframerateinputs)
     */
    public fun supportLowFramerateInputs(): String? = unwrap(this).getSupportLowFramerateInputs()

    /**
     * A builder for [GlobalConfigurationProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param initialAudioGain The value to set the initial audio gain for the channel.
       */
      public fun initialAudioGain(initialAudioGain: Number)

      /**
       * @param inputEndAction Indicates the action to take when the current input completes (for
       * example, end-of-file).
       * When switchAndLoopInputs is configured, MediaLive restarts at the beginning of the first
       * input. When "none" is configured, MediaLive transcodes either black, a solid color, or a
       * user-specified slate images per the "Input Loss Behavior" configuration until the next input
       * switch occurs (which is controlled through the Channel Schedule API).
       */
      public fun inputEndAction(inputEndAction: String)

      /**
       * @param inputLossBehavior The settings for system actions when the input is lost.
       */
      public fun inputLossBehavior(inputLossBehavior: IResolvable)

      /**
       * @param inputLossBehavior The settings for system actions when the input is lost.
       */
      public fun inputLossBehavior(inputLossBehavior: InputLossBehaviorProperty)

      /**
       * @param inputLossBehavior The settings for system actions when the input is lost.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("452e65136d8633130eff6a66c90b63116ca9f72781ec31729ed8e7ceeeb4b57e")
      public fun inputLossBehavior(inputLossBehavior: InputLossBehaviorProperty.Builder.() -> Unit)

      /**
       * @param outputLockingMode Indicates how MediaLive pipelines are synchronized.
       * PIPELINELOCKING - MediaLive attempts to synchronize the output of each pipeline to the
       * other. EPOCHLOCKING - MediaLive attempts to synchronize the output of each pipeline to the
       * Unix epoch.
       */
      public fun outputLockingMode(outputLockingMode: String)

      /**
       * @param outputLockingSettings the value to be set.
       */
      public fun outputLockingSettings(outputLockingSettings: IResolvable)

      /**
       * @param outputLockingSettings the value to be set.
       */
      public fun outputLockingSettings(outputLockingSettings: OutputLockingSettingsProperty)

      /**
       * @param outputLockingSettings the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("33e1a462c9b03633886fec8f9d3433c0a8c03a70255070d198064ff4392b7f22")
      public
          fun outputLockingSettings(outputLockingSettings: OutputLockingSettingsProperty.Builder.() -> Unit)

      /**
       * @param outputTimingSource Indicates whether the rate of frames emitted by the Live encoder
       * should be paced by its system clock (which optionally might be locked to another source
       * through NTP) or should be locked to the clock of the source that is providing the input
       * stream.
       */
      public fun outputTimingSource(outputTimingSource: String)

      /**
       * @param supportLowFramerateInputs Adjusts the video input buffer for streams with very low
       * video frame rates.
       * This is commonly set to enabled for music channels with less than one video frame per
       * second.
       */
      public fun supportLowFramerateInputs(supportLowFramerateInputs: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.GlobalConfigurationProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.GlobalConfigurationProperty.builder()

      /**
       * @param initialAudioGain The value to set the initial audio gain for the channel.
       */
      override fun initialAudioGain(initialAudioGain: Number) {
        cdkBuilder.initialAudioGain(initialAudioGain)
      }

      /**
       * @param inputEndAction Indicates the action to take when the current input completes (for
       * example, end-of-file).
       * When switchAndLoopInputs is configured, MediaLive restarts at the beginning of the first
       * input. When "none" is configured, MediaLive transcodes either black, a solid color, or a
       * user-specified slate images per the "Input Loss Behavior" configuration until the next input
       * switch occurs (which is controlled through the Channel Schedule API).
       */
      override fun inputEndAction(inputEndAction: String) {
        cdkBuilder.inputEndAction(inputEndAction)
      }

      /**
       * @param inputLossBehavior The settings for system actions when the input is lost.
       */
      override fun inputLossBehavior(inputLossBehavior: IResolvable) {
        cdkBuilder.inputLossBehavior(inputLossBehavior.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param inputLossBehavior The settings for system actions when the input is lost.
       */
      override fun inputLossBehavior(inputLossBehavior: InputLossBehaviorProperty) {
        cdkBuilder.inputLossBehavior(inputLossBehavior.let(InputLossBehaviorProperty.Companion::unwrap))
      }

      /**
       * @param inputLossBehavior The settings for system actions when the input is lost.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("452e65136d8633130eff6a66c90b63116ca9f72781ec31729ed8e7ceeeb4b57e")
      override
          fun inputLossBehavior(inputLossBehavior: InputLossBehaviorProperty.Builder.() -> Unit):
          Unit = inputLossBehavior(InputLossBehaviorProperty(inputLossBehavior))

      /**
       * @param outputLockingMode Indicates how MediaLive pipelines are synchronized.
       * PIPELINELOCKING - MediaLive attempts to synchronize the output of each pipeline to the
       * other. EPOCHLOCKING - MediaLive attempts to synchronize the output of each pipeline to the
       * Unix epoch.
       */
      override fun outputLockingMode(outputLockingMode: String) {
        cdkBuilder.outputLockingMode(outputLockingMode)
      }

      /**
       * @param outputLockingSettings the value to be set.
       */
      override fun outputLockingSettings(outputLockingSettings: IResolvable) {
        cdkBuilder.outputLockingSettings(outputLockingSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param outputLockingSettings the value to be set.
       */
      override fun outputLockingSettings(outputLockingSettings: OutputLockingSettingsProperty) {
        cdkBuilder.outputLockingSettings(outputLockingSettings.let(OutputLockingSettingsProperty.Companion::unwrap))
      }

      /**
       * @param outputLockingSettings the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("33e1a462c9b03633886fec8f9d3433c0a8c03a70255070d198064ff4392b7f22")
      override
          fun outputLockingSettings(outputLockingSettings: OutputLockingSettingsProperty.Builder.() -> Unit):
          Unit = outputLockingSettings(OutputLockingSettingsProperty(outputLockingSettings))

      /**
       * @param outputTimingSource Indicates whether the rate of frames emitted by the Live encoder
       * should be paced by its system clock (which optionally might be locked to another source
       * through NTP) or should be locked to the clock of the source that is providing the input
       * stream.
       */
      override fun outputTimingSource(outputTimingSource: String) {
        cdkBuilder.outputTimingSource(outputTimingSource)
      }

      /**
       * @param supportLowFramerateInputs Adjusts the video input buffer for streams with very low
       * video frame rates.
       * This is commonly set to enabled for music channels with less than one video frame per
       * second.
       */
      override fun supportLowFramerateInputs(supportLowFramerateInputs: String) {
        cdkBuilder.supportLowFramerateInputs(supportLowFramerateInputs)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.GlobalConfigurationProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.GlobalConfigurationProperty,
    ) : CdkObject(cdkObject),
        GlobalConfigurationProperty {
      /**
       * The value to set the initial audio gain for the channel.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-globalconfiguration.html#cfn-medialive-channel-globalconfiguration-initialaudiogain)
       */
      override fun initialAudioGain(): Number? = unwrap(this).getInitialAudioGain()

      /**
       * Indicates the action to take when the current input completes (for example, end-of-file).
       *
       * When switchAndLoopInputs is configured, MediaLive restarts at the beginning of the first
       * input. When "none" is configured, MediaLive transcodes either black, a solid color, or a
       * user-specified slate images per the "Input Loss Behavior" configuration until the next input
       * switch occurs (which is controlled through the Channel Schedule API).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-globalconfiguration.html#cfn-medialive-channel-globalconfiguration-inputendaction)
       */
      override fun inputEndAction(): String? = unwrap(this).getInputEndAction()

      /**
       * The settings for system actions when the input is lost.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-globalconfiguration.html#cfn-medialive-channel-globalconfiguration-inputlossbehavior)
       */
      override fun inputLossBehavior(): Any? = unwrap(this).getInputLossBehavior()

      /**
       * Indicates how MediaLive pipelines are synchronized.
       *
       * PIPELINELOCKING - MediaLive attempts to synchronize the output of each pipeline to the
       * other. EPOCHLOCKING - MediaLive attempts to synchronize the output of each pipeline to the
       * Unix epoch.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-globalconfiguration.html#cfn-medialive-channel-globalconfiguration-outputlockingmode)
       */
      override fun outputLockingMode(): String? = unwrap(this).getOutputLockingMode()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-globalconfiguration.html#cfn-medialive-channel-globalconfiguration-outputlockingsettings)
       */
      override fun outputLockingSettings(): Any? = unwrap(this).getOutputLockingSettings()

      /**
       * Indicates whether the rate of frames emitted by the Live encoder should be paced by its
       * system clock (which optionally might be locked to another source through NTP) or should be
       * locked to the clock of the source that is providing the input stream.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-globalconfiguration.html#cfn-medialive-channel-globalconfiguration-outputtimingsource)
       */
      override fun outputTimingSource(): String? = unwrap(this).getOutputTimingSource()

      /**
       * Adjusts the video input buffer for streams with very low video frame rates.
       *
       * This is commonly set to enabled for music channels with less than one video frame per
       * second.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-globalconfiguration.html#cfn-medialive-channel-globalconfiguration-supportlowframerateinputs)
       */
      override fun supportLowFramerateInputs(): String? =
          unwrap(this).getSupportLowFramerateInputs()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): GlobalConfigurationProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.GlobalConfigurationProperty):
          GlobalConfigurationProperty = CdkObjectWrappers.wrap(cdkObject) as?
          GlobalConfigurationProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: GlobalConfigurationProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.GlobalConfigurationProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.GlobalConfigurationProperty
    }
  }

  /**
   * Settings for configuring color space in an H264 video encode.
   *
   * The parent of this entity is H264Settings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * H264ColorSpaceSettingsProperty h264ColorSpaceSettingsProperty =
   * H264ColorSpaceSettingsProperty.builder()
   * .colorSpacePassthroughSettings(ColorSpacePassthroughSettingsProperty.builder().build())
   * .rec601Settings(Rec601SettingsProperty.builder().build())
   * .rec709Settings(Rec709SettingsProperty.builder().build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264colorspacesettings.html)
   */
  public interface H264ColorSpaceSettingsProperty {
    /**
     * Passthrough applies no color space conversion to the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264colorspacesettings.html#cfn-medialive-channel-h264colorspacesettings-colorspacepassthroughsettings)
     */
    public fun colorSpacePassthroughSettings(): Any? =
        unwrap(this).getColorSpacePassthroughSettings()

    /**
     * Settings to configure the handling of Rec601 color space.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264colorspacesettings.html#cfn-medialive-channel-h264colorspacesettings-rec601settings)
     */
    public fun rec601Settings(): Any? = unwrap(this).getRec601Settings()

    /**
     * Settings to configure the handling of Rec709 color space.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264colorspacesettings.html#cfn-medialive-channel-h264colorspacesettings-rec709settings)
     */
    public fun rec709Settings(): Any? = unwrap(this).getRec709Settings()

    /**
     * A builder for [H264ColorSpaceSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param colorSpacePassthroughSettings Passthrough applies no color space conversion to the
       * output.
       */
      public fun colorSpacePassthroughSettings(colorSpacePassthroughSettings: IResolvable)

      /**
       * @param colorSpacePassthroughSettings Passthrough applies no color space conversion to the
       * output.
       */
      public
          fun colorSpacePassthroughSettings(colorSpacePassthroughSettings: ColorSpacePassthroughSettingsProperty)

      /**
       * @param colorSpacePassthroughSettings Passthrough applies no color space conversion to the
       * output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("453cd7e3dd70ab3d39b2d1a987818873b1720aea9573a51e253eda5a40b0a71c")
      public
          fun colorSpacePassthroughSettings(colorSpacePassthroughSettings: ColorSpacePassthroughSettingsProperty.Builder.() -> Unit)

      /**
       * @param rec601Settings Settings to configure the handling of Rec601 color space.
       */
      public fun rec601Settings(rec601Settings: IResolvable)

      /**
       * @param rec601Settings Settings to configure the handling of Rec601 color space.
       */
      public fun rec601Settings(rec601Settings: Rec601SettingsProperty)

      /**
       * @param rec601Settings Settings to configure the handling of Rec601 color space.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("8c3773ba753bd5a1459a519395fcda14f1a6f48030d19c071d4a7d003eba1b0c")
      public fun rec601Settings(rec601Settings: Rec601SettingsProperty.Builder.() -> Unit)

      /**
       * @param rec709Settings Settings to configure the handling of Rec709 color space.
       */
      public fun rec709Settings(rec709Settings: IResolvable)

      /**
       * @param rec709Settings Settings to configure the handling of Rec709 color space.
       */
      public fun rec709Settings(rec709Settings: Rec709SettingsProperty)

      /**
       * @param rec709Settings Settings to configure the handling of Rec709 color space.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("08b60bc9f6c9d6702c1694a28e40a608ec2b81456631dd8b5181cde7e242f35b")
      public fun rec709Settings(rec709Settings: Rec709SettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.H264ColorSpaceSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.H264ColorSpaceSettingsProperty.builder()

      /**
       * @param colorSpacePassthroughSettings Passthrough applies no color space conversion to the
       * output.
       */
      override fun colorSpacePassthroughSettings(colorSpacePassthroughSettings: IResolvable) {
        cdkBuilder.colorSpacePassthroughSettings(colorSpacePassthroughSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param colorSpacePassthroughSettings Passthrough applies no color space conversion to the
       * output.
       */
      override
          fun colorSpacePassthroughSettings(colorSpacePassthroughSettings: ColorSpacePassthroughSettingsProperty) {
        cdkBuilder.colorSpacePassthroughSettings(colorSpacePassthroughSettings.let(ColorSpacePassthroughSettingsProperty.Companion::unwrap))
      }

      /**
       * @param colorSpacePassthroughSettings Passthrough applies no color space conversion to the
       * output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("453cd7e3dd70ab3d39b2d1a987818873b1720aea9573a51e253eda5a40b0a71c")
      override
          fun colorSpacePassthroughSettings(colorSpacePassthroughSettings: ColorSpacePassthroughSettingsProperty.Builder.() -> Unit):
          Unit =
          colorSpacePassthroughSettings(ColorSpacePassthroughSettingsProperty(colorSpacePassthroughSettings))

      /**
       * @param rec601Settings Settings to configure the handling of Rec601 color space.
       */
      override fun rec601Settings(rec601Settings: IResolvable) {
        cdkBuilder.rec601Settings(rec601Settings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param rec601Settings Settings to configure the handling of Rec601 color space.
       */
      override fun rec601Settings(rec601Settings: Rec601SettingsProperty) {
        cdkBuilder.rec601Settings(rec601Settings.let(Rec601SettingsProperty.Companion::unwrap))
      }

      /**
       * @param rec601Settings Settings to configure the handling of Rec601 color space.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("8c3773ba753bd5a1459a519395fcda14f1a6f48030d19c071d4a7d003eba1b0c")
      override fun rec601Settings(rec601Settings: Rec601SettingsProperty.Builder.() -> Unit): Unit =
          rec601Settings(Rec601SettingsProperty(rec601Settings))

      /**
       * @param rec709Settings Settings to configure the handling of Rec709 color space.
       */
      override fun rec709Settings(rec709Settings: IResolvable) {
        cdkBuilder.rec709Settings(rec709Settings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param rec709Settings Settings to configure the handling of Rec709 color space.
       */
      override fun rec709Settings(rec709Settings: Rec709SettingsProperty) {
        cdkBuilder.rec709Settings(rec709Settings.let(Rec709SettingsProperty.Companion::unwrap))
      }

      /**
       * @param rec709Settings Settings to configure the handling of Rec709 color space.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("08b60bc9f6c9d6702c1694a28e40a608ec2b81456631dd8b5181cde7e242f35b")
      override fun rec709Settings(rec709Settings: Rec709SettingsProperty.Builder.() -> Unit): Unit =
          rec709Settings(Rec709SettingsProperty(rec709Settings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.H264ColorSpaceSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.H264ColorSpaceSettingsProperty,
    ) : CdkObject(cdkObject),
        H264ColorSpaceSettingsProperty {
      /**
       * Passthrough applies no color space conversion to the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264colorspacesettings.html#cfn-medialive-channel-h264colorspacesettings-colorspacepassthroughsettings)
       */
      override fun colorSpacePassthroughSettings(): Any? =
          unwrap(this).getColorSpacePassthroughSettings()

      /**
       * Settings to configure the handling of Rec601 color space.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264colorspacesettings.html#cfn-medialive-channel-h264colorspacesettings-rec601settings)
       */
      override fun rec601Settings(): Any? = unwrap(this).getRec601Settings()

      /**
       * Settings to configure the handling of Rec709 color space.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264colorspacesettings.html#cfn-medialive-channel-h264colorspacesettings-rec709settings)
       */
      override fun rec709Settings(): Any? = unwrap(this).getRec709Settings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): H264ColorSpaceSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.H264ColorSpaceSettingsProperty):
          H264ColorSpaceSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          H264ColorSpaceSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: H264ColorSpaceSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.H264ColorSpaceSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.H264ColorSpaceSettingsProperty
    }
  }

  /**
   * Settings to configure video filters that apply to the H264 codec.
   *
   * The parent of this entity is H264Settings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * H264FilterSettingsProperty h264FilterSettingsProperty = H264FilterSettingsProperty.builder()
   * .temporalFilterSettings(TemporalFilterSettingsProperty.builder()
   * .postFilterSharpening("postFilterSharpening")
   * .strength("strength")
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264filtersettings.html)
   */
  public interface H264FilterSettingsProperty {
    /**
     * Settings for applying the temporal filter to the video.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264filtersettings.html#cfn-medialive-channel-h264filtersettings-temporalfiltersettings)
     */
    public fun temporalFilterSettings(): Any? = unwrap(this).getTemporalFilterSettings()

    /**
     * A builder for [H264FilterSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param temporalFilterSettings Settings for applying the temporal filter to the video.
       */
      public fun temporalFilterSettings(temporalFilterSettings: IResolvable)

      /**
       * @param temporalFilterSettings Settings for applying the temporal filter to the video.
       */
      public fun temporalFilterSettings(temporalFilterSettings: TemporalFilterSettingsProperty)

      /**
       * @param temporalFilterSettings Settings for applying the temporal filter to the video.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("138f62dfbe2b2497cceee7f1ce656cf2de46835f66910fba26851abde99311b8")
      public
          fun temporalFilterSettings(temporalFilterSettings: TemporalFilterSettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.H264FilterSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.H264FilterSettingsProperty.builder()

      /**
       * @param temporalFilterSettings Settings for applying the temporal filter to the video.
       */
      override fun temporalFilterSettings(temporalFilterSettings: IResolvable) {
        cdkBuilder.temporalFilterSettings(temporalFilterSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param temporalFilterSettings Settings for applying the temporal filter to the video.
       */
      override fun temporalFilterSettings(temporalFilterSettings: TemporalFilterSettingsProperty) {
        cdkBuilder.temporalFilterSettings(temporalFilterSettings.let(TemporalFilterSettingsProperty.Companion::unwrap))
      }

      /**
       * @param temporalFilterSettings Settings for applying the temporal filter to the video.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("138f62dfbe2b2497cceee7f1ce656cf2de46835f66910fba26851abde99311b8")
      override
          fun temporalFilterSettings(temporalFilterSettings: TemporalFilterSettingsProperty.Builder.() -> Unit):
          Unit = temporalFilterSettings(TemporalFilterSettingsProperty(temporalFilterSettings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.H264FilterSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.H264FilterSettingsProperty,
    ) : CdkObject(cdkObject),
        H264FilterSettingsProperty {
      /**
       * Settings for applying the temporal filter to the video.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264filtersettings.html#cfn-medialive-channel-h264filtersettings-temporalfiltersettings)
       */
      override fun temporalFilterSettings(): Any? = unwrap(this).getTemporalFilterSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): H264FilterSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.H264FilterSettingsProperty):
          H264FilterSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          H264FilterSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: H264FilterSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.H264FilterSettingsProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.H264FilterSettingsProperty
    }
  }

  /**
   * The settings for the H.264 codec in the output.
   *
   * The parent of this entity is VideoCodecSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * H264SettingsProperty h264SettingsProperty = H264SettingsProperty.builder()
   * .adaptiveQuantization("adaptiveQuantization")
   * .afdSignaling("afdSignaling")
   * .bitrate(123)
   * .bufFillPct(123)
   * .bufSize(123)
   * .colorMetadata("colorMetadata")
   * .colorSpaceSettings(H264ColorSpaceSettingsProperty.builder()
   * .colorSpacePassthroughSettings(ColorSpacePassthroughSettingsProperty.builder().build())
   * .rec601Settings(Rec601SettingsProperty.builder().build())
   * .rec709Settings(Rec709SettingsProperty.builder().build())
   * .build())
   * .entropyEncoding("entropyEncoding")
   * .filterSettings(H264FilterSettingsProperty.builder()
   * .temporalFilterSettings(TemporalFilterSettingsProperty.builder()
   * .postFilterSharpening("postFilterSharpening")
   * .strength("strength")
   * .build())
   * .build())
   * .fixedAfd("fixedAfd")
   * .flickerAq("flickerAq")
   * .forceFieldPictures("forceFieldPictures")
   * .framerateControl("framerateControl")
   * .framerateDenominator(123)
   * .framerateNumerator(123)
   * .gopBReference("gopBReference")
   * .gopClosedCadence(123)
   * .gopNumBFrames(123)
   * .gopSize(123)
   * .gopSizeUnits("gopSizeUnits")
   * .level("level")
   * .lookAheadRateControl("lookAheadRateControl")
   * .maxBitrate(123)
   * .minIInterval(123)
   * .numRefFrames(123)
   * .parControl("parControl")
   * .parDenominator(123)
   * .parNumerator(123)
   * .profile("profile")
   * .qualityLevel("qualityLevel")
   * .qvbrQualityLevel(123)
   * .rateControlMode("rateControlMode")
   * .scanType("scanType")
   * .sceneChangeDetect("sceneChangeDetect")
   * .slices(123)
   * .softness(123)
   * .spatialAq("spatialAq")
   * .subgopLength("subgopLength")
   * .syntax("syntax")
   * .temporalAq("temporalAq")
   * .timecodeBurninSettings(TimecodeBurninSettingsProperty.builder()
   * .fontSize("fontSize")
   * .position("position")
   * .prefix("prefix")
   * .build())
   * .timecodeInsertion("timecodeInsertion")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html)
   */
  public interface H264SettingsProperty {
    /**
     * The adaptive quantization.
     *
     * This allows intra-frame quantizers to vary to improve visual quality.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-adaptivequantization)
     */
    public fun adaptiveQuantization(): String? = unwrap(this).getAdaptiveQuantization()

    /**
     * Indicates that AFD values will be written into the output stream.
     *
     * If afdSignaling is auto, the system tries to preserve the input AFD value (in cases where
     * multiple AFD values are valid). If set to fixed, the AFD value is the value configured in the
     * fixedAfd parameter.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-afdsignaling)
     */
    public fun afdSignaling(): String? = unwrap(this).getAfdSignaling()

    /**
     * The average bitrate in bits/second.
     *
     * This is required when the rate control mode is VBR or CBR. It isn't used for QVBR. In a
     * Microsoft Smooth output group, each output must have a unique value when its bitrate is rounded
     * down to the nearest multiple of 1000.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-bitrate)
     */
    public fun bitrate(): Number? = unwrap(this).getBitrate()

    /**
     * The percentage of the buffer that should initially be filled (HRD buffer model).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-buffillpct)
     */
    public fun bufFillPct(): Number? = unwrap(this).getBufFillPct()

    /**
     * The size of the buffer (HRD buffer model) in bits/second.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-bufsize)
     */
    public fun bufSize(): Number? = unwrap(this).getBufSize()

    /**
     * Includes color space metadata in the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-colormetadata)
     */
    public fun colorMetadata(): String? = unwrap(this).getColorMetadata()

    /**
     * Settings to configure the color space handling for the video.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-colorspacesettings)
     */
    public fun colorSpaceSettings(): Any? = unwrap(this).getColorSpaceSettings()

    /**
     * The entropy encoding mode.
     *
     * Use cabac (must be in Main or High profile) or cavlc.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-entropyencoding)
     */
    public fun entropyEncoding(): String? = unwrap(this).getEntropyEncoding()

    /**
     * Optional filters that you can apply to an encode.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-filtersettings)
     */
    public fun filterSettings(): Any? = unwrap(this).getFilterSettings()

    /**
     * A four-bit AFD value to write on all frames of video in the output stream.
     *
     * Valid only when afdSignaling is set to Fixed.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-fixedafd)
     */
    public fun fixedAfd(): String? = unwrap(this).getFixedAfd()

    /**
     * If set to enabled, adjusts the quantization within each frame to reduce flicker or pop on
     * I-frames.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-flickeraq)
     */
    public fun flickerAq(): String? = unwrap(this).getFlickerAq()

    /**
     * This setting applies only when scan type is "interlaced." It controls whether coding is
     * performed on a field basis or on a frame basis. (When the video is progressive, the coding is
     * always performed on a frame basis.) enabled: Force MediaLive to code on a field basis, so that
     * odd and even sets of fields are coded separately. disabled: Code the two sets of fields
     * separately (on a field basis) or together (on a frame basis using PAFF), depending on what is
     * most appropriate for the content.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-forcefieldpictures)
     */
    public fun forceFieldPictures(): String? = unwrap(this).getForceFieldPictures()

    /**
     * Indicates how the output video frame rate is specified.
     *
     * If you select "specified," the output video frame rate is determined by framerateNumerator
     * and framerateDenominator. If you select "initializeFromSource," the output video frame rate is
     * set equal to the input video frame rate of the first input.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-frameratecontrol)
     */
    public fun framerateControl(): String? = unwrap(this).getFramerateControl()

    /**
     * The frame rate denominator.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-frameratedenominator)
     */
    public fun framerateDenominator(): Number? = unwrap(this).getFramerateDenominator()

    /**
     * The frame rate numerator.
     *
     * The frame rate is a fraction, for example, 24000/1001 = 23.976 fps.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-frameratenumerator)
     */
    public fun framerateNumerator(): Number? = unwrap(this).getFramerateNumerator()

    /**
     * If enabled, uses reference B frames for GOP structures that have B frames > 1.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-gopbreference)
     */
    public fun gopBReference(): String? = unwrap(this).getGopBReference()

    /**
     * The frequency of closed GOPs.
     *
     * In streaming applications, we recommend that you set this to 1 so that a decoder joining
     * mid-stream will receive an IDR frame as quickly as possible. Setting this value to 0 will break
     * output segmenting.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-gopclosedcadence)
     */
    public fun gopClosedCadence(): Number? = unwrap(this).getGopClosedCadence()

    /**
     * The number of B-frames between reference frames.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-gopnumbframes)
     */
    public fun gopNumBFrames(): Number? = unwrap(this).getGopNumBFrames()

    /**
     * The GOP size (keyframe interval) in units of either frames or seconds per gopSizeUnits.
     *
     * The value must be greater than zero.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-gopsize)
     */
    public fun gopSize(): Number? = unwrap(this).getGopSize()

    /**
     * Indicates if the gopSize is specified in frames or seconds.
     *
     * If seconds, the system converts the gopSize into a frame count at runtime.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-gopsizeunits)
     */
    public fun gopSizeUnits(): String? = unwrap(this).getGopSizeUnits()

    /**
     * The H.264 level.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-level)
     */
    public fun level(): String? = unwrap(this).getLevel()

    /**
     * The amount of lookahead.
     *
     * A value of low can decrease latency and memory usage, while high can produce better quality
     * for certain content.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-lookaheadratecontrol)
     */
    public fun lookAheadRateControl(): String? = unwrap(this).getLookAheadRateControl()

    /**
     * For QVBR: See the tooltip for Quality level.
     *
     * For VBR: Set the maximum bitrate in order to accommodate expected spikes in the complexity of
     * the video.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-maxbitrate)
     */
    public fun maxBitrate(): Number? = unwrap(this).getMaxBitrate()

    /**
     * Meaningful only if sceneChangeDetect is set to enabled.
     *
     * This setting enforces separation between repeated (cadence) I-frames and I-frames inserted by
     * Scene Change Detection. If a scene change I-frame is within I-interval frames of a cadence
     * I-frame, the GOP is shrunk or stretched to the scene change I-frame. GOP stretch requires
     * enabling lookahead as well as setting the I-interval. The normal cadence resumes for the next
     * GOP. Note that the maximum GOP stretch = GOP size + Min-I-interval - 1.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-miniinterval)
     */
    public fun minIInterval(): Number? = unwrap(this).getMinIInterval()

    /**
     * The number of reference frames to use.
     *
     * The encoder might use more than requested if you use B-frames or interlaced encoding.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-numrefframes)
     */
    public fun numRefFrames(): Number? = unwrap(this).getNumRefFrames()

    /**
     * Indicates how the output pixel aspect ratio is specified.
     *
     * If "specified" is selected, the output video pixel aspect ratio is determined by parNumerator
     * and parDenominator. If "initializeFromSource" is selected, the output pixels aspect ratio will
     * be set equal to the input video pixel aspect ratio of the first input.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-parcontrol)
     */
    public fun parControl(): String? = unwrap(this).getParControl()

    /**
     * The Pixel Aspect Ratio denominator.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-pardenominator)
     */
    public fun parDenominator(): Number? = unwrap(this).getParDenominator()

    /**
     * The Pixel Aspect Ratio numerator.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-parnumerator)
     */
    public fun parNumerator(): Number? = unwrap(this).getParNumerator()

    /**
     * An H.264 profile.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-profile)
     */
    public fun profile(): String? = unwrap(this).getProfile()

    /**
     * Leave as STANDARD_QUALITY or choose a different value (which might result in additional costs
     * to run the channel).
     *
     * * ENHANCED_QUALITY: Produces a slightly better video quality without an increase in the
     * bitrate. Has an effect only when the Rate control mode is QVBR or CBR. If this channel is in a
     * MediaLive multiplex, the value must be ENHANCED_QUALITY.
     * * STANDARD_QUALITY: Valid for any Rate control mode.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-qualitylevel)
     */
    public fun qualityLevel(): String? = unwrap(this).getQualityLevel()

    /**
     * Controls the target quality for the video encode.
     *
     * This applies only when the rate control mode is QVBR. Set values for the QVBR quality level
     * field and Max bitrate field that suit your most important viewing devices. Recommended values
     * are: - Primary screen: Quality level: 8 to 10. Max bitrate: 4M - PC or tablet: Quality level: 7.
     * Max bitrate: 1.5M to 3M - Smartphone: Quality level: 6. Max bitrate: 1M to 1.5M.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-qvbrqualitylevel)
     */
    public fun qvbrQualityLevel(): Number? = unwrap(this).getQvbrQualityLevel()

    /**
     * The rate control mode.
     *
     * QVBR: The quality will match the specified quality level except when it is constrained by the
     * maximum bitrate. We recommend this if you or your viewers pay for bandwidth. VBR: The quality
     * and bitrate vary, depending on the video complexity. We recommend this instead of QVBR if you
     * want to maintain a specific average bitrate over the duration of the channel. CBR: The quality
     * varies, depending on the video complexity. We recommend this only if you distribute your assets
     * to devices that can't handle variable bitrates.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-ratecontrolmode)
     */
    public fun rateControlMode(): String? = unwrap(this).getRateControlMode()

    /**
     * Sets the scan type of the output to progressive or top-field-first interlaced.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-scantype)
     */
    public fun scanType(): String? = unwrap(this).getScanType()

    /**
     * The scene change detection.
     *
     * On: inserts I-frames when the scene change is detected. Off: does not force an I-frame when
     * the scene change is detected.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-scenechangedetect)
     */
    public fun sceneChangeDetect(): String? = unwrap(this).getSceneChangeDetect()

    /**
     * The number of slices per picture.
     *
     * The number must be less than or equal to the number of macroblock rows for progressive
     * pictures, and less than or equal to half the number of macroblock rows for interlaced pictures.
     * This field is optional. If you don't specify a value, MediaLive chooses the number of slices
     * based on the encode resolution.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-slices)
     */
    public fun slices(): Number? = unwrap(this).getSlices()

    /**
     * Softness.
     *
     * Selects a quantizer matrix. Larger values reduce high-frequency content in the encoded image.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-softness)
     */
    public fun softness(): Number? = unwrap(this).getSoftness()

    /**
     * If set to enabled, adjusts quantization within each frame based on the spatial variation of
     * content complexity.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-spatialaq)
     */
    public fun spatialAq(): String? = unwrap(this).getSpatialAq()

    /**
     * If set to fixed, uses gopNumBFrames B-frames per sub-GOP.
     *
     * If set to dynamic, optimizes the number of B-frames used for each sub-GOP to improve visual
     * quality.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-subgoplength)
     */
    public fun subgopLength(): String? = unwrap(this).getSubgopLength()

    /**
     * Produces a bitstream that is compliant with SMPTE RP-2027.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-syntax)
     */
    public fun syntax(): String? = unwrap(this).getSyntax()

    /**
     * If set to enabled, adjusts quantization within each frame based on the temporal variation of
     * content complexity.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-temporalaq)
     */
    public fun temporalAq(): String? = unwrap(this).getTemporalAq()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-timecodeburninsettings)
     */
    public fun timecodeBurninSettings(): Any? = unwrap(this).getTimecodeBurninSettings()

    /**
     * Determines how timecodes should be inserted into the video elementary stream.
     *
     * disabled: don't include timecodes. picTimingSei: pass through picture timing SEI messages
     * from the source specified in Timecode Config.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-timecodeinsertion)
     */
    public fun timecodeInsertion(): String? = unwrap(this).getTimecodeInsertion()

    /**
     * A builder for [H264SettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param adaptiveQuantization The adaptive quantization.
       * This allows intra-frame quantizers to vary to improve visual quality.
       */
      public fun adaptiveQuantization(adaptiveQuantization: String)

      /**
       * @param afdSignaling Indicates that AFD values will be written into the output stream.
       * If afdSignaling is auto, the system tries to preserve the input AFD value (in cases where
       * multiple AFD values are valid). If set to fixed, the AFD value is the value configured in the
       * fixedAfd parameter.
       */
      public fun afdSignaling(afdSignaling: String)

      /**
       * @param bitrate The average bitrate in bits/second.
       * This is required when the rate control mode is VBR or CBR. It isn't used for QVBR. In a
       * Microsoft Smooth output group, each output must have a unique value when its bitrate is
       * rounded down to the nearest multiple of 1000.
       */
      public fun bitrate(bitrate: Number)

      /**
       * @param bufFillPct The percentage of the buffer that should initially be filled (HRD buffer
       * model).
       */
      public fun bufFillPct(bufFillPct: Number)

      /**
       * @param bufSize The size of the buffer (HRD buffer model) in bits/second.
       */
      public fun bufSize(bufSize: Number)

      /**
       * @param colorMetadata Includes color space metadata in the output.
       */
      public fun colorMetadata(colorMetadata: String)

      /**
       * @param colorSpaceSettings Settings to configure the color space handling for the video.
       */
      public fun colorSpaceSettings(colorSpaceSettings: IResolvable)

      /**
       * @param colorSpaceSettings Settings to configure the color space handling for the video.
       */
      public fun colorSpaceSettings(colorSpaceSettings: H264ColorSpaceSettingsProperty)

      /**
       * @param colorSpaceSettings Settings to configure the color space handling for the video.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("040b672b23dcea5b979db503894f0422badeb4a70de1aeaba3c8dba1414d4cd2")
      public
          fun colorSpaceSettings(colorSpaceSettings: H264ColorSpaceSettingsProperty.Builder.() -> Unit)

      /**
       * @param entropyEncoding The entropy encoding mode.
       * Use cabac (must be in Main or High profile) or cavlc.
       */
      public fun entropyEncoding(entropyEncoding: String)

      /**
       * @param filterSettings Optional filters that you can apply to an encode.
       */
      public fun filterSettings(filterSettings: IResolvable)

      /**
       * @param filterSettings Optional filters that you can apply to an encode.
       */
      public fun filterSettings(filterSettings: H264FilterSettingsProperty)

      /**
       * @param filterSettings Optional filters that you can apply to an encode.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("d4784a9e838832f79036b52ca493da9f3be2549c718a2984878f69785abd6c8b")
      public fun filterSettings(filterSettings: H264FilterSettingsProperty.Builder.() -> Unit)

      /**
       * @param fixedAfd A four-bit AFD value to write on all frames of video in the output stream.
       * Valid only when afdSignaling is set to Fixed.
       */
      public fun fixedAfd(fixedAfd: String)

      /**
       * @param flickerAq If set to enabled, adjusts the quantization within each frame to reduce
       * flicker or pop on I-frames.
       */
      public fun flickerAq(flickerAq: String)

      /**
       * @param forceFieldPictures This setting applies only when scan type is "interlaced." It
       * controls whether coding is performed on a field basis or on a frame basis. (When the video is
       * progressive, the coding is always performed on a frame basis.) enabled: Force MediaLive to
       * code on a field basis, so that odd and even sets of fields are coded separately. disabled:
       * Code the two sets of fields separately (on a field basis) or together (on a frame basis using
       * PAFF), depending on what is most appropriate for the content.
       */
      public fun forceFieldPictures(forceFieldPictures: String)

      /**
       * @param framerateControl Indicates how the output video frame rate is specified.
       * If you select "specified," the output video frame rate is determined by framerateNumerator
       * and framerateDenominator. If you select "initializeFromSource," the output video frame rate is
       * set equal to the input video frame rate of the first input.
       */
      public fun framerateControl(framerateControl: String)

      /**
       * @param framerateDenominator The frame rate denominator.
       */
      public fun framerateDenominator(framerateDenominator: Number)

      /**
       * @param framerateNumerator The frame rate numerator.
       * The frame rate is a fraction, for example, 24000/1001 = 23.976 fps.
       */
      public fun framerateNumerator(framerateNumerator: Number)

      /**
       * @param gopBReference If enabled, uses reference B frames for GOP structures that have B
       * frames > 1.
       */
      public fun gopBReference(gopBReference: String)

      /**
       * @param gopClosedCadence The frequency of closed GOPs.
       * In streaming applications, we recommend that you set this to 1 so that a decoder joining
       * mid-stream will receive an IDR frame as quickly as possible. Setting this value to 0 will
       * break output segmenting.
       */
      public fun gopClosedCadence(gopClosedCadence: Number)

      /**
       * @param gopNumBFrames The number of B-frames between reference frames.
       */
      public fun gopNumBFrames(gopNumBFrames: Number)

      /**
       * @param gopSize The GOP size (keyframe interval) in units of either frames or seconds per
       * gopSizeUnits.
       * The value must be greater than zero.
       */
      public fun gopSize(gopSize: Number)

      /**
       * @param gopSizeUnits Indicates if the gopSize is specified in frames or seconds.
       * If seconds, the system converts the gopSize into a frame count at runtime.
       */
      public fun gopSizeUnits(gopSizeUnits: String)

      /**
       * @param level The H.264 level.
       */
      public fun level(level: String)

      /**
       * @param lookAheadRateControl The amount of lookahead.
       * A value of low can decrease latency and memory usage, while high can produce better quality
       * for certain content.
       */
      public fun lookAheadRateControl(lookAheadRateControl: String)

      /**
       * @param maxBitrate For QVBR: See the tooltip for Quality level.
       * For VBR: Set the maximum bitrate in order to accommodate expected spikes in the complexity
       * of the video.
       */
      public fun maxBitrate(maxBitrate: Number)

      /**
       * @param minIInterval Meaningful only if sceneChangeDetect is set to enabled.
       * This setting enforces separation between repeated (cadence) I-frames and I-frames inserted
       * by Scene Change Detection. If a scene change I-frame is within I-interval frames of a cadence
       * I-frame, the GOP is shrunk or stretched to the scene change I-frame. GOP stretch requires
       * enabling lookahead as well as setting the I-interval. The normal cadence resumes for the next
       * GOP. Note that the maximum GOP stretch = GOP size + Min-I-interval - 1.
       */
      public fun minIInterval(minIInterval: Number)

      /**
       * @param numRefFrames The number of reference frames to use.
       * The encoder might use more than requested if you use B-frames or interlaced encoding.
       */
      public fun numRefFrames(numRefFrames: Number)

      /**
       * @param parControl Indicates how the output pixel aspect ratio is specified.
       * If "specified" is selected, the output video pixel aspect ratio is determined by
       * parNumerator and parDenominator. If "initializeFromSource" is selected, the output pixels
       * aspect ratio will be set equal to the input video pixel aspect ratio of the first input.
       */
      public fun parControl(parControl: String)

      /**
       * @param parDenominator The Pixel Aspect Ratio denominator.
       */
      public fun parDenominator(parDenominator: Number)

      /**
       * @param parNumerator The Pixel Aspect Ratio numerator.
       */
      public fun parNumerator(parNumerator: Number)

      /**
       * @param profile An H.264 profile.
       */
      public fun profile(profile: String)

      /**
       * @param qualityLevel Leave as STANDARD_QUALITY or choose a different value (which might
       * result in additional costs to run the channel).
       * * ENHANCED_QUALITY: Produces a slightly better video quality without an increase in the
       * bitrate. Has an effect only when the Rate control mode is QVBR or CBR. If this channel is in a
       * MediaLive multiplex, the value must be ENHANCED_QUALITY.
       * * STANDARD_QUALITY: Valid for any Rate control mode.
       */
      public fun qualityLevel(qualityLevel: String)

      /**
       * @param qvbrQualityLevel Controls the target quality for the video encode.
       * This applies only when the rate control mode is QVBR. Set values for the QVBR quality level
       * field and Max bitrate field that suit your most important viewing devices. Recommended values
       * are: - Primary screen: Quality level: 8 to 10. Max bitrate: 4M - PC or tablet: Quality level:
       * 7. Max bitrate: 1.5M to 3M - Smartphone: Quality level: 6. Max bitrate: 1M to 1.5M.
       */
      public fun qvbrQualityLevel(qvbrQualityLevel: Number)

      /**
       * @param rateControlMode The rate control mode.
       * QVBR: The quality will match the specified quality level except when it is constrained by
       * the maximum bitrate. We recommend this if you or your viewers pay for bandwidth. VBR: The
       * quality and bitrate vary, depending on the video complexity. We recommend this instead of QVBR
       * if you want to maintain a specific average bitrate over the duration of the channel. CBR: The
       * quality varies, depending on the video complexity. We recommend this only if you distribute
       * your assets to devices that can't handle variable bitrates.
       */
      public fun rateControlMode(rateControlMode: String)

      /**
       * @param scanType Sets the scan type of the output to progressive or top-field-first
       * interlaced.
       */
      public fun scanType(scanType: String)

      /**
       * @param sceneChangeDetect The scene change detection.
       * On: inserts I-frames when the scene change is detected. Off: does not force an I-frame when
       * the scene change is detected.
       */
      public fun sceneChangeDetect(sceneChangeDetect: String)

      /**
       * @param slices The number of slices per picture.
       * The number must be less than or equal to the number of macroblock rows for progressive
       * pictures, and less than or equal to half the number of macroblock rows for interlaced
       * pictures. This field is optional. If you don't specify a value, MediaLive chooses the number
       * of slices based on the encode resolution.
       */
      public fun slices(slices: Number)

      /**
       * @param softness Softness.
       * Selects a quantizer matrix. Larger values reduce high-frequency content in the encoded
       * image.
       */
      public fun softness(softness: Number)

      /**
       * @param spatialAq If set to enabled, adjusts quantization within each frame based on the
       * spatial variation of content complexity.
       */
      public fun spatialAq(spatialAq: String)

      /**
       * @param subgopLength If set to fixed, uses gopNumBFrames B-frames per sub-GOP.
       * If set to dynamic, optimizes the number of B-frames used for each sub-GOP to improve visual
       * quality.
       */
      public fun subgopLength(subgopLength: String)

      /**
       * @param syntax Produces a bitstream that is compliant with SMPTE RP-2027.
       */
      public fun syntax(syntax: String)

      /**
       * @param temporalAq If set to enabled, adjusts quantization within each frame based on the
       * temporal variation of content complexity.
       */
      public fun temporalAq(temporalAq: String)

      /**
       * @param timecodeBurninSettings the value to be set.
       */
      public fun timecodeBurninSettings(timecodeBurninSettings: IResolvable)

      /**
       * @param timecodeBurninSettings the value to be set.
       */
      public fun timecodeBurninSettings(timecodeBurninSettings: TimecodeBurninSettingsProperty)

      /**
       * @param timecodeBurninSettings the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("62643fd88f34450bd48fc495cc91e3e5239fc404fc1f3ed5e8679376335b6a45")
      public
          fun timecodeBurninSettings(timecodeBurninSettings: TimecodeBurninSettingsProperty.Builder.() -> Unit)

      /**
       * @param timecodeInsertion Determines how timecodes should be inserted into the video
       * elementary stream.
       * disabled: don't include timecodes. picTimingSei: pass through picture timing SEI messages
       * from the source specified in Timecode Config.
       */
      public fun timecodeInsertion(timecodeInsertion: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.H264SettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.H264SettingsProperty.builder()

      /**
       * @param adaptiveQuantization The adaptive quantization.
       * This allows intra-frame quantizers to vary to improve visual quality.
       */
      override fun adaptiveQuantization(adaptiveQuantization: String) {
        cdkBuilder.adaptiveQuantization(adaptiveQuantization)
      }

      /**
       * @param afdSignaling Indicates that AFD values will be written into the output stream.
       * If afdSignaling is auto, the system tries to preserve the input AFD value (in cases where
       * multiple AFD values are valid). If set to fixed, the AFD value is the value configured in the
       * fixedAfd parameter.
       */
      override fun afdSignaling(afdSignaling: String) {
        cdkBuilder.afdSignaling(afdSignaling)
      }

      /**
       * @param bitrate The average bitrate in bits/second.
       * This is required when the rate control mode is VBR or CBR. It isn't used for QVBR. In a
       * Microsoft Smooth output group, each output must have a unique value when its bitrate is
       * rounded down to the nearest multiple of 1000.
       */
      override fun bitrate(bitrate: Number) {
        cdkBuilder.bitrate(bitrate)
      }

      /**
       * @param bufFillPct The percentage of the buffer that should initially be filled (HRD buffer
       * model).
       */
      override fun bufFillPct(bufFillPct: Number) {
        cdkBuilder.bufFillPct(bufFillPct)
      }

      /**
       * @param bufSize The size of the buffer (HRD buffer model) in bits/second.
       */
      override fun bufSize(bufSize: Number) {
        cdkBuilder.bufSize(bufSize)
      }

      /**
       * @param colorMetadata Includes color space metadata in the output.
       */
      override fun colorMetadata(colorMetadata: String) {
        cdkBuilder.colorMetadata(colorMetadata)
      }

      /**
       * @param colorSpaceSettings Settings to configure the color space handling for the video.
       */
      override fun colorSpaceSettings(colorSpaceSettings: IResolvable) {
        cdkBuilder.colorSpaceSettings(colorSpaceSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param colorSpaceSettings Settings to configure the color space handling for the video.
       */
      override fun colorSpaceSettings(colorSpaceSettings: H264ColorSpaceSettingsProperty) {
        cdkBuilder.colorSpaceSettings(colorSpaceSettings.let(H264ColorSpaceSettingsProperty.Companion::unwrap))
      }

      /**
       * @param colorSpaceSettings Settings to configure the color space handling for the video.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("040b672b23dcea5b979db503894f0422badeb4a70de1aeaba3c8dba1414d4cd2")
      override
          fun colorSpaceSettings(colorSpaceSettings: H264ColorSpaceSettingsProperty.Builder.() -> Unit):
          Unit = colorSpaceSettings(H264ColorSpaceSettingsProperty(colorSpaceSettings))

      /**
       * @param entropyEncoding The entropy encoding mode.
       * Use cabac (must be in Main or High profile) or cavlc.
       */
      override fun entropyEncoding(entropyEncoding: String) {
        cdkBuilder.entropyEncoding(entropyEncoding)
      }

      /**
       * @param filterSettings Optional filters that you can apply to an encode.
       */
      override fun filterSettings(filterSettings: IResolvable) {
        cdkBuilder.filterSettings(filterSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param filterSettings Optional filters that you can apply to an encode.
       */
      override fun filterSettings(filterSettings: H264FilterSettingsProperty) {
        cdkBuilder.filterSettings(filterSettings.let(H264FilterSettingsProperty.Companion::unwrap))
      }

      /**
       * @param filterSettings Optional filters that you can apply to an encode.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("d4784a9e838832f79036b52ca493da9f3be2549c718a2984878f69785abd6c8b")
      override fun filterSettings(filterSettings: H264FilterSettingsProperty.Builder.() -> Unit):
          Unit = filterSettings(H264FilterSettingsProperty(filterSettings))

      /**
       * @param fixedAfd A four-bit AFD value to write on all frames of video in the output stream.
       * Valid only when afdSignaling is set to Fixed.
       */
      override fun fixedAfd(fixedAfd: String) {
        cdkBuilder.fixedAfd(fixedAfd)
      }

      /**
       * @param flickerAq If set to enabled, adjusts the quantization within each frame to reduce
       * flicker or pop on I-frames.
       */
      override fun flickerAq(flickerAq: String) {
        cdkBuilder.flickerAq(flickerAq)
      }

      /**
       * @param forceFieldPictures This setting applies only when scan type is "interlaced." It
       * controls whether coding is performed on a field basis or on a frame basis. (When the video is
       * progressive, the coding is always performed on a frame basis.) enabled: Force MediaLive to
       * code on a field basis, so that odd and even sets of fields are coded separately. disabled:
       * Code the two sets of fields separately (on a field basis) or together (on a frame basis using
       * PAFF), depending on what is most appropriate for the content.
       */
      override fun forceFieldPictures(forceFieldPictures: String) {
        cdkBuilder.forceFieldPictures(forceFieldPictures)
      }

      /**
       * @param framerateControl Indicates how the output video frame rate is specified.
       * If you select "specified," the output video frame rate is determined by framerateNumerator
       * and framerateDenominator. If you select "initializeFromSource," the output video frame rate is
       * set equal to the input video frame rate of the first input.
       */
      override fun framerateControl(framerateControl: String) {
        cdkBuilder.framerateControl(framerateControl)
      }

      /**
       * @param framerateDenominator The frame rate denominator.
       */
      override fun framerateDenominator(framerateDenominator: Number) {
        cdkBuilder.framerateDenominator(framerateDenominator)
      }

      /**
       * @param framerateNumerator The frame rate numerator.
       * The frame rate is a fraction, for example, 24000/1001 = 23.976 fps.
       */
      override fun framerateNumerator(framerateNumerator: Number) {
        cdkBuilder.framerateNumerator(framerateNumerator)
      }

      /**
       * @param gopBReference If enabled, uses reference B frames for GOP structures that have B
       * frames > 1.
       */
      override fun gopBReference(gopBReference: String) {
        cdkBuilder.gopBReference(gopBReference)
      }

      /**
       * @param gopClosedCadence The frequency of closed GOPs.
       * In streaming applications, we recommend that you set this to 1 so that a decoder joining
       * mid-stream will receive an IDR frame as quickly as possible. Setting this value to 0 will
       * break output segmenting.
       */
      override fun gopClosedCadence(gopClosedCadence: Number) {
        cdkBuilder.gopClosedCadence(gopClosedCadence)
      }

      /**
       * @param gopNumBFrames The number of B-frames between reference frames.
       */
      override fun gopNumBFrames(gopNumBFrames: Number) {
        cdkBuilder.gopNumBFrames(gopNumBFrames)
      }

      /**
       * @param gopSize The GOP size (keyframe interval) in units of either frames or seconds per
       * gopSizeUnits.
       * The value must be greater than zero.
       */
      override fun gopSize(gopSize: Number) {
        cdkBuilder.gopSize(gopSize)
      }

      /**
       * @param gopSizeUnits Indicates if the gopSize is specified in frames or seconds.
       * If seconds, the system converts the gopSize into a frame count at runtime.
       */
      override fun gopSizeUnits(gopSizeUnits: String) {
        cdkBuilder.gopSizeUnits(gopSizeUnits)
      }

      /**
       * @param level The H.264 level.
       */
      override fun level(level: String) {
        cdkBuilder.level(level)
      }

      /**
       * @param lookAheadRateControl The amount of lookahead.
       * A value of low can decrease latency and memory usage, while high can produce better quality
       * for certain content.
       */
      override fun lookAheadRateControl(lookAheadRateControl: String) {
        cdkBuilder.lookAheadRateControl(lookAheadRateControl)
      }

      /**
       * @param maxBitrate For QVBR: See the tooltip for Quality level.
       * For VBR: Set the maximum bitrate in order to accommodate expected spikes in the complexity
       * of the video.
       */
      override fun maxBitrate(maxBitrate: Number) {
        cdkBuilder.maxBitrate(maxBitrate)
      }

      /**
       * @param minIInterval Meaningful only if sceneChangeDetect is set to enabled.
       * This setting enforces separation between repeated (cadence) I-frames and I-frames inserted
       * by Scene Change Detection. If a scene change I-frame is within I-interval frames of a cadence
       * I-frame, the GOP is shrunk or stretched to the scene change I-frame. GOP stretch requires
       * enabling lookahead as well as setting the I-interval. The normal cadence resumes for the next
       * GOP. Note that the maximum GOP stretch = GOP size + Min-I-interval - 1.
       */
      override fun minIInterval(minIInterval: Number) {
        cdkBuilder.minIInterval(minIInterval)
      }

      /**
       * @param numRefFrames The number of reference frames to use.
       * The encoder might use more than requested if you use B-frames or interlaced encoding.
       */
      override fun numRefFrames(numRefFrames: Number) {
        cdkBuilder.numRefFrames(numRefFrames)
      }

      /**
       * @param parControl Indicates how the output pixel aspect ratio is specified.
       * If "specified" is selected, the output video pixel aspect ratio is determined by
       * parNumerator and parDenominator. If "initializeFromSource" is selected, the output pixels
       * aspect ratio will be set equal to the input video pixel aspect ratio of the first input.
       */
      override fun parControl(parControl: String) {
        cdkBuilder.parControl(parControl)
      }

      /**
       * @param parDenominator The Pixel Aspect Ratio denominator.
       */
      override fun parDenominator(parDenominator: Number) {
        cdkBuilder.parDenominator(parDenominator)
      }

      /**
       * @param parNumerator The Pixel Aspect Ratio numerator.
       */
      override fun parNumerator(parNumerator: Number) {
        cdkBuilder.parNumerator(parNumerator)
      }

      /**
       * @param profile An H.264 profile.
       */
      override fun profile(profile: String) {
        cdkBuilder.profile(profile)
      }

      /**
       * @param qualityLevel Leave as STANDARD_QUALITY or choose a different value (which might
       * result in additional costs to run the channel).
       * * ENHANCED_QUALITY: Produces a slightly better video quality without an increase in the
       * bitrate. Has an effect only when the Rate control mode is QVBR or CBR. If this channel is in a
       * MediaLive multiplex, the value must be ENHANCED_QUALITY.
       * * STANDARD_QUALITY: Valid for any Rate control mode.
       */
      override fun qualityLevel(qualityLevel: String) {
        cdkBuilder.qualityLevel(qualityLevel)
      }

      /**
       * @param qvbrQualityLevel Controls the target quality for the video encode.
       * This applies only when the rate control mode is QVBR. Set values for the QVBR quality level
       * field and Max bitrate field that suit your most important viewing devices. Recommended values
       * are: - Primary screen: Quality level: 8 to 10. Max bitrate: 4M - PC or tablet: Quality level:
       * 7. Max bitrate: 1.5M to 3M - Smartphone: Quality level: 6. Max bitrate: 1M to 1.5M.
       */
      override fun qvbrQualityLevel(qvbrQualityLevel: Number) {
        cdkBuilder.qvbrQualityLevel(qvbrQualityLevel)
      }

      /**
       * @param rateControlMode The rate control mode.
       * QVBR: The quality will match the specified quality level except when it is constrained by
       * the maximum bitrate. We recommend this if you or your viewers pay for bandwidth. VBR: The
       * quality and bitrate vary, depending on the video complexity. We recommend this instead of QVBR
       * if you want to maintain a specific average bitrate over the duration of the channel. CBR: The
       * quality varies, depending on the video complexity. We recommend this only if you distribute
       * your assets to devices that can't handle variable bitrates.
       */
      override fun rateControlMode(rateControlMode: String) {
        cdkBuilder.rateControlMode(rateControlMode)
      }

      /**
       * @param scanType Sets the scan type of the output to progressive or top-field-first
       * interlaced.
       */
      override fun scanType(scanType: String) {
        cdkBuilder.scanType(scanType)
      }

      /**
       * @param sceneChangeDetect The scene change detection.
       * On: inserts I-frames when the scene change is detected. Off: does not force an I-frame when
       * the scene change is detected.
       */
      override fun sceneChangeDetect(sceneChangeDetect: String) {
        cdkBuilder.sceneChangeDetect(sceneChangeDetect)
      }

      /**
       * @param slices The number of slices per picture.
       * The number must be less than or equal to the number of macroblock rows for progressive
       * pictures, and less than or equal to half the number of macroblock rows for interlaced
       * pictures. This field is optional. If you don't specify a value, MediaLive chooses the number
       * of slices based on the encode resolution.
       */
      override fun slices(slices: Number) {
        cdkBuilder.slices(slices)
      }

      /**
       * @param softness Softness.
       * Selects a quantizer matrix. Larger values reduce high-frequency content in the encoded
       * image.
       */
      override fun softness(softness: Number) {
        cdkBuilder.softness(softness)
      }

      /**
       * @param spatialAq If set to enabled, adjusts quantization within each frame based on the
       * spatial variation of content complexity.
       */
      override fun spatialAq(spatialAq: String) {
        cdkBuilder.spatialAq(spatialAq)
      }

      /**
       * @param subgopLength If set to fixed, uses gopNumBFrames B-frames per sub-GOP.
       * If set to dynamic, optimizes the number of B-frames used for each sub-GOP to improve visual
       * quality.
       */
      override fun subgopLength(subgopLength: String) {
        cdkBuilder.subgopLength(subgopLength)
      }

      /**
       * @param syntax Produces a bitstream that is compliant with SMPTE RP-2027.
       */
      override fun syntax(syntax: String) {
        cdkBuilder.syntax(syntax)
      }

      /**
       * @param temporalAq If set to enabled, adjusts quantization within each frame based on the
       * temporal variation of content complexity.
       */
      override fun temporalAq(temporalAq: String) {
        cdkBuilder.temporalAq(temporalAq)
      }

      /**
       * @param timecodeBurninSettings the value to be set.
       */
      override fun timecodeBurninSettings(timecodeBurninSettings: IResolvable) {
        cdkBuilder.timecodeBurninSettings(timecodeBurninSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param timecodeBurninSettings the value to be set.
       */
      override fun timecodeBurninSettings(timecodeBurninSettings: TimecodeBurninSettingsProperty) {
        cdkBuilder.timecodeBurninSettings(timecodeBurninSettings.let(TimecodeBurninSettingsProperty.Companion::unwrap))
      }

      /**
       * @param timecodeBurninSettings the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("62643fd88f34450bd48fc495cc91e3e5239fc404fc1f3ed5e8679376335b6a45")
      override
          fun timecodeBurninSettings(timecodeBurninSettings: TimecodeBurninSettingsProperty.Builder.() -> Unit):
          Unit = timecodeBurninSettings(TimecodeBurninSettingsProperty(timecodeBurninSettings))

      /**
       * @param timecodeInsertion Determines how timecodes should be inserted into the video
       * elementary stream.
       * disabled: don't include timecodes. picTimingSei: pass through picture timing SEI messages
       * from the source specified in Timecode Config.
       */
      override fun timecodeInsertion(timecodeInsertion: String) {
        cdkBuilder.timecodeInsertion(timecodeInsertion)
      }

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.H264SettingsProperty
          = cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.H264SettingsProperty,
    ) : CdkObject(cdkObject),
        H264SettingsProperty {
      /**
       * The adaptive quantization.
       *
       * This allows intra-frame quantizers to vary to improve visual quality.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-adaptivequantization)
       */
      override fun adaptiveQuantization(): String? = unwrap(this).getAdaptiveQuantization()

      /**
       * Indicates that AFD values will be written into the output stream.
       *
       * If afdSignaling is auto, the system tries to preserve the input AFD value (in cases where
       * multiple AFD values are valid). If set to fixed, the AFD value is the value configured in the
       * fixedAfd parameter.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-afdsignaling)
       */
      override fun afdSignaling(): String? = unwrap(this).getAfdSignaling()

      /**
       * The average bitrate in bits/second.
       *
       * This is required when the rate control mode is VBR or CBR. It isn't used for QVBR. In a
       * Microsoft Smooth output group, each output must have a unique value when its bitrate is
       * rounded down to the nearest multiple of 1000.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-bitrate)
       */
      override fun bitrate(): Number? = unwrap(this).getBitrate()

      /**
       * The percentage of the buffer that should initially be filled (HRD buffer model).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-buffillpct)
       */
      override fun bufFillPct(): Number? = unwrap(this).getBufFillPct()

      /**
       * The size of the buffer (HRD buffer model) in bits/second.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-bufsize)
       */
      override fun bufSize(): Number? = unwrap(this).getBufSize()

      /**
       * Includes color space metadata in the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-colormetadata)
       */
      override fun colorMetadata(): String? = unwrap(this).getColorMetadata()

      /**
       * Settings to configure the color space handling for the video.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-colorspacesettings)
       */
      override fun colorSpaceSettings(): Any? = unwrap(this).getColorSpaceSettings()

      /**
       * The entropy encoding mode.
       *
       * Use cabac (must be in Main or High profile) or cavlc.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-entropyencoding)
       */
      override fun entropyEncoding(): String? = unwrap(this).getEntropyEncoding()

      /**
       * Optional filters that you can apply to an encode.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-filtersettings)
       */
      override fun filterSettings(): Any? = unwrap(this).getFilterSettings()

      /**
       * A four-bit AFD value to write on all frames of video in the output stream.
       *
       * Valid only when afdSignaling is set to Fixed.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-fixedafd)
       */
      override fun fixedAfd(): String? = unwrap(this).getFixedAfd()

      /**
       * If set to enabled, adjusts the quantization within each frame to reduce flicker or pop on
       * I-frames.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-flickeraq)
       */
      override fun flickerAq(): String? = unwrap(this).getFlickerAq()

      /**
       * This setting applies only when scan type is "interlaced." It controls whether coding is
       * performed on a field basis or on a frame basis. (When the video is progressive, the coding is
       * always performed on a frame basis.) enabled: Force MediaLive to code on a field basis, so that
       * odd and even sets of fields are coded separately. disabled: Code the two sets of fields
       * separately (on a field basis) or together (on a frame basis using PAFF), depending on what is
       * most appropriate for the content.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-forcefieldpictures)
       */
      override fun forceFieldPictures(): String? = unwrap(this).getForceFieldPictures()

      /**
       * Indicates how the output video frame rate is specified.
       *
       * If you select "specified," the output video frame rate is determined by framerateNumerator
       * and framerateDenominator. If you select "initializeFromSource," the output video frame rate is
       * set equal to the input video frame rate of the first input.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-frameratecontrol)
       */
      override fun framerateControl(): String? = unwrap(this).getFramerateControl()

      /**
       * The frame rate denominator.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-frameratedenominator)
       */
      override fun framerateDenominator(): Number? = unwrap(this).getFramerateDenominator()

      /**
       * The frame rate numerator.
       *
       * The frame rate is a fraction, for example, 24000/1001 = 23.976 fps.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-frameratenumerator)
       */
      override fun framerateNumerator(): Number? = unwrap(this).getFramerateNumerator()

      /**
       * If enabled, uses reference B frames for GOP structures that have B frames > 1.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-gopbreference)
       */
      override fun gopBReference(): String? = unwrap(this).getGopBReference()

      /**
       * The frequency of closed GOPs.
       *
       * In streaming applications, we recommend that you set this to 1 so that a decoder joining
       * mid-stream will receive an IDR frame as quickly as possible. Setting this value to 0 will
       * break output segmenting.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-gopclosedcadence)
       */
      override fun gopClosedCadence(): Number? = unwrap(this).getGopClosedCadence()

      /**
       * The number of B-frames between reference frames.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-gopnumbframes)
       */
      override fun gopNumBFrames(): Number? = unwrap(this).getGopNumBFrames()

      /**
       * The GOP size (keyframe interval) in units of either frames or seconds per gopSizeUnits.
       *
       * The value must be greater than zero.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-gopsize)
       */
      override fun gopSize(): Number? = unwrap(this).getGopSize()

      /**
       * Indicates if the gopSize is specified in frames or seconds.
       *
       * If seconds, the system converts the gopSize into a frame count at runtime.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-gopsizeunits)
       */
      override fun gopSizeUnits(): String? = unwrap(this).getGopSizeUnits()

      /**
       * The H.264 level.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-level)
       */
      override fun level(): String? = unwrap(this).getLevel()

      /**
       * The amount of lookahead.
       *
       * A value of low can decrease latency and memory usage, while high can produce better quality
       * for certain content.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-lookaheadratecontrol)
       */
      override fun lookAheadRateControl(): String? = unwrap(this).getLookAheadRateControl()

      /**
       * For QVBR: See the tooltip for Quality level.
       *
       * For VBR: Set the maximum bitrate in order to accommodate expected spikes in the complexity
       * of the video.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-maxbitrate)
       */
      override fun maxBitrate(): Number? = unwrap(this).getMaxBitrate()

      /**
       * Meaningful only if sceneChangeDetect is set to enabled.
       *
       * This setting enforces separation between repeated (cadence) I-frames and I-frames inserted
       * by Scene Change Detection. If a scene change I-frame is within I-interval frames of a cadence
       * I-frame, the GOP is shrunk or stretched to the scene change I-frame. GOP stretch requires
       * enabling lookahead as well as setting the I-interval. The normal cadence resumes for the next
       * GOP. Note that the maximum GOP stretch = GOP size + Min-I-interval - 1.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-miniinterval)
       */
      override fun minIInterval(): Number? = unwrap(this).getMinIInterval()

      /**
       * The number of reference frames to use.
       *
       * The encoder might use more than requested if you use B-frames or interlaced encoding.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-numrefframes)
       */
      override fun numRefFrames(): Number? = unwrap(this).getNumRefFrames()

      /**
       * Indicates how the output pixel aspect ratio is specified.
       *
       * If "specified" is selected, the output video pixel aspect ratio is determined by
       * parNumerator and parDenominator. If "initializeFromSource" is selected, the output pixels
       * aspect ratio will be set equal to the input video pixel aspect ratio of the first input.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-parcontrol)
       */
      override fun parControl(): String? = unwrap(this).getParControl()

      /**
       * The Pixel Aspect Ratio denominator.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-pardenominator)
       */
      override fun parDenominator(): Number? = unwrap(this).getParDenominator()

      /**
       * The Pixel Aspect Ratio numerator.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-parnumerator)
       */
      override fun parNumerator(): Number? = unwrap(this).getParNumerator()

      /**
       * An H.264 profile.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-profile)
       */
      override fun profile(): String? = unwrap(this).getProfile()

      /**
       * Leave as STANDARD_QUALITY or choose a different value (which might result in additional
       * costs to run the channel).
       *
       * * ENHANCED_QUALITY: Produces a slightly better video quality without an increase in the
       * bitrate. Has an effect only when the Rate control mode is QVBR or CBR. If this channel is in a
       * MediaLive multiplex, the value must be ENHANCED_QUALITY.
       * * STANDARD_QUALITY: Valid for any Rate control mode.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-qualitylevel)
       */
      override fun qualityLevel(): String? = unwrap(this).getQualityLevel()

      /**
       * Controls the target quality for the video encode.
       *
       * This applies only when the rate control mode is QVBR. Set values for the QVBR quality level
       * field and Max bitrate field that suit your most important viewing devices. Recommended values
       * are: - Primary screen: Quality level: 8 to 10. Max bitrate: 4M - PC or tablet: Quality level:
       * 7. Max bitrate: 1.5M to 3M - Smartphone: Quality level: 6. Max bitrate: 1M to 1.5M.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-qvbrqualitylevel)
       */
      override fun qvbrQualityLevel(): Number? = unwrap(this).getQvbrQualityLevel()

      /**
       * The rate control mode.
       *
       * QVBR: The quality will match the specified quality level except when it is constrained by
       * the maximum bitrate. We recommend this if you or your viewers pay for bandwidth. VBR: The
       * quality and bitrate vary, depending on the video complexity. We recommend this instead of QVBR
       * if you want to maintain a specific average bitrate over the duration of the channel. CBR: The
       * quality varies, depending on the video complexity. We recommend this only if you distribute
       * your assets to devices that can't handle variable bitrates.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-ratecontrolmode)
       */
      override fun rateControlMode(): String? = unwrap(this).getRateControlMode()

      /**
       * Sets the scan type of the output to progressive or top-field-first interlaced.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-scantype)
       */
      override fun scanType(): String? = unwrap(this).getScanType()

      /**
       * The scene change detection.
       *
       * On: inserts I-frames when the scene change is detected. Off: does not force an I-frame when
       * the scene change is detected.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-scenechangedetect)
       */
      override fun sceneChangeDetect(): String? = unwrap(this).getSceneChangeDetect()

      /**
       * The number of slices per picture.
       *
       * The number must be less than or equal to the number of macroblock rows for progressive
       * pictures, and less than or equal to half the number of macroblock rows for interlaced
       * pictures. This field is optional. If you don't specify a value, MediaLive chooses the number
       * of slices based on the encode resolution.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-slices)
       */
      override fun slices(): Number? = unwrap(this).getSlices()

      /**
       * Softness.
       *
       * Selects a quantizer matrix. Larger values reduce high-frequency content in the encoded
       * image.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-softness)
       */
      override fun softness(): Number? = unwrap(this).getSoftness()

      /**
       * If set to enabled, adjusts quantization within each frame based on the spatial variation of
       * content complexity.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-spatialaq)
       */
      override fun spatialAq(): String? = unwrap(this).getSpatialAq()

      /**
       * If set to fixed, uses gopNumBFrames B-frames per sub-GOP.
       *
       * If set to dynamic, optimizes the number of B-frames used for each sub-GOP to improve visual
       * quality.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-subgoplength)
       */
      override fun subgopLength(): String? = unwrap(this).getSubgopLength()

      /**
       * Produces a bitstream that is compliant with SMPTE RP-2027.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-syntax)
       */
      override fun syntax(): String? = unwrap(this).getSyntax()

      /**
       * If set to enabled, adjusts quantization within each frame based on the temporal variation
       * of content complexity.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-temporalaq)
       */
      override fun temporalAq(): String? = unwrap(this).getTemporalAq()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-timecodeburninsettings)
       */
      override fun timecodeBurninSettings(): Any? = unwrap(this).getTimecodeBurninSettings()

      /**
       * Determines how timecodes should be inserted into the video elementary stream.
       *
       * disabled: don't include timecodes. picTimingSei: pass through picture timing SEI messages
       * from the source specified in Timecode Config.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-timecodeinsertion)
       */
      override fun timecodeInsertion(): String? = unwrap(this).getTimecodeInsertion()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): H264SettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.H264SettingsProperty):
          H264SettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? H264SettingsProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: H264SettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.H264SettingsProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.H264SettingsProperty
    }
  }

  /**
   * H265 Color Space Settings.
   *
   * The parent of this entity is H265Settings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * H265ColorSpaceSettingsProperty h265ColorSpaceSettingsProperty =
   * H265ColorSpaceSettingsProperty.builder()
   * .colorSpacePassthroughSettings(ColorSpacePassthroughSettingsProperty.builder().build())
   * .dolbyVision81Settings(DolbyVision81SettingsProperty.builder().build())
   * .hdr10Settings(Hdr10SettingsProperty.builder()
   * .maxCll(123)
   * .maxFall(123)
   * .build())
   * .rec601Settings(Rec601SettingsProperty.builder().build())
   * .rec709Settings(Rec709SettingsProperty.builder().build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265colorspacesettings.html)
   */
  public interface H265ColorSpaceSettingsProperty {
    /**
     * Passthrough applies no color space conversion to the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265colorspacesettings.html#cfn-medialive-channel-h265colorspacesettings-colorspacepassthroughsettings)
     */
    public fun colorSpacePassthroughSettings(): Any? =
        unwrap(this).getColorSpacePassthroughSettings()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265colorspacesettings.html#cfn-medialive-channel-h265colorspacesettings-dolbyvision81settings)
     */
    public fun dolbyVision81Settings(): Any? = unwrap(this).getDolbyVision81Settings()

    /**
     * Settings to configure the handling of HDR10 color space.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265colorspacesettings.html#cfn-medialive-channel-h265colorspacesettings-hdr10settings)
     */
    public fun hdr10Settings(): Any? = unwrap(this).getHdr10Settings()

    /**
     * Settings to configure the handling of Rec601 color space.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265colorspacesettings.html#cfn-medialive-channel-h265colorspacesettings-rec601settings)
     */
    public fun rec601Settings(): Any? = unwrap(this).getRec601Settings()

    /**
     * Settings to configure the handling of Rec709 color space.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265colorspacesettings.html#cfn-medialive-channel-h265colorspacesettings-rec709settings)
     */
    public fun rec709Settings(): Any? = unwrap(this).getRec709Settings()

    /**
     * A builder for [H265ColorSpaceSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param colorSpacePassthroughSettings Passthrough applies no color space conversion to the
       * output.
       */
      public fun colorSpacePassthroughSettings(colorSpacePassthroughSettings: IResolvable)

      /**
       * @param colorSpacePassthroughSettings Passthrough applies no color space conversion to the
       * output.
       */
      public
          fun colorSpacePassthroughSettings(colorSpacePassthroughSettings: ColorSpacePassthroughSettingsProperty)

      /**
       * @param colorSpacePassthroughSettings Passthrough applies no color space conversion to the
       * output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("b9965f647b90eae7f2b3f71ef17f3e94d9db2335ec498e10c00f38e70f26ac1b")
      public
          fun colorSpacePassthroughSettings(colorSpacePassthroughSettings: ColorSpacePassthroughSettingsProperty.Builder.() -> Unit)

      /**
       * @param dolbyVision81Settings the value to be set.
       */
      public fun dolbyVision81Settings(dolbyVision81Settings: IResolvable)

      /**
       * @param dolbyVision81Settings the value to be set.
       */
      public fun dolbyVision81Settings(dolbyVision81Settings: DolbyVision81SettingsProperty)

      /**
       * @param dolbyVision81Settings the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("bb0360cbca25a72c00fddb075e3eacd4e05003fd645739c7bd7dd474939eca5c")
      public
          fun dolbyVision81Settings(dolbyVision81Settings: DolbyVision81SettingsProperty.Builder.() -> Unit)

      /**
       * @param hdr10Settings Settings to configure the handling of HDR10 color space.
       */
      public fun hdr10Settings(hdr10Settings: IResolvable)

      /**
       * @param hdr10Settings Settings to configure the handling of HDR10 color space.
       */
      public fun hdr10Settings(hdr10Settings: Hdr10SettingsProperty)

      /**
       * @param hdr10Settings Settings to configure the handling of HDR10 color space.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("d08816bd3a3b8e97c2a6a0b50d770f7438e8fa5fc8a54dbc7d0bc5eee0faacb9")
      public fun hdr10Settings(hdr10Settings: Hdr10SettingsProperty.Builder.() -> Unit)

      /**
       * @param rec601Settings Settings to configure the handling of Rec601 color space.
       */
      public fun rec601Settings(rec601Settings: IResolvable)

      /**
       * @param rec601Settings Settings to configure the handling of Rec601 color space.
       */
      public fun rec601Settings(rec601Settings: Rec601SettingsProperty)

      /**
       * @param rec601Settings Settings to configure the handling of Rec601 color space.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("bac6dc7c984a5ff7eed46cdaf50f0b32250e21bbbeab31345b4b913c3430f570")
      public fun rec601Settings(rec601Settings: Rec601SettingsProperty.Builder.() -> Unit)

      /**
       * @param rec709Settings Settings to configure the handling of Rec709 color space.
       */
      public fun rec709Settings(rec709Settings: IResolvable)

      /**
       * @param rec709Settings Settings to configure the handling of Rec709 color space.
       */
      public fun rec709Settings(rec709Settings: Rec709SettingsProperty)

      /**
       * @param rec709Settings Settings to configure the handling of Rec709 color space.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("8ff2691ea97e75495de6d779843eff7f211f3ede6c93bb8eb80d70a37ade8c2e")
      public fun rec709Settings(rec709Settings: Rec709SettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.H265ColorSpaceSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.H265ColorSpaceSettingsProperty.builder()

      /**
       * @param colorSpacePassthroughSettings Passthrough applies no color space conversion to the
       * output.
       */
      override fun colorSpacePassthroughSettings(colorSpacePassthroughSettings: IResolvable) {
        cdkBuilder.colorSpacePassthroughSettings(colorSpacePassthroughSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param colorSpacePassthroughSettings Passthrough applies no color space conversion to the
       * output.
       */
      override
          fun colorSpacePassthroughSettings(colorSpacePassthroughSettings: ColorSpacePassthroughSettingsProperty) {
        cdkBuilder.colorSpacePassthroughSettings(colorSpacePassthroughSettings.let(ColorSpacePassthroughSettingsProperty.Companion::unwrap))
      }

      /**
       * @param colorSpacePassthroughSettings Passthrough applies no color space conversion to the
       * output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("b9965f647b90eae7f2b3f71ef17f3e94d9db2335ec498e10c00f38e70f26ac1b")
      override
          fun colorSpacePassthroughSettings(colorSpacePassthroughSettings: ColorSpacePassthroughSettingsProperty.Builder.() -> Unit):
          Unit =
          colorSpacePassthroughSettings(ColorSpacePassthroughSettingsProperty(colorSpacePassthroughSettings))

      /**
       * @param dolbyVision81Settings the value to be set.
       */
      override fun dolbyVision81Settings(dolbyVision81Settings: IResolvable) {
        cdkBuilder.dolbyVision81Settings(dolbyVision81Settings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param dolbyVision81Settings the value to be set.
       */
      override fun dolbyVision81Settings(dolbyVision81Settings: DolbyVision81SettingsProperty) {
        cdkBuilder.dolbyVision81Settings(dolbyVision81Settings.let(DolbyVision81SettingsProperty.Companion::unwrap))
      }

      /**
       * @param dolbyVision81Settings the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("bb0360cbca25a72c00fddb075e3eacd4e05003fd645739c7bd7dd474939eca5c")
      override
          fun dolbyVision81Settings(dolbyVision81Settings: DolbyVision81SettingsProperty.Builder.() -> Unit):
          Unit = dolbyVision81Settings(DolbyVision81SettingsProperty(dolbyVision81Settings))

      /**
       * @param hdr10Settings Settings to configure the handling of HDR10 color space.
       */
      override fun hdr10Settings(hdr10Settings: IResolvable) {
        cdkBuilder.hdr10Settings(hdr10Settings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param hdr10Settings Settings to configure the handling of HDR10 color space.
       */
      override fun hdr10Settings(hdr10Settings: Hdr10SettingsProperty) {
        cdkBuilder.hdr10Settings(hdr10Settings.let(Hdr10SettingsProperty.Companion::unwrap))
      }

      /**
       * @param hdr10Settings Settings to configure the handling of HDR10 color space.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("d08816bd3a3b8e97c2a6a0b50d770f7438e8fa5fc8a54dbc7d0bc5eee0faacb9")
      override fun hdr10Settings(hdr10Settings: Hdr10SettingsProperty.Builder.() -> Unit): Unit =
          hdr10Settings(Hdr10SettingsProperty(hdr10Settings))

      /**
       * @param rec601Settings Settings to configure the handling of Rec601 color space.
       */
      override fun rec601Settings(rec601Settings: IResolvable) {
        cdkBuilder.rec601Settings(rec601Settings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param rec601Settings Settings to configure the handling of Rec601 color space.
       */
      override fun rec601Settings(rec601Settings: Rec601SettingsProperty) {
        cdkBuilder.rec601Settings(rec601Settings.let(Rec601SettingsProperty.Companion::unwrap))
      }

      /**
       * @param rec601Settings Settings to configure the handling of Rec601 color space.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("bac6dc7c984a5ff7eed46cdaf50f0b32250e21bbbeab31345b4b913c3430f570")
      override fun rec601Settings(rec601Settings: Rec601SettingsProperty.Builder.() -> Unit): Unit =
          rec601Settings(Rec601SettingsProperty(rec601Settings))

      /**
       * @param rec709Settings Settings to configure the handling of Rec709 color space.
       */
      override fun rec709Settings(rec709Settings: IResolvable) {
        cdkBuilder.rec709Settings(rec709Settings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param rec709Settings Settings to configure the handling of Rec709 color space.
       */
      override fun rec709Settings(rec709Settings: Rec709SettingsProperty) {
        cdkBuilder.rec709Settings(rec709Settings.let(Rec709SettingsProperty.Companion::unwrap))
      }

      /**
       * @param rec709Settings Settings to configure the handling of Rec709 color space.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("8ff2691ea97e75495de6d779843eff7f211f3ede6c93bb8eb80d70a37ade8c2e")
      override fun rec709Settings(rec709Settings: Rec709SettingsProperty.Builder.() -> Unit): Unit =
          rec709Settings(Rec709SettingsProperty(rec709Settings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.H265ColorSpaceSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.H265ColorSpaceSettingsProperty,
    ) : CdkObject(cdkObject),
        H265ColorSpaceSettingsProperty {
      /**
       * Passthrough applies no color space conversion to the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265colorspacesettings.html#cfn-medialive-channel-h265colorspacesettings-colorspacepassthroughsettings)
       */
      override fun colorSpacePassthroughSettings(): Any? =
          unwrap(this).getColorSpacePassthroughSettings()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265colorspacesettings.html#cfn-medialive-channel-h265colorspacesettings-dolbyvision81settings)
       */
      override fun dolbyVision81Settings(): Any? = unwrap(this).getDolbyVision81Settings()

      /**
       * Settings to configure the handling of HDR10 color space.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265colorspacesettings.html#cfn-medialive-channel-h265colorspacesettings-hdr10settings)
       */
      override fun hdr10Settings(): Any? = unwrap(this).getHdr10Settings()

      /**
       * Settings to configure the handling of Rec601 color space.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265colorspacesettings.html#cfn-medialive-channel-h265colorspacesettings-rec601settings)
       */
      override fun rec601Settings(): Any? = unwrap(this).getRec601Settings()

      /**
       * Settings to configure the handling of Rec709 color space.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265colorspacesettings.html#cfn-medialive-channel-h265colorspacesettings-rec709settings)
       */
      override fun rec709Settings(): Any? = unwrap(this).getRec709Settings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): H265ColorSpaceSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.H265ColorSpaceSettingsProperty):
          H265ColorSpaceSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          H265ColorSpaceSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: H265ColorSpaceSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.H265ColorSpaceSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.H265ColorSpaceSettingsProperty
    }
  }

  /**
   * Settings to configure video filters that apply to the H265 codec.
   *
   * The parent of this entity is H265Settings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * H265FilterSettingsProperty h265FilterSettingsProperty = H265FilterSettingsProperty.builder()
   * .temporalFilterSettings(TemporalFilterSettingsProperty.builder()
   * .postFilterSharpening("postFilterSharpening")
   * .strength("strength")
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265filtersettings.html)
   */
  public interface H265FilterSettingsProperty {
    /**
     * Settings for applying the temporal filter to the video.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265filtersettings.html#cfn-medialive-channel-h265filtersettings-temporalfiltersettings)
     */
    public fun temporalFilterSettings(): Any? = unwrap(this).getTemporalFilterSettings()

    /**
     * A builder for [H265FilterSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param temporalFilterSettings Settings for applying the temporal filter to the video.
       */
      public fun temporalFilterSettings(temporalFilterSettings: IResolvable)

      /**
       * @param temporalFilterSettings Settings for applying the temporal filter to the video.
       */
      public fun temporalFilterSettings(temporalFilterSettings: TemporalFilterSettingsProperty)

      /**
       * @param temporalFilterSettings Settings for applying the temporal filter to the video.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("65928fbd39e48021517a19731dd947e298d3beba075d062f34b8fa48f167175b")
      public
          fun temporalFilterSettings(temporalFilterSettings: TemporalFilterSettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.H265FilterSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.H265FilterSettingsProperty.builder()

      /**
       * @param temporalFilterSettings Settings for applying the temporal filter to the video.
       */
      override fun temporalFilterSettings(temporalFilterSettings: IResolvable) {
        cdkBuilder.temporalFilterSettings(temporalFilterSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param temporalFilterSettings Settings for applying the temporal filter to the video.
       */
      override fun temporalFilterSettings(temporalFilterSettings: TemporalFilterSettingsProperty) {
        cdkBuilder.temporalFilterSettings(temporalFilterSettings.let(TemporalFilterSettingsProperty.Companion::unwrap))
      }

      /**
       * @param temporalFilterSettings Settings for applying the temporal filter to the video.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("65928fbd39e48021517a19731dd947e298d3beba075d062f34b8fa48f167175b")
      override
          fun temporalFilterSettings(temporalFilterSettings: TemporalFilterSettingsProperty.Builder.() -> Unit):
          Unit = temporalFilterSettings(TemporalFilterSettingsProperty(temporalFilterSettings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.H265FilterSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.H265FilterSettingsProperty,
    ) : CdkObject(cdkObject),
        H265FilterSettingsProperty {
      /**
       * Settings for applying the temporal filter to the video.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265filtersettings.html#cfn-medialive-channel-h265filtersettings-temporalfiltersettings)
       */
      override fun temporalFilterSettings(): Any? = unwrap(this).getTemporalFilterSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): H265FilterSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.H265FilterSettingsProperty):
          H265FilterSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          H265FilterSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: H265FilterSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.H265FilterSettingsProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.H265FilterSettingsProperty
    }
  }

  /**
   * H265 Settings.
   *
   * The parent of this entity is VideoCodecSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * H265SettingsProperty h265SettingsProperty = H265SettingsProperty.builder()
   * .adaptiveQuantization("adaptiveQuantization")
   * .afdSignaling("afdSignaling")
   * .alternativeTransferFunction("alternativeTransferFunction")
   * .bitrate(123)
   * .bufSize(123)
   * .colorMetadata("colorMetadata")
   * .colorSpaceSettings(H265ColorSpaceSettingsProperty.builder()
   * .colorSpacePassthroughSettings(ColorSpacePassthroughSettingsProperty.builder().build())
   * .dolbyVision81Settings(DolbyVision81SettingsProperty.builder().build())
   * .hdr10Settings(Hdr10SettingsProperty.builder()
   * .maxCll(123)
   * .maxFall(123)
   * .build())
   * .rec601Settings(Rec601SettingsProperty.builder().build())
   * .rec709Settings(Rec709SettingsProperty.builder().build())
   * .build())
   * .filterSettings(H265FilterSettingsProperty.builder()
   * .temporalFilterSettings(TemporalFilterSettingsProperty.builder()
   * .postFilterSharpening("postFilterSharpening")
   * .strength("strength")
   * .build())
   * .build())
   * .fixedAfd("fixedAfd")
   * .flickerAq("flickerAq")
   * .framerateDenominator(123)
   * .framerateNumerator(123)
   * .gopClosedCadence(123)
   * .gopSize(123)
   * .gopSizeUnits("gopSizeUnits")
   * .level("level")
   * .lookAheadRateControl("lookAheadRateControl")
   * .maxBitrate(123)
   * .minIInterval(123)
   * .mvOverPictureBoundaries("mvOverPictureBoundaries")
   * .mvTemporalPredictor("mvTemporalPredictor")
   * .parDenominator(123)
   * .parNumerator(123)
   * .profile("profile")
   * .qvbrQualityLevel(123)
   * .rateControlMode("rateControlMode")
   * .scanType("scanType")
   * .sceneChangeDetect("sceneChangeDetect")
   * .slices(123)
   * .tier("tier")
   * .tileHeight(123)
   * .tilePadding("tilePadding")
   * .tileWidth(123)
   * .timecodeBurninSettings(TimecodeBurninSettingsProperty.builder()
   * .fontSize("fontSize")
   * .position("position")
   * .prefix("prefix")
   * .build())
   * .timecodeInsertion("timecodeInsertion")
   * .treeblockSize("treeblockSize")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html)
   */
  public interface H265SettingsProperty {
    /**
     * Adaptive quantization.
     *
     * Allows intra-frame quantizers to vary to improve visual quality.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-adaptivequantization)
     */
    public fun adaptiveQuantization(): String? = unwrap(this).getAdaptiveQuantization()

    /**
     * Indicates that AFD values will be written into the output stream.
     *
     * If afdSignaling is "auto", the system will try to preserve the input AFD value (in cases
     * where multiple AFD values are valid). If set to "fixed", the AFD value will be the value
     * configured in the fixedAfd parameter.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-afdsignaling)
     */
    public fun afdSignaling(): String? = unwrap(this).getAfdSignaling()

    /**
     * Whether or not EML should insert an Alternative Transfer Function SEI message to support
     * backwards compatibility with non-HDR decoders and displays.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-alternativetransferfunction)
     */
    public fun alternativeTransferFunction(): String? =
        unwrap(this).getAlternativeTransferFunction()

    /**
     * Average bitrate in bits/second.
     *
     * Required when the rate control mode is VBR or CBR. Not used for QVBR. In an MS Smooth output
     * group, each output must have a unique value when its bitrate is rounded down to the nearest
     * multiple of 1000.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-bitrate)
     */
    public fun bitrate(): Number? = unwrap(this).getBitrate()

    /**
     * Size of buffer (HRD buffer model) in bits.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-bufsize)
     */
    public fun bufSize(): Number? = unwrap(this).getBufSize()

    /**
     * Includes colorspace metadata in the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-colormetadata)
     */
    public fun colorMetadata(): String? = unwrap(this).getColorMetadata()

    /**
     * Color Space settings.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-colorspacesettings)
     */
    public fun colorSpaceSettings(): Any? = unwrap(this).getColorSpaceSettings()

    /**
     * Optional filters that you can apply to an encode.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-filtersettings)
     */
    public fun filterSettings(): Any? = unwrap(this).getFilterSettings()

    /**
     * Four bit AFD value to write on all frames of video in the output stream.
     *
     * Only valid when afdSignaling is set to 'Fixed'.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-fixedafd)
     */
    public fun fixedAfd(): String? = unwrap(this).getFixedAfd()

    /**
     * If set to enabled, adjust quantization within each frame to reduce flicker or 'pop' on
     * I-frames.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-flickeraq)
     */
    public fun flickerAq(): String? = unwrap(this).getFlickerAq()

    /**
     * Framerate denominator.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-frameratedenominator)
     */
    public fun framerateDenominator(): Number? = unwrap(this).getFramerateDenominator()

    /**
     * Framerate numerator - framerate is a fraction, e.g. 24000 / 1001 = 23.976 fps.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-frameratenumerator)
     */
    public fun framerateNumerator(): Number? = unwrap(this).getFramerateNumerator()

    /**
     * Frequency of closed GOPs.
     *
     * In streaming applications, it is recommended that this be set to 1 so a decoder joining
     * mid-stream will receive an IDR frame as quickly as possible. Setting this value to 0 will break
     * output segmenting.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-gopclosedcadence)
     */
    public fun gopClosedCadence(): Number? = unwrap(this).getGopClosedCadence()

    /**
     * GOP size (keyframe interval) in units of either frames or seconds per gopSizeUnits.
     *
     * If gopSizeUnits is frames, gopSize must be an integer and must be greater than or equal to 1.
     * If gopSizeUnits is seconds, gopSize must be greater than 0, but need not be an integer.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-gopsize)
     */
    public fun gopSize(): Number? = unwrap(this).getGopSize()

    /**
     * Indicates if the gopSize is specified in frames or seconds.
     *
     * If seconds the system will convert the gopSize into a frame count at run time.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-gopsizeunits)
     */
    public fun gopSizeUnits(): String? = unwrap(this).getGopSizeUnits()

    /**
     * H.265 Level.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-level)
     */
    public fun level(): String? = unwrap(this).getLevel()

    /**
     * Amount of lookahead.
     *
     * A value of low can decrease latency and memory usage, while high can produce better quality
     * for certain content.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-lookaheadratecontrol)
     */
    public fun lookAheadRateControl(): String? = unwrap(this).getLookAheadRateControl()

    /**
     * For QVBR: See the tooltip for Quality level.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-maxbitrate)
     */
    public fun maxBitrate(): Number? = unwrap(this).getMaxBitrate()

    /**
     * Only meaningful if sceneChangeDetect is set to enabled.
     *
     * Defaults to 5 if multiplex rate control is used. Enforces separation between repeated
     * (cadence) I-frames and I-frames inserted by Scene Change Detection. If a scene change I-frame is
     * within I-interval frames of a cadence I-frame, the GOP is shrunk and/or stretched to the scene
     * change I-frame. GOP stretch requires enabling lookahead as well as setting I-interval. The
     * normal cadence resumes for the next GOP. Note: Maximum GOP stretch = GOP size + Min-I-interval -
     * 1
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-miniinterval)
     */
    public fun minIInterval(): Number? = unwrap(this).getMinIInterval()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-mvoverpictureboundaries)
     */
    public fun mvOverPictureBoundaries(): String? = unwrap(this).getMvOverPictureBoundaries()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-mvtemporalpredictor)
     */
    public fun mvTemporalPredictor(): String? = unwrap(this).getMvTemporalPredictor()

    /**
     * Pixel Aspect Ratio denominator.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-pardenominator)
     */
    public fun parDenominator(): Number? = unwrap(this).getParDenominator()

    /**
     * Pixel Aspect Ratio numerator.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-parnumerator)
     */
    public fun parNumerator(): Number? = unwrap(this).getParNumerator()

    /**
     * H.265 Profile.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-profile)
     */
    public fun profile(): String? = unwrap(this).getProfile()

    /**
     * Controls the target quality for the video encode.
     *
     * Applies only when the rate control mode is QVBR. Set values for the QVBR quality level field
     * and Max bitrate field that suit your most important viewing devices. Recommended values are:
     *
     * * Primary screen: Quality level: 8 to 10. Max bitrate: 4M
     * * PC or tablet: Quality level: 7. Max bitrate: 1.5M to 3M
     * * Smartphone: Quality level: 6. Max bitrate: 1M to 1.5M
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-qvbrqualitylevel)
     */
    public fun qvbrQualityLevel(): Number? = unwrap(this).getQvbrQualityLevel()

    /**
     * Rate control mode.
     *
     * QVBR: Quality will match the specified quality level except when it is constrained by the
     * maximum bitrate. Recommended if you or your viewers pay for bandwidth. CBR: Quality varies,
     * depending on the video complexity. Recommended only if you distribute
     * your assets to devices that cannot handle variable bitrates. Multiplex: This rate control
     * mode is only supported (and is required) when the video is being
     * delivered to a MediaLive Multiplex in which case the rate control configuration is controlled
     * by the properties within the Multiplex Program.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-ratecontrolmode)
     */
    public fun rateControlMode(): String? = unwrap(this).getRateControlMode()

    /**
     * Sets the scan type of the output to progressive or top-field-first interlaced.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-scantype)
     */
    public fun scanType(): String? = unwrap(this).getScanType()

    /**
     * Scene change detection.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-scenechangedetect)
     */
    public fun sceneChangeDetect(): String? = unwrap(this).getSceneChangeDetect()

    /**
     * Number of slices per picture.
     *
     * Must be less than or equal to the number of macroblock rows for progressive pictures, and
     * less than or equal to half the number of macroblock rows for interlaced pictures.
     * This field is optional; when no value is specified the encoder will choose the number of
     * slices based on encode resolution.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-slices)
     */
    public fun slices(): Number? = unwrap(this).getSlices()

    /**
     * H.265 Tier.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-tier)
     */
    public fun tier(): String? = unwrap(this).getTier()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-tileheight)
     */
    public fun tileHeight(): Number? = unwrap(this).getTileHeight()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-tilepadding)
     */
    public fun tilePadding(): String? = unwrap(this).getTilePadding()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-tilewidth)
     */
    public fun tileWidth(): Number? = unwrap(this).getTileWidth()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-timecodeburninsettings)
     */
    public fun timecodeBurninSettings(): Any? = unwrap(this).getTimecodeBurninSettings()

    /**
     * Determines how timecodes should be inserted into the video elementary stream.
     *
     * * 'disabled': Do not include timecodes
     * * 'picTimingSei': Pass through picture timing SEI messages from the source specified in
     * Timecode Config
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-timecodeinsertion)
     */
    public fun timecodeInsertion(): String? = unwrap(this).getTimecodeInsertion()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-treeblocksize)
     */
    public fun treeblockSize(): String? = unwrap(this).getTreeblockSize()

    /**
     * A builder for [H265SettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param adaptiveQuantization Adaptive quantization.
       * Allows intra-frame quantizers to vary to improve visual quality.
       */
      public fun adaptiveQuantization(adaptiveQuantization: String)

      /**
       * @param afdSignaling Indicates that AFD values will be written into the output stream.
       * If afdSignaling is "auto", the system will try to preserve the input AFD value (in cases
       * where multiple AFD values are valid). If set to "fixed", the AFD value will be the value
       * configured in the fixedAfd parameter.
       */
      public fun afdSignaling(afdSignaling: String)

      /**
       * @param alternativeTransferFunction Whether or not EML should insert an Alternative Transfer
       * Function SEI message to support backwards compatibility with non-HDR decoders and displays.
       */
      public fun alternativeTransferFunction(alternativeTransferFunction: String)

      /**
       * @param bitrate Average bitrate in bits/second.
       * Required when the rate control mode is VBR or CBR. Not used for QVBR. In an MS Smooth
       * output group, each output must have a unique value when its bitrate is rounded down to the
       * nearest multiple of 1000.
       */
      public fun bitrate(bitrate: Number)

      /**
       * @param bufSize Size of buffer (HRD buffer model) in bits.
       */
      public fun bufSize(bufSize: Number)

      /**
       * @param colorMetadata Includes colorspace metadata in the output.
       */
      public fun colorMetadata(colorMetadata: String)

      /**
       * @param colorSpaceSettings Color Space settings.
       */
      public fun colorSpaceSettings(colorSpaceSettings: IResolvable)

      /**
       * @param colorSpaceSettings Color Space settings.
       */
      public fun colorSpaceSettings(colorSpaceSettings: H265ColorSpaceSettingsProperty)

      /**
       * @param colorSpaceSettings Color Space settings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("22b5ddf68b7d0a76417cb7aa87c2962ef416eb8ee445b05fc707a427ba970267")
      public
          fun colorSpaceSettings(colorSpaceSettings: H265ColorSpaceSettingsProperty.Builder.() -> Unit)

      /**
       * @param filterSettings Optional filters that you can apply to an encode.
       */
      public fun filterSettings(filterSettings: IResolvable)

      /**
       * @param filterSettings Optional filters that you can apply to an encode.
       */
      public fun filterSettings(filterSettings: H265FilterSettingsProperty)

      /**
       * @param filterSettings Optional filters that you can apply to an encode.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("4b1a86e61ef9760f486b657eb28e69c07d1c4f58d8b4b48025f01936218d6947")
      public fun filterSettings(filterSettings: H265FilterSettingsProperty.Builder.() -> Unit)

      /**
       * @param fixedAfd Four bit AFD value to write on all frames of video in the output stream.
       * Only valid when afdSignaling is set to 'Fixed'.
       */
      public fun fixedAfd(fixedAfd: String)

      /**
       * @param flickerAq If set to enabled, adjust quantization within each frame to reduce flicker
       * or 'pop' on I-frames.
       */
      public fun flickerAq(flickerAq: String)

      /**
       * @param framerateDenominator Framerate denominator.
       */
      public fun framerateDenominator(framerateDenominator: Number)

      /**
       * @param framerateNumerator Framerate numerator - framerate is a fraction, e.g. 24000 / 1001
       * = 23.976 fps.
       */
      public fun framerateNumerator(framerateNumerator: Number)

      /**
       * @param gopClosedCadence Frequency of closed GOPs.
       * In streaming applications, it is recommended that this be set to 1 so a decoder joining
       * mid-stream will receive an IDR frame as quickly as possible. Setting this value to 0 will
       * break output segmenting.
       */
      public fun gopClosedCadence(gopClosedCadence: Number)

      /**
       * @param gopSize GOP size (keyframe interval) in units of either frames or seconds per
       * gopSizeUnits.
       * If gopSizeUnits is frames, gopSize must be an integer and must be greater than or equal to
       * 1.
       * If gopSizeUnits is seconds, gopSize must be greater than 0, but need not be an integer.
       */
      public fun gopSize(gopSize: Number)

      /**
       * @param gopSizeUnits Indicates if the gopSize is specified in frames or seconds.
       * If seconds the system will convert the gopSize into a frame count at run time.
       */
      public fun gopSizeUnits(gopSizeUnits: String)

      /**
       * @param level H.265 Level.
       */
      public fun level(level: String)

      /**
       * @param lookAheadRateControl Amount of lookahead.
       * A value of low can decrease latency and memory usage, while high can produce better quality
       * for certain content.
       */
      public fun lookAheadRateControl(lookAheadRateControl: String)

      /**
       * @param maxBitrate For QVBR: See the tooltip for Quality level.
       */
      public fun maxBitrate(maxBitrate: Number)

      /**
       * @param minIInterval Only meaningful if sceneChangeDetect is set to enabled.
       * Defaults to 5 if multiplex rate control is used. Enforces separation between repeated
       * (cadence) I-frames and I-frames inserted by Scene Change Detection. If a scene change I-frame
       * is within I-interval frames of a cadence I-frame, the GOP is shrunk and/or stretched to the
       * scene change I-frame. GOP stretch requires enabling lookahead as well as setting I-interval.
       * The normal cadence resumes for the next GOP. Note: Maximum GOP stretch = GOP size +
       * Min-I-interval - 1
       */
      public fun minIInterval(minIInterval: Number)

      /**
       * @param mvOverPictureBoundaries the value to be set.
       */
      public fun mvOverPictureBoundaries(mvOverPictureBoundaries: String)

      /**
       * @param mvTemporalPredictor the value to be set.
       */
      public fun mvTemporalPredictor(mvTemporalPredictor: String)

      /**
       * @param parDenominator Pixel Aspect Ratio denominator.
       */
      public fun parDenominator(parDenominator: Number)

      /**
       * @param parNumerator Pixel Aspect Ratio numerator.
       */
      public fun parNumerator(parNumerator: Number)

      /**
       * @param profile H.265 Profile.
       */
      public fun profile(profile: String)

      /**
       * @param qvbrQualityLevel Controls the target quality for the video encode.
       * Applies only when the rate control mode is QVBR. Set values for the QVBR quality level
       * field and Max bitrate field that suit your most important viewing devices. Recommended values
       * are:
       *
       * * Primary screen: Quality level: 8 to 10. Max bitrate: 4M
       * * PC or tablet: Quality level: 7. Max bitrate: 1.5M to 3M
       * * Smartphone: Quality level: 6. Max bitrate: 1M to 1.5M
       */
      public fun qvbrQualityLevel(qvbrQualityLevel: Number)

      /**
       * @param rateControlMode Rate control mode.
       * QVBR: Quality will match the specified quality level except when it is constrained by the
       * maximum bitrate. Recommended if you or your viewers pay for bandwidth. CBR: Quality varies,
       * depending on the video complexity. Recommended only if you distribute
       * your assets to devices that cannot handle variable bitrates. Multiplex: This rate control
       * mode is only supported (and is required) when the video is being
       * delivered to a MediaLive Multiplex in which case the rate control configuration is
       * controlled
       * by the properties within the Multiplex Program.
       */
      public fun rateControlMode(rateControlMode: String)

      /**
       * @param scanType Sets the scan type of the output to progressive or top-field-first
       * interlaced.
       */
      public fun scanType(scanType: String)

      /**
       * @param sceneChangeDetect Scene change detection.
       */
      public fun sceneChangeDetect(sceneChangeDetect: String)

      /**
       * @param slices Number of slices per picture.
       * Must be less than or equal to the number of macroblock rows for progressive pictures, and
       * less than or equal to half the number of macroblock rows for interlaced pictures.
       * This field is optional; when no value is specified the encoder will choose the number of
       * slices based on encode resolution.
       */
      public fun slices(slices: Number)

      /**
       * @param tier H.265 Tier.
       */
      public fun tier(tier: String)

      /**
       * @param tileHeight the value to be set.
       */
      public fun tileHeight(tileHeight: Number)

      /**
       * @param tilePadding the value to be set.
       */
      public fun tilePadding(tilePadding: String)

      /**
       * @param tileWidth the value to be set.
       */
      public fun tileWidth(tileWidth: Number)

      /**
       * @param timecodeBurninSettings the value to be set.
       */
      public fun timecodeBurninSettings(timecodeBurninSettings: IResolvable)

      /**
       * @param timecodeBurninSettings the value to be set.
       */
      public fun timecodeBurninSettings(timecodeBurninSettings: TimecodeBurninSettingsProperty)

      /**
       * @param timecodeBurninSettings the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("04610e4a9dbce0540320e1fc4806b5539e5ba8c856e69ea2953f7f2cdd2780a1")
      public
          fun timecodeBurninSettings(timecodeBurninSettings: TimecodeBurninSettingsProperty.Builder.() -> Unit)

      /**
       * @param timecodeInsertion Determines how timecodes should be inserted into the video
       * elementary stream.
       * * 'disabled': Do not include timecodes
       * * 'picTimingSei': Pass through picture timing SEI messages from the source specified in
       * Timecode Config
       */
      public fun timecodeInsertion(timecodeInsertion: String)

      /**
       * @param treeblockSize the value to be set.
       */
      public fun treeblockSize(treeblockSize: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.H265SettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.H265SettingsProperty.builder()

      /**
       * @param adaptiveQuantization Adaptive quantization.
       * Allows intra-frame quantizers to vary to improve visual quality.
       */
      override fun adaptiveQuantization(adaptiveQuantization: String) {
        cdkBuilder.adaptiveQuantization(adaptiveQuantization)
      }

      /**
       * @param afdSignaling Indicates that AFD values will be written into the output stream.
       * If afdSignaling is "auto", the system will try to preserve the input AFD value (in cases
       * where multiple AFD values are valid). If set to "fixed", the AFD value will be the value
       * configured in the fixedAfd parameter.
       */
      override fun afdSignaling(afdSignaling: String) {
        cdkBuilder.afdSignaling(afdSignaling)
      }

      /**
       * @param alternativeTransferFunction Whether or not EML should insert an Alternative Transfer
       * Function SEI message to support backwards compatibility with non-HDR decoders and displays.
       */
      override fun alternativeTransferFunction(alternativeTransferFunction: String) {
        cdkBuilder.alternativeTransferFunction(alternativeTransferFunction)
      }

      /**
       * @param bitrate Average bitrate in bits/second.
       * Required when the rate control mode is VBR or CBR. Not used for QVBR. In an MS Smooth
       * output group, each output must have a unique value when its bitrate is rounded down to the
       * nearest multiple of 1000.
       */
      override fun bitrate(bitrate: Number) {
        cdkBuilder.bitrate(bitrate)
      }

      /**
       * @param bufSize Size of buffer (HRD buffer model) in bits.
       */
      override fun bufSize(bufSize: Number) {
        cdkBuilder.bufSize(bufSize)
      }

      /**
       * @param colorMetadata Includes colorspace metadata in the output.
       */
      override fun colorMetadata(colorMetadata: String) {
        cdkBuilder.colorMetadata(colorMetadata)
      }

      /**
       * @param colorSpaceSettings Color Space settings.
       */
      override fun colorSpaceSettings(colorSpaceSettings: IResolvable) {
        cdkBuilder.colorSpaceSettings(colorSpaceSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param colorSpaceSettings Color Space settings.
       */
      override fun colorSpaceSettings(colorSpaceSettings: H265ColorSpaceSettingsProperty) {
        cdkBuilder.colorSpaceSettings(colorSpaceSettings.let(H265ColorSpaceSettingsProperty.Companion::unwrap))
      }

      /**
       * @param colorSpaceSettings Color Space settings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("22b5ddf68b7d0a76417cb7aa87c2962ef416eb8ee445b05fc707a427ba970267")
      override
          fun colorSpaceSettings(colorSpaceSettings: H265ColorSpaceSettingsProperty.Builder.() -> Unit):
          Unit = colorSpaceSettings(H265ColorSpaceSettingsProperty(colorSpaceSettings))

      /**
       * @param filterSettings Optional filters that you can apply to an encode.
       */
      override fun filterSettings(filterSettings: IResolvable) {
        cdkBuilder.filterSettings(filterSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param filterSettings Optional filters that you can apply to an encode.
       */
      override fun filterSettings(filterSettings: H265FilterSettingsProperty) {
        cdkBuilder.filterSettings(filterSettings.let(H265FilterSettingsProperty.Companion::unwrap))
      }

      /**
       * @param filterSettings Optional filters that you can apply to an encode.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("4b1a86e61ef9760f486b657eb28e69c07d1c4f58d8b4b48025f01936218d6947")
      override fun filterSettings(filterSettings: H265FilterSettingsProperty.Builder.() -> Unit):
          Unit = filterSettings(H265FilterSettingsProperty(filterSettings))

      /**
       * @param fixedAfd Four bit AFD value to write on all frames of video in the output stream.
       * Only valid when afdSignaling is set to 'Fixed'.
       */
      override fun fixedAfd(fixedAfd: String) {
        cdkBuilder.fixedAfd(fixedAfd)
      }

      /**
       * @param flickerAq If set to enabled, adjust quantization within each frame to reduce flicker
       * or 'pop' on I-frames.
       */
      override fun flickerAq(flickerAq: String) {
        cdkBuilder.flickerAq(flickerAq)
      }

      /**
       * @param framerateDenominator Framerate denominator.
       */
      override fun framerateDenominator(framerateDenominator: Number) {
        cdkBuilder.framerateDenominator(framerateDenominator)
      }

      /**
       * @param framerateNumerator Framerate numerator - framerate is a fraction, e.g. 24000 / 1001
       * = 23.976 fps.
       */
      override fun framerateNumerator(framerateNumerator: Number) {
        cdkBuilder.framerateNumerator(framerateNumerator)
      }

      /**
       * @param gopClosedCadence Frequency of closed GOPs.
       * In streaming applications, it is recommended that this be set to 1 so a decoder joining
       * mid-stream will receive an IDR frame as quickly as possible. Setting this value to 0 will
       * break output segmenting.
       */
      override fun gopClosedCadence(gopClosedCadence: Number) {
        cdkBuilder.gopClosedCadence(gopClosedCadence)
      }

      /**
       * @param gopSize GOP size (keyframe interval) in units of either frames or seconds per
       * gopSizeUnits.
       * If gopSizeUnits is frames, gopSize must be an integer and must be greater than or equal to
       * 1.
       * If gopSizeUnits is seconds, gopSize must be greater than 0, but need not be an integer.
       */
      override fun gopSize(gopSize: Number) {
        cdkBuilder.gopSize(gopSize)
      }

      /**
       * @param gopSizeUnits Indicates if the gopSize is specified in frames or seconds.
       * If seconds the system will convert the gopSize into a frame count at run time.
       */
      override fun gopSizeUnits(gopSizeUnits: String) {
        cdkBuilder.gopSizeUnits(gopSizeUnits)
      }

      /**
       * @param level H.265 Level.
       */
      override fun level(level: String) {
        cdkBuilder.level(level)
      }

      /**
       * @param lookAheadRateControl Amount of lookahead.
       * A value of low can decrease latency and memory usage, while high can produce better quality
       * for certain content.
       */
      override fun lookAheadRateControl(lookAheadRateControl: String) {
        cdkBuilder.lookAheadRateControl(lookAheadRateControl)
      }

      /**
       * @param maxBitrate For QVBR: See the tooltip for Quality level.
       */
      override fun maxBitrate(maxBitrate: Number) {
        cdkBuilder.maxBitrate(maxBitrate)
      }

      /**
       * @param minIInterval Only meaningful if sceneChangeDetect is set to enabled.
       * Defaults to 5 if multiplex rate control is used. Enforces separation between repeated
       * (cadence) I-frames and I-frames inserted by Scene Change Detection. If a scene change I-frame
       * is within I-interval frames of a cadence I-frame, the GOP is shrunk and/or stretched to the
       * scene change I-frame. GOP stretch requires enabling lookahead as well as setting I-interval.
       * The normal cadence resumes for the next GOP. Note: Maximum GOP stretch = GOP size +
       * Min-I-interval - 1
       */
      override fun minIInterval(minIInterval: Number) {
        cdkBuilder.minIInterval(minIInterval)
      }

      /**
       * @param mvOverPictureBoundaries the value to be set.
       */
      override fun mvOverPictureBoundaries(mvOverPictureBoundaries: String) {
        cdkBuilder.mvOverPictureBoundaries(mvOverPictureBoundaries)
      }

      /**
       * @param mvTemporalPredictor the value to be set.
       */
      override fun mvTemporalPredictor(mvTemporalPredictor: String) {
        cdkBuilder.mvTemporalPredictor(mvTemporalPredictor)
      }

      /**
       * @param parDenominator Pixel Aspect Ratio denominator.
       */
      override fun parDenominator(parDenominator: Number) {
        cdkBuilder.parDenominator(parDenominator)
      }

      /**
       * @param parNumerator Pixel Aspect Ratio numerator.
       */
      override fun parNumerator(parNumerator: Number) {
        cdkBuilder.parNumerator(parNumerator)
      }

      /**
       * @param profile H.265 Profile.
       */
      override fun profile(profile: String) {
        cdkBuilder.profile(profile)
      }

      /**
       * @param qvbrQualityLevel Controls the target quality for the video encode.
       * Applies only when the rate control mode is QVBR. Set values for the QVBR quality level
       * field and Max bitrate field that suit your most important viewing devices. Recommended values
       * are:
       *
       * * Primary screen: Quality level: 8 to 10. Max bitrate: 4M
       * * PC or tablet: Quality level: 7. Max bitrate: 1.5M to 3M
       * * Smartphone: Quality level: 6. Max bitrate: 1M to 1.5M
       */
      override fun qvbrQualityLevel(qvbrQualityLevel: Number) {
        cdkBuilder.qvbrQualityLevel(qvbrQualityLevel)
      }

      /**
       * @param rateControlMode Rate control mode.
       * QVBR: Quality will match the specified quality level except when it is constrained by the
       * maximum bitrate. Recommended if you or your viewers pay for bandwidth. CBR: Quality varies,
       * depending on the video complexity. Recommended only if you distribute
       * your assets to devices that cannot handle variable bitrates. Multiplex: This rate control
       * mode is only supported (and is required) when the video is being
       * delivered to a MediaLive Multiplex in which case the rate control configuration is
       * controlled
       * by the properties within the Multiplex Program.
       */
      override fun rateControlMode(rateControlMode: String) {
        cdkBuilder.rateControlMode(rateControlMode)
      }

      /**
       * @param scanType Sets the scan type of the output to progressive or top-field-first
       * interlaced.
       */
      override fun scanType(scanType: String) {
        cdkBuilder.scanType(scanType)
      }

      /**
       * @param sceneChangeDetect Scene change detection.
       */
      override fun sceneChangeDetect(sceneChangeDetect: String) {
        cdkBuilder.sceneChangeDetect(sceneChangeDetect)
      }

      /**
       * @param slices Number of slices per picture.
       * Must be less than or equal to the number of macroblock rows for progressive pictures, and
       * less than or equal to half the number of macroblock rows for interlaced pictures.
       * This field is optional; when no value is specified the encoder will choose the number of
       * slices based on encode resolution.
       */
      override fun slices(slices: Number) {
        cdkBuilder.slices(slices)
      }

      /**
       * @param tier H.265 Tier.
       */
      override fun tier(tier: String) {
        cdkBuilder.tier(tier)
      }

      /**
       * @param tileHeight the value to be set.
       */
      override fun tileHeight(tileHeight: Number) {
        cdkBuilder.tileHeight(tileHeight)
      }

      /**
       * @param tilePadding the value to be set.
       */
      override fun tilePadding(tilePadding: String) {
        cdkBuilder.tilePadding(tilePadding)
      }

      /**
       * @param tileWidth the value to be set.
       */
      override fun tileWidth(tileWidth: Number) {
        cdkBuilder.tileWidth(tileWidth)
      }

      /**
       * @param timecodeBurninSettings the value to be set.
       */
      override fun timecodeBurninSettings(timecodeBurninSettings: IResolvable) {
        cdkBuilder.timecodeBurninSettings(timecodeBurninSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param timecodeBurninSettings the value to be set.
       */
      override fun timecodeBurninSettings(timecodeBurninSettings: TimecodeBurninSettingsProperty) {
        cdkBuilder.timecodeBurninSettings(timecodeBurninSettings.let(TimecodeBurninSettingsProperty.Companion::unwrap))
      }

      /**
       * @param timecodeBurninSettings the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("04610e4a9dbce0540320e1fc4806b5539e5ba8c856e69ea2953f7f2cdd2780a1")
      override
          fun timecodeBurninSettings(timecodeBurninSettings: TimecodeBurninSettingsProperty.Builder.() -> Unit):
          Unit = timecodeBurninSettings(TimecodeBurninSettingsProperty(timecodeBurninSettings))

      /**
       * @param timecodeInsertion Determines how timecodes should be inserted into the video
       * elementary stream.
       * * 'disabled': Do not include timecodes
       * * 'picTimingSei': Pass through picture timing SEI messages from the source specified in
       * Timecode Config
       */
      override fun timecodeInsertion(timecodeInsertion: String) {
        cdkBuilder.timecodeInsertion(timecodeInsertion)
      }

      /**
       * @param treeblockSize the value to be set.
       */
      override fun treeblockSize(treeblockSize: String) {
        cdkBuilder.treeblockSize(treeblockSize)
      }

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.H265SettingsProperty
          = cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.H265SettingsProperty,
    ) : CdkObject(cdkObject),
        H265SettingsProperty {
      /**
       * Adaptive quantization.
       *
       * Allows intra-frame quantizers to vary to improve visual quality.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-adaptivequantization)
       */
      override fun adaptiveQuantization(): String? = unwrap(this).getAdaptiveQuantization()

      /**
       * Indicates that AFD values will be written into the output stream.
       *
       * If afdSignaling is "auto", the system will try to preserve the input AFD value (in cases
       * where multiple AFD values are valid). If set to "fixed", the AFD value will be the value
       * configured in the fixedAfd parameter.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-afdsignaling)
       */
      override fun afdSignaling(): String? = unwrap(this).getAfdSignaling()

      /**
       * Whether or not EML should insert an Alternative Transfer Function SEI message to support
       * backwards compatibility with non-HDR decoders and displays.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-alternativetransferfunction)
       */
      override fun alternativeTransferFunction(): String? =
          unwrap(this).getAlternativeTransferFunction()

      /**
       * Average bitrate in bits/second.
       *
       * Required when the rate control mode is VBR or CBR. Not used for QVBR. In an MS Smooth
       * output group, each output must have a unique value when its bitrate is rounded down to the
       * nearest multiple of 1000.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-bitrate)
       */
      override fun bitrate(): Number? = unwrap(this).getBitrate()

      /**
       * Size of buffer (HRD buffer model) in bits.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-bufsize)
       */
      override fun bufSize(): Number? = unwrap(this).getBufSize()

      /**
       * Includes colorspace metadata in the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-colormetadata)
       */
      override fun colorMetadata(): String? = unwrap(this).getColorMetadata()

      /**
       * Color Space settings.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-colorspacesettings)
       */
      override fun colorSpaceSettings(): Any? = unwrap(this).getColorSpaceSettings()

      /**
       * Optional filters that you can apply to an encode.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-filtersettings)
       */
      override fun filterSettings(): Any? = unwrap(this).getFilterSettings()

      /**
       * Four bit AFD value to write on all frames of video in the output stream.
       *
       * Only valid when afdSignaling is set to 'Fixed'.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-fixedafd)
       */
      override fun fixedAfd(): String? = unwrap(this).getFixedAfd()

      /**
       * If set to enabled, adjust quantization within each frame to reduce flicker or 'pop' on
       * I-frames.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-flickeraq)
       */
      override fun flickerAq(): String? = unwrap(this).getFlickerAq()

      /**
       * Framerate denominator.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-frameratedenominator)
       */
      override fun framerateDenominator(): Number? = unwrap(this).getFramerateDenominator()

      /**
       * Framerate numerator - framerate is a fraction, e.g. 24000 / 1001 = 23.976 fps.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-frameratenumerator)
       */
      override fun framerateNumerator(): Number? = unwrap(this).getFramerateNumerator()

      /**
       * Frequency of closed GOPs.
       *
       * In streaming applications, it is recommended that this be set to 1 so a decoder joining
       * mid-stream will receive an IDR frame as quickly as possible. Setting this value to 0 will
       * break output segmenting.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-gopclosedcadence)
       */
      override fun gopClosedCadence(): Number? = unwrap(this).getGopClosedCadence()

      /**
       * GOP size (keyframe interval) in units of either frames or seconds per gopSizeUnits.
       *
       * If gopSizeUnits is frames, gopSize must be an integer and must be greater than or equal to
       * 1.
       * If gopSizeUnits is seconds, gopSize must be greater than 0, but need not be an integer.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-gopsize)
       */
      override fun gopSize(): Number? = unwrap(this).getGopSize()

      /**
       * Indicates if the gopSize is specified in frames or seconds.
       *
       * If seconds the system will convert the gopSize into a frame count at run time.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-gopsizeunits)
       */
      override fun gopSizeUnits(): String? = unwrap(this).getGopSizeUnits()

      /**
       * H.265 Level.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-level)
       */
      override fun level(): String? = unwrap(this).getLevel()

      /**
       * Amount of lookahead.
       *
       * A value of low can decrease latency and memory usage, while high can produce better quality
       * for certain content.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-lookaheadratecontrol)
       */
      override fun lookAheadRateControl(): String? = unwrap(this).getLookAheadRateControl()

      /**
       * For QVBR: See the tooltip for Quality level.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-maxbitrate)
       */
      override fun maxBitrate(): Number? = unwrap(this).getMaxBitrate()

      /**
       * Only meaningful if sceneChangeDetect is set to enabled.
       *
       * Defaults to 5 if multiplex rate control is used. Enforces separation between repeated
       * (cadence) I-frames and I-frames inserted by Scene Change Detection. If a scene change I-frame
       * is within I-interval frames of a cadence I-frame, the GOP is shrunk and/or stretched to the
       * scene change I-frame. GOP stretch requires enabling lookahead as well as setting I-interval.
       * The normal cadence resumes for the next GOP. Note: Maximum GOP stretch = GOP size +
       * Min-I-interval - 1
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-miniinterval)
       */
      override fun minIInterval(): Number? = unwrap(this).getMinIInterval()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-mvoverpictureboundaries)
       */
      override fun mvOverPictureBoundaries(): String? = unwrap(this).getMvOverPictureBoundaries()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-mvtemporalpredictor)
       */
      override fun mvTemporalPredictor(): String? = unwrap(this).getMvTemporalPredictor()

      /**
       * Pixel Aspect Ratio denominator.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-pardenominator)
       */
      override fun parDenominator(): Number? = unwrap(this).getParDenominator()

      /**
       * Pixel Aspect Ratio numerator.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-parnumerator)
       */
      override fun parNumerator(): Number? = unwrap(this).getParNumerator()

      /**
       * H.265 Profile.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-profile)
       */
      override fun profile(): String? = unwrap(this).getProfile()

      /**
       * Controls the target quality for the video encode.
       *
       * Applies only when the rate control mode is QVBR. Set values for the QVBR quality level
       * field and Max bitrate field that suit your most important viewing devices. Recommended values
       * are:
       *
       * * Primary screen: Quality level: 8 to 10. Max bitrate: 4M
       * * PC or tablet: Quality level: 7. Max bitrate: 1.5M to 3M
       * * Smartphone: Quality level: 6. Max bitrate: 1M to 1.5M
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-qvbrqualitylevel)
       */
      override fun qvbrQualityLevel(): Number? = unwrap(this).getQvbrQualityLevel()

      /**
       * Rate control mode.
       *
       * QVBR: Quality will match the specified quality level except when it is constrained by the
       * maximum bitrate. Recommended if you or your viewers pay for bandwidth. CBR: Quality varies,
       * depending on the video complexity. Recommended only if you distribute
       * your assets to devices that cannot handle variable bitrates. Multiplex: This rate control
       * mode is only supported (and is required) when the video is being
       * delivered to a MediaLive Multiplex in which case the rate control configuration is
       * controlled
       * by the properties within the Multiplex Program.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-ratecontrolmode)
       */
      override fun rateControlMode(): String? = unwrap(this).getRateControlMode()

      /**
       * Sets the scan type of the output to progressive or top-field-first interlaced.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-scantype)
       */
      override fun scanType(): String? = unwrap(this).getScanType()

      /**
       * Scene change detection.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-scenechangedetect)
       */
      override fun sceneChangeDetect(): String? = unwrap(this).getSceneChangeDetect()

      /**
       * Number of slices per picture.
       *
       * Must be less than or equal to the number of macroblock rows for progressive pictures, and
       * less than or equal to half the number of macroblock rows for interlaced pictures.
       * This field is optional; when no value is specified the encoder will choose the number of
       * slices based on encode resolution.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-slices)
       */
      override fun slices(): Number? = unwrap(this).getSlices()

      /**
       * H.265 Tier.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-tier)
       */
      override fun tier(): String? = unwrap(this).getTier()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-tileheight)
       */
      override fun tileHeight(): Number? = unwrap(this).getTileHeight()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-tilepadding)
       */
      override fun tilePadding(): String? = unwrap(this).getTilePadding()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-tilewidth)
       */
      override fun tileWidth(): Number? = unwrap(this).getTileWidth()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-timecodeburninsettings)
       */
      override fun timecodeBurninSettings(): Any? = unwrap(this).getTimecodeBurninSettings()

      /**
       * Determines how timecodes should be inserted into the video elementary stream.
       *
       * * 'disabled': Do not include timecodes
       * * 'picTimingSei': Pass through picture timing SEI messages from the source specified in
       * Timecode Config
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-timecodeinsertion)
       */
      override fun timecodeInsertion(): String? = unwrap(this).getTimecodeInsertion()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-treeblocksize)
       */
      override fun treeblockSize(): String? = unwrap(this).getTreeblockSize()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): H265SettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.H265SettingsProperty):
          H265SettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? H265SettingsProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: H265SettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.H265SettingsProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.H265SettingsProperty
    }
  }

  /**
   * Hdr10 Settings.
   *
   * The parents of this entity are H265ColorSpaceSettings (for color space settings in the output)
   * and VideoSelectorColorSpaceSettings (for color space settings in the input).
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * Hdr10SettingsProperty hdr10SettingsProperty = Hdr10SettingsProperty.builder()
   * .maxCll(123)
   * .maxFall(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hdr10settings.html)
   */
  public interface Hdr10SettingsProperty {
    /**
     * Maximum Content Light Level An integer metadata value defining the maximum light level, in
     * nits, of any single pixel within an encoded HDR video stream or file.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hdr10settings.html#cfn-medialive-channel-hdr10settings-maxcll)
     */
    public fun maxCll(): Number? = unwrap(this).getMaxCll()

    /**
     * Maximum Frame Average Light Level An integer metadata value defining the maximum average
     * light level, in nits, for any single frame within an encoded HDR video stream or file.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hdr10settings.html#cfn-medialive-channel-hdr10settings-maxfall)
     */
    public fun maxFall(): Number? = unwrap(this).getMaxFall()

    /**
     * A builder for [Hdr10SettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param maxCll Maximum Content Light Level An integer metadata value defining the maximum
       * light level, in nits, of any single pixel within an encoded HDR video stream or file.
       */
      public fun maxCll(maxCll: Number)

      /**
       * @param maxFall Maximum Frame Average Light Level An integer metadata value defining the
       * maximum average light level, in nits, for any single frame within an encoded HDR video stream
       * or file.
       */
      public fun maxFall(maxFall: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.Hdr10SettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.Hdr10SettingsProperty.builder()

      /**
       * @param maxCll Maximum Content Light Level An integer metadata value defining the maximum
       * light level, in nits, of any single pixel within an encoded HDR video stream or file.
       */
      override fun maxCll(maxCll: Number) {
        cdkBuilder.maxCll(maxCll)
      }

      /**
       * @param maxFall Maximum Frame Average Light Level An integer metadata value defining the
       * maximum average light level, in nits, for any single frame within an encoded HDR video stream
       * or file.
       */
      override fun maxFall(maxFall: Number) {
        cdkBuilder.maxFall(maxFall)
      }

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.Hdr10SettingsProperty
          = cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Hdr10SettingsProperty,
    ) : CdkObject(cdkObject),
        Hdr10SettingsProperty {
      /**
       * Maximum Content Light Level An integer metadata value defining the maximum light level, in
       * nits, of any single pixel within an encoded HDR video stream or file.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hdr10settings.html#cfn-medialive-channel-hdr10settings-maxcll)
       */
      override fun maxCll(): Number? = unwrap(this).getMaxCll()

      /**
       * Maximum Frame Average Light Level An integer metadata value defining the maximum average
       * light level, in nits, for any single frame within an encoded HDR video stream or file.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hdr10settings.html#cfn-medialive-channel-hdr10settings-maxfall)
       */
      override fun maxFall(): Number? = unwrap(this).getMaxFall()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): Hdr10SettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Hdr10SettingsProperty):
          Hdr10SettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? Hdr10SettingsProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: Hdr10SettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.Hdr10SettingsProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.Hdr10SettingsProperty
    }
  }

  /**
   * The Akamai settings in an HLS output.
   *
   * The parent of this entity is HlsCdnSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * HlsAkamaiSettingsProperty hlsAkamaiSettingsProperty = HlsAkamaiSettingsProperty.builder()
   * .connectionRetryInterval(123)
   * .filecacheDuration(123)
   * .httpTransferMode("httpTransferMode")
   * .numRetries(123)
   * .restartDelay(123)
   * .salt("salt")
   * .token("token")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsakamaisettings.html)
   */
  public interface HlsAkamaiSettingsProperty {
    /**
     * The number of seconds to wait before retrying a connection to the CDN if the connection is
     * lost.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsakamaisettings.html#cfn-medialive-channel-hlsakamaisettings-connectionretryinterval)
     */
    public fun connectionRetryInterval(): Number? = unwrap(this).getConnectionRetryInterval()

    /**
     * The size, in seconds, of the file cache for streaming outputs.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsakamaisettings.html#cfn-medialive-channel-hlsakamaisettings-filecacheduration)
     */
    public fun filecacheDuration(): Number? = unwrap(this).getFilecacheDuration()

    /**
     * Specifies whether to use chunked transfer encoding to Akamai.
     *
     * To enable this feature, contact Akamai.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsakamaisettings.html#cfn-medialive-channel-hlsakamaisettings-httptransfermode)
     */
    public fun httpTransferMode(): String? = unwrap(this).getHttpTransferMode()

    /**
     * The number of retry attempts that will be made before the channel is put into an error state.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsakamaisettings.html#cfn-medialive-channel-hlsakamaisettings-numretries)
     */
    public fun numRetries(): Number? = unwrap(this).getNumRetries()

    /**
     * If a streaming output fails, the number of seconds to wait until a restart is initiated.
     *
     * A value of 0 means never restart.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsakamaisettings.html#cfn-medialive-channel-hlsakamaisettings-restartdelay)
     */
    public fun restartDelay(): Number? = unwrap(this).getRestartDelay()

    /**
     * The salt for authenticated Akamai.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsakamaisettings.html#cfn-medialive-channel-hlsakamaisettings-salt)
     */
    public fun salt(): String? = unwrap(this).getSalt()

    /**
     * The token parameter for authenticated Akamai.
     *
     * If this is not specified, *gda* is used.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsakamaisettings.html#cfn-medialive-channel-hlsakamaisettings-token)
     */
    public fun token(): String? = unwrap(this).getToken()

    /**
     * A builder for [HlsAkamaiSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param connectionRetryInterval The number of seconds to wait before retrying a connection
       * to the CDN if the connection is lost.
       */
      public fun connectionRetryInterval(connectionRetryInterval: Number)

      /**
       * @param filecacheDuration The size, in seconds, of the file cache for streaming outputs.
       */
      public fun filecacheDuration(filecacheDuration: Number)

      /**
       * @param httpTransferMode Specifies whether to use chunked transfer encoding to Akamai.
       * To enable this feature, contact Akamai.
       */
      public fun httpTransferMode(httpTransferMode: String)

      /**
       * @param numRetries The number of retry attempts that will be made before the channel is put
       * into an error state.
       */
      public fun numRetries(numRetries: Number)

      /**
       * @param restartDelay If a streaming output fails, the number of seconds to wait until a
       * restart is initiated.
       * A value of 0 means never restart.
       */
      public fun restartDelay(restartDelay: Number)

      /**
       * @param salt The salt for authenticated Akamai.
       */
      public fun salt(salt: String)

      /**
       * @param token The token parameter for authenticated Akamai.
       * If this is not specified, *gda* is used.
       */
      public fun token(token: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.HlsAkamaiSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.HlsAkamaiSettingsProperty.builder()

      /**
       * @param connectionRetryInterval The number of seconds to wait before retrying a connection
       * to the CDN if the connection is lost.
       */
      override fun connectionRetryInterval(connectionRetryInterval: Number) {
        cdkBuilder.connectionRetryInterval(connectionRetryInterval)
      }

      /**
       * @param filecacheDuration The size, in seconds, of the file cache for streaming outputs.
       */
      override fun filecacheDuration(filecacheDuration: Number) {
        cdkBuilder.filecacheDuration(filecacheDuration)
      }

      /**
       * @param httpTransferMode Specifies whether to use chunked transfer encoding to Akamai.
       * To enable this feature, contact Akamai.
       */
      override fun httpTransferMode(httpTransferMode: String) {
        cdkBuilder.httpTransferMode(httpTransferMode)
      }

      /**
       * @param numRetries The number of retry attempts that will be made before the channel is put
       * into an error state.
       */
      override fun numRetries(numRetries: Number) {
        cdkBuilder.numRetries(numRetries)
      }

      /**
       * @param restartDelay If a streaming output fails, the number of seconds to wait until a
       * restart is initiated.
       * A value of 0 means never restart.
       */
      override fun restartDelay(restartDelay: Number) {
        cdkBuilder.restartDelay(restartDelay)
      }

      /**
       * @param salt The salt for authenticated Akamai.
       */
      override fun salt(salt: String) {
        cdkBuilder.salt(salt)
      }

      /**
       * @param token The token parameter for authenticated Akamai.
       * If this is not specified, *gda* is used.
       */
      override fun token(token: String) {
        cdkBuilder.token(token)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.HlsAkamaiSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.HlsAkamaiSettingsProperty,
    ) : CdkObject(cdkObject),
        HlsAkamaiSettingsProperty {
      /**
       * The number of seconds to wait before retrying a connection to the CDN if the connection is
       * lost.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsakamaisettings.html#cfn-medialive-channel-hlsakamaisettings-connectionretryinterval)
       */
      override fun connectionRetryInterval(): Number? = unwrap(this).getConnectionRetryInterval()

      /**
       * The size, in seconds, of the file cache for streaming outputs.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsakamaisettings.html#cfn-medialive-channel-hlsakamaisettings-filecacheduration)
       */
      override fun filecacheDuration(): Number? = unwrap(this).getFilecacheDuration()

      /**
       * Specifies whether to use chunked transfer encoding to Akamai.
       *
       * To enable this feature, contact Akamai.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsakamaisettings.html#cfn-medialive-channel-hlsakamaisettings-httptransfermode)
       */
      override fun httpTransferMode(): String? = unwrap(this).getHttpTransferMode()

      /**
       * The number of retry attempts that will be made before the channel is put into an error
       * state.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsakamaisettings.html#cfn-medialive-channel-hlsakamaisettings-numretries)
       */
      override fun numRetries(): Number? = unwrap(this).getNumRetries()

      /**
       * If a streaming output fails, the number of seconds to wait until a restart is initiated.
       *
       * A value of 0 means never restart.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsakamaisettings.html#cfn-medialive-channel-hlsakamaisettings-restartdelay)
       */
      override fun restartDelay(): Number? = unwrap(this).getRestartDelay()

      /**
       * The salt for authenticated Akamai.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsakamaisettings.html#cfn-medialive-channel-hlsakamaisettings-salt)
       */
      override fun salt(): String? = unwrap(this).getSalt()

      /**
       * The token parameter for authenticated Akamai.
       *
       * If this is not specified, *gda* is used.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsakamaisettings.html#cfn-medialive-channel-hlsakamaisettings-token)
       */
      override fun token(): String? = unwrap(this).getToken()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): HlsAkamaiSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.HlsAkamaiSettingsProperty):
          HlsAkamaiSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          HlsAkamaiSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: HlsAkamaiSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.HlsAkamaiSettingsProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.HlsAkamaiSettingsProperty
    }
  }

  /**
   * The configuration of HLS Basic Put Settings.
   *
   * The parent of this entity is HlsCdnSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * HlsBasicPutSettingsProperty hlsBasicPutSettingsProperty = HlsBasicPutSettingsProperty.builder()
   * .connectionRetryInterval(123)
   * .filecacheDuration(123)
   * .numRetries(123)
   * .restartDelay(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsbasicputsettings.html)
   */
  public interface HlsBasicPutSettingsProperty {
    /**
     * The number of seconds to wait before retrying a connection to the CDN if the connection is
     * lost.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsbasicputsettings.html#cfn-medialive-channel-hlsbasicputsettings-connectionretryinterval)
     */
    public fun connectionRetryInterval(): Number? = unwrap(this).getConnectionRetryInterval()

    /**
     * The size, in seconds, of the file cache for streaming outputs.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsbasicputsettings.html#cfn-medialive-channel-hlsbasicputsettings-filecacheduration)
     */
    public fun filecacheDuration(): Number? = unwrap(this).getFilecacheDuration()

    /**
     * The number of retry attempts that MediaLive makes before the channel is put into an error
     * state.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsbasicputsettings.html#cfn-medialive-channel-hlsbasicputsettings-numretries)
     */
    public fun numRetries(): Number? = unwrap(this).getNumRetries()

    /**
     * If a streaming output fails, the number of seconds to wait until a restart is initiated.
     *
     * A value of 0 means never restart.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsbasicputsettings.html#cfn-medialive-channel-hlsbasicputsettings-restartdelay)
     */
    public fun restartDelay(): Number? = unwrap(this).getRestartDelay()

    /**
     * A builder for [HlsBasicPutSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param connectionRetryInterval The number of seconds to wait before retrying a connection
       * to the CDN if the connection is lost.
       */
      public fun connectionRetryInterval(connectionRetryInterval: Number)

      /**
       * @param filecacheDuration The size, in seconds, of the file cache for streaming outputs.
       */
      public fun filecacheDuration(filecacheDuration: Number)

      /**
       * @param numRetries The number of retry attempts that MediaLive makes before the channel is
       * put into an error state.
       */
      public fun numRetries(numRetries: Number)

      /**
       * @param restartDelay If a streaming output fails, the number of seconds to wait until a
       * restart is initiated.
       * A value of 0 means never restart.
       */
      public fun restartDelay(restartDelay: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.HlsBasicPutSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.HlsBasicPutSettingsProperty.builder()

      /**
       * @param connectionRetryInterval The number of seconds to wait before retrying a connection
       * to the CDN if the connection is lost.
       */
      override fun connectionRetryInterval(connectionRetryInterval: Number) {
        cdkBuilder.connectionRetryInterval(connectionRetryInterval)
      }

      /**
       * @param filecacheDuration The size, in seconds, of the file cache for streaming outputs.
       */
      override fun filecacheDuration(filecacheDuration: Number) {
        cdkBuilder.filecacheDuration(filecacheDuration)
      }

      /**
       * @param numRetries The number of retry attempts that MediaLive makes before the channel is
       * put into an error state.
       */
      override fun numRetries(numRetries: Number) {
        cdkBuilder.numRetries(numRetries)
      }

      /**
       * @param restartDelay If a streaming output fails, the number of seconds to wait until a
       * restart is initiated.
       * A value of 0 means never restart.
       */
      override fun restartDelay(restartDelay: Number) {
        cdkBuilder.restartDelay(restartDelay)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.HlsBasicPutSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.HlsBasicPutSettingsProperty,
    ) : CdkObject(cdkObject),
        HlsBasicPutSettingsProperty {
      /**
       * The number of seconds to wait before retrying a connection to the CDN if the connection is
       * lost.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsbasicputsettings.html#cfn-medialive-channel-hlsbasicputsettings-connectionretryinterval)
       */
      override fun connectionRetryInterval(): Number? = unwrap(this).getConnectionRetryInterval()

      /**
       * The size, in seconds, of the file cache for streaming outputs.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsbasicputsettings.html#cfn-medialive-channel-hlsbasicputsettings-filecacheduration)
       */
      override fun filecacheDuration(): Number? = unwrap(this).getFilecacheDuration()

      /**
       * The number of retry attempts that MediaLive makes before the channel is put into an error
       * state.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsbasicputsettings.html#cfn-medialive-channel-hlsbasicputsettings-numretries)
       */
      override fun numRetries(): Number? = unwrap(this).getNumRetries()

      /**
       * If a streaming output fails, the number of seconds to wait until a restart is initiated.
       *
       * A value of 0 means never restart.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsbasicputsettings.html#cfn-medialive-channel-hlsbasicputsettings-restartdelay)
       */
      override fun restartDelay(): Number? = unwrap(this).getRestartDelay()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): HlsBasicPutSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.HlsBasicPutSettingsProperty):
          HlsBasicPutSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          HlsBasicPutSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: HlsBasicPutSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.HlsBasicPutSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.HlsBasicPutSettingsProperty
    }
  }

  /**
   * The settings for the CDN of an HLS output.
   *
   * The parent of this entity is HlsGroupSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * HlsCdnSettingsProperty hlsCdnSettingsProperty = HlsCdnSettingsProperty.builder()
   * .hlsAkamaiSettings(HlsAkamaiSettingsProperty.builder()
   * .connectionRetryInterval(123)
   * .filecacheDuration(123)
   * .httpTransferMode("httpTransferMode")
   * .numRetries(123)
   * .restartDelay(123)
   * .salt("salt")
   * .token("token")
   * .build())
   * .hlsBasicPutSettings(HlsBasicPutSettingsProperty.builder()
   * .connectionRetryInterval(123)
   * .filecacheDuration(123)
   * .numRetries(123)
   * .restartDelay(123)
   * .build())
   * .hlsMediaStoreSettings(HlsMediaStoreSettingsProperty.builder()
   * .connectionRetryInterval(123)
   * .filecacheDuration(123)
   * .mediaStoreStorageClass("mediaStoreStorageClass")
   * .numRetries(123)
   * .restartDelay(123)
   * .build())
   * .hlsS3Settings(HlsS3SettingsProperty.builder()
   * .cannedAcl("cannedAcl")
   * .build())
   * .hlsWebdavSettings(HlsWebdavSettingsProperty.builder()
   * .connectionRetryInterval(123)
   * .filecacheDuration(123)
   * .httpTransferMode("httpTransferMode")
   * .numRetries(123)
   * .restartDelay(123)
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlscdnsettings.html)
   */
  public interface HlsCdnSettingsProperty {
    /**
     * Sets up Akamai as the downstream system for the HLS output group.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlscdnsettings.html#cfn-medialive-channel-hlscdnsettings-hlsakamaisettings)
     */
    public fun hlsAkamaiSettings(): Any? = unwrap(this).getHlsAkamaiSettings()

    /**
     * The settings for Basic Put for the HLS output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlscdnsettings.html#cfn-medialive-channel-hlscdnsettings-hlsbasicputsettings)
     */
    public fun hlsBasicPutSettings(): Any? = unwrap(this).getHlsBasicPutSettings()

    /**
     * Sets up MediaStore as the destination for the HLS output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlscdnsettings.html#cfn-medialive-channel-hlscdnsettings-hlsmediastoresettings)
     */
    public fun hlsMediaStoreSettings(): Any? = unwrap(this).getHlsMediaStoreSettings()

    /**
     * Sets up Amazon S3 as the destination for this HLS output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlscdnsettings.html#cfn-medialive-channel-hlscdnsettings-hlss3settings)
     */
    public fun hlsS3Settings(): Any? = unwrap(this).getHlsS3Settings()

    /**
     * The settings for Web VTT captions in the HLS output group.
     *
     * The parent of this entity is HlsGroupSettings.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlscdnsettings.html#cfn-medialive-channel-hlscdnsettings-hlswebdavsettings)
     */
    public fun hlsWebdavSettings(): Any? = unwrap(this).getHlsWebdavSettings()

    /**
     * A builder for [HlsCdnSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param hlsAkamaiSettings Sets up Akamai as the downstream system for the HLS output group.
       */
      public fun hlsAkamaiSettings(hlsAkamaiSettings: IResolvable)

      /**
       * @param hlsAkamaiSettings Sets up Akamai as the downstream system for the HLS output group.
       */
      public fun hlsAkamaiSettings(hlsAkamaiSettings: HlsAkamaiSettingsProperty)

      /**
       * @param hlsAkamaiSettings Sets up Akamai as the downstream system for the HLS output group.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("885a3ec706d60f0d26783b48ab433319baea0082ea71643fbe0c2562ac252eef")
      public fun hlsAkamaiSettings(hlsAkamaiSettings: HlsAkamaiSettingsProperty.Builder.() -> Unit)

      /**
       * @param hlsBasicPutSettings The settings for Basic Put for the HLS output.
       */
      public fun hlsBasicPutSettings(hlsBasicPutSettings: IResolvable)

      /**
       * @param hlsBasicPutSettings The settings for Basic Put for the HLS output.
       */
      public fun hlsBasicPutSettings(hlsBasicPutSettings: HlsBasicPutSettingsProperty)

      /**
       * @param hlsBasicPutSettings The settings for Basic Put for the HLS output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("5d0233d270f0c3c7010e08227c0543cbb684f6ee5c6563e28d7cc38dd2475490")
      public
          fun hlsBasicPutSettings(hlsBasicPutSettings: HlsBasicPutSettingsProperty.Builder.() -> Unit)

      /**
       * @param hlsMediaStoreSettings Sets up MediaStore as the destination for the HLS output.
       */
      public fun hlsMediaStoreSettings(hlsMediaStoreSettings: IResolvable)

      /**
       * @param hlsMediaStoreSettings Sets up MediaStore as the destination for the HLS output.
       */
      public fun hlsMediaStoreSettings(hlsMediaStoreSettings: HlsMediaStoreSettingsProperty)

      /**
       * @param hlsMediaStoreSettings Sets up MediaStore as the destination for the HLS output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("5f183c2557fad997b0cd46ac5ebef6e52f84359853946ca6759adce7925db6d6")
      public
          fun hlsMediaStoreSettings(hlsMediaStoreSettings: HlsMediaStoreSettingsProperty.Builder.() -> Unit)

      /**
       * @param hlsS3Settings Sets up Amazon S3 as the destination for this HLS output.
       */
      public fun hlsS3Settings(hlsS3Settings: IResolvable)

      /**
       * @param hlsS3Settings Sets up Amazon S3 as the destination for this HLS output.
       */
      public fun hlsS3Settings(hlsS3Settings: HlsS3SettingsProperty)

      /**
       * @param hlsS3Settings Sets up Amazon S3 as the destination for this HLS output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("0088a0d76d24fa0a8896362c68d43d2c23752a7fda8885846cdf354571a30887")
      public fun hlsS3Settings(hlsS3Settings: HlsS3SettingsProperty.Builder.() -> Unit)

      /**
       * @param hlsWebdavSettings The settings for Web VTT captions in the HLS output group.
       * The parent of this entity is HlsGroupSettings.
       */
      public fun hlsWebdavSettings(hlsWebdavSettings: IResolvable)

      /**
       * @param hlsWebdavSettings The settings for Web VTT captions in the HLS output group.
       * The parent of this entity is HlsGroupSettings.
       */
      public fun hlsWebdavSettings(hlsWebdavSettings: HlsWebdavSettingsProperty)

      /**
       * @param hlsWebdavSettings The settings for Web VTT captions in the HLS output group.
       * The parent of this entity is HlsGroupSettings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("51a72e77c66d4f6e5c1a9f0ca490da16ebc207f7ee5cabcffb332154678ab919")
      public fun hlsWebdavSettings(hlsWebdavSettings: HlsWebdavSettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.HlsCdnSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.HlsCdnSettingsProperty.builder()

      /**
       * @param hlsAkamaiSettings Sets up Akamai as the downstream system for the HLS output group.
       */
      override fun hlsAkamaiSettings(hlsAkamaiSettings: IResolvable) {
        cdkBuilder.hlsAkamaiSettings(hlsAkamaiSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param hlsAkamaiSettings Sets up Akamai as the downstream system for the HLS output group.
       */
      override fun hlsAkamaiSettings(hlsAkamaiSettings: HlsAkamaiSettingsProperty) {
        cdkBuilder.hlsAkamaiSettings(hlsAkamaiSettings.let(HlsAkamaiSettingsProperty.Companion::unwrap))
      }

      /**
       * @param hlsAkamaiSettings Sets up Akamai as the downstream system for the HLS output group.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("885a3ec706d60f0d26783b48ab433319baea0082ea71643fbe0c2562ac252eef")
      override
          fun hlsAkamaiSettings(hlsAkamaiSettings: HlsAkamaiSettingsProperty.Builder.() -> Unit):
          Unit = hlsAkamaiSettings(HlsAkamaiSettingsProperty(hlsAkamaiSettings))

      /**
       * @param hlsBasicPutSettings The settings for Basic Put for the HLS output.
       */
      override fun hlsBasicPutSettings(hlsBasicPutSettings: IResolvable) {
        cdkBuilder.hlsBasicPutSettings(hlsBasicPutSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param hlsBasicPutSettings The settings for Basic Put for the HLS output.
       */
      override fun hlsBasicPutSettings(hlsBasicPutSettings: HlsBasicPutSettingsProperty) {
        cdkBuilder.hlsBasicPutSettings(hlsBasicPutSettings.let(HlsBasicPutSettingsProperty.Companion::unwrap))
      }

      /**
       * @param hlsBasicPutSettings The settings for Basic Put for the HLS output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("5d0233d270f0c3c7010e08227c0543cbb684f6ee5c6563e28d7cc38dd2475490")
      override
          fun hlsBasicPutSettings(hlsBasicPutSettings: HlsBasicPutSettingsProperty.Builder.() -> Unit):
          Unit = hlsBasicPutSettings(HlsBasicPutSettingsProperty(hlsBasicPutSettings))

      /**
       * @param hlsMediaStoreSettings Sets up MediaStore as the destination for the HLS output.
       */
      override fun hlsMediaStoreSettings(hlsMediaStoreSettings: IResolvable) {
        cdkBuilder.hlsMediaStoreSettings(hlsMediaStoreSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param hlsMediaStoreSettings Sets up MediaStore as the destination for the HLS output.
       */
      override fun hlsMediaStoreSettings(hlsMediaStoreSettings: HlsMediaStoreSettingsProperty) {
        cdkBuilder.hlsMediaStoreSettings(hlsMediaStoreSettings.let(HlsMediaStoreSettingsProperty.Companion::unwrap))
      }

      /**
       * @param hlsMediaStoreSettings Sets up MediaStore as the destination for the HLS output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("5f183c2557fad997b0cd46ac5ebef6e52f84359853946ca6759adce7925db6d6")
      override
          fun hlsMediaStoreSettings(hlsMediaStoreSettings: HlsMediaStoreSettingsProperty.Builder.() -> Unit):
          Unit = hlsMediaStoreSettings(HlsMediaStoreSettingsProperty(hlsMediaStoreSettings))

      /**
       * @param hlsS3Settings Sets up Amazon S3 as the destination for this HLS output.
       */
      override fun hlsS3Settings(hlsS3Settings: IResolvable) {
        cdkBuilder.hlsS3Settings(hlsS3Settings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param hlsS3Settings Sets up Amazon S3 as the destination for this HLS output.
       */
      override fun hlsS3Settings(hlsS3Settings: HlsS3SettingsProperty) {
        cdkBuilder.hlsS3Settings(hlsS3Settings.let(HlsS3SettingsProperty.Companion::unwrap))
      }

      /**
       * @param hlsS3Settings Sets up Amazon S3 as the destination for this HLS output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("0088a0d76d24fa0a8896362c68d43d2c23752a7fda8885846cdf354571a30887")
      override fun hlsS3Settings(hlsS3Settings: HlsS3SettingsProperty.Builder.() -> Unit): Unit =
          hlsS3Settings(HlsS3SettingsProperty(hlsS3Settings))

      /**
       * @param hlsWebdavSettings The settings for Web VTT captions in the HLS output group.
       * The parent of this entity is HlsGroupSettings.
       */
      override fun hlsWebdavSettings(hlsWebdavSettings: IResolvable) {
        cdkBuilder.hlsWebdavSettings(hlsWebdavSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param hlsWebdavSettings The settings for Web VTT captions in the HLS output group.
       * The parent of this entity is HlsGroupSettings.
       */
      override fun hlsWebdavSettings(hlsWebdavSettings: HlsWebdavSettingsProperty) {
        cdkBuilder.hlsWebdavSettings(hlsWebdavSettings.let(HlsWebdavSettingsProperty.Companion::unwrap))
      }

      /**
       * @param hlsWebdavSettings The settings for Web VTT captions in the HLS output group.
       * The parent of this entity is HlsGroupSettings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("51a72e77c66d4f6e5c1a9f0ca490da16ebc207f7ee5cabcffb332154678ab919")
      override
          fun hlsWebdavSettings(hlsWebdavSettings: HlsWebdavSettingsProperty.Builder.() -> Unit):
          Unit = hlsWebdavSettings(HlsWebdavSettingsProperty(hlsWebdavSettings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.HlsCdnSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.HlsCdnSettingsProperty,
    ) : CdkObject(cdkObject),
        HlsCdnSettingsProperty {
      /**
       * Sets up Akamai as the downstream system for the HLS output group.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlscdnsettings.html#cfn-medialive-channel-hlscdnsettings-hlsakamaisettings)
       */
      override fun hlsAkamaiSettings(): Any? = unwrap(this).getHlsAkamaiSettings()

      /**
       * The settings for Basic Put for the HLS output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlscdnsettings.html#cfn-medialive-channel-hlscdnsettings-hlsbasicputsettings)
       */
      override fun hlsBasicPutSettings(): Any? = unwrap(this).getHlsBasicPutSettings()

      /**
       * Sets up MediaStore as the destination for the HLS output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlscdnsettings.html#cfn-medialive-channel-hlscdnsettings-hlsmediastoresettings)
       */
      override fun hlsMediaStoreSettings(): Any? = unwrap(this).getHlsMediaStoreSettings()

      /**
       * Sets up Amazon S3 as the destination for this HLS output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlscdnsettings.html#cfn-medialive-channel-hlscdnsettings-hlss3settings)
       */
      override fun hlsS3Settings(): Any? = unwrap(this).getHlsS3Settings()

      /**
       * The settings for Web VTT captions in the HLS output group.
       *
       * The parent of this entity is HlsGroupSettings.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlscdnsettings.html#cfn-medialive-channel-hlscdnsettings-hlswebdavsettings)
       */
      override fun hlsWebdavSettings(): Any? = unwrap(this).getHlsWebdavSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): HlsCdnSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.HlsCdnSettingsProperty):
          HlsCdnSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? HlsCdnSettingsProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: HlsCdnSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.HlsCdnSettingsProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.HlsCdnSettingsProperty
    }
  }

  /**
   * The settings for an HLS output group.
   *
   * The parent of this entity is OutputGroupSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * HlsGroupSettingsProperty hlsGroupSettingsProperty = HlsGroupSettingsProperty.builder()
   * .adMarkers(List.of("adMarkers"))
   * .baseUrlContent("baseUrlContent")
   * .baseUrlContent1("baseUrlContent1")
   * .baseUrlManifest("baseUrlManifest")
   * .baseUrlManifest1("baseUrlManifest1")
   * .captionLanguageMappings(List.of(CaptionLanguageMappingProperty.builder()
   * .captionChannel(123)
   * .languageCode("languageCode")
   * .languageDescription("languageDescription")
   * .build()))
   * .captionLanguageSetting("captionLanguageSetting")
   * .clientCache("clientCache")
   * .codecSpecification("codecSpecification")
   * .constantIv("constantIv")
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .directoryStructure("directoryStructure")
   * .discontinuityTags("discontinuityTags")
   * .encryptionType("encryptionType")
   * .hlsCdnSettings(HlsCdnSettingsProperty.builder()
   * .hlsAkamaiSettings(HlsAkamaiSettingsProperty.builder()
   * .connectionRetryInterval(123)
   * .filecacheDuration(123)
   * .httpTransferMode("httpTransferMode")
   * .numRetries(123)
   * .restartDelay(123)
   * .salt("salt")
   * .token("token")
   * .build())
   * .hlsBasicPutSettings(HlsBasicPutSettingsProperty.builder()
   * .connectionRetryInterval(123)
   * .filecacheDuration(123)
   * .numRetries(123)
   * .restartDelay(123)
   * .build())
   * .hlsMediaStoreSettings(HlsMediaStoreSettingsProperty.builder()
   * .connectionRetryInterval(123)
   * .filecacheDuration(123)
   * .mediaStoreStorageClass("mediaStoreStorageClass")
   * .numRetries(123)
   * .restartDelay(123)
   * .build())
   * .hlsS3Settings(HlsS3SettingsProperty.builder()
   * .cannedAcl("cannedAcl")
   * .build())
   * .hlsWebdavSettings(HlsWebdavSettingsProperty.builder()
   * .connectionRetryInterval(123)
   * .filecacheDuration(123)
   * .httpTransferMode("httpTransferMode")
   * .numRetries(123)
   * .restartDelay(123)
   * .build())
   * .build())
   * .hlsId3SegmentTagging("hlsId3SegmentTagging")
   * .iFrameOnlyPlaylists("iFrameOnlyPlaylists")
   * .incompleteSegmentBehavior("incompleteSegmentBehavior")
   * .indexNSegments(123)
   * .inputLossAction("inputLossAction")
   * .ivInManifest("ivInManifest")
   * .ivSource("ivSource")
   * .keepSegments(123)
   * .keyFormat("keyFormat")
   * .keyFormatVersions("keyFormatVersions")
   * .keyProviderSettings(KeyProviderSettingsProperty.builder()
   * .staticKeySettings(StaticKeySettingsProperty.builder()
   * .keyProviderServer(InputLocationProperty.builder()
   * .passwordParam("passwordParam")
   * .uri("uri")
   * .username("username")
   * .build())
   * .staticKeyValue("staticKeyValue")
   * .build())
   * .build())
   * .manifestCompression("manifestCompression")
   * .manifestDurationFormat("manifestDurationFormat")
   * .minSegmentLength(123)
   * .mode("mode")
   * .outputSelection("outputSelection")
   * .programDateTime("programDateTime")
   * .programDateTimeClock("programDateTimeClock")
   * .programDateTimePeriod(123)
   * .redundantManifest("redundantManifest")
   * .segmentationMode("segmentationMode")
   * .segmentLength(123)
   * .segmentsPerSubdirectory(123)
   * .streamInfResolution("streamInfResolution")
   * .timedMetadataId3Frame("timedMetadataId3Frame")
   * .timedMetadataId3Period(123)
   * .timestampDeltaMilliseconds(123)
   * .tsFileMode("tsFileMode")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html)
   */
  public interface HlsGroupSettingsProperty {
    /**
     * Chooses one or more ad marker types to pass SCTE35 signals through to this group of Apple HLS
     * outputs.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-admarkers)
     */
    public fun adMarkers(): List = unwrap(this).getAdMarkers() ?: emptyList()

    /**
     * A partial URI prefix that will be prepended to each output in the media .m3u8 file. The
     * partial URI prefix can be used if the base manifest is delivered from a different URL than the
     * main .m3u8 file.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-baseurlcontent)
     */
    public fun baseUrlContent(): String? = unwrap(this).getBaseUrlContent()

    /**
     * Optional.
     *
     * One value per output group. This field is required only if you are completing Base URL
     * content A, and the downstream system has notified you that the media files for pipeline 1 of all
     * outputs are in a location different from the media files for pipeline 0.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-baseurlcontent1)
     */
    public fun baseUrlContent1(): String? = unwrap(this).getBaseUrlContent1()

    /**
     * A partial URI prefix that will be prepended to each output in the media .m3u8 file. The
     * partial URI prefix can be used if the base manifest is delivered from a different URL than the
     * main .m3u8 file.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-baseurlmanifest)
     */
    public fun baseUrlManifest(): String? = unwrap(this).getBaseUrlManifest()

    /**
     * Optional.
     *
     * One value per output group. Complete this field only if you are completing Base URL manifest
     * A, and the downstream system has notified you that the child manifest files for pipeline 1 of
     * all outputs are in a location different from the child manifest files for pipeline 0.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-baseurlmanifest1)
     */
    public fun baseUrlManifest1(): String? = unwrap(this).getBaseUrlManifest1()

    /**
     * A mapping of up to 4 captions channels to captions languages.
     *
     * This is meaningful only if captionLanguageSetting is set to "insert."
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-captionlanguagemappings)
     */
    public fun captionLanguageMappings(): Any? = unwrap(this).getCaptionLanguageMappings()

    /**
     * Applies only to 608 embedded output captions.
     *
     * Insert: Include CLOSED-CAPTIONS lines in the manifest. Specify at least one language in the
     * CC1 Language Code field. One CLOSED-CAPTION line is added for each Language Code that you
     * specify. Make sure to specify the languages in the order in which they appear in the original
     * source (if the source is embedded format) or the order of the captions selectors (if the source
     * is other than embedded). Otherwise, languages in the manifest will not match properly with the
     * output captions. None: Include the CLOSED-CAPTIONS=NONE line in the manifest. Omit: Omit any
     * CLOSED-CAPTIONS line from the manifest.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-captionlanguagesetting)
     */
    public fun captionLanguageSetting(): String? = unwrap(this).getCaptionLanguageSetting()

    /**
     * When set to "disabled," sets the #EXT-X-ALLOW-CACHE:no tag in the manifest, which prevents
     * clients from saving media segments for later replay.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-clientcache)
     */
    public fun clientCache(): String? = unwrap(this).getClientCache()

    /**
     * The specification to use (RFC-6381 or the default RFC-4281) during m3u8 playlist generation.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-codecspecification)
     */
    public fun codecSpecification(): String? = unwrap(this).getCodecSpecification()

    /**
     * Used with encryptionType.
     *
     * This is a 128-bit, 16-byte hex value that is represented by a 32-character text string. If
     * ivSource is set to "explicit," this parameter is required and is used as the IV for encryption.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-constantiv)
     */
    public fun constantIv(): String? = unwrap(this).getConstantIv()

    /**
     * A directory or HTTP destination for the HLS segments, manifest files, and encryption keys (if
     * enabled).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-destination)
     */
    public fun destination(): Any? = unwrap(this).getDestination()

    /**
     * Places segments in subdirectories.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-directorystructure)
     */
    public fun directoryStructure(): String? = unwrap(this).getDirectoryStructure()

    /**
     * Specifies whether to insert EXT-X-DISCONTINUITY tags in the HLS child manifests for this
     * output group.
     *
     * Typically, choose Insert because these tags are required in the manifest (according to the
     * HLS specification) and serve an important purpose.
     * Choose Never Insert only if the downstream system is doing real-time failover (without using
     * the MediaLive automatic failover feature) and only if that downstream system has advised you to
     * exclude the tags.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-discontinuitytags)
     */
    public fun discontinuityTags(): String? = unwrap(this).getDiscontinuityTags()

    /**
     * Encrypts the segments with the specified encryption scheme.
     *
     * Exclude this parameter if you don't want encryption.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-encryptiontype)
     */
    public fun encryptionType(): String? = unwrap(this).getEncryptionType()

    /**
     * The parameters that control interactions with the CDN.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-hlscdnsettings)
     */
    public fun hlsCdnSettings(): Any? = unwrap(this).getHlsCdnSettings()

    /**
     * State of HLS ID3 Segment Tagging.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-hlsid3segmenttagging)
     */
    public fun hlsId3SegmentTagging(): String? = unwrap(this).getHlsId3SegmentTagging()

    /**
     * DISABLED: Don't create an I-frame-only manifest, but do create the master and media manifests
     * (according to the Output Selection field).
     *
     * STANDARD: Create an I-frame-only manifest for each output that contains video, as well as the
     * other manifests (according to the Output Selection field). The I-frame manifest contains a
     * #EXT-X-I-FRAMES-ONLY tag to indicate it is I-frame only, and one or more #EXT-X-BYTERANGE
     * entries identifying the I-frame position. For example, #EXT-X-BYTERANGE:160364@1461888".
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-iframeonlyplaylists)
     */
    public fun iFrameOnlyPlaylists(): String? = unwrap(this).getIFrameOnlyPlaylists()

    /**
     * Specifies whether to include the final (incomplete) segment in the media output when the
     * pipeline stops producing output because of a channel stop, a channel pause or a loss of input to
     * the pipeline.
     *
     * Auto means that MediaLive decides whether to include the final segment, depending on the
     * channel class and the types of output groups.
     * Suppress means to never include the incomplete segment. We recommend you choose Auto and let
     * MediaLive control the behavior.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-incompletesegmentbehavior)
     */
    public fun incompleteSegmentBehavior(): String? = unwrap(this).getIncompleteSegmentBehavior()

    /**
     * Applies only if the Mode field is LIVE.
     *
     * Specifies the maximum number of segments in the media manifest file. After this maximum,
     * older segments are removed from the media manifest. This number must be less than or equal to
     * the Keep Segments field.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-indexnsegments)
     */
    public fun indexNSegments(): Number? = unwrap(this).getIndexNSegments()

    /**
     * A parameter that controls output group behavior on an input loss.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-inputlossaction)
     */
    public fun inputLossAction(): String? = unwrap(this).getInputLossAction()

    /**
     * Used with encryptionType.
     *
     * The IV (initialization vector) is a 128-bit number used in conjunction with the key for
     * encrypting blocks. If set to "include," the IV is listed in the manifest. Otherwise, the IV is
     * not in the manifest.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-ivinmanifest)
     */
    public fun ivInManifest(): String? = unwrap(this).getIvInManifest()

    /**
     * Used with encryptionType.
     *
     * The IV (initialization vector) is a 128-bit number used in conjunction with the key for
     * encrypting blocks. If this setting is "followsSegmentNumber," it causes the IV to change every
     * segment (to match the segment number). If this is set to "explicit," you must enter a constantIv
     * value.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-ivsource)
     */
    public fun ivSource(): String? = unwrap(this).getIvSource()

    /**
     * Applies only if the Mode field is LIVE.
     *
     * Specifies the number of media segments (.ts files) to retain in the destination directory.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-keepsegments)
     */
    public fun keepSegments(): Number? = unwrap(this).getKeepSegments()

    /**
     * Specifies how the key is represented in the resource identified by the URI.
     *
     * If the parameter is absent, an implicit value of "identity" is used. A reverse DNS string can
     * also be specified.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-keyformat)
     */
    public fun keyFormat(): String? = unwrap(this).getKeyFormat()

    /**
     * Either a single positive integer version value or a slash-delimited list of version values
     * (1/2/3).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-keyformatversions)
     */
    public fun keyFormatVersions(): String? = unwrap(this).getKeyFormatVersions()

    /**
     * The key provider settings.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-keyprovidersettings)
     */
    public fun keyProviderSettings(): Any? = unwrap(this).getKeyProviderSettings()

    /**
     * When set to gzip, compresses HLS playlist.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-manifestcompression)
     */
    public fun manifestCompression(): String? = unwrap(this).getManifestCompression()

    /**
     * Indicates whether the output manifest should use a floating point or integer values for
     * segment duration.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-manifestdurationformat)
     */
    public fun manifestDurationFormat(): String? = unwrap(this).getManifestDurationFormat()

    /**
     * When set, minimumSegmentLength is enforced by looking ahead and back within the specified
     * range for a nearby avail and extending the segment size if needed.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-minsegmentlength)
     */
    public fun minSegmentLength(): Number? = unwrap(this).getMinSegmentLength()

    /**
     * If "vod," all segments are indexed and kept permanently in the destination and manifest.
     *
     * If "live," only the number segments specified in keepSegments and indexNSegments are kept.
     * Newer segments replace older segments, which might prevent players from rewinding all the way to
     * the beginning of the channel. VOD mode uses HLS EXT-X-PLAYLIST-TYPE of EVENT while the channel
     * is running, converting it to a "VOD" type manifest on completion of the stream.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-mode)
     */
    public fun mode(): String? = unwrap(this).getMode()

    /**
     * MANIFESTSANDSEGMENTS: Generates manifests (the master manifest, if applicable, and media
     * manifests) for this output group.
     *
     * SEGMENTSONLY: Doesn't generate any manifests for this output group.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-outputselection)
     */
    public fun outputSelection(): String? = unwrap(this).getOutputSelection()

    /**
     * Includes or excludes the EXT-X-PROGRAM-DATE-TIME tag in .m3u8 manifest files. The value is
     * calculated as follows: Either the program date and time are initialized using the input timecode
     * source, or the time is initialized using the input timecode source and the date is initialized
     * using the timestampOffset.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-programdatetime)
     */
    public fun programDateTime(): String? = unwrap(this).getProgramDateTime()

    /**
     * Specifies the algorithm used to drive the HLS EXT-X-PROGRAM-DATE-TIME clock.
     *
     * Options include: INITIALIZE_FROM_OUTPUT_TIMECODE: The PDT clock is initialized as a function
     * of the first output timecode, then incremented by the EXTINF duration of each encoded segment.
     * SYSTEM_CLOCK: The PDT clock is initialized as a function of the UTC wall clock, then incremented
     * by the EXTINF duration of each encoded segment. If the PDT clock diverges from the wall clock by
     * more than 500ms, it is resynchronized to the wall clock.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-programdatetimeclock)
     */
    public fun programDateTimeClock(): String? = unwrap(this).getProgramDateTimeClock()

    /**
     * The period of insertion of the EXT-X-PROGRAM-DATE-TIME entry, in seconds.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-programdatetimeperiod)
     */
    public fun programDateTimePeriod(): Number? = unwrap(this).getProgramDateTimePeriod()

    /**
     * ENABLED: The master manifest (.m3u8 file) for each pipeline includes information about both
     * pipelines: first its own media files, then the media files of the other pipeline. This feature
     * allows a playout device that supports stale manifest detection to switch from one manifest to
     * the other, when the current manifest seems to be stale. There are still two destinations and two
     * master manifests, but both master manifests reference the media files from both pipelines.
     * DISABLED: The master manifest (.m3u8 file) for each pipeline includes information about its own
     * pipeline only. For an HLS output group with MediaPackage as the destination, the DISABLED
     * behavior is always followed. MediaPackage regenerates the manifests it serves to players, so a
     * redundant manifest from MediaLive is irrelevant.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-redundantmanifest)
     */
    public fun redundantManifest(): String? = unwrap(this).getRedundantManifest()

    /**
     * The length of the MPEG-2 Transport Stream segments to create, in seconds.
     *
     * Note that segments will end on the next keyframe after this number of seconds, so the actual
     * segment length might be longer.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-segmentlength)
     */
    public fun segmentLength(): Number? = unwrap(this).getSegmentLength()

    /**
     * useInputSegmentation has been deprecated.
     *
     * The configured segment size is always used.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-segmentationmode)
     */
    public fun segmentationMode(): String? = unwrap(this).getSegmentationMode()

    /**
     * The number of segments to write to a subdirectory before starting a new one.
     *
     * For this setting to have an effect, directoryStructure must be subdirectoryPerStream.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-segmentspersubdirectory)
     */
    public fun segmentsPerSubdirectory(): Number? = unwrap(this).getSegmentsPerSubdirectory()

    /**
     * The include or exclude RESOLUTION attribute for a video in the EXT-X-STREAM-INF tag of a
     * variant manifest.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-streaminfresolution)
     */
    public fun streamInfResolution(): String? = unwrap(this).getStreamInfResolution()

    /**
     * Indicates the ID3 frame that has the timecode.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-timedmetadataid3frame)
     */
    public fun timedMetadataId3Frame(): String? = unwrap(this).getTimedMetadataId3Frame()

    /**
     * The timed metadata interval, in seconds.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-timedmetadataid3period)
     */
    public fun timedMetadataId3Period(): Number? = unwrap(this).getTimedMetadataId3Period()

    /**
     * Provides an extra millisecond delta offset to fine tune the timestamps.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-timestampdeltamilliseconds)
     */
    public fun timestampDeltaMilliseconds(): Number? = unwrap(this).getTimestampDeltaMilliseconds()

    /**
     * SEGMENTEDFILES: Emits the program as segments -multiple .ts media files. SINGLEFILE: Applies
     * only if the Mode field is VOD. Emits the program as a single .ts media file. The media manifest
     * includes #EXT-X-BYTERANGE tags to index segments for playback. A typical use for this value is
     * when sending the output to AWS Elemental MediaConvert, which can accept only a single media
     * file. Playback while the channel is running is not guaranteed due to HTTP server caching.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-tsfilemode)
     */
    public fun tsFileMode(): String? = unwrap(this).getTsFileMode()

    /**
     * A builder for [HlsGroupSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param adMarkers Chooses one or more ad marker types to pass SCTE35 signals through to this
       * group of Apple HLS outputs.
       */
      public fun adMarkers(adMarkers: List)

      /**
       * @param adMarkers Chooses one or more ad marker types to pass SCTE35 signals through to this
       * group of Apple HLS outputs.
       */
      public fun adMarkers(vararg adMarkers: String)

      /**
       * @param baseUrlContent A partial URI prefix that will be prepended to each output in the
       * media .m3u8 file. The partial URI prefix can be used if the base manifest is delivered from a
       * different URL than the main .m3u8 file.
       */
      public fun baseUrlContent(baseUrlContent: String)

      /**
       * @param baseUrlContent1 Optional.
       * One value per output group. This field is required only if you are completing Base URL
       * content A, and the downstream system has notified you that the media files for pipeline 1 of
       * all outputs are in a location different from the media files for pipeline 0.
       */
      public fun baseUrlContent1(baseUrlContent1: String)

      /**
       * @param baseUrlManifest A partial URI prefix that will be prepended to each output in the
       * media .m3u8 file. The partial URI prefix can be used if the base manifest is delivered from a
       * different URL than the main .m3u8 file.
       */
      public fun baseUrlManifest(baseUrlManifest: String)

      /**
       * @param baseUrlManifest1 Optional.
       * One value per output group. Complete this field only if you are completing Base URL
       * manifest A, and the downstream system has notified you that the child manifest files for
       * pipeline 1 of all outputs are in a location different from the child manifest files for
       * pipeline 0.
       */
      public fun baseUrlManifest1(baseUrlManifest1: String)

      /**
       * @param captionLanguageMappings A mapping of up to 4 captions channels to captions
       * languages.
       * This is meaningful only if captionLanguageSetting is set to "insert."
       */
      public fun captionLanguageMappings(captionLanguageMappings: IResolvable)

      /**
       * @param captionLanguageMappings A mapping of up to 4 captions channels to captions
       * languages.
       * This is meaningful only if captionLanguageSetting is set to "insert."
       */
      public fun captionLanguageMappings(captionLanguageMappings: List)

      /**
       * @param captionLanguageMappings A mapping of up to 4 captions channels to captions
       * languages.
       * This is meaningful only if captionLanguageSetting is set to "insert."
       */
      public fun captionLanguageMappings(vararg captionLanguageMappings: Any)

      /**
       * @param captionLanguageSetting Applies only to 608 embedded output captions.
       * Insert: Include CLOSED-CAPTIONS lines in the manifest. Specify at least one language in the
       * CC1 Language Code field. One CLOSED-CAPTION line is added for each Language Code that you
       * specify. Make sure to specify the languages in the order in which they appear in the original
       * source (if the source is embedded format) or the order of the captions selectors (if the
       * source is other than embedded). Otherwise, languages in the manifest will not match properly
       * with the output captions. None: Include the CLOSED-CAPTIONS=NONE line in the manifest. Omit:
       * Omit any CLOSED-CAPTIONS line from the manifest.
       */
      public fun captionLanguageSetting(captionLanguageSetting: String)

      /**
       * @param clientCache When set to "disabled," sets the #EXT-X-ALLOW-CACHE:no tag in the
       * manifest, which prevents clients from saving media segments for later replay.
       */
      public fun clientCache(clientCache: String)

      /**
       * @param codecSpecification The specification to use (RFC-6381 or the default RFC-4281)
       * during m3u8 playlist generation.
       */
      public fun codecSpecification(codecSpecification: String)

      /**
       * @param constantIv Used with encryptionType.
       * This is a 128-bit, 16-byte hex value that is represented by a 32-character text string. If
       * ivSource is set to "explicit," this parameter is required and is used as the IV for
       * encryption.
       */
      public fun constantIv(constantIv: String)

      /**
       * @param destination A directory or HTTP destination for the HLS segments, manifest files,
       * and encryption keys (if enabled).
       */
      public fun destination(destination: IResolvable)

      /**
       * @param destination A directory or HTTP destination for the HLS segments, manifest files,
       * and encryption keys (if enabled).
       */
      public fun destination(destination: OutputLocationRefProperty)

      /**
       * @param destination A directory or HTTP destination for the HLS segments, manifest files,
       * and encryption keys (if enabled).
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("602195d175deb1f788b7b739569a4b3e2a31271a576cbf3a6e09685b2c761a17")
      public fun destination(destination: OutputLocationRefProperty.Builder.() -> Unit)

      /**
       * @param directoryStructure Places segments in subdirectories.
       */
      public fun directoryStructure(directoryStructure: String)

      /**
       * @param discontinuityTags Specifies whether to insert EXT-X-DISCONTINUITY tags in the HLS
       * child manifests for this output group.
       * Typically, choose Insert because these tags are required in the manifest (according to the
       * HLS specification) and serve an important purpose.
       * Choose Never Insert only if the downstream system is doing real-time failover (without
       * using the MediaLive automatic failover feature) and only if that downstream system has advised
       * you to exclude the tags.
       */
      public fun discontinuityTags(discontinuityTags: String)

      /**
       * @param encryptionType Encrypts the segments with the specified encryption scheme.
       * Exclude this parameter if you don't want encryption.
       */
      public fun encryptionType(encryptionType: String)

      /**
       * @param hlsCdnSettings The parameters that control interactions with the CDN.
       */
      public fun hlsCdnSettings(hlsCdnSettings: IResolvable)

      /**
       * @param hlsCdnSettings The parameters that control interactions with the CDN.
       */
      public fun hlsCdnSettings(hlsCdnSettings: HlsCdnSettingsProperty)

      /**
       * @param hlsCdnSettings The parameters that control interactions with the CDN.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("84c1338b5d0ca3983e8539a052b22a722994034c4be5a5cdd27f767c459d41eb")
      public fun hlsCdnSettings(hlsCdnSettings: HlsCdnSettingsProperty.Builder.() -> Unit)

      /**
       * @param hlsId3SegmentTagging State of HLS ID3 Segment Tagging.
       */
      public fun hlsId3SegmentTagging(hlsId3SegmentTagging: String)

      /**
       * @param iFrameOnlyPlaylists DISABLED: Don't create an I-frame-only manifest, but do create
       * the master and media manifests (according to the Output Selection field).
       * STANDARD: Create an I-frame-only manifest for each output that contains video, as well as
       * the other manifests (according to the Output Selection field). The I-frame manifest contains a
       * #EXT-X-I-FRAMES-ONLY tag to indicate it is I-frame only, and one or more #EXT-X-BYTERANGE
       * entries identifying the I-frame position. For example, #EXT-X-BYTERANGE:160364@1461888".
       */
      public fun iFrameOnlyPlaylists(iFrameOnlyPlaylists: String)

      /**
       * @param incompleteSegmentBehavior Specifies whether to include the final (incomplete)
       * segment in the media output when the pipeline stops producing output because of a channel
       * stop, a channel pause or a loss of input to the pipeline.
       * Auto means that MediaLive decides whether to include the final segment, depending on the
       * channel class and the types of output groups.
       * Suppress means to never include the incomplete segment. We recommend you choose Auto and
       * let MediaLive control the behavior.
       */
      public fun incompleteSegmentBehavior(incompleteSegmentBehavior: String)

      /**
       * @param indexNSegments Applies only if the Mode field is LIVE.
       * Specifies the maximum number of segments in the media manifest file. After this maximum,
       * older segments are removed from the media manifest. This number must be less than or equal to
       * the Keep Segments field.
       */
      public fun indexNSegments(indexNSegments: Number)

      /**
       * @param inputLossAction A parameter that controls output group behavior on an input loss.
       */
      public fun inputLossAction(inputLossAction: String)

      /**
       * @param ivInManifest Used with encryptionType.
       * The IV (initialization vector) is a 128-bit number used in conjunction with the key for
       * encrypting blocks. If set to "include," the IV is listed in the manifest. Otherwise, the IV is
       * not in the manifest.
       */
      public fun ivInManifest(ivInManifest: String)

      /**
       * @param ivSource Used with encryptionType.
       * The IV (initialization vector) is a 128-bit number used in conjunction with the key for
       * encrypting blocks. If this setting is "followsSegmentNumber," it causes the IV to change every
       * segment (to match the segment number). If this is set to "explicit," you must enter a
       * constantIv value.
       */
      public fun ivSource(ivSource: String)

      /**
       * @param keepSegments Applies only if the Mode field is LIVE.
       * Specifies the number of media segments (.ts files) to retain in the destination directory.
       */
      public fun keepSegments(keepSegments: Number)

      /**
       * @param keyFormat Specifies how the key is represented in the resource identified by the
       * URI.
       * If the parameter is absent, an implicit value of "identity" is used. A reverse DNS string
       * can also be specified.
       */
      public fun keyFormat(keyFormat: String)

      /**
       * @param keyFormatVersions Either a single positive integer version value or a
       * slash-delimited list of version values (1/2/3).
       */
      public fun keyFormatVersions(keyFormatVersions: String)

      /**
       * @param keyProviderSettings The key provider settings.
       */
      public fun keyProviderSettings(keyProviderSettings: IResolvable)

      /**
       * @param keyProviderSettings The key provider settings.
       */
      public fun keyProviderSettings(keyProviderSettings: KeyProviderSettingsProperty)

      /**
       * @param keyProviderSettings The key provider settings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("cc7b9e6f6ea3911a322f5b6a914349405596807be38e8560a174e4f5120799d1")
      public
          fun keyProviderSettings(keyProviderSettings: KeyProviderSettingsProperty.Builder.() -> Unit)

      /**
       * @param manifestCompression When set to gzip, compresses HLS playlist.
       */
      public fun manifestCompression(manifestCompression: String)

      /**
       * @param manifestDurationFormat Indicates whether the output manifest should use a floating
       * point or integer values for segment duration.
       */
      public fun manifestDurationFormat(manifestDurationFormat: String)

      /**
       * @param minSegmentLength When set, minimumSegmentLength is enforced by looking ahead and
       * back within the specified range for a nearby avail and extending the segment size if needed.
       */
      public fun minSegmentLength(minSegmentLength: Number)

      /**
       * @param mode If "vod," all segments are indexed and kept permanently in the destination and
       * manifest.
       * If "live," only the number segments specified in keepSegments and indexNSegments are kept.
       * Newer segments replace older segments, which might prevent players from rewinding all the way
       * to the beginning of the channel. VOD mode uses HLS EXT-X-PLAYLIST-TYPE of EVENT while the
       * channel is running, converting it to a "VOD" type manifest on completion of the stream.
       */
      public fun mode(mode: String)

      /**
       * @param outputSelection MANIFESTSANDSEGMENTS: Generates manifests (the master manifest, if
       * applicable, and media manifests) for this output group.
       * SEGMENTSONLY: Doesn't generate any manifests for this output group.
       */
      public fun outputSelection(outputSelection: String)

      /**
       * @param programDateTime Includes or excludes the EXT-X-PROGRAM-DATE-TIME tag in .m3u8
       * manifest files. The value is calculated as follows: Either the program date and time are
       * initialized using the input timecode source, or the time is initialized using the input
       * timecode source and the date is initialized using the timestampOffset.
       */
      public fun programDateTime(programDateTime: String)

      /**
       * @param programDateTimeClock Specifies the algorithm used to drive the HLS
       * EXT-X-PROGRAM-DATE-TIME clock.
       * Options include: INITIALIZE_FROM_OUTPUT_TIMECODE: The PDT clock is initialized as a
       * function of the first output timecode, then incremented by the EXTINF duration of each encoded
       * segment. SYSTEM_CLOCK: The PDT clock is initialized as a function of the UTC wall clock, then
       * incremented by the EXTINF duration of each encoded segment. If the PDT clock diverges from the
       * wall clock by more than 500ms, it is resynchronized to the wall clock.
       */
      public fun programDateTimeClock(programDateTimeClock: String)

      /**
       * @param programDateTimePeriod The period of insertion of the EXT-X-PROGRAM-DATE-TIME entry,
       * in seconds.
       */
      public fun programDateTimePeriod(programDateTimePeriod: Number)

      /**
       * @param redundantManifest ENABLED: The master manifest (.m3u8 file) for each pipeline
       * includes information about both pipelines: first its own media files, then the media files of
       * the other pipeline. This feature allows a playout device that supports stale manifest
       * detection to switch from one manifest to the other, when the current manifest seems to be
       * stale. There are still two destinations and two master manifests, but both master manifests
       * reference the media files from both pipelines. DISABLED: The master manifest (.m3u8 file) for
       * each pipeline includes information about its own pipeline only. For an HLS output group with
       * MediaPackage as the destination, the DISABLED behavior is always followed. MediaPackage
       * regenerates the manifests it serves to players, so a redundant manifest from MediaLive is
       * irrelevant.
       */
      public fun redundantManifest(redundantManifest: String)

      /**
       * @param segmentLength The length of the MPEG-2 Transport Stream segments to create, in
       * seconds.
       * Note that segments will end on the next keyframe after this number of seconds, so the
       * actual segment length might be longer.
       */
      public fun segmentLength(segmentLength: Number)

      /**
       * @param segmentationMode useInputSegmentation has been deprecated.
       * The configured segment size is always used.
       */
      public fun segmentationMode(segmentationMode: String)

      /**
       * @param segmentsPerSubdirectory The number of segments to write to a subdirectory before
       * starting a new one.
       * For this setting to have an effect, directoryStructure must be subdirectoryPerStream.
       */
      public fun segmentsPerSubdirectory(segmentsPerSubdirectory: Number)

      /**
       * @param streamInfResolution The include or exclude RESOLUTION attribute for a video in the
       * EXT-X-STREAM-INF tag of a variant manifest.
       */
      public fun streamInfResolution(streamInfResolution: String)

      /**
       * @param timedMetadataId3Frame Indicates the ID3 frame that has the timecode.
       */
      public fun timedMetadataId3Frame(timedMetadataId3Frame: String)

      /**
       * @param timedMetadataId3Period The timed metadata interval, in seconds.
       */
      public fun timedMetadataId3Period(timedMetadataId3Period: Number)

      /**
       * @param timestampDeltaMilliseconds Provides an extra millisecond delta offset to fine tune
       * the timestamps.
       */
      public fun timestampDeltaMilliseconds(timestampDeltaMilliseconds: Number)

      /**
       * @param tsFileMode SEGMENTEDFILES: Emits the program as segments -multiple .ts media files.
       * SINGLEFILE: Applies only if the Mode field is VOD. Emits the program as a single .ts media
       * file. The media manifest includes #EXT-X-BYTERANGE tags to index segments for playback. A
       * typical use for this value is when sending the output to AWS Elemental MediaConvert, which can
       * accept only a single media file. Playback while the channel is running is not guaranteed due
       * to HTTP server caching.
       */
      public fun tsFileMode(tsFileMode: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.HlsGroupSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.HlsGroupSettingsProperty.builder()

      /**
       * @param adMarkers Chooses one or more ad marker types to pass SCTE35 signals through to this
       * group of Apple HLS outputs.
       */
      override fun adMarkers(adMarkers: List) {
        cdkBuilder.adMarkers(adMarkers)
      }

      /**
       * @param adMarkers Chooses one or more ad marker types to pass SCTE35 signals through to this
       * group of Apple HLS outputs.
       */
      override fun adMarkers(vararg adMarkers: String): Unit = adMarkers(adMarkers.toList())

      /**
       * @param baseUrlContent A partial URI prefix that will be prepended to each output in the
       * media .m3u8 file. The partial URI prefix can be used if the base manifest is delivered from a
       * different URL than the main .m3u8 file.
       */
      override fun baseUrlContent(baseUrlContent: String) {
        cdkBuilder.baseUrlContent(baseUrlContent)
      }

      /**
       * @param baseUrlContent1 Optional.
       * One value per output group. This field is required only if you are completing Base URL
       * content A, and the downstream system has notified you that the media files for pipeline 1 of
       * all outputs are in a location different from the media files for pipeline 0.
       */
      override fun baseUrlContent1(baseUrlContent1: String) {
        cdkBuilder.baseUrlContent1(baseUrlContent1)
      }

      /**
       * @param baseUrlManifest A partial URI prefix that will be prepended to each output in the
       * media .m3u8 file. The partial URI prefix can be used if the base manifest is delivered from a
       * different URL than the main .m3u8 file.
       */
      override fun baseUrlManifest(baseUrlManifest: String) {
        cdkBuilder.baseUrlManifest(baseUrlManifest)
      }

      /**
       * @param baseUrlManifest1 Optional.
       * One value per output group. Complete this field only if you are completing Base URL
       * manifest A, and the downstream system has notified you that the child manifest files for
       * pipeline 1 of all outputs are in a location different from the child manifest files for
       * pipeline 0.
       */
      override fun baseUrlManifest1(baseUrlManifest1: String) {
        cdkBuilder.baseUrlManifest1(baseUrlManifest1)
      }

      /**
       * @param captionLanguageMappings A mapping of up to 4 captions channels to captions
       * languages.
       * This is meaningful only if captionLanguageSetting is set to "insert."
       */
      override fun captionLanguageMappings(captionLanguageMappings: IResolvable) {
        cdkBuilder.captionLanguageMappings(captionLanguageMappings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param captionLanguageMappings A mapping of up to 4 captions channels to captions
       * languages.
       * This is meaningful only if captionLanguageSetting is set to "insert."
       */
      override fun captionLanguageMappings(captionLanguageMappings: List) {
        cdkBuilder.captionLanguageMappings(captionLanguageMappings.map{CdkObjectWrappers.unwrap(it)})
      }

      /**
       * @param captionLanguageMappings A mapping of up to 4 captions channels to captions
       * languages.
       * This is meaningful only if captionLanguageSetting is set to "insert."
       */
      override fun captionLanguageMappings(vararg captionLanguageMappings: Any): Unit =
          captionLanguageMappings(captionLanguageMappings.toList())

      /**
       * @param captionLanguageSetting Applies only to 608 embedded output captions.
       * Insert: Include CLOSED-CAPTIONS lines in the manifest. Specify at least one language in the
       * CC1 Language Code field. One CLOSED-CAPTION line is added for each Language Code that you
       * specify. Make sure to specify the languages in the order in which they appear in the original
       * source (if the source is embedded format) or the order of the captions selectors (if the
       * source is other than embedded). Otherwise, languages in the manifest will not match properly
       * with the output captions. None: Include the CLOSED-CAPTIONS=NONE line in the manifest. Omit:
       * Omit any CLOSED-CAPTIONS line from the manifest.
       */
      override fun captionLanguageSetting(captionLanguageSetting: String) {
        cdkBuilder.captionLanguageSetting(captionLanguageSetting)
      }

      /**
       * @param clientCache When set to "disabled," sets the #EXT-X-ALLOW-CACHE:no tag in the
       * manifest, which prevents clients from saving media segments for later replay.
       */
      override fun clientCache(clientCache: String) {
        cdkBuilder.clientCache(clientCache)
      }

      /**
       * @param codecSpecification The specification to use (RFC-6381 or the default RFC-4281)
       * during m3u8 playlist generation.
       */
      override fun codecSpecification(codecSpecification: String) {
        cdkBuilder.codecSpecification(codecSpecification)
      }

      /**
       * @param constantIv Used with encryptionType.
       * This is a 128-bit, 16-byte hex value that is represented by a 32-character text string. If
       * ivSource is set to "explicit," this parameter is required and is used as the IV for
       * encryption.
       */
      override fun constantIv(constantIv: String) {
        cdkBuilder.constantIv(constantIv)
      }

      /**
       * @param destination A directory or HTTP destination for the HLS segments, manifest files,
       * and encryption keys (if enabled).
       */
      override fun destination(destination: IResolvable) {
        cdkBuilder.destination(destination.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param destination A directory or HTTP destination for the HLS segments, manifest files,
       * and encryption keys (if enabled).
       */
      override fun destination(destination: OutputLocationRefProperty) {
        cdkBuilder.destination(destination.let(OutputLocationRefProperty.Companion::unwrap))
      }

      /**
       * @param destination A directory or HTTP destination for the HLS segments, manifest files,
       * and encryption keys (if enabled).
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("602195d175deb1f788b7b739569a4b3e2a31271a576cbf3a6e09685b2c761a17")
      override fun destination(destination: OutputLocationRefProperty.Builder.() -> Unit): Unit =
          destination(OutputLocationRefProperty(destination))

      /**
       * @param directoryStructure Places segments in subdirectories.
       */
      override fun directoryStructure(directoryStructure: String) {
        cdkBuilder.directoryStructure(directoryStructure)
      }

      /**
       * @param discontinuityTags Specifies whether to insert EXT-X-DISCONTINUITY tags in the HLS
       * child manifests for this output group.
       * Typically, choose Insert because these tags are required in the manifest (according to the
       * HLS specification) and serve an important purpose.
       * Choose Never Insert only if the downstream system is doing real-time failover (without
       * using the MediaLive automatic failover feature) and only if that downstream system has advised
       * you to exclude the tags.
       */
      override fun discontinuityTags(discontinuityTags: String) {
        cdkBuilder.discontinuityTags(discontinuityTags)
      }

      /**
       * @param encryptionType Encrypts the segments with the specified encryption scheme.
       * Exclude this parameter if you don't want encryption.
       */
      override fun encryptionType(encryptionType: String) {
        cdkBuilder.encryptionType(encryptionType)
      }

      /**
       * @param hlsCdnSettings The parameters that control interactions with the CDN.
       */
      override fun hlsCdnSettings(hlsCdnSettings: IResolvable) {
        cdkBuilder.hlsCdnSettings(hlsCdnSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param hlsCdnSettings The parameters that control interactions with the CDN.
       */
      override fun hlsCdnSettings(hlsCdnSettings: HlsCdnSettingsProperty) {
        cdkBuilder.hlsCdnSettings(hlsCdnSettings.let(HlsCdnSettingsProperty.Companion::unwrap))
      }

      /**
       * @param hlsCdnSettings The parameters that control interactions with the CDN.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("84c1338b5d0ca3983e8539a052b22a722994034c4be5a5cdd27f767c459d41eb")
      override fun hlsCdnSettings(hlsCdnSettings: HlsCdnSettingsProperty.Builder.() -> Unit): Unit =
          hlsCdnSettings(HlsCdnSettingsProperty(hlsCdnSettings))

      /**
       * @param hlsId3SegmentTagging State of HLS ID3 Segment Tagging.
       */
      override fun hlsId3SegmentTagging(hlsId3SegmentTagging: String) {
        cdkBuilder.hlsId3SegmentTagging(hlsId3SegmentTagging)
      }

      /**
       * @param iFrameOnlyPlaylists DISABLED: Don't create an I-frame-only manifest, but do create
       * the master and media manifests (according to the Output Selection field).
       * STANDARD: Create an I-frame-only manifest for each output that contains video, as well as
       * the other manifests (according to the Output Selection field). The I-frame manifest contains a
       * #EXT-X-I-FRAMES-ONLY tag to indicate it is I-frame only, and one or more #EXT-X-BYTERANGE
       * entries identifying the I-frame position. For example, #EXT-X-BYTERANGE:160364@1461888".
       */
      override fun iFrameOnlyPlaylists(iFrameOnlyPlaylists: String) {
        cdkBuilder.iFrameOnlyPlaylists(iFrameOnlyPlaylists)
      }

      /**
       * @param incompleteSegmentBehavior Specifies whether to include the final (incomplete)
       * segment in the media output when the pipeline stops producing output because of a channel
       * stop, a channel pause or a loss of input to the pipeline.
       * Auto means that MediaLive decides whether to include the final segment, depending on the
       * channel class and the types of output groups.
       * Suppress means to never include the incomplete segment. We recommend you choose Auto and
       * let MediaLive control the behavior.
       */
      override fun incompleteSegmentBehavior(incompleteSegmentBehavior: String) {
        cdkBuilder.incompleteSegmentBehavior(incompleteSegmentBehavior)
      }

      /**
       * @param indexNSegments Applies only if the Mode field is LIVE.
       * Specifies the maximum number of segments in the media manifest file. After this maximum,
       * older segments are removed from the media manifest. This number must be less than or equal to
       * the Keep Segments field.
       */
      override fun indexNSegments(indexNSegments: Number) {
        cdkBuilder.indexNSegments(indexNSegments)
      }

      /**
       * @param inputLossAction A parameter that controls output group behavior on an input loss.
       */
      override fun inputLossAction(inputLossAction: String) {
        cdkBuilder.inputLossAction(inputLossAction)
      }

      /**
       * @param ivInManifest Used with encryptionType.
       * The IV (initialization vector) is a 128-bit number used in conjunction with the key for
       * encrypting blocks. If set to "include," the IV is listed in the manifest. Otherwise, the IV is
       * not in the manifest.
       */
      override fun ivInManifest(ivInManifest: String) {
        cdkBuilder.ivInManifest(ivInManifest)
      }

      /**
       * @param ivSource Used with encryptionType.
       * The IV (initialization vector) is a 128-bit number used in conjunction with the key for
       * encrypting blocks. If this setting is "followsSegmentNumber," it causes the IV to change every
       * segment (to match the segment number). If this is set to "explicit," you must enter a
       * constantIv value.
       */
      override fun ivSource(ivSource: String) {
        cdkBuilder.ivSource(ivSource)
      }

      /**
       * @param keepSegments Applies only if the Mode field is LIVE.
       * Specifies the number of media segments (.ts files) to retain in the destination directory.
       */
      override fun keepSegments(keepSegments: Number) {
        cdkBuilder.keepSegments(keepSegments)
      }

      /**
       * @param keyFormat Specifies how the key is represented in the resource identified by the
       * URI.
       * If the parameter is absent, an implicit value of "identity" is used. A reverse DNS string
       * can also be specified.
       */
      override fun keyFormat(keyFormat: String) {
        cdkBuilder.keyFormat(keyFormat)
      }

      /**
       * @param keyFormatVersions Either a single positive integer version value or a
       * slash-delimited list of version values (1/2/3).
       */
      override fun keyFormatVersions(keyFormatVersions: String) {
        cdkBuilder.keyFormatVersions(keyFormatVersions)
      }

      /**
       * @param keyProviderSettings The key provider settings.
       */
      override fun keyProviderSettings(keyProviderSettings: IResolvable) {
        cdkBuilder.keyProviderSettings(keyProviderSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param keyProviderSettings The key provider settings.
       */
      override fun keyProviderSettings(keyProviderSettings: KeyProviderSettingsProperty) {
        cdkBuilder.keyProviderSettings(keyProviderSettings.let(KeyProviderSettingsProperty.Companion::unwrap))
      }

      /**
       * @param keyProviderSettings The key provider settings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("cc7b9e6f6ea3911a322f5b6a914349405596807be38e8560a174e4f5120799d1")
      override
          fun keyProviderSettings(keyProviderSettings: KeyProviderSettingsProperty.Builder.() -> Unit):
          Unit = keyProviderSettings(KeyProviderSettingsProperty(keyProviderSettings))

      /**
       * @param manifestCompression When set to gzip, compresses HLS playlist.
       */
      override fun manifestCompression(manifestCompression: String) {
        cdkBuilder.manifestCompression(manifestCompression)
      }

      /**
       * @param manifestDurationFormat Indicates whether the output manifest should use a floating
       * point or integer values for segment duration.
       */
      override fun manifestDurationFormat(manifestDurationFormat: String) {
        cdkBuilder.manifestDurationFormat(manifestDurationFormat)
      }

      /**
       * @param minSegmentLength When set, minimumSegmentLength is enforced by looking ahead and
       * back within the specified range for a nearby avail and extending the segment size if needed.
       */
      override fun minSegmentLength(minSegmentLength: Number) {
        cdkBuilder.minSegmentLength(minSegmentLength)
      }

      /**
       * @param mode If "vod," all segments are indexed and kept permanently in the destination and
       * manifest.
       * If "live," only the number segments specified in keepSegments and indexNSegments are kept.
       * Newer segments replace older segments, which might prevent players from rewinding all the way
       * to the beginning of the channel. VOD mode uses HLS EXT-X-PLAYLIST-TYPE of EVENT while the
       * channel is running, converting it to a "VOD" type manifest on completion of the stream.
       */
      override fun mode(mode: String) {
        cdkBuilder.mode(mode)
      }

      /**
       * @param outputSelection MANIFESTSANDSEGMENTS: Generates manifests (the master manifest, if
       * applicable, and media manifests) for this output group.
       * SEGMENTSONLY: Doesn't generate any manifests for this output group.
       */
      override fun outputSelection(outputSelection: String) {
        cdkBuilder.outputSelection(outputSelection)
      }

      /**
       * @param programDateTime Includes or excludes the EXT-X-PROGRAM-DATE-TIME tag in .m3u8
       * manifest files. The value is calculated as follows: Either the program date and time are
       * initialized using the input timecode source, or the time is initialized using the input
       * timecode source and the date is initialized using the timestampOffset.
       */
      override fun programDateTime(programDateTime: String) {
        cdkBuilder.programDateTime(programDateTime)
      }

      /**
       * @param programDateTimeClock Specifies the algorithm used to drive the HLS
       * EXT-X-PROGRAM-DATE-TIME clock.
       * Options include: INITIALIZE_FROM_OUTPUT_TIMECODE: The PDT clock is initialized as a
       * function of the first output timecode, then incremented by the EXTINF duration of each encoded
       * segment. SYSTEM_CLOCK: The PDT clock is initialized as a function of the UTC wall clock, then
       * incremented by the EXTINF duration of each encoded segment. If the PDT clock diverges from the
       * wall clock by more than 500ms, it is resynchronized to the wall clock.
       */
      override fun programDateTimeClock(programDateTimeClock: String) {
        cdkBuilder.programDateTimeClock(programDateTimeClock)
      }

      /**
       * @param programDateTimePeriod The period of insertion of the EXT-X-PROGRAM-DATE-TIME entry,
       * in seconds.
       */
      override fun programDateTimePeriod(programDateTimePeriod: Number) {
        cdkBuilder.programDateTimePeriod(programDateTimePeriod)
      }

      /**
       * @param redundantManifest ENABLED: The master manifest (.m3u8 file) for each pipeline
       * includes information about both pipelines: first its own media files, then the media files of
       * the other pipeline. This feature allows a playout device that supports stale manifest
       * detection to switch from one manifest to the other, when the current manifest seems to be
       * stale. There are still two destinations and two master manifests, but both master manifests
       * reference the media files from both pipelines. DISABLED: The master manifest (.m3u8 file) for
       * each pipeline includes information about its own pipeline only. For an HLS output group with
       * MediaPackage as the destination, the DISABLED behavior is always followed. MediaPackage
       * regenerates the manifests it serves to players, so a redundant manifest from MediaLive is
       * irrelevant.
       */
      override fun redundantManifest(redundantManifest: String) {
        cdkBuilder.redundantManifest(redundantManifest)
      }

      /**
       * @param segmentLength The length of the MPEG-2 Transport Stream segments to create, in
       * seconds.
       * Note that segments will end on the next keyframe after this number of seconds, so the
       * actual segment length might be longer.
       */
      override fun segmentLength(segmentLength: Number) {
        cdkBuilder.segmentLength(segmentLength)
      }

      /**
       * @param segmentationMode useInputSegmentation has been deprecated.
       * The configured segment size is always used.
       */
      override fun segmentationMode(segmentationMode: String) {
        cdkBuilder.segmentationMode(segmentationMode)
      }

      /**
       * @param segmentsPerSubdirectory The number of segments to write to a subdirectory before
       * starting a new one.
       * For this setting to have an effect, directoryStructure must be subdirectoryPerStream.
       */
      override fun segmentsPerSubdirectory(segmentsPerSubdirectory: Number) {
        cdkBuilder.segmentsPerSubdirectory(segmentsPerSubdirectory)
      }

      /**
       * @param streamInfResolution The include or exclude RESOLUTION attribute for a video in the
       * EXT-X-STREAM-INF tag of a variant manifest.
       */
      override fun streamInfResolution(streamInfResolution: String) {
        cdkBuilder.streamInfResolution(streamInfResolution)
      }

      /**
       * @param timedMetadataId3Frame Indicates the ID3 frame that has the timecode.
       */
      override fun timedMetadataId3Frame(timedMetadataId3Frame: String) {
        cdkBuilder.timedMetadataId3Frame(timedMetadataId3Frame)
      }

      /**
       * @param timedMetadataId3Period The timed metadata interval, in seconds.
       */
      override fun timedMetadataId3Period(timedMetadataId3Period: Number) {
        cdkBuilder.timedMetadataId3Period(timedMetadataId3Period)
      }

      /**
       * @param timestampDeltaMilliseconds Provides an extra millisecond delta offset to fine tune
       * the timestamps.
       */
      override fun timestampDeltaMilliseconds(timestampDeltaMilliseconds: Number) {
        cdkBuilder.timestampDeltaMilliseconds(timestampDeltaMilliseconds)
      }

      /**
       * @param tsFileMode SEGMENTEDFILES: Emits the program as segments -multiple .ts media files.
       * SINGLEFILE: Applies only if the Mode field is VOD. Emits the program as a single .ts media
       * file. The media manifest includes #EXT-X-BYTERANGE tags to index segments for playback. A
       * typical use for this value is when sending the output to AWS Elemental MediaConvert, which can
       * accept only a single media file. Playback while the channel is running is not guaranteed due
       * to HTTP server caching.
       */
      override fun tsFileMode(tsFileMode: String) {
        cdkBuilder.tsFileMode(tsFileMode)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.HlsGroupSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.HlsGroupSettingsProperty,
    ) : CdkObject(cdkObject),
        HlsGroupSettingsProperty {
      /**
       * Chooses one or more ad marker types to pass SCTE35 signals through to this group of Apple
       * HLS outputs.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-admarkers)
       */
      override fun adMarkers(): List = unwrap(this).getAdMarkers() ?: emptyList()

      /**
       * A partial URI prefix that will be prepended to each output in the media .m3u8 file. The
       * partial URI prefix can be used if the base manifest is delivered from a different URL than the
       * main .m3u8 file.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-baseurlcontent)
       */
      override fun baseUrlContent(): String? = unwrap(this).getBaseUrlContent()

      /**
       * Optional.
       *
       * One value per output group. This field is required only if you are completing Base URL
       * content A, and the downstream system has notified you that the media files for pipeline 1 of
       * all outputs are in a location different from the media files for pipeline 0.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-baseurlcontent1)
       */
      override fun baseUrlContent1(): String? = unwrap(this).getBaseUrlContent1()

      /**
       * A partial URI prefix that will be prepended to each output in the media .m3u8 file. The
       * partial URI prefix can be used if the base manifest is delivered from a different URL than the
       * main .m3u8 file.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-baseurlmanifest)
       */
      override fun baseUrlManifest(): String? = unwrap(this).getBaseUrlManifest()

      /**
       * Optional.
       *
       * One value per output group. Complete this field only if you are completing Base URL
       * manifest A, and the downstream system has notified you that the child manifest files for
       * pipeline 1 of all outputs are in a location different from the child manifest files for
       * pipeline 0.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-baseurlmanifest1)
       */
      override fun baseUrlManifest1(): String? = unwrap(this).getBaseUrlManifest1()

      /**
       * A mapping of up to 4 captions channels to captions languages.
       *
       * This is meaningful only if captionLanguageSetting is set to "insert."
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-captionlanguagemappings)
       */
      override fun captionLanguageMappings(): Any? = unwrap(this).getCaptionLanguageMappings()

      /**
       * Applies only to 608 embedded output captions.
       *
       * Insert: Include CLOSED-CAPTIONS lines in the manifest. Specify at least one language in the
       * CC1 Language Code field. One CLOSED-CAPTION line is added for each Language Code that you
       * specify. Make sure to specify the languages in the order in which they appear in the original
       * source (if the source is embedded format) or the order of the captions selectors (if the
       * source is other than embedded). Otherwise, languages in the manifest will not match properly
       * with the output captions. None: Include the CLOSED-CAPTIONS=NONE line in the manifest. Omit:
       * Omit any CLOSED-CAPTIONS line from the manifest.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-captionlanguagesetting)
       */
      override fun captionLanguageSetting(): String? = unwrap(this).getCaptionLanguageSetting()

      /**
       * When set to "disabled," sets the #EXT-X-ALLOW-CACHE:no tag in the manifest, which prevents
       * clients from saving media segments for later replay.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-clientcache)
       */
      override fun clientCache(): String? = unwrap(this).getClientCache()

      /**
       * The specification to use (RFC-6381 or the default RFC-4281) during m3u8 playlist
       * generation.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-codecspecification)
       */
      override fun codecSpecification(): String? = unwrap(this).getCodecSpecification()

      /**
       * Used with encryptionType.
       *
       * This is a 128-bit, 16-byte hex value that is represented by a 32-character text string. If
       * ivSource is set to "explicit," this parameter is required and is used as the IV for
       * encryption.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-constantiv)
       */
      override fun constantIv(): String? = unwrap(this).getConstantIv()

      /**
       * A directory or HTTP destination for the HLS segments, manifest files, and encryption keys
       * (if enabled).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-destination)
       */
      override fun destination(): Any? = unwrap(this).getDestination()

      /**
       * Places segments in subdirectories.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-directorystructure)
       */
      override fun directoryStructure(): String? = unwrap(this).getDirectoryStructure()

      /**
       * Specifies whether to insert EXT-X-DISCONTINUITY tags in the HLS child manifests for this
       * output group.
       *
       * Typically, choose Insert because these tags are required in the manifest (according to the
       * HLS specification) and serve an important purpose.
       * Choose Never Insert only if the downstream system is doing real-time failover (without
       * using the MediaLive automatic failover feature) and only if that downstream system has advised
       * you to exclude the tags.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-discontinuitytags)
       */
      override fun discontinuityTags(): String? = unwrap(this).getDiscontinuityTags()

      /**
       * Encrypts the segments with the specified encryption scheme.
       *
       * Exclude this parameter if you don't want encryption.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-encryptiontype)
       */
      override fun encryptionType(): String? = unwrap(this).getEncryptionType()

      /**
       * The parameters that control interactions with the CDN.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-hlscdnsettings)
       */
      override fun hlsCdnSettings(): Any? = unwrap(this).getHlsCdnSettings()

      /**
       * State of HLS ID3 Segment Tagging.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-hlsid3segmenttagging)
       */
      override fun hlsId3SegmentTagging(): String? = unwrap(this).getHlsId3SegmentTagging()

      /**
       * DISABLED: Don't create an I-frame-only manifest, but do create the master and media
       * manifests (according to the Output Selection field).
       *
       * STANDARD: Create an I-frame-only manifest for each output that contains video, as well as
       * the other manifests (according to the Output Selection field). The I-frame manifest contains a
       * #EXT-X-I-FRAMES-ONLY tag to indicate it is I-frame only, and one or more #EXT-X-BYTERANGE
       * entries identifying the I-frame position. For example, #EXT-X-BYTERANGE:160364@1461888".
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-iframeonlyplaylists)
       */
      override fun iFrameOnlyPlaylists(): String? = unwrap(this).getIFrameOnlyPlaylists()

      /**
       * Specifies whether to include the final (incomplete) segment in the media output when the
       * pipeline stops producing output because of a channel stop, a channel pause or a loss of input
       * to the pipeline.
       *
       * Auto means that MediaLive decides whether to include the final segment, depending on the
       * channel class and the types of output groups.
       * Suppress means to never include the incomplete segment. We recommend you choose Auto and
       * let MediaLive control the behavior.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-incompletesegmentbehavior)
       */
      override fun incompleteSegmentBehavior(): String? =
          unwrap(this).getIncompleteSegmentBehavior()

      /**
       * Applies only if the Mode field is LIVE.
       *
       * Specifies the maximum number of segments in the media manifest file. After this maximum,
       * older segments are removed from the media manifest. This number must be less than or equal to
       * the Keep Segments field.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-indexnsegments)
       */
      override fun indexNSegments(): Number? = unwrap(this).getIndexNSegments()

      /**
       * A parameter that controls output group behavior on an input loss.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-inputlossaction)
       */
      override fun inputLossAction(): String? = unwrap(this).getInputLossAction()

      /**
       * Used with encryptionType.
       *
       * The IV (initialization vector) is a 128-bit number used in conjunction with the key for
       * encrypting blocks. If set to "include," the IV is listed in the manifest. Otherwise, the IV is
       * not in the manifest.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-ivinmanifest)
       */
      override fun ivInManifest(): String? = unwrap(this).getIvInManifest()

      /**
       * Used with encryptionType.
       *
       * The IV (initialization vector) is a 128-bit number used in conjunction with the key for
       * encrypting blocks. If this setting is "followsSegmentNumber," it causes the IV to change every
       * segment (to match the segment number). If this is set to "explicit," you must enter a
       * constantIv value.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-ivsource)
       */
      override fun ivSource(): String? = unwrap(this).getIvSource()

      /**
       * Applies only if the Mode field is LIVE.
       *
       * Specifies the number of media segments (.ts files) to retain in the destination directory.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-keepsegments)
       */
      override fun keepSegments(): Number? = unwrap(this).getKeepSegments()

      /**
       * Specifies how the key is represented in the resource identified by the URI.
       *
       * If the parameter is absent, an implicit value of "identity" is used. A reverse DNS string
       * can also be specified.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-keyformat)
       */
      override fun keyFormat(): String? = unwrap(this).getKeyFormat()

      /**
       * Either a single positive integer version value or a slash-delimited list of version values
       * (1/2/3).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-keyformatversions)
       */
      override fun keyFormatVersions(): String? = unwrap(this).getKeyFormatVersions()

      /**
       * The key provider settings.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-keyprovidersettings)
       */
      override fun keyProviderSettings(): Any? = unwrap(this).getKeyProviderSettings()

      /**
       * When set to gzip, compresses HLS playlist.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-manifestcompression)
       */
      override fun manifestCompression(): String? = unwrap(this).getManifestCompression()

      /**
       * Indicates whether the output manifest should use a floating point or integer values for
       * segment duration.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-manifestdurationformat)
       */
      override fun manifestDurationFormat(): String? = unwrap(this).getManifestDurationFormat()

      /**
       * When set, minimumSegmentLength is enforced by looking ahead and back within the specified
       * range for a nearby avail and extending the segment size if needed.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-minsegmentlength)
       */
      override fun minSegmentLength(): Number? = unwrap(this).getMinSegmentLength()

      /**
       * If "vod," all segments are indexed and kept permanently in the destination and manifest.
       *
       * If "live," only the number segments specified in keepSegments and indexNSegments are kept.
       * Newer segments replace older segments, which might prevent players from rewinding all the way
       * to the beginning of the channel. VOD mode uses HLS EXT-X-PLAYLIST-TYPE of EVENT while the
       * channel is running, converting it to a "VOD" type manifest on completion of the stream.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-mode)
       */
      override fun mode(): String? = unwrap(this).getMode()

      /**
       * MANIFESTSANDSEGMENTS: Generates manifests (the master manifest, if applicable, and media
       * manifests) for this output group.
       *
       * SEGMENTSONLY: Doesn't generate any manifests for this output group.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-outputselection)
       */
      override fun outputSelection(): String? = unwrap(this).getOutputSelection()

      /**
       * Includes or excludes the EXT-X-PROGRAM-DATE-TIME tag in .m3u8 manifest files. The value is
       * calculated as follows: Either the program date and time are initialized using the input
       * timecode source, or the time is initialized using the input timecode source and the date is
       * initialized using the timestampOffset.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-programdatetime)
       */
      override fun programDateTime(): String? = unwrap(this).getProgramDateTime()

      /**
       * Specifies the algorithm used to drive the HLS EXT-X-PROGRAM-DATE-TIME clock.
       *
       * Options include: INITIALIZE_FROM_OUTPUT_TIMECODE: The PDT clock is initialized as a
       * function of the first output timecode, then incremented by the EXTINF duration of each encoded
       * segment. SYSTEM_CLOCK: The PDT clock is initialized as a function of the UTC wall clock, then
       * incremented by the EXTINF duration of each encoded segment. If the PDT clock diverges from the
       * wall clock by more than 500ms, it is resynchronized to the wall clock.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-programdatetimeclock)
       */
      override fun programDateTimeClock(): String? = unwrap(this).getProgramDateTimeClock()

      /**
       * The period of insertion of the EXT-X-PROGRAM-DATE-TIME entry, in seconds.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-programdatetimeperiod)
       */
      override fun programDateTimePeriod(): Number? = unwrap(this).getProgramDateTimePeriod()

      /**
       * ENABLED: The master manifest (.m3u8 file) for each pipeline includes information about both
       * pipelines: first its own media files, then the media files of the other pipeline. This feature
       * allows a playout device that supports stale manifest detection to switch from one manifest to
       * the other, when the current manifest seems to be stale. There are still two destinations and
       * two master manifests, but both master manifests reference the media files from both pipelines.
       * DISABLED: The master manifest (.m3u8 file) for each pipeline includes information about its
       * own pipeline only. For an HLS output group with MediaPackage as the destination, the DISABLED
       * behavior is always followed. MediaPackage regenerates the manifests it serves to players, so a
       * redundant manifest from MediaLive is irrelevant.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-redundantmanifest)
       */
      override fun redundantManifest(): String? = unwrap(this).getRedundantManifest()

      /**
       * The length of the MPEG-2 Transport Stream segments to create, in seconds.
       *
       * Note that segments will end on the next keyframe after this number of seconds, so the
       * actual segment length might be longer.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-segmentlength)
       */
      override fun segmentLength(): Number? = unwrap(this).getSegmentLength()

      /**
       * useInputSegmentation has been deprecated.
       *
       * The configured segment size is always used.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-segmentationmode)
       */
      override fun segmentationMode(): String? = unwrap(this).getSegmentationMode()

      /**
       * The number of segments to write to a subdirectory before starting a new one.
       *
       * For this setting to have an effect, directoryStructure must be subdirectoryPerStream.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-segmentspersubdirectory)
       */
      override fun segmentsPerSubdirectory(): Number? = unwrap(this).getSegmentsPerSubdirectory()

      /**
       * The include or exclude RESOLUTION attribute for a video in the EXT-X-STREAM-INF tag of a
       * variant manifest.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-streaminfresolution)
       */
      override fun streamInfResolution(): String? = unwrap(this).getStreamInfResolution()

      /**
       * Indicates the ID3 frame that has the timecode.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-timedmetadataid3frame)
       */
      override fun timedMetadataId3Frame(): String? = unwrap(this).getTimedMetadataId3Frame()

      /**
       * The timed metadata interval, in seconds.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-timedmetadataid3period)
       */
      override fun timedMetadataId3Period(): Number? = unwrap(this).getTimedMetadataId3Period()

      /**
       * Provides an extra millisecond delta offset to fine tune the timestamps.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-timestampdeltamilliseconds)
       */
      override fun timestampDeltaMilliseconds(): Number? =
          unwrap(this).getTimestampDeltaMilliseconds()

      /**
       * SEGMENTEDFILES: Emits the program as segments -multiple .ts media files. SINGLEFILE:
       * Applies only if the Mode field is VOD. Emits the program as a single .ts media file. The media
       * manifest includes #EXT-X-BYTERANGE tags to index segments for playback. A typical use for this
       * value is when sending the output to AWS Elemental MediaConvert, which can accept only a single
       * media file. Playback while the channel is running is not guaranteed due to HTTP server
       * caching.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-tsfilemode)
       */
      override fun tsFileMode(): String? = unwrap(this).getTsFileMode()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): HlsGroupSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.HlsGroupSettingsProperty):
          HlsGroupSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? HlsGroupSettingsProperty
          ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: HlsGroupSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.HlsGroupSettingsProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.HlsGroupSettingsProperty
    }
  }

  /**
   * Information about how to connect to the upstream system.
   *
   * The parent of this entity is NetworkInputSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * HlsInputSettingsProperty hlsInputSettingsProperty = HlsInputSettingsProperty.builder()
   * .bandwidth(123)
   * .bufferSegments(123)
   * .retries(123)
   * .retryInterval(123)
   * .scte35Source("scte35Source")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsinputsettings.html)
   */
  public interface HlsInputSettingsProperty {
    /**
     * When specified, the HLS stream with the m3u8 bandwidth that most closely matches this value
     * is chosen.
     *
     * Otherwise, the highest bandwidth stream in the m3u8 is chosen. The bitrate is specified in
     * bits per second, as in an HLS manifest.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsinputsettings.html#cfn-medialive-channel-hlsinputsettings-bandwidth)
     */
    public fun bandwidth(): Number? = unwrap(this).getBandwidth()

    /**
     * When specified, reading of the HLS input begins this many buffer segments from the end (most
     * recently written segment).
     *
     * When not specified, the HLS input begins with the first segment specified in the m3u8.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsinputsettings.html#cfn-medialive-channel-hlsinputsettings-buffersegments)
     */
    public fun bufferSegments(): Number? = unwrap(this).getBufferSegments()

    /**
     * The number of consecutive times that attempts to read a manifest or segment must fail before
     * the input is considered unavailable.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsinputsettings.html#cfn-medialive-channel-hlsinputsettings-retries)
     */
    public fun retries(): Number? = unwrap(this).getRetries()

    /**
     * The number of seconds between retries when an attempt to read a manifest or segment fails.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsinputsettings.html#cfn-medialive-channel-hlsinputsettings-retryinterval)
     */
    public fun retryInterval(): Number? = unwrap(this).getRetryInterval()

    /**
     * Identifies the source for the SCTE-35 messages that MediaLive will ingest.
     *
     * Messages can be ingested from the content segments (in the stream) or from tags in the
     * playlist (the HLS manifest). MediaLive ignores SCTE-35 information in the source that is not
     * selected.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsinputsettings.html#cfn-medialive-channel-hlsinputsettings-scte35source)
     */
    public fun scte35Source(): String? = unwrap(this).getScte35Source()

    /**
     * A builder for [HlsInputSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param bandwidth When specified, the HLS stream with the m3u8 bandwidth that most closely
       * matches this value is chosen.
       * Otherwise, the highest bandwidth stream in the m3u8 is chosen. The bitrate is specified in
       * bits per second, as in an HLS manifest.
       */
      public fun bandwidth(bandwidth: Number)

      /**
       * @param bufferSegments When specified, reading of the HLS input begins this many buffer
       * segments from the end (most recently written segment).
       * When not specified, the HLS input begins with the first segment specified in the m3u8.
       */
      public fun bufferSegments(bufferSegments: Number)

      /**
       * @param retries The number of consecutive times that attempts to read a manifest or segment
       * must fail before the input is considered unavailable.
       */
      public fun retries(retries: Number)

      /**
       * @param retryInterval The number of seconds between retries when an attempt to read a
       * manifest or segment fails.
       */
      public fun retryInterval(retryInterval: Number)

      /**
       * @param scte35Source Identifies the source for the SCTE-35 messages that MediaLive will
       * ingest.
       * Messages can be ingested from the content segments (in the stream) or from tags in the
       * playlist (the HLS manifest). MediaLive ignores SCTE-35 information in the source that is not
       * selected.
       */
      public fun scte35Source(scte35Source: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.HlsInputSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.HlsInputSettingsProperty.builder()

      /**
       * @param bandwidth When specified, the HLS stream with the m3u8 bandwidth that most closely
       * matches this value is chosen.
       * Otherwise, the highest bandwidth stream in the m3u8 is chosen. The bitrate is specified in
       * bits per second, as in an HLS manifest.
       */
      override fun bandwidth(bandwidth: Number) {
        cdkBuilder.bandwidth(bandwidth)
      }

      /**
       * @param bufferSegments When specified, reading of the HLS input begins this many buffer
       * segments from the end (most recently written segment).
       * When not specified, the HLS input begins with the first segment specified in the m3u8.
       */
      override fun bufferSegments(bufferSegments: Number) {
        cdkBuilder.bufferSegments(bufferSegments)
      }

      /**
       * @param retries The number of consecutive times that attempts to read a manifest or segment
       * must fail before the input is considered unavailable.
       */
      override fun retries(retries: Number) {
        cdkBuilder.retries(retries)
      }

      /**
       * @param retryInterval The number of seconds between retries when an attempt to read a
       * manifest or segment fails.
       */
      override fun retryInterval(retryInterval: Number) {
        cdkBuilder.retryInterval(retryInterval)
      }

      /**
       * @param scte35Source Identifies the source for the SCTE-35 messages that MediaLive will
       * ingest.
       * Messages can be ingested from the content segments (in the stream) or from tags in the
       * playlist (the HLS manifest). MediaLive ignores SCTE-35 information in the source that is not
       * selected.
       */
      override fun scte35Source(scte35Source: String) {
        cdkBuilder.scte35Source(scte35Source)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.HlsInputSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.HlsInputSettingsProperty,
    ) : CdkObject(cdkObject),
        HlsInputSettingsProperty {
      /**
       * When specified, the HLS stream with the m3u8 bandwidth that most closely matches this value
       * is chosen.
       *
       * Otherwise, the highest bandwidth stream in the m3u8 is chosen. The bitrate is specified in
       * bits per second, as in an HLS manifest.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsinputsettings.html#cfn-medialive-channel-hlsinputsettings-bandwidth)
       */
      override fun bandwidth(): Number? = unwrap(this).getBandwidth()

      /**
       * When specified, reading of the HLS input begins this many buffer segments from the end
       * (most recently written segment).
       *
       * When not specified, the HLS input begins with the first segment specified in the m3u8.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsinputsettings.html#cfn-medialive-channel-hlsinputsettings-buffersegments)
       */
      override fun bufferSegments(): Number? = unwrap(this).getBufferSegments()

      /**
       * The number of consecutive times that attempts to read a manifest or segment must fail
       * before the input is considered unavailable.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsinputsettings.html#cfn-medialive-channel-hlsinputsettings-retries)
       */
      override fun retries(): Number? = unwrap(this).getRetries()

      /**
       * The number of seconds between retries when an attempt to read a manifest or segment fails.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsinputsettings.html#cfn-medialive-channel-hlsinputsettings-retryinterval)
       */
      override fun retryInterval(): Number? = unwrap(this).getRetryInterval()

      /**
       * Identifies the source for the SCTE-35 messages that MediaLive will ingest.
       *
       * Messages can be ingested from the content segments (in the stream) or from tags in the
       * playlist (the HLS manifest). MediaLive ignores SCTE-35 information in the source that is not
       * selected.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsinputsettings.html#cfn-medialive-channel-hlsinputsettings-scte35source)
       */
      override fun scte35Source(): String? = unwrap(this).getScte35Source()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): HlsInputSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.HlsInputSettingsProperty):
          HlsInputSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? HlsInputSettingsProperty
          ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: HlsInputSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.HlsInputSettingsProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.HlsInputSettingsProperty
    }
  }

  /**
   * The configuration of a MediaStore container as the destination for an HLS output.
   *
   * The parent of this entity is HlsCdnSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * HlsMediaStoreSettingsProperty hlsMediaStoreSettingsProperty =
   * HlsMediaStoreSettingsProperty.builder()
   * .connectionRetryInterval(123)
   * .filecacheDuration(123)
   * .mediaStoreStorageClass("mediaStoreStorageClass")
   * .numRetries(123)
   * .restartDelay(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsmediastoresettings.html)
   */
  public interface HlsMediaStoreSettingsProperty {
    /**
     * The number of seconds to wait before retrying a connection to the CDN if the connection is
     * lost.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsmediastoresettings.html#cfn-medialive-channel-hlsmediastoresettings-connectionretryinterval)
     */
    public fun connectionRetryInterval(): Number? = unwrap(this).getConnectionRetryInterval()

    /**
     * The size, in seconds, of the file cache for streaming outputs.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsmediastoresettings.html#cfn-medialive-channel-hlsmediastoresettings-filecacheduration)
     */
    public fun filecacheDuration(): Number? = unwrap(this).getFilecacheDuration()

    /**
     * When set to temporal, output files are stored in non-persistent memory for faster reading and
     * writing.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsmediastoresettings.html#cfn-medialive-channel-hlsmediastoresettings-mediastorestorageclass)
     */
    public fun mediaStoreStorageClass(): String? = unwrap(this).getMediaStoreStorageClass()

    /**
     * The number of retry attempts that are made before the channel is put into an error state.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsmediastoresettings.html#cfn-medialive-channel-hlsmediastoresettings-numretries)
     */
    public fun numRetries(): Number? = unwrap(this).getNumRetries()

    /**
     * If a streaming output fails, the number of seconds to wait until a restart is initiated.
     *
     * A value of 0 means never restart.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsmediastoresettings.html#cfn-medialive-channel-hlsmediastoresettings-restartdelay)
     */
    public fun restartDelay(): Number? = unwrap(this).getRestartDelay()

    /**
     * A builder for [HlsMediaStoreSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param connectionRetryInterval The number of seconds to wait before retrying a connection
       * to the CDN if the connection is lost.
       */
      public fun connectionRetryInterval(connectionRetryInterval: Number)

      /**
       * @param filecacheDuration The size, in seconds, of the file cache for streaming outputs.
       */
      public fun filecacheDuration(filecacheDuration: Number)

      /**
       * @param mediaStoreStorageClass When set to temporal, output files are stored in
       * non-persistent memory for faster reading and writing.
       */
      public fun mediaStoreStorageClass(mediaStoreStorageClass: String)

      /**
       * @param numRetries The number of retry attempts that are made before the channel is put into
       * an error state.
       */
      public fun numRetries(numRetries: Number)

      /**
       * @param restartDelay If a streaming output fails, the number of seconds to wait until a
       * restart is initiated.
       * A value of 0 means never restart.
       */
      public fun restartDelay(restartDelay: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.HlsMediaStoreSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.HlsMediaStoreSettingsProperty.builder()

      /**
       * @param connectionRetryInterval The number of seconds to wait before retrying a connection
       * to the CDN if the connection is lost.
       */
      override fun connectionRetryInterval(connectionRetryInterval: Number) {
        cdkBuilder.connectionRetryInterval(connectionRetryInterval)
      }

      /**
       * @param filecacheDuration The size, in seconds, of the file cache for streaming outputs.
       */
      override fun filecacheDuration(filecacheDuration: Number) {
        cdkBuilder.filecacheDuration(filecacheDuration)
      }

      /**
       * @param mediaStoreStorageClass When set to temporal, output files are stored in
       * non-persistent memory for faster reading and writing.
       */
      override fun mediaStoreStorageClass(mediaStoreStorageClass: String) {
        cdkBuilder.mediaStoreStorageClass(mediaStoreStorageClass)
      }

      /**
       * @param numRetries The number of retry attempts that are made before the channel is put into
       * an error state.
       */
      override fun numRetries(numRetries: Number) {
        cdkBuilder.numRetries(numRetries)
      }

      /**
       * @param restartDelay If a streaming output fails, the number of seconds to wait until a
       * restart is initiated.
       * A value of 0 means never restart.
       */
      override fun restartDelay(restartDelay: Number) {
        cdkBuilder.restartDelay(restartDelay)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.HlsMediaStoreSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.HlsMediaStoreSettingsProperty,
    ) : CdkObject(cdkObject),
        HlsMediaStoreSettingsProperty {
      /**
       * The number of seconds to wait before retrying a connection to the CDN if the connection is
       * lost.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsmediastoresettings.html#cfn-medialive-channel-hlsmediastoresettings-connectionretryinterval)
       */
      override fun connectionRetryInterval(): Number? = unwrap(this).getConnectionRetryInterval()

      /**
       * The size, in seconds, of the file cache for streaming outputs.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsmediastoresettings.html#cfn-medialive-channel-hlsmediastoresettings-filecacheduration)
       */
      override fun filecacheDuration(): Number? = unwrap(this).getFilecacheDuration()

      /**
       * When set to temporal, output files are stored in non-persistent memory for faster reading
       * and writing.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsmediastoresettings.html#cfn-medialive-channel-hlsmediastoresettings-mediastorestorageclass)
       */
      override fun mediaStoreStorageClass(): String? = unwrap(this).getMediaStoreStorageClass()

      /**
       * The number of retry attempts that are made before the channel is put into an error state.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsmediastoresettings.html#cfn-medialive-channel-hlsmediastoresettings-numretries)
       */
      override fun numRetries(): Number? = unwrap(this).getNumRetries()

      /**
       * If a streaming output fails, the number of seconds to wait until a restart is initiated.
       *
       * A value of 0 means never restart.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsmediastoresettings.html#cfn-medialive-channel-hlsmediastoresettings-restartdelay)
       */
      override fun restartDelay(): Number? = unwrap(this).getRestartDelay()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): HlsMediaStoreSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.HlsMediaStoreSettingsProperty):
          HlsMediaStoreSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          HlsMediaStoreSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: HlsMediaStoreSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.HlsMediaStoreSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.HlsMediaStoreSettingsProperty
    }
  }

  /**
   * The settings for an HLS output.
   *
   * The parent of this entity is OutputSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * HlsOutputSettingsProperty hlsOutputSettingsProperty = HlsOutputSettingsProperty.builder()
   * .h265PackagingType("h265PackagingType")
   * .hlsSettings(HlsSettingsProperty.builder()
   * .audioOnlyHlsSettings(AudioOnlyHlsSettingsProperty.builder()
   * .audioGroupId("audioGroupId")
   * .audioOnlyImage(InputLocationProperty.builder()
   * .passwordParam("passwordParam")
   * .uri("uri")
   * .username("username")
   * .build())
   * .audioTrackType("audioTrackType")
   * .segmentType("segmentType")
   * .build())
   * .fmp4HlsSettings(Fmp4HlsSettingsProperty.builder()
   * .audioRenditionSets("audioRenditionSets")
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .timedMetadataBehavior("timedMetadataBehavior")
   * .build())
   * .frameCaptureHlsSettings(FrameCaptureHlsSettingsProperty.builder().build())
   * .standardHlsSettings(StandardHlsSettingsProperty.builder()
   * .audioRenditionSets("audioRenditionSets")
   * .m3U8Settings(M3u8SettingsProperty.builder()
   * .audioFramesPerPes(123)
   * .audioPids("audioPids")
   * .ecmPid("ecmPid")
   * .klvBehavior("klvBehavior")
   * .klvDataPids("klvDataPids")
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .patInterval(123)
   * .pcrControl("pcrControl")
   * .pcrPeriod(123)
   * .pcrPid("pcrPid")
   * .pmtInterval(123)
   * .pmtPid("pmtPid")
   * .programNum(123)
   * .scte35Behavior("scte35Behavior")
   * .scte35Pid("scte35Pid")
   * .timedMetadataBehavior("timedMetadataBehavior")
   * .timedMetadataPid("timedMetadataPid")
   * .transportStreamId(123)
   * .videoPid("videoPid")
   * .build())
   * .build())
   * .build())
   * .nameModifier("nameModifier")
   * .segmentModifier("segmentModifier")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsoutputsettings.html)
   */
  public interface HlsOutputSettingsProperty {
    /**
     * Only applicable when this output is referencing an H.265 video description. Specifies whether
     * MP4 segments should be packaged as HEV1 or HVC1.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsoutputsettings.html#cfn-medialive-channel-hlsoutputsettings-h265packagingtype)
     */
    public fun h265PackagingType(): String? = unwrap(this).getH265PackagingType()

    /**
     * The settings regarding the underlying stream.
     *
     * These settings are different for audio-only outputs.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsoutputsettings.html#cfn-medialive-channel-hlsoutputsettings-hlssettings)
     */
    public fun hlsSettings(): Any? = unwrap(this).getHlsSettings()

    /**
     * A string that is concatenated to the end of the destination file name.
     *
     * Accepts "Format Identifiers":#formatIdentifierParameters.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsoutputsettings.html#cfn-medialive-channel-hlsoutputsettings-namemodifier)
     */
    public fun nameModifier(): String? = unwrap(this).getNameModifier()

    /**
     * A string that is concatenated to the end of segment file names.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsoutputsettings.html#cfn-medialive-channel-hlsoutputsettings-segmentmodifier)
     */
    public fun segmentModifier(): String? = unwrap(this).getSegmentModifier()

    /**
     * A builder for [HlsOutputSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param h265PackagingType Only applicable when this output is referencing an H.265 video
       * description. Specifies whether MP4 segments should be packaged as HEV1 or HVC1.
       */
      public fun h265PackagingType(h265PackagingType: String)

      /**
       * @param hlsSettings The settings regarding the underlying stream.
       * These settings are different for audio-only outputs.
       */
      public fun hlsSettings(hlsSettings: IResolvable)

      /**
       * @param hlsSettings The settings regarding the underlying stream.
       * These settings are different for audio-only outputs.
       */
      public fun hlsSettings(hlsSettings: HlsSettingsProperty)

      /**
       * @param hlsSettings The settings regarding the underlying stream.
       * These settings are different for audio-only outputs.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("78605301163dbb54e1bc1f60ec8465b400d180739ddf3353dca1f8349ab163c1")
      public fun hlsSettings(hlsSettings: HlsSettingsProperty.Builder.() -> Unit)

      /**
       * @param nameModifier A string that is concatenated to the end of the destination file name.
       * Accepts "Format Identifiers":#formatIdentifierParameters.
       */
      public fun nameModifier(nameModifier: String)

      /**
       * @param segmentModifier A string that is concatenated to the end of segment file names.
       */
      public fun segmentModifier(segmentModifier: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.HlsOutputSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.HlsOutputSettingsProperty.builder()

      /**
       * @param h265PackagingType Only applicable when this output is referencing an H.265 video
       * description. Specifies whether MP4 segments should be packaged as HEV1 or HVC1.
       */
      override fun h265PackagingType(h265PackagingType: String) {
        cdkBuilder.h265PackagingType(h265PackagingType)
      }

      /**
       * @param hlsSettings The settings regarding the underlying stream.
       * These settings are different for audio-only outputs.
       */
      override fun hlsSettings(hlsSettings: IResolvable) {
        cdkBuilder.hlsSettings(hlsSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param hlsSettings The settings regarding the underlying stream.
       * These settings are different for audio-only outputs.
       */
      override fun hlsSettings(hlsSettings: HlsSettingsProperty) {
        cdkBuilder.hlsSettings(hlsSettings.let(HlsSettingsProperty.Companion::unwrap))
      }

      /**
       * @param hlsSettings The settings regarding the underlying stream.
       * These settings are different for audio-only outputs.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("78605301163dbb54e1bc1f60ec8465b400d180739ddf3353dca1f8349ab163c1")
      override fun hlsSettings(hlsSettings: HlsSettingsProperty.Builder.() -> Unit): Unit =
          hlsSettings(HlsSettingsProperty(hlsSettings))

      /**
       * @param nameModifier A string that is concatenated to the end of the destination file name.
       * Accepts "Format Identifiers":#formatIdentifierParameters.
       */
      override fun nameModifier(nameModifier: String) {
        cdkBuilder.nameModifier(nameModifier)
      }

      /**
       * @param segmentModifier A string that is concatenated to the end of segment file names.
       */
      override fun segmentModifier(segmentModifier: String) {
        cdkBuilder.segmentModifier(segmentModifier)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.HlsOutputSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.HlsOutputSettingsProperty,
    ) : CdkObject(cdkObject),
        HlsOutputSettingsProperty {
      /**
       * Only applicable when this output is referencing an H.265 video description. Specifies
       * whether MP4 segments should be packaged as HEV1 or HVC1.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsoutputsettings.html#cfn-medialive-channel-hlsoutputsettings-h265packagingtype)
       */
      override fun h265PackagingType(): String? = unwrap(this).getH265PackagingType()

      /**
       * The settings regarding the underlying stream.
       *
       * These settings are different for audio-only outputs.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsoutputsettings.html#cfn-medialive-channel-hlsoutputsettings-hlssettings)
       */
      override fun hlsSettings(): Any? = unwrap(this).getHlsSettings()

      /**
       * A string that is concatenated to the end of the destination file name.
       *
       * Accepts "Format Identifiers":#formatIdentifierParameters.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsoutputsettings.html#cfn-medialive-channel-hlsoutputsettings-namemodifier)
       */
      override fun nameModifier(): String? = unwrap(this).getNameModifier()

      /**
       * A string that is concatenated to the end of segment file names.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsoutputsettings.html#cfn-medialive-channel-hlsoutputsettings-segmentmodifier)
       */
      override fun segmentModifier(): String? = unwrap(this).getSegmentModifier()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): HlsOutputSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.HlsOutputSettingsProperty):
          HlsOutputSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          HlsOutputSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: HlsOutputSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.HlsOutputSettingsProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.HlsOutputSettingsProperty
    }
  }

  /**
   * Sets up Amazon S3 as the destination for this HLS output.
   *
   * The parent of this entity is HlsCdnSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * HlsS3SettingsProperty hlsS3SettingsProperty = HlsS3SettingsProperty.builder()
   * .cannedAcl("cannedAcl")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlss3settings.html)
   */
  public interface HlsS3SettingsProperty {
    /**
     * Specify the canned ACL to apply to each S3 request.
     *
     * Defaults to none.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlss3settings.html#cfn-medialive-channel-hlss3settings-cannedacl)
     */
    public fun cannedAcl(): String? = unwrap(this).getCannedAcl()

    /**
     * A builder for [HlsS3SettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param cannedAcl Specify the canned ACL to apply to each S3 request.
       * Defaults to none.
       */
      public fun cannedAcl(cannedAcl: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.HlsS3SettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.HlsS3SettingsProperty.builder()

      /**
       * @param cannedAcl Specify the canned ACL to apply to each S3 request.
       * Defaults to none.
       */
      override fun cannedAcl(cannedAcl: String) {
        cdkBuilder.cannedAcl(cannedAcl)
      }

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.HlsS3SettingsProperty
          = cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.HlsS3SettingsProperty,
    ) : CdkObject(cdkObject),
        HlsS3SettingsProperty {
      /**
       * Specify the canned ACL to apply to each S3 request.
       *
       * Defaults to none.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlss3settings.html#cfn-medialive-channel-hlss3settings-cannedacl)
       */
      override fun cannedAcl(): String? = unwrap(this).getCannedAcl()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): HlsS3SettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.HlsS3SettingsProperty):
          HlsS3SettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? HlsS3SettingsProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: HlsS3SettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.HlsS3SettingsProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.HlsS3SettingsProperty
    }
  }

  /**
   * The settings for an HLS output.
   *
   * The parent of this entity is HlsOutputSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * HlsSettingsProperty hlsSettingsProperty = HlsSettingsProperty.builder()
   * .audioOnlyHlsSettings(AudioOnlyHlsSettingsProperty.builder()
   * .audioGroupId("audioGroupId")
   * .audioOnlyImage(InputLocationProperty.builder()
   * .passwordParam("passwordParam")
   * .uri("uri")
   * .username("username")
   * .build())
   * .audioTrackType("audioTrackType")
   * .segmentType("segmentType")
   * .build())
   * .fmp4HlsSettings(Fmp4HlsSettingsProperty.builder()
   * .audioRenditionSets("audioRenditionSets")
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .timedMetadataBehavior("timedMetadataBehavior")
   * .build())
   * .frameCaptureHlsSettings(FrameCaptureHlsSettingsProperty.builder().build())
   * .standardHlsSettings(StandardHlsSettingsProperty.builder()
   * .audioRenditionSets("audioRenditionSets")
   * .m3U8Settings(M3u8SettingsProperty.builder()
   * .audioFramesPerPes(123)
   * .audioPids("audioPids")
   * .ecmPid("ecmPid")
   * .klvBehavior("klvBehavior")
   * .klvDataPids("klvDataPids")
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .patInterval(123)
   * .pcrControl("pcrControl")
   * .pcrPeriod(123)
   * .pcrPid("pcrPid")
   * .pmtInterval(123)
   * .pmtPid("pmtPid")
   * .programNum(123)
   * .scte35Behavior("scte35Behavior")
   * .scte35Pid("scte35Pid")
   * .timedMetadataBehavior("timedMetadataBehavior")
   * .timedMetadataPid("timedMetadataPid")
   * .transportStreamId(123)
   * .videoPid("videoPid")
   * .build())
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlssettings.html)
   */
  public interface HlsSettingsProperty {
    /**
     * The settings for an audio-only output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlssettings.html#cfn-medialive-channel-hlssettings-audioonlyhlssettings)
     */
    public fun audioOnlyHlsSettings(): Any? = unwrap(this).getAudioOnlyHlsSettings()

    /**
     * The settings for an fMP4 container.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlssettings.html#cfn-medialive-channel-hlssettings-fmp4hlssettings)
     */
    public fun fmp4HlsSettings(): Any? = unwrap(this).getFmp4HlsSettings()

    /**
     * Settings for a frame capture output in an HLS output group.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlssettings.html#cfn-medialive-channel-hlssettings-framecapturehlssettings)
     */
    public fun frameCaptureHlsSettings(): Any? = unwrap(this).getFrameCaptureHlsSettings()

    /**
     * The settings for a standard output (an output that is not audio-only).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlssettings.html#cfn-medialive-channel-hlssettings-standardhlssettings)
     */
    public fun standardHlsSettings(): Any? = unwrap(this).getStandardHlsSettings()

    /**
     * A builder for [HlsSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param audioOnlyHlsSettings The settings for an audio-only output.
       */
      public fun audioOnlyHlsSettings(audioOnlyHlsSettings: IResolvable)

      /**
       * @param audioOnlyHlsSettings The settings for an audio-only output.
       */
      public fun audioOnlyHlsSettings(audioOnlyHlsSettings: AudioOnlyHlsSettingsProperty)

      /**
       * @param audioOnlyHlsSettings The settings for an audio-only output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("6bb0210fd9a9456e3162e9522934779729e66c9ab5b4842cc1d27123a55bc751")
      public
          fun audioOnlyHlsSettings(audioOnlyHlsSettings: AudioOnlyHlsSettingsProperty.Builder.() -> Unit)

      /**
       * @param fmp4HlsSettings The settings for an fMP4 container.
       */
      public fun fmp4HlsSettings(fmp4HlsSettings: IResolvable)

      /**
       * @param fmp4HlsSettings The settings for an fMP4 container.
       */
      public fun fmp4HlsSettings(fmp4HlsSettings: Fmp4HlsSettingsProperty)

      /**
       * @param fmp4HlsSettings The settings for an fMP4 container.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("8e58fc58d38f6f42e1a071b54196fd03ae7cd87874eef4026b757878a5641216")
      public fun fmp4HlsSettings(fmp4HlsSettings: Fmp4HlsSettingsProperty.Builder.() -> Unit)

      /**
       * @param frameCaptureHlsSettings Settings for a frame capture output in an HLS output group.
       */
      public fun frameCaptureHlsSettings(frameCaptureHlsSettings: IResolvable)

      /**
       * @param frameCaptureHlsSettings Settings for a frame capture output in an HLS output group.
       */
      public fun frameCaptureHlsSettings(frameCaptureHlsSettings: FrameCaptureHlsSettingsProperty)

      /**
       * @param frameCaptureHlsSettings Settings for a frame capture output in an HLS output group.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("f43465b294ed51517016804135fd9ecf4aa542f567808e8cb9b58aa054e8b068")
      public
          fun frameCaptureHlsSettings(frameCaptureHlsSettings: FrameCaptureHlsSettingsProperty.Builder.() -> Unit)

      /**
       * @param standardHlsSettings The settings for a standard output (an output that is not
       * audio-only).
       */
      public fun standardHlsSettings(standardHlsSettings: IResolvable)

      /**
       * @param standardHlsSettings The settings for a standard output (an output that is not
       * audio-only).
       */
      public fun standardHlsSettings(standardHlsSettings: StandardHlsSettingsProperty)

      /**
       * @param standardHlsSettings The settings for a standard output (an output that is not
       * audio-only).
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("d66e90b7e5bdaf459e62ffba6ca7f9dc821e40a46a92d0d1688dafb9b2ef99d4")
      public
          fun standardHlsSettings(standardHlsSettings: StandardHlsSettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.HlsSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.HlsSettingsProperty.builder()

      /**
       * @param audioOnlyHlsSettings The settings for an audio-only output.
       */
      override fun audioOnlyHlsSettings(audioOnlyHlsSettings: IResolvable) {
        cdkBuilder.audioOnlyHlsSettings(audioOnlyHlsSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param audioOnlyHlsSettings The settings for an audio-only output.
       */
      override fun audioOnlyHlsSettings(audioOnlyHlsSettings: AudioOnlyHlsSettingsProperty) {
        cdkBuilder.audioOnlyHlsSettings(audioOnlyHlsSettings.let(AudioOnlyHlsSettingsProperty.Companion::unwrap))
      }

      /**
       * @param audioOnlyHlsSettings The settings for an audio-only output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("6bb0210fd9a9456e3162e9522934779729e66c9ab5b4842cc1d27123a55bc751")
      override
          fun audioOnlyHlsSettings(audioOnlyHlsSettings: AudioOnlyHlsSettingsProperty.Builder.() -> Unit):
          Unit = audioOnlyHlsSettings(AudioOnlyHlsSettingsProperty(audioOnlyHlsSettings))

      /**
       * @param fmp4HlsSettings The settings for an fMP4 container.
       */
      override fun fmp4HlsSettings(fmp4HlsSettings: IResolvable) {
        cdkBuilder.fmp4HlsSettings(fmp4HlsSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param fmp4HlsSettings The settings for an fMP4 container.
       */
      override fun fmp4HlsSettings(fmp4HlsSettings: Fmp4HlsSettingsProperty) {
        cdkBuilder.fmp4HlsSettings(fmp4HlsSettings.let(Fmp4HlsSettingsProperty.Companion::unwrap))
      }

      /**
       * @param fmp4HlsSettings The settings for an fMP4 container.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("8e58fc58d38f6f42e1a071b54196fd03ae7cd87874eef4026b757878a5641216")
      override fun fmp4HlsSettings(fmp4HlsSettings: Fmp4HlsSettingsProperty.Builder.() -> Unit):
          Unit = fmp4HlsSettings(Fmp4HlsSettingsProperty(fmp4HlsSettings))

      /**
       * @param frameCaptureHlsSettings Settings for a frame capture output in an HLS output group.
       */
      override fun frameCaptureHlsSettings(frameCaptureHlsSettings: IResolvable) {
        cdkBuilder.frameCaptureHlsSettings(frameCaptureHlsSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param frameCaptureHlsSettings Settings for a frame capture output in an HLS output group.
       */
      override
          fun frameCaptureHlsSettings(frameCaptureHlsSettings: FrameCaptureHlsSettingsProperty) {
        cdkBuilder.frameCaptureHlsSettings(frameCaptureHlsSettings.let(FrameCaptureHlsSettingsProperty.Companion::unwrap))
      }

      /**
       * @param frameCaptureHlsSettings Settings for a frame capture output in an HLS output group.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("f43465b294ed51517016804135fd9ecf4aa542f567808e8cb9b58aa054e8b068")
      override
          fun frameCaptureHlsSettings(frameCaptureHlsSettings: FrameCaptureHlsSettingsProperty.Builder.() -> Unit):
          Unit = frameCaptureHlsSettings(FrameCaptureHlsSettingsProperty(frameCaptureHlsSettings))

      /**
       * @param standardHlsSettings The settings for a standard output (an output that is not
       * audio-only).
       */
      override fun standardHlsSettings(standardHlsSettings: IResolvable) {
        cdkBuilder.standardHlsSettings(standardHlsSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param standardHlsSettings The settings for a standard output (an output that is not
       * audio-only).
       */
      override fun standardHlsSettings(standardHlsSettings: StandardHlsSettingsProperty) {
        cdkBuilder.standardHlsSettings(standardHlsSettings.let(StandardHlsSettingsProperty.Companion::unwrap))
      }

      /**
       * @param standardHlsSettings The settings for a standard output (an output that is not
       * audio-only).
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("d66e90b7e5bdaf459e62ffba6ca7f9dc821e40a46a92d0d1688dafb9b2ef99d4")
      override
          fun standardHlsSettings(standardHlsSettings: StandardHlsSettingsProperty.Builder.() -> Unit):
          Unit = standardHlsSettings(StandardHlsSettingsProperty(standardHlsSettings))

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.HlsSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.HlsSettingsProperty,
    ) : CdkObject(cdkObject),
        HlsSettingsProperty {
      /**
       * The settings for an audio-only output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlssettings.html#cfn-medialive-channel-hlssettings-audioonlyhlssettings)
       */
      override fun audioOnlyHlsSettings(): Any? = unwrap(this).getAudioOnlyHlsSettings()

      /**
       * The settings for an fMP4 container.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlssettings.html#cfn-medialive-channel-hlssettings-fmp4hlssettings)
       */
      override fun fmp4HlsSettings(): Any? = unwrap(this).getFmp4HlsSettings()

      /**
       * Settings for a frame capture output in an HLS output group.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlssettings.html#cfn-medialive-channel-hlssettings-framecapturehlssettings)
       */
      override fun frameCaptureHlsSettings(): Any? = unwrap(this).getFrameCaptureHlsSettings()

      /**
       * The settings for a standard output (an output that is not audio-only).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlssettings.html#cfn-medialive-channel-hlssettings-standardhlssettings)
       */
      override fun standardHlsSettings(): Any? = unwrap(this).getStandardHlsSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): HlsSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.HlsSettingsProperty):
          HlsSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? HlsSettingsProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: HlsSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.HlsSettingsProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.HlsSettingsProperty
    }
  }

  /**
   * The configuration of a WebDav server as the downstream system for an HLS output.
   *
   * The parent of this entity is HlsCdnSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * HlsWebdavSettingsProperty hlsWebdavSettingsProperty = HlsWebdavSettingsProperty.builder()
   * .connectionRetryInterval(123)
   * .filecacheDuration(123)
   * .httpTransferMode("httpTransferMode")
   * .numRetries(123)
   * .restartDelay(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlswebdavsettings.html)
   */
  public interface HlsWebdavSettingsProperty {
    /**
     * The number of seconds to wait before retrying a connection to the CDN if the connection is
     * lost.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlswebdavsettings.html#cfn-medialive-channel-hlswebdavsettings-connectionretryinterval)
     */
    public fun connectionRetryInterval(): Number? = unwrap(this).getConnectionRetryInterval()

    /**
     * The size, in seconds, of the file cache for streaming outputs.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlswebdavsettings.html#cfn-medialive-channel-hlswebdavsettings-filecacheduration)
     */
    public fun filecacheDuration(): Number? = unwrap(this).getFilecacheDuration()

    /**
     * Specifies whether to use chunked transfer encoding to WebDAV.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlswebdavsettings.html#cfn-medialive-channel-hlswebdavsettings-httptransfermode)
     */
    public fun httpTransferMode(): String? = unwrap(this).getHttpTransferMode()

    /**
     * The number of retry attempts that are made before the channel is put into an error state.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlswebdavsettings.html#cfn-medialive-channel-hlswebdavsettings-numretries)
     */
    public fun numRetries(): Number? = unwrap(this).getNumRetries()

    /**
     * If a streaming output fails, the number of seconds to wait until a restart is initiated.
     *
     * A value of 0 means never restart.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlswebdavsettings.html#cfn-medialive-channel-hlswebdavsettings-restartdelay)
     */
    public fun restartDelay(): Number? = unwrap(this).getRestartDelay()

    /**
     * A builder for [HlsWebdavSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param connectionRetryInterval The number of seconds to wait before retrying a connection
       * to the CDN if the connection is lost.
       */
      public fun connectionRetryInterval(connectionRetryInterval: Number)

      /**
       * @param filecacheDuration The size, in seconds, of the file cache for streaming outputs.
       */
      public fun filecacheDuration(filecacheDuration: Number)

      /**
       * @param httpTransferMode Specifies whether to use chunked transfer encoding to WebDAV.
       */
      public fun httpTransferMode(httpTransferMode: String)

      /**
       * @param numRetries The number of retry attempts that are made before the channel is put into
       * an error state.
       */
      public fun numRetries(numRetries: Number)

      /**
       * @param restartDelay If a streaming output fails, the number of seconds to wait until a
       * restart is initiated.
       * A value of 0 means never restart.
       */
      public fun restartDelay(restartDelay: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.HlsWebdavSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.HlsWebdavSettingsProperty.builder()

      /**
       * @param connectionRetryInterval The number of seconds to wait before retrying a connection
       * to the CDN if the connection is lost.
       */
      override fun connectionRetryInterval(connectionRetryInterval: Number) {
        cdkBuilder.connectionRetryInterval(connectionRetryInterval)
      }

      /**
       * @param filecacheDuration The size, in seconds, of the file cache for streaming outputs.
       */
      override fun filecacheDuration(filecacheDuration: Number) {
        cdkBuilder.filecacheDuration(filecacheDuration)
      }

      /**
       * @param httpTransferMode Specifies whether to use chunked transfer encoding to WebDAV.
       */
      override fun httpTransferMode(httpTransferMode: String) {
        cdkBuilder.httpTransferMode(httpTransferMode)
      }

      /**
       * @param numRetries The number of retry attempts that are made before the channel is put into
       * an error state.
       */
      override fun numRetries(numRetries: Number) {
        cdkBuilder.numRetries(numRetries)
      }

      /**
       * @param restartDelay If a streaming output fails, the number of seconds to wait until a
       * restart is initiated.
       * A value of 0 means never restart.
       */
      override fun restartDelay(restartDelay: Number) {
        cdkBuilder.restartDelay(restartDelay)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.HlsWebdavSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.HlsWebdavSettingsProperty,
    ) : CdkObject(cdkObject),
        HlsWebdavSettingsProperty {
      /**
       * The number of seconds to wait before retrying a connection to the CDN if the connection is
       * lost.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlswebdavsettings.html#cfn-medialive-channel-hlswebdavsettings-connectionretryinterval)
       */
      override fun connectionRetryInterval(): Number? = unwrap(this).getConnectionRetryInterval()

      /**
       * The size, in seconds, of the file cache for streaming outputs.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlswebdavsettings.html#cfn-medialive-channel-hlswebdavsettings-filecacheduration)
       */
      override fun filecacheDuration(): Number? = unwrap(this).getFilecacheDuration()

      /**
       * Specifies whether to use chunked transfer encoding to WebDAV.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlswebdavsettings.html#cfn-medialive-channel-hlswebdavsettings-httptransfermode)
       */
      override fun httpTransferMode(): String? = unwrap(this).getHttpTransferMode()

      /**
       * The number of retry attempts that are made before the channel is put into an error state.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlswebdavsettings.html#cfn-medialive-channel-hlswebdavsettings-numretries)
       */
      override fun numRetries(): Number? = unwrap(this).getNumRetries()

      /**
       * If a streaming output fails, the number of seconds to wait until a restart is initiated.
       *
       * A value of 0 means never restart.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlswebdavsettings.html#cfn-medialive-channel-hlswebdavsettings-restartdelay)
       */
      override fun restartDelay(): Number? = unwrap(this).getRestartDelay()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): HlsWebdavSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.HlsWebdavSettingsProperty):
          HlsWebdavSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          HlsWebdavSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: HlsWebdavSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.HlsWebdavSettingsProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.HlsWebdavSettingsProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * HtmlMotionGraphicsSettingsProperty htmlMotionGraphicsSettingsProperty =
   * HtmlMotionGraphicsSettingsProperty.builder().build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-htmlmotiongraphicssettings.html)
   */
  public interface HtmlMotionGraphicsSettingsProperty {
    /**
     * A builder for [HtmlMotionGraphicsSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.HtmlMotionGraphicsSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.HtmlMotionGraphicsSettingsProperty.builder()

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.HtmlMotionGraphicsSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.HtmlMotionGraphicsSettingsProperty,
    ) : CdkObject(cdkObject),
        HtmlMotionGraphicsSettingsProperty

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          HtmlMotionGraphicsSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.HtmlMotionGraphicsSettingsProperty):
          HtmlMotionGraphicsSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          HtmlMotionGraphicsSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: HtmlMotionGraphicsSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.HtmlMotionGraphicsSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.HtmlMotionGraphicsSettingsProperty
    }
  }

  /**
   * An input to attach to this channel.
   *
   * This entity is at the top level in the channel.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * InputAttachmentProperty inputAttachmentProperty = InputAttachmentProperty.builder()
   * .automaticInputFailoverSettings(AutomaticInputFailoverSettingsProperty.builder()
   * .errorClearTimeMsec(123)
   * .failoverConditions(List.of(FailoverConditionProperty.builder()
   * .failoverConditionSettings(FailoverConditionSettingsProperty.builder()
   * .audioSilenceSettings(AudioSilenceFailoverSettingsProperty.builder()
   * .audioSelectorName("audioSelectorName")
   * .audioSilenceThresholdMsec(123)
   * .build())
   * .inputLossSettings(InputLossFailoverSettingsProperty.builder()
   * .inputLossThresholdMsec(123)
   * .build())
   * .videoBlackSettings(VideoBlackFailoverSettingsProperty.builder()
   * .blackDetectThreshold(123)
   * .videoBlackThresholdMsec(123)
   * .build())
   * .build())
   * .build()))
   * .inputPreference("inputPreference")
   * .secondaryInputId("secondaryInputId")
   * .build())
   * .inputAttachmentName("inputAttachmentName")
   * .inputId("inputId")
   * .inputSettings(InputSettingsProperty.builder()
   * .audioSelectors(List.of(AudioSelectorProperty.builder()
   * .name("name")
   * .selectorSettings(AudioSelectorSettingsProperty.builder()
   * .audioHlsRenditionSelection(AudioHlsRenditionSelectionProperty.builder()
   * .groupId("groupId")
   * .name("name")
   * .build())
   * .audioLanguageSelection(AudioLanguageSelectionProperty.builder()
   * .languageCode("languageCode")
   * .languageSelectionPolicy("languageSelectionPolicy")
   * .build())
   * .audioPidSelection(AudioPidSelectionProperty.builder()
   * .pid(123)
   * .build())
   * .audioTrackSelection(AudioTrackSelectionProperty.builder()
   * .dolbyEDecode(AudioDolbyEDecodeProperty.builder()
   * .programSelection("programSelection")
   * .build())
   * .tracks(List.of(AudioTrackProperty.builder()
   * .track(123)
   * .build()))
   * .build())
   * .build())
   * .build()))
   * .captionSelectors(List.of(CaptionSelectorProperty.builder()
   * .languageCode("languageCode")
   * .name("name")
   * .selectorSettings(CaptionSelectorSettingsProperty.builder()
   * .ancillarySourceSettings(AncillarySourceSettingsProperty.builder()
   * .sourceAncillaryChannelNumber(123)
   * .build())
   * .aribSourceSettings(AribSourceSettingsProperty.builder().build())
   * .dvbSubSourceSettings(DvbSubSourceSettingsProperty.builder()
   * .ocrLanguage("ocrLanguage")
   * .pid(123)
   * .build())
   * .embeddedSourceSettings(EmbeddedSourceSettingsProperty.builder()
   * .convert608To708("convert608To708")
   * .scte20Detection("scte20Detection")
   * .source608ChannelNumber(123)
   * .source608TrackNumber(123)
   * .build())
   * .scte20SourceSettings(Scte20SourceSettingsProperty.builder()
   * .convert608To708("convert608To708")
   * .source608ChannelNumber(123)
   * .build())
   * .scte27SourceSettings(Scte27SourceSettingsProperty.builder()
   * .ocrLanguage("ocrLanguage")
   * .pid(123)
   * .build())
   * .teletextSourceSettings(TeletextSourceSettingsProperty.builder()
   * .outputRectangle(CaptionRectangleProperty.builder()
   * .height(123)
   * .leftOffset(123)
   * .topOffset(123)
   * .width(123)
   * .build())
   * .pageNumber("pageNumber")
   * .build())
   * .build())
   * .build()))
   * .deblockFilter("deblockFilter")
   * .denoiseFilter("denoiseFilter")
   * .filterStrength(123)
   * .inputFilter("inputFilter")
   * .networkInputSettings(NetworkInputSettingsProperty.builder()
   * .hlsInputSettings(HlsInputSettingsProperty.builder()
   * .bandwidth(123)
   * .bufferSegments(123)
   * .retries(123)
   * .retryInterval(123)
   * .scte35Source("scte35Source")
   * .build())
   * .serverValidation("serverValidation")
   * .build())
   * .scte35Pid(123)
   * .smpte2038DataPreference("smpte2038DataPreference")
   * .sourceEndBehavior("sourceEndBehavior")
   * .videoSelector(VideoSelectorProperty.builder()
   * .colorSpace("colorSpace")
   * .colorSpaceSettings(VideoSelectorColorSpaceSettingsProperty.builder()
   * .hdr10Settings(Hdr10SettingsProperty.builder()
   * .maxCll(123)
   * .maxFall(123)
   * .build())
   * .build())
   * .colorSpaceUsage("colorSpaceUsage")
   * .selectorSettings(VideoSelectorSettingsProperty.builder()
   * .videoSelectorPid(VideoSelectorPidProperty.builder()
   * .pid(123)
   * .build())
   * .videoSelectorProgramId(VideoSelectorProgramIdProperty.builder()
   * .programId(123)
   * .build())
   * .build())
   * .build())
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputattachment.html)
   */
  public interface InputAttachmentProperty {
    /**
     * Settings to implement automatic input failover in this input.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputattachment.html#cfn-medialive-channel-inputattachment-automaticinputfailoversettings)
     */
    public fun automaticInputFailoverSettings(): Any? =
        unwrap(this).getAutomaticInputFailoverSettings()

    /**
     * A name for the attachment.
     *
     * This is required if you want to use this input in an input switch action.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputattachment.html#cfn-medialive-channel-inputattachment-inputattachmentname)
     */
    public fun inputAttachmentName(): String? = unwrap(this).getInputAttachmentName()

    /**
     * The ID of the input to attach.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputattachment.html#cfn-medialive-channel-inputattachment-inputid)
     */
    public fun inputId(): String? = unwrap(this).getInputId()

    /**
     * Information about the content to extract from the input and about the general handling of the
     * content.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputattachment.html#cfn-medialive-channel-inputattachment-inputsettings)
     */
    public fun inputSettings(): Any? = unwrap(this).getInputSettings()

    /**
     * A builder for [InputAttachmentProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param automaticInputFailoverSettings Settings to implement automatic input failover in
       * this input.
       */
      public fun automaticInputFailoverSettings(automaticInputFailoverSettings: IResolvable)

      /**
       * @param automaticInputFailoverSettings Settings to implement automatic input failover in
       * this input.
       */
      public
          fun automaticInputFailoverSettings(automaticInputFailoverSettings: AutomaticInputFailoverSettingsProperty)

      /**
       * @param automaticInputFailoverSettings Settings to implement automatic input failover in
       * this input.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("954fc978f58ba5eaf0d23afb3834f555b4f16005f79105ca819f13e721439d3f")
      public
          fun automaticInputFailoverSettings(automaticInputFailoverSettings: AutomaticInputFailoverSettingsProperty.Builder.() -> Unit)

      /**
       * @param inputAttachmentName A name for the attachment.
       * This is required if you want to use this input in an input switch action.
       */
      public fun inputAttachmentName(inputAttachmentName: String)

      /**
       * @param inputId The ID of the input to attach.
       */
      public fun inputId(inputId: String)

      /**
       * @param inputSettings Information about the content to extract from the input and about the
       * general handling of the content.
       */
      public fun inputSettings(inputSettings: IResolvable)

      /**
       * @param inputSettings Information about the content to extract from the input and about the
       * general handling of the content.
       */
      public fun inputSettings(inputSettings: InputSettingsProperty)

      /**
       * @param inputSettings Information about the content to extract from the input and about the
       * general handling of the content.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("40fd982f031418e7a89f9e8318bb9b2455be74009e2c8102957b842f53500f5a")
      public fun inputSettings(inputSettings: InputSettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.InputAttachmentProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.InputAttachmentProperty.builder()

      /**
       * @param automaticInputFailoverSettings Settings to implement automatic input failover in
       * this input.
       */
      override fun automaticInputFailoverSettings(automaticInputFailoverSettings: IResolvable) {
        cdkBuilder.automaticInputFailoverSettings(automaticInputFailoverSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param automaticInputFailoverSettings Settings to implement automatic input failover in
       * this input.
       */
      override
          fun automaticInputFailoverSettings(automaticInputFailoverSettings: AutomaticInputFailoverSettingsProperty) {
        cdkBuilder.automaticInputFailoverSettings(automaticInputFailoverSettings.let(AutomaticInputFailoverSettingsProperty.Companion::unwrap))
      }

      /**
       * @param automaticInputFailoverSettings Settings to implement automatic input failover in
       * this input.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("954fc978f58ba5eaf0d23afb3834f555b4f16005f79105ca819f13e721439d3f")
      override
          fun automaticInputFailoverSettings(automaticInputFailoverSettings: AutomaticInputFailoverSettingsProperty.Builder.() -> Unit):
          Unit =
          automaticInputFailoverSettings(AutomaticInputFailoverSettingsProperty(automaticInputFailoverSettings))

      /**
       * @param inputAttachmentName A name for the attachment.
       * This is required if you want to use this input in an input switch action.
       */
      override fun inputAttachmentName(inputAttachmentName: String) {
        cdkBuilder.inputAttachmentName(inputAttachmentName)
      }

      /**
       * @param inputId The ID of the input to attach.
       */
      override fun inputId(inputId: String) {
        cdkBuilder.inputId(inputId)
      }

      /**
       * @param inputSettings Information about the content to extract from the input and about the
       * general handling of the content.
       */
      override fun inputSettings(inputSettings: IResolvable) {
        cdkBuilder.inputSettings(inputSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param inputSettings Information about the content to extract from the input and about the
       * general handling of the content.
       */
      override fun inputSettings(inputSettings: InputSettingsProperty) {
        cdkBuilder.inputSettings(inputSettings.let(InputSettingsProperty.Companion::unwrap))
      }

      /**
       * @param inputSettings Information about the content to extract from the input and about the
       * general handling of the content.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("40fd982f031418e7a89f9e8318bb9b2455be74009e2c8102957b842f53500f5a")
      override fun inputSettings(inputSettings: InputSettingsProperty.Builder.() -> Unit): Unit =
          inputSettings(InputSettingsProperty(inputSettings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.InputAttachmentProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.InputAttachmentProperty,
    ) : CdkObject(cdkObject),
        InputAttachmentProperty {
      /**
       * Settings to implement automatic input failover in this input.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputattachment.html#cfn-medialive-channel-inputattachment-automaticinputfailoversettings)
       */
      override fun automaticInputFailoverSettings(): Any? =
          unwrap(this).getAutomaticInputFailoverSettings()

      /**
       * A name for the attachment.
       *
       * This is required if you want to use this input in an input switch action.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputattachment.html#cfn-medialive-channel-inputattachment-inputattachmentname)
       */
      override fun inputAttachmentName(): String? = unwrap(this).getInputAttachmentName()

      /**
       * The ID of the input to attach.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputattachment.html#cfn-medialive-channel-inputattachment-inputid)
       */
      override fun inputId(): String? = unwrap(this).getInputId()

      /**
       * Information about the content to extract from the input and about the general handling of
       * the content.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputattachment.html#cfn-medialive-channel-inputattachment-inputsettings)
       */
      override fun inputSettings(): Any? = unwrap(this).getInputSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): InputAttachmentProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.InputAttachmentProperty):
          InputAttachmentProperty = CdkObjectWrappers.wrap(cdkObject) as? InputAttachmentProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: InputAttachmentProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.InputAttachmentProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.InputAttachmentProperty
    }
  }

  /**
   * The setting to remix the audio.
   *
   * The parent of this entity is AudioChannelMappings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * InputChannelLevelProperty inputChannelLevelProperty = InputChannelLevelProperty.builder()
   * .gain(123)
   * .inputChannel(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputchannellevel.html)
   */
  public interface InputChannelLevelProperty {
    /**
     * The remixing value.
     *
     * Units are in dB, and acceptable values are within the range from -60 (mute) to 6 dB.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputchannellevel.html#cfn-medialive-channel-inputchannellevel-gain)
     */
    public fun gain(): Number? = unwrap(this).getGain()

    /**
     * The index of the input channel that is used as a source.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputchannellevel.html#cfn-medialive-channel-inputchannellevel-inputchannel)
     */
    public fun inputChannel(): Number? = unwrap(this).getInputChannel()

    /**
     * A builder for [InputChannelLevelProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param gain The remixing value.
       * Units are in dB, and acceptable values are within the range from -60 (mute) to 6 dB.
       */
      public fun gain(gain: Number)

      /**
       * @param inputChannel The index of the input channel that is used as a source.
       */
      public fun inputChannel(inputChannel: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.InputChannelLevelProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.InputChannelLevelProperty.builder()

      /**
       * @param gain The remixing value.
       * Units are in dB, and acceptable values are within the range from -60 (mute) to 6 dB.
       */
      override fun gain(gain: Number) {
        cdkBuilder.gain(gain)
      }

      /**
       * @param inputChannel The index of the input channel that is used as a source.
       */
      override fun inputChannel(inputChannel: Number) {
        cdkBuilder.inputChannel(inputChannel)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.InputChannelLevelProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.InputChannelLevelProperty,
    ) : CdkObject(cdkObject),
        InputChannelLevelProperty {
      /**
       * The remixing value.
       *
       * Units are in dB, and acceptable values are within the range from -60 (mute) to 6 dB.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputchannellevel.html#cfn-medialive-channel-inputchannellevel-gain)
       */
      override fun gain(): Number? = unwrap(this).getGain()

      /**
       * The index of the input channel that is used as a source.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputchannellevel.html#cfn-medialive-channel-inputchannellevel-inputchannel)
       */
      override fun inputChannel(): Number? = unwrap(this).getInputChannel()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): InputChannelLevelProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.InputChannelLevelProperty):
          InputChannelLevelProperty = CdkObjectWrappers.wrap(cdkObject) as?
          InputChannelLevelProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: InputChannelLevelProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.InputChannelLevelProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.InputChannelLevelProperty
    }
  }

  /**
   * The input location.
   *
   * The parent of this entity is InputLossBehavior.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * InputLocationProperty inputLocationProperty = InputLocationProperty.builder()
   * .passwordParam("passwordParam")
   * .uri("uri")
   * .username("username")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlocation.html)
   */
  public interface InputLocationProperty {
    /**
     * The password parameter that holds the password for accessing the downstream system.
     *
     * This applies only if the downstream system requires credentials.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlocation.html#cfn-medialive-channel-inputlocation-passwordparam)
     */
    public fun passwordParam(): String? = unwrap(this).getPasswordParam()

    /**
     * The URI should be a path to a file that is accessible to the Live system (for example, an
     * http:// URI) depending on the output type.
     *
     * For example, an RTMP destination should have a URI similar to rtmp://fmsserver/live.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlocation.html#cfn-medialive-channel-inputlocation-uri)
     */
    public fun uri(): String? = unwrap(this).getUri()

    /**
     * The user name to connect to the downstream system.
     *
     * This applies only if the downstream system requires credentials.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlocation.html#cfn-medialive-channel-inputlocation-username)
     */
    public fun username(): String? = unwrap(this).getUsername()

    /**
     * A builder for [InputLocationProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param passwordParam The password parameter that holds the password for accessing the
       * downstream system.
       * This applies only if the downstream system requires credentials.
       */
      public fun passwordParam(passwordParam: String)

      /**
       * @param uri The URI should be a path to a file that is accessible to the Live system (for
       * example, an http:// URI) depending on the output type.
       * For example, an RTMP destination should have a URI similar to rtmp://fmsserver/live.
       */
      public fun uri(uri: String)

      /**
       * @param username The user name to connect to the downstream system.
       * This applies only if the downstream system requires credentials.
       */
      public fun username(username: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.InputLocationProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.InputLocationProperty.builder()

      /**
       * @param passwordParam The password parameter that holds the password for accessing the
       * downstream system.
       * This applies only if the downstream system requires credentials.
       */
      override fun passwordParam(passwordParam: String) {
        cdkBuilder.passwordParam(passwordParam)
      }

      /**
       * @param uri The URI should be a path to a file that is accessible to the Live system (for
       * example, an http:// URI) depending on the output type.
       * For example, an RTMP destination should have a URI similar to rtmp://fmsserver/live.
       */
      override fun uri(uri: String) {
        cdkBuilder.uri(uri)
      }

      /**
       * @param username The user name to connect to the downstream system.
       * This applies only if the downstream system requires credentials.
       */
      override fun username(username: String) {
        cdkBuilder.username(username)
      }

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.InputLocationProperty
          = cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.InputLocationProperty,
    ) : CdkObject(cdkObject),
        InputLocationProperty {
      /**
       * The password parameter that holds the password for accessing the downstream system.
       *
       * This applies only if the downstream system requires credentials.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlocation.html#cfn-medialive-channel-inputlocation-passwordparam)
       */
      override fun passwordParam(): String? = unwrap(this).getPasswordParam()

      /**
       * The URI should be a path to a file that is accessible to the Live system (for example, an
       * http:// URI) depending on the output type.
       *
       * For example, an RTMP destination should have a URI similar to rtmp://fmsserver/live.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlocation.html#cfn-medialive-channel-inputlocation-uri)
       */
      override fun uri(): String? = unwrap(this).getUri()

      /**
       * The user name to connect to the downstream system.
       *
       * This applies only if the downstream system requires credentials.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlocation.html#cfn-medialive-channel-inputlocation-username)
       */
      override fun username(): String? = unwrap(this).getUsername()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): InputLocationProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.InputLocationProperty):
          InputLocationProperty = CdkObjectWrappers.wrap(cdkObject) as? InputLocationProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: InputLocationProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.InputLocationProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.InputLocationProperty
    }
  }

  /**
   * The configuration of channel behavior when the input is lost.
   *
   * The parent of this entity is GlobalConfiguration.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * InputLossBehaviorProperty inputLossBehaviorProperty = InputLossBehaviorProperty.builder()
   * .blackFrameMsec(123)
   * .inputLossImageColor("inputLossImageColor")
   * .inputLossImageSlate(InputLocationProperty.builder()
   * .passwordParam("passwordParam")
   * .uri("uri")
   * .username("username")
   * .build())
   * .inputLossImageType("inputLossImageType")
   * .repeatFrameMsec(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlossbehavior.html)
   */
  public interface InputLossBehaviorProperty {
    /**
     * On input loss, the number of milliseconds to substitute black into the output before
     * switching to the frame specified by inputLossImageType.
     *
     * A value x, where 0 <= x <= 1,000,000 and a value of 1,000,000, is interpreted as
     * infinite.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlossbehavior.html#cfn-medialive-channel-inputlossbehavior-blackframemsec)
     */
    public fun blackFrameMsec(): Number? = unwrap(this).getBlackFrameMsec()

    /**
     * When the input loss image type is "color," this field specifies the color to use.
     *
     * Value: 6 hex characters that represent the values of RGB.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlossbehavior.html#cfn-medialive-channel-inputlossbehavior-inputlossimagecolor)
     */
    public fun inputLossImageColor(): String? = unwrap(this).getInputLossImageColor()

    /**
     * When the input loss image type is "slate," these fields specify the parameters for accessing
     * the slate.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlossbehavior.html#cfn-medialive-channel-inputlossbehavior-inputlossimageslate)
     */
    public fun inputLossImageSlate(): Any? = unwrap(this).getInputLossImageSlate()

    /**
     * Indicates whether to substitute a solid color or a slate into the output after the input loss
     * exceeds blackFrameMsec.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlossbehavior.html#cfn-medialive-channel-inputlossbehavior-inputlossimagetype)
     */
    public fun inputLossImageType(): String? = unwrap(this).getInputLossImageType()

    /**
     * On input loss, the number of milliseconds to repeat the previous picture before substituting
     * black into the output.
     *
     * A value x, where 0 <= x <= 1,000,000 and a value of 1,000,000, is interpreted as
     * infinite.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlossbehavior.html#cfn-medialive-channel-inputlossbehavior-repeatframemsec)
     */
    public fun repeatFrameMsec(): Number? = unwrap(this).getRepeatFrameMsec()

    /**
     * A builder for [InputLossBehaviorProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param blackFrameMsec On input loss, the number of milliseconds to substitute black into
       * the output before switching to the frame specified by inputLossImageType.
       * A value x, where 0 <= x <= 1,000,000 and a value of 1,000,000, is interpreted as
       * infinite.
       */
      public fun blackFrameMsec(blackFrameMsec: Number)

      /**
       * @param inputLossImageColor When the input loss image type is "color," this field specifies
       * the color to use.
       * Value: 6 hex characters that represent the values of RGB.
       */
      public fun inputLossImageColor(inputLossImageColor: String)

      /**
       * @param inputLossImageSlate When the input loss image type is "slate," these fields specify
       * the parameters for accessing the slate.
       */
      public fun inputLossImageSlate(inputLossImageSlate: IResolvable)

      /**
       * @param inputLossImageSlate When the input loss image type is "slate," these fields specify
       * the parameters for accessing the slate.
       */
      public fun inputLossImageSlate(inputLossImageSlate: InputLocationProperty)

      /**
       * @param inputLossImageSlate When the input loss image type is "slate," these fields specify
       * the parameters for accessing the slate.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("4cfe8d542c52f225e2cb0f83322cf9508c28c73c9ed3281eee1e25d0c8b197fc")
      public fun inputLossImageSlate(inputLossImageSlate: InputLocationProperty.Builder.() -> Unit)

      /**
       * @param inputLossImageType Indicates whether to substitute a solid color or a slate into the
       * output after the input loss exceeds blackFrameMsec.
       */
      public fun inputLossImageType(inputLossImageType: String)

      /**
       * @param repeatFrameMsec On input loss, the number of milliseconds to repeat the previous
       * picture before substituting black into the output.
       * A value x, where 0 <= x <= 1,000,000 and a value of 1,000,000, is interpreted as
       * infinite.
       */
      public fun repeatFrameMsec(repeatFrameMsec: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.InputLossBehaviorProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.InputLossBehaviorProperty.builder()

      /**
       * @param blackFrameMsec On input loss, the number of milliseconds to substitute black into
       * the output before switching to the frame specified by inputLossImageType.
       * A value x, where 0 <= x <= 1,000,000 and a value of 1,000,000, is interpreted as
       * infinite.
       */
      override fun blackFrameMsec(blackFrameMsec: Number) {
        cdkBuilder.blackFrameMsec(blackFrameMsec)
      }

      /**
       * @param inputLossImageColor When the input loss image type is "color," this field specifies
       * the color to use.
       * Value: 6 hex characters that represent the values of RGB.
       */
      override fun inputLossImageColor(inputLossImageColor: String) {
        cdkBuilder.inputLossImageColor(inputLossImageColor)
      }

      /**
       * @param inputLossImageSlate When the input loss image type is "slate," these fields specify
       * the parameters for accessing the slate.
       */
      override fun inputLossImageSlate(inputLossImageSlate: IResolvable) {
        cdkBuilder.inputLossImageSlate(inputLossImageSlate.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param inputLossImageSlate When the input loss image type is "slate," these fields specify
       * the parameters for accessing the slate.
       */
      override fun inputLossImageSlate(inputLossImageSlate: InputLocationProperty) {
        cdkBuilder.inputLossImageSlate(inputLossImageSlate.let(InputLocationProperty.Companion::unwrap))
      }

      /**
       * @param inputLossImageSlate When the input loss image type is "slate," these fields specify
       * the parameters for accessing the slate.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("4cfe8d542c52f225e2cb0f83322cf9508c28c73c9ed3281eee1e25d0c8b197fc")
      override
          fun inputLossImageSlate(inputLossImageSlate: InputLocationProperty.Builder.() -> Unit):
          Unit = inputLossImageSlate(InputLocationProperty(inputLossImageSlate))

      /**
       * @param inputLossImageType Indicates whether to substitute a solid color or a slate into the
       * output after the input loss exceeds blackFrameMsec.
       */
      override fun inputLossImageType(inputLossImageType: String) {
        cdkBuilder.inputLossImageType(inputLossImageType)
      }

      /**
       * @param repeatFrameMsec On input loss, the number of milliseconds to repeat the previous
       * picture before substituting black into the output.
       * A value x, where 0 <= x <= 1,000,000 and a value of 1,000,000, is interpreted as
       * infinite.
       */
      override fun repeatFrameMsec(repeatFrameMsec: Number) {
        cdkBuilder.repeatFrameMsec(repeatFrameMsec)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.InputLossBehaviorProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.InputLossBehaviorProperty,
    ) : CdkObject(cdkObject),
        InputLossBehaviorProperty {
      /**
       * On input loss, the number of milliseconds to substitute black into the output before
       * switching to the frame specified by inputLossImageType.
       *
       * A value x, where 0 <= x <= 1,000,000 and a value of 1,000,000, is interpreted as
       * infinite.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlossbehavior.html#cfn-medialive-channel-inputlossbehavior-blackframemsec)
       */
      override fun blackFrameMsec(): Number? = unwrap(this).getBlackFrameMsec()

      /**
       * When the input loss image type is "color," this field specifies the color to use.
       *
       * Value: 6 hex characters that represent the values of RGB.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlossbehavior.html#cfn-medialive-channel-inputlossbehavior-inputlossimagecolor)
       */
      override fun inputLossImageColor(): String? = unwrap(this).getInputLossImageColor()

      /**
       * When the input loss image type is "slate," these fields specify the parameters for
       * accessing the slate.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlossbehavior.html#cfn-medialive-channel-inputlossbehavior-inputlossimageslate)
       */
      override fun inputLossImageSlate(): Any? = unwrap(this).getInputLossImageSlate()

      /**
       * Indicates whether to substitute a solid color or a slate into the output after the input
       * loss exceeds blackFrameMsec.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlossbehavior.html#cfn-medialive-channel-inputlossbehavior-inputlossimagetype)
       */
      override fun inputLossImageType(): String? = unwrap(this).getInputLossImageType()

      /**
       * On input loss, the number of milliseconds to repeat the previous picture before
       * substituting black into the output.
       *
       * A value x, where 0 <= x <= 1,000,000 and a value of 1,000,000, is interpreted as
       * infinite.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlossbehavior.html#cfn-medialive-channel-inputlossbehavior-repeatframemsec)
       */
      override fun repeatFrameMsec(): Number? = unwrap(this).getRepeatFrameMsec()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): InputLossBehaviorProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.InputLossBehaviorProperty):
          InputLossBehaviorProperty = CdkObjectWrappers.wrap(cdkObject) as?
          InputLossBehaviorProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: InputLossBehaviorProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.InputLossBehaviorProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.InputLossBehaviorProperty
    }
  }

  /**
   * MediaLive will perform a failover if content is not detected in this input for the specified
   * period.
   *
   * The parent of this entity is FailoverConditionSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * InputLossFailoverSettingsProperty inputLossFailoverSettingsProperty =
   * InputLossFailoverSettingsProperty.builder()
   * .inputLossThresholdMsec(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlossfailoversettings.html)
   */
  public interface InputLossFailoverSettingsProperty {
    /**
     * The amount of time (in milliseconds) that no input is detected.
     *
     * After that time, an input failover will occur.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlossfailoversettings.html#cfn-medialive-channel-inputlossfailoversettings-inputlossthresholdmsec)
     */
    public fun inputLossThresholdMsec(): Number? = unwrap(this).getInputLossThresholdMsec()

    /**
     * A builder for [InputLossFailoverSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param inputLossThresholdMsec The amount of time (in milliseconds) that no input is
       * detected.
       * After that time, an input failover will occur.
       */
      public fun inputLossThresholdMsec(inputLossThresholdMsec: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.InputLossFailoverSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.InputLossFailoverSettingsProperty.builder()

      /**
       * @param inputLossThresholdMsec The amount of time (in milliseconds) that no input is
       * detected.
       * After that time, an input failover will occur.
       */
      override fun inputLossThresholdMsec(inputLossThresholdMsec: Number) {
        cdkBuilder.inputLossThresholdMsec(inputLossThresholdMsec)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.InputLossFailoverSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.InputLossFailoverSettingsProperty,
    ) : CdkObject(cdkObject),
        InputLossFailoverSettingsProperty {
      /**
       * The amount of time (in milliseconds) that no input is detected.
       *
       * After that time, an input failover will occur.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlossfailoversettings.html#cfn-medialive-channel-inputlossfailoversettings-inputlossthresholdmsec)
       */
      override fun inputLossThresholdMsec(): Number? = unwrap(this).getInputLossThresholdMsec()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          InputLossFailoverSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.InputLossFailoverSettingsProperty):
          InputLossFailoverSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          InputLossFailoverSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: InputLossFailoverSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.InputLossFailoverSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.InputLossFailoverSettingsProperty
    }
  }

  /**
   * Information about extracting content from the input and about handling the content.
   *
   * The parent of this entity is InputAttachment.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * InputSettingsProperty inputSettingsProperty = InputSettingsProperty.builder()
   * .audioSelectors(List.of(AudioSelectorProperty.builder()
   * .name("name")
   * .selectorSettings(AudioSelectorSettingsProperty.builder()
   * .audioHlsRenditionSelection(AudioHlsRenditionSelectionProperty.builder()
   * .groupId("groupId")
   * .name("name")
   * .build())
   * .audioLanguageSelection(AudioLanguageSelectionProperty.builder()
   * .languageCode("languageCode")
   * .languageSelectionPolicy("languageSelectionPolicy")
   * .build())
   * .audioPidSelection(AudioPidSelectionProperty.builder()
   * .pid(123)
   * .build())
   * .audioTrackSelection(AudioTrackSelectionProperty.builder()
   * .dolbyEDecode(AudioDolbyEDecodeProperty.builder()
   * .programSelection("programSelection")
   * .build())
   * .tracks(List.of(AudioTrackProperty.builder()
   * .track(123)
   * .build()))
   * .build())
   * .build())
   * .build()))
   * .captionSelectors(List.of(CaptionSelectorProperty.builder()
   * .languageCode("languageCode")
   * .name("name")
   * .selectorSettings(CaptionSelectorSettingsProperty.builder()
   * .ancillarySourceSettings(AncillarySourceSettingsProperty.builder()
   * .sourceAncillaryChannelNumber(123)
   * .build())
   * .aribSourceSettings(AribSourceSettingsProperty.builder().build())
   * .dvbSubSourceSettings(DvbSubSourceSettingsProperty.builder()
   * .ocrLanguage("ocrLanguage")
   * .pid(123)
   * .build())
   * .embeddedSourceSettings(EmbeddedSourceSettingsProperty.builder()
   * .convert608To708("convert608To708")
   * .scte20Detection("scte20Detection")
   * .source608ChannelNumber(123)
   * .source608TrackNumber(123)
   * .build())
   * .scte20SourceSettings(Scte20SourceSettingsProperty.builder()
   * .convert608To708("convert608To708")
   * .source608ChannelNumber(123)
   * .build())
   * .scte27SourceSettings(Scte27SourceSettingsProperty.builder()
   * .ocrLanguage("ocrLanguage")
   * .pid(123)
   * .build())
   * .teletextSourceSettings(TeletextSourceSettingsProperty.builder()
   * .outputRectangle(CaptionRectangleProperty.builder()
   * .height(123)
   * .leftOffset(123)
   * .topOffset(123)
   * .width(123)
   * .build())
   * .pageNumber("pageNumber")
   * .build())
   * .build())
   * .build()))
   * .deblockFilter("deblockFilter")
   * .denoiseFilter("denoiseFilter")
   * .filterStrength(123)
   * .inputFilter("inputFilter")
   * .networkInputSettings(NetworkInputSettingsProperty.builder()
   * .hlsInputSettings(HlsInputSettingsProperty.builder()
   * .bandwidth(123)
   * .bufferSegments(123)
   * .retries(123)
   * .retryInterval(123)
   * .scte35Source("scte35Source")
   * .build())
   * .serverValidation("serverValidation")
   * .build())
   * .scte35Pid(123)
   * .smpte2038DataPreference("smpte2038DataPreference")
   * .sourceEndBehavior("sourceEndBehavior")
   * .videoSelector(VideoSelectorProperty.builder()
   * .colorSpace("colorSpace")
   * .colorSpaceSettings(VideoSelectorColorSpaceSettingsProperty.builder()
   * .hdr10Settings(Hdr10SettingsProperty.builder()
   * .maxCll(123)
   * .maxFall(123)
   * .build())
   * .build())
   * .colorSpaceUsage("colorSpaceUsage")
   * .selectorSettings(VideoSelectorSettingsProperty.builder()
   * .videoSelectorPid(VideoSelectorPidProperty.builder()
   * .pid(123)
   * .build())
   * .videoSelectorProgramId(VideoSelectorProgramIdProperty.builder()
   * .programId(123)
   * .build())
   * .build())
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html)
   */
  public interface InputSettingsProperty {
    /**
     * Information about the specific audio to extract from the input.
     *
     * The parent of this entity is InputSettings.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-audioselectors)
     */
    public fun audioSelectors(): Any? = unwrap(this).getAudioSelectors()

    /**
     * Information about the specific captions to extract from the input.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-captionselectors)
     */
    public fun captionSelectors(): Any? = unwrap(this).getCaptionSelectors()

    /**
     * Enables or disables the deblock filter when filtering.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-deblockfilter)
     */
    public fun deblockFilter(): String? = unwrap(this).getDeblockFilter()

    /**
     * Enables or disables the denoise filter when filtering.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-denoisefilter)
     */
    public fun denoiseFilter(): String? = unwrap(this).getDenoiseFilter()

    /**
     * Adjusts the magnitude of filtering from 1 (minimal) to 5 (strongest).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-filterstrength)
     */
    public fun filterStrength(): Number? = unwrap(this).getFilterStrength()

    /**
     * Turns on the filter for this input.
     *
     * MPEG-2 inputs have the deblocking filter enabled by default. 1) auto - filtering is applied
     * depending on input type/quality 2) disabled - no filtering is applied to the input 3) forced -
     * filtering is applied regardless of the input type.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-inputfilter)
     */
    public fun inputFilter(): String? = unwrap(this).getInputFilter()

    /**
     * Information about how to connect to the upstream system.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-networkinputsettings)
     */
    public fun networkInputSettings(): Any? = unwrap(this).getNetworkInputSettings()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-scte35pid)
     */
    public fun scte35Pid(): Number? = unwrap(this).getScte35Pid()

    /**
     * Specifies whether to extract applicable ancillary data from a SMPTE-2038 source in this
     * input.
     *
     * Applicable data types are captions, timecode, AFD, and SCTE-104 messages.
     *
     * * PREFER: Extract from SMPTE-2038 if present in this input, otherwise extract from another
     * source (if any).
     * * IGNORE: Never extract any ancillary data from SMPTE-2038.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-smpte2038datapreference)
     */
    public fun smpte2038DataPreference(): String? = unwrap(this).getSmpte2038DataPreference()

    /**
     * The loop input if it is a file.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-sourceendbehavior)
     */
    public fun sourceEndBehavior(): String? = unwrap(this).getSourceEndBehavior()

    /**
     * Information about one video to extract from the input.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-videoselector)
     */
    public fun videoSelector(): Any? = unwrap(this).getVideoSelector()

    /**
     * A builder for [InputSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param audioSelectors Information about the specific audio to extract from the input.
       * The parent of this entity is InputSettings.
       */
      public fun audioSelectors(audioSelectors: IResolvable)

      /**
       * @param audioSelectors Information about the specific audio to extract from the input.
       * The parent of this entity is InputSettings.
       */
      public fun audioSelectors(audioSelectors: List)

      /**
       * @param audioSelectors Information about the specific audio to extract from the input.
       * The parent of this entity is InputSettings.
       */
      public fun audioSelectors(vararg audioSelectors: Any)

      /**
       * @param captionSelectors Information about the specific captions to extract from the input.
       */
      public fun captionSelectors(captionSelectors: IResolvable)

      /**
       * @param captionSelectors Information about the specific captions to extract from the input.
       */
      public fun captionSelectors(captionSelectors: List)

      /**
       * @param captionSelectors Information about the specific captions to extract from the input.
       */
      public fun captionSelectors(vararg captionSelectors: Any)

      /**
       * @param deblockFilter Enables or disables the deblock filter when filtering.
       */
      public fun deblockFilter(deblockFilter: String)

      /**
       * @param denoiseFilter Enables or disables the denoise filter when filtering.
       */
      public fun denoiseFilter(denoiseFilter: String)

      /**
       * @param filterStrength Adjusts the magnitude of filtering from 1 (minimal) to 5 (strongest).
       */
      public fun filterStrength(filterStrength: Number)

      /**
       * @param inputFilter Turns on the filter for this input.
       * MPEG-2 inputs have the deblocking filter enabled by default. 1) auto - filtering is applied
       * depending on input type/quality 2) disabled - no filtering is applied to the input 3) forced -
       * filtering is applied regardless of the input type.
       */
      public fun inputFilter(inputFilter: String)

      /**
       * @param networkInputSettings Information about how to connect to the upstream system.
       */
      public fun networkInputSettings(networkInputSettings: IResolvable)

      /**
       * @param networkInputSettings Information about how to connect to the upstream system.
       */
      public fun networkInputSettings(networkInputSettings: NetworkInputSettingsProperty)

      /**
       * @param networkInputSettings Information about how to connect to the upstream system.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ccd1926c05f2854910e295cb271ef5e0c13c3594dd7c9a0ac19b6e99cac82211")
      public
          fun networkInputSettings(networkInputSettings: NetworkInputSettingsProperty.Builder.() -> Unit)

      /**
       * @param scte35Pid the value to be set.
       */
      public fun scte35Pid(scte35Pid: Number)

      /**
       * @param smpte2038DataPreference Specifies whether to extract applicable ancillary data from
       * a SMPTE-2038 source in this input.
       * Applicable data types are captions, timecode, AFD, and SCTE-104 messages.
       *
       * * PREFER: Extract from SMPTE-2038 if present in this input, otherwise extract from another
       * source (if any).
       * * IGNORE: Never extract any ancillary data from SMPTE-2038.
       */
      public fun smpte2038DataPreference(smpte2038DataPreference: String)

      /**
       * @param sourceEndBehavior The loop input if it is a file.
       */
      public fun sourceEndBehavior(sourceEndBehavior: String)

      /**
       * @param videoSelector Information about one video to extract from the input.
       */
      public fun videoSelector(videoSelector: IResolvable)

      /**
       * @param videoSelector Information about one video to extract from the input.
       */
      public fun videoSelector(videoSelector: VideoSelectorProperty)

      /**
       * @param videoSelector Information about one video to extract from the input.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("e82eb43173605a3c4a5e230255e7f4f2b72fe85c5f6c4f217ce63856b8f00323")
      public fun videoSelector(videoSelector: VideoSelectorProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.InputSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.InputSettingsProperty.builder()

      /**
       * @param audioSelectors Information about the specific audio to extract from the input.
       * The parent of this entity is InputSettings.
       */
      override fun audioSelectors(audioSelectors: IResolvable) {
        cdkBuilder.audioSelectors(audioSelectors.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param audioSelectors Information about the specific audio to extract from the input.
       * The parent of this entity is InputSettings.
       */
      override fun audioSelectors(audioSelectors: List) {
        cdkBuilder.audioSelectors(audioSelectors.map{CdkObjectWrappers.unwrap(it)})
      }

      /**
       * @param audioSelectors Information about the specific audio to extract from the input.
       * The parent of this entity is InputSettings.
       */
      override fun audioSelectors(vararg audioSelectors: Any): Unit =
          audioSelectors(audioSelectors.toList())

      /**
       * @param captionSelectors Information about the specific captions to extract from the input.
       */
      override fun captionSelectors(captionSelectors: IResolvable) {
        cdkBuilder.captionSelectors(captionSelectors.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param captionSelectors Information about the specific captions to extract from the input.
       */
      override fun captionSelectors(captionSelectors: List) {
        cdkBuilder.captionSelectors(captionSelectors.map{CdkObjectWrappers.unwrap(it)})
      }

      /**
       * @param captionSelectors Information about the specific captions to extract from the input.
       */
      override fun captionSelectors(vararg captionSelectors: Any): Unit =
          captionSelectors(captionSelectors.toList())

      /**
       * @param deblockFilter Enables or disables the deblock filter when filtering.
       */
      override fun deblockFilter(deblockFilter: String) {
        cdkBuilder.deblockFilter(deblockFilter)
      }

      /**
       * @param denoiseFilter Enables or disables the denoise filter when filtering.
       */
      override fun denoiseFilter(denoiseFilter: String) {
        cdkBuilder.denoiseFilter(denoiseFilter)
      }

      /**
       * @param filterStrength Adjusts the magnitude of filtering from 1 (minimal) to 5 (strongest).
       */
      override fun filterStrength(filterStrength: Number) {
        cdkBuilder.filterStrength(filterStrength)
      }

      /**
       * @param inputFilter Turns on the filter for this input.
       * MPEG-2 inputs have the deblocking filter enabled by default. 1) auto - filtering is applied
       * depending on input type/quality 2) disabled - no filtering is applied to the input 3) forced -
       * filtering is applied regardless of the input type.
       */
      override fun inputFilter(inputFilter: String) {
        cdkBuilder.inputFilter(inputFilter)
      }

      /**
       * @param networkInputSettings Information about how to connect to the upstream system.
       */
      override fun networkInputSettings(networkInputSettings: IResolvable) {
        cdkBuilder.networkInputSettings(networkInputSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param networkInputSettings Information about how to connect to the upstream system.
       */
      override fun networkInputSettings(networkInputSettings: NetworkInputSettingsProperty) {
        cdkBuilder.networkInputSettings(networkInputSettings.let(NetworkInputSettingsProperty.Companion::unwrap))
      }

      /**
       * @param networkInputSettings Information about how to connect to the upstream system.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ccd1926c05f2854910e295cb271ef5e0c13c3594dd7c9a0ac19b6e99cac82211")
      override
          fun networkInputSettings(networkInputSettings: NetworkInputSettingsProperty.Builder.() -> Unit):
          Unit = networkInputSettings(NetworkInputSettingsProperty(networkInputSettings))

      /**
       * @param scte35Pid the value to be set.
       */
      override fun scte35Pid(scte35Pid: Number) {
        cdkBuilder.scte35Pid(scte35Pid)
      }

      /**
       * @param smpte2038DataPreference Specifies whether to extract applicable ancillary data from
       * a SMPTE-2038 source in this input.
       * Applicable data types are captions, timecode, AFD, and SCTE-104 messages.
       *
       * * PREFER: Extract from SMPTE-2038 if present in this input, otherwise extract from another
       * source (if any).
       * * IGNORE: Never extract any ancillary data from SMPTE-2038.
       */
      override fun smpte2038DataPreference(smpte2038DataPreference: String) {
        cdkBuilder.smpte2038DataPreference(smpte2038DataPreference)
      }

      /**
       * @param sourceEndBehavior The loop input if it is a file.
       */
      override fun sourceEndBehavior(sourceEndBehavior: String) {
        cdkBuilder.sourceEndBehavior(sourceEndBehavior)
      }

      /**
       * @param videoSelector Information about one video to extract from the input.
       */
      override fun videoSelector(videoSelector: IResolvable) {
        cdkBuilder.videoSelector(videoSelector.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param videoSelector Information about one video to extract from the input.
       */
      override fun videoSelector(videoSelector: VideoSelectorProperty) {
        cdkBuilder.videoSelector(videoSelector.let(VideoSelectorProperty.Companion::unwrap))
      }

      /**
       * @param videoSelector Information about one video to extract from the input.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("e82eb43173605a3c4a5e230255e7f4f2b72fe85c5f6c4f217ce63856b8f00323")
      override fun videoSelector(videoSelector: VideoSelectorProperty.Builder.() -> Unit): Unit =
          videoSelector(VideoSelectorProperty(videoSelector))

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.InputSettingsProperty
          = cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.InputSettingsProperty,
    ) : CdkObject(cdkObject),
        InputSettingsProperty {
      /**
       * Information about the specific audio to extract from the input.
       *
       * The parent of this entity is InputSettings.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-audioselectors)
       */
      override fun audioSelectors(): Any? = unwrap(this).getAudioSelectors()

      /**
       * Information about the specific captions to extract from the input.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-captionselectors)
       */
      override fun captionSelectors(): Any? = unwrap(this).getCaptionSelectors()

      /**
       * Enables or disables the deblock filter when filtering.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-deblockfilter)
       */
      override fun deblockFilter(): String? = unwrap(this).getDeblockFilter()

      /**
       * Enables or disables the denoise filter when filtering.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-denoisefilter)
       */
      override fun denoiseFilter(): String? = unwrap(this).getDenoiseFilter()

      /**
       * Adjusts the magnitude of filtering from 1 (minimal) to 5 (strongest).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-filterstrength)
       */
      override fun filterStrength(): Number? = unwrap(this).getFilterStrength()

      /**
       * Turns on the filter for this input.
       *
       * MPEG-2 inputs have the deblocking filter enabled by default. 1) auto - filtering is applied
       * depending on input type/quality 2) disabled - no filtering is applied to the input 3) forced -
       * filtering is applied regardless of the input type.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-inputfilter)
       */
      override fun inputFilter(): String? = unwrap(this).getInputFilter()

      /**
       * Information about how to connect to the upstream system.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-networkinputsettings)
       */
      override fun networkInputSettings(): Any? = unwrap(this).getNetworkInputSettings()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-scte35pid)
       */
      override fun scte35Pid(): Number? = unwrap(this).getScte35Pid()

      /**
       * Specifies whether to extract applicable ancillary data from a SMPTE-2038 source in this
       * input.
       *
       * Applicable data types are captions, timecode, AFD, and SCTE-104 messages.
       *
       * * PREFER: Extract from SMPTE-2038 if present in this input, otherwise extract from another
       * source (if any).
       * * IGNORE: Never extract any ancillary data from SMPTE-2038.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-smpte2038datapreference)
       */
      override fun smpte2038DataPreference(): String? = unwrap(this).getSmpte2038DataPreference()

      /**
       * The loop input if it is a file.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-sourceendbehavior)
       */
      override fun sourceEndBehavior(): String? = unwrap(this).getSourceEndBehavior()

      /**
       * Information about one video to extract from the input.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-videoselector)
       */
      override fun videoSelector(): Any? = unwrap(this).getVideoSelector()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): InputSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.InputSettingsProperty):
          InputSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? InputSettingsProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: InputSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.InputSettingsProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.InputSettingsProperty
    }
  }

  /**
   * The input specification for this channel.
   *
   * It specifies the key characteristics of the inputs for this channel: the maximum bitrate, the
   * resolution, and the codec.
   *
   * This entity is at the top level in the channel.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * InputSpecificationProperty inputSpecificationProperty = InputSpecificationProperty.builder()
   * .codec("codec")
   * .maximumBitrate("maximumBitrate")
   * .resolution("resolution")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputspecification.html)
   */
  public interface InputSpecificationProperty {
    /**
     * The codec to include in the input specification for this channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputspecification.html#cfn-medialive-channel-inputspecification-codec)
     */
    public fun codec(): String? = unwrap(this).getCodec()

    /**
     * The maximum input bitrate for any input attached to this channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputspecification.html#cfn-medialive-channel-inputspecification-maximumbitrate)
     */
    public fun maximumBitrate(): String? = unwrap(this).getMaximumBitrate()

    /**
     * The resolution for any input attached to this channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputspecification.html#cfn-medialive-channel-inputspecification-resolution)
     */
    public fun resolution(): String? = unwrap(this).getResolution()

    /**
     * A builder for [InputSpecificationProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param codec The codec to include in the input specification for this channel.
       */
      public fun codec(codec: String)

      /**
       * @param maximumBitrate The maximum input bitrate for any input attached to this channel.
       */
      public fun maximumBitrate(maximumBitrate: String)

      /**
       * @param resolution The resolution for any input attached to this channel.
       */
      public fun resolution(resolution: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.InputSpecificationProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.InputSpecificationProperty.builder()

      /**
       * @param codec The codec to include in the input specification for this channel.
       */
      override fun codec(codec: String) {
        cdkBuilder.codec(codec)
      }

      /**
       * @param maximumBitrate The maximum input bitrate for any input attached to this channel.
       */
      override fun maximumBitrate(maximumBitrate: String) {
        cdkBuilder.maximumBitrate(maximumBitrate)
      }

      /**
       * @param resolution The resolution for any input attached to this channel.
       */
      override fun resolution(resolution: String) {
        cdkBuilder.resolution(resolution)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.InputSpecificationProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.InputSpecificationProperty,
    ) : CdkObject(cdkObject),
        InputSpecificationProperty {
      /**
       * The codec to include in the input specification for this channel.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputspecification.html#cfn-medialive-channel-inputspecification-codec)
       */
      override fun codec(): String? = unwrap(this).getCodec()

      /**
       * The maximum input bitrate for any input attached to this channel.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputspecification.html#cfn-medialive-channel-inputspecification-maximumbitrate)
       */
      override fun maximumBitrate(): String? = unwrap(this).getMaximumBitrate()

      /**
       * The resolution for any input attached to this channel.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputspecification.html#cfn-medialive-channel-inputspecification-resolution)
       */
      override fun resolution(): String? = unwrap(this).getResolution()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): InputSpecificationProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.InputSpecificationProperty):
          InputSpecificationProperty = CdkObjectWrappers.wrap(cdkObject) as?
          InputSpecificationProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: InputSpecificationProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.InputSpecificationProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.InputSpecificationProperty
    }
  }

  /**
   * The configuration of key provider settings.
   *
   * The parent of this entity is HlsGroupSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * KeyProviderSettingsProperty keyProviderSettingsProperty = KeyProviderSettingsProperty.builder()
   * .staticKeySettings(StaticKeySettingsProperty.builder()
   * .keyProviderServer(InputLocationProperty.builder()
   * .passwordParam("passwordParam")
   * .uri("uri")
   * .username("username")
   * .build())
   * .staticKeyValue("staticKeyValue")
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-keyprovidersettings.html)
   */
  public interface KeyProviderSettingsProperty {
    /**
     * The configuration of static key settings.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-keyprovidersettings.html#cfn-medialive-channel-keyprovidersettings-statickeysettings)
     */
    public fun staticKeySettings(): Any? = unwrap(this).getStaticKeySettings()

    /**
     * A builder for [KeyProviderSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param staticKeySettings The configuration of static key settings.
       */
      public fun staticKeySettings(staticKeySettings: IResolvable)

      /**
       * @param staticKeySettings The configuration of static key settings.
       */
      public fun staticKeySettings(staticKeySettings: StaticKeySettingsProperty)

      /**
       * @param staticKeySettings The configuration of static key settings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("a12120b72e91dd34a46bf4583553378d1d5e84df7329d78a942e4201a37db7e8")
      public fun staticKeySettings(staticKeySettings: StaticKeySettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.KeyProviderSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.KeyProviderSettingsProperty.builder()

      /**
       * @param staticKeySettings The configuration of static key settings.
       */
      override fun staticKeySettings(staticKeySettings: IResolvable) {
        cdkBuilder.staticKeySettings(staticKeySettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param staticKeySettings The configuration of static key settings.
       */
      override fun staticKeySettings(staticKeySettings: StaticKeySettingsProperty) {
        cdkBuilder.staticKeySettings(staticKeySettings.let(StaticKeySettingsProperty.Companion::unwrap))
      }

      /**
       * @param staticKeySettings The configuration of static key settings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("a12120b72e91dd34a46bf4583553378d1d5e84df7329d78a942e4201a37db7e8")
      override
          fun staticKeySettings(staticKeySettings: StaticKeySettingsProperty.Builder.() -> Unit):
          Unit = staticKeySettings(StaticKeySettingsProperty(staticKeySettings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.KeyProviderSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.KeyProviderSettingsProperty,
    ) : CdkObject(cdkObject),
        KeyProviderSettingsProperty {
      /**
       * The configuration of static key settings.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-keyprovidersettings.html#cfn-medialive-channel-keyprovidersettings-statickeysettings)
       */
      override fun staticKeySettings(): Any? = unwrap(this).getStaticKeySettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): KeyProviderSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.KeyProviderSettingsProperty):
          KeyProviderSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          KeyProviderSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: KeyProviderSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.KeyProviderSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.KeyProviderSettingsProperty
    }
  }

  /**
   * The configuration of the M2TS in the output.
   *
   * The parents of this entity are ArchiveContainerSettings and UdpContainerSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * M2tsSettingsProperty m2tsSettingsProperty = M2tsSettingsProperty.builder()
   * .absentInputAudioBehavior("absentInputAudioBehavior")
   * .arib("arib")
   * .aribCaptionsPid("aribCaptionsPid")
   * .aribCaptionsPidControl("aribCaptionsPidControl")
   * .audioBufferModel("audioBufferModel")
   * .audioFramesPerPes(123)
   * .audioPids("audioPids")
   * .audioStreamType("audioStreamType")
   * .bitrate(123)
   * .bufferModel("bufferModel")
   * .ccDescriptor("ccDescriptor")
   * .dvbNitSettings(DvbNitSettingsProperty.builder()
   * .networkId(123)
   * .networkName("networkName")
   * .repInterval(123)
   * .build())
   * .dvbSdtSettings(DvbSdtSettingsProperty.builder()
   * .outputSdt("outputSdt")
   * .repInterval(123)
   * .serviceName("serviceName")
   * .serviceProviderName("serviceProviderName")
   * .build())
   * .dvbSubPids("dvbSubPids")
   * .dvbTdtSettings(DvbTdtSettingsProperty.builder()
   * .repInterval(123)
   * .build())
   * .dvbTeletextPid("dvbTeletextPid")
   * .ebif("ebif")
   * .ebpAudioInterval("ebpAudioInterval")
   * .ebpLookaheadMs(123)
   * .ebpPlacement("ebpPlacement")
   * .ecmPid("ecmPid")
   * .esRateInPes("esRateInPes")
   * .etvPlatformPid("etvPlatformPid")
   * .etvSignalPid("etvSignalPid")
   * .fragmentTime(123)
   * .klv("klv")
   * .klvDataPids("klvDataPids")
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .nullPacketBitrate(123)
   * .patInterval(123)
   * .pcrControl("pcrControl")
   * .pcrPeriod(123)
   * .pcrPid("pcrPid")
   * .pmtInterval(123)
   * .pmtPid("pmtPid")
   * .programNum(123)
   * .rateMode("rateMode")
   * .scte27Pids("scte27Pids")
   * .scte35Control("scte35Control")
   * .scte35Pid("scte35Pid")
   * .scte35PrerollPullupMilliseconds(123)
   * .segmentationMarkers("segmentationMarkers")
   * .segmentationStyle("segmentationStyle")
   * .segmentationTime(123)
   * .timedMetadataBehavior("timedMetadataBehavior")
   * .timedMetadataPid("timedMetadataPid")
   * .transportStreamId(123)
   * .videoPid("videoPid")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html)
   */
  public interface M2tsSettingsProperty {
    /**
     * When set to drop, the output audio streams are removed from the program if the selected input
     * audio stream is removed from the input.
     *
     * This allows the output audio configuration to dynamically change based on the input
     * configuration. If this is set to encodeSilence, all output audio streams will output encoded
     * silence when not connected to an active input stream.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-absentinputaudiobehavior)
     */
    public fun absentInputAudioBehavior(): String? = unwrap(this).getAbsentInputAudioBehavior()

    /**
     * When set to enabled, uses ARIB-compliant field muxing and removes video descriptor.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-arib)
     */
    public fun arib(): String? = unwrap(this).getArib()

    /**
     * The PID for ARIB Captions in the transport stream.
     *
     * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
     * 0x20)..8182 (or 0x1ff6).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-aribcaptionspid)
     */
    public fun aribCaptionsPid(): String? = unwrap(this).getAribCaptionsPid()

    /**
     * If set to auto, The PID number used for ARIB Captions will be auto-selected from unused PIDs.
     *
     * If set to useConfigured, ARIB captions will be on the configured PID number.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-aribcaptionspidcontrol)
     */
    public fun aribCaptionsPidControl(): String? = unwrap(this).getAribCaptionsPidControl()

    /**
     * When set to dvb, uses the DVB buffer model for Dolby Digital audio.
     *
     * When set to atsc, the ATSC model is used.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-audiobuffermodel)
     */
    public fun audioBufferModel(): String? = unwrap(this).getAudioBufferModel()

    /**
     * The number of audio frames to insert for each PES packet.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-audioframesperpes)
     */
    public fun audioFramesPerPes(): Number? = unwrap(this).getAudioFramesPerPes()

    /**
     * The PID of the elementary audio streams in the transport stream.
     *
     * Multiple values are accepted, and can be entered in ranges or by comma separation. You can
     * enter the value as a decimal or hexadecimal value. Each PID specified must be in the range of 32
     * (or 0x20)..8182 (or 0x1ff6).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-audiopids)
     */
    public fun audioPids(): String? = unwrap(this).getAudioPids()

    /**
     * When set to atsc, uses stream type = 0x81 for AC3 and stream type = 0x87 for EAC3.
     *
     * When set to dvb, uses stream type = 0x06.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-audiostreamtype)
     */
    public fun audioStreamType(): String? = unwrap(this).getAudioStreamType()

    /**
     * The output bitrate of the transport stream in bits per second.
     *
     * Setting to 0 lets the muxer automatically determine the appropriate bitrate.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-bitrate)
     */
    public fun bitrate(): Number? = unwrap(this).getBitrate()

    /**
     * If set to multiplex, uses the multiplex buffer model for accurate interleaving.
     *
     * Setting to bufferModel to none can lead to lower latency, but low-memory devices might not be
     * able to play back the stream without interruptions.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-buffermodel)
     */
    public fun bufferModel(): String? = unwrap(this).getBufferModel()

    /**
     * When set to enabled, generates captionServiceDescriptor in PMT.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-ccdescriptor)
     */
    public fun ccDescriptor(): String? = unwrap(this).getCcDescriptor()

    /**
     * Inserts a DVB Network Information Table (NIT) at the specified table repetition interval.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-dvbnitsettings)
     */
    public fun dvbNitSettings(): Any? = unwrap(this).getDvbNitSettings()

    /**
     * Inserts a DVB Service Description Table (SDT) at the specified table repetition interval.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-dvbsdtsettings)
     */
    public fun dvbSdtSettings(): Any? = unwrap(this).getDvbSdtSettings()

    /**
     * The PID for the input source DVB Subtitle data to this output.
     *
     * Multiple values are accepted, and can be entered in ranges and/or by comma separation. You
     * can enter the value as a decimal or hexadecimal value. Each PID specified must be in the range
     * of 32 (or 0x20)..8182 (or 0x1ff6).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-dvbsubpids)
     */
    public fun dvbSubPids(): String? = unwrap(this).getDvbSubPids()

    /**
     * Inserts DVB Time and Date Table (TDT) at the specified table repetition interval.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-dvbtdtsettings)
     */
    public fun dvbTdtSettings(): Any? = unwrap(this).getDvbTdtSettings()

    /**
     * The PID for the input source DVB Teletext data to this output.
     *
     * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
     * 0x20)..8182 (or 0x1ff6).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-dvbteletextpid)
     */
    public fun dvbTeletextPid(): String? = unwrap(this).getDvbTeletextPid()

    /**
     * If set to passthrough, passes any EBIF data from the input source to this output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-ebif)
     */
    public fun ebif(): String? = unwrap(this).getEbif()

    /**
     * When videoAndFixedIntervals is selected, audio EBP markers are added to partitions 3 and 4.
     *
     * The interval between these additional markers is fixed, and is slightly shorter than the
     * video EBP marker interval. This is only available when EBP Cablelabs segmentation markers are
     * selected. Partitions 1 and 2 always follow the video interval.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-ebpaudiointerval)
     */
    public fun ebpAudioInterval(): String? = unwrap(this).getEbpAudioInterval()

    /**
     * When set, enforces that Encoder Boundary Points do not come within the specified time
     * interval of each other by looking ahead at input video.
     *
     * If another EBP is going to come in within the specified time interval, the current EBP is not
     * emitted, and the segment is "stretched" to the next marker. The lookahead value does not add
     * latency to the system. The channel must be configured elsewhere to create sufficient latency to
     * make the lookahead accurate.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-ebplookaheadms)
     */
    public fun ebpLookaheadMs(): Number? = unwrap(this).getEbpLookaheadMs()

    /**
     * Controls placement of EBP on audio PIDs.
     *
     * If set to videoAndAudioPids, EBP markers are placed on the video PID and all audio PIDs. If
     * set to videoPid, EBP markers are placed on only the video PID.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-ebpplacement)
     */
    public fun ebpPlacement(): String? = unwrap(this).getEbpPlacement()

    /**
     * This field is unused and deprecated.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-ecmpid)
     */
    public fun ecmPid(): String? = unwrap(this).getEcmPid()

    /**
     * Includes or excludes the ES Rate field in the PES header.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-esrateinpes)
     */
    public fun esRateInPes(): String? = unwrap(this).getEsRateInPes()

    /**
     * The PID for the input source ETV Platform data to this output.
     *
     * You can enter it as a decimal or hexadecimal value. Valid values are 32 (or 0x20) to 8182 (or
     * 0x1ff6).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-etvplatformpid)
     */
    public fun etvPlatformPid(): String? = unwrap(this).getEtvPlatformPid()

    /**
     * The PID for input source ETV Signal data to this output.
     *
     * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
     * 0x20)..8182 (or 0x1ff6).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-etvsignalpid)
     */
    public fun etvSignalPid(): String? = unwrap(this).getEtvSignalPid()

    /**
     * The length in seconds of each fragment.
     *
     * This is used only with EBP markers.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-fragmenttime)
     */
    public fun fragmentTime(): Number? = unwrap(this).getFragmentTime()

    /**
     * If set to passthrough, passes any KLV data from the input source to this output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-klv)
     */
    public fun klv(): String? = unwrap(this).getKlv()

    /**
     * The PID for the input source KLV data to this output.
     *
     * Multiple values are accepted, and can be entered in ranges or by comma separation. You can
     * enter the value as a decimal or hexadecimal value. Each PID specified must be in the range of 32
     * (or 0x20)..8182 (or 0x1ff6).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-klvdatapids)
     */
    public fun klvDataPids(): String? = unwrap(this).getKlvDataPids()

    /**
     * If set to passthrough, Nielsen inaudible tones for media tracking will be detected in the
     * input audio and an equivalent ID3 tag will be inserted in the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-nielsenid3behavior)
     */
    public fun nielsenId3Behavior(): String? = unwrap(this).getNielsenId3Behavior()

    /**
     * The value, in bits per second, of extra null packets to insert into the transport stream.
     *
     * This can be used if a downstream encryption system requires periodic null packets.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-nullpacketbitrate)
     */
    public fun nullPacketBitrate(): Number? = unwrap(this).getNullPacketBitrate()

    /**
     * The number of milliseconds between instances of this table in the output transport stream.
     *
     * Valid values are 0, 10..1000.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-patinterval)
     */
    public fun patInterval(): Number? = unwrap(this).getPatInterval()

    /**
     * When set to pcrEveryPesPacket, a Program Clock Reference value is inserted for every
     * Packetized Elementary Stream (PES) header.
     *
     * This parameter is effective only when the PCR PID is the same as the video or audio
     * elementary stream.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-pcrcontrol)
     */
    public fun pcrControl(): String? = unwrap(this).getPcrControl()

    /**
     * The maximum time, in milliseconds, between Program Clock References (PCRs) inserted into the
     * transport stream.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-pcrperiod)
     */
    public fun pcrPeriod(): Number? = unwrap(this).getPcrPeriod()

    /**
     * The PID of the Program Clock Reference (PCR) in the transport stream.
     *
     * When no value is given, MediaLive assigns the same value as the video PID. You can enter the
     * value as a decimal or hexadecimal value. Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-pcrpid)
     */
    public fun pcrPid(): String? = unwrap(this).getPcrPid()

    /**
     * The number of milliseconds between instances of this table in the output transport stream.
     *
     * Valid values are 0, 10..1000.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-pmtinterval)
     */
    public fun pmtInterval(): Number? = unwrap(this).getPmtInterval()

    /**
     * The PID for the Program Map Table (PMT) in the transport stream.
     *
     * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
     * 0x20)..8182 (or 0x1ff6).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-pmtpid)
     */
    public fun pmtPid(): String? = unwrap(this).getPmtPid()

    /**
     * The value of the program number field in the Program Map Table (PMT).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-programnum)
     */
    public fun programNum(): Number? = unwrap(this).getProgramNum()

    /**
     * When VBR, does not insert null packets into the transport stream to fill the specified
     * bitrate.
     *
     * The bitrate setting acts as the maximum bitrate when VBR is set.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-ratemode)
     */
    public fun rateMode(): String? = unwrap(this).getRateMode()

    /**
     * The PID for the input source SCTE-27 data to this output.
     *
     * Multiple values are accepted, and can be entered in ranges or by comma separation. You can
     * enter the value as a decimal or hexadecimal value. Each PID specified must be in the range of 32
     * (or 0x20)..8182 (or 0x1ff6).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-scte27pids)
     */
    public fun scte27Pids(): String? = unwrap(this).getScte27Pids()

    /**
     * Optionally passes SCTE-35 signals from the input source to this output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-scte35control)
     */
    public fun scte35Control(): String? = unwrap(this).getScte35Control()

    /**
     * The PID of the SCTE-35 stream in the transport stream.
     *
     * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
     * 0x20)..8182 (or 0x1ff6).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-scte35pid)
     */
    public fun scte35Pid(): String? = unwrap(this).getScte35Pid()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-scte35prerollpullupmilliseconds)
     */
    public fun scte35PrerollPullupMilliseconds(): Number? =
        unwrap(this).getScte35PrerollPullupMilliseconds()

    /**
     * Inserts segmentation markers at each segmentationTime period.
     *
     * raiSegstart sets the Random Access Indicator bit in the adaptation field. raiAdapt sets the
     * RAI bit and adds the current timecode in the private data bytes. psiSegstart inserts PAT and PMT
     * tables at the start of segments. ebp adds Encoder Boundary Point information to the adaptation
     * field as per OpenCable specification OC-SP-EBP-I01-130118. ebpLegacy adds Encoder Boundary Point
     * information to the adaptation field using a legacy proprietary format.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-segmentationmarkers)
     */
    public fun segmentationMarkers(): String? = unwrap(this).getSegmentationMarkers()

    /**
     * The segmentation style parameter controls how segmentation markers are inserted into the
     * transport stream.
     *
     * With avails, it is possible that segments might be truncated, which can influence where
     * future segmentation markers are inserted. When a segmentation style of resetCadence is selected
     * and a segment is truncated due to an avail, we will reset the segmentation cadence. This means
     * the subsequent segment will have a duration of $segmentationTime seconds. When a segmentation
     * style of maintainCadence is selected and a segment is truncated due to an avail, we will not
     * reset the segmentation cadence. This means the subsequent segment will likely be truncated as
     * well. However, all segments after that will have a duration of $segmentationTime seconds. Note
     * that EBP lookahead is a slight exception to this rule.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-segmentationstyle)
     */
    public fun segmentationStyle(): String? = unwrap(this).getSegmentationStyle()

    /**
     * The length, in seconds, of each segment.
     *
     * This is required unless markers is set to None_.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-segmentationtime)
     */
    public fun segmentationTime(): Number? = unwrap(this).getSegmentationTime()

    /**
     * When set to passthrough, timed metadata is passed through from input to output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-timedmetadatabehavior)
     */
    public fun timedMetadataBehavior(): String? = unwrap(this).getTimedMetadataBehavior()

    /**
     * The PID of the timed metadata stream in the transport stream.
     *
     * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
     * 0x20)..8182 (or 0x1ff6).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-timedmetadatapid)
     */
    public fun timedMetadataPid(): String? = unwrap(this).getTimedMetadataPid()

    /**
     * The value of the transport stream ID field in the Program Map Table (PMT).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-transportstreamid)
     */
    public fun transportStreamId(): Number? = unwrap(this).getTransportStreamId()

    /**
     * The PID of the elementary video stream in the transport stream.
     *
     * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
     * 0x20)..8182 (or 0x1ff6).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-videopid)
     */
    public fun videoPid(): String? = unwrap(this).getVideoPid()

    /**
     * A builder for [M2tsSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param absentInputAudioBehavior When set to drop, the output audio streams are removed from
       * the program if the selected input audio stream is removed from the input.
       * This allows the output audio configuration to dynamically change based on the input
       * configuration. If this is set to encodeSilence, all output audio streams will output encoded
       * silence when not connected to an active input stream.
       */
      public fun absentInputAudioBehavior(absentInputAudioBehavior: String)

      /**
       * @param arib When set to enabled, uses ARIB-compliant field muxing and removes video
       * descriptor.
       */
      public fun arib(arib: String)

      /**
       * @param aribCaptionsPid The PID for ARIB Captions in the transport stream.
       * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
       * 0x20)..8182 (or 0x1ff6).
       */
      public fun aribCaptionsPid(aribCaptionsPid: String)

      /**
       * @param aribCaptionsPidControl If set to auto, The PID number used for ARIB Captions will be
       * auto-selected from unused PIDs.
       * If set to useConfigured, ARIB captions will be on the configured PID number.
       */
      public fun aribCaptionsPidControl(aribCaptionsPidControl: String)

      /**
       * @param audioBufferModel When set to dvb, uses the DVB buffer model for Dolby Digital audio.
       * When set to atsc, the ATSC model is used.
       */
      public fun audioBufferModel(audioBufferModel: String)

      /**
       * @param audioFramesPerPes The number of audio frames to insert for each PES packet.
       */
      public fun audioFramesPerPes(audioFramesPerPes: Number)

      /**
       * @param audioPids The PID of the elementary audio streams in the transport stream.
       * Multiple values are accepted, and can be entered in ranges or by comma separation. You can
       * enter the value as a decimal or hexadecimal value. Each PID specified must be in the range of
       * 32 (or 0x20)..8182 (or 0x1ff6).
       */
      public fun audioPids(audioPids: String)

      /**
       * @param audioStreamType When set to atsc, uses stream type = 0x81 for AC3 and stream type =
       * 0x87 for EAC3.
       * When set to dvb, uses stream type = 0x06.
       */
      public fun audioStreamType(audioStreamType: String)

      /**
       * @param bitrate The output bitrate of the transport stream in bits per second.
       * Setting to 0 lets the muxer automatically determine the appropriate bitrate.
       */
      public fun bitrate(bitrate: Number)

      /**
       * @param bufferModel If set to multiplex, uses the multiplex buffer model for accurate
       * interleaving.
       * Setting to bufferModel to none can lead to lower latency, but low-memory devices might not
       * be able to play back the stream without interruptions.
       */
      public fun bufferModel(bufferModel: String)

      /**
       * @param ccDescriptor When set to enabled, generates captionServiceDescriptor in PMT.
       */
      public fun ccDescriptor(ccDescriptor: String)

      /**
       * @param dvbNitSettings Inserts a DVB Network Information Table (NIT) at the specified table
       * repetition interval.
       */
      public fun dvbNitSettings(dvbNitSettings: IResolvable)

      /**
       * @param dvbNitSettings Inserts a DVB Network Information Table (NIT) at the specified table
       * repetition interval.
       */
      public fun dvbNitSettings(dvbNitSettings: DvbNitSettingsProperty)

      /**
       * @param dvbNitSettings Inserts a DVB Network Information Table (NIT) at the specified table
       * repetition interval.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("0f54fa6b4608e98d8aad0cbc872cd3872c1756045c8c6b6291d0df0ede0396d4")
      public fun dvbNitSettings(dvbNitSettings: DvbNitSettingsProperty.Builder.() -> Unit)

      /**
       * @param dvbSdtSettings Inserts a DVB Service Description Table (SDT) at the specified table
       * repetition interval.
       */
      public fun dvbSdtSettings(dvbSdtSettings: IResolvable)

      /**
       * @param dvbSdtSettings Inserts a DVB Service Description Table (SDT) at the specified table
       * repetition interval.
       */
      public fun dvbSdtSettings(dvbSdtSettings: DvbSdtSettingsProperty)

      /**
       * @param dvbSdtSettings Inserts a DVB Service Description Table (SDT) at the specified table
       * repetition interval.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("579bf1784c3c8a484a23bc2b64fea0c0481a64750412977246e839cbdc15314e")
      public fun dvbSdtSettings(dvbSdtSettings: DvbSdtSettingsProperty.Builder.() -> Unit)

      /**
       * @param dvbSubPids The PID for the input source DVB Subtitle data to this output.
       * Multiple values are accepted, and can be entered in ranges and/or by comma separation. You
       * can enter the value as a decimal or hexadecimal value. Each PID specified must be in the range
       * of 32 (or 0x20)..8182 (or 0x1ff6).
       */
      public fun dvbSubPids(dvbSubPids: String)

      /**
       * @param dvbTdtSettings Inserts DVB Time and Date Table (TDT) at the specified table
       * repetition interval.
       */
      public fun dvbTdtSettings(dvbTdtSettings: IResolvable)

      /**
       * @param dvbTdtSettings Inserts DVB Time and Date Table (TDT) at the specified table
       * repetition interval.
       */
      public fun dvbTdtSettings(dvbTdtSettings: DvbTdtSettingsProperty)

      /**
       * @param dvbTdtSettings Inserts DVB Time and Date Table (TDT) at the specified table
       * repetition interval.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("d22f099001de97bf51423f044364514090d55e7972d8923c76aaa09cfed27dce")
      public fun dvbTdtSettings(dvbTdtSettings: DvbTdtSettingsProperty.Builder.() -> Unit)

      /**
       * @param dvbTeletextPid The PID for the input source DVB Teletext data to this output.
       * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
       * 0x20)..8182 (or 0x1ff6).
       */
      public fun dvbTeletextPid(dvbTeletextPid: String)

      /**
       * @param ebif If set to passthrough, passes any EBIF data from the input source to this
       * output.
       */
      public fun ebif(ebif: String)

      /**
       * @param ebpAudioInterval When videoAndFixedIntervals is selected, audio EBP markers are
       * added to partitions 3 and 4.
       * The interval between these additional markers is fixed, and is slightly shorter than the
       * video EBP marker interval. This is only available when EBP Cablelabs segmentation markers are
       * selected. Partitions 1 and 2 always follow the video interval.
       */
      public fun ebpAudioInterval(ebpAudioInterval: String)

      /**
       * @param ebpLookaheadMs When set, enforces that Encoder Boundary Points do not come within
       * the specified time interval of each other by looking ahead at input video.
       * If another EBP is going to come in within the specified time interval, the current EBP is
       * not emitted, and the segment is "stretched" to the next marker. The lookahead value does not
       * add latency to the system. The channel must be configured elsewhere to create sufficient
       * latency to make the lookahead accurate.
       */
      public fun ebpLookaheadMs(ebpLookaheadMs: Number)

      /**
       * @param ebpPlacement Controls placement of EBP on audio PIDs.
       * If set to videoAndAudioPids, EBP markers are placed on the video PID and all audio PIDs. If
       * set to videoPid, EBP markers are placed on only the video PID.
       */
      public fun ebpPlacement(ebpPlacement: String)

      /**
       * @param ecmPid This field is unused and deprecated.
       */
      public fun ecmPid(ecmPid: String)

      /**
       * @param esRateInPes Includes or excludes the ES Rate field in the PES header.
       */
      public fun esRateInPes(esRateInPes: String)

      /**
       * @param etvPlatformPid The PID for the input source ETV Platform data to this output.
       * You can enter it as a decimal or hexadecimal value. Valid values are 32 (or 0x20) to 8182
       * (or 0x1ff6).
       */
      public fun etvPlatformPid(etvPlatformPid: String)

      /**
       * @param etvSignalPid The PID for input source ETV Signal data to this output.
       * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
       * 0x20)..8182 (or 0x1ff6).
       */
      public fun etvSignalPid(etvSignalPid: String)

      /**
       * @param fragmentTime The length in seconds of each fragment.
       * This is used only with EBP markers.
       */
      public fun fragmentTime(fragmentTime: Number)

      /**
       * @param klv If set to passthrough, passes any KLV data from the input source to this output.
       */
      public fun klv(klv: String)

      /**
       * @param klvDataPids The PID for the input source KLV data to this output.
       * Multiple values are accepted, and can be entered in ranges or by comma separation. You can
       * enter the value as a decimal or hexadecimal value. Each PID specified must be in the range of
       * 32 (or 0x20)..8182 (or 0x1ff6).
       */
      public fun klvDataPids(klvDataPids: String)

      /**
       * @param nielsenId3Behavior If set to passthrough, Nielsen inaudible tones for media tracking
       * will be detected in the input audio and an equivalent ID3 tag will be inserted in the output.
       */
      public fun nielsenId3Behavior(nielsenId3Behavior: String)

      /**
       * @param nullPacketBitrate The value, in bits per second, of extra null packets to insert
       * into the transport stream.
       * This can be used if a downstream encryption system requires periodic null packets.
       */
      public fun nullPacketBitrate(nullPacketBitrate: Number)

      /**
       * @param patInterval The number of milliseconds between instances of this table in the output
       * transport stream.
       * Valid values are 0, 10..1000.
       */
      public fun patInterval(patInterval: Number)

      /**
       * @param pcrControl When set to pcrEveryPesPacket, a Program Clock Reference value is
       * inserted for every Packetized Elementary Stream (PES) header.
       * This parameter is effective only when the PCR PID is the same as the video or audio
       * elementary stream.
       */
      public fun pcrControl(pcrControl: String)

      /**
       * @param pcrPeriod The maximum time, in milliseconds, between Program Clock References (PCRs)
       * inserted into the transport stream.
       */
      public fun pcrPeriod(pcrPeriod: Number)

      /**
       * @param pcrPid The PID of the Program Clock Reference (PCR) in the transport stream.
       * When no value is given, MediaLive assigns the same value as the video PID. You can enter
       * the value as a decimal or hexadecimal value. Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
       */
      public fun pcrPid(pcrPid: String)

      /**
       * @param pmtInterval The number of milliseconds between instances of this table in the output
       * transport stream.
       * Valid values are 0, 10..1000.
       */
      public fun pmtInterval(pmtInterval: Number)

      /**
       * @param pmtPid The PID for the Program Map Table (PMT) in the transport stream.
       * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
       * 0x20)..8182 (or 0x1ff6).
       */
      public fun pmtPid(pmtPid: String)

      /**
       * @param programNum The value of the program number field in the Program Map Table (PMT).
       */
      public fun programNum(programNum: Number)

      /**
       * @param rateMode When VBR, does not insert null packets into the transport stream to fill
       * the specified bitrate.
       * The bitrate setting acts as the maximum bitrate when VBR is set.
       */
      public fun rateMode(rateMode: String)

      /**
       * @param scte27Pids The PID for the input source SCTE-27 data to this output.
       * Multiple values are accepted, and can be entered in ranges or by comma separation. You can
       * enter the value as a decimal or hexadecimal value. Each PID specified must be in the range of
       * 32 (or 0x20)..8182 (or 0x1ff6).
       */
      public fun scte27Pids(scte27Pids: String)

      /**
       * @param scte35Control Optionally passes SCTE-35 signals from the input source to this
       * output.
       */
      public fun scte35Control(scte35Control: String)

      /**
       * @param scte35Pid The PID of the SCTE-35 stream in the transport stream.
       * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
       * 0x20)..8182 (or 0x1ff6).
       */
      public fun scte35Pid(scte35Pid: String)

      /**
       * @param scte35PrerollPullupMilliseconds the value to be set.
       */
      public fun scte35PrerollPullupMilliseconds(scte35PrerollPullupMilliseconds: Number)

      /**
       * @param segmentationMarkers Inserts segmentation markers at each segmentationTime period.
       * raiSegstart sets the Random Access Indicator bit in the adaptation field. raiAdapt sets the
       * RAI bit and adds the current timecode in the private data bytes. psiSegstart inserts PAT and
       * PMT tables at the start of segments. ebp adds Encoder Boundary Point information to the
       * adaptation field as per OpenCable specification OC-SP-EBP-I01-130118. ebpLegacy adds Encoder
       * Boundary Point information to the adaptation field using a legacy proprietary format.
       */
      public fun segmentationMarkers(segmentationMarkers: String)

      /**
       * @param segmentationStyle The segmentation style parameter controls how segmentation markers
       * are inserted into the transport stream.
       * With avails, it is possible that segments might be truncated, which can influence where
       * future segmentation markers are inserted. When a segmentation style of resetCadence is
       * selected and a segment is truncated due to an avail, we will reset the segmentation cadence.
       * This means the subsequent segment will have a duration of $segmentationTime seconds. When a
       * segmentation style of maintainCadence is selected and a segment is truncated due to an avail,
       * we will not reset the segmentation cadence. This means the subsequent segment will likely be
       * truncated as well. However, all segments after that will have a duration of $segmentationTime
       * seconds. Note that EBP lookahead is a slight exception to this rule.
       */
      public fun segmentationStyle(segmentationStyle: String)

      /**
       * @param segmentationTime The length, in seconds, of each segment.
       * This is required unless markers is set to None_.
       */
      public fun segmentationTime(segmentationTime: Number)

      /**
       * @param timedMetadataBehavior When set to passthrough, timed metadata is passed through from
       * input to output.
       */
      public fun timedMetadataBehavior(timedMetadataBehavior: String)

      /**
       * @param timedMetadataPid The PID of the timed metadata stream in the transport stream.
       * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
       * 0x20)..8182 (or 0x1ff6).
       */
      public fun timedMetadataPid(timedMetadataPid: String)

      /**
       * @param transportStreamId The value of the transport stream ID field in the Program Map
       * Table (PMT).
       */
      public fun transportStreamId(transportStreamId: Number)

      /**
       * @param videoPid The PID of the elementary video stream in the transport stream.
       * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
       * 0x20)..8182 (or 0x1ff6).
       */
      public fun videoPid(videoPid: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.M2tsSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.M2tsSettingsProperty.builder()

      /**
       * @param absentInputAudioBehavior When set to drop, the output audio streams are removed from
       * the program if the selected input audio stream is removed from the input.
       * This allows the output audio configuration to dynamically change based on the input
       * configuration. If this is set to encodeSilence, all output audio streams will output encoded
       * silence when not connected to an active input stream.
       */
      override fun absentInputAudioBehavior(absentInputAudioBehavior: String) {
        cdkBuilder.absentInputAudioBehavior(absentInputAudioBehavior)
      }

      /**
       * @param arib When set to enabled, uses ARIB-compliant field muxing and removes video
       * descriptor.
       */
      override fun arib(arib: String) {
        cdkBuilder.arib(arib)
      }

      /**
       * @param aribCaptionsPid The PID for ARIB Captions in the transport stream.
       * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
       * 0x20)..8182 (or 0x1ff6).
       */
      override fun aribCaptionsPid(aribCaptionsPid: String) {
        cdkBuilder.aribCaptionsPid(aribCaptionsPid)
      }

      /**
       * @param aribCaptionsPidControl If set to auto, The PID number used for ARIB Captions will be
       * auto-selected from unused PIDs.
       * If set to useConfigured, ARIB captions will be on the configured PID number.
       */
      override fun aribCaptionsPidControl(aribCaptionsPidControl: String) {
        cdkBuilder.aribCaptionsPidControl(aribCaptionsPidControl)
      }

      /**
       * @param audioBufferModel When set to dvb, uses the DVB buffer model for Dolby Digital audio.
       * When set to atsc, the ATSC model is used.
       */
      override fun audioBufferModel(audioBufferModel: String) {
        cdkBuilder.audioBufferModel(audioBufferModel)
      }

      /**
       * @param audioFramesPerPes The number of audio frames to insert for each PES packet.
       */
      override fun audioFramesPerPes(audioFramesPerPes: Number) {
        cdkBuilder.audioFramesPerPes(audioFramesPerPes)
      }

      /**
       * @param audioPids The PID of the elementary audio streams in the transport stream.
       * Multiple values are accepted, and can be entered in ranges or by comma separation. You can
       * enter the value as a decimal or hexadecimal value. Each PID specified must be in the range of
       * 32 (or 0x20)..8182 (or 0x1ff6).
       */
      override fun audioPids(audioPids: String) {
        cdkBuilder.audioPids(audioPids)
      }

      /**
       * @param audioStreamType When set to atsc, uses stream type = 0x81 for AC3 and stream type =
       * 0x87 for EAC3.
       * When set to dvb, uses stream type = 0x06.
       */
      override fun audioStreamType(audioStreamType: String) {
        cdkBuilder.audioStreamType(audioStreamType)
      }

      /**
       * @param bitrate The output bitrate of the transport stream in bits per second.
       * Setting to 0 lets the muxer automatically determine the appropriate bitrate.
       */
      override fun bitrate(bitrate: Number) {
        cdkBuilder.bitrate(bitrate)
      }

      /**
       * @param bufferModel If set to multiplex, uses the multiplex buffer model for accurate
       * interleaving.
       * Setting to bufferModel to none can lead to lower latency, but low-memory devices might not
       * be able to play back the stream without interruptions.
       */
      override fun bufferModel(bufferModel: String) {
        cdkBuilder.bufferModel(bufferModel)
      }

      /**
       * @param ccDescriptor When set to enabled, generates captionServiceDescriptor in PMT.
       */
      override fun ccDescriptor(ccDescriptor: String) {
        cdkBuilder.ccDescriptor(ccDescriptor)
      }

      /**
       * @param dvbNitSettings Inserts a DVB Network Information Table (NIT) at the specified table
       * repetition interval.
       */
      override fun dvbNitSettings(dvbNitSettings: IResolvable) {
        cdkBuilder.dvbNitSettings(dvbNitSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param dvbNitSettings Inserts a DVB Network Information Table (NIT) at the specified table
       * repetition interval.
       */
      override fun dvbNitSettings(dvbNitSettings: DvbNitSettingsProperty) {
        cdkBuilder.dvbNitSettings(dvbNitSettings.let(DvbNitSettingsProperty.Companion::unwrap))
      }

      /**
       * @param dvbNitSettings Inserts a DVB Network Information Table (NIT) at the specified table
       * repetition interval.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("0f54fa6b4608e98d8aad0cbc872cd3872c1756045c8c6b6291d0df0ede0396d4")
      override fun dvbNitSettings(dvbNitSettings: DvbNitSettingsProperty.Builder.() -> Unit): Unit =
          dvbNitSettings(DvbNitSettingsProperty(dvbNitSettings))

      /**
       * @param dvbSdtSettings Inserts a DVB Service Description Table (SDT) at the specified table
       * repetition interval.
       */
      override fun dvbSdtSettings(dvbSdtSettings: IResolvable) {
        cdkBuilder.dvbSdtSettings(dvbSdtSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param dvbSdtSettings Inserts a DVB Service Description Table (SDT) at the specified table
       * repetition interval.
       */
      override fun dvbSdtSettings(dvbSdtSettings: DvbSdtSettingsProperty) {
        cdkBuilder.dvbSdtSettings(dvbSdtSettings.let(DvbSdtSettingsProperty.Companion::unwrap))
      }

      /**
       * @param dvbSdtSettings Inserts a DVB Service Description Table (SDT) at the specified table
       * repetition interval.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("579bf1784c3c8a484a23bc2b64fea0c0481a64750412977246e839cbdc15314e")
      override fun dvbSdtSettings(dvbSdtSettings: DvbSdtSettingsProperty.Builder.() -> Unit): Unit =
          dvbSdtSettings(DvbSdtSettingsProperty(dvbSdtSettings))

      /**
       * @param dvbSubPids The PID for the input source DVB Subtitle data to this output.
       * Multiple values are accepted, and can be entered in ranges and/or by comma separation. You
       * can enter the value as a decimal or hexadecimal value. Each PID specified must be in the range
       * of 32 (or 0x20)..8182 (or 0x1ff6).
       */
      override fun dvbSubPids(dvbSubPids: String) {
        cdkBuilder.dvbSubPids(dvbSubPids)
      }

      /**
       * @param dvbTdtSettings Inserts DVB Time and Date Table (TDT) at the specified table
       * repetition interval.
       */
      override fun dvbTdtSettings(dvbTdtSettings: IResolvable) {
        cdkBuilder.dvbTdtSettings(dvbTdtSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param dvbTdtSettings Inserts DVB Time and Date Table (TDT) at the specified table
       * repetition interval.
       */
      override fun dvbTdtSettings(dvbTdtSettings: DvbTdtSettingsProperty) {
        cdkBuilder.dvbTdtSettings(dvbTdtSettings.let(DvbTdtSettingsProperty.Companion::unwrap))
      }

      /**
       * @param dvbTdtSettings Inserts DVB Time and Date Table (TDT) at the specified table
       * repetition interval.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("d22f099001de97bf51423f044364514090d55e7972d8923c76aaa09cfed27dce")
      override fun dvbTdtSettings(dvbTdtSettings: DvbTdtSettingsProperty.Builder.() -> Unit): Unit =
          dvbTdtSettings(DvbTdtSettingsProperty(dvbTdtSettings))

      /**
       * @param dvbTeletextPid The PID for the input source DVB Teletext data to this output.
       * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
       * 0x20)..8182 (or 0x1ff6).
       */
      override fun dvbTeletextPid(dvbTeletextPid: String) {
        cdkBuilder.dvbTeletextPid(dvbTeletextPid)
      }

      /**
       * @param ebif If set to passthrough, passes any EBIF data from the input source to this
       * output.
       */
      override fun ebif(ebif: String) {
        cdkBuilder.ebif(ebif)
      }

      /**
       * @param ebpAudioInterval When videoAndFixedIntervals is selected, audio EBP markers are
       * added to partitions 3 and 4.
       * The interval between these additional markers is fixed, and is slightly shorter than the
       * video EBP marker interval. This is only available when EBP Cablelabs segmentation markers are
       * selected. Partitions 1 and 2 always follow the video interval.
       */
      override fun ebpAudioInterval(ebpAudioInterval: String) {
        cdkBuilder.ebpAudioInterval(ebpAudioInterval)
      }

      /**
       * @param ebpLookaheadMs When set, enforces that Encoder Boundary Points do not come within
       * the specified time interval of each other by looking ahead at input video.
       * If another EBP is going to come in within the specified time interval, the current EBP is
       * not emitted, and the segment is "stretched" to the next marker. The lookahead value does not
       * add latency to the system. The channel must be configured elsewhere to create sufficient
       * latency to make the lookahead accurate.
       */
      override fun ebpLookaheadMs(ebpLookaheadMs: Number) {
        cdkBuilder.ebpLookaheadMs(ebpLookaheadMs)
      }

      /**
       * @param ebpPlacement Controls placement of EBP on audio PIDs.
       * If set to videoAndAudioPids, EBP markers are placed on the video PID and all audio PIDs. If
       * set to videoPid, EBP markers are placed on only the video PID.
       */
      override fun ebpPlacement(ebpPlacement: String) {
        cdkBuilder.ebpPlacement(ebpPlacement)
      }

      /**
       * @param ecmPid This field is unused and deprecated.
       */
      override fun ecmPid(ecmPid: String) {
        cdkBuilder.ecmPid(ecmPid)
      }

      /**
       * @param esRateInPes Includes or excludes the ES Rate field in the PES header.
       */
      override fun esRateInPes(esRateInPes: String) {
        cdkBuilder.esRateInPes(esRateInPes)
      }

      /**
       * @param etvPlatformPid The PID for the input source ETV Platform data to this output.
       * You can enter it as a decimal or hexadecimal value. Valid values are 32 (or 0x20) to 8182
       * (or 0x1ff6).
       */
      override fun etvPlatformPid(etvPlatformPid: String) {
        cdkBuilder.etvPlatformPid(etvPlatformPid)
      }

      /**
       * @param etvSignalPid The PID for input source ETV Signal data to this output.
       * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
       * 0x20)..8182 (or 0x1ff6).
       */
      override fun etvSignalPid(etvSignalPid: String) {
        cdkBuilder.etvSignalPid(etvSignalPid)
      }

      /**
       * @param fragmentTime The length in seconds of each fragment.
       * This is used only with EBP markers.
       */
      override fun fragmentTime(fragmentTime: Number) {
        cdkBuilder.fragmentTime(fragmentTime)
      }

      /**
       * @param klv If set to passthrough, passes any KLV data from the input source to this output.
       */
      override fun klv(klv: String) {
        cdkBuilder.klv(klv)
      }

      /**
       * @param klvDataPids The PID for the input source KLV data to this output.
       * Multiple values are accepted, and can be entered in ranges or by comma separation. You can
       * enter the value as a decimal or hexadecimal value. Each PID specified must be in the range of
       * 32 (or 0x20)..8182 (or 0x1ff6).
       */
      override fun klvDataPids(klvDataPids: String) {
        cdkBuilder.klvDataPids(klvDataPids)
      }

      /**
       * @param nielsenId3Behavior If set to passthrough, Nielsen inaudible tones for media tracking
       * will be detected in the input audio and an equivalent ID3 tag will be inserted in the output.
       */
      override fun nielsenId3Behavior(nielsenId3Behavior: String) {
        cdkBuilder.nielsenId3Behavior(nielsenId3Behavior)
      }

      /**
       * @param nullPacketBitrate The value, in bits per second, of extra null packets to insert
       * into the transport stream.
       * This can be used if a downstream encryption system requires periodic null packets.
       */
      override fun nullPacketBitrate(nullPacketBitrate: Number) {
        cdkBuilder.nullPacketBitrate(nullPacketBitrate)
      }

      /**
       * @param patInterval The number of milliseconds between instances of this table in the output
       * transport stream.
       * Valid values are 0, 10..1000.
       */
      override fun patInterval(patInterval: Number) {
        cdkBuilder.patInterval(patInterval)
      }

      /**
       * @param pcrControl When set to pcrEveryPesPacket, a Program Clock Reference value is
       * inserted for every Packetized Elementary Stream (PES) header.
       * This parameter is effective only when the PCR PID is the same as the video or audio
       * elementary stream.
       */
      override fun pcrControl(pcrControl: String) {
        cdkBuilder.pcrControl(pcrControl)
      }

      /**
       * @param pcrPeriod The maximum time, in milliseconds, between Program Clock References (PCRs)
       * inserted into the transport stream.
       */
      override fun pcrPeriod(pcrPeriod: Number) {
        cdkBuilder.pcrPeriod(pcrPeriod)
      }

      /**
       * @param pcrPid The PID of the Program Clock Reference (PCR) in the transport stream.
       * When no value is given, MediaLive assigns the same value as the video PID. You can enter
       * the value as a decimal or hexadecimal value. Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
       */
      override fun pcrPid(pcrPid: String) {
        cdkBuilder.pcrPid(pcrPid)
      }

      /**
       * @param pmtInterval The number of milliseconds between instances of this table in the output
       * transport stream.
       * Valid values are 0, 10..1000.
       */
      override fun pmtInterval(pmtInterval: Number) {
        cdkBuilder.pmtInterval(pmtInterval)
      }

      /**
       * @param pmtPid The PID for the Program Map Table (PMT) in the transport stream.
       * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
       * 0x20)..8182 (or 0x1ff6).
       */
      override fun pmtPid(pmtPid: String) {
        cdkBuilder.pmtPid(pmtPid)
      }

      /**
       * @param programNum The value of the program number field in the Program Map Table (PMT).
       */
      override fun programNum(programNum: Number) {
        cdkBuilder.programNum(programNum)
      }

      /**
       * @param rateMode When VBR, does not insert null packets into the transport stream to fill
       * the specified bitrate.
       * The bitrate setting acts as the maximum bitrate when VBR is set.
       */
      override fun rateMode(rateMode: String) {
        cdkBuilder.rateMode(rateMode)
      }

      /**
       * @param scte27Pids The PID for the input source SCTE-27 data to this output.
       * Multiple values are accepted, and can be entered in ranges or by comma separation. You can
       * enter the value as a decimal or hexadecimal value. Each PID specified must be in the range of
       * 32 (or 0x20)..8182 (or 0x1ff6).
       */
      override fun scte27Pids(scte27Pids: String) {
        cdkBuilder.scte27Pids(scte27Pids)
      }

      /**
       * @param scte35Control Optionally passes SCTE-35 signals from the input source to this
       * output.
       */
      override fun scte35Control(scte35Control: String) {
        cdkBuilder.scte35Control(scte35Control)
      }

      /**
       * @param scte35Pid The PID of the SCTE-35 stream in the transport stream.
       * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
       * 0x20)..8182 (or 0x1ff6).
       */
      override fun scte35Pid(scte35Pid: String) {
        cdkBuilder.scte35Pid(scte35Pid)
      }

      /**
       * @param scte35PrerollPullupMilliseconds the value to be set.
       */
      override fun scte35PrerollPullupMilliseconds(scte35PrerollPullupMilliseconds: Number) {
        cdkBuilder.scte35PrerollPullupMilliseconds(scte35PrerollPullupMilliseconds)
      }

      /**
       * @param segmentationMarkers Inserts segmentation markers at each segmentationTime period.
       * raiSegstart sets the Random Access Indicator bit in the adaptation field. raiAdapt sets the
       * RAI bit and adds the current timecode in the private data bytes. psiSegstart inserts PAT and
       * PMT tables at the start of segments. ebp adds Encoder Boundary Point information to the
       * adaptation field as per OpenCable specification OC-SP-EBP-I01-130118. ebpLegacy adds Encoder
       * Boundary Point information to the adaptation field using a legacy proprietary format.
       */
      override fun segmentationMarkers(segmentationMarkers: String) {
        cdkBuilder.segmentationMarkers(segmentationMarkers)
      }

      /**
       * @param segmentationStyle The segmentation style parameter controls how segmentation markers
       * are inserted into the transport stream.
       * With avails, it is possible that segments might be truncated, which can influence where
       * future segmentation markers are inserted. When a segmentation style of resetCadence is
       * selected and a segment is truncated due to an avail, we will reset the segmentation cadence.
       * This means the subsequent segment will have a duration of $segmentationTime seconds. When a
       * segmentation style of maintainCadence is selected and a segment is truncated due to an avail,
       * we will not reset the segmentation cadence. This means the subsequent segment will likely be
       * truncated as well. However, all segments after that will have a duration of $segmentationTime
       * seconds. Note that EBP lookahead is a slight exception to this rule.
       */
      override fun segmentationStyle(segmentationStyle: String) {
        cdkBuilder.segmentationStyle(segmentationStyle)
      }

      /**
       * @param segmentationTime The length, in seconds, of each segment.
       * This is required unless markers is set to None_.
       */
      override fun segmentationTime(segmentationTime: Number) {
        cdkBuilder.segmentationTime(segmentationTime)
      }

      /**
       * @param timedMetadataBehavior When set to passthrough, timed metadata is passed through from
       * input to output.
       */
      override fun timedMetadataBehavior(timedMetadataBehavior: String) {
        cdkBuilder.timedMetadataBehavior(timedMetadataBehavior)
      }

      /**
       * @param timedMetadataPid The PID of the timed metadata stream in the transport stream.
       * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
       * 0x20)..8182 (or 0x1ff6).
       */
      override fun timedMetadataPid(timedMetadataPid: String) {
        cdkBuilder.timedMetadataPid(timedMetadataPid)
      }

      /**
       * @param transportStreamId The value of the transport stream ID field in the Program Map
       * Table (PMT).
       */
      override fun transportStreamId(transportStreamId: Number) {
        cdkBuilder.transportStreamId(transportStreamId)
      }

      /**
       * @param videoPid The PID of the elementary video stream in the transport stream.
       * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
       * 0x20)..8182 (or 0x1ff6).
       */
      override fun videoPid(videoPid: String) {
        cdkBuilder.videoPid(videoPid)
      }

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.M2tsSettingsProperty
          = cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.M2tsSettingsProperty,
    ) : CdkObject(cdkObject),
        M2tsSettingsProperty {
      /**
       * When set to drop, the output audio streams are removed from the program if the selected
       * input audio stream is removed from the input.
       *
       * This allows the output audio configuration to dynamically change based on the input
       * configuration. If this is set to encodeSilence, all output audio streams will output encoded
       * silence when not connected to an active input stream.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-absentinputaudiobehavior)
       */
      override fun absentInputAudioBehavior(): String? = unwrap(this).getAbsentInputAudioBehavior()

      /**
       * When set to enabled, uses ARIB-compliant field muxing and removes video descriptor.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-arib)
       */
      override fun arib(): String? = unwrap(this).getArib()

      /**
       * The PID for ARIB Captions in the transport stream.
       *
       * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
       * 0x20)..8182 (or 0x1ff6).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-aribcaptionspid)
       */
      override fun aribCaptionsPid(): String? = unwrap(this).getAribCaptionsPid()

      /**
       * If set to auto, The PID number used for ARIB Captions will be auto-selected from unused
       * PIDs.
       *
       * If set to useConfigured, ARIB captions will be on the configured PID number.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-aribcaptionspidcontrol)
       */
      override fun aribCaptionsPidControl(): String? = unwrap(this).getAribCaptionsPidControl()

      /**
       * When set to dvb, uses the DVB buffer model for Dolby Digital audio.
       *
       * When set to atsc, the ATSC model is used.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-audiobuffermodel)
       */
      override fun audioBufferModel(): String? = unwrap(this).getAudioBufferModel()

      /**
       * The number of audio frames to insert for each PES packet.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-audioframesperpes)
       */
      override fun audioFramesPerPes(): Number? = unwrap(this).getAudioFramesPerPes()

      /**
       * The PID of the elementary audio streams in the transport stream.
       *
       * Multiple values are accepted, and can be entered in ranges or by comma separation. You can
       * enter the value as a decimal or hexadecimal value. Each PID specified must be in the range of
       * 32 (or 0x20)..8182 (or 0x1ff6).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-audiopids)
       */
      override fun audioPids(): String? = unwrap(this).getAudioPids()

      /**
       * When set to atsc, uses stream type = 0x81 for AC3 and stream type = 0x87 for EAC3.
       *
       * When set to dvb, uses stream type = 0x06.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-audiostreamtype)
       */
      override fun audioStreamType(): String? = unwrap(this).getAudioStreamType()

      /**
       * The output bitrate of the transport stream in bits per second.
       *
       * Setting to 0 lets the muxer automatically determine the appropriate bitrate.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-bitrate)
       */
      override fun bitrate(): Number? = unwrap(this).getBitrate()

      /**
       * If set to multiplex, uses the multiplex buffer model for accurate interleaving.
       *
       * Setting to bufferModel to none can lead to lower latency, but low-memory devices might not
       * be able to play back the stream without interruptions.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-buffermodel)
       */
      override fun bufferModel(): String? = unwrap(this).getBufferModel()

      /**
       * When set to enabled, generates captionServiceDescriptor in PMT.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-ccdescriptor)
       */
      override fun ccDescriptor(): String? = unwrap(this).getCcDescriptor()

      /**
       * Inserts a DVB Network Information Table (NIT) at the specified table repetition interval.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-dvbnitsettings)
       */
      override fun dvbNitSettings(): Any? = unwrap(this).getDvbNitSettings()

      /**
       * Inserts a DVB Service Description Table (SDT) at the specified table repetition interval.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-dvbsdtsettings)
       */
      override fun dvbSdtSettings(): Any? = unwrap(this).getDvbSdtSettings()

      /**
       * The PID for the input source DVB Subtitle data to this output.
       *
       * Multiple values are accepted, and can be entered in ranges and/or by comma separation. You
       * can enter the value as a decimal or hexadecimal value. Each PID specified must be in the range
       * of 32 (or 0x20)..8182 (or 0x1ff6).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-dvbsubpids)
       */
      override fun dvbSubPids(): String? = unwrap(this).getDvbSubPids()

      /**
       * Inserts DVB Time and Date Table (TDT) at the specified table repetition interval.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-dvbtdtsettings)
       */
      override fun dvbTdtSettings(): Any? = unwrap(this).getDvbTdtSettings()

      /**
       * The PID for the input source DVB Teletext data to this output.
       *
       * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
       * 0x20)..8182 (or 0x1ff6).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-dvbteletextpid)
       */
      override fun dvbTeletextPid(): String? = unwrap(this).getDvbTeletextPid()

      /**
       * If set to passthrough, passes any EBIF data from the input source to this output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-ebif)
       */
      override fun ebif(): String? = unwrap(this).getEbif()

      /**
       * When videoAndFixedIntervals is selected, audio EBP markers are added to partitions 3 and 4.
       *
       * The interval between these additional markers is fixed, and is slightly shorter than the
       * video EBP marker interval. This is only available when EBP Cablelabs segmentation markers are
       * selected. Partitions 1 and 2 always follow the video interval.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-ebpaudiointerval)
       */
      override fun ebpAudioInterval(): String? = unwrap(this).getEbpAudioInterval()

      /**
       * When set, enforces that Encoder Boundary Points do not come within the specified time
       * interval of each other by looking ahead at input video.
       *
       * If another EBP is going to come in within the specified time interval, the current EBP is
       * not emitted, and the segment is "stretched" to the next marker. The lookahead value does not
       * add latency to the system. The channel must be configured elsewhere to create sufficient
       * latency to make the lookahead accurate.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-ebplookaheadms)
       */
      override fun ebpLookaheadMs(): Number? = unwrap(this).getEbpLookaheadMs()

      /**
       * Controls placement of EBP on audio PIDs.
       *
       * If set to videoAndAudioPids, EBP markers are placed on the video PID and all audio PIDs. If
       * set to videoPid, EBP markers are placed on only the video PID.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-ebpplacement)
       */
      override fun ebpPlacement(): String? = unwrap(this).getEbpPlacement()

      /**
       * This field is unused and deprecated.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-ecmpid)
       */
      override fun ecmPid(): String? = unwrap(this).getEcmPid()

      /**
       * Includes or excludes the ES Rate field in the PES header.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-esrateinpes)
       */
      override fun esRateInPes(): String? = unwrap(this).getEsRateInPes()

      /**
       * The PID for the input source ETV Platform data to this output.
       *
       * You can enter it as a decimal or hexadecimal value. Valid values are 32 (or 0x20) to 8182
       * (or 0x1ff6).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-etvplatformpid)
       */
      override fun etvPlatformPid(): String? = unwrap(this).getEtvPlatformPid()

      /**
       * The PID for input source ETV Signal data to this output.
       *
       * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
       * 0x20)..8182 (or 0x1ff6).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-etvsignalpid)
       */
      override fun etvSignalPid(): String? = unwrap(this).getEtvSignalPid()

      /**
       * The length in seconds of each fragment.
       *
       * This is used only with EBP markers.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-fragmenttime)
       */
      override fun fragmentTime(): Number? = unwrap(this).getFragmentTime()

      /**
       * If set to passthrough, passes any KLV data from the input source to this output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-klv)
       */
      override fun klv(): String? = unwrap(this).getKlv()

      /**
       * The PID for the input source KLV data to this output.
       *
       * Multiple values are accepted, and can be entered in ranges or by comma separation. You can
       * enter the value as a decimal or hexadecimal value. Each PID specified must be in the range of
       * 32 (or 0x20)..8182 (or 0x1ff6).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-klvdatapids)
       */
      override fun klvDataPids(): String? = unwrap(this).getKlvDataPids()

      /**
       * If set to passthrough, Nielsen inaudible tones for media tracking will be detected in the
       * input audio and an equivalent ID3 tag will be inserted in the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-nielsenid3behavior)
       */
      override fun nielsenId3Behavior(): String? = unwrap(this).getNielsenId3Behavior()

      /**
       * The value, in bits per second, of extra null packets to insert into the transport stream.
       *
       * This can be used if a downstream encryption system requires periodic null packets.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-nullpacketbitrate)
       */
      override fun nullPacketBitrate(): Number? = unwrap(this).getNullPacketBitrate()

      /**
       * The number of milliseconds between instances of this table in the output transport stream.
       *
       * Valid values are 0, 10..1000.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-patinterval)
       */
      override fun patInterval(): Number? = unwrap(this).getPatInterval()

      /**
       * When set to pcrEveryPesPacket, a Program Clock Reference value is inserted for every
       * Packetized Elementary Stream (PES) header.
       *
       * This parameter is effective only when the PCR PID is the same as the video or audio
       * elementary stream.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-pcrcontrol)
       */
      override fun pcrControl(): String? = unwrap(this).getPcrControl()

      /**
       * The maximum time, in milliseconds, between Program Clock References (PCRs) inserted into
       * the transport stream.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-pcrperiod)
       */
      override fun pcrPeriod(): Number? = unwrap(this).getPcrPeriod()

      /**
       * The PID of the Program Clock Reference (PCR) in the transport stream.
       *
       * When no value is given, MediaLive assigns the same value as the video PID. You can enter
       * the value as a decimal or hexadecimal value. Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-pcrpid)
       */
      override fun pcrPid(): String? = unwrap(this).getPcrPid()

      /**
       * The number of milliseconds between instances of this table in the output transport stream.
       *
       * Valid values are 0, 10..1000.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-pmtinterval)
       */
      override fun pmtInterval(): Number? = unwrap(this).getPmtInterval()

      /**
       * The PID for the Program Map Table (PMT) in the transport stream.
       *
       * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
       * 0x20)..8182 (or 0x1ff6).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-pmtpid)
       */
      override fun pmtPid(): String? = unwrap(this).getPmtPid()

      /**
       * The value of the program number field in the Program Map Table (PMT).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-programnum)
       */
      override fun programNum(): Number? = unwrap(this).getProgramNum()

      /**
       * When VBR, does not insert null packets into the transport stream to fill the specified
       * bitrate.
       *
       * The bitrate setting acts as the maximum bitrate when VBR is set.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-ratemode)
       */
      override fun rateMode(): String? = unwrap(this).getRateMode()

      /**
       * The PID for the input source SCTE-27 data to this output.
       *
       * Multiple values are accepted, and can be entered in ranges or by comma separation. You can
       * enter the value as a decimal or hexadecimal value. Each PID specified must be in the range of
       * 32 (or 0x20)..8182 (or 0x1ff6).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-scte27pids)
       */
      override fun scte27Pids(): String? = unwrap(this).getScte27Pids()

      /**
       * Optionally passes SCTE-35 signals from the input source to this output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-scte35control)
       */
      override fun scte35Control(): String? = unwrap(this).getScte35Control()

      /**
       * The PID of the SCTE-35 stream in the transport stream.
       *
       * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
       * 0x20)..8182 (or 0x1ff6).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-scte35pid)
       */
      override fun scte35Pid(): String? = unwrap(this).getScte35Pid()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-scte35prerollpullupmilliseconds)
       */
      override fun scte35PrerollPullupMilliseconds(): Number? =
          unwrap(this).getScte35PrerollPullupMilliseconds()

      /**
       * Inserts segmentation markers at each segmentationTime period.
       *
       * raiSegstart sets the Random Access Indicator bit in the adaptation field. raiAdapt sets the
       * RAI bit and adds the current timecode in the private data bytes. psiSegstart inserts PAT and
       * PMT tables at the start of segments. ebp adds Encoder Boundary Point information to the
       * adaptation field as per OpenCable specification OC-SP-EBP-I01-130118. ebpLegacy adds Encoder
       * Boundary Point information to the adaptation field using a legacy proprietary format.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-segmentationmarkers)
       */
      override fun segmentationMarkers(): String? = unwrap(this).getSegmentationMarkers()

      /**
       * The segmentation style parameter controls how segmentation markers are inserted into the
       * transport stream.
       *
       * With avails, it is possible that segments might be truncated, which can influence where
       * future segmentation markers are inserted. When a segmentation style of resetCadence is
       * selected and a segment is truncated due to an avail, we will reset the segmentation cadence.
       * This means the subsequent segment will have a duration of $segmentationTime seconds. When a
       * segmentation style of maintainCadence is selected and a segment is truncated due to an avail,
       * we will not reset the segmentation cadence. This means the subsequent segment will likely be
       * truncated as well. However, all segments after that will have a duration of $segmentationTime
       * seconds. Note that EBP lookahead is a slight exception to this rule.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-segmentationstyle)
       */
      override fun segmentationStyle(): String? = unwrap(this).getSegmentationStyle()

      /**
       * The length, in seconds, of each segment.
       *
       * This is required unless markers is set to None_.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-segmentationtime)
       */
      override fun segmentationTime(): Number? = unwrap(this).getSegmentationTime()

      /**
       * When set to passthrough, timed metadata is passed through from input to output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-timedmetadatabehavior)
       */
      override fun timedMetadataBehavior(): String? = unwrap(this).getTimedMetadataBehavior()

      /**
       * The PID of the timed metadata stream in the transport stream.
       *
       * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
       * 0x20)..8182 (or 0x1ff6).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-timedmetadatapid)
       */
      override fun timedMetadataPid(): String? = unwrap(this).getTimedMetadataPid()

      /**
       * The value of the transport stream ID field in the Program Map Table (PMT).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-transportstreamid)
       */
      override fun transportStreamId(): Number? = unwrap(this).getTransportStreamId()

      /**
       * The PID of the elementary video stream in the transport stream.
       *
       * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
       * 0x20)..8182 (or 0x1ff6).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-videopid)
       */
      override fun videoPid(): String? = unwrap(this).getVideoPid()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): M2tsSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.M2tsSettingsProperty):
          M2tsSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? M2tsSettingsProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: M2tsSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.M2tsSettingsProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.M2tsSettingsProperty
    }
  }

  /**
   * Settings for the M3U8 container.
   *
   * The parent of this entity is StandardHlsSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * M3u8SettingsProperty m3u8SettingsProperty = M3u8SettingsProperty.builder()
   * .audioFramesPerPes(123)
   * .audioPids("audioPids")
   * .ecmPid("ecmPid")
   * .klvBehavior("klvBehavior")
   * .klvDataPids("klvDataPids")
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .patInterval(123)
   * .pcrControl("pcrControl")
   * .pcrPeriod(123)
   * .pcrPid("pcrPid")
   * .pmtInterval(123)
   * .pmtPid("pmtPid")
   * .programNum(123)
   * .scte35Behavior("scte35Behavior")
   * .scte35Pid("scte35Pid")
   * .timedMetadataBehavior("timedMetadataBehavior")
   * .timedMetadataPid("timedMetadataPid")
   * .transportStreamId(123)
   * .videoPid("videoPid")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html)
   */
  public interface M3u8SettingsProperty {
    /**
     * The number of audio frames to insert for each PES packet.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-audioframesperpes)
     */
    public fun audioFramesPerPes(): Number? = unwrap(this).getAudioFramesPerPes()

    /**
     * The PID of the elementary audio streams in the transport stream.
     *
     * Multiple values are accepted, and can be entered in ranges or by comma separation. You can
     * enter the value as a decimal or hexadecimal value.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-audiopids)
     */
    public fun audioPids(): String? = unwrap(this).getAudioPids()

    /**
     * This parameter is unused and deprecated.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-ecmpid)
     */
    public fun ecmPid(): String? = unwrap(this).getEcmPid()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-klvbehavior)
     */
    public fun klvBehavior(): String? = unwrap(this).getKlvBehavior()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-klvdatapids)
     */
    public fun klvDataPids(): String? = unwrap(this).getKlvDataPids()

    /**
     * If set to passthrough, Nielsen inaudible tones for media tracking will be detected in the
     * input audio and an equivalent ID3 tag will be inserted in the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-nielsenid3behavior)
     */
    public fun nielsenId3Behavior(): String? = unwrap(this).getNielsenId3Behavior()

    /**
     * The number of milliseconds between instances of this table in the output transport stream.
     *
     * A value of "0" writes out the PMT once per segment file.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-patinterval)
     */
    public fun patInterval(): Number? = unwrap(this).getPatInterval()

    /**
     * When set to pcrEveryPesPacket, a Program Clock Reference value is inserted for every
     * Packetized Elementary Stream (PES) header.
     *
     * This parameter is effective only when the PCR PID is the same as the video or audio
     * elementary stream.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-pcrcontrol)
     */
    public fun pcrControl(): String? = unwrap(this).getPcrControl()

    /**
     * The maximum time, in milliseconds, between Program Clock References (PCRs) inserted into the
     * transport stream.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-pcrperiod)
     */
    public fun pcrPeriod(): Number? = unwrap(this).getPcrPeriod()

    /**
     * The PID of the Program Clock Reference (PCR) in the transport stream.
     *
     * When no value is given, MediaLive assigns the same value as the video PID. You can enter the
     * value as a decimal or hexadecimal value.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-pcrpid)
     */
    public fun pcrPid(): String? = unwrap(this).getPcrPid()

    /**
     * The number of milliseconds between instances of this table in the output transport stream.
     *
     * A value of "0" writes out the PMT once per segment file.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-pmtinterval)
     */
    public fun pmtInterval(): Number? = unwrap(this).getPmtInterval()

    /**
     * The PID for the Program Map Table (PMT) in the transport stream.
     *
     * You can enter the value as a decimal or hexadecimal value.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-pmtpid)
     */
    public fun pmtPid(): String? = unwrap(this).getPmtPid()

    /**
     * The value of the program number field in the Program Map Table (PMT).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-programnum)
     */
    public fun programNum(): Number? = unwrap(this).getProgramNum()

    /**
     * If set to passthrough, passes any SCTE-35 signals from the input source to this output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-scte35behavior)
     */
    public fun scte35Behavior(): String? = unwrap(this).getScte35Behavior()

    /**
     * The PID of the SCTE-35 stream in the transport stream.
     *
     * You can enter the value as a decimal or hexadecimal value.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-scte35pid)
     */
    public fun scte35Pid(): String? = unwrap(this).getScte35Pid()

    /**
     * When set to passthrough, timed metadata is passed through from input to output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-timedmetadatabehavior)
     */
    public fun timedMetadataBehavior(): String? = unwrap(this).getTimedMetadataBehavior()

    /**
     * The PID of the timed metadata stream in the transport stream.
     *
     * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
     * 0x20)..8182 (or 0x1ff6).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-timedmetadatapid)
     */
    public fun timedMetadataPid(): String? = unwrap(this).getTimedMetadataPid()

    /**
     * The value of the transport stream ID field in the Program Map Table (PMT).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-transportstreamid)
     */
    public fun transportStreamId(): Number? = unwrap(this).getTransportStreamId()

    /**
     * The PID of the elementary video stream in the transport stream.
     *
     * You can enter the value as a decimal or hexadecimal value.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-videopid)
     */
    public fun videoPid(): String? = unwrap(this).getVideoPid()

    /**
     * A builder for [M3u8SettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param audioFramesPerPes The number of audio frames to insert for each PES packet.
       */
      public fun audioFramesPerPes(audioFramesPerPes: Number)

      /**
       * @param audioPids The PID of the elementary audio streams in the transport stream.
       * Multiple values are accepted, and can be entered in ranges or by comma separation. You can
       * enter the value as a decimal or hexadecimal value.
       */
      public fun audioPids(audioPids: String)

      /**
       * @param ecmPid This parameter is unused and deprecated.
       */
      public fun ecmPid(ecmPid: String)

      /**
       * @param klvBehavior the value to be set.
       */
      public fun klvBehavior(klvBehavior: String)

      /**
       * @param klvDataPids the value to be set.
       */
      public fun klvDataPids(klvDataPids: String)

      /**
       * @param nielsenId3Behavior If set to passthrough, Nielsen inaudible tones for media tracking
       * will be detected in the input audio and an equivalent ID3 tag will be inserted in the output.
       */
      public fun nielsenId3Behavior(nielsenId3Behavior: String)

      /**
       * @param patInterval The number of milliseconds between instances of this table in the output
       * transport stream.
       * A value of "0" writes out the PMT once per segment file.
       */
      public fun patInterval(patInterval: Number)

      /**
       * @param pcrControl When set to pcrEveryPesPacket, a Program Clock Reference value is
       * inserted for every Packetized Elementary Stream (PES) header.
       * This parameter is effective only when the PCR PID is the same as the video or audio
       * elementary stream.
       */
      public fun pcrControl(pcrControl: String)

      /**
       * @param pcrPeriod The maximum time, in milliseconds, between Program Clock References (PCRs)
       * inserted into the transport stream.
       */
      public fun pcrPeriod(pcrPeriod: Number)

      /**
       * @param pcrPid The PID of the Program Clock Reference (PCR) in the transport stream.
       * When no value is given, MediaLive assigns the same value as the video PID. You can enter
       * the value as a decimal or hexadecimal value.
       */
      public fun pcrPid(pcrPid: String)

      /**
       * @param pmtInterval The number of milliseconds between instances of this table in the output
       * transport stream.
       * A value of "0" writes out the PMT once per segment file.
       */
      public fun pmtInterval(pmtInterval: Number)

      /**
       * @param pmtPid The PID for the Program Map Table (PMT) in the transport stream.
       * You can enter the value as a decimal or hexadecimal value.
       */
      public fun pmtPid(pmtPid: String)

      /**
       * @param programNum The value of the program number field in the Program Map Table (PMT).
       */
      public fun programNum(programNum: Number)

      /**
       * @param scte35Behavior If set to passthrough, passes any SCTE-35 signals from the input
       * source to this output.
       */
      public fun scte35Behavior(scte35Behavior: String)

      /**
       * @param scte35Pid The PID of the SCTE-35 stream in the transport stream.
       * You can enter the value as a decimal or hexadecimal value.
       */
      public fun scte35Pid(scte35Pid: String)

      /**
       * @param timedMetadataBehavior When set to passthrough, timed metadata is passed through from
       * input to output.
       */
      public fun timedMetadataBehavior(timedMetadataBehavior: String)

      /**
       * @param timedMetadataPid The PID of the timed metadata stream in the transport stream.
       * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
       * 0x20)..8182 (or 0x1ff6).
       */
      public fun timedMetadataPid(timedMetadataPid: String)

      /**
       * @param transportStreamId The value of the transport stream ID field in the Program Map
       * Table (PMT).
       */
      public fun transportStreamId(transportStreamId: Number)

      /**
       * @param videoPid The PID of the elementary video stream in the transport stream.
       * You can enter the value as a decimal or hexadecimal value.
       */
      public fun videoPid(videoPid: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.M3u8SettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.M3u8SettingsProperty.builder()

      /**
       * @param audioFramesPerPes The number of audio frames to insert for each PES packet.
       */
      override fun audioFramesPerPes(audioFramesPerPes: Number) {
        cdkBuilder.audioFramesPerPes(audioFramesPerPes)
      }

      /**
       * @param audioPids The PID of the elementary audio streams in the transport stream.
       * Multiple values are accepted, and can be entered in ranges or by comma separation. You can
       * enter the value as a decimal or hexadecimal value.
       */
      override fun audioPids(audioPids: String) {
        cdkBuilder.audioPids(audioPids)
      }

      /**
       * @param ecmPid This parameter is unused and deprecated.
       */
      override fun ecmPid(ecmPid: String) {
        cdkBuilder.ecmPid(ecmPid)
      }

      /**
       * @param klvBehavior the value to be set.
       */
      override fun klvBehavior(klvBehavior: String) {
        cdkBuilder.klvBehavior(klvBehavior)
      }

      /**
       * @param klvDataPids the value to be set.
       */
      override fun klvDataPids(klvDataPids: String) {
        cdkBuilder.klvDataPids(klvDataPids)
      }

      /**
       * @param nielsenId3Behavior If set to passthrough, Nielsen inaudible tones for media tracking
       * will be detected in the input audio and an equivalent ID3 tag will be inserted in the output.
       */
      override fun nielsenId3Behavior(nielsenId3Behavior: String) {
        cdkBuilder.nielsenId3Behavior(nielsenId3Behavior)
      }

      /**
       * @param patInterval The number of milliseconds between instances of this table in the output
       * transport stream.
       * A value of "0" writes out the PMT once per segment file.
       */
      override fun patInterval(patInterval: Number) {
        cdkBuilder.patInterval(patInterval)
      }

      /**
       * @param pcrControl When set to pcrEveryPesPacket, a Program Clock Reference value is
       * inserted for every Packetized Elementary Stream (PES) header.
       * This parameter is effective only when the PCR PID is the same as the video or audio
       * elementary stream.
       */
      override fun pcrControl(pcrControl: String) {
        cdkBuilder.pcrControl(pcrControl)
      }

      /**
       * @param pcrPeriod The maximum time, in milliseconds, between Program Clock References (PCRs)
       * inserted into the transport stream.
       */
      override fun pcrPeriod(pcrPeriod: Number) {
        cdkBuilder.pcrPeriod(pcrPeriod)
      }

      /**
       * @param pcrPid The PID of the Program Clock Reference (PCR) in the transport stream.
       * When no value is given, MediaLive assigns the same value as the video PID. You can enter
       * the value as a decimal or hexadecimal value.
       */
      override fun pcrPid(pcrPid: String) {
        cdkBuilder.pcrPid(pcrPid)
      }

      /**
       * @param pmtInterval The number of milliseconds between instances of this table in the output
       * transport stream.
       * A value of "0" writes out the PMT once per segment file.
       */
      override fun pmtInterval(pmtInterval: Number) {
        cdkBuilder.pmtInterval(pmtInterval)
      }

      /**
       * @param pmtPid The PID for the Program Map Table (PMT) in the transport stream.
       * You can enter the value as a decimal or hexadecimal value.
       */
      override fun pmtPid(pmtPid: String) {
        cdkBuilder.pmtPid(pmtPid)
      }

      /**
       * @param programNum The value of the program number field in the Program Map Table (PMT).
       */
      override fun programNum(programNum: Number) {
        cdkBuilder.programNum(programNum)
      }

      /**
       * @param scte35Behavior If set to passthrough, passes any SCTE-35 signals from the input
       * source to this output.
       */
      override fun scte35Behavior(scte35Behavior: String) {
        cdkBuilder.scte35Behavior(scte35Behavior)
      }

      /**
       * @param scte35Pid The PID of the SCTE-35 stream in the transport stream.
       * You can enter the value as a decimal or hexadecimal value.
       */
      override fun scte35Pid(scte35Pid: String) {
        cdkBuilder.scte35Pid(scte35Pid)
      }

      /**
       * @param timedMetadataBehavior When set to passthrough, timed metadata is passed through from
       * input to output.
       */
      override fun timedMetadataBehavior(timedMetadataBehavior: String) {
        cdkBuilder.timedMetadataBehavior(timedMetadataBehavior)
      }

      /**
       * @param timedMetadataPid The PID of the timed metadata stream in the transport stream.
       * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
       * 0x20)..8182 (or 0x1ff6).
       */
      override fun timedMetadataPid(timedMetadataPid: String) {
        cdkBuilder.timedMetadataPid(timedMetadataPid)
      }

      /**
       * @param transportStreamId The value of the transport stream ID field in the Program Map
       * Table (PMT).
       */
      override fun transportStreamId(transportStreamId: Number) {
        cdkBuilder.transportStreamId(transportStreamId)
      }

      /**
       * @param videoPid The PID of the elementary video stream in the transport stream.
       * You can enter the value as a decimal or hexadecimal value.
       */
      override fun videoPid(videoPid: String) {
        cdkBuilder.videoPid(videoPid)
      }

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.M3u8SettingsProperty
          = cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.M3u8SettingsProperty,
    ) : CdkObject(cdkObject),
        M3u8SettingsProperty {
      /**
       * The number of audio frames to insert for each PES packet.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-audioframesperpes)
       */
      override fun audioFramesPerPes(): Number? = unwrap(this).getAudioFramesPerPes()

      /**
       * The PID of the elementary audio streams in the transport stream.
       *
       * Multiple values are accepted, and can be entered in ranges or by comma separation. You can
       * enter the value as a decimal or hexadecimal value.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-audiopids)
       */
      override fun audioPids(): String? = unwrap(this).getAudioPids()

      /**
       * This parameter is unused and deprecated.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-ecmpid)
       */
      override fun ecmPid(): String? = unwrap(this).getEcmPid()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-klvbehavior)
       */
      override fun klvBehavior(): String? = unwrap(this).getKlvBehavior()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-klvdatapids)
       */
      override fun klvDataPids(): String? = unwrap(this).getKlvDataPids()

      /**
       * If set to passthrough, Nielsen inaudible tones for media tracking will be detected in the
       * input audio and an equivalent ID3 tag will be inserted in the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-nielsenid3behavior)
       */
      override fun nielsenId3Behavior(): String? = unwrap(this).getNielsenId3Behavior()

      /**
       * The number of milliseconds between instances of this table in the output transport stream.
       *
       * A value of "0" writes out the PMT once per segment file.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-patinterval)
       */
      override fun patInterval(): Number? = unwrap(this).getPatInterval()

      /**
       * When set to pcrEveryPesPacket, a Program Clock Reference value is inserted for every
       * Packetized Elementary Stream (PES) header.
       *
       * This parameter is effective only when the PCR PID is the same as the video or audio
       * elementary stream.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-pcrcontrol)
       */
      override fun pcrControl(): String? = unwrap(this).getPcrControl()

      /**
       * The maximum time, in milliseconds, between Program Clock References (PCRs) inserted into
       * the transport stream.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-pcrperiod)
       */
      override fun pcrPeriod(): Number? = unwrap(this).getPcrPeriod()

      /**
       * The PID of the Program Clock Reference (PCR) in the transport stream.
       *
       * When no value is given, MediaLive assigns the same value as the video PID. You can enter
       * the value as a decimal or hexadecimal value.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-pcrpid)
       */
      override fun pcrPid(): String? = unwrap(this).getPcrPid()

      /**
       * The number of milliseconds between instances of this table in the output transport stream.
       *
       * A value of "0" writes out the PMT once per segment file.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-pmtinterval)
       */
      override fun pmtInterval(): Number? = unwrap(this).getPmtInterval()

      /**
       * The PID for the Program Map Table (PMT) in the transport stream.
       *
       * You can enter the value as a decimal or hexadecimal value.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-pmtpid)
       */
      override fun pmtPid(): String? = unwrap(this).getPmtPid()

      /**
       * The value of the program number field in the Program Map Table (PMT).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-programnum)
       */
      override fun programNum(): Number? = unwrap(this).getProgramNum()

      /**
       * If set to passthrough, passes any SCTE-35 signals from the input source to this output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-scte35behavior)
       */
      override fun scte35Behavior(): String? = unwrap(this).getScte35Behavior()

      /**
       * The PID of the SCTE-35 stream in the transport stream.
       *
       * You can enter the value as a decimal or hexadecimal value.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-scte35pid)
       */
      override fun scte35Pid(): String? = unwrap(this).getScte35Pid()

      /**
       * When set to passthrough, timed metadata is passed through from input to output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-timedmetadatabehavior)
       */
      override fun timedMetadataBehavior(): String? = unwrap(this).getTimedMetadataBehavior()

      /**
       * The PID of the timed metadata stream in the transport stream.
       *
       * You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or
       * 0x20)..8182 (or 0x1ff6).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-timedmetadatapid)
       */
      override fun timedMetadataPid(): String? = unwrap(this).getTimedMetadataPid()

      /**
       * The value of the transport stream ID field in the Program Map Table (PMT).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-transportstreamid)
       */
      override fun transportStreamId(): Number? = unwrap(this).getTransportStreamId()

      /**
       * The PID of the elementary video stream in the transport stream.
       *
       * You can enter the value as a decimal or hexadecimal value.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-videopid)
       */
      override fun videoPid(): String? = unwrap(this).getVideoPid()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): M3u8SettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.M3u8SettingsProperty):
          M3u8SettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? M3u8SettingsProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: M3u8SettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.M3u8SettingsProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.M3u8SettingsProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * MaintenanceCreateSettingsProperty maintenanceCreateSettingsProperty =
   * MaintenanceCreateSettingsProperty.builder()
   * .maintenanceDay("maintenanceDay")
   * .maintenanceStartTime("maintenanceStartTime")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-maintenancecreatesettings.html)
   */
  public interface MaintenanceCreateSettingsProperty {
    /**
     * Choose one day of the week for maintenance.
     *
     * The chosen day is used for all future maintenance windows.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-maintenancecreatesettings.html#cfn-medialive-channel-maintenancecreatesettings-maintenanceday)
     */
    public fun maintenanceDay(): String? = unwrap(this).getMaintenanceDay()

    /**
     * Choose the hour that maintenance will start.
     *
     * The chosen time is used for all future maintenance windows.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-maintenancecreatesettings.html#cfn-medialive-channel-maintenancecreatesettings-maintenancestarttime)
     */
    public fun maintenanceStartTime(): String? = unwrap(this).getMaintenanceStartTime()

    /**
     * A builder for [MaintenanceCreateSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param maintenanceDay Choose one day of the week for maintenance.
       * The chosen day is used for all future maintenance windows.
       */
      public fun maintenanceDay(maintenanceDay: String)

      /**
       * @param maintenanceStartTime Choose the hour that maintenance will start.
       * The chosen time is used for all future maintenance windows.
       */
      public fun maintenanceStartTime(maintenanceStartTime: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.MaintenanceCreateSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.MaintenanceCreateSettingsProperty.builder()

      /**
       * @param maintenanceDay Choose one day of the week for maintenance.
       * The chosen day is used for all future maintenance windows.
       */
      override fun maintenanceDay(maintenanceDay: String) {
        cdkBuilder.maintenanceDay(maintenanceDay)
      }

      /**
       * @param maintenanceStartTime Choose the hour that maintenance will start.
       * The chosen time is used for all future maintenance windows.
       */
      override fun maintenanceStartTime(maintenanceStartTime: String) {
        cdkBuilder.maintenanceStartTime(maintenanceStartTime)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.MaintenanceCreateSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.MaintenanceCreateSettingsProperty,
    ) : CdkObject(cdkObject),
        MaintenanceCreateSettingsProperty {
      /**
       * Choose one day of the week for maintenance.
       *
       * The chosen day is used for all future maintenance windows.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-maintenancecreatesettings.html#cfn-medialive-channel-maintenancecreatesettings-maintenanceday)
       */
      override fun maintenanceDay(): String? = unwrap(this).getMaintenanceDay()

      /**
       * Choose the hour that maintenance will start.
       *
       * The chosen time is used for all future maintenance windows.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-maintenancecreatesettings.html#cfn-medialive-channel-maintenancecreatesettings-maintenancestarttime)
       */
      override fun maintenanceStartTime(): String? = unwrap(this).getMaintenanceStartTime()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          MaintenanceCreateSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.MaintenanceCreateSettingsProperty):
          MaintenanceCreateSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          MaintenanceCreateSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: MaintenanceCreateSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.MaintenanceCreateSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.MaintenanceCreateSettingsProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * MaintenanceUpdateSettingsProperty maintenanceUpdateSettingsProperty =
   * MaintenanceUpdateSettingsProperty.builder()
   * .maintenanceDay("maintenanceDay")
   * .maintenanceScheduledDate("maintenanceScheduledDate")
   * .maintenanceStartTime("maintenanceStartTime")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-maintenanceupdatesettings.html)
   */
  public interface MaintenanceUpdateSettingsProperty {
    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-maintenanceupdatesettings.html#cfn-medialive-channel-maintenanceupdatesettings-maintenanceday)
     */
    public fun maintenanceDay(): String? = unwrap(this).getMaintenanceDay()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-maintenanceupdatesettings.html#cfn-medialive-channel-maintenanceupdatesettings-maintenancescheduleddate)
     */
    public fun maintenanceScheduledDate(): String? = unwrap(this).getMaintenanceScheduledDate()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-maintenanceupdatesettings.html#cfn-medialive-channel-maintenanceupdatesettings-maintenancestarttime)
     */
    public fun maintenanceStartTime(): String? = unwrap(this).getMaintenanceStartTime()

    /**
     * A builder for [MaintenanceUpdateSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param maintenanceDay the value to be set.
       */
      public fun maintenanceDay(maintenanceDay: String)

      /**
       * @param maintenanceScheduledDate the value to be set.
       */
      public fun maintenanceScheduledDate(maintenanceScheduledDate: String)

      /**
       * @param maintenanceStartTime the value to be set.
       */
      public fun maintenanceStartTime(maintenanceStartTime: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.MaintenanceUpdateSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.MaintenanceUpdateSettingsProperty.builder()

      /**
       * @param maintenanceDay the value to be set.
       */
      override fun maintenanceDay(maintenanceDay: String) {
        cdkBuilder.maintenanceDay(maintenanceDay)
      }

      /**
       * @param maintenanceScheduledDate the value to be set.
       */
      override fun maintenanceScheduledDate(maintenanceScheduledDate: String) {
        cdkBuilder.maintenanceScheduledDate(maintenanceScheduledDate)
      }

      /**
       * @param maintenanceStartTime the value to be set.
       */
      override fun maintenanceStartTime(maintenanceStartTime: String) {
        cdkBuilder.maintenanceStartTime(maintenanceStartTime)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.MaintenanceUpdateSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.MaintenanceUpdateSettingsProperty,
    ) : CdkObject(cdkObject),
        MaintenanceUpdateSettingsProperty {
      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-maintenanceupdatesettings.html#cfn-medialive-channel-maintenanceupdatesettings-maintenanceday)
       */
      override fun maintenanceDay(): String? = unwrap(this).getMaintenanceDay()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-maintenanceupdatesettings.html#cfn-medialive-channel-maintenanceupdatesettings-maintenancescheduleddate)
       */
      override fun maintenanceScheduledDate(): String? = unwrap(this).getMaintenanceScheduledDate()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-maintenanceupdatesettings.html#cfn-medialive-channel-maintenanceupdatesettings-maintenancestarttime)
       */
      override fun maintenanceStartTime(): String? = unwrap(this).getMaintenanceStartTime()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          MaintenanceUpdateSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.MaintenanceUpdateSettingsProperty):
          MaintenanceUpdateSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          MaintenanceUpdateSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: MaintenanceUpdateSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.MaintenanceUpdateSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.MaintenanceUpdateSettingsProperty
    }
  }

  /**
   * The settings for the MediaPackage group.
   *
   * The parent of this entity is OutputGroupSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * MediaPackageGroupSettingsProperty mediaPackageGroupSettingsProperty =
   * MediaPackageGroupSettingsProperty.builder()
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mediapackagegroupsettings.html)
   */
  public interface MediaPackageGroupSettingsProperty {
    /**
     * The MediaPackage channel destination.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mediapackagegroupsettings.html#cfn-medialive-channel-mediapackagegroupsettings-destination)
     */
    public fun destination(): Any? = unwrap(this).getDestination()

    /**
     * A builder for [MediaPackageGroupSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param destination The MediaPackage channel destination.
       */
      public fun destination(destination: IResolvable)

      /**
       * @param destination The MediaPackage channel destination.
       */
      public fun destination(destination: OutputLocationRefProperty)

      /**
       * @param destination The MediaPackage channel destination.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("713636ca4eccf016520d54b41a47fb2c5ec4af5b2de0a11a2c9e46f6b0f9b284")
      public fun destination(destination: OutputLocationRefProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.MediaPackageGroupSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.MediaPackageGroupSettingsProperty.builder()

      /**
       * @param destination The MediaPackage channel destination.
       */
      override fun destination(destination: IResolvable) {
        cdkBuilder.destination(destination.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param destination The MediaPackage channel destination.
       */
      override fun destination(destination: OutputLocationRefProperty) {
        cdkBuilder.destination(destination.let(OutputLocationRefProperty.Companion::unwrap))
      }

      /**
       * @param destination The MediaPackage channel destination.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("713636ca4eccf016520d54b41a47fb2c5ec4af5b2de0a11a2c9e46f6b0f9b284")
      override fun destination(destination: OutputLocationRefProperty.Builder.() -> Unit): Unit =
          destination(OutputLocationRefProperty(destination))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.MediaPackageGroupSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.MediaPackageGroupSettingsProperty,
    ) : CdkObject(cdkObject),
        MediaPackageGroupSettingsProperty {
      /**
       * The MediaPackage channel destination.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mediapackagegroupsettings.html#cfn-medialive-channel-mediapackagegroupsettings-destination)
       */
      override fun destination(): Any? = unwrap(this).getDestination()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          MediaPackageGroupSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.MediaPackageGroupSettingsProperty):
          MediaPackageGroupSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          MediaPackageGroupSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: MediaPackageGroupSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.MediaPackageGroupSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.MediaPackageGroupSettingsProperty
    }
  }

  /**
   * Destination settings for a MediaPackage output.
   *
   * The parent of this entity is OutputDestination.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * MediaPackageOutputDestinationSettingsProperty mediaPackageOutputDestinationSettingsProperty =
   * MediaPackageOutputDestinationSettingsProperty.builder()
   * .channelId("channelId")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mediapackageoutputdestinationsettings.html)
   */
  public interface MediaPackageOutputDestinationSettingsProperty {
    /**
     * The ID of the channel in MediaPackage that is the destination for this output group.
     *
     * You don't need to specify the individual inputs in MediaPackage; MediaLive handles the
     * connection of the two MediaLive pipelines to the two MediaPackage inputs. The MediaPackage
     * channel and MediaLive channel must be in the same Region.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mediapackageoutputdestinationsettings.html#cfn-medialive-channel-mediapackageoutputdestinationsettings-channelid)
     */
    public fun channelId(): String? = unwrap(this).getChannelId()

    /**
     * A builder for [MediaPackageOutputDestinationSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param channelId The ID of the channel in MediaPackage that is the destination for this
       * output group.
       * You don't need to specify the individual inputs in MediaPackage; MediaLive handles the
       * connection of the two MediaLive pipelines to the two MediaPackage inputs. The MediaPackage
       * channel and MediaLive channel must be in the same Region.
       */
      public fun channelId(channelId: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.MediaPackageOutputDestinationSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.MediaPackageOutputDestinationSettingsProperty.builder()

      /**
       * @param channelId The ID of the channel in MediaPackage that is the destination for this
       * output group.
       * You don't need to specify the individual inputs in MediaPackage; MediaLive handles the
       * connection of the two MediaLive pipelines to the two MediaPackage inputs. The MediaPackage
       * channel and MediaLive channel must be in the same Region.
       */
      override fun channelId(channelId: String) {
        cdkBuilder.channelId(channelId)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.MediaPackageOutputDestinationSettingsProperty
          = cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.MediaPackageOutputDestinationSettingsProperty,
    ) : CdkObject(cdkObject),
        MediaPackageOutputDestinationSettingsProperty {
      /**
       * The ID of the channel in MediaPackage that is the destination for this output group.
       *
       * You don't need to specify the individual inputs in MediaPackage; MediaLive handles the
       * connection of the two MediaLive pipelines to the two MediaPackage inputs. The MediaPackage
       * channel and MediaLive channel must be in the same Region.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mediapackageoutputdestinationsettings.html#cfn-medialive-channel-mediapackageoutputdestinationsettings-channelid)
       */
      override fun channelId(): String? = unwrap(this).getChannelId()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          MediaPackageOutputDestinationSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.MediaPackageOutputDestinationSettingsProperty):
          MediaPackageOutputDestinationSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          MediaPackageOutputDestinationSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: MediaPackageOutputDestinationSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.MediaPackageOutputDestinationSettingsProperty
          = (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.MediaPackageOutputDestinationSettingsProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * MediaPackageOutputSettingsProperty mediaPackageOutputSettingsProperty =
   * MediaPackageOutputSettingsProperty.builder().build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mediapackageoutputsettings.html)
   */
  public interface MediaPackageOutputSettingsProperty {
    /**
     * A builder for [MediaPackageOutputSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.MediaPackageOutputSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.MediaPackageOutputSettingsProperty.builder()

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.MediaPackageOutputSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.MediaPackageOutputSettingsProperty,
    ) : CdkObject(cdkObject),
        MediaPackageOutputSettingsProperty

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          MediaPackageOutputSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.MediaPackageOutputSettingsProperty):
          MediaPackageOutputSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          MediaPackageOutputSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: MediaPackageOutputSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.MediaPackageOutputSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.MediaPackageOutputSettingsProperty
    }
  }

  /**
   * Settings to enable and configure the motion graphics overlay feature in the channel.
   *
   * The parent of this entity is EncoderSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * MotionGraphicsConfigurationProperty motionGraphicsConfigurationProperty =
   * MotionGraphicsConfigurationProperty.builder()
   * .motionGraphicsInsertion("motionGraphicsInsertion")
   * .motionGraphicsSettings(MotionGraphicsSettingsProperty.builder()
   * .htmlMotionGraphicsSettings(HtmlMotionGraphicsSettingsProperty.builder().build())
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-motiongraphicsconfiguration.html)
   */
  public interface MotionGraphicsConfigurationProperty {
    /**
     * Enables or disables the motion graphics overlay feature in the channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-motiongraphicsconfiguration.html#cfn-medialive-channel-motiongraphicsconfiguration-motiongraphicsinsertion)
     */
    public fun motionGraphicsInsertion(): String? = unwrap(this).getMotionGraphicsInsertion()

    /**
     * Settings to enable and configure the motion graphics overlay feature in the channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-motiongraphicsconfiguration.html#cfn-medialive-channel-motiongraphicsconfiguration-motiongraphicssettings)
     */
    public fun motionGraphicsSettings(): Any? = unwrap(this).getMotionGraphicsSettings()

    /**
     * A builder for [MotionGraphicsConfigurationProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param motionGraphicsInsertion Enables or disables the motion graphics overlay feature in
       * the channel.
       */
      public fun motionGraphicsInsertion(motionGraphicsInsertion: String)

      /**
       * @param motionGraphicsSettings Settings to enable and configure the motion graphics overlay
       * feature in the channel.
       */
      public fun motionGraphicsSettings(motionGraphicsSettings: IResolvable)

      /**
       * @param motionGraphicsSettings Settings to enable and configure the motion graphics overlay
       * feature in the channel.
       */
      public fun motionGraphicsSettings(motionGraphicsSettings: MotionGraphicsSettingsProperty)

      /**
       * @param motionGraphicsSettings Settings to enable and configure the motion graphics overlay
       * feature in the channel.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("c3a7271f89321ad17772aa32489d7d3647324393dd12a21a17c02f3c4993bcb9")
      public
          fun motionGraphicsSettings(motionGraphicsSettings: MotionGraphicsSettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.MotionGraphicsConfigurationProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.MotionGraphicsConfigurationProperty.builder()

      /**
       * @param motionGraphicsInsertion Enables or disables the motion graphics overlay feature in
       * the channel.
       */
      override fun motionGraphicsInsertion(motionGraphicsInsertion: String) {
        cdkBuilder.motionGraphicsInsertion(motionGraphicsInsertion)
      }

      /**
       * @param motionGraphicsSettings Settings to enable and configure the motion graphics overlay
       * feature in the channel.
       */
      override fun motionGraphicsSettings(motionGraphicsSettings: IResolvable) {
        cdkBuilder.motionGraphicsSettings(motionGraphicsSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param motionGraphicsSettings Settings to enable and configure the motion graphics overlay
       * feature in the channel.
       */
      override fun motionGraphicsSettings(motionGraphicsSettings: MotionGraphicsSettingsProperty) {
        cdkBuilder.motionGraphicsSettings(motionGraphicsSettings.let(MotionGraphicsSettingsProperty.Companion::unwrap))
      }

      /**
       * @param motionGraphicsSettings Settings to enable and configure the motion graphics overlay
       * feature in the channel.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("c3a7271f89321ad17772aa32489d7d3647324393dd12a21a17c02f3c4993bcb9")
      override
          fun motionGraphicsSettings(motionGraphicsSettings: MotionGraphicsSettingsProperty.Builder.() -> Unit):
          Unit = motionGraphicsSettings(MotionGraphicsSettingsProperty(motionGraphicsSettings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.MotionGraphicsConfigurationProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.MotionGraphicsConfigurationProperty,
    ) : CdkObject(cdkObject),
        MotionGraphicsConfigurationProperty {
      /**
       * Enables or disables the motion graphics overlay feature in the channel.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-motiongraphicsconfiguration.html#cfn-medialive-channel-motiongraphicsconfiguration-motiongraphicsinsertion)
       */
      override fun motionGraphicsInsertion(): String? = unwrap(this).getMotionGraphicsInsertion()

      /**
       * Settings to enable and configure the motion graphics overlay feature in the channel.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-motiongraphicsconfiguration.html#cfn-medialive-channel-motiongraphicsconfiguration-motiongraphicssettings)
       */
      override fun motionGraphicsSettings(): Any? = unwrap(this).getMotionGraphicsSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          MotionGraphicsConfigurationProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.MotionGraphicsConfigurationProperty):
          MotionGraphicsConfigurationProperty = CdkObjectWrappers.wrap(cdkObject) as?
          MotionGraphicsConfigurationProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: MotionGraphicsConfigurationProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.MotionGraphicsConfigurationProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.MotionGraphicsConfigurationProperty
    }
  }

  /**
   * Settings to enable and configure the motion graphics overlay feature in the channel.
   *
   * The parent of this entity is MotionGraphicsConfiguration.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * MotionGraphicsSettingsProperty motionGraphicsSettingsProperty =
   * MotionGraphicsSettingsProperty.builder()
   * .htmlMotionGraphicsSettings(HtmlMotionGraphicsSettingsProperty.builder().build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-motiongraphicssettings.html)
   */
  public interface MotionGraphicsSettingsProperty {
    /**
     * Settings to configure the motion graphics overlay to use an HTML asset.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-motiongraphicssettings.html#cfn-medialive-channel-motiongraphicssettings-htmlmotiongraphicssettings)
     */
    public fun htmlMotionGraphicsSettings(): Any? = unwrap(this).getHtmlMotionGraphicsSettings()

    /**
     * A builder for [MotionGraphicsSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param htmlMotionGraphicsSettings Settings to configure the motion graphics overlay to use
       * an HTML asset.
       */
      public fun htmlMotionGraphicsSettings(htmlMotionGraphicsSettings: IResolvable)

      /**
       * @param htmlMotionGraphicsSettings Settings to configure the motion graphics overlay to use
       * an HTML asset.
       */
      public
          fun htmlMotionGraphicsSettings(htmlMotionGraphicsSettings: HtmlMotionGraphicsSettingsProperty)

      /**
       * @param htmlMotionGraphicsSettings Settings to configure the motion graphics overlay to use
       * an HTML asset.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ea95aecca987c781dec9f8f8117be78dd45740fe58cdbdc9a5bee61973ea6ea5")
      public
          fun htmlMotionGraphicsSettings(htmlMotionGraphicsSettings: HtmlMotionGraphicsSettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.MotionGraphicsSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.MotionGraphicsSettingsProperty.builder()

      /**
       * @param htmlMotionGraphicsSettings Settings to configure the motion graphics overlay to use
       * an HTML asset.
       */
      override fun htmlMotionGraphicsSettings(htmlMotionGraphicsSettings: IResolvable) {
        cdkBuilder.htmlMotionGraphicsSettings(htmlMotionGraphicsSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param htmlMotionGraphicsSettings Settings to configure the motion graphics overlay to use
       * an HTML asset.
       */
      override
          fun htmlMotionGraphicsSettings(htmlMotionGraphicsSettings: HtmlMotionGraphicsSettingsProperty) {
        cdkBuilder.htmlMotionGraphicsSettings(htmlMotionGraphicsSettings.let(HtmlMotionGraphicsSettingsProperty.Companion::unwrap))
      }

      /**
       * @param htmlMotionGraphicsSettings Settings to configure the motion graphics overlay to use
       * an HTML asset.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ea95aecca987c781dec9f8f8117be78dd45740fe58cdbdc9a5bee61973ea6ea5")
      override
          fun htmlMotionGraphicsSettings(htmlMotionGraphicsSettings: HtmlMotionGraphicsSettingsProperty.Builder.() -> Unit):
          Unit =
          htmlMotionGraphicsSettings(HtmlMotionGraphicsSettingsProperty(htmlMotionGraphicsSettings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.MotionGraphicsSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.MotionGraphicsSettingsProperty,
    ) : CdkObject(cdkObject),
        MotionGraphicsSettingsProperty {
      /**
       * Settings to configure the motion graphics overlay to use an HTML asset.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-motiongraphicssettings.html#cfn-medialive-channel-motiongraphicssettings-htmlmotiongraphicssettings)
       */
      override fun htmlMotionGraphicsSettings(): Any? = unwrap(this).getHtmlMotionGraphicsSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): MotionGraphicsSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.MotionGraphicsSettingsProperty):
          MotionGraphicsSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          MotionGraphicsSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: MotionGraphicsSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.MotionGraphicsSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.MotionGraphicsSettingsProperty
    }
  }

  /**
   * The configuration for this MP2 audio.
   *
   * The parent of this entity is AudioCodecSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * Mp2SettingsProperty mp2SettingsProperty = Mp2SettingsProperty.builder()
   * .bitrate(123)
   * .codingMode("codingMode")
   * .sampleRate(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mp2settings.html)
   */
  public interface Mp2SettingsProperty {
    /**
     * The average bitrate in bits/second.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mp2settings.html#cfn-medialive-channel-mp2settings-bitrate)
     */
    public fun bitrate(): Number? = unwrap(this).getBitrate()

    /**
     * The MPEG2 Audio coding mode.
     *
     * Valid values are codingMode10 (for mono) or codingMode20 (for stereo).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mp2settings.html#cfn-medialive-channel-mp2settings-codingmode)
     */
    public fun codingMode(): String? = unwrap(this).getCodingMode()

    /**
     * The sample rate in Hz.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mp2settings.html#cfn-medialive-channel-mp2settings-samplerate)
     */
    public fun sampleRate(): Number? = unwrap(this).getSampleRate()

    /**
     * A builder for [Mp2SettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param bitrate The average bitrate in bits/second.
       */
      public fun bitrate(bitrate: Number)

      /**
       * @param codingMode The MPEG2 Audio coding mode.
       * Valid values are codingMode10 (for mono) or codingMode20 (for stereo).
       */
      public fun codingMode(codingMode: String)

      /**
       * @param sampleRate The sample rate in Hz.
       */
      public fun sampleRate(sampleRate: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.Mp2SettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.Mp2SettingsProperty.builder()

      /**
       * @param bitrate The average bitrate in bits/second.
       */
      override fun bitrate(bitrate: Number) {
        cdkBuilder.bitrate(bitrate)
      }

      /**
       * @param codingMode The MPEG2 Audio coding mode.
       * Valid values are codingMode10 (for mono) or codingMode20 (for stereo).
       */
      override fun codingMode(codingMode: String) {
        cdkBuilder.codingMode(codingMode)
      }

      /**
       * @param sampleRate The sample rate in Hz.
       */
      override fun sampleRate(sampleRate: Number) {
        cdkBuilder.sampleRate(sampleRate)
      }

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.Mp2SettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Mp2SettingsProperty,
    ) : CdkObject(cdkObject),
        Mp2SettingsProperty {
      /**
       * The average bitrate in bits/second.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mp2settings.html#cfn-medialive-channel-mp2settings-bitrate)
       */
      override fun bitrate(): Number? = unwrap(this).getBitrate()

      /**
       * The MPEG2 Audio coding mode.
       *
       * Valid values are codingMode10 (for mono) or codingMode20 (for stereo).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mp2settings.html#cfn-medialive-channel-mp2settings-codingmode)
       */
      override fun codingMode(): String? = unwrap(this).getCodingMode()

      /**
       * The sample rate in Hz.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mp2settings.html#cfn-medialive-channel-mp2settings-samplerate)
       */
      override fun sampleRate(): Number? = unwrap(this).getSampleRate()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): Mp2SettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Mp2SettingsProperty):
          Mp2SettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? Mp2SettingsProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: Mp2SettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.Mp2SettingsProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.Mp2SettingsProperty
    }
  }

  /**
   * Settings to configure video filters that apply to the MPEG-2 codec.
   *
   * The parent of this entity is Mpeg2FilterSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * Mpeg2FilterSettingsProperty mpeg2FilterSettingsProperty = Mpeg2FilterSettingsProperty.builder()
   * .temporalFilterSettings(TemporalFilterSettingsProperty.builder()
   * .postFilterSharpening("postFilterSharpening")
   * .strength("strength")
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2filtersettings.html)
   */
  public interface Mpeg2FilterSettingsProperty {
    /**
     * Settings for applying the temporal filter to the video.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2filtersettings.html#cfn-medialive-channel-mpeg2filtersettings-temporalfiltersettings)
     */
    public fun temporalFilterSettings(): Any? = unwrap(this).getTemporalFilterSettings()

    /**
     * A builder for [Mpeg2FilterSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param temporalFilterSettings Settings for applying the temporal filter to the video.
       */
      public fun temporalFilterSettings(temporalFilterSettings: IResolvable)

      /**
       * @param temporalFilterSettings Settings for applying the temporal filter to the video.
       */
      public fun temporalFilterSettings(temporalFilterSettings: TemporalFilterSettingsProperty)

      /**
       * @param temporalFilterSettings Settings for applying the temporal filter to the video.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("22bbefe6ccacc93679508e1706701d4c45494b961cf4045bcff947b9b3627b5a")
      public
          fun temporalFilterSettings(temporalFilterSettings: TemporalFilterSettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.Mpeg2FilterSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.Mpeg2FilterSettingsProperty.builder()

      /**
       * @param temporalFilterSettings Settings for applying the temporal filter to the video.
       */
      override fun temporalFilterSettings(temporalFilterSettings: IResolvable) {
        cdkBuilder.temporalFilterSettings(temporalFilterSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param temporalFilterSettings Settings for applying the temporal filter to the video.
       */
      override fun temporalFilterSettings(temporalFilterSettings: TemporalFilterSettingsProperty) {
        cdkBuilder.temporalFilterSettings(temporalFilterSettings.let(TemporalFilterSettingsProperty.Companion::unwrap))
      }

      /**
       * @param temporalFilterSettings Settings for applying the temporal filter to the video.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("22bbefe6ccacc93679508e1706701d4c45494b961cf4045bcff947b9b3627b5a")
      override
          fun temporalFilterSettings(temporalFilterSettings: TemporalFilterSettingsProperty.Builder.() -> Unit):
          Unit = temporalFilterSettings(TemporalFilterSettingsProperty(temporalFilterSettings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.Mpeg2FilterSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Mpeg2FilterSettingsProperty,
    ) : CdkObject(cdkObject),
        Mpeg2FilterSettingsProperty {
      /**
       * Settings for applying the temporal filter to the video.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2filtersettings.html#cfn-medialive-channel-mpeg2filtersettings-temporalfiltersettings)
       */
      override fun temporalFilterSettings(): Any? = unwrap(this).getTemporalFilterSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): Mpeg2FilterSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Mpeg2FilterSettingsProperty):
          Mpeg2FilterSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          Mpeg2FilterSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: Mpeg2FilterSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.Mpeg2FilterSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.Mpeg2FilterSettingsProperty
    }
  }

  /**
   * The settings for the MPEG-2 codec in the output.
   *
   * The parent of this entity is VideoCodecSetting.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * Mpeg2SettingsProperty mpeg2SettingsProperty = Mpeg2SettingsProperty.builder()
   * .adaptiveQuantization("adaptiveQuantization")
   * .afdSignaling("afdSignaling")
   * .colorMetadata("colorMetadata")
   * .colorSpace("colorSpace")
   * .displayAspectRatio("displayAspectRatio")
   * .filterSettings(Mpeg2FilterSettingsProperty.builder()
   * .temporalFilterSettings(TemporalFilterSettingsProperty.builder()
   * .postFilterSharpening("postFilterSharpening")
   * .strength("strength")
   * .build())
   * .build())
   * .fixedAfd("fixedAfd")
   * .framerateDenominator(123)
   * .framerateNumerator(123)
   * .gopClosedCadence(123)
   * .gopNumBFrames(123)
   * .gopSize(123)
   * .gopSizeUnits("gopSizeUnits")
   * .scanType("scanType")
   * .subgopLength("subgopLength")
   * .timecodeBurninSettings(TimecodeBurninSettingsProperty.builder()
   * .fontSize("fontSize")
   * .position("position")
   * .prefix("prefix")
   * .build())
   * .timecodeInsertion("timecodeInsertion")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html)
   */
  public interface Mpeg2SettingsProperty {
    /**
     * Choose Off to disable adaptive quantization.
     *
     * Or choose another value to enable the quantizer and set its strength. The strengths are:
     * Auto, Off, Low, Medium, High. When you enable this field, MediaLive allows intra-frame
     * quantizers to vary, which might improve visual quality.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-adaptivequantization)
     */
    public fun adaptiveQuantization(): String? = unwrap(this).getAdaptiveQuantization()

    /**
     * Indicates the AFD values that MediaLive will write into the video encode.
     *
     * If you do not know what AFD signaling is, or if your downstream system has not given you
     * guidance, choose AUTO.
     * AUTO: MediaLive will try to preserve the input AFD value (in cases where multiple AFD values
     * are valid).
     * FIXED: MediaLive will use the value you specify in fixedAFD.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-afdsignaling)
     */
    public fun afdSignaling(): String? = unwrap(this).getAfdSignaling()

    /**
     * Specifies whether to include the color space metadata.
     *
     * The metadata describes the color space that applies to the video (the colorSpace field). We
     * recommend that you insert the metadata.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-colormetadata)
     */
    public fun colorMetadata(): String? = unwrap(this).getColorMetadata()

    /**
     * Choose the type of color space conversion to apply to the output.
     *
     * For detailed information on setting up both the input and the output to obtain the desired
     * color space in the output, see the section on "MediaLive Features - Video - color space" in the
     * MediaLive User Guide.
     * PASSTHROUGH: Keep the color space of the input content - do not convert it.
     * AUTO:Convert all content that is SD to rec 601, and convert all content that is HD to rec
     * 709.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-colorspace)
     */
    public fun colorSpace(): String? = unwrap(this).getColorSpace()

    /**
     * Sets the pixel aspect ratio for the encode.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-displayaspectratio)
     */
    public fun displayAspectRatio(): String? = unwrap(this).getDisplayAspectRatio()

    /**
     * Optionally specify a noise reduction filter, which can improve quality of compressed content.
     *
     * If you do not choose a filter, no filter will be applied.
     * TEMPORAL: This filter is useful for both source content that is noisy (when it has excessive
     * digital artifacts) and source content that is clean.
     * When the content is noisy, the filter cleans up the source content before the encoding phase,
     * with these two effects: First, it improves the output video quality because the content has been
     * cleaned up. Secondly, it decreases the bandwidth because MediaLive does not waste bits on
     * encoding noise.
     * When the content is reasonably clean, the filter tends to decrease the bitrate.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-filtersettings)
     */
    public fun filterSettings(): Any? = unwrap(this).getFilterSettings()

    /**
     * Complete this field only when afdSignaling is set to FIXED.
     *
     * Enter the AFD value (4 bits) to write on all frames of the video encode.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-fixedafd)
     */
    public fun fixedAfd(): String? = unwrap(this).getFixedAfd()

    /**
     * description": "The framerate denominator.
     *
     * For example, 1001. The framerate is the numerator divided by the denominator. For example,
     * 24000 / 1001 = 23.976 FPS.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-frameratedenominator)
     */
    public fun framerateDenominator(): Number? = unwrap(this).getFramerateDenominator()

    /**
     * The framerate numerator.
     *
     * For example, 24000. The framerate is the numerator divided by the denominator. For example,
     * 24000 / 1001 = 23.976 FPS.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-frameratenumerator)
     */
    public fun framerateNumerator(): Number? = unwrap(this).getFramerateNumerator()

    /**
     * MPEG2: default is open GOP.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-gopclosedcadence)
     */
    public fun gopClosedCadence(): Number? = unwrap(this).getGopClosedCadence()

    /**
     * Relates to the GOP structure.
     *
     * The number of B-frames between reference frames. If you do not know what a B-frame is, use
     * the default.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-gopnumbframes)
     */
    public fun gopNumBFrames(): Number? = unwrap(this).getGopNumBFrames()

    /**
     * Relates to the GOP structure.
     *
     * The GOP size (keyframe interval) in the units specified in gopSizeUnits. If you do not know
     * what GOP is, use the default.
     * If gopSizeUnits is frames, then the gopSize must be an integer and must be greater than or
     * equal to 1.
     * If gopSizeUnits is seconds, the gopSize must be greater than 0, but does not need to be an
     * integer.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-gopsize)
     */
    public fun gopSize(): Number? = unwrap(this).getGopSize()

    /**
     * Relates to the GOP structure.
     *
     * Specifies whether the gopSize is specified in frames or seconds. If you do not plan to change
     * the default gopSize, leave the default. If you specify SECONDS, MediaLive will internally
     * convert the gop size to a frame count.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-gopsizeunits)
     */
    public fun gopSizeUnits(): String? = unwrap(this).getGopSizeUnits()

    /**
     * Set the scan type of the output to PROGRESSIVE or INTERLACED (top field first).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-scantype)
     */
    public fun scanType(): String? = unwrap(this).getScanType()

    /**
     * Relates to the GOP structure.
     *
     * If you do not know what GOP is, use the default.
     * FIXED: Set the number of B-frames in each sub-GOP to the value in gopNumBFrames.
     * DYNAMIC: Let MediaLive optimize the number of B-frames in each sub-GOP, to improve visual
     * quality.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-subgoplength)
     */
    public fun subgopLength(): String? = unwrap(this).getSubgopLength()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-timecodeburninsettings)
     */
    public fun timecodeBurninSettings(): Any? = unwrap(this).getTimecodeBurninSettings()

    /**
     * Determines how MediaLive inserts timecodes in the output video.
     *
     * For detailed information about setting up the input and the output for a timecode, see the
     * section on "MediaLive Features - Timecode configuration" in the MediaLive User Guide.
     * DISABLED: do not include timecodes.
     * GOP_TIMECODE: Include timecode metadata in the GOP header.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-timecodeinsertion)
     */
    public fun timecodeInsertion(): String? = unwrap(this).getTimecodeInsertion()

    /**
     * A builder for [Mpeg2SettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param adaptiveQuantization Choose Off to disable adaptive quantization.
       * Or choose another value to enable the quantizer and set its strength. The strengths are:
       * Auto, Off, Low, Medium, High. When you enable this field, MediaLive allows intra-frame
       * quantizers to vary, which might improve visual quality.
       */
      public fun adaptiveQuantization(adaptiveQuantization: String)

      /**
       * @param afdSignaling Indicates the AFD values that MediaLive will write into the video
       * encode.
       * If you do not know what AFD signaling is, or if your downstream system has not given you
       * guidance, choose AUTO.
       * AUTO: MediaLive will try to preserve the input AFD value (in cases where multiple AFD
       * values are valid).
       * FIXED: MediaLive will use the value you specify in fixedAFD.
       */
      public fun afdSignaling(afdSignaling: String)

      /**
       * @param colorMetadata Specifies whether to include the color space metadata.
       * The metadata describes the color space that applies to the video (the colorSpace field). We
       * recommend that you insert the metadata.
       */
      public fun colorMetadata(colorMetadata: String)

      /**
       * @param colorSpace Choose the type of color space conversion to apply to the output.
       * For detailed information on setting up both the input and the output to obtain the desired
       * color space in the output, see the section on "MediaLive Features - Video - color space" in
       * the MediaLive User Guide.
       * PASSTHROUGH: Keep the color space of the input content - do not convert it.
       * AUTO:Convert all content that is SD to rec 601, and convert all content that is HD to rec
       * 709.
       */
      public fun colorSpace(colorSpace: String)

      /**
       * @param displayAspectRatio Sets the pixel aspect ratio for the encode.
       */
      public fun displayAspectRatio(displayAspectRatio: String)

      /**
       * @param filterSettings Optionally specify a noise reduction filter, which can improve
       * quality of compressed content.
       * If you do not choose a filter, no filter will be applied.
       * TEMPORAL: This filter is useful for both source content that is noisy (when it has
       * excessive digital artifacts) and source content that is clean.
       * When the content is noisy, the filter cleans up the source content before the encoding
       * phase, with these two effects: First, it improves the output video quality because the content
       * has been cleaned up. Secondly, it decreases the bandwidth because MediaLive does not waste
       * bits on encoding noise.
       * When the content is reasonably clean, the filter tends to decrease the bitrate.
       */
      public fun filterSettings(filterSettings: IResolvable)

      /**
       * @param filterSettings Optionally specify a noise reduction filter, which can improve
       * quality of compressed content.
       * If you do not choose a filter, no filter will be applied.
       * TEMPORAL: This filter is useful for both source content that is noisy (when it has
       * excessive digital artifacts) and source content that is clean.
       * When the content is noisy, the filter cleans up the source content before the encoding
       * phase, with these two effects: First, it improves the output video quality because the content
       * has been cleaned up. Secondly, it decreases the bandwidth because MediaLive does not waste
       * bits on encoding noise.
       * When the content is reasonably clean, the filter tends to decrease the bitrate.
       */
      public fun filterSettings(filterSettings: Mpeg2FilterSettingsProperty)

      /**
       * @param filterSettings Optionally specify a noise reduction filter, which can improve
       * quality of compressed content.
       * If you do not choose a filter, no filter will be applied.
       * TEMPORAL: This filter is useful for both source content that is noisy (when it has
       * excessive digital artifacts) and source content that is clean.
       * When the content is noisy, the filter cleans up the source content before the encoding
       * phase, with these two effects: First, it improves the output video quality because the content
       * has been cleaned up. Secondly, it decreases the bandwidth because MediaLive does not waste
       * bits on encoding noise.
       * When the content is reasonably clean, the filter tends to decrease the bitrate.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("be564491ba4947997cb88f1d39cec65027058d4a110a733024c5643b65190a7e")
      public fun filterSettings(filterSettings: Mpeg2FilterSettingsProperty.Builder.() -> Unit)

      /**
       * @param fixedAfd Complete this field only when afdSignaling is set to FIXED.
       * Enter the AFD value (4 bits) to write on all frames of the video encode.
       */
      public fun fixedAfd(fixedAfd: String)

      /**
       * @param framerateDenominator description": "The framerate denominator.
       * For example, 1001. The framerate is the numerator divided by the denominator. For example,
       * 24000 / 1001 = 23.976 FPS.
       */
      public fun framerateDenominator(framerateDenominator: Number)

      /**
       * @param framerateNumerator The framerate numerator.
       * For example, 24000. The framerate is the numerator divided by the denominator. For example,
       * 24000 / 1001 = 23.976 FPS.
       */
      public fun framerateNumerator(framerateNumerator: Number)

      /**
       * @param gopClosedCadence MPEG2: default is open GOP.
       */
      public fun gopClosedCadence(gopClosedCadence: Number)

      /**
       * @param gopNumBFrames Relates to the GOP structure.
       * The number of B-frames between reference frames. If you do not know what a B-frame is, use
       * the default.
       */
      public fun gopNumBFrames(gopNumBFrames: Number)

      /**
       * @param gopSize Relates to the GOP structure.
       * The GOP size (keyframe interval) in the units specified in gopSizeUnits. If you do not know
       * what GOP is, use the default.
       * If gopSizeUnits is frames, then the gopSize must be an integer and must be greater than or
       * equal to 1.
       * If gopSizeUnits is seconds, the gopSize must be greater than 0, but does not need to be an
       * integer.
       */
      public fun gopSize(gopSize: Number)

      /**
       * @param gopSizeUnits Relates to the GOP structure.
       * Specifies whether the gopSize is specified in frames or seconds. If you do not plan to
       * change the default gopSize, leave the default. If you specify SECONDS, MediaLive will
       * internally convert the gop size to a frame count.
       */
      public fun gopSizeUnits(gopSizeUnits: String)

      /**
       * @param scanType Set the scan type of the output to PROGRESSIVE or INTERLACED (top field
       * first).
       */
      public fun scanType(scanType: String)

      /**
       * @param subgopLength Relates to the GOP structure.
       * If you do not know what GOP is, use the default.
       * FIXED: Set the number of B-frames in each sub-GOP to the value in gopNumBFrames.
       * DYNAMIC: Let MediaLive optimize the number of B-frames in each sub-GOP, to improve visual
       * quality.
       */
      public fun subgopLength(subgopLength: String)

      /**
       * @param timecodeBurninSettings the value to be set.
       */
      public fun timecodeBurninSettings(timecodeBurninSettings: IResolvable)

      /**
       * @param timecodeBurninSettings the value to be set.
       */
      public fun timecodeBurninSettings(timecodeBurninSettings: TimecodeBurninSettingsProperty)

      /**
       * @param timecodeBurninSettings the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("511ffd4fd65b23cf75c730359e970a2dc3f39b15bd3384c7f6d4964e48c1bf39")
      public
          fun timecodeBurninSettings(timecodeBurninSettings: TimecodeBurninSettingsProperty.Builder.() -> Unit)

      /**
       * @param timecodeInsertion Determines how MediaLive inserts timecodes in the output video.
       * For detailed information about setting up the input and the output for a timecode, see the
       * section on "MediaLive Features - Timecode configuration" in the MediaLive User Guide.
       * DISABLED: do not include timecodes.
       * GOP_TIMECODE: Include timecode metadata in the GOP header.
       */
      public fun timecodeInsertion(timecodeInsertion: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.Mpeg2SettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.Mpeg2SettingsProperty.builder()

      /**
       * @param adaptiveQuantization Choose Off to disable adaptive quantization.
       * Or choose another value to enable the quantizer and set its strength. The strengths are:
       * Auto, Off, Low, Medium, High. When you enable this field, MediaLive allows intra-frame
       * quantizers to vary, which might improve visual quality.
       */
      override fun adaptiveQuantization(adaptiveQuantization: String) {
        cdkBuilder.adaptiveQuantization(adaptiveQuantization)
      }

      /**
       * @param afdSignaling Indicates the AFD values that MediaLive will write into the video
       * encode.
       * If you do not know what AFD signaling is, or if your downstream system has not given you
       * guidance, choose AUTO.
       * AUTO: MediaLive will try to preserve the input AFD value (in cases where multiple AFD
       * values are valid).
       * FIXED: MediaLive will use the value you specify in fixedAFD.
       */
      override fun afdSignaling(afdSignaling: String) {
        cdkBuilder.afdSignaling(afdSignaling)
      }

      /**
       * @param colorMetadata Specifies whether to include the color space metadata.
       * The metadata describes the color space that applies to the video (the colorSpace field). We
       * recommend that you insert the metadata.
       */
      override fun colorMetadata(colorMetadata: String) {
        cdkBuilder.colorMetadata(colorMetadata)
      }

      /**
       * @param colorSpace Choose the type of color space conversion to apply to the output.
       * For detailed information on setting up both the input and the output to obtain the desired
       * color space in the output, see the section on "MediaLive Features - Video - color space" in
       * the MediaLive User Guide.
       * PASSTHROUGH: Keep the color space of the input content - do not convert it.
       * AUTO:Convert all content that is SD to rec 601, and convert all content that is HD to rec
       * 709.
       */
      override fun colorSpace(colorSpace: String) {
        cdkBuilder.colorSpace(colorSpace)
      }

      /**
       * @param displayAspectRatio Sets the pixel aspect ratio for the encode.
       */
      override fun displayAspectRatio(displayAspectRatio: String) {
        cdkBuilder.displayAspectRatio(displayAspectRatio)
      }

      /**
       * @param filterSettings Optionally specify a noise reduction filter, which can improve
       * quality of compressed content.
       * If you do not choose a filter, no filter will be applied.
       * TEMPORAL: This filter is useful for both source content that is noisy (when it has
       * excessive digital artifacts) and source content that is clean.
       * When the content is noisy, the filter cleans up the source content before the encoding
       * phase, with these two effects: First, it improves the output video quality because the content
       * has been cleaned up. Secondly, it decreases the bandwidth because MediaLive does not waste
       * bits on encoding noise.
       * When the content is reasonably clean, the filter tends to decrease the bitrate.
       */
      override fun filterSettings(filterSettings: IResolvable) {
        cdkBuilder.filterSettings(filterSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param filterSettings Optionally specify a noise reduction filter, which can improve
       * quality of compressed content.
       * If you do not choose a filter, no filter will be applied.
       * TEMPORAL: This filter is useful for both source content that is noisy (when it has
       * excessive digital artifacts) and source content that is clean.
       * When the content is noisy, the filter cleans up the source content before the encoding
       * phase, with these two effects: First, it improves the output video quality because the content
       * has been cleaned up. Secondly, it decreases the bandwidth because MediaLive does not waste
       * bits on encoding noise.
       * When the content is reasonably clean, the filter tends to decrease the bitrate.
       */
      override fun filterSettings(filterSettings: Mpeg2FilterSettingsProperty) {
        cdkBuilder.filterSettings(filterSettings.let(Mpeg2FilterSettingsProperty.Companion::unwrap))
      }

      /**
       * @param filterSettings Optionally specify a noise reduction filter, which can improve
       * quality of compressed content.
       * If you do not choose a filter, no filter will be applied.
       * TEMPORAL: This filter is useful for both source content that is noisy (when it has
       * excessive digital artifacts) and source content that is clean.
       * When the content is noisy, the filter cleans up the source content before the encoding
       * phase, with these two effects: First, it improves the output video quality because the content
       * has been cleaned up. Secondly, it decreases the bandwidth because MediaLive does not waste
       * bits on encoding noise.
       * When the content is reasonably clean, the filter tends to decrease the bitrate.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("be564491ba4947997cb88f1d39cec65027058d4a110a733024c5643b65190a7e")
      override fun filterSettings(filterSettings: Mpeg2FilterSettingsProperty.Builder.() -> Unit):
          Unit = filterSettings(Mpeg2FilterSettingsProperty(filterSettings))

      /**
       * @param fixedAfd Complete this field only when afdSignaling is set to FIXED.
       * Enter the AFD value (4 bits) to write on all frames of the video encode.
       */
      override fun fixedAfd(fixedAfd: String) {
        cdkBuilder.fixedAfd(fixedAfd)
      }

      /**
       * @param framerateDenominator description": "The framerate denominator.
       * For example, 1001. The framerate is the numerator divided by the denominator. For example,
       * 24000 / 1001 = 23.976 FPS.
       */
      override fun framerateDenominator(framerateDenominator: Number) {
        cdkBuilder.framerateDenominator(framerateDenominator)
      }

      /**
       * @param framerateNumerator The framerate numerator.
       * For example, 24000. The framerate is the numerator divided by the denominator. For example,
       * 24000 / 1001 = 23.976 FPS.
       */
      override fun framerateNumerator(framerateNumerator: Number) {
        cdkBuilder.framerateNumerator(framerateNumerator)
      }

      /**
       * @param gopClosedCadence MPEG2: default is open GOP.
       */
      override fun gopClosedCadence(gopClosedCadence: Number) {
        cdkBuilder.gopClosedCadence(gopClosedCadence)
      }

      /**
       * @param gopNumBFrames Relates to the GOP structure.
       * The number of B-frames between reference frames. If you do not know what a B-frame is, use
       * the default.
       */
      override fun gopNumBFrames(gopNumBFrames: Number) {
        cdkBuilder.gopNumBFrames(gopNumBFrames)
      }

      /**
       * @param gopSize Relates to the GOP structure.
       * The GOP size (keyframe interval) in the units specified in gopSizeUnits. If you do not know
       * what GOP is, use the default.
       * If gopSizeUnits is frames, then the gopSize must be an integer and must be greater than or
       * equal to 1.
       * If gopSizeUnits is seconds, the gopSize must be greater than 0, but does not need to be an
       * integer.
       */
      override fun gopSize(gopSize: Number) {
        cdkBuilder.gopSize(gopSize)
      }

      /**
       * @param gopSizeUnits Relates to the GOP structure.
       * Specifies whether the gopSize is specified in frames or seconds. If you do not plan to
       * change the default gopSize, leave the default. If you specify SECONDS, MediaLive will
       * internally convert the gop size to a frame count.
       */
      override fun gopSizeUnits(gopSizeUnits: String) {
        cdkBuilder.gopSizeUnits(gopSizeUnits)
      }

      /**
       * @param scanType Set the scan type of the output to PROGRESSIVE or INTERLACED (top field
       * first).
       */
      override fun scanType(scanType: String) {
        cdkBuilder.scanType(scanType)
      }

      /**
       * @param subgopLength Relates to the GOP structure.
       * If you do not know what GOP is, use the default.
       * FIXED: Set the number of B-frames in each sub-GOP to the value in gopNumBFrames.
       * DYNAMIC: Let MediaLive optimize the number of B-frames in each sub-GOP, to improve visual
       * quality.
       */
      override fun subgopLength(subgopLength: String) {
        cdkBuilder.subgopLength(subgopLength)
      }

      /**
       * @param timecodeBurninSettings the value to be set.
       */
      override fun timecodeBurninSettings(timecodeBurninSettings: IResolvable) {
        cdkBuilder.timecodeBurninSettings(timecodeBurninSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param timecodeBurninSettings the value to be set.
       */
      override fun timecodeBurninSettings(timecodeBurninSettings: TimecodeBurninSettingsProperty) {
        cdkBuilder.timecodeBurninSettings(timecodeBurninSettings.let(TimecodeBurninSettingsProperty.Companion::unwrap))
      }

      /**
       * @param timecodeBurninSettings the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("511ffd4fd65b23cf75c730359e970a2dc3f39b15bd3384c7f6d4964e48c1bf39")
      override
          fun timecodeBurninSettings(timecodeBurninSettings: TimecodeBurninSettingsProperty.Builder.() -> Unit):
          Unit = timecodeBurninSettings(TimecodeBurninSettingsProperty(timecodeBurninSettings))

      /**
       * @param timecodeInsertion Determines how MediaLive inserts timecodes in the output video.
       * For detailed information about setting up the input and the output for a timecode, see the
       * section on "MediaLive Features - Timecode configuration" in the MediaLive User Guide.
       * DISABLED: do not include timecodes.
       * GOP_TIMECODE: Include timecode metadata in the GOP header.
       */
      override fun timecodeInsertion(timecodeInsertion: String) {
        cdkBuilder.timecodeInsertion(timecodeInsertion)
      }

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.Mpeg2SettingsProperty
          = cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Mpeg2SettingsProperty,
    ) : CdkObject(cdkObject),
        Mpeg2SettingsProperty {
      /**
       * Choose Off to disable adaptive quantization.
       *
       * Or choose another value to enable the quantizer and set its strength. The strengths are:
       * Auto, Off, Low, Medium, High. When you enable this field, MediaLive allows intra-frame
       * quantizers to vary, which might improve visual quality.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-adaptivequantization)
       */
      override fun adaptiveQuantization(): String? = unwrap(this).getAdaptiveQuantization()

      /**
       * Indicates the AFD values that MediaLive will write into the video encode.
       *
       * If you do not know what AFD signaling is, or if your downstream system has not given you
       * guidance, choose AUTO.
       * AUTO: MediaLive will try to preserve the input AFD value (in cases where multiple AFD
       * values are valid).
       * FIXED: MediaLive will use the value you specify in fixedAFD.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-afdsignaling)
       */
      override fun afdSignaling(): String? = unwrap(this).getAfdSignaling()

      /**
       * Specifies whether to include the color space metadata.
       *
       * The metadata describes the color space that applies to the video (the colorSpace field). We
       * recommend that you insert the metadata.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-colormetadata)
       */
      override fun colorMetadata(): String? = unwrap(this).getColorMetadata()

      /**
       * Choose the type of color space conversion to apply to the output.
       *
       * For detailed information on setting up both the input and the output to obtain the desired
       * color space in the output, see the section on "MediaLive Features - Video - color space" in
       * the MediaLive User Guide.
       * PASSTHROUGH: Keep the color space of the input content - do not convert it.
       * AUTO:Convert all content that is SD to rec 601, and convert all content that is HD to rec
       * 709.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-colorspace)
       */
      override fun colorSpace(): String? = unwrap(this).getColorSpace()

      /**
       * Sets the pixel aspect ratio for the encode.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-displayaspectratio)
       */
      override fun displayAspectRatio(): String? = unwrap(this).getDisplayAspectRatio()

      /**
       * Optionally specify a noise reduction filter, which can improve quality of compressed
       * content.
       *
       * If you do not choose a filter, no filter will be applied.
       * TEMPORAL: This filter is useful for both source content that is noisy (when it has
       * excessive digital artifacts) and source content that is clean.
       * When the content is noisy, the filter cleans up the source content before the encoding
       * phase, with these two effects: First, it improves the output video quality because the content
       * has been cleaned up. Secondly, it decreases the bandwidth because MediaLive does not waste
       * bits on encoding noise.
       * When the content is reasonably clean, the filter tends to decrease the bitrate.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-filtersettings)
       */
      override fun filterSettings(): Any? = unwrap(this).getFilterSettings()

      /**
       * Complete this field only when afdSignaling is set to FIXED.
       *
       * Enter the AFD value (4 bits) to write on all frames of the video encode.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-fixedafd)
       */
      override fun fixedAfd(): String? = unwrap(this).getFixedAfd()

      /**
       * description": "The framerate denominator.
       *
       * For example, 1001. The framerate is the numerator divided by the denominator. For example,
       * 24000 / 1001 = 23.976 FPS.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-frameratedenominator)
       */
      override fun framerateDenominator(): Number? = unwrap(this).getFramerateDenominator()

      /**
       * The framerate numerator.
       *
       * For example, 24000. The framerate is the numerator divided by the denominator. For example,
       * 24000 / 1001 = 23.976 FPS.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-frameratenumerator)
       */
      override fun framerateNumerator(): Number? = unwrap(this).getFramerateNumerator()

      /**
       * MPEG2: default is open GOP.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-gopclosedcadence)
       */
      override fun gopClosedCadence(): Number? = unwrap(this).getGopClosedCadence()

      /**
       * Relates to the GOP structure.
       *
       * The number of B-frames between reference frames. If you do not know what a B-frame is, use
       * the default.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-gopnumbframes)
       */
      override fun gopNumBFrames(): Number? = unwrap(this).getGopNumBFrames()

      /**
       * Relates to the GOP structure.
       *
       * The GOP size (keyframe interval) in the units specified in gopSizeUnits. If you do not know
       * what GOP is, use the default.
       * If gopSizeUnits is frames, then the gopSize must be an integer and must be greater than or
       * equal to 1.
       * If gopSizeUnits is seconds, the gopSize must be greater than 0, but does not need to be an
       * integer.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-gopsize)
       */
      override fun gopSize(): Number? = unwrap(this).getGopSize()

      /**
       * Relates to the GOP structure.
       *
       * Specifies whether the gopSize is specified in frames or seconds. If you do not plan to
       * change the default gopSize, leave the default. If you specify SECONDS, MediaLive will
       * internally convert the gop size to a frame count.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-gopsizeunits)
       */
      override fun gopSizeUnits(): String? = unwrap(this).getGopSizeUnits()

      /**
       * Set the scan type of the output to PROGRESSIVE or INTERLACED (top field first).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-scantype)
       */
      override fun scanType(): String? = unwrap(this).getScanType()

      /**
       * Relates to the GOP structure.
       *
       * If you do not know what GOP is, use the default.
       * FIXED: Set the number of B-frames in each sub-GOP to the value in gopNumBFrames.
       * DYNAMIC: Let MediaLive optimize the number of B-frames in each sub-GOP, to improve visual
       * quality.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-subgoplength)
       */
      override fun subgopLength(): String? = unwrap(this).getSubgopLength()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-timecodeburninsettings)
       */
      override fun timecodeBurninSettings(): Any? = unwrap(this).getTimecodeBurninSettings()

      /**
       * Determines how MediaLive inserts timecodes in the output video.
       *
       * For detailed information about setting up the input and the output for a timecode, see the
       * section on "MediaLive Features - Timecode configuration" in the MediaLive User Guide.
       * DISABLED: do not include timecodes.
       * GOP_TIMECODE: Include timecode metadata in the GOP header.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-timecodeinsertion)
       */
      override fun timecodeInsertion(): String? = unwrap(this).getTimecodeInsertion()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): Mpeg2SettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Mpeg2SettingsProperty):
          Mpeg2SettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? Mpeg2SettingsProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: Mpeg2SettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.Mpeg2SettingsProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.Mpeg2SettingsProperty
    }
  }

  /**
   * The settings for a Microsoft Smooth output group.
   *
   * The parent of this entity is OutputGroupSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * MsSmoothGroupSettingsProperty msSmoothGroupSettingsProperty =
   * MsSmoothGroupSettingsProperty.builder()
   * .acquisitionPointId("acquisitionPointId")
   * .audioOnlyTimecodeControl("audioOnlyTimecodeControl")
   * .certificateMode("certificateMode")
   * .connectionRetryInterval(123)
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .eventId("eventId")
   * .eventIdMode("eventIdMode")
   * .eventStopBehavior("eventStopBehavior")
   * .filecacheDuration(123)
   * .fragmentLength(123)
   * .inputLossAction("inputLossAction")
   * .numRetries(123)
   * .restartDelay(123)
   * .segmentationMode("segmentationMode")
   * .sendDelayMs(123)
   * .sparseTrackType("sparseTrackType")
   * .streamManifestBehavior("streamManifestBehavior")
   * .timestampOffset("timestampOffset")
   * .timestampOffsetMode("timestampOffsetMode")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html)
   */
  public interface MsSmoothGroupSettingsProperty {
    /**
     * The value of the Acquisition Point Identity element that is used in each message placed in
     * the sparse track.
     *
     * Enabled only if sparseTrackType is not "none."
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-acquisitionpointid)
     */
    public fun acquisitionPointId(): String? = unwrap(this).getAcquisitionPointId()

    /**
     * If set to passthrough for an audio-only Microsoft Smooth output, the fragment absolute time
     * is set to the current timecode.
     *
     * This option does not write timecodes to the audio elementary stream.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-audioonlytimecodecontrol)
     */
    public fun audioOnlyTimecodeControl(): String? = unwrap(this).getAudioOnlyTimecodeControl()

    /**
     * If set to verifyAuthenticity, verifies the HTTPS certificate chain to a trusted certificate
     * authority (CA).
     *
     * This causes HTTPS outputs to self-signed certificates to fail.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-certificatemode)
     */
    public fun certificateMode(): String? = unwrap(this).getCertificateMode()

    /**
     * The number of seconds to wait before retrying the connection to the IIS server if the
     * connection is lost.
     *
     * Content is cached during this time, and the cache is delivered to the IIS server after the
     * connection is re-established.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-connectionretryinterval)
     */
    public fun connectionRetryInterval(): Number? = unwrap(this).getConnectionRetryInterval()

    /**
     * The Smooth Streaming publish point on an IIS server.
     *
     * MediaLive acts as a "Push" encoder to IIS.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-destination)
     */
    public fun destination(): Any? = unwrap(this).getDestination()

    /**
     * The Microsoft Smooth channel ID that is sent to the IIS server.
     *
     * Specify the ID only if eventIdMode is set to useConfigured.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-eventid)
     */
    public fun eventId(): String? = unwrap(this).getEventId()

    /**
     * Specifies whether to send a channel ID to the IIS server.
     *
     * If no channel ID is sent and the same channel is used without changing the publishing point,
     * clients might see cached video from the previous run. Options: - "useConfigured" - use the value
     * provided in eventId - "useTimestamp" - generate and send a channel ID based on the current
     * timestamp - "noEventId" - do not send a channel ID to the IIS server.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-eventidmode)
     */
    public fun eventIdMode(): String? = unwrap(this).getEventIdMode()

    /**
     * When set to sendEos, sends an EOS signal to an IIS server when stopping the channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-eventstopbehavior)
     */
    public fun eventStopBehavior(): String? = unwrap(this).getEventStopBehavior()

    /**
     * The size, in seconds, of the file cache for streaming outputs.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-filecacheduration)
     */
    public fun filecacheDuration(): Number? = unwrap(this).getFilecacheDuration()

    /**
     * The length, in seconds, of mp4 fragments to generate.
     *
     * The fragment length must be compatible with GOP size and frame rate.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-fragmentlength)
     */
    public fun fragmentLength(): Number? = unwrap(this).getFragmentLength()

    /**
     * A parameter that controls output group behavior on an input loss.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-inputlossaction)
     */
    public fun inputLossAction(): String? = unwrap(this).getInputLossAction()

    /**
     * The number of retry attempts.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-numretries)
     */
    public fun numRetries(): Number? = unwrap(this).getNumRetries()

    /**
     * The number of seconds before initiating a restart due to output failure, due to exhausting
     * the numRetries on one segment, or exceeding filecacheDuration.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-restartdelay)
     */
    public fun restartDelay(): Number? = unwrap(this).getRestartDelay()

    /**
     * useInputSegmentation has been deprecated.
     *
     * The configured segment size is always used.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-segmentationmode)
     */
    public fun segmentationMode(): String? = unwrap(this).getSegmentationMode()

    /**
     * The number of milliseconds to delay the output from the second pipeline.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-senddelayms)
     */
    public fun sendDelayMs(): Number? = unwrap(this).getSendDelayMs()

    /**
     * If set to scte35, uses incoming SCTE-35 messages to generate a sparse track in this group of
     * Microsoft Smooth outputs.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-sparsetracktype)
     */
    public fun sparseTrackType(): String? = unwrap(this).getSparseTrackType()

    /**
     * When set to send, sends a stream manifest so that the publishing point doesn't start until
     * all streams start.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-streammanifestbehavior)
     */
    public fun streamManifestBehavior(): String? = unwrap(this).getStreamManifestBehavior()

    /**
     * The timestamp offset for the channel.
     *
     * Used only if timestampOffsetMode is set to useConfiguredOffset.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-timestampoffset)
     */
    public fun timestampOffset(): String? = unwrap(this).getTimestampOffset()

    /**
     * The type of timestamp date offset to use.
     *
     * * useEventStartDate: Use the date the channel was started as the offset -
     * useConfiguredOffset: Use an explicitly configured date as the offset.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-timestampoffsetmode)
     */
    public fun timestampOffsetMode(): String? = unwrap(this).getTimestampOffsetMode()

    /**
     * A builder for [MsSmoothGroupSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param acquisitionPointId The value of the Acquisition Point Identity element that is used
       * in each message placed in the sparse track.
       * Enabled only if sparseTrackType is not "none."
       */
      public fun acquisitionPointId(acquisitionPointId: String)

      /**
       * @param audioOnlyTimecodeControl If set to passthrough for an audio-only Microsoft Smooth
       * output, the fragment absolute time is set to the current timecode.
       * This option does not write timecodes to the audio elementary stream.
       */
      public fun audioOnlyTimecodeControl(audioOnlyTimecodeControl: String)

      /**
       * @param certificateMode If set to verifyAuthenticity, verifies the HTTPS certificate chain
       * to a trusted certificate authority (CA).
       * This causes HTTPS outputs to self-signed certificates to fail.
       */
      public fun certificateMode(certificateMode: String)

      /**
       * @param connectionRetryInterval The number of seconds to wait before retrying the connection
       * to the IIS server if the connection is lost.
       * Content is cached during this time, and the cache is delivered to the IIS server after the
       * connection is re-established.
       */
      public fun connectionRetryInterval(connectionRetryInterval: Number)

      /**
       * @param destination The Smooth Streaming publish point on an IIS server.
       * MediaLive acts as a "Push" encoder to IIS.
       */
      public fun destination(destination: IResolvable)

      /**
       * @param destination The Smooth Streaming publish point on an IIS server.
       * MediaLive acts as a "Push" encoder to IIS.
       */
      public fun destination(destination: OutputLocationRefProperty)

      /**
       * @param destination The Smooth Streaming publish point on an IIS server.
       * MediaLive acts as a "Push" encoder to IIS.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("28b16325180464eefcd18721c4acfc6129074ad981f963ed0c25ae5c16c7305e")
      public fun destination(destination: OutputLocationRefProperty.Builder.() -> Unit)

      /**
       * @param eventId The Microsoft Smooth channel ID that is sent to the IIS server.
       * Specify the ID only if eventIdMode is set to useConfigured.
       */
      public fun eventId(eventId: String)

      /**
       * @param eventIdMode Specifies whether to send a channel ID to the IIS server.
       * If no channel ID is sent and the same channel is used without changing the publishing
       * point, clients might see cached video from the previous run. Options: - "useConfigured" - use
       * the value provided in eventId - "useTimestamp" - generate and send a channel ID based on the
       * current timestamp - "noEventId" - do not send a channel ID to the IIS server.
       */
      public fun eventIdMode(eventIdMode: String)

      /**
       * @param eventStopBehavior When set to sendEos, sends an EOS signal to an IIS server when
       * stopping the channel.
       */
      public fun eventStopBehavior(eventStopBehavior: String)

      /**
       * @param filecacheDuration The size, in seconds, of the file cache for streaming outputs.
       */
      public fun filecacheDuration(filecacheDuration: Number)

      /**
       * @param fragmentLength The length, in seconds, of mp4 fragments to generate.
       * The fragment length must be compatible with GOP size and frame rate.
       */
      public fun fragmentLength(fragmentLength: Number)

      /**
       * @param inputLossAction A parameter that controls output group behavior on an input loss.
       */
      public fun inputLossAction(inputLossAction: String)

      /**
       * @param numRetries The number of retry attempts.
       */
      public fun numRetries(numRetries: Number)

      /**
       * @param restartDelay The number of seconds before initiating a restart due to output
       * failure, due to exhausting the numRetries on one segment, or exceeding filecacheDuration.
       */
      public fun restartDelay(restartDelay: Number)

      /**
       * @param segmentationMode useInputSegmentation has been deprecated.
       * The configured segment size is always used.
       */
      public fun segmentationMode(segmentationMode: String)

      /**
       * @param sendDelayMs The number of milliseconds to delay the output from the second pipeline.
       */
      public fun sendDelayMs(sendDelayMs: Number)

      /**
       * @param sparseTrackType If set to scte35, uses incoming SCTE-35 messages to generate a
       * sparse track in this group of Microsoft Smooth outputs.
       */
      public fun sparseTrackType(sparseTrackType: String)

      /**
       * @param streamManifestBehavior When set to send, sends a stream manifest so that the
       * publishing point doesn't start until all streams start.
       */
      public fun streamManifestBehavior(streamManifestBehavior: String)

      /**
       * @param timestampOffset The timestamp offset for the channel.
       * Used only if timestampOffsetMode is set to useConfiguredOffset.
       */
      public fun timestampOffset(timestampOffset: String)

      /**
       * @param timestampOffsetMode The type of timestamp date offset to use.
       * * useEventStartDate: Use the date the channel was started as the offset -
       * useConfiguredOffset: Use an explicitly configured date as the offset.
       */
      public fun timestampOffsetMode(timestampOffsetMode: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.MsSmoothGroupSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.MsSmoothGroupSettingsProperty.builder()

      /**
       * @param acquisitionPointId The value of the Acquisition Point Identity element that is used
       * in each message placed in the sparse track.
       * Enabled only if sparseTrackType is not "none."
       */
      override fun acquisitionPointId(acquisitionPointId: String) {
        cdkBuilder.acquisitionPointId(acquisitionPointId)
      }

      /**
       * @param audioOnlyTimecodeControl If set to passthrough for an audio-only Microsoft Smooth
       * output, the fragment absolute time is set to the current timecode.
       * This option does not write timecodes to the audio elementary stream.
       */
      override fun audioOnlyTimecodeControl(audioOnlyTimecodeControl: String) {
        cdkBuilder.audioOnlyTimecodeControl(audioOnlyTimecodeControl)
      }

      /**
       * @param certificateMode If set to verifyAuthenticity, verifies the HTTPS certificate chain
       * to a trusted certificate authority (CA).
       * This causes HTTPS outputs to self-signed certificates to fail.
       */
      override fun certificateMode(certificateMode: String) {
        cdkBuilder.certificateMode(certificateMode)
      }

      /**
       * @param connectionRetryInterval The number of seconds to wait before retrying the connection
       * to the IIS server if the connection is lost.
       * Content is cached during this time, and the cache is delivered to the IIS server after the
       * connection is re-established.
       */
      override fun connectionRetryInterval(connectionRetryInterval: Number) {
        cdkBuilder.connectionRetryInterval(connectionRetryInterval)
      }

      /**
       * @param destination The Smooth Streaming publish point on an IIS server.
       * MediaLive acts as a "Push" encoder to IIS.
       */
      override fun destination(destination: IResolvable) {
        cdkBuilder.destination(destination.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param destination The Smooth Streaming publish point on an IIS server.
       * MediaLive acts as a "Push" encoder to IIS.
       */
      override fun destination(destination: OutputLocationRefProperty) {
        cdkBuilder.destination(destination.let(OutputLocationRefProperty.Companion::unwrap))
      }

      /**
       * @param destination The Smooth Streaming publish point on an IIS server.
       * MediaLive acts as a "Push" encoder to IIS.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("28b16325180464eefcd18721c4acfc6129074ad981f963ed0c25ae5c16c7305e")
      override fun destination(destination: OutputLocationRefProperty.Builder.() -> Unit): Unit =
          destination(OutputLocationRefProperty(destination))

      /**
       * @param eventId The Microsoft Smooth channel ID that is sent to the IIS server.
       * Specify the ID only if eventIdMode is set to useConfigured.
       */
      override fun eventId(eventId: String) {
        cdkBuilder.eventId(eventId)
      }

      /**
       * @param eventIdMode Specifies whether to send a channel ID to the IIS server.
       * If no channel ID is sent and the same channel is used without changing the publishing
       * point, clients might see cached video from the previous run. Options: - "useConfigured" - use
       * the value provided in eventId - "useTimestamp" - generate and send a channel ID based on the
       * current timestamp - "noEventId" - do not send a channel ID to the IIS server.
       */
      override fun eventIdMode(eventIdMode: String) {
        cdkBuilder.eventIdMode(eventIdMode)
      }

      /**
       * @param eventStopBehavior When set to sendEos, sends an EOS signal to an IIS server when
       * stopping the channel.
       */
      override fun eventStopBehavior(eventStopBehavior: String) {
        cdkBuilder.eventStopBehavior(eventStopBehavior)
      }

      /**
       * @param filecacheDuration The size, in seconds, of the file cache for streaming outputs.
       */
      override fun filecacheDuration(filecacheDuration: Number) {
        cdkBuilder.filecacheDuration(filecacheDuration)
      }

      /**
       * @param fragmentLength The length, in seconds, of mp4 fragments to generate.
       * The fragment length must be compatible with GOP size and frame rate.
       */
      override fun fragmentLength(fragmentLength: Number) {
        cdkBuilder.fragmentLength(fragmentLength)
      }

      /**
       * @param inputLossAction A parameter that controls output group behavior on an input loss.
       */
      override fun inputLossAction(inputLossAction: String) {
        cdkBuilder.inputLossAction(inputLossAction)
      }

      /**
       * @param numRetries The number of retry attempts.
       */
      override fun numRetries(numRetries: Number) {
        cdkBuilder.numRetries(numRetries)
      }

      /**
       * @param restartDelay The number of seconds before initiating a restart due to output
       * failure, due to exhausting the numRetries on one segment, or exceeding filecacheDuration.
       */
      override fun restartDelay(restartDelay: Number) {
        cdkBuilder.restartDelay(restartDelay)
      }

      /**
       * @param segmentationMode useInputSegmentation has been deprecated.
       * The configured segment size is always used.
       */
      override fun segmentationMode(segmentationMode: String) {
        cdkBuilder.segmentationMode(segmentationMode)
      }

      /**
       * @param sendDelayMs The number of milliseconds to delay the output from the second pipeline.
       */
      override fun sendDelayMs(sendDelayMs: Number) {
        cdkBuilder.sendDelayMs(sendDelayMs)
      }

      /**
       * @param sparseTrackType If set to scte35, uses incoming SCTE-35 messages to generate a
       * sparse track in this group of Microsoft Smooth outputs.
       */
      override fun sparseTrackType(sparseTrackType: String) {
        cdkBuilder.sparseTrackType(sparseTrackType)
      }

      /**
       * @param streamManifestBehavior When set to send, sends a stream manifest so that the
       * publishing point doesn't start until all streams start.
       */
      override fun streamManifestBehavior(streamManifestBehavior: String) {
        cdkBuilder.streamManifestBehavior(streamManifestBehavior)
      }

      /**
       * @param timestampOffset The timestamp offset for the channel.
       * Used only if timestampOffsetMode is set to useConfiguredOffset.
       */
      override fun timestampOffset(timestampOffset: String) {
        cdkBuilder.timestampOffset(timestampOffset)
      }

      /**
       * @param timestampOffsetMode The type of timestamp date offset to use.
       * * useEventStartDate: Use the date the channel was started as the offset -
       * useConfiguredOffset: Use an explicitly configured date as the offset.
       */
      override fun timestampOffsetMode(timestampOffsetMode: String) {
        cdkBuilder.timestampOffsetMode(timestampOffsetMode)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.MsSmoothGroupSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.MsSmoothGroupSettingsProperty,
    ) : CdkObject(cdkObject),
        MsSmoothGroupSettingsProperty {
      /**
       * The value of the Acquisition Point Identity element that is used in each message placed in
       * the sparse track.
       *
       * Enabled only if sparseTrackType is not "none."
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-acquisitionpointid)
       */
      override fun acquisitionPointId(): String? = unwrap(this).getAcquisitionPointId()

      /**
       * If set to passthrough for an audio-only Microsoft Smooth output, the fragment absolute time
       * is set to the current timecode.
       *
       * This option does not write timecodes to the audio elementary stream.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-audioonlytimecodecontrol)
       */
      override fun audioOnlyTimecodeControl(): String? = unwrap(this).getAudioOnlyTimecodeControl()

      /**
       * If set to verifyAuthenticity, verifies the HTTPS certificate chain to a trusted certificate
       * authority (CA).
       *
       * This causes HTTPS outputs to self-signed certificates to fail.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-certificatemode)
       */
      override fun certificateMode(): String? = unwrap(this).getCertificateMode()

      /**
       * The number of seconds to wait before retrying the connection to the IIS server if the
       * connection is lost.
       *
       * Content is cached during this time, and the cache is delivered to the IIS server after the
       * connection is re-established.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-connectionretryinterval)
       */
      override fun connectionRetryInterval(): Number? = unwrap(this).getConnectionRetryInterval()

      /**
       * The Smooth Streaming publish point on an IIS server.
       *
       * MediaLive acts as a "Push" encoder to IIS.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-destination)
       */
      override fun destination(): Any? = unwrap(this).getDestination()

      /**
       * The Microsoft Smooth channel ID that is sent to the IIS server.
       *
       * Specify the ID only if eventIdMode is set to useConfigured.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-eventid)
       */
      override fun eventId(): String? = unwrap(this).getEventId()

      /**
       * Specifies whether to send a channel ID to the IIS server.
       *
       * If no channel ID is sent and the same channel is used without changing the publishing
       * point, clients might see cached video from the previous run. Options: - "useConfigured" - use
       * the value provided in eventId - "useTimestamp" - generate and send a channel ID based on the
       * current timestamp - "noEventId" - do not send a channel ID to the IIS server.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-eventidmode)
       */
      override fun eventIdMode(): String? = unwrap(this).getEventIdMode()

      /**
       * When set to sendEos, sends an EOS signal to an IIS server when stopping the channel.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-eventstopbehavior)
       */
      override fun eventStopBehavior(): String? = unwrap(this).getEventStopBehavior()

      /**
       * The size, in seconds, of the file cache for streaming outputs.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-filecacheduration)
       */
      override fun filecacheDuration(): Number? = unwrap(this).getFilecacheDuration()

      /**
       * The length, in seconds, of mp4 fragments to generate.
       *
       * The fragment length must be compatible with GOP size and frame rate.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-fragmentlength)
       */
      override fun fragmentLength(): Number? = unwrap(this).getFragmentLength()

      /**
       * A parameter that controls output group behavior on an input loss.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-inputlossaction)
       */
      override fun inputLossAction(): String? = unwrap(this).getInputLossAction()

      /**
       * The number of retry attempts.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-numretries)
       */
      override fun numRetries(): Number? = unwrap(this).getNumRetries()

      /**
       * The number of seconds before initiating a restart due to output failure, due to exhausting
       * the numRetries on one segment, or exceeding filecacheDuration.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-restartdelay)
       */
      override fun restartDelay(): Number? = unwrap(this).getRestartDelay()

      /**
       * useInputSegmentation has been deprecated.
       *
       * The configured segment size is always used.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-segmentationmode)
       */
      override fun segmentationMode(): String? = unwrap(this).getSegmentationMode()

      /**
       * The number of milliseconds to delay the output from the second pipeline.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-senddelayms)
       */
      override fun sendDelayMs(): Number? = unwrap(this).getSendDelayMs()

      /**
       * If set to scte35, uses incoming SCTE-35 messages to generate a sparse track in this group
       * of Microsoft Smooth outputs.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-sparsetracktype)
       */
      override fun sparseTrackType(): String? = unwrap(this).getSparseTrackType()

      /**
       * When set to send, sends a stream manifest so that the publishing point doesn't start until
       * all streams start.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-streammanifestbehavior)
       */
      override fun streamManifestBehavior(): String? = unwrap(this).getStreamManifestBehavior()

      /**
       * The timestamp offset for the channel.
       *
       * Used only if timestampOffsetMode is set to useConfiguredOffset.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-timestampoffset)
       */
      override fun timestampOffset(): String? = unwrap(this).getTimestampOffset()

      /**
       * The type of timestamp date offset to use.
       *
       * * useEventStartDate: Use the date the channel was started as the offset -
       * useConfiguredOffset: Use an explicitly configured date as the offset.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-timestampoffsetmode)
       */
      override fun timestampOffsetMode(): String? = unwrap(this).getTimestampOffsetMode()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): MsSmoothGroupSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.MsSmoothGroupSettingsProperty):
          MsSmoothGroupSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          MsSmoothGroupSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: MsSmoothGroupSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.MsSmoothGroupSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.MsSmoothGroupSettingsProperty
    }
  }

  /**
   * Configuration of a Microsoft Smooth output.
   *
   * The parent of this entity is OutputSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * MsSmoothOutputSettingsProperty msSmoothOutputSettingsProperty =
   * MsSmoothOutputSettingsProperty.builder()
   * .h265PackagingType("h265PackagingType")
   * .nameModifier("nameModifier")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothoutputsettings.html)
   */
  public interface MsSmoothOutputSettingsProperty {
    /**
     * Only applicable when this output is referencing an H.265 video description. Specifies whether
     * MP4 segments should be packaged as HEV1 or HVC1.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothoutputsettings.html#cfn-medialive-channel-mssmoothoutputsettings-h265packagingtype)
     */
    public fun h265PackagingType(): String? = unwrap(this).getH265PackagingType()

    /**
     * A string that is concatenated to the end of the destination file name.
     *
     * This is required for multiple outputs of the same type.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothoutputsettings.html#cfn-medialive-channel-mssmoothoutputsettings-namemodifier)
     */
    public fun nameModifier(): String? = unwrap(this).getNameModifier()

    /**
     * A builder for [MsSmoothOutputSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param h265PackagingType Only applicable when this output is referencing an H.265 video
       * description. Specifies whether MP4 segments should be packaged as HEV1 or HVC1.
       */
      public fun h265PackagingType(h265PackagingType: String)

      /**
       * @param nameModifier A string that is concatenated to the end of the destination file name.
       * This is required for multiple outputs of the same type.
       */
      public fun nameModifier(nameModifier: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.MsSmoothOutputSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.MsSmoothOutputSettingsProperty.builder()

      /**
       * @param h265PackagingType Only applicable when this output is referencing an H.265 video
       * description. Specifies whether MP4 segments should be packaged as HEV1 or HVC1.
       */
      override fun h265PackagingType(h265PackagingType: String) {
        cdkBuilder.h265PackagingType(h265PackagingType)
      }

      /**
       * @param nameModifier A string that is concatenated to the end of the destination file name.
       * This is required for multiple outputs of the same type.
       */
      override fun nameModifier(nameModifier: String) {
        cdkBuilder.nameModifier(nameModifier)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.MsSmoothOutputSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.MsSmoothOutputSettingsProperty,
    ) : CdkObject(cdkObject),
        MsSmoothOutputSettingsProperty {
      /**
       * Only applicable when this output is referencing an H.265 video description. Specifies
       * whether MP4 segments should be packaged as HEV1 or HVC1.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothoutputsettings.html#cfn-medialive-channel-mssmoothoutputsettings-h265packagingtype)
       */
      override fun h265PackagingType(): String? = unwrap(this).getH265PackagingType()

      /**
       * A string that is concatenated to the end of the destination file name.
       *
       * This is required for multiple outputs of the same type.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothoutputsettings.html#cfn-medialive-channel-mssmoothoutputsettings-namemodifier)
       */
      override fun nameModifier(): String? = unwrap(this).getNameModifier()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): MsSmoothOutputSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.MsSmoothOutputSettingsProperty):
          MsSmoothOutputSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          MsSmoothOutputSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: MsSmoothOutputSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.MsSmoothOutputSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.MsSmoothOutputSettingsProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * MultiplexGroupSettingsProperty multiplexGroupSettingsProperty =
   * MultiplexGroupSettingsProperty.builder().build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-multiplexgroupsettings.html)
   */
  public interface MultiplexGroupSettingsProperty {
    /**
     * A builder for [MultiplexGroupSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.MultiplexGroupSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.MultiplexGroupSettingsProperty.builder()

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.MultiplexGroupSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.MultiplexGroupSettingsProperty,
    ) : CdkObject(cdkObject),
        MultiplexGroupSettingsProperty

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): MultiplexGroupSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.MultiplexGroupSettingsProperty):
          MultiplexGroupSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          MultiplexGroupSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: MultiplexGroupSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.MultiplexGroupSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.MultiplexGroupSettingsProperty
    }
  }

  /**
   * Configuration of a Multiplex output.
   *
   * The parent of this entity is OutputSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * MultiplexOutputSettingsProperty multiplexOutputSettingsProperty =
   * MultiplexOutputSettingsProperty.builder()
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-multiplexoutputsettings.html)
   */
  public interface MultiplexOutputSettingsProperty {
    /**
     * Destination is a Multiplex.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-multiplexoutputsettings.html#cfn-medialive-channel-multiplexoutputsettings-destination)
     */
    public fun destination(): Any? = unwrap(this).getDestination()

    /**
     * A builder for [MultiplexOutputSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param destination Destination is a Multiplex.
       */
      public fun destination(destination: IResolvable)

      /**
       * @param destination Destination is a Multiplex.
       */
      public fun destination(destination: OutputLocationRefProperty)

      /**
       * @param destination Destination is a Multiplex.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("d9a769fabdcb8bbc2fbfed33b9c962ee1fe84bb6e7196dae0feee82db66870f2")
      public fun destination(destination: OutputLocationRefProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.MultiplexOutputSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.MultiplexOutputSettingsProperty.builder()

      /**
       * @param destination Destination is a Multiplex.
       */
      override fun destination(destination: IResolvable) {
        cdkBuilder.destination(destination.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param destination Destination is a Multiplex.
       */
      override fun destination(destination: OutputLocationRefProperty) {
        cdkBuilder.destination(destination.let(OutputLocationRefProperty.Companion::unwrap))
      }

      /**
       * @param destination Destination is a Multiplex.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("d9a769fabdcb8bbc2fbfed33b9c962ee1fe84bb6e7196dae0feee82db66870f2")
      override fun destination(destination: OutputLocationRefProperty.Builder.() -> Unit): Unit =
          destination(OutputLocationRefProperty(destination))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.MultiplexOutputSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.MultiplexOutputSettingsProperty,
    ) : CdkObject(cdkObject),
        MultiplexOutputSettingsProperty {
      /**
       * Destination is a Multiplex.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-multiplexoutputsettings.html#cfn-medialive-channel-multiplexoutputsettings-destination)
       */
      override fun destination(): Any? = unwrap(this).getDestination()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): MultiplexOutputSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.MultiplexOutputSettingsProperty):
          MultiplexOutputSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          MultiplexOutputSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: MultiplexOutputSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.MultiplexOutputSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.MultiplexOutputSettingsProperty
    }
  }

  /**
   * Destination settings for a Multiplex output.
   *
   * The parent of this entity is OutputDestination.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * MultiplexProgramChannelDestinationSettingsProperty
   * multiplexProgramChannelDestinationSettingsProperty =
   * MultiplexProgramChannelDestinationSettingsProperty.builder()
   * .multiplexId("multiplexId")
   * .programName("programName")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-multiplexprogramchanneldestinationsettings.html)
   */
  public interface MultiplexProgramChannelDestinationSettingsProperty {
    /**
     * The ID of the Multiplex that the encoder is providing output to.
     *
     * You do not need to specify the individual inputs to the Multiplex; MediaLive will handle the
     * connection of the two MediaLive pipelines to the two Multiplex instances.
     * The Multiplex must be in the same region as the Channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-multiplexprogramchanneldestinationsettings.html#cfn-medialive-channel-multiplexprogramchanneldestinationsettings-multiplexid)
     */
    public fun multiplexId(): String? = unwrap(this).getMultiplexId()

    /**
     * The program name of the Multiplex program that the encoder is providing output to.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-multiplexprogramchanneldestinationsettings.html#cfn-medialive-channel-multiplexprogramchanneldestinationsettings-programname)
     */
    public fun programName(): String? = unwrap(this).getProgramName()

    /**
     * A builder for [MultiplexProgramChannelDestinationSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param multiplexId The ID of the Multiplex that the encoder is providing output to.
       * You do not need to specify the individual inputs to the Multiplex; MediaLive will handle
       * the connection of the two MediaLive pipelines to the two Multiplex instances.
       * The Multiplex must be in the same region as the Channel.
       */
      public fun multiplexId(multiplexId: String)

      /**
       * @param programName The program name of the Multiplex program that the encoder is providing
       * output to.
       */
      public fun programName(programName: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.MultiplexProgramChannelDestinationSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.MultiplexProgramChannelDestinationSettingsProperty.builder()

      /**
       * @param multiplexId The ID of the Multiplex that the encoder is providing output to.
       * You do not need to specify the individual inputs to the Multiplex; MediaLive will handle
       * the connection of the two MediaLive pipelines to the two Multiplex instances.
       * The Multiplex must be in the same region as the Channel.
       */
      override fun multiplexId(multiplexId: String) {
        cdkBuilder.multiplexId(multiplexId)
      }

      /**
       * @param programName The program name of the Multiplex program that the encoder is providing
       * output to.
       */
      override fun programName(programName: String) {
        cdkBuilder.programName(programName)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.MultiplexProgramChannelDestinationSettingsProperty
          = cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.MultiplexProgramChannelDestinationSettingsProperty,
    ) : CdkObject(cdkObject),
        MultiplexProgramChannelDestinationSettingsProperty {
      /**
       * The ID of the Multiplex that the encoder is providing output to.
       *
       * You do not need to specify the individual inputs to the Multiplex; MediaLive will handle
       * the connection of the two MediaLive pipelines to the two Multiplex instances.
       * The Multiplex must be in the same region as the Channel.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-multiplexprogramchanneldestinationsettings.html#cfn-medialive-channel-multiplexprogramchanneldestinationsettings-multiplexid)
       */
      override fun multiplexId(): String? = unwrap(this).getMultiplexId()

      /**
       * The program name of the Multiplex program that the encoder is providing output to.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-multiplexprogramchanneldestinationsettings.html#cfn-medialive-channel-multiplexprogramchanneldestinationsettings-programname)
       */
      override fun programName(): String? = unwrap(this).getProgramName()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          MultiplexProgramChannelDestinationSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.MultiplexProgramChannelDestinationSettingsProperty):
          MultiplexProgramChannelDestinationSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          MultiplexProgramChannelDestinationSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: MultiplexProgramChannelDestinationSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.MultiplexProgramChannelDestinationSettingsProperty
          = (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.MultiplexProgramChannelDestinationSettingsProperty
    }
  }

  /**
   * Information about how to connect to the upstream system.
   *
   * The parent of this entity is InputSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * NetworkInputSettingsProperty networkInputSettingsProperty =
   * NetworkInputSettingsProperty.builder()
   * .hlsInputSettings(HlsInputSettingsProperty.builder()
   * .bandwidth(123)
   * .bufferSegments(123)
   * .retries(123)
   * .retryInterval(123)
   * .scte35Source("scte35Source")
   * .build())
   * .serverValidation("serverValidation")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-networkinputsettings.html)
   */
  public interface NetworkInputSettingsProperty {
    /**
     * Information about how to connect to the upstream system.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-networkinputsettings.html#cfn-medialive-channel-networkinputsettings-hlsinputsettings)
     */
    public fun hlsInputSettings(): Any? = unwrap(this).getHlsInputSettings()

    /**
     * Checks HTTPS server certificates.
     *
     * When set to checkCryptographyOnly, cryptography in the certificate is checked, but not the
     * server's name. Certain subdomains (notably S3 buckets that use dots in the bucket name) don't
     * strictly match the corresponding certificate's wildcard pattern and would otherwise cause the
     * channel to error. This setting is ignored for protocols that do not use HTTPS.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-networkinputsettings.html#cfn-medialive-channel-networkinputsettings-servervalidation)
     */
    public fun serverValidation(): String? = unwrap(this).getServerValidation()

    /**
     * A builder for [NetworkInputSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param hlsInputSettings Information about how to connect to the upstream system.
       */
      public fun hlsInputSettings(hlsInputSettings: IResolvable)

      /**
       * @param hlsInputSettings Information about how to connect to the upstream system.
       */
      public fun hlsInputSettings(hlsInputSettings: HlsInputSettingsProperty)

      /**
       * @param hlsInputSettings Information about how to connect to the upstream system.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("63fa83903cb5729012027ed88c7bfdde8e004071033b6652ee3c768997257d51")
      public fun hlsInputSettings(hlsInputSettings: HlsInputSettingsProperty.Builder.() -> Unit)

      /**
       * @param serverValidation Checks HTTPS server certificates.
       * When set to checkCryptographyOnly, cryptography in the certificate is checked, but not the
       * server's name. Certain subdomains (notably S3 buckets that use dots in the bucket name) don't
       * strictly match the corresponding certificate's wildcard pattern and would otherwise cause the
       * channel to error. This setting is ignored for protocols that do not use HTTPS.
       */
      public fun serverValidation(serverValidation: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.NetworkInputSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.NetworkInputSettingsProperty.builder()

      /**
       * @param hlsInputSettings Information about how to connect to the upstream system.
       */
      override fun hlsInputSettings(hlsInputSettings: IResolvable) {
        cdkBuilder.hlsInputSettings(hlsInputSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param hlsInputSettings Information about how to connect to the upstream system.
       */
      override fun hlsInputSettings(hlsInputSettings: HlsInputSettingsProperty) {
        cdkBuilder.hlsInputSettings(hlsInputSettings.let(HlsInputSettingsProperty.Companion::unwrap))
      }

      /**
       * @param hlsInputSettings Information about how to connect to the upstream system.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("63fa83903cb5729012027ed88c7bfdde8e004071033b6652ee3c768997257d51")
      override fun hlsInputSettings(hlsInputSettings: HlsInputSettingsProperty.Builder.() -> Unit):
          Unit = hlsInputSettings(HlsInputSettingsProperty(hlsInputSettings))

      /**
       * @param serverValidation Checks HTTPS server certificates.
       * When set to checkCryptographyOnly, cryptography in the certificate is checked, but not the
       * server's name. Certain subdomains (notably S3 buckets that use dots in the bucket name) don't
       * strictly match the corresponding certificate's wildcard pattern and would otherwise cause the
       * channel to error. This setting is ignored for protocols that do not use HTTPS.
       */
      override fun serverValidation(serverValidation: String) {
        cdkBuilder.serverValidation(serverValidation)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.NetworkInputSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.NetworkInputSettingsProperty,
    ) : CdkObject(cdkObject),
        NetworkInputSettingsProperty {
      /**
       * Information about how to connect to the upstream system.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-networkinputsettings.html#cfn-medialive-channel-networkinputsettings-hlsinputsettings)
       */
      override fun hlsInputSettings(): Any? = unwrap(this).getHlsInputSettings()

      /**
       * Checks HTTPS server certificates.
       *
       * When set to checkCryptographyOnly, cryptography in the certificate is checked, but not the
       * server's name. Certain subdomains (notably S3 buckets that use dots in the bucket name) don't
       * strictly match the corresponding certificate's wildcard pattern and would otherwise cause the
       * channel to error. This setting is ignored for protocols that do not use HTTPS.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-networkinputsettings.html#cfn-medialive-channel-networkinputsettings-servervalidation)
       */
      override fun serverValidation(): String? = unwrap(this).getServerValidation()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): NetworkInputSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.NetworkInputSettingsProperty):
          NetworkInputSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          NetworkInputSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: NetworkInputSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.NetworkInputSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.NetworkInputSettingsProperty
    }
  }

  /**
   * Complete these fields only if you want to insert watermarks of type Nielsen CBET.
   *
   * The parent of this entity is NielsenWatermarksSettings
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * NielsenCBETProperty nielsenCBETProperty = NielsenCBETProperty.builder()
   * .cbetCheckDigitString("cbetCheckDigitString")
   * .cbetStepaside("cbetStepaside")
   * .csid("csid")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsencbet.html)
   */
  public interface NielsenCBETProperty {
    /**
     * Enter the CBET check digits to use in the watermark.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsencbet.html#cfn-medialive-channel-nielsencbet-cbetcheckdigitstring)
     */
    public fun cbetCheckDigitString(): String? = unwrap(this).getCbetCheckDigitString()

    /**
     * Determines the method of CBET insertion mode when prior encoding is detected on the same
     * layer.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsencbet.html#cfn-medialive-channel-nielsencbet-cbetstepaside)
     */
    public fun cbetStepaside(): String? = unwrap(this).getCbetStepaside()

    /**
     * Enter the CBET Source ID (CSID) to use in the watermark.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsencbet.html#cfn-medialive-channel-nielsencbet-csid)
     */
    public fun csid(): String? = unwrap(this).getCsid()

    /**
     * A builder for [NielsenCBETProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param cbetCheckDigitString Enter the CBET check digits to use in the watermark.
       */
      public fun cbetCheckDigitString(cbetCheckDigitString: String)

      /**
       * @param cbetStepaside Determines the method of CBET insertion mode when prior encoding is
       * detected on the same layer.
       */
      public fun cbetStepaside(cbetStepaside: String)

      /**
       * @param csid Enter the CBET Source ID (CSID) to use in the watermark.
       */
      public fun csid(csid: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.NielsenCBETProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.NielsenCBETProperty.builder()

      /**
       * @param cbetCheckDigitString Enter the CBET check digits to use in the watermark.
       */
      override fun cbetCheckDigitString(cbetCheckDigitString: String) {
        cdkBuilder.cbetCheckDigitString(cbetCheckDigitString)
      }

      /**
       * @param cbetStepaside Determines the method of CBET insertion mode when prior encoding is
       * detected on the same layer.
       */
      override fun cbetStepaside(cbetStepaside: String) {
        cdkBuilder.cbetStepaside(cbetStepaside)
      }

      /**
       * @param csid Enter the CBET Source ID (CSID) to use in the watermark.
       */
      override fun csid(csid: String) {
        cdkBuilder.csid(csid)
      }

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.NielsenCBETProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.NielsenCBETProperty,
    ) : CdkObject(cdkObject),
        NielsenCBETProperty {
      /**
       * Enter the CBET check digits to use in the watermark.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsencbet.html#cfn-medialive-channel-nielsencbet-cbetcheckdigitstring)
       */
      override fun cbetCheckDigitString(): String? = unwrap(this).getCbetCheckDigitString()

      /**
       * Determines the method of CBET insertion mode when prior encoding is detected on the same
       * layer.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsencbet.html#cfn-medialive-channel-nielsencbet-cbetstepaside)
       */
      override fun cbetStepaside(): String? = unwrap(this).getCbetStepaside()

      /**
       * Enter the CBET Source ID (CSID) to use in the watermark.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsencbet.html#cfn-medialive-channel-nielsencbet-csid)
       */
      override fun csid(): String? = unwrap(this).getCsid()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): NielsenCBETProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.NielsenCBETProperty):
          NielsenCBETProperty = CdkObjectWrappers.wrap(cdkObject) as? NielsenCBETProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: NielsenCBETProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.NielsenCBETProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.NielsenCBETProperty
    }
  }

  /**
   * The settings to configure Nielsen watermarks.
   *
   * The parent of this entity is EncoderSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * NielsenConfigurationProperty nielsenConfigurationProperty =
   * NielsenConfigurationProperty.builder()
   * .distributorId("distributorId")
   * .nielsenPcmToId3Tagging("nielsenPcmToId3Tagging")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsenconfiguration.html)
   */
  public interface NielsenConfigurationProperty {
    /**
     * Enter the Distributor ID assigned to your organization by Nielsen.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsenconfiguration.html#cfn-medialive-channel-nielsenconfiguration-distributorid)
     */
    public fun distributorId(): String? = unwrap(this).getDistributorId()

    /**
     * Enables Nielsen PCM to ID3 tagging.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsenconfiguration.html#cfn-medialive-channel-nielsenconfiguration-nielsenpcmtoid3tagging)
     */
    public fun nielsenPcmToId3Tagging(): String? = unwrap(this).getNielsenPcmToId3Tagging()

    /**
     * A builder for [NielsenConfigurationProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param distributorId Enter the Distributor ID assigned to your organization by Nielsen.
       */
      public fun distributorId(distributorId: String)

      /**
       * @param nielsenPcmToId3Tagging Enables Nielsen PCM to ID3 tagging.
       */
      public fun nielsenPcmToId3Tagging(nielsenPcmToId3Tagging: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.NielsenConfigurationProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.NielsenConfigurationProperty.builder()

      /**
       * @param distributorId Enter the Distributor ID assigned to your organization by Nielsen.
       */
      override fun distributorId(distributorId: String) {
        cdkBuilder.distributorId(distributorId)
      }

      /**
       * @param nielsenPcmToId3Tagging Enables Nielsen PCM to ID3 tagging.
       */
      override fun nielsenPcmToId3Tagging(nielsenPcmToId3Tagging: String) {
        cdkBuilder.nielsenPcmToId3Tagging(nielsenPcmToId3Tagging)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.NielsenConfigurationProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.NielsenConfigurationProperty,
    ) : CdkObject(cdkObject),
        NielsenConfigurationProperty {
      /**
       * Enter the Distributor ID assigned to your organization by Nielsen.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsenconfiguration.html#cfn-medialive-channel-nielsenconfiguration-distributorid)
       */
      override fun distributorId(): String? = unwrap(this).getDistributorId()

      /**
       * Enables Nielsen PCM to ID3 tagging.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsenconfiguration.html#cfn-medialive-channel-nielsenconfiguration-nielsenpcmtoid3tagging)
       */
      override fun nielsenPcmToId3Tagging(): String? = unwrap(this).getNielsenPcmToId3Tagging()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): NielsenConfigurationProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.NielsenConfigurationProperty):
          NielsenConfigurationProperty = CdkObjectWrappers.wrap(cdkObject) as?
          NielsenConfigurationProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: NielsenConfigurationProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.NielsenConfigurationProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.NielsenConfigurationProperty
    }
  }

  /**
   * Complete these fields only if you want to insert watermarks of type Nielsen NAES II (N2) and
   * Nielsen NAES VI (NW).
   *
   * The parent of this entity is NielsenWatermarksSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * NielsenNaesIiNwProperty nielsenNaesIiNwProperty = NielsenNaesIiNwProperty.builder()
   * .checkDigitString("checkDigitString")
   * .sid(123)
   * .timezone("timezone")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsennaesiinw.html)
   */
  public interface NielsenNaesIiNwProperty {
    /**
     * Enter the check digit string for the watermark.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsennaesiinw.html#cfn-medialive-channel-nielsennaesiinw-checkdigitstring)
     */
    public fun checkDigitString(): String? = unwrap(this).getCheckDigitString()

    /**
     * Enter the Nielsen Source ID (SID) to include in the watermark.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsennaesiinw.html#cfn-medialive-channel-nielsennaesiinw-sid)
     */
    public fun sid(): Number? = unwrap(this).getSid()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsennaesiinw.html#cfn-medialive-channel-nielsennaesiinw-timezone)
     */
    public fun timezone(): String? = unwrap(this).getTimezone()

    /**
     * A builder for [NielsenNaesIiNwProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param checkDigitString Enter the check digit string for the watermark.
       */
      public fun checkDigitString(checkDigitString: String)

      /**
       * @param sid Enter the Nielsen Source ID (SID) to include in the watermark.
       */
      public fun sid(sid: Number)

      /**
       * @param timezone the value to be set.
       */
      public fun timezone(timezone: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.NielsenNaesIiNwProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.NielsenNaesIiNwProperty.builder()

      /**
       * @param checkDigitString Enter the check digit string for the watermark.
       */
      override fun checkDigitString(checkDigitString: String) {
        cdkBuilder.checkDigitString(checkDigitString)
      }

      /**
       * @param sid Enter the Nielsen Source ID (SID) to include in the watermark.
       */
      override fun sid(sid: Number) {
        cdkBuilder.sid(sid)
      }

      /**
       * @param timezone the value to be set.
       */
      override fun timezone(timezone: String) {
        cdkBuilder.timezone(timezone)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.NielsenNaesIiNwProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.NielsenNaesIiNwProperty,
    ) : CdkObject(cdkObject),
        NielsenNaesIiNwProperty {
      /**
       * Enter the check digit string for the watermark.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsennaesiinw.html#cfn-medialive-channel-nielsennaesiinw-checkdigitstring)
       */
      override fun checkDigitString(): String? = unwrap(this).getCheckDigitString()

      /**
       * Enter the Nielsen Source ID (SID) to include in the watermark.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsennaesiinw.html#cfn-medialive-channel-nielsennaesiinw-sid)
       */
      override fun sid(): Number? = unwrap(this).getSid()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsennaesiinw.html#cfn-medialive-channel-nielsennaesiinw-timezone)
       */
      override fun timezone(): String? = unwrap(this).getTimezone()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): NielsenNaesIiNwProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.NielsenNaesIiNwProperty):
          NielsenNaesIiNwProperty = CdkObjectWrappers.wrap(cdkObject) as? NielsenNaesIiNwProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: NielsenNaesIiNwProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.NielsenNaesIiNwProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.NielsenNaesIiNwProperty
    }
  }

  /**
   * Settings to configure Nielsen Watermarks in the audio encode.
   *
   * The parent of this entity is AudioWatermarkSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * NielsenWatermarksSettingsProperty nielsenWatermarksSettingsProperty =
   * NielsenWatermarksSettingsProperty.builder()
   * .nielsenCbetSettings(NielsenCBETProperty.builder()
   * .cbetCheckDigitString("cbetCheckDigitString")
   * .cbetStepaside("cbetStepaside")
   * .csid("csid")
   * .build())
   * .nielsenDistributionType("nielsenDistributionType")
   * .nielsenNaesIiNwSettings(NielsenNaesIiNwProperty.builder()
   * .checkDigitString("checkDigitString")
   * .sid(123)
   * .timezone("timezone")
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsenwatermarkssettings.html)
   */
  public interface NielsenWatermarksSettingsProperty {
    /**
     * Complete these fields only if you want to insert watermarks of type Nielsen CBET.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsenwatermarkssettings.html#cfn-medialive-channel-nielsenwatermarkssettings-nielsencbetsettings)
     */
    public fun nielsenCbetSettings(): Any? = unwrap(this).getNielsenCbetSettings()

    /**
     * Choose the distribution types that you want to assign to the watermarks: - PROGRAM_CONTENT -
     * FINAL_DISTRIBUTOR.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsenwatermarkssettings.html#cfn-medialive-channel-nielsenwatermarkssettings-nielsendistributiontype)
     */
    public fun nielsenDistributionType(): String? = unwrap(this).getNielsenDistributionType()

    /**
     * Complete these fields only if you want to insert watermarks of type Nielsen NAES II (N2) and
     * Nielsen NAES VI (NW).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsenwatermarkssettings.html#cfn-medialive-channel-nielsenwatermarkssettings-nielsennaesiinwsettings)
     */
    public fun nielsenNaesIiNwSettings(): Any? = unwrap(this).getNielsenNaesIiNwSettings()

    /**
     * A builder for [NielsenWatermarksSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param nielsenCbetSettings Complete these fields only if you want to insert watermarks of
       * type Nielsen CBET.
       */
      public fun nielsenCbetSettings(nielsenCbetSettings: IResolvable)

      /**
       * @param nielsenCbetSettings Complete these fields only if you want to insert watermarks of
       * type Nielsen CBET.
       */
      public fun nielsenCbetSettings(nielsenCbetSettings: NielsenCBETProperty)

      /**
       * @param nielsenCbetSettings Complete these fields only if you want to insert watermarks of
       * type Nielsen CBET.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("35333d3f44aa56de26abd03af7cc97f42b05a1141ac054f99a76ddc6892352d8")
      public fun nielsenCbetSettings(nielsenCbetSettings: NielsenCBETProperty.Builder.() -> Unit)

      /**
       * @param nielsenDistributionType Choose the distribution types that you want to assign to the
       * watermarks: - PROGRAM_CONTENT - FINAL_DISTRIBUTOR.
       */
      public fun nielsenDistributionType(nielsenDistributionType: String)

      /**
       * @param nielsenNaesIiNwSettings Complete these fields only if you want to insert watermarks
       * of type Nielsen NAES II (N2) and Nielsen NAES VI (NW).
       */
      public fun nielsenNaesIiNwSettings(nielsenNaesIiNwSettings: IResolvable)

      /**
       * @param nielsenNaesIiNwSettings Complete these fields only if you want to insert watermarks
       * of type Nielsen NAES II (N2) and Nielsen NAES VI (NW).
       */
      public fun nielsenNaesIiNwSettings(nielsenNaesIiNwSettings: NielsenNaesIiNwProperty)

      /**
       * @param nielsenNaesIiNwSettings Complete these fields only if you want to insert watermarks
       * of type Nielsen NAES II (N2) and Nielsen NAES VI (NW).
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("805148ec889bfd17c184fe783d22acec7decede80d044d2eb08a4a9e6bd5934d")
      public
          fun nielsenNaesIiNwSettings(nielsenNaesIiNwSettings: NielsenNaesIiNwProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.NielsenWatermarksSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.NielsenWatermarksSettingsProperty.builder()

      /**
       * @param nielsenCbetSettings Complete these fields only if you want to insert watermarks of
       * type Nielsen CBET.
       */
      override fun nielsenCbetSettings(nielsenCbetSettings: IResolvable) {
        cdkBuilder.nielsenCbetSettings(nielsenCbetSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param nielsenCbetSettings Complete these fields only if you want to insert watermarks of
       * type Nielsen CBET.
       */
      override fun nielsenCbetSettings(nielsenCbetSettings: NielsenCBETProperty) {
        cdkBuilder.nielsenCbetSettings(nielsenCbetSettings.let(NielsenCBETProperty.Companion::unwrap))
      }

      /**
       * @param nielsenCbetSettings Complete these fields only if you want to insert watermarks of
       * type Nielsen CBET.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("35333d3f44aa56de26abd03af7cc97f42b05a1141ac054f99a76ddc6892352d8")
      override fun nielsenCbetSettings(nielsenCbetSettings: NielsenCBETProperty.Builder.() -> Unit):
          Unit = nielsenCbetSettings(NielsenCBETProperty(nielsenCbetSettings))

      /**
       * @param nielsenDistributionType Choose the distribution types that you want to assign to the
       * watermarks: - PROGRAM_CONTENT - FINAL_DISTRIBUTOR.
       */
      override fun nielsenDistributionType(nielsenDistributionType: String) {
        cdkBuilder.nielsenDistributionType(nielsenDistributionType)
      }

      /**
       * @param nielsenNaesIiNwSettings Complete these fields only if you want to insert watermarks
       * of type Nielsen NAES II (N2) and Nielsen NAES VI (NW).
       */
      override fun nielsenNaesIiNwSettings(nielsenNaesIiNwSettings: IResolvable) {
        cdkBuilder.nielsenNaesIiNwSettings(nielsenNaesIiNwSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param nielsenNaesIiNwSettings Complete these fields only if you want to insert watermarks
       * of type Nielsen NAES II (N2) and Nielsen NAES VI (NW).
       */
      override fun nielsenNaesIiNwSettings(nielsenNaesIiNwSettings: NielsenNaesIiNwProperty) {
        cdkBuilder.nielsenNaesIiNwSettings(nielsenNaesIiNwSettings.let(NielsenNaesIiNwProperty.Companion::unwrap))
      }

      /**
       * @param nielsenNaesIiNwSettings Complete these fields only if you want to insert watermarks
       * of type Nielsen NAES II (N2) and Nielsen NAES VI (NW).
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("805148ec889bfd17c184fe783d22acec7decede80d044d2eb08a4a9e6bd5934d")
      override
          fun nielsenNaesIiNwSettings(nielsenNaesIiNwSettings: NielsenNaesIiNwProperty.Builder.() -> Unit):
          Unit = nielsenNaesIiNwSettings(NielsenNaesIiNwProperty(nielsenNaesIiNwSettings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.NielsenWatermarksSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.NielsenWatermarksSettingsProperty,
    ) : CdkObject(cdkObject),
        NielsenWatermarksSettingsProperty {
      /**
       * Complete these fields only if you want to insert watermarks of type Nielsen CBET.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsenwatermarkssettings.html#cfn-medialive-channel-nielsenwatermarkssettings-nielsencbetsettings)
       */
      override fun nielsenCbetSettings(): Any? = unwrap(this).getNielsenCbetSettings()

      /**
       * Choose the distribution types that you want to assign to the watermarks: -
       * PROGRAM_CONTENT - FINAL_DISTRIBUTOR.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsenwatermarkssettings.html#cfn-medialive-channel-nielsenwatermarkssettings-nielsendistributiontype)
       */
      override fun nielsenDistributionType(): String? = unwrap(this).getNielsenDistributionType()

      /**
       * Complete these fields only if you want to insert watermarks of type Nielsen NAES II (N2)
       * and Nielsen NAES VI (NW).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsenwatermarkssettings.html#cfn-medialive-channel-nielsenwatermarkssettings-nielsennaesiinwsettings)
       */
      override fun nielsenNaesIiNwSettings(): Any? = unwrap(this).getNielsenNaesIiNwSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          NielsenWatermarksSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.NielsenWatermarksSettingsProperty):
          NielsenWatermarksSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          NielsenWatermarksSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: NielsenWatermarksSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.NielsenWatermarksSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.NielsenWatermarksSettingsProperty
    }
  }

  /**
   * Configuration information for an output.
   *
   * This entity is at the top level in the channel.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * OutputDestinationProperty outputDestinationProperty = OutputDestinationProperty.builder()
   * .id("id")
   * .mediaPackageSettings(List.of(MediaPackageOutputDestinationSettingsProperty.builder()
   * .channelId("channelId")
   * .build()))
   * .multiplexSettings(MultiplexProgramChannelDestinationSettingsProperty.builder()
   * .multiplexId("multiplexId")
   * .programName("programName")
   * .build())
   * .settings(List.of(OutputDestinationSettingsProperty.builder()
   * .passwordParam("passwordParam")
   * .streamName("streamName")
   * .url("url")
   * .username("username")
   * .build()))
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestination.html)
   */
  public interface OutputDestinationProperty {
    /**
     * The ID for this destination.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestination.html#cfn-medialive-channel-outputdestination-id)
     */
    public fun id(): String? = unwrap(this).getId()

    /**
     * The destination settings for a MediaPackage output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestination.html#cfn-medialive-channel-outputdestination-mediapackagesettings)
     */
    public fun mediaPackageSettings(): Any? = unwrap(this).getMediaPackageSettings()

    /**
     * Destination settings for a Multiplex output;
     *
     * one destination for both encoders.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestination.html#cfn-medialive-channel-outputdestination-multiplexsettings)
     */
    public fun multiplexSettings(): Any? = unwrap(this).getMultiplexSettings()

    /**
     * The destination settings for an output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestination.html#cfn-medialive-channel-outputdestination-settings)
     */
    public fun settings(): Any? = unwrap(this).getSettings()

    /**
     * A builder for [OutputDestinationProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param id The ID for this destination.
       */
      public fun id(id: String)

      /**
       * @param mediaPackageSettings The destination settings for a MediaPackage output.
       */
      public fun mediaPackageSettings(mediaPackageSettings: IResolvable)

      /**
       * @param mediaPackageSettings The destination settings for a MediaPackage output.
       */
      public fun mediaPackageSettings(mediaPackageSettings: List)

      /**
       * @param mediaPackageSettings The destination settings for a MediaPackage output.
       */
      public fun mediaPackageSettings(vararg mediaPackageSettings: Any)

      /**
       * @param multiplexSettings Destination settings for a Multiplex output;.
       * one destination for both encoders.
       */
      public fun multiplexSettings(multiplexSettings: IResolvable)

      /**
       * @param multiplexSettings Destination settings for a Multiplex output;.
       * one destination for both encoders.
       */
      public
          fun multiplexSettings(multiplexSettings: MultiplexProgramChannelDestinationSettingsProperty)

      /**
       * @param multiplexSettings Destination settings for a Multiplex output;.
       * one destination for both encoders.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ece15e037ba8cc31b632e08040e50a80980271794019a29ab98417858d8a4fed")
      public
          fun multiplexSettings(multiplexSettings: MultiplexProgramChannelDestinationSettingsProperty.Builder.() -> Unit)

      /**
       * @param settings The destination settings for an output.
       */
      public fun settings(settings: IResolvable)

      /**
       * @param settings The destination settings for an output.
       */
      public fun settings(settings: List)

      /**
       * @param settings The destination settings for an output.
       */
      public fun settings(vararg settings: Any)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.OutputDestinationProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.OutputDestinationProperty.builder()

      /**
       * @param id The ID for this destination.
       */
      override fun id(id: String) {
        cdkBuilder.id(id)
      }

      /**
       * @param mediaPackageSettings The destination settings for a MediaPackage output.
       */
      override fun mediaPackageSettings(mediaPackageSettings: IResolvable) {
        cdkBuilder.mediaPackageSettings(mediaPackageSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param mediaPackageSettings The destination settings for a MediaPackage output.
       */
      override fun mediaPackageSettings(mediaPackageSettings: List) {
        cdkBuilder.mediaPackageSettings(mediaPackageSettings.map{CdkObjectWrappers.unwrap(it)})
      }

      /**
       * @param mediaPackageSettings The destination settings for a MediaPackage output.
       */
      override fun mediaPackageSettings(vararg mediaPackageSettings: Any): Unit =
          mediaPackageSettings(mediaPackageSettings.toList())

      /**
       * @param multiplexSettings Destination settings for a Multiplex output;.
       * one destination for both encoders.
       */
      override fun multiplexSettings(multiplexSettings: IResolvable) {
        cdkBuilder.multiplexSettings(multiplexSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param multiplexSettings Destination settings for a Multiplex output;.
       * one destination for both encoders.
       */
      override
          fun multiplexSettings(multiplexSettings: MultiplexProgramChannelDestinationSettingsProperty) {
        cdkBuilder.multiplexSettings(multiplexSettings.let(MultiplexProgramChannelDestinationSettingsProperty.Companion::unwrap))
      }

      /**
       * @param multiplexSettings Destination settings for a Multiplex output;.
       * one destination for both encoders.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ece15e037ba8cc31b632e08040e50a80980271794019a29ab98417858d8a4fed")
      override
          fun multiplexSettings(multiplexSettings: MultiplexProgramChannelDestinationSettingsProperty.Builder.() -> Unit):
          Unit =
          multiplexSettings(MultiplexProgramChannelDestinationSettingsProperty(multiplexSettings))

      /**
       * @param settings The destination settings for an output.
       */
      override fun settings(settings: IResolvable) {
        cdkBuilder.settings(settings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param settings The destination settings for an output.
       */
      override fun settings(settings: List) {
        cdkBuilder.settings(settings.map{CdkObjectWrappers.unwrap(it)})
      }

      /**
       * @param settings The destination settings for an output.
       */
      override fun settings(vararg settings: Any): Unit = settings(settings.toList())

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.OutputDestinationProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.OutputDestinationProperty,
    ) : CdkObject(cdkObject),
        OutputDestinationProperty {
      /**
       * The ID for this destination.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestination.html#cfn-medialive-channel-outputdestination-id)
       */
      override fun id(): String? = unwrap(this).getId()

      /**
       * The destination settings for a MediaPackage output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestination.html#cfn-medialive-channel-outputdestination-mediapackagesettings)
       */
      override fun mediaPackageSettings(): Any? = unwrap(this).getMediaPackageSettings()

      /**
       * Destination settings for a Multiplex output;
       *
       * one destination for both encoders.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestination.html#cfn-medialive-channel-outputdestination-multiplexsettings)
       */
      override fun multiplexSettings(): Any? = unwrap(this).getMultiplexSettings()

      /**
       * The destination settings for an output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestination.html#cfn-medialive-channel-outputdestination-settings)
       */
      override fun settings(): Any? = unwrap(this).getSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): OutputDestinationProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.OutputDestinationProperty):
          OutputDestinationProperty = CdkObjectWrappers.wrap(cdkObject) as?
          OutputDestinationProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: OutputDestinationProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.OutputDestinationProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.OutputDestinationProperty
    }
  }

  /**
   * The configuration information for this output.
   *
   * The parent of this entity is OutputDestination.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * OutputDestinationSettingsProperty outputDestinationSettingsProperty =
   * OutputDestinationSettingsProperty.builder()
   * .passwordParam("passwordParam")
   * .streamName("streamName")
   * .url("url")
   * .username("username")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestinationsettings.html)
   */
  public interface OutputDestinationSettingsProperty {
    /**
     * The password parameter that holds the password for accessing the downstream system.
     *
     * This password parameter applies only if the downstream system requires credentials.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestinationsettings.html#cfn-medialive-channel-outputdestinationsettings-passwordparam)
     */
    public fun passwordParam(): String? = unwrap(this).getPasswordParam()

    /**
     * The stream name for the content.
     *
     * This applies only to RTMP outputs.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestinationsettings.html#cfn-medialive-channel-outputdestinationsettings-streamname)
     */
    public fun streamName(): String? = unwrap(this).getStreamName()

    /**
     * The URL for the destination.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestinationsettings.html#cfn-medialive-channel-outputdestinationsettings-url)
     */
    public fun url(): String? = unwrap(this).getUrl()

    /**
     * The user name to connect to the downstream system.
     *
     * This applies only if the downstream system requires credentials.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestinationsettings.html#cfn-medialive-channel-outputdestinationsettings-username)
     */
    public fun username(): String? = unwrap(this).getUsername()

    /**
     * A builder for [OutputDestinationSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param passwordParam The password parameter that holds the password for accessing the
       * downstream system.
       * This password parameter applies only if the downstream system requires credentials.
       */
      public fun passwordParam(passwordParam: String)

      /**
       * @param streamName The stream name for the content.
       * This applies only to RTMP outputs.
       */
      public fun streamName(streamName: String)

      /**
       * @param url The URL for the destination.
       */
      public fun url(url: String)

      /**
       * @param username The user name to connect to the downstream system.
       * This applies only if the downstream system requires credentials.
       */
      public fun username(username: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.OutputDestinationSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.OutputDestinationSettingsProperty.builder()

      /**
       * @param passwordParam The password parameter that holds the password for accessing the
       * downstream system.
       * This password parameter applies only if the downstream system requires credentials.
       */
      override fun passwordParam(passwordParam: String) {
        cdkBuilder.passwordParam(passwordParam)
      }

      /**
       * @param streamName The stream name for the content.
       * This applies only to RTMP outputs.
       */
      override fun streamName(streamName: String) {
        cdkBuilder.streamName(streamName)
      }

      /**
       * @param url The URL for the destination.
       */
      override fun url(url: String) {
        cdkBuilder.url(url)
      }

      /**
       * @param username The user name to connect to the downstream system.
       * This applies only if the downstream system requires credentials.
       */
      override fun username(username: String) {
        cdkBuilder.username(username)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.OutputDestinationSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.OutputDestinationSettingsProperty,
    ) : CdkObject(cdkObject),
        OutputDestinationSettingsProperty {
      /**
       * The password parameter that holds the password for accessing the downstream system.
       *
       * This password parameter applies only if the downstream system requires credentials.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestinationsettings.html#cfn-medialive-channel-outputdestinationsettings-passwordparam)
       */
      override fun passwordParam(): String? = unwrap(this).getPasswordParam()

      /**
       * The stream name for the content.
       *
       * This applies only to RTMP outputs.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestinationsettings.html#cfn-medialive-channel-outputdestinationsettings-streamname)
       */
      override fun streamName(): String? = unwrap(this).getStreamName()

      /**
       * The URL for the destination.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestinationsettings.html#cfn-medialive-channel-outputdestinationsettings-url)
       */
      override fun url(): String? = unwrap(this).getUrl()

      /**
       * The user name to connect to the downstream system.
       *
       * This applies only if the downstream system requires credentials.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestinationsettings.html#cfn-medialive-channel-outputdestinationsettings-username)
       */
      override fun username(): String? = unwrap(this).getUsername()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          OutputDestinationSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.OutputDestinationSettingsProperty):
          OutputDestinationSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          OutputDestinationSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: OutputDestinationSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.OutputDestinationSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.OutputDestinationSettingsProperty
    }
  }

  /**
   * The settings for one output group.
   *
   * The parent of this entity is EncoderSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * OutputGroupProperty outputGroupProperty = OutputGroupProperty.builder()
   * .name("name")
   * .outputGroupSettings(OutputGroupSettingsProperty.builder()
   * .archiveGroupSettings(ArchiveGroupSettingsProperty.builder()
   * .archiveCdnSettings(ArchiveCdnSettingsProperty.builder()
   * .archiveS3Settings(ArchiveS3SettingsProperty.builder()
   * .cannedAcl("cannedAcl")
   * .build())
   * .build())
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .rolloverInterval(123)
   * .build())
   * .cmafIngestGroupSettings(CmafIngestGroupSettingsProperty.builder()
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .scte35Type("scte35Type")
   * .segmentLength(123)
   * .segmentLengthUnits("segmentLengthUnits")
   * .sendDelayMs(123)
   * .build())
   * .frameCaptureGroupSettings(FrameCaptureGroupSettingsProperty.builder()
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .frameCaptureCdnSettings(FrameCaptureCdnSettingsProperty.builder()
   * .frameCaptureS3Settings(FrameCaptureS3SettingsProperty.builder()
   * .cannedAcl("cannedAcl")
   * .build())
   * .build())
   * .build())
   * .hlsGroupSettings(HlsGroupSettingsProperty.builder()
   * .adMarkers(List.of("adMarkers"))
   * .baseUrlContent("baseUrlContent")
   * .baseUrlContent1("baseUrlContent1")
   * .baseUrlManifest("baseUrlManifest")
   * .baseUrlManifest1("baseUrlManifest1")
   * .captionLanguageMappings(List.of(CaptionLanguageMappingProperty.builder()
   * .captionChannel(123)
   * .languageCode("languageCode")
   * .languageDescription("languageDescription")
   * .build()))
   * .captionLanguageSetting("captionLanguageSetting")
   * .clientCache("clientCache")
   * .codecSpecification("codecSpecification")
   * .constantIv("constantIv")
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .directoryStructure("directoryStructure")
   * .discontinuityTags("discontinuityTags")
   * .encryptionType("encryptionType")
   * .hlsCdnSettings(HlsCdnSettingsProperty.builder()
   * .hlsAkamaiSettings(HlsAkamaiSettingsProperty.builder()
   * .connectionRetryInterval(123)
   * .filecacheDuration(123)
   * .httpTransferMode("httpTransferMode")
   * .numRetries(123)
   * .restartDelay(123)
   * .salt("salt")
   * .token("token")
   * .build())
   * .hlsBasicPutSettings(HlsBasicPutSettingsProperty.builder()
   * .connectionRetryInterval(123)
   * .filecacheDuration(123)
   * .numRetries(123)
   * .restartDelay(123)
   * .build())
   * .hlsMediaStoreSettings(HlsMediaStoreSettingsProperty.builder()
   * .connectionRetryInterval(123)
   * .filecacheDuration(123)
   * .mediaStoreStorageClass("mediaStoreStorageClass")
   * .numRetries(123)
   * .restartDelay(123)
   * .build())
   * .hlsS3Settings(HlsS3SettingsProperty.builder()
   * .cannedAcl("cannedAcl")
   * .build())
   * .hlsWebdavSettings(HlsWebdavSettingsProperty.builder()
   * .connectionRetryInterval(123)
   * .filecacheDuration(123)
   * .httpTransferMode("httpTransferMode")
   * .numRetries(123)
   * .restartDelay(123)
   * .build())
   * .build())
   * .hlsId3SegmentTagging("hlsId3SegmentTagging")
   * .iFrameOnlyPlaylists("iFrameOnlyPlaylists")
   * .incompleteSegmentBehavior("incompleteSegmentBehavior")
   * .indexNSegments(123)
   * .inputLossAction("inputLossAction")
   * .ivInManifest("ivInManifest")
   * .ivSource("ivSource")
   * .keepSegments(123)
   * .keyFormat("keyFormat")
   * .keyFormatVersions("keyFormatVersions")
   * .keyProviderSettings(KeyProviderSettingsProperty.builder()
   * .staticKeySettings(StaticKeySettingsProperty.builder()
   * .keyProviderServer(InputLocationProperty.builder()
   * .passwordParam("passwordParam")
   * .uri("uri")
   * .username("username")
   * .build())
   * .staticKeyValue("staticKeyValue")
   * .build())
   * .build())
   * .manifestCompression("manifestCompression")
   * .manifestDurationFormat("manifestDurationFormat")
   * .minSegmentLength(123)
   * .mode("mode")
   * .outputSelection("outputSelection")
   * .programDateTime("programDateTime")
   * .programDateTimeClock("programDateTimeClock")
   * .programDateTimePeriod(123)
   * .redundantManifest("redundantManifest")
   * .segmentationMode("segmentationMode")
   * .segmentLength(123)
   * .segmentsPerSubdirectory(123)
   * .streamInfResolution("streamInfResolution")
   * .timedMetadataId3Frame("timedMetadataId3Frame")
   * .timedMetadataId3Period(123)
   * .timestampDeltaMilliseconds(123)
   * .tsFileMode("tsFileMode")
   * .build())
   * .mediaPackageGroupSettings(MediaPackageGroupSettingsProperty.builder()
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .build())
   * .msSmoothGroupSettings(MsSmoothGroupSettingsProperty.builder()
   * .acquisitionPointId("acquisitionPointId")
   * .audioOnlyTimecodeControl("audioOnlyTimecodeControl")
   * .certificateMode("certificateMode")
   * .connectionRetryInterval(123)
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .eventId("eventId")
   * .eventIdMode("eventIdMode")
   * .eventStopBehavior("eventStopBehavior")
   * .filecacheDuration(123)
   * .fragmentLength(123)
   * .inputLossAction("inputLossAction")
   * .numRetries(123)
   * .restartDelay(123)
   * .segmentationMode("segmentationMode")
   * .sendDelayMs(123)
   * .sparseTrackType("sparseTrackType")
   * .streamManifestBehavior("streamManifestBehavior")
   * .timestampOffset("timestampOffset")
   * .timestampOffsetMode("timestampOffsetMode")
   * .build())
   * .multiplexGroupSettings(MultiplexGroupSettingsProperty.builder().build())
   * .rtmpGroupSettings(RtmpGroupSettingsProperty.builder()
   * .adMarkers(List.of("adMarkers"))
   * .authenticationScheme("authenticationScheme")
   * .cacheFullBehavior("cacheFullBehavior")
   * .cacheLength(123)
   * .captionData("captionData")
   * .includeFillerNalUnits("includeFillerNalUnits")
   * .inputLossAction("inputLossAction")
   * .restartDelay(123)
   * .build())
   * .udpGroupSettings(UdpGroupSettingsProperty.builder()
   * .inputLossAction("inputLossAction")
   * .timedMetadataId3Frame("timedMetadataId3Frame")
   * .timedMetadataId3Period(123)
   * .build())
   * .build())
   * .outputs(List.of(OutputProperty.builder()
   * .audioDescriptionNames(List.of("audioDescriptionNames"))
   * .captionDescriptionNames(List.of("captionDescriptionNames"))
   * .outputName("outputName")
   * .outputSettings(OutputSettingsProperty.builder()
   * .archiveOutputSettings(ArchiveOutputSettingsProperty.builder()
   * .containerSettings(ArchiveContainerSettingsProperty.builder()
   * .m2TsSettings(M2tsSettingsProperty.builder()
   * .absentInputAudioBehavior("absentInputAudioBehavior")
   * .arib("arib")
   * .aribCaptionsPid("aribCaptionsPid")
   * .aribCaptionsPidControl("aribCaptionsPidControl")
   * .audioBufferModel("audioBufferModel")
   * .audioFramesPerPes(123)
   * .audioPids("audioPids")
   * .audioStreamType("audioStreamType")
   * .bitrate(123)
   * .bufferModel("bufferModel")
   * .ccDescriptor("ccDescriptor")
   * .dvbNitSettings(DvbNitSettingsProperty.builder()
   * .networkId(123)
   * .networkName("networkName")
   * .repInterval(123)
   * .build())
   * .dvbSdtSettings(DvbSdtSettingsProperty.builder()
   * .outputSdt("outputSdt")
   * .repInterval(123)
   * .serviceName("serviceName")
   * .serviceProviderName("serviceProviderName")
   * .build())
   * .dvbSubPids("dvbSubPids")
   * .dvbTdtSettings(DvbTdtSettingsProperty.builder()
   * .repInterval(123)
   * .build())
   * .dvbTeletextPid("dvbTeletextPid")
   * .ebif("ebif")
   * .ebpAudioInterval("ebpAudioInterval")
   * .ebpLookaheadMs(123)
   * .ebpPlacement("ebpPlacement")
   * .ecmPid("ecmPid")
   * .esRateInPes("esRateInPes")
   * .etvPlatformPid("etvPlatformPid")
   * .etvSignalPid("etvSignalPid")
   * .fragmentTime(123)
   * .klv("klv")
   * .klvDataPids("klvDataPids")
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .nullPacketBitrate(123)
   * .patInterval(123)
   * .pcrControl("pcrControl")
   * .pcrPeriod(123)
   * .pcrPid("pcrPid")
   * .pmtInterval(123)
   * .pmtPid("pmtPid")
   * .programNum(123)
   * .rateMode("rateMode")
   * .scte27Pids("scte27Pids")
   * .scte35Control("scte35Control")
   * .scte35Pid("scte35Pid")
   * .scte35PrerollPullupMilliseconds(123)
   * .segmentationMarkers("segmentationMarkers")
   * .segmentationStyle("segmentationStyle")
   * .segmentationTime(123)
   * .timedMetadataBehavior("timedMetadataBehavior")
   * .timedMetadataPid("timedMetadataPid")
   * .transportStreamId(123)
   * .videoPid("videoPid")
   * .build())
   * .rawSettings(RawSettingsProperty.builder().build())
   * .build())
   * .extension("extension")
   * .nameModifier("nameModifier")
   * .build())
   * .cmafIngestOutputSettings(CmafIngestOutputSettingsProperty.builder()
   * .nameModifier("nameModifier")
   * .build())
   * .frameCaptureOutputSettings(FrameCaptureOutputSettingsProperty.builder()
   * .nameModifier("nameModifier")
   * .build())
   * .hlsOutputSettings(HlsOutputSettingsProperty.builder()
   * .h265PackagingType("h265PackagingType")
   * .hlsSettings(HlsSettingsProperty.builder()
   * .audioOnlyHlsSettings(AudioOnlyHlsSettingsProperty.builder()
   * .audioGroupId("audioGroupId")
   * .audioOnlyImage(InputLocationProperty.builder()
   * .passwordParam("passwordParam")
   * .uri("uri")
   * .username("username")
   * .build())
   * .audioTrackType("audioTrackType")
   * .segmentType("segmentType")
   * .build())
   * .fmp4HlsSettings(Fmp4HlsSettingsProperty.builder()
   * .audioRenditionSets("audioRenditionSets")
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .timedMetadataBehavior("timedMetadataBehavior")
   * .build())
   * .frameCaptureHlsSettings(FrameCaptureHlsSettingsProperty.builder().build())
   * .standardHlsSettings(StandardHlsSettingsProperty.builder()
   * .audioRenditionSets("audioRenditionSets")
   * .m3U8Settings(M3u8SettingsProperty.builder()
   * .audioFramesPerPes(123)
   * .audioPids("audioPids")
   * .ecmPid("ecmPid")
   * .klvBehavior("klvBehavior")
   * .klvDataPids("klvDataPids")
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .patInterval(123)
   * .pcrControl("pcrControl")
   * .pcrPeriod(123)
   * .pcrPid("pcrPid")
   * .pmtInterval(123)
   * .pmtPid("pmtPid")
   * .programNum(123)
   * .scte35Behavior("scte35Behavior")
   * .scte35Pid("scte35Pid")
   * .timedMetadataBehavior("timedMetadataBehavior")
   * .timedMetadataPid("timedMetadataPid")
   * .transportStreamId(123)
   * .videoPid("videoPid")
   * .build())
   * .build())
   * .build())
   * .nameModifier("nameModifier")
   * .segmentModifier("segmentModifier")
   * .build())
   * .mediaPackageOutputSettings(MediaPackageOutputSettingsProperty.builder().build())
   * .msSmoothOutputSettings(MsSmoothOutputSettingsProperty.builder()
   * .h265PackagingType("h265PackagingType")
   * .nameModifier("nameModifier")
   * .build())
   * .multiplexOutputSettings(MultiplexOutputSettingsProperty.builder()
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .build())
   * .rtmpOutputSettings(RtmpOutputSettingsProperty.builder()
   * .certificateMode("certificateMode")
   * .connectionRetryInterval(123)
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .numRetries(123)
   * .build())
   * .udpOutputSettings(UdpOutputSettingsProperty.builder()
   * .bufferMsec(123)
   * .containerSettings(UdpContainerSettingsProperty.builder()
   * .m2TsSettings(M2tsSettingsProperty.builder()
   * .absentInputAudioBehavior("absentInputAudioBehavior")
   * .arib("arib")
   * .aribCaptionsPid("aribCaptionsPid")
   * .aribCaptionsPidControl("aribCaptionsPidControl")
   * .audioBufferModel("audioBufferModel")
   * .audioFramesPerPes(123)
   * .audioPids("audioPids")
   * .audioStreamType("audioStreamType")
   * .bitrate(123)
   * .bufferModel("bufferModel")
   * .ccDescriptor("ccDescriptor")
   * .dvbNitSettings(DvbNitSettingsProperty.builder()
   * .networkId(123)
   * .networkName("networkName")
   * .repInterval(123)
   * .build())
   * .dvbSdtSettings(DvbSdtSettingsProperty.builder()
   * .outputSdt("outputSdt")
   * .repInterval(123)
   * .serviceName("serviceName")
   * .serviceProviderName("serviceProviderName")
   * .build())
   * .dvbSubPids("dvbSubPids")
   * .dvbTdtSettings(DvbTdtSettingsProperty.builder()
   * .repInterval(123)
   * .build())
   * .dvbTeletextPid("dvbTeletextPid")
   * .ebif("ebif")
   * .ebpAudioInterval("ebpAudioInterval")
   * .ebpLookaheadMs(123)
   * .ebpPlacement("ebpPlacement")
   * .ecmPid("ecmPid")
   * .esRateInPes("esRateInPes")
   * .etvPlatformPid("etvPlatformPid")
   * .etvSignalPid("etvSignalPid")
   * .fragmentTime(123)
   * .klv("klv")
   * .klvDataPids("klvDataPids")
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .nullPacketBitrate(123)
   * .patInterval(123)
   * .pcrControl("pcrControl")
   * .pcrPeriod(123)
   * .pcrPid("pcrPid")
   * .pmtInterval(123)
   * .pmtPid("pmtPid")
   * .programNum(123)
   * .rateMode("rateMode")
   * .scte27Pids("scte27Pids")
   * .scte35Control("scte35Control")
   * .scte35Pid("scte35Pid")
   * .scte35PrerollPullupMilliseconds(123)
   * .segmentationMarkers("segmentationMarkers")
   * .segmentationStyle("segmentationStyle")
   * .segmentationTime(123)
   * .timedMetadataBehavior("timedMetadataBehavior")
   * .timedMetadataPid("timedMetadataPid")
   * .transportStreamId(123)
   * .videoPid("videoPid")
   * .build())
   * .build())
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .fecOutputSettings(FecOutputSettingsProperty.builder()
   * .columnDepth(123)
   * .includeFec("includeFec")
   * .rowLength(123)
   * .build())
   * .build())
   * .build())
   * .videoDescriptionName("videoDescriptionName")
   * .build()))
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroup.html)
   */
  public interface OutputGroupProperty {
    /**
     * A custom output group name that you can optionally define.
     *
     * Only letters, numbers, and the underscore character are allowed. The maximum length is 32
     * characters.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroup.html#cfn-medialive-channel-outputgroup-name)
     */
    public fun name(): String? = unwrap(this).getName()

    /**
     * The settings associated with the output group.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroup.html#cfn-medialive-channel-outputgroup-outputgroupsettings)
     */
    public fun outputGroupSettings(): Any? = unwrap(this).getOutputGroupSettings()

    /**
     * The settings for the outputs in the output group.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroup.html#cfn-medialive-channel-outputgroup-outputs)
     */
    public fun outputs(): Any? = unwrap(this).getOutputs()

    /**
     * A builder for [OutputGroupProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param name A custom output group name that you can optionally define.
       * Only letters, numbers, and the underscore character are allowed. The maximum length is 32
       * characters.
       */
      public fun name(name: String)

      /**
       * @param outputGroupSettings The settings associated with the output group.
       */
      public fun outputGroupSettings(outputGroupSettings: IResolvable)

      /**
       * @param outputGroupSettings The settings associated with the output group.
       */
      public fun outputGroupSettings(outputGroupSettings: OutputGroupSettingsProperty)

      /**
       * @param outputGroupSettings The settings associated with the output group.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("dd44c528858248e89969298ab25840235ecefbd41ff8ea355b500fc678dadb4b")
      public
          fun outputGroupSettings(outputGroupSettings: OutputGroupSettingsProperty.Builder.() -> Unit)

      /**
       * @param outputs The settings for the outputs in the output group.
       */
      public fun outputs(outputs: IResolvable)

      /**
       * @param outputs The settings for the outputs in the output group.
       */
      public fun outputs(outputs: List)

      /**
       * @param outputs The settings for the outputs in the output group.
       */
      public fun outputs(vararg outputs: Any)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.OutputGroupProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.OutputGroupProperty.builder()

      /**
       * @param name A custom output group name that you can optionally define.
       * Only letters, numbers, and the underscore character are allowed. The maximum length is 32
       * characters.
       */
      override fun name(name: String) {
        cdkBuilder.name(name)
      }

      /**
       * @param outputGroupSettings The settings associated with the output group.
       */
      override fun outputGroupSettings(outputGroupSettings: IResolvable) {
        cdkBuilder.outputGroupSettings(outputGroupSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param outputGroupSettings The settings associated with the output group.
       */
      override fun outputGroupSettings(outputGroupSettings: OutputGroupSettingsProperty) {
        cdkBuilder.outputGroupSettings(outputGroupSettings.let(OutputGroupSettingsProperty.Companion::unwrap))
      }

      /**
       * @param outputGroupSettings The settings associated with the output group.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("dd44c528858248e89969298ab25840235ecefbd41ff8ea355b500fc678dadb4b")
      override
          fun outputGroupSettings(outputGroupSettings: OutputGroupSettingsProperty.Builder.() -> Unit):
          Unit = outputGroupSettings(OutputGroupSettingsProperty(outputGroupSettings))

      /**
       * @param outputs The settings for the outputs in the output group.
       */
      override fun outputs(outputs: IResolvable) {
        cdkBuilder.outputs(outputs.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param outputs The settings for the outputs in the output group.
       */
      override fun outputs(outputs: List) {
        cdkBuilder.outputs(outputs.map{CdkObjectWrappers.unwrap(it)})
      }

      /**
       * @param outputs The settings for the outputs in the output group.
       */
      override fun outputs(vararg outputs: Any): Unit = outputs(outputs.toList())

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.OutputGroupProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.OutputGroupProperty,
    ) : CdkObject(cdkObject),
        OutputGroupProperty {
      /**
       * A custom output group name that you can optionally define.
       *
       * Only letters, numbers, and the underscore character are allowed. The maximum length is 32
       * characters.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroup.html#cfn-medialive-channel-outputgroup-name)
       */
      override fun name(): String? = unwrap(this).getName()

      /**
       * The settings associated with the output group.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroup.html#cfn-medialive-channel-outputgroup-outputgroupsettings)
       */
      override fun outputGroupSettings(): Any? = unwrap(this).getOutputGroupSettings()

      /**
       * The settings for the outputs in the output group.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroup.html#cfn-medialive-channel-outputgroup-outputs)
       */
      override fun outputs(): Any? = unwrap(this).getOutputs()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): OutputGroupProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.OutputGroupProperty):
          OutputGroupProperty = CdkObjectWrappers.wrap(cdkObject) as? OutputGroupProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: OutputGroupProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.OutputGroupProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.OutputGroupProperty
    }
  }

  /**
   * The configuration of the output group.
   *
   * The parent of this entity is OutputGroup.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * OutputGroupSettingsProperty outputGroupSettingsProperty = OutputGroupSettingsProperty.builder()
   * .archiveGroupSettings(ArchiveGroupSettingsProperty.builder()
   * .archiveCdnSettings(ArchiveCdnSettingsProperty.builder()
   * .archiveS3Settings(ArchiveS3SettingsProperty.builder()
   * .cannedAcl("cannedAcl")
   * .build())
   * .build())
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .rolloverInterval(123)
   * .build())
   * .cmafIngestGroupSettings(CmafIngestGroupSettingsProperty.builder()
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .scte35Type("scte35Type")
   * .segmentLength(123)
   * .segmentLengthUnits("segmentLengthUnits")
   * .sendDelayMs(123)
   * .build())
   * .frameCaptureGroupSettings(FrameCaptureGroupSettingsProperty.builder()
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .frameCaptureCdnSettings(FrameCaptureCdnSettingsProperty.builder()
   * .frameCaptureS3Settings(FrameCaptureS3SettingsProperty.builder()
   * .cannedAcl("cannedAcl")
   * .build())
   * .build())
   * .build())
   * .hlsGroupSettings(HlsGroupSettingsProperty.builder()
   * .adMarkers(List.of("adMarkers"))
   * .baseUrlContent("baseUrlContent")
   * .baseUrlContent1("baseUrlContent1")
   * .baseUrlManifest("baseUrlManifest")
   * .baseUrlManifest1("baseUrlManifest1")
   * .captionLanguageMappings(List.of(CaptionLanguageMappingProperty.builder()
   * .captionChannel(123)
   * .languageCode("languageCode")
   * .languageDescription("languageDescription")
   * .build()))
   * .captionLanguageSetting("captionLanguageSetting")
   * .clientCache("clientCache")
   * .codecSpecification("codecSpecification")
   * .constantIv("constantIv")
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .directoryStructure("directoryStructure")
   * .discontinuityTags("discontinuityTags")
   * .encryptionType("encryptionType")
   * .hlsCdnSettings(HlsCdnSettingsProperty.builder()
   * .hlsAkamaiSettings(HlsAkamaiSettingsProperty.builder()
   * .connectionRetryInterval(123)
   * .filecacheDuration(123)
   * .httpTransferMode("httpTransferMode")
   * .numRetries(123)
   * .restartDelay(123)
   * .salt("salt")
   * .token("token")
   * .build())
   * .hlsBasicPutSettings(HlsBasicPutSettingsProperty.builder()
   * .connectionRetryInterval(123)
   * .filecacheDuration(123)
   * .numRetries(123)
   * .restartDelay(123)
   * .build())
   * .hlsMediaStoreSettings(HlsMediaStoreSettingsProperty.builder()
   * .connectionRetryInterval(123)
   * .filecacheDuration(123)
   * .mediaStoreStorageClass("mediaStoreStorageClass")
   * .numRetries(123)
   * .restartDelay(123)
   * .build())
   * .hlsS3Settings(HlsS3SettingsProperty.builder()
   * .cannedAcl("cannedAcl")
   * .build())
   * .hlsWebdavSettings(HlsWebdavSettingsProperty.builder()
   * .connectionRetryInterval(123)
   * .filecacheDuration(123)
   * .httpTransferMode("httpTransferMode")
   * .numRetries(123)
   * .restartDelay(123)
   * .build())
   * .build())
   * .hlsId3SegmentTagging("hlsId3SegmentTagging")
   * .iFrameOnlyPlaylists("iFrameOnlyPlaylists")
   * .incompleteSegmentBehavior("incompleteSegmentBehavior")
   * .indexNSegments(123)
   * .inputLossAction("inputLossAction")
   * .ivInManifest("ivInManifest")
   * .ivSource("ivSource")
   * .keepSegments(123)
   * .keyFormat("keyFormat")
   * .keyFormatVersions("keyFormatVersions")
   * .keyProviderSettings(KeyProviderSettingsProperty.builder()
   * .staticKeySettings(StaticKeySettingsProperty.builder()
   * .keyProviderServer(InputLocationProperty.builder()
   * .passwordParam("passwordParam")
   * .uri("uri")
   * .username("username")
   * .build())
   * .staticKeyValue("staticKeyValue")
   * .build())
   * .build())
   * .manifestCompression("manifestCompression")
   * .manifestDurationFormat("manifestDurationFormat")
   * .minSegmentLength(123)
   * .mode("mode")
   * .outputSelection("outputSelection")
   * .programDateTime("programDateTime")
   * .programDateTimeClock("programDateTimeClock")
   * .programDateTimePeriod(123)
   * .redundantManifest("redundantManifest")
   * .segmentationMode("segmentationMode")
   * .segmentLength(123)
   * .segmentsPerSubdirectory(123)
   * .streamInfResolution("streamInfResolution")
   * .timedMetadataId3Frame("timedMetadataId3Frame")
   * .timedMetadataId3Period(123)
   * .timestampDeltaMilliseconds(123)
   * .tsFileMode("tsFileMode")
   * .build())
   * .mediaPackageGroupSettings(MediaPackageGroupSettingsProperty.builder()
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .build())
   * .msSmoothGroupSettings(MsSmoothGroupSettingsProperty.builder()
   * .acquisitionPointId("acquisitionPointId")
   * .audioOnlyTimecodeControl("audioOnlyTimecodeControl")
   * .certificateMode("certificateMode")
   * .connectionRetryInterval(123)
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .eventId("eventId")
   * .eventIdMode("eventIdMode")
   * .eventStopBehavior("eventStopBehavior")
   * .filecacheDuration(123)
   * .fragmentLength(123)
   * .inputLossAction("inputLossAction")
   * .numRetries(123)
   * .restartDelay(123)
   * .segmentationMode("segmentationMode")
   * .sendDelayMs(123)
   * .sparseTrackType("sparseTrackType")
   * .streamManifestBehavior("streamManifestBehavior")
   * .timestampOffset("timestampOffset")
   * .timestampOffsetMode("timestampOffsetMode")
   * .build())
   * .multiplexGroupSettings(MultiplexGroupSettingsProperty.builder().build())
   * .rtmpGroupSettings(RtmpGroupSettingsProperty.builder()
   * .adMarkers(List.of("adMarkers"))
   * .authenticationScheme("authenticationScheme")
   * .cacheFullBehavior("cacheFullBehavior")
   * .cacheLength(123)
   * .captionData("captionData")
   * .includeFillerNalUnits("includeFillerNalUnits")
   * .inputLossAction("inputLossAction")
   * .restartDelay(123)
   * .build())
   * .udpGroupSettings(UdpGroupSettingsProperty.builder()
   * .inputLossAction("inputLossAction")
   * .timedMetadataId3Frame("timedMetadataId3Frame")
   * .timedMetadataId3Period(123)
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html)
   */
  public interface OutputGroupSettingsProperty {
    /**
     * The configuration of an archive output group.
     *
     * The parent of this entity is OutputGroupSettings.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html#cfn-medialive-channel-outputgroupsettings-archivegroupsettings)
     */
    public fun archiveGroupSettings(): Any? = unwrap(this).getArchiveGroupSettings()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html#cfn-medialive-channel-outputgroupsettings-cmafingestgroupsettings)
     */
    public fun cmafIngestGroupSettings(): Any? = unwrap(this).getCmafIngestGroupSettings()

    /**
     * The configuration of a frame capture output group.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html#cfn-medialive-channel-outputgroupsettings-framecapturegroupsettings)
     */
    public fun frameCaptureGroupSettings(): Any? = unwrap(this).getFrameCaptureGroupSettings()

    /**
     * The configuration of an HLS output group.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html#cfn-medialive-channel-outputgroupsettings-hlsgroupsettings)
     */
    public fun hlsGroupSettings(): Any? = unwrap(this).getHlsGroupSettings()

    /**
     * The configuration of a MediaPackage output group.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html#cfn-medialive-channel-outputgroupsettings-mediapackagegroupsettings)
     */
    public fun mediaPackageGroupSettings(): Any? = unwrap(this).getMediaPackageGroupSettings()

    /**
     * The configuration of a Microsoft Smooth output group.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html#cfn-medialive-channel-outputgroupsettings-mssmoothgroupsettings)
     */
    public fun msSmoothGroupSettings(): Any? = unwrap(this).getMsSmoothGroupSettings()

    /**
     * The settings for a Multiplex output group.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html#cfn-medialive-channel-outputgroupsettings-multiplexgroupsettings)
     */
    public fun multiplexGroupSettings(): Any? = unwrap(this).getMultiplexGroupSettings()

    /**
     * The configuration of an RTMP output group.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html#cfn-medialive-channel-outputgroupsettings-rtmpgroupsettings)
     */
    public fun rtmpGroupSettings(): Any? = unwrap(this).getRtmpGroupSettings()

    /**
     * The configuration of a UDP output group.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html#cfn-medialive-channel-outputgroupsettings-udpgroupsettings)
     */
    public fun udpGroupSettings(): Any? = unwrap(this).getUdpGroupSettings()

    /**
     * A builder for [OutputGroupSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param archiveGroupSettings The configuration of an archive output group.
       * The parent of this entity is OutputGroupSettings.
       */
      public fun archiveGroupSettings(archiveGroupSettings: IResolvable)

      /**
       * @param archiveGroupSettings The configuration of an archive output group.
       * The parent of this entity is OutputGroupSettings.
       */
      public fun archiveGroupSettings(archiveGroupSettings: ArchiveGroupSettingsProperty)

      /**
       * @param archiveGroupSettings The configuration of an archive output group.
       * The parent of this entity is OutputGroupSettings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("b4974113d5d2cba0b7423c1d194d0262eb916d552b8af23daefcea844afe0a39")
      public
          fun archiveGroupSettings(archiveGroupSettings: ArchiveGroupSettingsProperty.Builder.() -> Unit)

      /**
       * @param cmafIngestGroupSettings the value to be set.
       */
      public fun cmafIngestGroupSettings(cmafIngestGroupSettings: IResolvable)

      /**
       * @param cmafIngestGroupSettings the value to be set.
       */
      public fun cmafIngestGroupSettings(cmafIngestGroupSettings: CmafIngestGroupSettingsProperty)

      /**
       * @param cmafIngestGroupSettings the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ed1fcca4d5bce59158ca5e9d344572b61dc04d5e1fff0d71c13a4287bc436f65")
      public
          fun cmafIngestGroupSettings(cmafIngestGroupSettings: CmafIngestGroupSettingsProperty.Builder.() -> Unit)

      /**
       * @param frameCaptureGroupSettings The configuration of a frame capture output group.
       */
      public fun frameCaptureGroupSettings(frameCaptureGroupSettings: IResolvable)

      /**
       * @param frameCaptureGroupSettings The configuration of a frame capture output group.
       */
      public
          fun frameCaptureGroupSettings(frameCaptureGroupSettings: FrameCaptureGroupSettingsProperty)

      /**
       * @param frameCaptureGroupSettings The configuration of a frame capture output group.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("47f198a83ef74edfc2ae0ee73833037da5b016c1dd5a03421c0fe74859f8b6fc")
      public
          fun frameCaptureGroupSettings(frameCaptureGroupSettings: FrameCaptureGroupSettingsProperty.Builder.() -> Unit)

      /**
       * @param hlsGroupSettings The configuration of an HLS output group.
       */
      public fun hlsGroupSettings(hlsGroupSettings: IResolvable)

      /**
       * @param hlsGroupSettings The configuration of an HLS output group.
       */
      public fun hlsGroupSettings(hlsGroupSettings: HlsGroupSettingsProperty)

      /**
       * @param hlsGroupSettings The configuration of an HLS output group.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("a0d1da1b75520e53dfc2a85505a55e57fe5d2e0e10adb797171ac7b2bf2d3776")
      public fun hlsGroupSettings(hlsGroupSettings: HlsGroupSettingsProperty.Builder.() -> Unit)

      /**
       * @param mediaPackageGroupSettings The configuration of a MediaPackage output group.
       */
      public fun mediaPackageGroupSettings(mediaPackageGroupSettings: IResolvable)

      /**
       * @param mediaPackageGroupSettings The configuration of a MediaPackage output group.
       */
      public
          fun mediaPackageGroupSettings(mediaPackageGroupSettings: MediaPackageGroupSettingsProperty)

      /**
       * @param mediaPackageGroupSettings The configuration of a MediaPackage output group.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("896cf8394af2a685df0c139595ab6b3459517c1b361726932f7ff095a5d785b5")
      public
          fun mediaPackageGroupSettings(mediaPackageGroupSettings: MediaPackageGroupSettingsProperty.Builder.() -> Unit)

      /**
       * @param msSmoothGroupSettings The configuration of a Microsoft Smooth output group.
       */
      public fun msSmoothGroupSettings(msSmoothGroupSettings: IResolvable)

      /**
       * @param msSmoothGroupSettings The configuration of a Microsoft Smooth output group.
       */
      public fun msSmoothGroupSettings(msSmoothGroupSettings: MsSmoothGroupSettingsProperty)

      /**
       * @param msSmoothGroupSettings The configuration of a Microsoft Smooth output group.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("e176d86435dd1cc8f61fc2106bca89a19a04311a732bcd8c1dd9def80845dc90")
      public
          fun msSmoothGroupSettings(msSmoothGroupSettings: MsSmoothGroupSettingsProperty.Builder.() -> Unit)

      /**
       * @param multiplexGroupSettings The settings for a Multiplex output group.
       */
      public fun multiplexGroupSettings(multiplexGroupSettings: IResolvable)

      /**
       * @param multiplexGroupSettings The settings for a Multiplex output group.
       */
      public fun multiplexGroupSettings(multiplexGroupSettings: MultiplexGroupSettingsProperty)

      /**
       * @param multiplexGroupSettings The settings for a Multiplex output group.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("f5a1025262892dbe9108832edb8a9d312421be63a28567111073acfcfe0b813e")
      public
          fun multiplexGroupSettings(multiplexGroupSettings: MultiplexGroupSettingsProperty.Builder.() -> Unit)

      /**
       * @param rtmpGroupSettings The configuration of an RTMP output group.
       */
      public fun rtmpGroupSettings(rtmpGroupSettings: IResolvable)

      /**
       * @param rtmpGroupSettings The configuration of an RTMP output group.
       */
      public fun rtmpGroupSettings(rtmpGroupSettings: RtmpGroupSettingsProperty)

      /**
       * @param rtmpGroupSettings The configuration of an RTMP output group.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("72d6ef372e33f1e29fcb9a476db73cea06e8ed8486049d9531962c64a08e6031")
      public fun rtmpGroupSettings(rtmpGroupSettings: RtmpGroupSettingsProperty.Builder.() -> Unit)

      /**
       * @param udpGroupSettings The configuration of a UDP output group.
       */
      public fun udpGroupSettings(udpGroupSettings: IResolvable)

      /**
       * @param udpGroupSettings The configuration of a UDP output group.
       */
      public fun udpGroupSettings(udpGroupSettings: UdpGroupSettingsProperty)

      /**
       * @param udpGroupSettings The configuration of a UDP output group.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("5305ece5eca3ce2b7308ab74e84d182d681fdfabb98ea58266083bcf05c1fbb3")
      public fun udpGroupSettings(udpGroupSettings: UdpGroupSettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.OutputGroupSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.OutputGroupSettingsProperty.builder()

      /**
       * @param archiveGroupSettings The configuration of an archive output group.
       * The parent of this entity is OutputGroupSettings.
       */
      override fun archiveGroupSettings(archiveGroupSettings: IResolvable) {
        cdkBuilder.archiveGroupSettings(archiveGroupSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param archiveGroupSettings The configuration of an archive output group.
       * The parent of this entity is OutputGroupSettings.
       */
      override fun archiveGroupSettings(archiveGroupSettings: ArchiveGroupSettingsProperty) {
        cdkBuilder.archiveGroupSettings(archiveGroupSettings.let(ArchiveGroupSettingsProperty.Companion::unwrap))
      }

      /**
       * @param archiveGroupSettings The configuration of an archive output group.
       * The parent of this entity is OutputGroupSettings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("b4974113d5d2cba0b7423c1d194d0262eb916d552b8af23daefcea844afe0a39")
      override
          fun archiveGroupSettings(archiveGroupSettings: ArchiveGroupSettingsProperty.Builder.() -> Unit):
          Unit = archiveGroupSettings(ArchiveGroupSettingsProperty(archiveGroupSettings))

      /**
       * @param cmafIngestGroupSettings the value to be set.
       */
      override fun cmafIngestGroupSettings(cmafIngestGroupSettings: IResolvable) {
        cdkBuilder.cmafIngestGroupSettings(cmafIngestGroupSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param cmafIngestGroupSettings the value to be set.
       */
      override
          fun cmafIngestGroupSettings(cmafIngestGroupSettings: CmafIngestGroupSettingsProperty) {
        cdkBuilder.cmafIngestGroupSettings(cmafIngestGroupSettings.let(CmafIngestGroupSettingsProperty.Companion::unwrap))
      }

      /**
       * @param cmafIngestGroupSettings the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ed1fcca4d5bce59158ca5e9d344572b61dc04d5e1fff0d71c13a4287bc436f65")
      override
          fun cmafIngestGroupSettings(cmafIngestGroupSettings: CmafIngestGroupSettingsProperty.Builder.() -> Unit):
          Unit = cmafIngestGroupSettings(CmafIngestGroupSettingsProperty(cmafIngestGroupSettings))

      /**
       * @param frameCaptureGroupSettings The configuration of a frame capture output group.
       */
      override fun frameCaptureGroupSettings(frameCaptureGroupSettings: IResolvable) {
        cdkBuilder.frameCaptureGroupSettings(frameCaptureGroupSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param frameCaptureGroupSettings The configuration of a frame capture output group.
       */
      override
          fun frameCaptureGroupSettings(frameCaptureGroupSettings: FrameCaptureGroupSettingsProperty) {
        cdkBuilder.frameCaptureGroupSettings(frameCaptureGroupSettings.let(FrameCaptureGroupSettingsProperty.Companion::unwrap))
      }

      /**
       * @param frameCaptureGroupSettings The configuration of a frame capture output group.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("47f198a83ef74edfc2ae0ee73833037da5b016c1dd5a03421c0fe74859f8b6fc")
      override
          fun frameCaptureGroupSettings(frameCaptureGroupSettings: FrameCaptureGroupSettingsProperty.Builder.() -> Unit):
          Unit =
          frameCaptureGroupSettings(FrameCaptureGroupSettingsProperty(frameCaptureGroupSettings))

      /**
       * @param hlsGroupSettings The configuration of an HLS output group.
       */
      override fun hlsGroupSettings(hlsGroupSettings: IResolvable) {
        cdkBuilder.hlsGroupSettings(hlsGroupSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param hlsGroupSettings The configuration of an HLS output group.
       */
      override fun hlsGroupSettings(hlsGroupSettings: HlsGroupSettingsProperty) {
        cdkBuilder.hlsGroupSettings(hlsGroupSettings.let(HlsGroupSettingsProperty.Companion::unwrap))
      }

      /**
       * @param hlsGroupSettings The configuration of an HLS output group.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("a0d1da1b75520e53dfc2a85505a55e57fe5d2e0e10adb797171ac7b2bf2d3776")
      override fun hlsGroupSettings(hlsGroupSettings: HlsGroupSettingsProperty.Builder.() -> Unit):
          Unit = hlsGroupSettings(HlsGroupSettingsProperty(hlsGroupSettings))

      /**
       * @param mediaPackageGroupSettings The configuration of a MediaPackage output group.
       */
      override fun mediaPackageGroupSettings(mediaPackageGroupSettings: IResolvable) {
        cdkBuilder.mediaPackageGroupSettings(mediaPackageGroupSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param mediaPackageGroupSettings The configuration of a MediaPackage output group.
       */
      override
          fun mediaPackageGroupSettings(mediaPackageGroupSettings: MediaPackageGroupSettingsProperty) {
        cdkBuilder.mediaPackageGroupSettings(mediaPackageGroupSettings.let(MediaPackageGroupSettingsProperty.Companion::unwrap))
      }

      /**
       * @param mediaPackageGroupSettings The configuration of a MediaPackage output group.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("896cf8394af2a685df0c139595ab6b3459517c1b361726932f7ff095a5d785b5")
      override
          fun mediaPackageGroupSettings(mediaPackageGroupSettings: MediaPackageGroupSettingsProperty.Builder.() -> Unit):
          Unit =
          mediaPackageGroupSettings(MediaPackageGroupSettingsProperty(mediaPackageGroupSettings))

      /**
       * @param msSmoothGroupSettings The configuration of a Microsoft Smooth output group.
       */
      override fun msSmoothGroupSettings(msSmoothGroupSettings: IResolvable) {
        cdkBuilder.msSmoothGroupSettings(msSmoothGroupSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param msSmoothGroupSettings The configuration of a Microsoft Smooth output group.
       */
      override fun msSmoothGroupSettings(msSmoothGroupSettings: MsSmoothGroupSettingsProperty) {
        cdkBuilder.msSmoothGroupSettings(msSmoothGroupSettings.let(MsSmoothGroupSettingsProperty.Companion::unwrap))
      }

      /**
       * @param msSmoothGroupSettings The configuration of a Microsoft Smooth output group.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("e176d86435dd1cc8f61fc2106bca89a19a04311a732bcd8c1dd9def80845dc90")
      override
          fun msSmoothGroupSettings(msSmoothGroupSettings: MsSmoothGroupSettingsProperty.Builder.() -> Unit):
          Unit = msSmoothGroupSettings(MsSmoothGroupSettingsProperty(msSmoothGroupSettings))

      /**
       * @param multiplexGroupSettings The settings for a Multiplex output group.
       */
      override fun multiplexGroupSettings(multiplexGroupSettings: IResolvable) {
        cdkBuilder.multiplexGroupSettings(multiplexGroupSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param multiplexGroupSettings The settings for a Multiplex output group.
       */
      override fun multiplexGroupSettings(multiplexGroupSettings: MultiplexGroupSettingsProperty) {
        cdkBuilder.multiplexGroupSettings(multiplexGroupSettings.let(MultiplexGroupSettingsProperty.Companion::unwrap))
      }

      /**
       * @param multiplexGroupSettings The settings for a Multiplex output group.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("f5a1025262892dbe9108832edb8a9d312421be63a28567111073acfcfe0b813e")
      override
          fun multiplexGroupSettings(multiplexGroupSettings: MultiplexGroupSettingsProperty.Builder.() -> Unit):
          Unit = multiplexGroupSettings(MultiplexGroupSettingsProperty(multiplexGroupSettings))

      /**
       * @param rtmpGroupSettings The configuration of an RTMP output group.
       */
      override fun rtmpGroupSettings(rtmpGroupSettings: IResolvable) {
        cdkBuilder.rtmpGroupSettings(rtmpGroupSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param rtmpGroupSettings The configuration of an RTMP output group.
       */
      override fun rtmpGroupSettings(rtmpGroupSettings: RtmpGroupSettingsProperty) {
        cdkBuilder.rtmpGroupSettings(rtmpGroupSettings.let(RtmpGroupSettingsProperty.Companion::unwrap))
      }

      /**
       * @param rtmpGroupSettings The configuration of an RTMP output group.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("72d6ef372e33f1e29fcb9a476db73cea06e8ed8486049d9531962c64a08e6031")
      override
          fun rtmpGroupSettings(rtmpGroupSettings: RtmpGroupSettingsProperty.Builder.() -> Unit):
          Unit = rtmpGroupSettings(RtmpGroupSettingsProperty(rtmpGroupSettings))

      /**
       * @param udpGroupSettings The configuration of a UDP output group.
       */
      override fun udpGroupSettings(udpGroupSettings: IResolvable) {
        cdkBuilder.udpGroupSettings(udpGroupSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param udpGroupSettings The configuration of a UDP output group.
       */
      override fun udpGroupSettings(udpGroupSettings: UdpGroupSettingsProperty) {
        cdkBuilder.udpGroupSettings(udpGroupSettings.let(UdpGroupSettingsProperty.Companion::unwrap))
      }

      /**
       * @param udpGroupSettings The configuration of a UDP output group.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("5305ece5eca3ce2b7308ab74e84d182d681fdfabb98ea58266083bcf05c1fbb3")
      override fun udpGroupSettings(udpGroupSettings: UdpGroupSettingsProperty.Builder.() -> Unit):
          Unit = udpGroupSettings(UdpGroupSettingsProperty(udpGroupSettings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.OutputGroupSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.OutputGroupSettingsProperty,
    ) : CdkObject(cdkObject),
        OutputGroupSettingsProperty {
      /**
       * The configuration of an archive output group.
       *
       * The parent of this entity is OutputGroupSettings.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html#cfn-medialive-channel-outputgroupsettings-archivegroupsettings)
       */
      override fun archiveGroupSettings(): Any? = unwrap(this).getArchiveGroupSettings()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html#cfn-medialive-channel-outputgroupsettings-cmafingestgroupsettings)
       */
      override fun cmafIngestGroupSettings(): Any? = unwrap(this).getCmafIngestGroupSettings()

      /**
       * The configuration of a frame capture output group.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html#cfn-medialive-channel-outputgroupsettings-framecapturegroupsettings)
       */
      override fun frameCaptureGroupSettings(): Any? = unwrap(this).getFrameCaptureGroupSettings()

      /**
       * The configuration of an HLS output group.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html#cfn-medialive-channel-outputgroupsettings-hlsgroupsettings)
       */
      override fun hlsGroupSettings(): Any? = unwrap(this).getHlsGroupSettings()

      /**
       * The configuration of a MediaPackage output group.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html#cfn-medialive-channel-outputgroupsettings-mediapackagegroupsettings)
       */
      override fun mediaPackageGroupSettings(): Any? = unwrap(this).getMediaPackageGroupSettings()

      /**
       * The configuration of a Microsoft Smooth output group.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html#cfn-medialive-channel-outputgroupsettings-mssmoothgroupsettings)
       */
      override fun msSmoothGroupSettings(): Any? = unwrap(this).getMsSmoothGroupSettings()

      /**
       * The settings for a Multiplex output group.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html#cfn-medialive-channel-outputgroupsettings-multiplexgroupsettings)
       */
      override fun multiplexGroupSettings(): Any? = unwrap(this).getMultiplexGroupSettings()

      /**
       * The configuration of an RTMP output group.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html#cfn-medialive-channel-outputgroupsettings-rtmpgroupsettings)
       */
      override fun rtmpGroupSettings(): Any? = unwrap(this).getRtmpGroupSettings()

      /**
       * The configuration of a UDP output group.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html#cfn-medialive-channel-outputgroupsettings-udpgroupsettings)
       */
      override fun udpGroupSettings(): Any? = unwrap(this).getUdpGroupSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): OutputGroupSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.OutputGroupSettingsProperty):
          OutputGroupSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          OutputGroupSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: OutputGroupSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.OutputGroupSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.OutputGroupSettingsProperty
    }
  }

  /**
   * A reference to an OutputDestination ID that is defined in the channel.
   *
   * This entity is used by ArchiveGroupSettings, FrameCaptureGroupSettings, HlsGroupSettings,
   * MediaPackageGroupSettings, MSSmoothGroupSettings, RtmpOutputSettings, and UdpOutputSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * OutputLocationRefProperty outputLocationRefProperty = OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputlocationref.html)
   */
  public interface OutputLocationRefProperty {
    /**
     * A reference ID for this destination.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputlocationref.html#cfn-medialive-channel-outputlocationref-destinationrefid)
     */
    public fun destinationRefId(): String? = unwrap(this).getDestinationRefId()

    /**
     * A builder for [OutputLocationRefProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param destinationRefId A reference ID for this destination.
       */
      public fun destinationRefId(destinationRefId: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.OutputLocationRefProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.OutputLocationRefProperty.builder()

      /**
       * @param destinationRefId A reference ID for this destination.
       */
      override fun destinationRefId(destinationRefId: String) {
        cdkBuilder.destinationRefId(destinationRefId)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.OutputLocationRefProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.OutputLocationRefProperty,
    ) : CdkObject(cdkObject),
        OutputLocationRefProperty {
      /**
       * A reference ID for this destination.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputlocationref.html#cfn-medialive-channel-outputlocationref-destinationrefid)
       */
      override fun destinationRefId(): String? = unwrap(this).getDestinationRefId()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): OutputLocationRefProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.OutputLocationRefProperty):
          OutputLocationRefProperty = CdkObjectWrappers.wrap(cdkObject) as?
          OutputLocationRefProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: OutputLocationRefProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.OutputLocationRefProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.OutputLocationRefProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * Object pipelineLockingSettings;
   * OutputLockingSettingsProperty outputLockingSettingsProperty =
   * OutputLockingSettingsProperty.builder()
   * .epochLockingSettings(EpochLockingSettingsProperty.builder()
   * .customEpoch("customEpoch")
   * .jamSyncTime("jamSyncTime")
   * .build())
   * .pipelineLockingSettings(pipelineLockingSettings)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputlockingsettings.html)
   */
  public interface OutputLockingSettingsProperty {
    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputlockingsettings.html#cfn-medialive-channel-outputlockingsettings-epochlockingsettings)
     */
    public fun epochLockingSettings(): Any? = unwrap(this).getEpochLockingSettings()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputlockingsettings.html#cfn-medialive-channel-outputlockingsettings-pipelinelockingsettings)
     */
    public fun pipelineLockingSettings(): Any? = unwrap(this).getPipelineLockingSettings()

    /**
     * A builder for [OutputLockingSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param epochLockingSettings the value to be set.
       */
      public fun epochLockingSettings(epochLockingSettings: IResolvable)

      /**
       * @param epochLockingSettings the value to be set.
       */
      public fun epochLockingSettings(epochLockingSettings: EpochLockingSettingsProperty)

      /**
       * @param epochLockingSettings the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("51fbe7732f40fa05bb3647cf51400e4b1bfaa926f508e4856383c430c83b3834")
      public
          fun epochLockingSettings(epochLockingSettings: EpochLockingSettingsProperty.Builder.() -> Unit)

      /**
       * @param pipelineLockingSettings the value to be set.
       */
      public fun pipelineLockingSettings(pipelineLockingSettings: Any)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.OutputLockingSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.OutputLockingSettingsProperty.builder()

      /**
       * @param epochLockingSettings the value to be set.
       */
      override fun epochLockingSettings(epochLockingSettings: IResolvable) {
        cdkBuilder.epochLockingSettings(epochLockingSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param epochLockingSettings the value to be set.
       */
      override fun epochLockingSettings(epochLockingSettings: EpochLockingSettingsProperty) {
        cdkBuilder.epochLockingSettings(epochLockingSettings.let(EpochLockingSettingsProperty.Companion::unwrap))
      }

      /**
       * @param epochLockingSettings the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("51fbe7732f40fa05bb3647cf51400e4b1bfaa926f508e4856383c430c83b3834")
      override
          fun epochLockingSettings(epochLockingSettings: EpochLockingSettingsProperty.Builder.() -> Unit):
          Unit = epochLockingSettings(EpochLockingSettingsProperty(epochLockingSettings))

      /**
       * @param pipelineLockingSettings the value to be set.
       */
      override fun pipelineLockingSettings(pipelineLockingSettings: Any) {
        cdkBuilder.pipelineLockingSettings(pipelineLockingSettings)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.OutputLockingSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.OutputLockingSettingsProperty,
    ) : CdkObject(cdkObject),
        OutputLockingSettingsProperty {
      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputlockingsettings.html#cfn-medialive-channel-outputlockingsettings-epochlockingsettings)
       */
      override fun epochLockingSettings(): Any? = unwrap(this).getEpochLockingSettings()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputlockingsettings.html#cfn-medialive-channel-outputlockingsettings-pipelinelockingsettings)
       */
      override fun pipelineLockingSettings(): Any? = unwrap(this).getPipelineLockingSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): OutputLockingSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.OutputLockingSettingsProperty):
          OutputLockingSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          OutputLockingSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: OutputLockingSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.OutputLockingSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.OutputLockingSettingsProperty
    }
  }

  /**
   * The output settings.
   *
   * The parent of this entity is OutputGroup.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * OutputProperty outputProperty = OutputProperty.builder()
   * .audioDescriptionNames(List.of("audioDescriptionNames"))
   * .captionDescriptionNames(List.of("captionDescriptionNames"))
   * .outputName("outputName")
   * .outputSettings(OutputSettingsProperty.builder()
   * .archiveOutputSettings(ArchiveOutputSettingsProperty.builder()
   * .containerSettings(ArchiveContainerSettingsProperty.builder()
   * .m2TsSettings(M2tsSettingsProperty.builder()
   * .absentInputAudioBehavior("absentInputAudioBehavior")
   * .arib("arib")
   * .aribCaptionsPid("aribCaptionsPid")
   * .aribCaptionsPidControl("aribCaptionsPidControl")
   * .audioBufferModel("audioBufferModel")
   * .audioFramesPerPes(123)
   * .audioPids("audioPids")
   * .audioStreamType("audioStreamType")
   * .bitrate(123)
   * .bufferModel("bufferModel")
   * .ccDescriptor("ccDescriptor")
   * .dvbNitSettings(DvbNitSettingsProperty.builder()
   * .networkId(123)
   * .networkName("networkName")
   * .repInterval(123)
   * .build())
   * .dvbSdtSettings(DvbSdtSettingsProperty.builder()
   * .outputSdt("outputSdt")
   * .repInterval(123)
   * .serviceName("serviceName")
   * .serviceProviderName("serviceProviderName")
   * .build())
   * .dvbSubPids("dvbSubPids")
   * .dvbTdtSettings(DvbTdtSettingsProperty.builder()
   * .repInterval(123)
   * .build())
   * .dvbTeletextPid("dvbTeletextPid")
   * .ebif("ebif")
   * .ebpAudioInterval("ebpAudioInterval")
   * .ebpLookaheadMs(123)
   * .ebpPlacement("ebpPlacement")
   * .ecmPid("ecmPid")
   * .esRateInPes("esRateInPes")
   * .etvPlatformPid("etvPlatformPid")
   * .etvSignalPid("etvSignalPid")
   * .fragmentTime(123)
   * .klv("klv")
   * .klvDataPids("klvDataPids")
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .nullPacketBitrate(123)
   * .patInterval(123)
   * .pcrControl("pcrControl")
   * .pcrPeriod(123)
   * .pcrPid("pcrPid")
   * .pmtInterval(123)
   * .pmtPid("pmtPid")
   * .programNum(123)
   * .rateMode("rateMode")
   * .scte27Pids("scte27Pids")
   * .scte35Control("scte35Control")
   * .scte35Pid("scte35Pid")
   * .scte35PrerollPullupMilliseconds(123)
   * .segmentationMarkers("segmentationMarkers")
   * .segmentationStyle("segmentationStyle")
   * .segmentationTime(123)
   * .timedMetadataBehavior("timedMetadataBehavior")
   * .timedMetadataPid("timedMetadataPid")
   * .transportStreamId(123)
   * .videoPid("videoPid")
   * .build())
   * .rawSettings(RawSettingsProperty.builder().build())
   * .build())
   * .extension("extension")
   * .nameModifier("nameModifier")
   * .build())
   * .cmafIngestOutputSettings(CmafIngestOutputSettingsProperty.builder()
   * .nameModifier("nameModifier")
   * .build())
   * .frameCaptureOutputSettings(FrameCaptureOutputSettingsProperty.builder()
   * .nameModifier("nameModifier")
   * .build())
   * .hlsOutputSettings(HlsOutputSettingsProperty.builder()
   * .h265PackagingType("h265PackagingType")
   * .hlsSettings(HlsSettingsProperty.builder()
   * .audioOnlyHlsSettings(AudioOnlyHlsSettingsProperty.builder()
   * .audioGroupId("audioGroupId")
   * .audioOnlyImage(InputLocationProperty.builder()
   * .passwordParam("passwordParam")
   * .uri("uri")
   * .username("username")
   * .build())
   * .audioTrackType("audioTrackType")
   * .segmentType("segmentType")
   * .build())
   * .fmp4HlsSettings(Fmp4HlsSettingsProperty.builder()
   * .audioRenditionSets("audioRenditionSets")
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .timedMetadataBehavior("timedMetadataBehavior")
   * .build())
   * .frameCaptureHlsSettings(FrameCaptureHlsSettingsProperty.builder().build())
   * .standardHlsSettings(StandardHlsSettingsProperty.builder()
   * .audioRenditionSets("audioRenditionSets")
   * .m3U8Settings(M3u8SettingsProperty.builder()
   * .audioFramesPerPes(123)
   * .audioPids("audioPids")
   * .ecmPid("ecmPid")
   * .klvBehavior("klvBehavior")
   * .klvDataPids("klvDataPids")
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .patInterval(123)
   * .pcrControl("pcrControl")
   * .pcrPeriod(123)
   * .pcrPid("pcrPid")
   * .pmtInterval(123)
   * .pmtPid("pmtPid")
   * .programNum(123)
   * .scte35Behavior("scte35Behavior")
   * .scte35Pid("scte35Pid")
   * .timedMetadataBehavior("timedMetadataBehavior")
   * .timedMetadataPid("timedMetadataPid")
   * .transportStreamId(123)
   * .videoPid("videoPid")
   * .build())
   * .build())
   * .build())
   * .nameModifier("nameModifier")
   * .segmentModifier("segmentModifier")
   * .build())
   * .mediaPackageOutputSettings(MediaPackageOutputSettingsProperty.builder().build())
   * .msSmoothOutputSettings(MsSmoothOutputSettingsProperty.builder()
   * .h265PackagingType("h265PackagingType")
   * .nameModifier("nameModifier")
   * .build())
   * .multiplexOutputSettings(MultiplexOutputSettingsProperty.builder()
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .build())
   * .rtmpOutputSettings(RtmpOutputSettingsProperty.builder()
   * .certificateMode("certificateMode")
   * .connectionRetryInterval(123)
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .numRetries(123)
   * .build())
   * .udpOutputSettings(UdpOutputSettingsProperty.builder()
   * .bufferMsec(123)
   * .containerSettings(UdpContainerSettingsProperty.builder()
   * .m2TsSettings(M2tsSettingsProperty.builder()
   * .absentInputAudioBehavior("absentInputAudioBehavior")
   * .arib("arib")
   * .aribCaptionsPid("aribCaptionsPid")
   * .aribCaptionsPidControl("aribCaptionsPidControl")
   * .audioBufferModel("audioBufferModel")
   * .audioFramesPerPes(123)
   * .audioPids("audioPids")
   * .audioStreamType("audioStreamType")
   * .bitrate(123)
   * .bufferModel("bufferModel")
   * .ccDescriptor("ccDescriptor")
   * .dvbNitSettings(DvbNitSettingsProperty.builder()
   * .networkId(123)
   * .networkName("networkName")
   * .repInterval(123)
   * .build())
   * .dvbSdtSettings(DvbSdtSettingsProperty.builder()
   * .outputSdt("outputSdt")
   * .repInterval(123)
   * .serviceName("serviceName")
   * .serviceProviderName("serviceProviderName")
   * .build())
   * .dvbSubPids("dvbSubPids")
   * .dvbTdtSettings(DvbTdtSettingsProperty.builder()
   * .repInterval(123)
   * .build())
   * .dvbTeletextPid("dvbTeletextPid")
   * .ebif("ebif")
   * .ebpAudioInterval("ebpAudioInterval")
   * .ebpLookaheadMs(123)
   * .ebpPlacement("ebpPlacement")
   * .ecmPid("ecmPid")
   * .esRateInPes("esRateInPes")
   * .etvPlatformPid("etvPlatformPid")
   * .etvSignalPid("etvSignalPid")
   * .fragmentTime(123)
   * .klv("klv")
   * .klvDataPids("klvDataPids")
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .nullPacketBitrate(123)
   * .patInterval(123)
   * .pcrControl("pcrControl")
   * .pcrPeriod(123)
   * .pcrPid("pcrPid")
   * .pmtInterval(123)
   * .pmtPid("pmtPid")
   * .programNum(123)
   * .rateMode("rateMode")
   * .scte27Pids("scte27Pids")
   * .scte35Control("scte35Control")
   * .scte35Pid("scte35Pid")
   * .scte35PrerollPullupMilliseconds(123)
   * .segmentationMarkers("segmentationMarkers")
   * .segmentationStyle("segmentationStyle")
   * .segmentationTime(123)
   * .timedMetadataBehavior("timedMetadataBehavior")
   * .timedMetadataPid("timedMetadataPid")
   * .transportStreamId(123)
   * .videoPid("videoPid")
   * .build())
   * .build())
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .fecOutputSettings(FecOutputSettingsProperty.builder()
   * .columnDepth(123)
   * .includeFec("includeFec")
   * .rowLength(123)
   * .build())
   * .build())
   * .build())
   * .videoDescriptionName("videoDescriptionName")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-output.html)
   */
  public interface OutputProperty {
    /**
     * The names of the audio descriptions that are used as audio sources for this output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-output.html#cfn-medialive-channel-output-audiodescriptionnames)
     */
    public fun audioDescriptionNames(): List = unwrap(this).getAudioDescriptionNames() ?:
        emptyList()

    /**
     * The names of the caption descriptions that are used as captions sources for this output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-output.html#cfn-medialive-channel-output-captiondescriptionnames)
     */
    public fun captionDescriptionNames(): List = unwrap(this).getCaptionDescriptionNames()
        ?: emptyList()

    /**
     * The name that is used to identify an output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-output.html#cfn-medialive-channel-output-outputname)
     */
    public fun outputName(): String? = unwrap(this).getOutputName()

    /**
     * The output type-specific settings.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-output.html#cfn-medialive-channel-output-outputsettings)
     */
    public fun outputSettings(): Any? = unwrap(this).getOutputSettings()

    /**
     * The name of the VideoDescription that is used as the source for this output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-output.html#cfn-medialive-channel-output-videodescriptionname)
     */
    public fun videoDescriptionName(): String? = unwrap(this).getVideoDescriptionName()

    /**
     * A builder for [OutputProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param audioDescriptionNames The names of the audio descriptions that are used as audio
       * sources for this output.
       */
      public fun audioDescriptionNames(audioDescriptionNames: List)

      /**
       * @param audioDescriptionNames The names of the audio descriptions that are used as audio
       * sources for this output.
       */
      public fun audioDescriptionNames(vararg audioDescriptionNames: String)

      /**
       * @param captionDescriptionNames The names of the caption descriptions that are used as
       * captions sources for this output.
       */
      public fun captionDescriptionNames(captionDescriptionNames: List)

      /**
       * @param captionDescriptionNames The names of the caption descriptions that are used as
       * captions sources for this output.
       */
      public fun captionDescriptionNames(vararg captionDescriptionNames: String)

      /**
       * @param outputName The name that is used to identify an output.
       */
      public fun outputName(outputName: String)

      /**
       * @param outputSettings The output type-specific settings.
       */
      public fun outputSettings(outputSettings: IResolvable)

      /**
       * @param outputSettings The output type-specific settings.
       */
      public fun outputSettings(outputSettings: OutputSettingsProperty)

      /**
       * @param outputSettings The output type-specific settings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("8a98bc1584f04fa8a024b754a607451ea1405c99186a5e81bf2f0d23caee1c98")
      public fun outputSettings(outputSettings: OutputSettingsProperty.Builder.() -> Unit)

      /**
       * @param videoDescriptionName The name of the VideoDescription that is used as the source for
       * this output.
       */
      public fun videoDescriptionName(videoDescriptionName: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.OutputProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.OutputProperty.builder()

      /**
       * @param audioDescriptionNames The names of the audio descriptions that are used as audio
       * sources for this output.
       */
      override fun audioDescriptionNames(audioDescriptionNames: List) {
        cdkBuilder.audioDescriptionNames(audioDescriptionNames)
      }

      /**
       * @param audioDescriptionNames The names of the audio descriptions that are used as audio
       * sources for this output.
       */
      override fun audioDescriptionNames(vararg audioDescriptionNames: String): Unit =
          audioDescriptionNames(audioDescriptionNames.toList())

      /**
       * @param captionDescriptionNames The names of the caption descriptions that are used as
       * captions sources for this output.
       */
      override fun captionDescriptionNames(captionDescriptionNames: List) {
        cdkBuilder.captionDescriptionNames(captionDescriptionNames)
      }

      /**
       * @param captionDescriptionNames The names of the caption descriptions that are used as
       * captions sources for this output.
       */
      override fun captionDescriptionNames(vararg captionDescriptionNames: String): Unit =
          captionDescriptionNames(captionDescriptionNames.toList())

      /**
       * @param outputName The name that is used to identify an output.
       */
      override fun outputName(outputName: String) {
        cdkBuilder.outputName(outputName)
      }

      /**
       * @param outputSettings The output type-specific settings.
       */
      override fun outputSettings(outputSettings: IResolvable) {
        cdkBuilder.outputSettings(outputSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param outputSettings The output type-specific settings.
       */
      override fun outputSettings(outputSettings: OutputSettingsProperty) {
        cdkBuilder.outputSettings(outputSettings.let(OutputSettingsProperty.Companion::unwrap))
      }

      /**
       * @param outputSettings The output type-specific settings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("8a98bc1584f04fa8a024b754a607451ea1405c99186a5e81bf2f0d23caee1c98")
      override fun outputSettings(outputSettings: OutputSettingsProperty.Builder.() -> Unit): Unit =
          outputSettings(OutputSettingsProperty(outputSettings))

      /**
       * @param videoDescriptionName The name of the VideoDescription that is used as the source for
       * this output.
       */
      override fun videoDescriptionName(videoDescriptionName: String) {
        cdkBuilder.videoDescriptionName(videoDescriptionName)
      }

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.OutputProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.OutputProperty,
    ) : CdkObject(cdkObject),
        OutputProperty {
      /**
       * The names of the audio descriptions that are used as audio sources for this output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-output.html#cfn-medialive-channel-output-audiodescriptionnames)
       */
      override fun audioDescriptionNames(): List = unwrap(this).getAudioDescriptionNames()
          ?: emptyList()

      /**
       * The names of the caption descriptions that are used as captions sources for this output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-output.html#cfn-medialive-channel-output-captiondescriptionnames)
       */
      override fun captionDescriptionNames(): List =
          unwrap(this).getCaptionDescriptionNames() ?: emptyList()

      /**
       * The name that is used to identify an output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-output.html#cfn-medialive-channel-output-outputname)
       */
      override fun outputName(): String? = unwrap(this).getOutputName()

      /**
       * The output type-specific settings.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-output.html#cfn-medialive-channel-output-outputsettings)
       */
      override fun outputSettings(): Any? = unwrap(this).getOutputSettings()

      /**
       * The name of the VideoDescription that is used as the source for this output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-output.html#cfn-medialive-channel-output-videodescriptionname)
       */
      override fun videoDescriptionName(): String? = unwrap(this).getVideoDescriptionName()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): OutputProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.OutputProperty):
          OutputProperty = CdkObjectWrappers.wrap(cdkObject) as? OutputProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: OutputProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.OutputProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.OutputProperty
    }
  }

  /**
   * The output settings.
   *
   * The parent of this entity is Output.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * OutputSettingsProperty outputSettingsProperty = OutputSettingsProperty.builder()
   * .archiveOutputSettings(ArchiveOutputSettingsProperty.builder()
   * .containerSettings(ArchiveContainerSettingsProperty.builder()
   * .m2TsSettings(M2tsSettingsProperty.builder()
   * .absentInputAudioBehavior("absentInputAudioBehavior")
   * .arib("arib")
   * .aribCaptionsPid("aribCaptionsPid")
   * .aribCaptionsPidControl("aribCaptionsPidControl")
   * .audioBufferModel("audioBufferModel")
   * .audioFramesPerPes(123)
   * .audioPids("audioPids")
   * .audioStreamType("audioStreamType")
   * .bitrate(123)
   * .bufferModel("bufferModel")
   * .ccDescriptor("ccDescriptor")
   * .dvbNitSettings(DvbNitSettingsProperty.builder()
   * .networkId(123)
   * .networkName("networkName")
   * .repInterval(123)
   * .build())
   * .dvbSdtSettings(DvbSdtSettingsProperty.builder()
   * .outputSdt("outputSdt")
   * .repInterval(123)
   * .serviceName("serviceName")
   * .serviceProviderName("serviceProviderName")
   * .build())
   * .dvbSubPids("dvbSubPids")
   * .dvbTdtSettings(DvbTdtSettingsProperty.builder()
   * .repInterval(123)
   * .build())
   * .dvbTeletextPid("dvbTeletextPid")
   * .ebif("ebif")
   * .ebpAudioInterval("ebpAudioInterval")
   * .ebpLookaheadMs(123)
   * .ebpPlacement("ebpPlacement")
   * .ecmPid("ecmPid")
   * .esRateInPes("esRateInPes")
   * .etvPlatformPid("etvPlatformPid")
   * .etvSignalPid("etvSignalPid")
   * .fragmentTime(123)
   * .klv("klv")
   * .klvDataPids("klvDataPids")
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .nullPacketBitrate(123)
   * .patInterval(123)
   * .pcrControl("pcrControl")
   * .pcrPeriod(123)
   * .pcrPid("pcrPid")
   * .pmtInterval(123)
   * .pmtPid("pmtPid")
   * .programNum(123)
   * .rateMode("rateMode")
   * .scte27Pids("scte27Pids")
   * .scte35Control("scte35Control")
   * .scte35Pid("scte35Pid")
   * .scte35PrerollPullupMilliseconds(123)
   * .segmentationMarkers("segmentationMarkers")
   * .segmentationStyle("segmentationStyle")
   * .segmentationTime(123)
   * .timedMetadataBehavior("timedMetadataBehavior")
   * .timedMetadataPid("timedMetadataPid")
   * .transportStreamId(123)
   * .videoPid("videoPid")
   * .build())
   * .rawSettings(RawSettingsProperty.builder().build())
   * .build())
   * .extension("extension")
   * .nameModifier("nameModifier")
   * .build())
   * .cmafIngestOutputSettings(CmafIngestOutputSettingsProperty.builder()
   * .nameModifier("nameModifier")
   * .build())
   * .frameCaptureOutputSettings(FrameCaptureOutputSettingsProperty.builder()
   * .nameModifier("nameModifier")
   * .build())
   * .hlsOutputSettings(HlsOutputSettingsProperty.builder()
   * .h265PackagingType("h265PackagingType")
   * .hlsSettings(HlsSettingsProperty.builder()
   * .audioOnlyHlsSettings(AudioOnlyHlsSettingsProperty.builder()
   * .audioGroupId("audioGroupId")
   * .audioOnlyImage(InputLocationProperty.builder()
   * .passwordParam("passwordParam")
   * .uri("uri")
   * .username("username")
   * .build())
   * .audioTrackType("audioTrackType")
   * .segmentType("segmentType")
   * .build())
   * .fmp4HlsSettings(Fmp4HlsSettingsProperty.builder()
   * .audioRenditionSets("audioRenditionSets")
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .timedMetadataBehavior("timedMetadataBehavior")
   * .build())
   * .frameCaptureHlsSettings(FrameCaptureHlsSettingsProperty.builder().build())
   * .standardHlsSettings(StandardHlsSettingsProperty.builder()
   * .audioRenditionSets("audioRenditionSets")
   * .m3U8Settings(M3u8SettingsProperty.builder()
   * .audioFramesPerPes(123)
   * .audioPids("audioPids")
   * .ecmPid("ecmPid")
   * .klvBehavior("klvBehavior")
   * .klvDataPids("klvDataPids")
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .patInterval(123)
   * .pcrControl("pcrControl")
   * .pcrPeriod(123)
   * .pcrPid("pcrPid")
   * .pmtInterval(123)
   * .pmtPid("pmtPid")
   * .programNum(123)
   * .scte35Behavior("scte35Behavior")
   * .scte35Pid("scte35Pid")
   * .timedMetadataBehavior("timedMetadataBehavior")
   * .timedMetadataPid("timedMetadataPid")
   * .transportStreamId(123)
   * .videoPid("videoPid")
   * .build())
   * .build())
   * .build())
   * .nameModifier("nameModifier")
   * .segmentModifier("segmentModifier")
   * .build())
   * .mediaPackageOutputSettings(MediaPackageOutputSettingsProperty.builder().build())
   * .msSmoothOutputSettings(MsSmoothOutputSettingsProperty.builder()
   * .h265PackagingType("h265PackagingType")
   * .nameModifier("nameModifier")
   * .build())
   * .multiplexOutputSettings(MultiplexOutputSettingsProperty.builder()
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .build())
   * .rtmpOutputSettings(RtmpOutputSettingsProperty.builder()
   * .certificateMode("certificateMode")
   * .connectionRetryInterval(123)
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .numRetries(123)
   * .build())
   * .udpOutputSettings(UdpOutputSettingsProperty.builder()
   * .bufferMsec(123)
   * .containerSettings(UdpContainerSettingsProperty.builder()
   * .m2TsSettings(M2tsSettingsProperty.builder()
   * .absentInputAudioBehavior("absentInputAudioBehavior")
   * .arib("arib")
   * .aribCaptionsPid("aribCaptionsPid")
   * .aribCaptionsPidControl("aribCaptionsPidControl")
   * .audioBufferModel("audioBufferModel")
   * .audioFramesPerPes(123)
   * .audioPids("audioPids")
   * .audioStreamType("audioStreamType")
   * .bitrate(123)
   * .bufferModel("bufferModel")
   * .ccDescriptor("ccDescriptor")
   * .dvbNitSettings(DvbNitSettingsProperty.builder()
   * .networkId(123)
   * .networkName("networkName")
   * .repInterval(123)
   * .build())
   * .dvbSdtSettings(DvbSdtSettingsProperty.builder()
   * .outputSdt("outputSdt")
   * .repInterval(123)
   * .serviceName("serviceName")
   * .serviceProviderName("serviceProviderName")
   * .build())
   * .dvbSubPids("dvbSubPids")
   * .dvbTdtSettings(DvbTdtSettingsProperty.builder()
   * .repInterval(123)
   * .build())
   * .dvbTeletextPid("dvbTeletextPid")
   * .ebif("ebif")
   * .ebpAudioInterval("ebpAudioInterval")
   * .ebpLookaheadMs(123)
   * .ebpPlacement("ebpPlacement")
   * .ecmPid("ecmPid")
   * .esRateInPes("esRateInPes")
   * .etvPlatformPid("etvPlatformPid")
   * .etvSignalPid("etvSignalPid")
   * .fragmentTime(123)
   * .klv("klv")
   * .klvDataPids("klvDataPids")
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .nullPacketBitrate(123)
   * .patInterval(123)
   * .pcrControl("pcrControl")
   * .pcrPeriod(123)
   * .pcrPid("pcrPid")
   * .pmtInterval(123)
   * .pmtPid("pmtPid")
   * .programNum(123)
   * .rateMode("rateMode")
   * .scte27Pids("scte27Pids")
   * .scte35Control("scte35Control")
   * .scte35Pid("scte35Pid")
   * .scte35PrerollPullupMilliseconds(123)
   * .segmentationMarkers("segmentationMarkers")
   * .segmentationStyle("segmentationStyle")
   * .segmentationTime(123)
   * .timedMetadataBehavior("timedMetadataBehavior")
   * .timedMetadataPid("timedMetadataPid")
   * .transportStreamId(123)
   * .videoPid("videoPid")
   * .build())
   * .build())
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .fecOutputSettings(FecOutputSettingsProperty.builder()
   * .columnDepth(123)
   * .includeFec("includeFec")
   * .rowLength(123)
   * .build())
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html)
   */
  public interface OutputSettingsProperty {
    /**
     * The settings for an archive output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html#cfn-medialive-channel-outputsettings-archiveoutputsettings)
     */
    public fun archiveOutputSettings(): Any? = unwrap(this).getArchiveOutputSettings()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html#cfn-medialive-channel-outputsettings-cmafingestoutputsettings)
     */
    public fun cmafIngestOutputSettings(): Any? = unwrap(this).getCmafIngestOutputSettings()

    /**
     * The settings for a frame capture output.
     *
     * The parent of this entity is OutputGroupSettings.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html#cfn-medialive-channel-outputsettings-framecaptureoutputsettings)
     */
    public fun frameCaptureOutputSettings(): Any? = unwrap(this).getFrameCaptureOutputSettings()

    /**
     * The settings for an HLS output.
     *
     * The parent of this entity is OutputGroupSettings.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html#cfn-medialive-channel-outputsettings-hlsoutputsettings)
     */
    public fun hlsOutputSettings(): Any? = unwrap(this).getHlsOutputSettings()

    /**
     * The settings for a MediaPackage output.
     *
     * The parent of this entity is OutputGroupSettings.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html#cfn-medialive-channel-outputsettings-mediapackageoutputsettings)
     */
    public fun mediaPackageOutputSettings(): Any? = unwrap(this).getMediaPackageOutputSettings()

    /**
     * The settings for a Microsoft Smooth output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html#cfn-medialive-channel-outputsettings-mssmoothoutputsettings)
     */
    public fun msSmoothOutputSettings(): Any? = unwrap(this).getMsSmoothOutputSettings()

    /**
     * Configuration of a Multiplex output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html#cfn-medialive-channel-outputsettings-multiplexoutputsettings)
     */
    public fun multiplexOutputSettings(): Any? = unwrap(this).getMultiplexOutputSettings()

    /**
     * The settings for an RTMP output.
     *
     * The parent of this entity is OutputGroupSettings.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html#cfn-medialive-channel-outputsettings-rtmpoutputsettings)
     */
    public fun rtmpOutputSettings(): Any? = unwrap(this).getRtmpOutputSettings()

    /**
     * The settings for a UDP output.
     *
     * The parent of this entity is OutputGroupSettings.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html#cfn-medialive-channel-outputsettings-udpoutputsettings)
     */
    public fun udpOutputSettings(): Any? = unwrap(this).getUdpOutputSettings()

    /**
     * A builder for [OutputSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param archiveOutputSettings The settings for an archive output.
       */
      public fun archiveOutputSettings(archiveOutputSettings: IResolvable)

      /**
       * @param archiveOutputSettings The settings for an archive output.
       */
      public fun archiveOutputSettings(archiveOutputSettings: ArchiveOutputSettingsProperty)

      /**
       * @param archiveOutputSettings The settings for an archive output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("96508601faf036961ed97cb0f41f5db79d1f5f5f32121ddf0d39ebdd9a28397f")
      public
          fun archiveOutputSettings(archiveOutputSettings: ArchiveOutputSettingsProperty.Builder.() -> Unit)

      /**
       * @param cmafIngestOutputSettings the value to be set.
       */
      public fun cmafIngestOutputSettings(cmafIngestOutputSettings: IResolvable)

      /**
       * @param cmafIngestOutputSettings the value to be set.
       */
      public
          fun cmafIngestOutputSettings(cmafIngestOutputSettings: CmafIngestOutputSettingsProperty)

      /**
       * @param cmafIngestOutputSettings the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("adc0d5774e5ba0100a685f267f424733105a44676b86764bce028fe3f11dfdbf")
      public
          fun cmafIngestOutputSettings(cmafIngestOutputSettings: CmafIngestOutputSettingsProperty.Builder.() -> Unit)

      /**
       * @param frameCaptureOutputSettings The settings for a frame capture output.
       * The parent of this entity is OutputGroupSettings.
       */
      public fun frameCaptureOutputSettings(frameCaptureOutputSettings: IResolvable)

      /**
       * @param frameCaptureOutputSettings The settings for a frame capture output.
       * The parent of this entity is OutputGroupSettings.
       */
      public
          fun frameCaptureOutputSettings(frameCaptureOutputSettings: FrameCaptureOutputSettingsProperty)

      /**
       * @param frameCaptureOutputSettings The settings for a frame capture output.
       * The parent of this entity is OutputGroupSettings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("637fc0ef1a6446f62c6bb390d919ce51f7f7ba06671c3f81a3be74893638806c")
      public
          fun frameCaptureOutputSettings(frameCaptureOutputSettings: FrameCaptureOutputSettingsProperty.Builder.() -> Unit)

      /**
       * @param hlsOutputSettings The settings for an HLS output.
       * The parent of this entity is OutputGroupSettings.
       */
      public fun hlsOutputSettings(hlsOutputSettings: IResolvable)

      /**
       * @param hlsOutputSettings The settings for an HLS output.
       * The parent of this entity is OutputGroupSettings.
       */
      public fun hlsOutputSettings(hlsOutputSettings: HlsOutputSettingsProperty)

      /**
       * @param hlsOutputSettings The settings for an HLS output.
       * The parent of this entity is OutputGroupSettings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("e9ec5d8e58c4207407034812b09b7bf670556604d103bd82399fa54d6c831127")
      public fun hlsOutputSettings(hlsOutputSettings: HlsOutputSettingsProperty.Builder.() -> Unit)

      /**
       * @param mediaPackageOutputSettings The settings for a MediaPackage output.
       * The parent of this entity is OutputGroupSettings.
       */
      public fun mediaPackageOutputSettings(mediaPackageOutputSettings: IResolvable)

      /**
       * @param mediaPackageOutputSettings The settings for a MediaPackage output.
       * The parent of this entity is OutputGroupSettings.
       */
      public
          fun mediaPackageOutputSettings(mediaPackageOutputSettings: MediaPackageOutputSettingsProperty)

      /**
       * @param mediaPackageOutputSettings The settings for a MediaPackage output.
       * The parent of this entity is OutputGroupSettings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("042b9266410320f12735b0c2a3782b15ebdc5cb9e9646757f9eaaf441671bd2a")
      public
          fun mediaPackageOutputSettings(mediaPackageOutputSettings: MediaPackageOutputSettingsProperty.Builder.() -> Unit)

      /**
       * @param msSmoothOutputSettings The settings for a Microsoft Smooth output.
       */
      public fun msSmoothOutputSettings(msSmoothOutputSettings: IResolvable)

      /**
       * @param msSmoothOutputSettings The settings for a Microsoft Smooth output.
       */
      public fun msSmoothOutputSettings(msSmoothOutputSettings: MsSmoothOutputSettingsProperty)

      /**
       * @param msSmoothOutputSettings The settings for a Microsoft Smooth output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("3dc1bd2f0596c3c621f61c1f7dafb428b985a8888d003104f9da9190629b330a")
      public
          fun msSmoothOutputSettings(msSmoothOutputSettings: MsSmoothOutputSettingsProperty.Builder.() -> Unit)

      /**
       * @param multiplexOutputSettings Configuration of a Multiplex output.
       */
      public fun multiplexOutputSettings(multiplexOutputSettings: IResolvable)

      /**
       * @param multiplexOutputSettings Configuration of a Multiplex output.
       */
      public fun multiplexOutputSettings(multiplexOutputSettings: MultiplexOutputSettingsProperty)

      /**
       * @param multiplexOutputSettings Configuration of a Multiplex output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("4f6fb822bb074ba6559b06e35d4c89d57d22c4409e7f385aaf9adced8e9e4cfe")
      public
          fun multiplexOutputSettings(multiplexOutputSettings: MultiplexOutputSettingsProperty.Builder.() -> Unit)

      /**
       * @param rtmpOutputSettings The settings for an RTMP output.
       * The parent of this entity is OutputGroupSettings.
       */
      public fun rtmpOutputSettings(rtmpOutputSettings: IResolvable)

      /**
       * @param rtmpOutputSettings The settings for an RTMP output.
       * The parent of this entity is OutputGroupSettings.
       */
      public fun rtmpOutputSettings(rtmpOutputSettings: RtmpOutputSettingsProperty)

      /**
       * @param rtmpOutputSettings The settings for an RTMP output.
       * The parent of this entity is OutputGroupSettings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("1064347474fea1517c2b20cc253c8021728d3a360fd5d9eb92580980b9c5a302")
      public
          fun rtmpOutputSettings(rtmpOutputSettings: RtmpOutputSettingsProperty.Builder.() -> Unit)

      /**
       * @param udpOutputSettings The settings for a UDP output.
       * The parent of this entity is OutputGroupSettings.
       */
      public fun udpOutputSettings(udpOutputSettings: IResolvable)

      /**
       * @param udpOutputSettings The settings for a UDP output.
       * The parent of this entity is OutputGroupSettings.
       */
      public fun udpOutputSettings(udpOutputSettings: UdpOutputSettingsProperty)

      /**
       * @param udpOutputSettings The settings for a UDP output.
       * The parent of this entity is OutputGroupSettings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ea3fc8126a3b4ba21b6fabc3233e4d25413a43a84dcd5f1c23dcee8909657d3e")
      public fun udpOutputSettings(udpOutputSettings: UdpOutputSettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.OutputSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.OutputSettingsProperty.builder()

      /**
       * @param archiveOutputSettings The settings for an archive output.
       */
      override fun archiveOutputSettings(archiveOutputSettings: IResolvable) {
        cdkBuilder.archiveOutputSettings(archiveOutputSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param archiveOutputSettings The settings for an archive output.
       */
      override fun archiveOutputSettings(archiveOutputSettings: ArchiveOutputSettingsProperty) {
        cdkBuilder.archiveOutputSettings(archiveOutputSettings.let(ArchiveOutputSettingsProperty.Companion::unwrap))
      }

      /**
       * @param archiveOutputSettings The settings for an archive output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("96508601faf036961ed97cb0f41f5db79d1f5f5f32121ddf0d39ebdd9a28397f")
      override
          fun archiveOutputSettings(archiveOutputSettings: ArchiveOutputSettingsProperty.Builder.() -> Unit):
          Unit = archiveOutputSettings(ArchiveOutputSettingsProperty(archiveOutputSettings))

      /**
       * @param cmafIngestOutputSettings the value to be set.
       */
      override fun cmafIngestOutputSettings(cmafIngestOutputSettings: IResolvable) {
        cdkBuilder.cmafIngestOutputSettings(cmafIngestOutputSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param cmafIngestOutputSettings the value to be set.
       */
      override
          fun cmafIngestOutputSettings(cmafIngestOutputSettings: CmafIngestOutputSettingsProperty) {
        cdkBuilder.cmafIngestOutputSettings(cmafIngestOutputSettings.let(CmafIngestOutputSettingsProperty.Companion::unwrap))
      }

      /**
       * @param cmafIngestOutputSettings the value to be set.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("adc0d5774e5ba0100a685f267f424733105a44676b86764bce028fe3f11dfdbf")
      override
          fun cmafIngestOutputSettings(cmafIngestOutputSettings: CmafIngestOutputSettingsProperty.Builder.() -> Unit):
          Unit =
          cmafIngestOutputSettings(CmafIngestOutputSettingsProperty(cmafIngestOutputSettings))

      /**
       * @param frameCaptureOutputSettings The settings for a frame capture output.
       * The parent of this entity is OutputGroupSettings.
       */
      override fun frameCaptureOutputSettings(frameCaptureOutputSettings: IResolvable) {
        cdkBuilder.frameCaptureOutputSettings(frameCaptureOutputSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param frameCaptureOutputSettings The settings for a frame capture output.
       * The parent of this entity is OutputGroupSettings.
       */
      override
          fun frameCaptureOutputSettings(frameCaptureOutputSettings: FrameCaptureOutputSettingsProperty) {
        cdkBuilder.frameCaptureOutputSettings(frameCaptureOutputSettings.let(FrameCaptureOutputSettingsProperty.Companion::unwrap))
      }

      /**
       * @param frameCaptureOutputSettings The settings for a frame capture output.
       * The parent of this entity is OutputGroupSettings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("637fc0ef1a6446f62c6bb390d919ce51f7f7ba06671c3f81a3be74893638806c")
      override
          fun frameCaptureOutputSettings(frameCaptureOutputSettings: FrameCaptureOutputSettingsProperty.Builder.() -> Unit):
          Unit =
          frameCaptureOutputSettings(FrameCaptureOutputSettingsProperty(frameCaptureOutputSettings))

      /**
       * @param hlsOutputSettings The settings for an HLS output.
       * The parent of this entity is OutputGroupSettings.
       */
      override fun hlsOutputSettings(hlsOutputSettings: IResolvable) {
        cdkBuilder.hlsOutputSettings(hlsOutputSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param hlsOutputSettings The settings for an HLS output.
       * The parent of this entity is OutputGroupSettings.
       */
      override fun hlsOutputSettings(hlsOutputSettings: HlsOutputSettingsProperty) {
        cdkBuilder.hlsOutputSettings(hlsOutputSettings.let(HlsOutputSettingsProperty.Companion::unwrap))
      }

      /**
       * @param hlsOutputSettings The settings for an HLS output.
       * The parent of this entity is OutputGroupSettings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("e9ec5d8e58c4207407034812b09b7bf670556604d103bd82399fa54d6c831127")
      override
          fun hlsOutputSettings(hlsOutputSettings: HlsOutputSettingsProperty.Builder.() -> Unit):
          Unit = hlsOutputSettings(HlsOutputSettingsProperty(hlsOutputSettings))

      /**
       * @param mediaPackageOutputSettings The settings for a MediaPackage output.
       * The parent of this entity is OutputGroupSettings.
       */
      override fun mediaPackageOutputSettings(mediaPackageOutputSettings: IResolvable) {
        cdkBuilder.mediaPackageOutputSettings(mediaPackageOutputSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param mediaPackageOutputSettings The settings for a MediaPackage output.
       * The parent of this entity is OutputGroupSettings.
       */
      override
          fun mediaPackageOutputSettings(mediaPackageOutputSettings: MediaPackageOutputSettingsProperty) {
        cdkBuilder.mediaPackageOutputSettings(mediaPackageOutputSettings.let(MediaPackageOutputSettingsProperty.Companion::unwrap))
      }

      /**
       * @param mediaPackageOutputSettings The settings for a MediaPackage output.
       * The parent of this entity is OutputGroupSettings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("042b9266410320f12735b0c2a3782b15ebdc5cb9e9646757f9eaaf441671bd2a")
      override
          fun mediaPackageOutputSettings(mediaPackageOutputSettings: MediaPackageOutputSettingsProperty.Builder.() -> Unit):
          Unit =
          mediaPackageOutputSettings(MediaPackageOutputSettingsProperty(mediaPackageOutputSettings))

      /**
       * @param msSmoothOutputSettings The settings for a Microsoft Smooth output.
       */
      override fun msSmoothOutputSettings(msSmoothOutputSettings: IResolvable) {
        cdkBuilder.msSmoothOutputSettings(msSmoothOutputSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param msSmoothOutputSettings The settings for a Microsoft Smooth output.
       */
      override fun msSmoothOutputSettings(msSmoothOutputSettings: MsSmoothOutputSettingsProperty) {
        cdkBuilder.msSmoothOutputSettings(msSmoothOutputSettings.let(MsSmoothOutputSettingsProperty.Companion::unwrap))
      }

      /**
       * @param msSmoothOutputSettings The settings for a Microsoft Smooth output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("3dc1bd2f0596c3c621f61c1f7dafb428b985a8888d003104f9da9190629b330a")
      override
          fun msSmoothOutputSettings(msSmoothOutputSettings: MsSmoothOutputSettingsProperty.Builder.() -> Unit):
          Unit = msSmoothOutputSettings(MsSmoothOutputSettingsProperty(msSmoothOutputSettings))

      /**
       * @param multiplexOutputSettings Configuration of a Multiplex output.
       */
      override fun multiplexOutputSettings(multiplexOutputSettings: IResolvable) {
        cdkBuilder.multiplexOutputSettings(multiplexOutputSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param multiplexOutputSettings Configuration of a Multiplex output.
       */
      override
          fun multiplexOutputSettings(multiplexOutputSettings: MultiplexOutputSettingsProperty) {
        cdkBuilder.multiplexOutputSettings(multiplexOutputSettings.let(MultiplexOutputSettingsProperty.Companion::unwrap))
      }

      /**
       * @param multiplexOutputSettings Configuration of a Multiplex output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("4f6fb822bb074ba6559b06e35d4c89d57d22c4409e7f385aaf9adced8e9e4cfe")
      override
          fun multiplexOutputSettings(multiplexOutputSettings: MultiplexOutputSettingsProperty.Builder.() -> Unit):
          Unit = multiplexOutputSettings(MultiplexOutputSettingsProperty(multiplexOutputSettings))

      /**
       * @param rtmpOutputSettings The settings for an RTMP output.
       * The parent of this entity is OutputGroupSettings.
       */
      override fun rtmpOutputSettings(rtmpOutputSettings: IResolvable) {
        cdkBuilder.rtmpOutputSettings(rtmpOutputSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param rtmpOutputSettings The settings for an RTMP output.
       * The parent of this entity is OutputGroupSettings.
       */
      override fun rtmpOutputSettings(rtmpOutputSettings: RtmpOutputSettingsProperty) {
        cdkBuilder.rtmpOutputSettings(rtmpOutputSettings.let(RtmpOutputSettingsProperty.Companion::unwrap))
      }

      /**
       * @param rtmpOutputSettings The settings for an RTMP output.
       * The parent of this entity is OutputGroupSettings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("1064347474fea1517c2b20cc253c8021728d3a360fd5d9eb92580980b9c5a302")
      override
          fun rtmpOutputSettings(rtmpOutputSettings: RtmpOutputSettingsProperty.Builder.() -> Unit):
          Unit = rtmpOutputSettings(RtmpOutputSettingsProperty(rtmpOutputSettings))

      /**
       * @param udpOutputSettings The settings for a UDP output.
       * The parent of this entity is OutputGroupSettings.
       */
      override fun udpOutputSettings(udpOutputSettings: IResolvable) {
        cdkBuilder.udpOutputSettings(udpOutputSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param udpOutputSettings The settings for a UDP output.
       * The parent of this entity is OutputGroupSettings.
       */
      override fun udpOutputSettings(udpOutputSettings: UdpOutputSettingsProperty) {
        cdkBuilder.udpOutputSettings(udpOutputSettings.let(UdpOutputSettingsProperty.Companion::unwrap))
      }

      /**
       * @param udpOutputSettings The settings for a UDP output.
       * The parent of this entity is OutputGroupSettings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ea3fc8126a3b4ba21b6fabc3233e4d25413a43a84dcd5f1c23dcee8909657d3e")
      override
          fun udpOutputSettings(udpOutputSettings: UdpOutputSettingsProperty.Builder.() -> Unit):
          Unit = udpOutputSettings(UdpOutputSettingsProperty(udpOutputSettings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.OutputSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.OutputSettingsProperty,
    ) : CdkObject(cdkObject),
        OutputSettingsProperty {
      /**
       * The settings for an archive output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html#cfn-medialive-channel-outputsettings-archiveoutputsettings)
       */
      override fun archiveOutputSettings(): Any? = unwrap(this).getArchiveOutputSettings()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html#cfn-medialive-channel-outputsettings-cmafingestoutputsettings)
       */
      override fun cmafIngestOutputSettings(): Any? = unwrap(this).getCmafIngestOutputSettings()

      /**
       * The settings for a frame capture output.
       *
       * The parent of this entity is OutputGroupSettings.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html#cfn-medialive-channel-outputsettings-framecaptureoutputsettings)
       */
      override fun frameCaptureOutputSettings(): Any? = unwrap(this).getFrameCaptureOutputSettings()

      /**
       * The settings for an HLS output.
       *
       * The parent of this entity is OutputGroupSettings.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html#cfn-medialive-channel-outputsettings-hlsoutputsettings)
       */
      override fun hlsOutputSettings(): Any? = unwrap(this).getHlsOutputSettings()

      /**
       * The settings for a MediaPackage output.
       *
       * The parent of this entity is OutputGroupSettings.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html#cfn-medialive-channel-outputsettings-mediapackageoutputsettings)
       */
      override fun mediaPackageOutputSettings(): Any? = unwrap(this).getMediaPackageOutputSettings()

      /**
       * The settings for a Microsoft Smooth output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html#cfn-medialive-channel-outputsettings-mssmoothoutputsettings)
       */
      override fun msSmoothOutputSettings(): Any? = unwrap(this).getMsSmoothOutputSettings()

      /**
       * Configuration of a Multiplex output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html#cfn-medialive-channel-outputsettings-multiplexoutputsettings)
       */
      override fun multiplexOutputSettings(): Any? = unwrap(this).getMultiplexOutputSettings()

      /**
       * The settings for an RTMP output.
       *
       * The parent of this entity is OutputGroupSettings.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html#cfn-medialive-channel-outputsettings-rtmpoutputsettings)
       */
      override fun rtmpOutputSettings(): Any? = unwrap(this).getRtmpOutputSettings()

      /**
       * The settings for a UDP output.
       *
       * The parent of this entity is OutputGroupSettings.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html#cfn-medialive-channel-outputsettings-udpoutputsettings)
       */
      override fun udpOutputSettings(): Any? = unwrap(this).getUdpOutputSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): OutputSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.OutputSettingsProperty):
          OutputSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? OutputSettingsProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: OutputSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.OutputSettingsProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.OutputSettingsProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * PassThroughSettingsProperty passThroughSettingsProperty =
   * PassThroughSettingsProperty.builder().build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-passthroughsettings.html)
   */
  public interface PassThroughSettingsProperty {
    /**
     * A builder for [PassThroughSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.PassThroughSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.PassThroughSettingsProperty.builder()

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.PassThroughSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.PassThroughSettingsProperty,
    ) : CdkObject(cdkObject),
        PassThroughSettingsProperty

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): PassThroughSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.PassThroughSettingsProperty):
          PassThroughSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          PassThroughSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: PassThroughSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.PassThroughSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.PassThroughSettingsProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * RawSettingsProperty rawSettingsProperty = RawSettingsProperty.builder().build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rawsettings.html)
   */
  public interface RawSettingsProperty {
    /**
     * A builder for [RawSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.RawSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.RawSettingsProperty.builder()

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.RawSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.RawSettingsProperty,
    ) : CdkObject(cdkObject),
        RawSettingsProperty

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): RawSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.RawSettingsProperty):
          RawSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? RawSettingsProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: RawSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.RawSettingsProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.RawSettingsProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * Rec601SettingsProperty rec601SettingsProperty = Rec601SettingsProperty.builder().build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rec601settings.html)
   */
  public interface Rec601SettingsProperty {
    /**
     * A builder for [Rec601SettingsProperty]
     */
    @CdkDslMarker
    public interface Builder

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.Rec601SettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.Rec601SettingsProperty.builder()

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.Rec601SettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Rec601SettingsProperty,
    ) : CdkObject(cdkObject),
        Rec601SettingsProperty

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): Rec601SettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Rec601SettingsProperty):
          Rec601SettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? Rec601SettingsProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: Rec601SettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.Rec601SettingsProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.Rec601SettingsProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * Rec709SettingsProperty rec709SettingsProperty = Rec709SettingsProperty.builder().build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rec709settings.html)
   */
  public interface Rec709SettingsProperty {
    /**
     * A builder for [Rec709SettingsProperty]
     */
    @CdkDslMarker
    public interface Builder

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.Rec709SettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.Rec709SettingsProperty.builder()

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.Rec709SettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Rec709SettingsProperty,
    ) : CdkObject(cdkObject),
        Rec709SettingsProperty

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): Rec709SettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Rec709SettingsProperty):
          Rec709SettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? Rec709SettingsProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: Rec709SettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.Rec709SettingsProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.Rec709SettingsProperty
    }
  }

  /**
   * The settings for remixing audio in the output.
   *
   * The parent of this entity is AudioDescription.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * RemixSettingsProperty remixSettingsProperty = RemixSettingsProperty.builder()
   * .channelMappings(List.of(AudioChannelMappingProperty.builder()
   * .inputChannelLevels(List.of(InputChannelLevelProperty.builder()
   * .gain(123)
   * .inputChannel(123)
   * .build()))
   * .outputChannel(123)
   * .build()))
   * .channelsIn(123)
   * .channelsOut(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-remixsettings.html)
   */
  public interface RemixSettingsProperty {
    /**
     * A mapping of input channels to output channels, with appropriate gain adjustments.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-remixsettings.html#cfn-medialive-channel-remixsettings-channelmappings)
     */
    public fun channelMappings(): Any? = unwrap(this).getChannelMappings()

    /**
     * The number of input channels to be used.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-remixsettings.html#cfn-medialive-channel-remixsettings-channelsin)
     */
    public fun channelsIn(): Number? = unwrap(this).getChannelsIn()

    /**
     * The number of output channels to be produced.
     *
     * Valid values: 1, 2, 4, 6, 8.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-remixsettings.html#cfn-medialive-channel-remixsettings-channelsout)
     */
    public fun channelsOut(): Number? = unwrap(this).getChannelsOut()

    /**
     * A builder for [RemixSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param channelMappings A mapping of input channels to output channels, with appropriate
       * gain adjustments.
       */
      public fun channelMappings(channelMappings: IResolvable)

      /**
       * @param channelMappings A mapping of input channels to output channels, with appropriate
       * gain adjustments.
       */
      public fun channelMappings(channelMappings: List)

      /**
       * @param channelMappings A mapping of input channels to output channels, with appropriate
       * gain adjustments.
       */
      public fun channelMappings(vararg channelMappings: Any)

      /**
       * @param channelsIn The number of input channels to be used.
       */
      public fun channelsIn(channelsIn: Number)

      /**
       * @param channelsOut The number of output channels to be produced.
       * Valid values: 1, 2, 4, 6, 8.
       */
      public fun channelsOut(channelsOut: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.RemixSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.RemixSettingsProperty.builder()

      /**
       * @param channelMappings A mapping of input channels to output channels, with appropriate
       * gain adjustments.
       */
      override fun channelMappings(channelMappings: IResolvable) {
        cdkBuilder.channelMappings(channelMappings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param channelMappings A mapping of input channels to output channels, with appropriate
       * gain adjustments.
       */
      override fun channelMappings(channelMappings: List) {
        cdkBuilder.channelMappings(channelMappings.map{CdkObjectWrappers.unwrap(it)})
      }

      /**
       * @param channelMappings A mapping of input channels to output channels, with appropriate
       * gain adjustments.
       */
      override fun channelMappings(vararg channelMappings: Any): Unit =
          channelMappings(channelMappings.toList())

      /**
       * @param channelsIn The number of input channels to be used.
       */
      override fun channelsIn(channelsIn: Number) {
        cdkBuilder.channelsIn(channelsIn)
      }

      /**
       * @param channelsOut The number of output channels to be produced.
       * Valid values: 1, 2, 4, 6, 8.
       */
      override fun channelsOut(channelsOut: Number) {
        cdkBuilder.channelsOut(channelsOut)
      }

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.RemixSettingsProperty
          = cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.RemixSettingsProperty,
    ) : CdkObject(cdkObject),
        RemixSettingsProperty {
      /**
       * A mapping of input channels to output channels, with appropriate gain adjustments.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-remixsettings.html#cfn-medialive-channel-remixsettings-channelmappings)
       */
      override fun channelMappings(): Any? = unwrap(this).getChannelMappings()

      /**
       * The number of input channels to be used.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-remixsettings.html#cfn-medialive-channel-remixsettings-channelsin)
       */
      override fun channelsIn(): Number? = unwrap(this).getChannelsIn()

      /**
       * The number of output channels to be produced.
       *
       * Valid values: 1, 2, 4, 6, 8.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-remixsettings.html#cfn-medialive-channel-remixsettings-channelsout)
       */
      override fun channelsOut(): Number? = unwrap(this).getChannelsOut()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): RemixSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.RemixSettingsProperty):
          RemixSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? RemixSettingsProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: RemixSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.RemixSettingsProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.RemixSettingsProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * RtmpCaptionInfoDestinationSettingsProperty rtmpCaptionInfoDestinationSettingsProperty =
   * RtmpCaptionInfoDestinationSettingsProperty.builder().build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpcaptioninfodestinationsettings.html)
   */
  public interface RtmpCaptionInfoDestinationSettingsProperty {
    /**
     * A builder for [RtmpCaptionInfoDestinationSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.RtmpCaptionInfoDestinationSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.RtmpCaptionInfoDestinationSettingsProperty.builder()

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.RtmpCaptionInfoDestinationSettingsProperty
          = cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.RtmpCaptionInfoDestinationSettingsProperty,
    ) : CdkObject(cdkObject),
        RtmpCaptionInfoDestinationSettingsProperty

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          RtmpCaptionInfoDestinationSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.RtmpCaptionInfoDestinationSettingsProperty):
          RtmpCaptionInfoDestinationSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          RtmpCaptionInfoDestinationSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: RtmpCaptionInfoDestinationSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.RtmpCaptionInfoDestinationSettingsProperty
          = (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.RtmpCaptionInfoDestinationSettingsProperty
    }
  }

  /**
   * The configuration of an RTMP output group.
   *
   * The parent of this entity is OutputGroupSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * RtmpGroupSettingsProperty rtmpGroupSettingsProperty = RtmpGroupSettingsProperty.builder()
   * .adMarkers(List.of("adMarkers"))
   * .authenticationScheme("authenticationScheme")
   * .cacheFullBehavior("cacheFullBehavior")
   * .cacheLength(123)
   * .captionData("captionData")
   * .includeFillerNalUnits("includeFillerNalUnits")
   * .inputLossAction("inputLossAction")
   * .restartDelay(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html)
   */
  public interface RtmpGroupSettingsProperty {
    /**
     * Choose the ad marker type for this output group.
     *
     * MediaLive will create a message based on the content of each SCTE-35 message, format it for
     * that marker type, and insert it in the datastream.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-admarkers)
     */
    public fun adMarkers(): List = unwrap(this).getAdMarkers() ?: emptyList()

    /**
     * An authentication scheme to use when connecting with a CDN.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-authenticationscheme)
     */
    public fun authenticationScheme(): String? = unwrap(this).getAuthenticationScheme()

    /**
     * Controls behavior when the content cache fills up.
     *
     * If a remote origin server stalls the RTMP connection and doesn't accept content fast enough,
     * the media cache fills up. When the cache reaches the duration specified by cacheLength, the
     * cache stops accepting new content. If set to disconnectImmediately, the RTMP output forces a
     * disconnect. Clear the media cache, and reconnect after restartDelay seconds. If set to
     * waitForServer, the RTMP output waits up to 5 minutes to allow the origin server to begin
     * accepting data again.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-cachefullbehavior)
     */
    public fun cacheFullBehavior(): String? = unwrap(this).getCacheFullBehavior()

    /**
     * The cache length, in seconds, that is used to calculate buffer size.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-cachelength)
     */
    public fun cacheLength(): Number? = unwrap(this).getCacheLength()

    /**
     * Controls the types of data that pass to onCaptionInfo outputs.
     *
     * If set to all, 608 and 708 carried DTVCC data is passed. If set to field1AndField2608, DTVCC
     * data is stripped out, but 608 data from both fields is passed. If set to field1608, only the
     * data carried in 608 from field 1 video is passed.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-captiondata)
     */
    public fun captionData(): String? = unwrap(this).getCaptionData()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-includefillernalunits)
     */
    public fun includeFillerNalUnits(): String? = unwrap(this).getIncludeFillerNalUnits()

    /**
     * Controls the behavior of this RTMP group if the input becomes unavailable.
     *
     * emitOutput: Emit a slate until the input returns. pauseOutput: Stop transmitting data until
     * the input returns. This does not close the underlying RTMP connection.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-inputlossaction)
     */
    public fun inputLossAction(): String? = unwrap(this).getInputLossAction()

    /**
     * If a streaming output fails, the number of seconds to wait until a restart is initiated.
     *
     * A value of 0 means never restart.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-restartdelay)
     */
    public fun restartDelay(): Number? = unwrap(this).getRestartDelay()

    /**
     * A builder for [RtmpGroupSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param adMarkers Choose the ad marker type for this output group.
       * MediaLive will create a message based on the content of each SCTE-35 message, format it for
       * that marker type, and insert it in the datastream.
       */
      public fun adMarkers(adMarkers: List)

      /**
       * @param adMarkers Choose the ad marker type for this output group.
       * MediaLive will create a message based on the content of each SCTE-35 message, format it for
       * that marker type, and insert it in the datastream.
       */
      public fun adMarkers(vararg adMarkers: String)

      /**
       * @param authenticationScheme An authentication scheme to use when connecting with a CDN.
       */
      public fun authenticationScheme(authenticationScheme: String)

      /**
       * @param cacheFullBehavior Controls behavior when the content cache fills up.
       * If a remote origin server stalls the RTMP connection and doesn't accept content fast
       * enough, the media cache fills up. When the cache reaches the duration specified by
       * cacheLength, the cache stops accepting new content. If set to disconnectImmediately, the RTMP
       * output forces a disconnect. Clear the media cache, and reconnect after restartDelay seconds.
       * If set to waitForServer, the RTMP output waits up to 5 minutes to allow the origin server to
       * begin accepting data again.
       */
      public fun cacheFullBehavior(cacheFullBehavior: String)

      /**
       * @param cacheLength The cache length, in seconds, that is used to calculate buffer size.
       */
      public fun cacheLength(cacheLength: Number)

      /**
       * @param captionData Controls the types of data that pass to onCaptionInfo outputs.
       * If set to all, 608 and 708 carried DTVCC data is passed. If set to field1AndField2608,
       * DTVCC data is stripped out, but 608 data from both fields is passed. If set to field1608, only
       * the data carried in 608 from field 1 video is passed.
       */
      public fun captionData(captionData: String)

      /**
       * @param includeFillerNalUnits the value to be set.
       */
      public fun includeFillerNalUnits(includeFillerNalUnits: String)

      /**
       * @param inputLossAction Controls the behavior of this RTMP group if the input becomes
       * unavailable.
       * emitOutput: Emit a slate until the input returns. pauseOutput: Stop transmitting data until
       * the input returns. This does not close the underlying RTMP connection.
       */
      public fun inputLossAction(inputLossAction: String)

      /**
       * @param restartDelay If a streaming output fails, the number of seconds to wait until a
       * restart is initiated.
       * A value of 0 means never restart.
       */
      public fun restartDelay(restartDelay: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.RtmpGroupSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.RtmpGroupSettingsProperty.builder()

      /**
       * @param adMarkers Choose the ad marker type for this output group.
       * MediaLive will create a message based on the content of each SCTE-35 message, format it for
       * that marker type, and insert it in the datastream.
       */
      override fun adMarkers(adMarkers: List) {
        cdkBuilder.adMarkers(adMarkers)
      }

      /**
       * @param adMarkers Choose the ad marker type for this output group.
       * MediaLive will create a message based on the content of each SCTE-35 message, format it for
       * that marker type, and insert it in the datastream.
       */
      override fun adMarkers(vararg adMarkers: String): Unit = adMarkers(adMarkers.toList())

      /**
       * @param authenticationScheme An authentication scheme to use when connecting with a CDN.
       */
      override fun authenticationScheme(authenticationScheme: String) {
        cdkBuilder.authenticationScheme(authenticationScheme)
      }

      /**
       * @param cacheFullBehavior Controls behavior when the content cache fills up.
       * If a remote origin server stalls the RTMP connection and doesn't accept content fast
       * enough, the media cache fills up. When the cache reaches the duration specified by
       * cacheLength, the cache stops accepting new content. If set to disconnectImmediately, the RTMP
       * output forces a disconnect. Clear the media cache, and reconnect after restartDelay seconds.
       * If set to waitForServer, the RTMP output waits up to 5 minutes to allow the origin server to
       * begin accepting data again.
       */
      override fun cacheFullBehavior(cacheFullBehavior: String) {
        cdkBuilder.cacheFullBehavior(cacheFullBehavior)
      }

      /**
       * @param cacheLength The cache length, in seconds, that is used to calculate buffer size.
       */
      override fun cacheLength(cacheLength: Number) {
        cdkBuilder.cacheLength(cacheLength)
      }

      /**
       * @param captionData Controls the types of data that pass to onCaptionInfo outputs.
       * If set to all, 608 and 708 carried DTVCC data is passed. If set to field1AndField2608,
       * DTVCC data is stripped out, but 608 data from both fields is passed. If set to field1608, only
       * the data carried in 608 from field 1 video is passed.
       */
      override fun captionData(captionData: String) {
        cdkBuilder.captionData(captionData)
      }

      /**
       * @param includeFillerNalUnits the value to be set.
       */
      override fun includeFillerNalUnits(includeFillerNalUnits: String) {
        cdkBuilder.includeFillerNalUnits(includeFillerNalUnits)
      }

      /**
       * @param inputLossAction Controls the behavior of this RTMP group if the input becomes
       * unavailable.
       * emitOutput: Emit a slate until the input returns. pauseOutput: Stop transmitting data until
       * the input returns. This does not close the underlying RTMP connection.
       */
      override fun inputLossAction(inputLossAction: String) {
        cdkBuilder.inputLossAction(inputLossAction)
      }

      /**
       * @param restartDelay If a streaming output fails, the number of seconds to wait until a
       * restart is initiated.
       * A value of 0 means never restart.
       */
      override fun restartDelay(restartDelay: Number) {
        cdkBuilder.restartDelay(restartDelay)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.RtmpGroupSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.RtmpGroupSettingsProperty,
    ) : CdkObject(cdkObject),
        RtmpGroupSettingsProperty {
      /**
       * Choose the ad marker type for this output group.
       *
       * MediaLive will create a message based on the content of each SCTE-35 message, format it for
       * that marker type, and insert it in the datastream.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-admarkers)
       */
      override fun adMarkers(): List = unwrap(this).getAdMarkers() ?: emptyList()

      /**
       * An authentication scheme to use when connecting with a CDN.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-authenticationscheme)
       */
      override fun authenticationScheme(): String? = unwrap(this).getAuthenticationScheme()

      /**
       * Controls behavior when the content cache fills up.
       *
       * If a remote origin server stalls the RTMP connection and doesn't accept content fast
       * enough, the media cache fills up. When the cache reaches the duration specified by
       * cacheLength, the cache stops accepting new content. If set to disconnectImmediately, the RTMP
       * output forces a disconnect. Clear the media cache, and reconnect after restartDelay seconds.
       * If set to waitForServer, the RTMP output waits up to 5 minutes to allow the origin server to
       * begin accepting data again.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-cachefullbehavior)
       */
      override fun cacheFullBehavior(): String? = unwrap(this).getCacheFullBehavior()

      /**
       * The cache length, in seconds, that is used to calculate buffer size.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-cachelength)
       */
      override fun cacheLength(): Number? = unwrap(this).getCacheLength()

      /**
       * Controls the types of data that pass to onCaptionInfo outputs.
       *
       * If set to all, 608 and 708 carried DTVCC data is passed. If set to field1AndField2608,
       * DTVCC data is stripped out, but 608 data from both fields is passed. If set to field1608, only
       * the data carried in 608 from field 1 video is passed.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-captiondata)
       */
      override fun captionData(): String? = unwrap(this).getCaptionData()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-includefillernalunits)
       */
      override fun includeFillerNalUnits(): String? = unwrap(this).getIncludeFillerNalUnits()

      /**
       * Controls the behavior of this RTMP group if the input becomes unavailable.
       *
       * emitOutput: Emit a slate until the input returns. pauseOutput: Stop transmitting data until
       * the input returns. This does not close the underlying RTMP connection.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-inputlossaction)
       */
      override fun inputLossAction(): String? = unwrap(this).getInputLossAction()

      /**
       * If a streaming output fails, the number of seconds to wait until a restart is initiated.
       *
       * A value of 0 means never restart.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-restartdelay)
       */
      override fun restartDelay(): Number? = unwrap(this).getRestartDelay()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): RtmpGroupSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.RtmpGroupSettingsProperty):
          RtmpGroupSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          RtmpGroupSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: RtmpGroupSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.RtmpGroupSettingsProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.RtmpGroupSettingsProperty
    }
  }

  /**
   * The settings for one RTMP output.
   *
   * The parent of this entity is OutputSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * RtmpOutputSettingsProperty rtmpOutputSettingsProperty = RtmpOutputSettingsProperty.builder()
   * .certificateMode("certificateMode")
   * .connectionRetryInterval(123)
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .numRetries(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpoutputsettings.html)
   */
  public interface RtmpOutputSettingsProperty {
    /**
     * If set to verifyAuthenticity, verifies the TLS certificate chain to a trusted certificate
     * authority (CA).
     *
     * This causes RTMPS outputs with self-signed certificates to fail.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpoutputsettings.html#cfn-medialive-channel-rtmpoutputsettings-certificatemode)
     */
    public fun certificateMode(): String? = unwrap(this).getCertificateMode()

    /**
     * The number of seconds to wait before retrying a connection to the Flash Media server if the
     * connection is lost.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpoutputsettings.html#cfn-medialive-channel-rtmpoutputsettings-connectionretryinterval)
     */
    public fun connectionRetryInterval(): Number? = unwrap(this).getConnectionRetryInterval()

    /**
     * The RTMP endpoint excluding the stream name (for example, rtmp://host/appname).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpoutputsettings.html#cfn-medialive-channel-rtmpoutputsettings-destination)
     */
    public fun destination(): Any? = unwrap(this).getDestination()

    /**
     * The number of retry attempts.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpoutputsettings.html#cfn-medialive-channel-rtmpoutputsettings-numretries)
     */
    public fun numRetries(): Number? = unwrap(this).getNumRetries()

    /**
     * A builder for [RtmpOutputSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param certificateMode If set to verifyAuthenticity, verifies the TLS certificate chain to
       * a trusted certificate authority (CA).
       * This causes RTMPS outputs with self-signed certificates to fail.
       */
      public fun certificateMode(certificateMode: String)

      /**
       * @param connectionRetryInterval The number of seconds to wait before retrying a connection
       * to the Flash Media server if the connection is lost.
       */
      public fun connectionRetryInterval(connectionRetryInterval: Number)

      /**
       * @param destination The RTMP endpoint excluding the stream name (for example,
       * rtmp://host/appname).
       */
      public fun destination(destination: IResolvable)

      /**
       * @param destination The RTMP endpoint excluding the stream name (for example,
       * rtmp://host/appname).
       */
      public fun destination(destination: OutputLocationRefProperty)

      /**
       * @param destination The RTMP endpoint excluding the stream name (for example,
       * rtmp://host/appname).
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("9c5e65102a47013b7485722391ced830b572583337c88b61f847e4da12e1bc33")
      public fun destination(destination: OutputLocationRefProperty.Builder.() -> Unit)

      /**
       * @param numRetries The number of retry attempts.
       */
      public fun numRetries(numRetries: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.RtmpOutputSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.RtmpOutputSettingsProperty.builder()

      /**
       * @param certificateMode If set to verifyAuthenticity, verifies the TLS certificate chain to
       * a trusted certificate authority (CA).
       * This causes RTMPS outputs with self-signed certificates to fail.
       */
      override fun certificateMode(certificateMode: String) {
        cdkBuilder.certificateMode(certificateMode)
      }

      /**
       * @param connectionRetryInterval The number of seconds to wait before retrying a connection
       * to the Flash Media server if the connection is lost.
       */
      override fun connectionRetryInterval(connectionRetryInterval: Number) {
        cdkBuilder.connectionRetryInterval(connectionRetryInterval)
      }

      /**
       * @param destination The RTMP endpoint excluding the stream name (for example,
       * rtmp://host/appname).
       */
      override fun destination(destination: IResolvable) {
        cdkBuilder.destination(destination.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param destination The RTMP endpoint excluding the stream name (for example,
       * rtmp://host/appname).
       */
      override fun destination(destination: OutputLocationRefProperty) {
        cdkBuilder.destination(destination.let(OutputLocationRefProperty.Companion::unwrap))
      }

      /**
       * @param destination The RTMP endpoint excluding the stream name (for example,
       * rtmp://host/appname).
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("9c5e65102a47013b7485722391ced830b572583337c88b61f847e4da12e1bc33")
      override fun destination(destination: OutputLocationRefProperty.Builder.() -> Unit): Unit =
          destination(OutputLocationRefProperty(destination))

      /**
       * @param numRetries The number of retry attempts.
       */
      override fun numRetries(numRetries: Number) {
        cdkBuilder.numRetries(numRetries)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.RtmpOutputSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.RtmpOutputSettingsProperty,
    ) : CdkObject(cdkObject),
        RtmpOutputSettingsProperty {
      /**
       * If set to verifyAuthenticity, verifies the TLS certificate chain to a trusted certificate
       * authority (CA).
       *
       * This causes RTMPS outputs with self-signed certificates to fail.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpoutputsettings.html#cfn-medialive-channel-rtmpoutputsettings-certificatemode)
       */
      override fun certificateMode(): String? = unwrap(this).getCertificateMode()

      /**
       * The number of seconds to wait before retrying a connection to the Flash Media server if the
       * connection is lost.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpoutputsettings.html#cfn-medialive-channel-rtmpoutputsettings-connectionretryinterval)
       */
      override fun connectionRetryInterval(): Number? = unwrap(this).getConnectionRetryInterval()

      /**
       * The RTMP endpoint excluding the stream name (for example, rtmp://host/appname).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpoutputsettings.html#cfn-medialive-channel-rtmpoutputsettings-destination)
       */
      override fun destination(): Any? = unwrap(this).getDestination()

      /**
       * The number of retry attempts.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpoutputsettings.html#cfn-medialive-channel-rtmpoutputsettings-numretries)
       */
      override fun numRetries(): Number? = unwrap(this).getNumRetries()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): RtmpOutputSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.RtmpOutputSettingsProperty):
          RtmpOutputSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          RtmpOutputSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: RtmpOutputSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.RtmpOutputSettingsProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.RtmpOutputSettingsProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * Scte20PlusEmbeddedDestinationSettingsProperty scte20PlusEmbeddedDestinationSettingsProperty =
   * Scte20PlusEmbeddedDestinationSettingsProperty.builder().build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte20plusembeddeddestinationsettings.html)
   */
  public interface Scte20PlusEmbeddedDestinationSettingsProperty {
    /**
     * A builder for [Scte20PlusEmbeddedDestinationSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.Scte20PlusEmbeddedDestinationSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.Scte20PlusEmbeddedDestinationSettingsProperty.builder()

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.Scte20PlusEmbeddedDestinationSettingsProperty
          = cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Scte20PlusEmbeddedDestinationSettingsProperty,
    ) : CdkObject(cdkObject),
        Scte20PlusEmbeddedDestinationSettingsProperty

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          Scte20PlusEmbeddedDestinationSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Scte20PlusEmbeddedDestinationSettingsProperty):
          Scte20PlusEmbeddedDestinationSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          Scte20PlusEmbeddedDestinationSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: Scte20PlusEmbeddedDestinationSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.Scte20PlusEmbeddedDestinationSettingsProperty
          = (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.Scte20PlusEmbeddedDestinationSettingsProperty
    }
  }

  /**
   * Information about the SCTE-20 captions to extract from the input.
   *
   * The parent of this entity is CaptionSelectorSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * Scte20SourceSettingsProperty scte20SourceSettingsProperty =
   * Scte20SourceSettingsProperty.builder()
   * .convert608To708("convert608To708")
   * .source608ChannelNumber(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte20sourcesettings.html)
   */
  public interface Scte20SourceSettingsProperty {
    /**
     * If upconvert, 608 data is both passed through the "608 compatibility bytes" fields of the 708
     * wrapper as well as translated into 708.
     *
     * Any 708 data present in the source content is discarded.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte20sourcesettings.html#cfn-medialive-channel-scte20sourcesettings-convert608to708)
     */
    public fun convert608To708(): String? = unwrap(this).getConvert608To708()

    /**
     * Specifies the 608/708 channel number within the video track from which to extract captions.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte20sourcesettings.html#cfn-medialive-channel-scte20sourcesettings-source608channelnumber)
     */
    public fun source608ChannelNumber(): Number? = unwrap(this).getSource608ChannelNumber()

    /**
     * A builder for [Scte20SourceSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param convert608To708 If upconvert, 608 data is both passed through the "608 compatibility
       * bytes" fields of the 708 wrapper as well as translated into 708.
       * Any 708 data present in the source content is discarded.
       */
      public fun convert608To708(convert608To708: String)

      /**
       * @param source608ChannelNumber Specifies the 608/708 channel number within the video track
       * from which to extract captions.
       */
      public fun source608ChannelNumber(source608ChannelNumber: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.Scte20SourceSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.Scte20SourceSettingsProperty.builder()

      /**
       * @param convert608To708 If upconvert, 608 data is both passed through the "608 compatibility
       * bytes" fields of the 708 wrapper as well as translated into 708.
       * Any 708 data present in the source content is discarded.
       */
      override fun convert608To708(convert608To708: String) {
        cdkBuilder.convert608To708(convert608To708)
      }

      /**
       * @param source608ChannelNumber Specifies the 608/708 channel number within the video track
       * from which to extract captions.
       */
      override fun source608ChannelNumber(source608ChannelNumber: Number) {
        cdkBuilder.source608ChannelNumber(source608ChannelNumber)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.Scte20SourceSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Scte20SourceSettingsProperty,
    ) : CdkObject(cdkObject),
        Scte20SourceSettingsProperty {
      /**
       * If upconvert, 608 data is both passed through the "608 compatibility bytes" fields of the
       * 708 wrapper as well as translated into 708.
       *
       * Any 708 data present in the source content is discarded.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte20sourcesettings.html#cfn-medialive-channel-scte20sourcesettings-convert608to708)
       */
      override fun convert608To708(): String? = unwrap(this).getConvert608To708()

      /**
       * Specifies the 608/708 channel number within the video track from which to extract captions.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte20sourcesettings.html#cfn-medialive-channel-scte20sourcesettings-source608channelnumber)
       */
      override fun source608ChannelNumber(): Number? = unwrap(this).getSource608ChannelNumber()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): Scte20SourceSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Scte20SourceSettingsProperty):
          Scte20SourceSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          Scte20SourceSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: Scte20SourceSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.Scte20SourceSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.Scte20SourceSettingsProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * Scte27DestinationSettingsProperty scte27DestinationSettingsProperty =
   * Scte27DestinationSettingsProperty.builder().build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte27destinationsettings.html)
   */
  public interface Scte27DestinationSettingsProperty {
    /**
     * A builder for [Scte27DestinationSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.Scte27DestinationSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.Scte27DestinationSettingsProperty.builder()

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.Scte27DestinationSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Scte27DestinationSettingsProperty,
    ) : CdkObject(cdkObject),
        Scte27DestinationSettingsProperty

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          Scte27DestinationSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Scte27DestinationSettingsProperty):
          Scte27DestinationSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          Scte27DestinationSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: Scte27DestinationSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.Scte27DestinationSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.Scte27DestinationSettingsProperty
    }
  }

  /**
   * Information about the SCTE-27 captions to extract from the input.
   *
   * The parent of this entity is CaptionSelectorSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * Scte27SourceSettingsProperty scte27SourceSettingsProperty =
   * Scte27SourceSettingsProperty.builder()
   * .ocrLanguage("ocrLanguage")
   * .pid(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte27sourcesettings.html)
   */
  public interface Scte27SourceSettingsProperty {
    /**
     * If you will configure a WebVTT caption description that references this caption selector, use
     * this field to provide the language to consider when translating the image-based source to text.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte27sourcesettings.html#cfn-medialive-channel-scte27sourcesettings-ocrlanguage)
     */
    public fun ocrLanguage(): String? = unwrap(this).getOcrLanguage()

    /**
     * The PID field is used in conjunction with the captions selector languageCode field as
     * follows: Specify PID and Language: Extracts captions from that PID;
     *
     * the language is "informational." Specify PID and omit Language: Extracts the specified PID.
     * Omit PID and specify Language: Extracts the specified language, whichever PID that happens to
     * be. Omit PID and omit Language: Valid only if source is DVB-Sub that is being passed through;
     * all languages are passed through.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte27sourcesettings.html#cfn-medialive-channel-scte27sourcesettings-pid)
     */
    public fun pid(): Number? = unwrap(this).getPid()

    /**
     * A builder for [Scte27SourceSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param ocrLanguage If you will configure a WebVTT caption description that references this
       * caption selector, use this field to provide the language to consider when translating the
       * image-based source to text.
       */
      public fun ocrLanguage(ocrLanguage: String)

      /**
       * @param pid The PID field is used in conjunction with the captions selector languageCode
       * field as follows: Specify PID and Language: Extracts captions from that PID;.
       * the language is "informational." Specify PID and omit Language: Extracts the specified PID.
       * Omit PID and specify Language: Extracts the specified language, whichever PID that happens to
       * be. Omit PID and omit Language: Valid only if source is DVB-Sub that is being passed through;
       * all languages are passed through.
       */
      public fun pid(pid: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.Scte27SourceSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.Scte27SourceSettingsProperty.builder()

      /**
       * @param ocrLanguage If you will configure a WebVTT caption description that references this
       * caption selector, use this field to provide the language to consider when translating the
       * image-based source to text.
       */
      override fun ocrLanguage(ocrLanguage: String) {
        cdkBuilder.ocrLanguage(ocrLanguage)
      }

      /**
       * @param pid The PID field is used in conjunction with the captions selector languageCode
       * field as follows: Specify PID and Language: Extracts captions from that PID;.
       * the language is "informational." Specify PID and omit Language: Extracts the specified PID.
       * Omit PID and specify Language: Extracts the specified language, whichever PID that happens to
       * be. Omit PID and omit Language: Valid only if source is DVB-Sub that is being passed through;
       * all languages are passed through.
       */
      override fun pid(pid: Number) {
        cdkBuilder.pid(pid)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.Scte27SourceSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Scte27SourceSettingsProperty,
    ) : CdkObject(cdkObject),
        Scte27SourceSettingsProperty {
      /**
       * If you will configure a WebVTT caption description that references this caption selector,
       * use this field to provide the language to consider when translating the image-based source to
       * text.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte27sourcesettings.html#cfn-medialive-channel-scte27sourcesettings-ocrlanguage)
       */
      override fun ocrLanguage(): String? = unwrap(this).getOcrLanguage()

      /**
       * The PID field is used in conjunction with the captions selector languageCode field as
       * follows: Specify PID and Language: Extracts captions from that PID;
       *
       * the language is "informational." Specify PID and omit Language: Extracts the specified PID.
       * Omit PID and specify Language: Extracts the specified language, whichever PID that happens to
       * be. Omit PID and omit Language: Valid only if source is DVB-Sub that is being passed through;
       * all languages are passed through.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte27sourcesettings.html#cfn-medialive-channel-scte27sourcesettings-pid)
       */
      override fun pid(): Number? = unwrap(this).getPid()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): Scte27SourceSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Scte27SourceSettingsProperty):
          Scte27SourceSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          Scte27SourceSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: Scte27SourceSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.Scte27SourceSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.Scte27SourceSettingsProperty
    }
  }

  /**
   * The setup of SCTE-35 splice insert handling.
   *
   * The parent of this entity is AvailSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * Scte35SpliceInsertProperty scte35SpliceInsertProperty = Scte35SpliceInsertProperty.builder()
   * .adAvailOffset(123)
   * .noRegionalBlackoutFlag("noRegionalBlackoutFlag")
   * .webDeliveryAllowedFlag("webDeliveryAllowedFlag")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte35spliceinsert.html)
   */
  public interface Scte35SpliceInsertProperty {
    /**
     * When specified, this offset (in milliseconds) is added to the input ad avail PTS time.
     *
     * This applies only to embedded SCTE 104/35 messages. It doesn't apply to OOB messages.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte35spliceinsert.html#cfn-medialive-channel-scte35spliceinsert-adavailoffset)
     */
    public fun adAvailOffset(): Number? = unwrap(this).getAdAvailOffset()

    /**
     * When set to ignore, segment descriptors with noRegionalBlackoutFlag set to 0 no longer
     * trigger blackouts or ad avail slates.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte35spliceinsert.html#cfn-medialive-channel-scte35spliceinsert-noregionalblackoutflag)
     */
    public fun noRegionalBlackoutFlag(): String? = unwrap(this).getNoRegionalBlackoutFlag()

    /**
     * When set to ignore, segment descriptors with webDeliveryAllowedFlag set to 0 no longer
     * trigger blackouts or ad avail slates.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte35spliceinsert.html#cfn-medialive-channel-scte35spliceinsert-webdeliveryallowedflag)
     */
    public fun webDeliveryAllowedFlag(): String? = unwrap(this).getWebDeliveryAllowedFlag()

    /**
     * A builder for [Scte35SpliceInsertProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param adAvailOffset When specified, this offset (in milliseconds) is added to the input ad
       * avail PTS time.
       * This applies only to embedded SCTE 104/35 messages. It doesn't apply to OOB messages.
       */
      public fun adAvailOffset(adAvailOffset: Number)

      /**
       * @param noRegionalBlackoutFlag When set to ignore, segment descriptors with
       * noRegionalBlackoutFlag set to 0 no longer trigger blackouts or ad avail slates.
       */
      public fun noRegionalBlackoutFlag(noRegionalBlackoutFlag: String)

      /**
       * @param webDeliveryAllowedFlag When set to ignore, segment descriptors with
       * webDeliveryAllowedFlag set to 0 no longer trigger blackouts or ad avail slates.
       */
      public fun webDeliveryAllowedFlag(webDeliveryAllowedFlag: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.Scte35SpliceInsertProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.Scte35SpliceInsertProperty.builder()

      /**
       * @param adAvailOffset When specified, this offset (in milliseconds) is added to the input ad
       * avail PTS time.
       * This applies only to embedded SCTE 104/35 messages. It doesn't apply to OOB messages.
       */
      override fun adAvailOffset(adAvailOffset: Number) {
        cdkBuilder.adAvailOffset(adAvailOffset)
      }

      /**
       * @param noRegionalBlackoutFlag When set to ignore, segment descriptors with
       * noRegionalBlackoutFlag set to 0 no longer trigger blackouts or ad avail slates.
       */
      override fun noRegionalBlackoutFlag(noRegionalBlackoutFlag: String) {
        cdkBuilder.noRegionalBlackoutFlag(noRegionalBlackoutFlag)
      }

      /**
       * @param webDeliveryAllowedFlag When set to ignore, segment descriptors with
       * webDeliveryAllowedFlag set to 0 no longer trigger blackouts or ad avail slates.
       */
      override fun webDeliveryAllowedFlag(webDeliveryAllowedFlag: String) {
        cdkBuilder.webDeliveryAllowedFlag(webDeliveryAllowedFlag)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.Scte35SpliceInsertProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Scte35SpliceInsertProperty,
    ) : CdkObject(cdkObject),
        Scte35SpliceInsertProperty {
      /**
       * When specified, this offset (in milliseconds) is added to the input ad avail PTS time.
       *
       * This applies only to embedded SCTE 104/35 messages. It doesn't apply to OOB messages.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte35spliceinsert.html#cfn-medialive-channel-scte35spliceinsert-adavailoffset)
       */
      override fun adAvailOffset(): Number? = unwrap(this).getAdAvailOffset()

      /**
       * When set to ignore, segment descriptors with noRegionalBlackoutFlag set to 0 no longer
       * trigger blackouts or ad avail slates.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte35spliceinsert.html#cfn-medialive-channel-scte35spliceinsert-noregionalblackoutflag)
       */
      override fun noRegionalBlackoutFlag(): String? = unwrap(this).getNoRegionalBlackoutFlag()

      /**
       * When set to ignore, segment descriptors with webDeliveryAllowedFlag set to 0 no longer
       * trigger blackouts or ad avail slates.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte35spliceinsert.html#cfn-medialive-channel-scte35spliceinsert-webdeliveryallowedflag)
       */
      override fun webDeliveryAllowedFlag(): String? = unwrap(this).getWebDeliveryAllowedFlag()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): Scte35SpliceInsertProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Scte35SpliceInsertProperty):
          Scte35SpliceInsertProperty = CdkObjectWrappers.wrap(cdkObject) as?
          Scte35SpliceInsertProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: Scte35SpliceInsertProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.Scte35SpliceInsertProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.Scte35SpliceInsertProperty
    }
  }

  /**
   * The settings for the SCTE-35 time signal APOS mode.
   *
   * The parent of this entity is AvailSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * Scte35TimeSignalAposProperty scte35TimeSignalAposProperty =
   * Scte35TimeSignalAposProperty.builder()
   * .adAvailOffset(123)
   * .noRegionalBlackoutFlag("noRegionalBlackoutFlag")
   * .webDeliveryAllowedFlag("webDeliveryAllowedFlag")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte35timesignalapos.html)
   */
  public interface Scte35TimeSignalAposProperty {
    /**
     * When specified, this offset (in milliseconds) is added to the input ad avail PTS time.
     *
     * This applies only to embedded SCTE 104/35 messages. It doesn't apply to OOB messages.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte35timesignalapos.html#cfn-medialive-channel-scte35timesignalapos-adavailoffset)
     */
    public fun adAvailOffset(): Number? = unwrap(this).getAdAvailOffset()

    /**
     * When set to ignore, segment descriptors with noRegionalBlackoutFlag set to 0 no longer
     * trigger blackouts or ad avail slates.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte35timesignalapos.html#cfn-medialive-channel-scte35timesignalapos-noregionalblackoutflag)
     */
    public fun noRegionalBlackoutFlag(): String? = unwrap(this).getNoRegionalBlackoutFlag()

    /**
     * When set to ignore, segment descriptors with webDeliveryAllowedFlag set to 0 no longer
     * trigger blackouts or ad avail slates.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte35timesignalapos.html#cfn-medialive-channel-scte35timesignalapos-webdeliveryallowedflag)
     */
    public fun webDeliveryAllowedFlag(): String? = unwrap(this).getWebDeliveryAllowedFlag()

    /**
     * A builder for [Scte35TimeSignalAposProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param adAvailOffset When specified, this offset (in milliseconds) is added to the input ad
       * avail PTS time.
       * This applies only to embedded SCTE 104/35 messages. It doesn't apply to OOB messages.
       */
      public fun adAvailOffset(adAvailOffset: Number)

      /**
       * @param noRegionalBlackoutFlag When set to ignore, segment descriptors with
       * noRegionalBlackoutFlag set to 0 no longer trigger blackouts or ad avail slates.
       */
      public fun noRegionalBlackoutFlag(noRegionalBlackoutFlag: String)

      /**
       * @param webDeliveryAllowedFlag When set to ignore, segment descriptors with
       * webDeliveryAllowedFlag set to 0 no longer trigger blackouts or ad avail slates.
       */
      public fun webDeliveryAllowedFlag(webDeliveryAllowedFlag: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.Scte35TimeSignalAposProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.Scte35TimeSignalAposProperty.builder()

      /**
       * @param adAvailOffset When specified, this offset (in milliseconds) is added to the input ad
       * avail PTS time.
       * This applies only to embedded SCTE 104/35 messages. It doesn't apply to OOB messages.
       */
      override fun adAvailOffset(adAvailOffset: Number) {
        cdkBuilder.adAvailOffset(adAvailOffset)
      }

      /**
       * @param noRegionalBlackoutFlag When set to ignore, segment descriptors with
       * noRegionalBlackoutFlag set to 0 no longer trigger blackouts or ad avail slates.
       */
      override fun noRegionalBlackoutFlag(noRegionalBlackoutFlag: String) {
        cdkBuilder.noRegionalBlackoutFlag(noRegionalBlackoutFlag)
      }

      /**
       * @param webDeliveryAllowedFlag When set to ignore, segment descriptors with
       * webDeliveryAllowedFlag set to 0 no longer trigger blackouts or ad avail slates.
       */
      override fun webDeliveryAllowedFlag(webDeliveryAllowedFlag: String) {
        cdkBuilder.webDeliveryAllowedFlag(webDeliveryAllowedFlag)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.Scte35TimeSignalAposProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Scte35TimeSignalAposProperty,
    ) : CdkObject(cdkObject),
        Scte35TimeSignalAposProperty {
      /**
       * When specified, this offset (in milliseconds) is added to the input ad avail PTS time.
       *
       * This applies only to embedded SCTE 104/35 messages. It doesn't apply to OOB messages.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte35timesignalapos.html#cfn-medialive-channel-scte35timesignalapos-adavailoffset)
       */
      override fun adAvailOffset(): Number? = unwrap(this).getAdAvailOffset()

      /**
       * When set to ignore, segment descriptors with noRegionalBlackoutFlag set to 0 no longer
       * trigger blackouts or ad avail slates.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte35timesignalapos.html#cfn-medialive-channel-scte35timesignalapos-noregionalblackoutflag)
       */
      override fun noRegionalBlackoutFlag(): String? = unwrap(this).getNoRegionalBlackoutFlag()

      /**
       * When set to ignore, segment descriptors with webDeliveryAllowedFlag set to 0 no longer
       * trigger blackouts or ad avail slates.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte35timesignalapos.html#cfn-medialive-channel-scte35timesignalapos-webdeliveryallowedflag)
       */
      override fun webDeliveryAllowedFlag(): String? = unwrap(this).getWebDeliveryAllowedFlag()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): Scte35TimeSignalAposProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.Scte35TimeSignalAposProperty):
          Scte35TimeSignalAposProperty = CdkObjectWrappers.wrap(cdkObject) as?
          Scte35TimeSignalAposProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: Scte35TimeSignalAposProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.Scte35TimeSignalAposProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.Scte35TimeSignalAposProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * SmpteTtDestinationSettingsProperty smpteTtDestinationSettingsProperty =
   * SmpteTtDestinationSettingsProperty.builder().build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-smptettdestinationsettings.html)
   */
  public interface SmpteTtDestinationSettingsProperty {
    /**
     * A builder for [SmpteTtDestinationSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.SmpteTtDestinationSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.SmpteTtDestinationSettingsProperty.builder()

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.SmpteTtDestinationSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.SmpteTtDestinationSettingsProperty,
    ) : CdkObject(cdkObject),
        SmpteTtDestinationSettingsProperty

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          SmpteTtDestinationSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.SmpteTtDestinationSettingsProperty):
          SmpteTtDestinationSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          SmpteTtDestinationSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: SmpteTtDestinationSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.SmpteTtDestinationSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.SmpteTtDestinationSettingsProperty
    }
  }

  /**
   * The configuration of an HLS output that is a standard output (not an audio-only output).
   *
   * The parent of this entity is HlsSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * StandardHlsSettingsProperty standardHlsSettingsProperty = StandardHlsSettingsProperty.builder()
   * .audioRenditionSets("audioRenditionSets")
   * .m3U8Settings(M3u8SettingsProperty.builder()
   * .audioFramesPerPes(123)
   * .audioPids("audioPids")
   * .ecmPid("ecmPid")
   * .klvBehavior("klvBehavior")
   * .klvDataPids("klvDataPids")
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .patInterval(123)
   * .pcrControl("pcrControl")
   * .pcrPeriod(123)
   * .pcrPid("pcrPid")
   * .pmtInterval(123)
   * .pmtPid("pmtPid")
   * .programNum(123)
   * .scte35Behavior("scte35Behavior")
   * .scte35Pid("scte35Pid")
   * .timedMetadataBehavior("timedMetadataBehavior")
   * .timedMetadataPid("timedMetadataPid")
   * .transportStreamId(123)
   * .videoPid("videoPid")
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-standardhlssettings.html)
   */
  public interface StandardHlsSettingsProperty {
    /**
     * Lists all the audio groups that are used with the video output stream.
     *
     * This inputs all the audio GROUP-IDs that are associated with the video, separated by a comma
     * (,).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-standardhlssettings.html#cfn-medialive-channel-standardhlssettings-audiorenditionsets)
     */
    public fun audioRenditionSets(): String? = unwrap(this).getAudioRenditionSets()

    /**
     * Settings for the M3U8 container.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-standardhlssettings.html#cfn-medialive-channel-standardhlssettings-m3u8settings)
     */
    public fun m3U8Settings(): Any? = unwrap(this).getM3U8Settings()

    /**
     * A builder for [StandardHlsSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param audioRenditionSets Lists all the audio groups that are used with the video output
       * stream.
       * This inputs all the audio GROUP-IDs that are associated with the video, separated by a
       * comma (,).
       */
      public fun audioRenditionSets(audioRenditionSets: String)

      /**
       * @param m3U8Settings Settings for the M3U8 container.
       */
      public fun m3U8Settings(m3U8Settings: IResolvable)

      /**
       * @param m3U8Settings Settings for the M3U8 container.
       */
      public fun m3U8Settings(m3U8Settings: M3u8SettingsProperty)

      /**
       * @param m3U8Settings Settings for the M3U8 container.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ed91af366c64c0492810f6a8a94c76563177ab5ba00b44813ddb3e791afb5187")
      public fun m3U8Settings(m3U8Settings: M3u8SettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.StandardHlsSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.StandardHlsSettingsProperty.builder()

      /**
       * @param audioRenditionSets Lists all the audio groups that are used with the video output
       * stream.
       * This inputs all the audio GROUP-IDs that are associated with the video, separated by a
       * comma (,).
       */
      override fun audioRenditionSets(audioRenditionSets: String) {
        cdkBuilder.audioRenditionSets(audioRenditionSets)
      }

      /**
       * @param m3U8Settings Settings for the M3U8 container.
       */
      override fun m3U8Settings(m3U8Settings: IResolvable) {
        cdkBuilder.m3U8Settings(m3U8Settings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param m3U8Settings Settings for the M3U8 container.
       */
      override fun m3U8Settings(m3U8Settings: M3u8SettingsProperty) {
        cdkBuilder.m3U8Settings(m3U8Settings.let(M3u8SettingsProperty.Companion::unwrap))
      }

      /**
       * @param m3U8Settings Settings for the M3U8 container.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ed91af366c64c0492810f6a8a94c76563177ab5ba00b44813ddb3e791afb5187")
      override fun m3U8Settings(m3U8Settings: M3u8SettingsProperty.Builder.() -> Unit): Unit =
          m3U8Settings(M3u8SettingsProperty(m3U8Settings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.StandardHlsSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.StandardHlsSettingsProperty,
    ) : CdkObject(cdkObject),
        StandardHlsSettingsProperty {
      /**
       * Lists all the audio groups that are used with the video output stream.
       *
       * This inputs all the audio GROUP-IDs that are associated with the video, separated by a
       * comma (,).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-standardhlssettings.html#cfn-medialive-channel-standardhlssettings-audiorenditionsets)
       */
      override fun audioRenditionSets(): String? = unwrap(this).getAudioRenditionSets()

      /**
       * Settings for the M3U8 container.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-standardhlssettings.html#cfn-medialive-channel-standardhlssettings-m3u8settings)
       */
      override fun m3U8Settings(): Any? = unwrap(this).getM3U8Settings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): StandardHlsSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.StandardHlsSettingsProperty):
          StandardHlsSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          StandardHlsSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: StandardHlsSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.StandardHlsSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.StandardHlsSettingsProperty
    }
  }

  /**
   * The static key settings.
   *
   * The parent of this entity is KeyProviderSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * StaticKeySettingsProperty staticKeySettingsProperty = StaticKeySettingsProperty.builder()
   * .keyProviderServer(InputLocationProperty.builder()
   * .passwordParam("passwordParam")
   * .uri("uri")
   * .username("username")
   * .build())
   * .staticKeyValue("staticKeyValue")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-statickeysettings.html)
   */
  public interface StaticKeySettingsProperty {
    /**
     * The URL of the license server that is used for protecting content.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-statickeysettings.html#cfn-medialive-channel-statickeysettings-keyproviderserver)
     */
    public fun keyProviderServer(): Any? = unwrap(this).getKeyProviderServer()

    /**
     * The static key value as a 32 character hexadecimal string.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-statickeysettings.html#cfn-medialive-channel-statickeysettings-statickeyvalue)
     */
    public fun staticKeyValue(): String? = unwrap(this).getStaticKeyValue()

    /**
     * A builder for [StaticKeySettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param keyProviderServer The URL of the license server that is used for protecting content.
       */
      public fun keyProviderServer(keyProviderServer: IResolvable)

      /**
       * @param keyProviderServer The URL of the license server that is used for protecting content.
       */
      public fun keyProviderServer(keyProviderServer: InputLocationProperty)

      /**
       * @param keyProviderServer The URL of the license server that is used for protecting content.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ffa33d117d76d6f8ddf5adf69b60f682c89fe53780c940d718df2c5b929eeb57")
      public fun keyProviderServer(keyProviderServer: InputLocationProperty.Builder.() -> Unit)

      /**
       * @param staticKeyValue The static key value as a 32 character hexadecimal string.
       */
      public fun staticKeyValue(staticKeyValue: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.StaticKeySettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.StaticKeySettingsProperty.builder()

      /**
       * @param keyProviderServer The URL of the license server that is used for protecting content.
       */
      override fun keyProviderServer(keyProviderServer: IResolvable) {
        cdkBuilder.keyProviderServer(keyProviderServer.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param keyProviderServer The URL of the license server that is used for protecting content.
       */
      override fun keyProviderServer(keyProviderServer: InputLocationProperty) {
        cdkBuilder.keyProviderServer(keyProviderServer.let(InputLocationProperty.Companion::unwrap))
      }

      /**
       * @param keyProviderServer The URL of the license server that is used for protecting content.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ffa33d117d76d6f8ddf5adf69b60f682c89fe53780c940d718df2c5b929eeb57")
      override fun keyProviderServer(keyProviderServer: InputLocationProperty.Builder.() -> Unit):
          Unit = keyProviderServer(InputLocationProperty(keyProviderServer))

      /**
       * @param staticKeyValue The static key value as a 32 character hexadecimal string.
       */
      override fun staticKeyValue(staticKeyValue: String) {
        cdkBuilder.staticKeyValue(staticKeyValue)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.StaticKeySettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.StaticKeySettingsProperty,
    ) : CdkObject(cdkObject),
        StaticKeySettingsProperty {
      /**
       * The URL of the license server that is used for protecting content.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-statickeysettings.html#cfn-medialive-channel-statickeysettings-keyproviderserver)
       */
      override fun keyProviderServer(): Any? = unwrap(this).getKeyProviderServer()

      /**
       * The static key value as a 32 character hexadecimal string.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-statickeysettings.html#cfn-medialive-channel-statickeysettings-statickeyvalue)
       */
      override fun staticKeyValue(): String? = unwrap(this).getStaticKeyValue()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): StaticKeySettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.StaticKeySettingsProperty):
          StaticKeySettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          StaticKeySettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: StaticKeySettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.StaticKeySettingsProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.StaticKeySettingsProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * TeletextDestinationSettingsProperty teletextDestinationSettingsProperty =
   * TeletextDestinationSettingsProperty.builder().build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-teletextdestinationsettings.html)
   */
  public interface TeletextDestinationSettingsProperty {
    /**
     * A builder for [TeletextDestinationSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.TeletextDestinationSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.TeletextDestinationSettingsProperty.builder()

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.TeletextDestinationSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.TeletextDestinationSettingsProperty,
    ) : CdkObject(cdkObject),
        TeletextDestinationSettingsProperty

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          TeletextDestinationSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.TeletextDestinationSettingsProperty):
          TeletextDestinationSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          TeletextDestinationSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: TeletextDestinationSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.TeletextDestinationSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.TeletextDestinationSettingsProperty
    }
  }

  /**
   * Information about the Teletext captions to extract from the input.
   *
   * The parent of this entity is CaptionSelectorSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * TeletextSourceSettingsProperty teletextSourceSettingsProperty =
   * TeletextSourceSettingsProperty.builder()
   * .outputRectangle(CaptionRectangleProperty.builder()
   * .height(123)
   * .leftOffset(123)
   * .topOffset(123)
   * .width(123)
   * .build())
   * .pageNumber("pageNumber")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-teletextsourcesettings.html)
   */
  public interface TeletextSourceSettingsProperty {
    /**
     * Settings to configure the caption rectangle for an output captions that will be created using
     * this Teletext source captions.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-teletextsourcesettings.html#cfn-medialive-channel-teletextsourcesettings-outputrectangle)
     */
    public fun outputRectangle(): Any? = unwrap(this).getOutputRectangle()

    /**
     * Specifies the Teletext page number within the data stream from which to extract captions.
     *
     * The range is 0x100 (256) to 0x8FF (2303). This is unused for passthrough. It should be
     * specified as a hexadecimal string with no "0x" prefix.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-teletextsourcesettings.html#cfn-medialive-channel-teletextsourcesettings-pagenumber)
     */
    public fun pageNumber(): String? = unwrap(this).getPageNumber()

    /**
     * A builder for [TeletextSourceSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param outputRectangle Settings to configure the caption rectangle for an output captions
       * that will be created using this Teletext source captions.
       */
      public fun outputRectangle(outputRectangle: IResolvable)

      /**
       * @param outputRectangle Settings to configure the caption rectangle for an output captions
       * that will be created using this Teletext source captions.
       */
      public fun outputRectangle(outputRectangle: CaptionRectangleProperty)

      /**
       * @param outputRectangle Settings to configure the caption rectangle for an output captions
       * that will be created using this Teletext source captions.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("89662f7eb20ebf7d562a28fb0e19873d7aa3d5d8c41196753fd2479948bcaa31")
      public fun outputRectangle(outputRectangle: CaptionRectangleProperty.Builder.() -> Unit)

      /**
       * @param pageNumber Specifies the Teletext page number within the data stream from which to
       * extract captions.
       * The range is 0x100 (256) to 0x8FF (2303). This is unused for passthrough. It should be
       * specified as a hexadecimal string with no "0x" prefix.
       */
      public fun pageNumber(pageNumber: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.TeletextSourceSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.TeletextSourceSettingsProperty.builder()

      /**
       * @param outputRectangle Settings to configure the caption rectangle for an output captions
       * that will be created using this Teletext source captions.
       */
      override fun outputRectangle(outputRectangle: IResolvable) {
        cdkBuilder.outputRectangle(outputRectangle.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param outputRectangle Settings to configure the caption rectangle for an output captions
       * that will be created using this Teletext source captions.
       */
      override fun outputRectangle(outputRectangle: CaptionRectangleProperty) {
        cdkBuilder.outputRectangle(outputRectangle.let(CaptionRectangleProperty.Companion::unwrap))
      }

      /**
       * @param outputRectangle Settings to configure the caption rectangle for an output captions
       * that will be created using this Teletext source captions.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("89662f7eb20ebf7d562a28fb0e19873d7aa3d5d8c41196753fd2479948bcaa31")
      override fun outputRectangle(outputRectangle: CaptionRectangleProperty.Builder.() -> Unit):
          Unit = outputRectangle(CaptionRectangleProperty(outputRectangle))

      /**
       * @param pageNumber Specifies the Teletext page number within the data stream from which to
       * extract captions.
       * The range is 0x100 (256) to 0x8FF (2303). This is unused for passthrough. It should be
       * specified as a hexadecimal string with no "0x" prefix.
       */
      override fun pageNumber(pageNumber: String) {
        cdkBuilder.pageNumber(pageNumber)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.TeletextSourceSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.TeletextSourceSettingsProperty,
    ) : CdkObject(cdkObject),
        TeletextSourceSettingsProperty {
      /**
       * Settings to configure the caption rectangle for an output captions that will be created
       * using this Teletext source captions.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-teletextsourcesettings.html#cfn-medialive-channel-teletextsourcesettings-outputrectangle)
       */
      override fun outputRectangle(): Any? = unwrap(this).getOutputRectangle()

      /**
       * Specifies the Teletext page number within the data stream from which to extract captions.
       *
       * The range is 0x100 (256) to 0x8FF (2303). This is unused for passthrough. It should be
       * specified as a hexadecimal string with no "0x" prefix.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-teletextsourcesettings.html#cfn-medialive-channel-teletextsourcesettings-pagenumber)
       */
      override fun pageNumber(): String? = unwrap(this).getPageNumber()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): TeletextSourceSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.TeletextSourceSettingsProperty):
          TeletextSourceSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          TeletextSourceSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: TeletextSourceSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.TeletextSourceSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.TeletextSourceSettingsProperty
    }
  }

  /**
   * Settings for the temporal filter to apply to the video.
   *
   * The parents of this entity are H264FilterSettings, H265FilterSettings, and Mpeg2FilterSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * TemporalFilterSettingsProperty temporalFilterSettingsProperty =
   * TemporalFilterSettingsProperty.builder()
   * .postFilterSharpening("postFilterSharpening")
   * .strength("strength")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-temporalfiltersettings.html)
   */
  public interface TemporalFilterSettingsProperty {
    /**
     * If you enable this filter, the results are the following: - If the source content is noisy
     * (it contains excessive digital artifacts), the filter cleans up the source.
     *
     * * If the source content is already clean, the filter tends to decrease the bitrate,
     * especially when the rate control mode is QVBR.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-temporalfiltersettings.html#cfn-medialive-channel-temporalfiltersettings-postfiltersharpening)
     */
    public fun postFilterSharpening(): String? = unwrap(this).getPostFilterSharpening()

    /**
     * Choose a filter strength.
     *
     * We recommend a strength of 1 or 2. A higher strength might take out good information,
     * resulting in an image that is overly soft.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-temporalfiltersettings.html#cfn-medialive-channel-temporalfiltersettings-strength)
     */
    public fun strength(): String? = unwrap(this).getStrength()

    /**
     * A builder for [TemporalFilterSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param postFilterSharpening If you enable this filter, the results are the following: - If
       * the source content is noisy (it contains excessive digital artifacts), the filter cleans up
       * the source.
       * * If the source content is already clean, the filter tends to decrease the bitrate,
       * especially when the rate control mode is QVBR.
       */
      public fun postFilterSharpening(postFilterSharpening: String)

      /**
       * @param strength Choose a filter strength.
       * We recommend a strength of 1 or 2. A higher strength might take out good information,
       * resulting in an image that is overly soft.
       */
      public fun strength(strength: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.TemporalFilterSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.TemporalFilterSettingsProperty.builder()

      /**
       * @param postFilterSharpening If you enable this filter, the results are the following: - If
       * the source content is noisy (it contains excessive digital artifacts), the filter cleans up
       * the source.
       * * If the source content is already clean, the filter tends to decrease the bitrate,
       * especially when the rate control mode is QVBR.
       */
      override fun postFilterSharpening(postFilterSharpening: String) {
        cdkBuilder.postFilterSharpening(postFilterSharpening)
      }

      /**
       * @param strength Choose a filter strength.
       * We recommend a strength of 1 or 2. A higher strength might take out good information,
       * resulting in an image that is overly soft.
       */
      override fun strength(strength: String) {
        cdkBuilder.strength(strength)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.TemporalFilterSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.TemporalFilterSettingsProperty,
    ) : CdkObject(cdkObject),
        TemporalFilterSettingsProperty {
      /**
       * If you enable this filter, the results are the following: - If the source content is noisy
       * (it contains excessive digital artifacts), the filter cleans up the source.
       *
       * * If the source content is already clean, the filter tends to decrease the bitrate,
       * especially when the rate control mode is QVBR.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-temporalfiltersettings.html#cfn-medialive-channel-temporalfiltersettings-postfiltersharpening)
       */
      override fun postFilterSharpening(): String? = unwrap(this).getPostFilterSharpening()

      /**
       * Choose a filter strength.
       *
       * We recommend a strength of 1 or 2. A higher strength might take out good information,
       * resulting in an image that is overly soft.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-temporalfiltersettings.html#cfn-medialive-channel-temporalfiltersettings-strength)
       */
      override fun strength(): String? = unwrap(this).getStrength()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): TemporalFilterSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.TemporalFilterSettingsProperty):
          TemporalFilterSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          TemporalFilterSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: TemporalFilterSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.TemporalFilterSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.TemporalFilterSettingsProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * ThumbnailConfigurationProperty thumbnailConfigurationProperty =
   * ThumbnailConfigurationProperty.builder()
   * .state("state")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-thumbnailconfiguration.html)
   */
  public interface ThumbnailConfigurationProperty {
    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-thumbnailconfiguration.html#cfn-medialive-channel-thumbnailconfiguration-state)
     */
    public fun state(): String? = unwrap(this).getState()

    /**
     * A builder for [ThumbnailConfigurationProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param state the value to be set.
       */
      public fun state(state: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.ThumbnailConfigurationProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.ThumbnailConfigurationProperty.builder()

      /**
       * @param state the value to be set.
       */
      override fun state(state: String) {
        cdkBuilder.state(state)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.ThumbnailConfigurationProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.ThumbnailConfigurationProperty,
    ) : CdkObject(cdkObject),
        ThumbnailConfigurationProperty {
      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-thumbnailconfiguration.html#cfn-medialive-channel-thumbnailconfiguration-state)
       */
      override fun state(): String? = unwrap(this).getState()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): ThumbnailConfigurationProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.ThumbnailConfigurationProperty):
          ThumbnailConfigurationProperty = CdkObjectWrappers.wrap(cdkObject) as?
          ThumbnailConfigurationProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: ThumbnailConfigurationProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.ThumbnailConfigurationProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.ThumbnailConfigurationProperty
    }
  }

  /**
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * TimecodeBurninSettingsProperty timecodeBurninSettingsProperty =
   * TimecodeBurninSettingsProperty.builder()
   * .fontSize("fontSize")
   * .position("position")
   * .prefix("prefix")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-timecodeburninsettings.html)
   */
  public interface TimecodeBurninSettingsProperty {
    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-timecodeburninsettings.html#cfn-medialive-channel-timecodeburninsettings-fontsize)
     */
    public fun fontSize(): String? = unwrap(this).getFontSize()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-timecodeburninsettings.html#cfn-medialive-channel-timecodeburninsettings-position)
     */
    public fun position(): String? = unwrap(this).getPosition()

    /**
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-timecodeburninsettings.html#cfn-medialive-channel-timecodeburninsettings-prefix)
     */
    public fun prefix(): String? = unwrap(this).getPrefix()

    /**
     * A builder for [TimecodeBurninSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param fontSize the value to be set.
       */
      public fun fontSize(fontSize: String)

      /**
       * @param position the value to be set.
       */
      public fun position(position: String)

      /**
       * @param prefix the value to be set.
       */
      public fun prefix(prefix: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.TimecodeBurninSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.TimecodeBurninSettingsProperty.builder()

      /**
       * @param fontSize the value to be set.
       */
      override fun fontSize(fontSize: String) {
        cdkBuilder.fontSize(fontSize)
      }

      /**
       * @param position the value to be set.
       */
      override fun position(position: String) {
        cdkBuilder.position(position)
      }

      /**
       * @param prefix the value to be set.
       */
      override fun prefix(prefix: String) {
        cdkBuilder.prefix(prefix)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.TimecodeBurninSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.TimecodeBurninSettingsProperty,
    ) : CdkObject(cdkObject),
        TimecodeBurninSettingsProperty {
      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-timecodeburninsettings.html#cfn-medialive-channel-timecodeburninsettings-fontsize)
       */
      override fun fontSize(): String? = unwrap(this).getFontSize()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-timecodeburninsettings.html#cfn-medialive-channel-timecodeburninsettings-position)
       */
      override fun position(): String? = unwrap(this).getPosition()

      /**
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-timecodeburninsettings.html#cfn-medialive-channel-timecodeburninsettings-prefix)
       */
      override fun prefix(): String? = unwrap(this).getPrefix()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): TimecodeBurninSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.TimecodeBurninSettingsProperty):
          TimecodeBurninSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          TimecodeBurninSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: TimecodeBurninSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.TimecodeBurninSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.TimecodeBurninSettingsProperty
    }
  }

  /**
   * The configuration of the timecode in the output.
   *
   * The parent of this entity is EncoderSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * TimecodeConfigProperty timecodeConfigProperty = TimecodeConfigProperty.builder()
   * .source("source")
   * .syncThreshold(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-timecodeconfig.html)
   */
  public interface TimecodeConfigProperty {
    /**
     * Identifies the source for the timecode that will be associated with the channel outputs.
     *
     * Embedded (embedded): Initialize the output timecode with timecode from the source. If no
     * embedded timecode is detected in the source, the system falls back to using "Start at 0"
     * (zerobased). System Clock (systemclock): Use the UTC time. Start at 0 (zerobased): The time of
     * the first frame of the channel will be 00:00:00:00.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-timecodeconfig.html#cfn-medialive-channel-timecodeconfig-source)
     */
    public fun source(): String? = unwrap(this).getSource()

    /**
     * The threshold in frames beyond which output timecode is resynchronized to the input timecode.
     *
     * Discrepancies below this threshold are permitted to avoid unnecessary discontinuities in the
     * output timecode. There is no timecode sync when this is not specified.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-timecodeconfig.html#cfn-medialive-channel-timecodeconfig-syncthreshold)
     */
    public fun syncThreshold(): Number? = unwrap(this).getSyncThreshold()

    /**
     * A builder for [TimecodeConfigProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param source Identifies the source for the timecode that will be associated with the
       * channel outputs.
       * Embedded (embedded): Initialize the output timecode with timecode from the source. If no
       * embedded timecode is detected in the source, the system falls back to using "Start at 0"
       * (zerobased). System Clock (systemclock): Use the UTC time. Start at 0 (zerobased): The time of
       * the first frame of the channel will be 00:00:00:00.
       */
      public fun source(source: String)

      /**
       * @param syncThreshold The threshold in frames beyond which output timecode is resynchronized
       * to the input timecode.
       * Discrepancies below this threshold are permitted to avoid unnecessary discontinuities in
       * the output timecode. There is no timecode sync when this is not specified.
       */
      public fun syncThreshold(syncThreshold: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.TimecodeConfigProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.TimecodeConfigProperty.builder()

      /**
       * @param source Identifies the source for the timecode that will be associated with the
       * channel outputs.
       * Embedded (embedded): Initialize the output timecode with timecode from the source. If no
       * embedded timecode is detected in the source, the system falls back to using "Start at 0"
       * (zerobased). System Clock (systemclock): Use the UTC time. Start at 0 (zerobased): The time of
       * the first frame of the channel will be 00:00:00:00.
       */
      override fun source(source: String) {
        cdkBuilder.source(source)
      }

      /**
       * @param syncThreshold The threshold in frames beyond which output timecode is resynchronized
       * to the input timecode.
       * Discrepancies below this threshold are permitted to avoid unnecessary discontinuities in
       * the output timecode. There is no timecode sync when this is not specified.
       */
      override fun syncThreshold(syncThreshold: Number) {
        cdkBuilder.syncThreshold(syncThreshold)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.TimecodeConfigProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.TimecodeConfigProperty,
    ) : CdkObject(cdkObject),
        TimecodeConfigProperty {
      /**
       * Identifies the source for the timecode that will be associated with the channel outputs.
       *
       * Embedded (embedded): Initialize the output timecode with timecode from the source. If no
       * embedded timecode is detected in the source, the system falls back to using "Start at 0"
       * (zerobased). System Clock (systemclock): Use the UTC time. Start at 0 (zerobased): The time of
       * the first frame of the channel will be 00:00:00:00.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-timecodeconfig.html#cfn-medialive-channel-timecodeconfig-source)
       */
      override fun source(): String? = unwrap(this).getSource()

      /**
       * The threshold in frames beyond which output timecode is resynchronized to the input
       * timecode.
       *
       * Discrepancies below this threshold are permitted to avoid unnecessary discontinuities in
       * the output timecode. There is no timecode sync when this is not specified.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-timecodeconfig.html#cfn-medialive-channel-timecodeconfig-syncthreshold)
       */
      override fun syncThreshold(): Number? = unwrap(this).getSyncThreshold()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): TimecodeConfigProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.TimecodeConfigProperty):
          TimecodeConfigProperty = CdkObjectWrappers.wrap(cdkObject) as? TimecodeConfigProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: TimecodeConfigProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.TimecodeConfigProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.TimecodeConfigProperty
    }
  }

  /**
   * The setup of TTML captions in the output.
   *
   * The parent of this entity is CaptionDestinationSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * TtmlDestinationSettingsProperty ttmlDestinationSettingsProperty =
   * TtmlDestinationSettingsProperty.builder()
   * .styleControl("styleControl")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ttmldestinationsettings.html)
   */
  public interface TtmlDestinationSettingsProperty {
    /**
     * When set to passthrough, passes through style and position information from a TTML-like input
     * source (TTML, SMPTE-TT, CFF-TT) to the CFF-TT output or TTML output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ttmldestinationsettings.html#cfn-medialive-channel-ttmldestinationsettings-stylecontrol)
     */
    public fun styleControl(): String? = unwrap(this).getStyleControl()

    /**
     * A builder for [TtmlDestinationSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param styleControl When set to passthrough, passes through style and position information
       * from a TTML-like input source (TTML, SMPTE-TT, CFF-TT) to the CFF-TT output or TTML output.
       */
      public fun styleControl(styleControl: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.TtmlDestinationSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.TtmlDestinationSettingsProperty.builder()

      /**
       * @param styleControl When set to passthrough, passes through style and position information
       * from a TTML-like input source (TTML, SMPTE-TT, CFF-TT) to the CFF-TT output or TTML output.
       */
      override fun styleControl(styleControl: String) {
        cdkBuilder.styleControl(styleControl)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.TtmlDestinationSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.TtmlDestinationSettingsProperty,
    ) : CdkObject(cdkObject),
        TtmlDestinationSettingsProperty {
      /**
       * When set to passthrough, passes through style and position information from a TTML-like
       * input source (TTML, SMPTE-TT, CFF-TT) to the CFF-TT output or TTML output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ttmldestinationsettings.html#cfn-medialive-channel-ttmldestinationsettings-stylecontrol)
       */
      override fun styleControl(): String? = unwrap(this).getStyleControl()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): TtmlDestinationSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.TtmlDestinationSettingsProperty):
          TtmlDestinationSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          TtmlDestinationSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: TtmlDestinationSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.TtmlDestinationSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.TtmlDestinationSettingsProperty
    }
  }

  /**
   * The configuration of a UDP output.
   *
   * The parent of this entity is UdpOutputSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * UdpContainerSettingsProperty udpContainerSettingsProperty =
   * UdpContainerSettingsProperty.builder()
   * .m2TsSettings(M2tsSettingsProperty.builder()
   * .absentInputAudioBehavior("absentInputAudioBehavior")
   * .arib("arib")
   * .aribCaptionsPid("aribCaptionsPid")
   * .aribCaptionsPidControl("aribCaptionsPidControl")
   * .audioBufferModel("audioBufferModel")
   * .audioFramesPerPes(123)
   * .audioPids("audioPids")
   * .audioStreamType("audioStreamType")
   * .bitrate(123)
   * .bufferModel("bufferModel")
   * .ccDescriptor("ccDescriptor")
   * .dvbNitSettings(DvbNitSettingsProperty.builder()
   * .networkId(123)
   * .networkName("networkName")
   * .repInterval(123)
   * .build())
   * .dvbSdtSettings(DvbSdtSettingsProperty.builder()
   * .outputSdt("outputSdt")
   * .repInterval(123)
   * .serviceName("serviceName")
   * .serviceProviderName("serviceProviderName")
   * .build())
   * .dvbSubPids("dvbSubPids")
   * .dvbTdtSettings(DvbTdtSettingsProperty.builder()
   * .repInterval(123)
   * .build())
   * .dvbTeletextPid("dvbTeletextPid")
   * .ebif("ebif")
   * .ebpAudioInterval("ebpAudioInterval")
   * .ebpLookaheadMs(123)
   * .ebpPlacement("ebpPlacement")
   * .ecmPid("ecmPid")
   * .esRateInPes("esRateInPes")
   * .etvPlatformPid("etvPlatformPid")
   * .etvSignalPid("etvSignalPid")
   * .fragmentTime(123)
   * .klv("klv")
   * .klvDataPids("klvDataPids")
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .nullPacketBitrate(123)
   * .patInterval(123)
   * .pcrControl("pcrControl")
   * .pcrPeriod(123)
   * .pcrPid("pcrPid")
   * .pmtInterval(123)
   * .pmtPid("pmtPid")
   * .programNum(123)
   * .rateMode("rateMode")
   * .scte27Pids("scte27Pids")
   * .scte35Control("scte35Control")
   * .scte35Pid("scte35Pid")
   * .scte35PrerollPullupMilliseconds(123)
   * .segmentationMarkers("segmentationMarkers")
   * .segmentationStyle("segmentationStyle")
   * .segmentationTime(123)
   * .timedMetadataBehavior("timedMetadataBehavior")
   * .timedMetadataPid("timedMetadataPid")
   * .transportStreamId(123)
   * .videoPid("videoPid")
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpcontainersettings.html)
   */
  public interface UdpContainerSettingsProperty {
    /**
     * The M2TS configuration for this UDP output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpcontainersettings.html#cfn-medialive-channel-udpcontainersettings-m2tssettings)
     */
    public fun m2TsSettings(): Any? = unwrap(this).getM2TsSettings()

    /**
     * A builder for [UdpContainerSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param m2TsSettings The M2TS configuration for this UDP output.
       */
      public fun m2TsSettings(m2TsSettings: IResolvable)

      /**
       * @param m2TsSettings The M2TS configuration for this UDP output.
       */
      public fun m2TsSettings(m2TsSettings: M2tsSettingsProperty)

      /**
       * @param m2TsSettings The M2TS configuration for this UDP output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("de00169a1a7b875224dcc32084c600e437c97c6eb3c8f07f07e02283fcb99e06")
      public fun m2TsSettings(m2TsSettings: M2tsSettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.UdpContainerSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.UdpContainerSettingsProperty.builder()

      /**
       * @param m2TsSettings The M2TS configuration for this UDP output.
       */
      override fun m2TsSettings(m2TsSettings: IResolvable) {
        cdkBuilder.m2TsSettings(m2TsSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param m2TsSettings The M2TS configuration for this UDP output.
       */
      override fun m2TsSettings(m2TsSettings: M2tsSettingsProperty) {
        cdkBuilder.m2TsSettings(m2TsSettings.let(M2tsSettingsProperty.Companion::unwrap))
      }

      /**
       * @param m2TsSettings The M2TS configuration for this UDP output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("de00169a1a7b875224dcc32084c600e437c97c6eb3c8f07f07e02283fcb99e06")
      override fun m2TsSettings(m2TsSettings: M2tsSettingsProperty.Builder.() -> Unit): Unit =
          m2TsSettings(M2tsSettingsProperty(m2TsSettings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.UdpContainerSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.UdpContainerSettingsProperty,
    ) : CdkObject(cdkObject),
        UdpContainerSettingsProperty {
      /**
       * The M2TS configuration for this UDP output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpcontainersettings.html#cfn-medialive-channel-udpcontainersettings-m2tssettings)
       */
      override fun m2TsSettings(): Any? = unwrap(this).getM2TsSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): UdpContainerSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.UdpContainerSettingsProperty):
          UdpContainerSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          UdpContainerSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: UdpContainerSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.UdpContainerSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.UdpContainerSettingsProperty
    }
  }

  /**
   * The configuration of a UDP output group.
   *
   * The parent of this entity is OutputGroupSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * UdpGroupSettingsProperty udpGroupSettingsProperty = UdpGroupSettingsProperty.builder()
   * .inputLossAction("inputLossAction")
   * .timedMetadataId3Frame("timedMetadataId3Frame")
   * .timedMetadataId3Period(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpgroupsettings.html)
   */
  public interface UdpGroupSettingsProperty {
    /**
     * Specifies the behavior of the last resort when the input video is lost, and no more backup
     * inputs are available.
     *
     * When dropTs is selected, the entire transport stream stops emitting. When dropProgram is
     * selected, the program can be dropped from the transport stream (and replaced with null packets
     * to meet the TS bitrate requirement). Or when emitProgram is selected, the transport stream
     * continues to be produced normally with repeat frames, black frames, or slate frames substituted
     * for the absent input video.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpgroupsettings.html#cfn-medialive-channel-udpgroupsettings-inputlossaction)
     */
    public fun inputLossAction(): String? = unwrap(this).getInputLossAction()

    /**
     * Indicates the ID3 frame that has the timecode.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpgroupsettings.html#cfn-medialive-channel-udpgroupsettings-timedmetadataid3frame)
     */
    public fun timedMetadataId3Frame(): String? = unwrap(this).getTimedMetadataId3Frame()

    /**
     * The timed metadata interval in seconds.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpgroupsettings.html#cfn-medialive-channel-udpgroupsettings-timedmetadataid3period)
     */
    public fun timedMetadataId3Period(): Number? = unwrap(this).getTimedMetadataId3Period()

    /**
     * A builder for [UdpGroupSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param inputLossAction Specifies the behavior of the last resort when the input video is
       * lost, and no more backup inputs are available.
       * When dropTs is selected, the entire transport stream stops emitting. When dropProgram is
       * selected, the program can be dropped from the transport stream (and replaced with null packets
       * to meet the TS bitrate requirement). Or when emitProgram is selected, the transport stream
       * continues to be produced normally with repeat frames, black frames, or slate frames
       * substituted for the absent input video.
       */
      public fun inputLossAction(inputLossAction: String)

      /**
       * @param timedMetadataId3Frame Indicates the ID3 frame that has the timecode.
       */
      public fun timedMetadataId3Frame(timedMetadataId3Frame: String)

      /**
       * @param timedMetadataId3Period The timed metadata interval in seconds.
       */
      public fun timedMetadataId3Period(timedMetadataId3Period: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.UdpGroupSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.UdpGroupSettingsProperty.builder()

      /**
       * @param inputLossAction Specifies the behavior of the last resort when the input video is
       * lost, and no more backup inputs are available.
       * When dropTs is selected, the entire transport stream stops emitting. When dropProgram is
       * selected, the program can be dropped from the transport stream (and replaced with null packets
       * to meet the TS bitrate requirement). Or when emitProgram is selected, the transport stream
       * continues to be produced normally with repeat frames, black frames, or slate frames
       * substituted for the absent input video.
       */
      override fun inputLossAction(inputLossAction: String) {
        cdkBuilder.inputLossAction(inputLossAction)
      }

      /**
       * @param timedMetadataId3Frame Indicates the ID3 frame that has the timecode.
       */
      override fun timedMetadataId3Frame(timedMetadataId3Frame: String) {
        cdkBuilder.timedMetadataId3Frame(timedMetadataId3Frame)
      }

      /**
       * @param timedMetadataId3Period The timed metadata interval in seconds.
       */
      override fun timedMetadataId3Period(timedMetadataId3Period: Number) {
        cdkBuilder.timedMetadataId3Period(timedMetadataId3Period)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.UdpGroupSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.UdpGroupSettingsProperty,
    ) : CdkObject(cdkObject),
        UdpGroupSettingsProperty {
      /**
       * Specifies the behavior of the last resort when the input video is lost, and no more backup
       * inputs are available.
       *
       * When dropTs is selected, the entire transport stream stops emitting. When dropProgram is
       * selected, the program can be dropped from the transport stream (and replaced with null packets
       * to meet the TS bitrate requirement). Or when emitProgram is selected, the transport stream
       * continues to be produced normally with repeat frames, black frames, or slate frames
       * substituted for the absent input video.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpgroupsettings.html#cfn-medialive-channel-udpgroupsettings-inputlossaction)
       */
      override fun inputLossAction(): String? = unwrap(this).getInputLossAction()

      /**
       * Indicates the ID3 frame that has the timecode.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpgroupsettings.html#cfn-medialive-channel-udpgroupsettings-timedmetadataid3frame)
       */
      override fun timedMetadataId3Frame(): String? = unwrap(this).getTimedMetadataId3Frame()

      /**
       * The timed metadata interval in seconds.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpgroupsettings.html#cfn-medialive-channel-udpgroupsettings-timedmetadataid3period)
       */
      override fun timedMetadataId3Period(): Number? = unwrap(this).getTimedMetadataId3Period()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): UdpGroupSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.UdpGroupSettingsProperty):
          UdpGroupSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? UdpGroupSettingsProperty
          ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: UdpGroupSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.UdpGroupSettingsProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.UdpGroupSettingsProperty
    }
  }

  /**
   * The settings for one UDP output.
   *
   * The parent of this entity is OutputSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * UdpOutputSettingsProperty udpOutputSettingsProperty = UdpOutputSettingsProperty.builder()
   * .bufferMsec(123)
   * .containerSettings(UdpContainerSettingsProperty.builder()
   * .m2TsSettings(M2tsSettingsProperty.builder()
   * .absentInputAudioBehavior("absentInputAudioBehavior")
   * .arib("arib")
   * .aribCaptionsPid("aribCaptionsPid")
   * .aribCaptionsPidControl("aribCaptionsPidControl")
   * .audioBufferModel("audioBufferModel")
   * .audioFramesPerPes(123)
   * .audioPids("audioPids")
   * .audioStreamType("audioStreamType")
   * .bitrate(123)
   * .bufferModel("bufferModel")
   * .ccDescriptor("ccDescriptor")
   * .dvbNitSettings(DvbNitSettingsProperty.builder()
   * .networkId(123)
   * .networkName("networkName")
   * .repInterval(123)
   * .build())
   * .dvbSdtSettings(DvbSdtSettingsProperty.builder()
   * .outputSdt("outputSdt")
   * .repInterval(123)
   * .serviceName("serviceName")
   * .serviceProviderName("serviceProviderName")
   * .build())
   * .dvbSubPids("dvbSubPids")
   * .dvbTdtSettings(DvbTdtSettingsProperty.builder()
   * .repInterval(123)
   * .build())
   * .dvbTeletextPid("dvbTeletextPid")
   * .ebif("ebif")
   * .ebpAudioInterval("ebpAudioInterval")
   * .ebpLookaheadMs(123)
   * .ebpPlacement("ebpPlacement")
   * .ecmPid("ecmPid")
   * .esRateInPes("esRateInPes")
   * .etvPlatformPid("etvPlatformPid")
   * .etvSignalPid("etvSignalPid")
   * .fragmentTime(123)
   * .klv("klv")
   * .klvDataPids("klvDataPids")
   * .nielsenId3Behavior("nielsenId3Behavior")
   * .nullPacketBitrate(123)
   * .patInterval(123)
   * .pcrControl("pcrControl")
   * .pcrPeriod(123)
   * .pcrPid("pcrPid")
   * .pmtInterval(123)
   * .pmtPid("pmtPid")
   * .programNum(123)
   * .rateMode("rateMode")
   * .scte27Pids("scte27Pids")
   * .scte35Control("scte35Control")
   * .scte35Pid("scte35Pid")
   * .scte35PrerollPullupMilliseconds(123)
   * .segmentationMarkers("segmentationMarkers")
   * .segmentationStyle("segmentationStyle")
   * .segmentationTime(123)
   * .timedMetadataBehavior("timedMetadataBehavior")
   * .timedMetadataPid("timedMetadataPid")
   * .transportStreamId(123)
   * .videoPid("videoPid")
   * .build())
   * .build())
   * .destination(OutputLocationRefProperty.builder()
   * .destinationRefId("destinationRefId")
   * .build())
   * .fecOutputSettings(FecOutputSettingsProperty.builder()
   * .columnDepth(123)
   * .includeFec("includeFec")
   * .rowLength(123)
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpoutputsettings.html)
   */
  public interface UdpOutputSettingsProperty {
    /**
     * The UDP output buffering in milliseconds.
     *
     * Larger values increase latency through the transcoder but simultaneously assist the
     * transcoder in maintaining a constant, low-jitter UDP/RTP output while accommodating clock
     * recovery, input switching, input disruptions, picture reordering, and so on.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpoutputsettings.html#cfn-medialive-channel-udpoutputsettings-buffermsec)
     */
    public fun bufferMsec(): Number? = unwrap(this).getBufferMsec()

    /**
     * The settings for the UDP output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpoutputsettings.html#cfn-medialive-channel-udpoutputsettings-containersettings)
     */
    public fun containerSettings(): Any? = unwrap(this).getContainerSettings()

    /**
     * The destination address and port number for RTP or UDP packets.
     *
     * These can be unicast or multicast RTP or UDP (for example, rtp://239.10.10.10:5001 or
     * udp://10.100.100.100:5002).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpoutputsettings.html#cfn-medialive-channel-udpoutputsettings-destination)
     */
    public fun destination(): Any? = unwrap(this).getDestination()

    /**
     * The settings for enabling and adjusting Forward Error Correction on UDP outputs.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpoutputsettings.html#cfn-medialive-channel-udpoutputsettings-fecoutputsettings)
     */
    public fun fecOutputSettings(): Any? = unwrap(this).getFecOutputSettings()

    /**
     * A builder for [UdpOutputSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param bufferMsec The UDP output buffering in milliseconds.
       * Larger values increase latency through the transcoder but simultaneously assist the
       * transcoder in maintaining a constant, low-jitter UDP/RTP output while accommodating clock
       * recovery, input switching, input disruptions, picture reordering, and so on.
       */
      public fun bufferMsec(bufferMsec: Number)

      /**
       * @param containerSettings The settings for the UDP output.
       */
      public fun containerSettings(containerSettings: IResolvable)

      /**
       * @param containerSettings The settings for the UDP output.
       */
      public fun containerSettings(containerSettings: UdpContainerSettingsProperty)

      /**
       * @param containerSettings The settings for the UDP output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("74df9c597b89bd508144098b540e43dfa8022f2bd985d484a1eba086ebc32fc7")
      public
          fun containerSettings(containerSettings: UdpContainerSettingsProperty.Builder.() -> Unit)

      /**
       * @param destination The destination address and port number for RTP or UDP packets.
       * These can be unicast or multicast RTP or UDP (for example, rtp://239.10.10.10:5001 or
       * udp://10.100.100.100:5002).
       */
      public fun destination(destination: IResolvable)

      /**
       * @param destination The destination address and port number for RTP or UDP packets.
       * These can be unicast or multicast RTP or UDP (for example, rtp://239.10.10.10:5001 or
       * udp://10.100.100.100:5002).
       */
      public fun destination(destination: OutputLocationRefProperty)

      /**
       * @param destination The destination address and port number for RTP or UDP packets.
       * These can be unicast or multicast RTP or UDP (for example, rtp://239.10.10.10:5001 or
       * udp://10.100.100.100:5002).
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("deacb52f4718c51c83188dd4ac73760ed57f512d6d448bf0d172c52f6faeb877")
      public fun destination(destination: OutputLocationRefProperty.Builder.() -> Unit)

      /**
       * @param fecOutputSettings The settings for enabling and adjusting Forward Error Correction
       * on UDP outputs.
       */
      public fun fecOutputSettings(fecOutputSettings: IResolvable)

      /**
       * @param fecOutputSettings The settings for enabling and adjusting Forward Error Correction
       * on UDP outputs.
       */
      public fun fecOutputSettings(fecOutputSettings: FecOutputSettingsProperty)

      /**
       * @param fecOutputSettings The settings for enabling and adjusting Forward Error Correction
       * on UDP outputs.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("434432a33c4ebb01fadf3281ed2be04d8ad3c4e59c68e6cfe0d5816c521c690e")
      public fun fecOutputSettings(fecOutputSettings: FecOutputSettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.UdpOutputSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.UdpOutputSettingsProperty.builder()

      /**
       * @param bufferMsec The UDP output buffering in milliseconds.
       * Larger values increase latency through the transcoder but simultaneously assist the
       * transcoder in maintaining a constant, low-jitter UDP/RTP output while accommodating clock
       * recovery, input switching, input disruptions, picture reordering, and so on.
       */
      override fun bufferMsec(bufferMsec: Number) {
        cdkBuilder.bufferMsec(bufferMsec)
      }

      /**
       * @param containerSettings The settings for the UDP output.
       */
      override fun containerSettings(containerSettings: IResolvable) {
        cdkBuilder.containerSettings(containerSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param containerSettings The settings for the UDP output.
       */
      override fun containerSettings(containerSettings: UdpContainerSettingsProperty) {
        cdkBuilder.containerSettings(containerSettings.let(UdpContainerSettingsProperty.Companion::unwrap))
      }

      /**
       * @param containerSettings The settings for the UDP output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("74df9c597b89bd508144098b540e43dfa8022f2bd985d484a1eba086ebc32fc7")
      override
          fun containerSettings(containerSettings: UdpContainerSettingsProperty.Builder.() -> Unit):
          Unit = containerSettings(UdpContainerSettingsProperty(containerSettings))

      /**
       * @param destination The destination address and port number for RTP or UDP packets.
       * These can be unicast or multicast RTP or UDP (for example, rtp://239.10.10.10:5001 or
       * udp://10.100.100.100:5002).
       */
      override fun destination(destination: IResolvable) {
        cdkBuilder.destination(destination.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param destination The destination address and port number for RTP or UDP packets.
       * These can be unicast or multicast RTP or UDP (for example, rtp://239.10.10.10:5001 or
       * udp://10.100.100.100:5002).
       */
      override fun destination(destination: OutputLocationRefProperty) {
        cdkBuilder.destination(destination.let(OutputLocationRefProperty.Companion::unwrap))
      }

      /**
       * @param destination The destination address and port number for RTP or UDP packets.
       * These can be unicast or multicast RTP or UDP (for example, rtp://239.10.10.10:5001 or
       * udp://10.100.100.100:5002).
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("deacb52f4718c51c83188dd4ac73760ed57f512d6d448bf0d172c52f6faeb877")
      override fun destination(destination: OutputLocationRefProperty.Builder.() -> Unit): Unit =
          destination(OutputLocationRefProperty(destination))

      /**
       * @param fecOutputSettings The settings for enabling and adjusting Forward Error Correction
       * on UDP outputs.
       */
      override fun fecOutputSettings(fecOutputSettings: IResolvable) {
        cdkBuilder.fecOutputSettings(fecOutputSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param fecOutputSettings The settings for enabling and adjusting Forward Error Correction
       * on UDP outputs.
       */
      override fun fecOutputSettings(fecOutputSettings: FecOutputSettingsProperty) {
        cdkBuilder.fecOutputSettings(fecOutputSettings.let(FecOutputSettingsProperty.Companion::unwrap))
      }

      /**
       * @param fecOutputSettings The settings for enabling and adjusting Forward Error Correction
       * on UDP outputs.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("434432a33c4ebb01fadf3281ed2be04d8ad3c4e59c68e6cfe0d5816c521c690e")
      override
          fun fecOutputSettings(fecOutputSettings: FecOutputSettingsProperty.Builder.() -> Unit):
          Unit = fecOutputSettings(FecOutputSettingsProperty(fecOutputSettings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.UdpOutputSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.UdpOutputSettingsProperty,
    ) : CdkObject(cdkObject),
        UdpOutputSettingsProperty {
      /**
       * The UDP output buffering in milliseconds.
       *
       * Larger values increase latency through the transcoder but simultaneously assist the
       * transcoder in maintaining a constant, low-jitter UDP/RTP output while accommodating clock
       * recovery, input switching, input disruptions, picture reordering, and so on.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpoutputsettings.html#cfn-medialive-channel-udpoutputsettings-buffermsec)
       */
      override fun bufferMsec(): Number? = unwrap(this).getBufferMsec()

      /**
       * The settings for the UDP output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpoutputsettings.html#cfn-medialive-channel-udpoutputsettings-containersettings)
       */
      override fun containerSettings(): Any? = unwrap(this).getContainerSettings()

      /**
       * The destination address and port number for RTP or UDP packets.
       *
       * These can be unicast or multicast RTP or UDP (for example, rtp://239.10.10.10:5001 or
       * udp://10.100.100.100:5002).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpoutputsettings.html#cfn-medialive-channel-udpoutputsettings-destination)
       */
      override fun destination(): Any? = unwrap(this).getDestination()

      /**
       * The settings for enabling and adjusting Forward Error Correction on UDP outputs.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpoutputsettings.html#cfn-medialive-channel-udpoutputsettings-fecoutputsettings)
       */
      override fun fecOutputSettings(): Any? = unwrap(this).getFecOutputSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): UdpOutputSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.UdpOutputSettingsProperty):
          UdpOutputSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          UdpOutputSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: UdpOutputSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.UdpOutputSettingsProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.UdpOutputSettingsProperty
    }
  }

  /**
   * MediaLive will perform a failover if content is considered black for the specified period.
   *
   * The parent of this entity is FailoverConditionSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * VideoBlackFailoverSettingsProperty videoBlackFailoverSettingsProperty =
   * VideoBlackFailoverSettingsProperty.builder()
   * .blackDetectThreshold(123)
   * .videoBlackThresholdMsec(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoblackfailoversettings.html)
   */
  public interface VideoBlackFailoverSettingsProperty {
    /**
     * A value used in calculating the threshold below which MediaLive considers a pixel to be
     * 'black'.
     *
     * For the input to be considered black, every pixel in a frame must be below this threshold.
     * The threshold is calculated as a percentage (expressed as a decimal) of white. Therefore .1
     * means 10% white (or 90% black). Note how the formula works for any color depth. For example, if
     * you set this field to 0.1 in 10-bit color depth: (1023*0.1=102.3), which means a pixel value of
     * 102 or less is 'black'. If you set this field to .1 in an 8-bit color depth: (255*0.1=25.5),
     * which means a pixel value of 25 or less is 'black'. The range is 0.0 to 1.0, with any number of
     * decimal places.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoblackfailoversettings.html#cfn-medialive-channel-videoblackfailoversettings-blackdetectthreshold)
     */
    public fun blackDetectThreshold(): Number? = unwrap(this).getBlackDetectThreshold()

    /**
     * The amount of time (in milliseconds) that the active input must be black before automatic
     * input failover occurs.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoblackfailoversettings.html#cfn-medialive-channel-videoblackfailoversettings-videoblackthresholdmsec)
     */
    public fun videoBlackThresholdMsec(): Number? = unwrap(this).getVideoBlackThresholdMsec()

    /**
     * A builder for [VideoBlackFailoverSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param blackDetectThreshold A value used in calculating the threshold below which MediaLive
       * considers a pixel to be 'black'.
       * For the input to be considered black, every pixel in a frame must be below this threshold.
       * The threshold is calculated as a percentage (expressed as a decimal) of white. Therefore .1
       * means 10% white (or 90% black). Note how the formula works for any color depth. For example,
       * if you set this field to 0.1 in 10-bit color depth: (1023*0.1=102.3), which means a pixel
       * value of 102 or less is 'black'. If you set this field to .1 in an 8-bit color depth:
       * (255*0.1=25.5), which means a pixel value of 25 or less is 'black'. The range is 0.0 to 1.0,
       * with any number of decimal places.
       */
      public fun blackDetectThreshold(blackDetectThreshold: Number)

      /**
       * @param videoBlackThresholdMsec The amount of time (in milliseconds) that the active input
       * must be black before automatic input failover occurs.
       */
      public fun videoBlackThresholdMsec(videoBlackThresholdMsec: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.VideoBlackFailoverSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.VideoBlackFailoverSettingsProperty.builder()

      /**
       * @param blackDetectThreshold A value used in calculating the threshold below which MediaLive
       * considers a pixel to be 'black'.
       * For the input to be considered black, every pixel in a frame must be below this threshold.
       * The threshold is calculated as a percentage (expressed as a decimal) of white. Therefore .1
       * means 10% white (or 90% black). Note how the formula works for any color depth. For example,
       * if you set this field to 0.1 in 10-bit color depth: (1023*0.1=102.3), which means a pixel
       * value of 102 or less is 'black'. If you set this field to .1 in an 8-bit color depth:
       * (255*0.1=25.5), which means a pixel value of 25 or less is 'black'. The range is 0.0 to 1.0,
       * with any number of decimal places.
       */
      override fun blackDetectThreshold(blackDetectThreshold: Number) {
        cdkBuilder.blackDetectThreshold(blackDetectThreshold)
      }

      /**
       * @param videoBlackThresholdMsec The amount of time (in milliseconds) that the active input
       * must be black before automatic input failover occurs.
       */
      override fun videoBlackThresholdMsec(videoBlackThresholdMsec: Number) {
        cdkBuilder.videoBlackThresholdMsec(videoBlackThresholdMsec)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.VideoBlackFailoverSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.VideoBlackFailoverSettingsProperty,
    ) : CdkObject(cdkObject),
        VideoBlackFailoverSettingsProperty {
      /**
       * A value used in calculating the threshold below which MediaLive considers a pixel to be
       * 'black'.
       *
       * For the input to be considered black, every pixel in a frame must be below this threshold.
       * The threshold is calculated as a percentage (expressed as a decimal) of white. Therefore .1
       * means 10% white (or 90% black). Note how the formula works for any color depth. For example,
       * if you set this field to 0.1 in 10-bit color depth: (1023*0.1=102.3), which means a pixel
       * value of 102 or less is 'black'. If you set this field to .1 in an 8-bit color depth:
       * (255*0.1=25.5), which means a pixel value of 25 or less is 'black'. The range is 0.0 to 1.0,
       * with any number of decimal places.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoblackfailoversettings.html#cfn-medialive-channel-videoblackfailoversettings-blackdetectthreshold)
       */
      override fun blackDetectThreshold(): Number? = unwrap(this).getBlackDetectThreshold()

      /**
       * The amount of time (in milliseconds) that the active input must be black before automatic
       * input failover occurs.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoblackfailoversettings.html#cfn-medialive-channel-videoblackfailoversettings-videoblackthresholdmsec)
       */
      override fun videoBlackThresholdMsec(): Number? = unwrap(this).getVideoBlackThresholdMsec()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          VideoBlackFailoverSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.VideoBlackFailoverSettingsProperty):
          VideoBlackFailoverSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          VideoBlackFailoverSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: VideoBlackFailoverSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.VideoBlackFailoverSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.VideoBlackFailoverSettingsProperty
    }
  }

  /**
   * The settings for the video codec in the output.
   *
   * The parent of this entity is VideoDescription.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * VideoCodecSettingsProperty videoCodecSettingsProperty = VideoCodecSettingsProperty.builder()
   * .frameCaptureSettings(FrameCaptureSettingsProperty.builder()
   * .captureInterval(123)
   * .captureIntervalUnits("captureIntervalUnits")
   * .timecodeBurninSettings(TimecodeBurninSettingsProperty.builder()
   * .fontSize("fontSize")
   * .position("position")
   * .prefix("prefix")
   * .build())
   * .build())
   * .h264Settings(H264SettingsProperty.builder()
   * .adaptiveQuantization("adaptiveQuantization")
   * .afdSignaling("afdSignaling")
   * .bitrate(123)
   * .bufFillPct(123)
   * .bufSize(123)
   * .colorMetadata("colorMetadata")
   * .colorSpaceSettings(H264ColorSpaceSettingsProperty.builder()
   * .colorSpacePassthroughSettings(ColorSpacePassthroughSettingsProperty.builder().build())
   * .rec601Settings(Rec601SettingsProperty.builder().build())
   * .rec709Settings(Rec709SettingsProperty.builder().build())
   * .build())
   * .entropyEncoding("entropyEncoding")
   * .filterSettings(H264FilterSettingsProperty.builder()
   * .temporalFilterSettings(TemporalFilterSettingsProperty.builder()
   * .postFilterSharpening("postFilterSharpening")
   * .strength("strength")
   * .build())
   * .build())
   * .fixedAfd("fixedAfd")
   * .flickerAq("flickerAq")
   * .forceFieldPictures("forceFieldPictures")
   * .framerateControl("framerateControl")
   * .framerateDenominator(123)
   * .framerateNumerator(123)
   * .gopBReference("gopBReference")
   * .gopClosedCadence(123)
   * .gopNumBFrames(123)
   * .gopSize(123)
   * .gopSizeUnits("gopSizeUnits")
   * .level("level")
   * .lookAheadRateControl("lookAheadRateControl")
   * .maxBitrate(123)
   * .minIInterval(123)
   * .numRefFrames(123)
   * .parControl("parControl")
   * .parDenominator(123)
   * .parNumerator(123)
   * .profile("profile")
   * .qualityLevel("qualityLevel")
   * .qvbrQualityLevel(123)
   * .rateControlMode("rateControlMode")
   * .scanType("scanType")
   * .sceneChangeDetect("sceneChangeDetect")
   * .slices(123)
   * .softness(123)
   * .spatialAq("spatialAq")
   * .subgopLength("subgopLength")
   * .syntax("syntax")
   * .temporalAq("temporalAq")
   * .timecodeBurninSettings(TimecodeBurninSettingsProperty.builder()
   * .fontSize("fontSize")
   * .position("position")
   * .prefix("prefix")
   * .build())
   * .timecodeInsertion("timecodeInsertion")
   * .build())
   * .h265Settings(H265SettingsProperty.builder()
   * .adaptiveQuantization("adaptiveQuantization")
   * .afdSignaling("afdSignaling")
   * .alternativeTransferFunction("alternativeTransferFunction")
   * .bitrate(123)
   * .bufSize(123)
   * .colorMetadata("colorMetadata")
   * .colorSpaceSettings(H265ColorSpaceSettingsProperty.builder()
   * .colorSpacePassthroughSettings(ColorSpacePassthroughSettingsProperty.builder().build())
   * .dolbyVision81Settings(DolbyVision81SettingsProperty.builder().build())
   * .hdr10Settings(Hdr10SettingsProperty.builder()
   * .maxCll(123)
   * .maxFall(123)
   * .build())
   * .rec601Settings(Rec601SettingsProperty.builder().build())
   * .rec709Settings(Rec709SettingsProperty.builder().build())
   * .build())
   * .filterSettings(H265FilterSettingsProperty.builder()
   * .temporalFilterSettings(TemporalFilterSettingsProperty.builder()
   * .postFilterSharpening("postFilterSharpening")
   * .strength("strength")
   * .build())
   * .build())
   * .fixedAfd("fixedAfd")
   * .flickerAq("flickerAq")
   * .framerateDenominator(123)
   * .framerateNumerator(123)
   * .gopClosedCadence(123)
   * .gopSize(123)
   * .gopSizeUnits("gopSizeUnits")
   * .level("level")
   * .lookAheadRateControl("lookAheadRateControl")
   * .maxBitrate(123)
   * .minIInterval(123)
   * .mvOverPictureBoundaries("mvOverPictureBoundaries")
   * .mvTemporalPredictor("mvTemporalPredictor")
   * .parDenominator(123)
   * .parNumerator(123)
   * .profile("profile")
   * .qvbrQualityLevel(123)
   * .rateControlMode("rateControlMode")
   * .scanType("scanType")
   * .sceneChangeDetect("sceneChangeDetect")
   * .slices(123)
   * .tier("tier")
   * .tileHeight(123)
   * .tilePadding("tilePadding")
   * .tileWidth(123)
   * .timecodeBurninSettings(TimecodeBurninSettingsProperty.builder()
   * .fontSize("fontSize")
   * .position("position")
   * .prefix("prefix")
   * .build())
   * .timecodeInsertion("timecodeInsertion")
   * .treeblockSize("treeblockSize")
   * .build())
   * .mpeg2Settings(Mpeg2SettingsProperty.builder()
   * .adaptiveQuantization("adaptiveQuantization")
   * .afdSignaling("afdSignaling")
   * .colorMetadata("colorMetadata")
   * .colorSpace("colorSpace")
   * .displayAspectRatio("displayAspectRatio")
   * .filterSettings(Mpeg2FilterSettingsProperty.builder()
   * .temporalFilterSettings(TemporalFilterSettingsProperty.builder()
   * .postFilterSharpening("postFilterSharpening")
   * .strength("strength")
   * .build())
   * .build())
   * .fixedAfd("fixedAfd")
   * .framerateDenominator(123)
   * .framerateNumerator(123)
   * .gopClosedCadence(123)
   * .gopNumBFrames(123)
   * .gopSize(123)
   * .gopSizeUnits("gopSizeUnits")
   * .scanType("scanType")
   * .subgopLength("subgopLength")
   * .timecodeBurninSettings(TimecodeBurninSettingsProperty.builder()
   * .fontSize("fontSize")
   * .position("position")
   * .prefix("prefix")
   * .build())
   * .timecodeInsertion("timecodeInsertion")
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videocodecsettings.html)
   */
  public interface VideoCodecSettingsProperty {
    /**
     * The settings for the video codec in a frame capture output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videocodecsettings.html#cfn-medialive-channel-videocodecsettings-framecapturesettings)
     */
    public fun frameCaptureSettings(): Any? = unwrap(this).getFrameCaptureSettings()

    /**
     * The settings for the H.264 codec in the output.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videocodecsettings.html#cfn-medialive-channel-videocodecsettings-h264settings)
     */
    public fun h264Settings(): Any? = unwrap(this).getH264Settings()

    /**
     * Settings for video encoded with the H265 codec.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videocodecsettings.html#cfn-medialive-channel-videocodecsettings-h265settings)
     */
    public fun h265Settings(): Any? = unwrap(this).getH265Settings()

    /**
     * Settings for video encoded with the MPEG-2 codec.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videocodecsettings.html#cfn-medialive-channel-videocodecsettings-mpeg2settings)
     */
    public fun mpeg2Settings(): Any? = unwrap(this).getMpeg2Settings()

    /**
     * A builder for [VideoCodecSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param frameCaptureSettings The settings for the video codec in a frame capture output.
       */
      public fun frameCaptureSettings(frameCaptureSettings: IResolvable)

      /**
       * @param frameCaptureSettings The settings for the video codec in a frame capture output.
       */
      public fun frameCaptureSettings(frameCaptureSettings: FrameCaptureSettingsProperty)

      /**
       * @param frameCaptureSettings The settings for the video codec in a frame capture output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("222c62772bf18b14036723a2d521cdb01e8137f202f75bb2683d6fded0bdf2c1")
      public
          fun frameCaptureSettings(frameCaptureSettings: FrameCaptureSettingsProperty.Builder.() -> Unit)

      /**
       * @param h264Settings The settings for the H.264 codec in the output.
       */
      public fun h264Settings(h264Settings: IResolvable)

      /**
       * @param h264Settings The settings for the H.264 codec in the output.
       */
      public fun h264Settings(h264Settings: H264SettingsProperty)

      /**
       * @param h264Settings The settings for the H.264 codec in the output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("c077ec3e18f44e6ffc841e43a8223e933183c8d0c58c6b9f35a4e28b5578c651")
      public fun h264Settings(h264Settings: H264SettingsProperty.Builder.() -> Unit)

      /**
       * @param h265Settings Settings for video encoded with the H265 codec.
       */
      public fun h265Settings(h265Settings: IResolvable)

      /**
       * @param h265Settings Settings for video encoded with the H265 codec.
       */
      public fun h265Settings(h265Settings: H265SettingsProperty)

      /**
       * @param h265Settings Settings for video encoded with the H265 codec.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("d205d9eb647853e8b9d4108b737b8d4d5154eb19ebbc3a6590c9038afee3602f")
      public fun h265Settings(h265Settings: H265SettingsProperty.Builder.() -> Unit)

      /**
       * @param mpeg2Settings Settings for video encoded with the MPEG-2 codec.
       */
      public fun mpeg2Settings(mpeg2Settings: IResolvable)

      /**
       * @param mpeg2Settings Settings for video encoded with the MPEG-2 codec.
       */
      public fun mpeg2Settings(mpeg2Settings: Mpeg2SettingsProperty)

      /**
       * @param mpeg2Settings Settings for video encoded with the MPEG-2 codec.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ca7aeca5da7e0cc286f334cbbb6afddc31d22c5a69c13c3918aa4dc89287d1d9")
      public fun mpeg2Settings(mpeg2Settings: Mpeg2SettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.VideoCodecSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.VideoCodecSettingsProperty.builder()

      /**
       * @param frameCaptureSettings The settings for the video codec in a frame capture output.
       */
      override fun frameCaptureSettings(frameCaptureSettings: IResolvable) {
        cdkBuilder.frameCaptureSettings(frameCaptureSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param frameCaptureSettings The settings for the video codec in a frame capture output.
       */
      override fun frameCaptureSettings(frameCaptureSettings: FrameCaptureSettingsProperty) {
        cdkBuilder.frameCaptureSettings(frameCaptureSettings.let(FrameCaptureSettingsProperty.Companion::unwrap))
      }

      /**
       * @param frameCaptureSettings The settings for the video codec in a frame capture output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("222c62772bf18b14036723a2d521cdb01e8137f202f75bb2683d6fded0bdf2c1")
      override
          fun frameCaptureSettings(frameCaptureSettings: FrameCaptureSettingsProperty.Builder.() -> Unit):
          Unit = frameCaptureSettings(FrameCaptureSettingsProperty(frameCaptureSettings))

      /**
       * @param h264Settings The settings for the H.264 codec in the output.
       */
      override fun h264Settings(h264Settings: IResolvable) {
        cdkBuilder.h264Settings(h264Settings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param h264Settings The settings for the H.264 codec in the output.
       */
      override fun h264Settings(h264Settings: H264SettingsProperty) {
        cdkBuilder.h264Settings(h264Settings.let(H264SettingsProperty.Companion::unwrap))
      }

      /**
       * @param h264Settings The settings for the H.264 codec in the output.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("c077ec3e18f44e6ffc841e43a8223e933183c8d0c58c6b9f35a4e28b5578c651")
      override fun h264Settings(h264Settings: H264SettingsProperty.Builder.() -> Unit): Unit =
          h264Settings(H264SettingsProperty(h264Settings))

      /**
       * @param h265Settings Settings for video encoded with the H265 codec.
       */
      override fun h265Settings(h265Settings: IResolvable) {
        cdkBuilder.h265Settings(h265Settings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param h265Settings Settings for video encoded with the H265 codec.
       */
      override fun h265Settings(h265Settings: H265SettingsProperty) {
        cdkBuilder.h265Settings(h265Settings.let(H265SettingsProperty.Companion::unwrap))
      }

      /**
       * @param h265Settings Settings for video encoded with the H265 codec.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("d205d9eb647853e8b9d4108b737b8d4d5154eb19ebbc3a6590c9038afee3602f")
      override fun h265Settings(h265Settings: H265SettingsProperty.Builder.() -> Unit): Unit =
          h265Settings(H265SettingsProperty(h265Settings))

      /**
       * @param mpeg2Settings Settings for video encoded with the MPEG-2 codec.
       */
      override fun mpeg2Settings(mpeg2Settings: IResolvable) {
        cdkBuilder.mpeg2Settings(mpeg2Settings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param mpeg2Settings Settings for video encoded with the MPEG-2 codec.
       */
      override fun mpeg2Settings(mpeg2Settings: Mpeg2SettingsProperty) {
        cdkBuilder.mpeg2Settings(mpeg2Settings.let(Mpeg2SettingsProperty.Companion::unwrap))
      }

      /**
       * @param mpeg2Settings Settings for video encoded with the MPEG-2 codec.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("ca7aeca5da7e0cc286f334cbbb6afddc31d22c5a69c13c3918aa4dc89287d1d9")
      override fun mpeg2Settings(mpeg2Settings: Mpeg2SettingsProperty.Builder.() -> Unit): Unit =
          mpeg2Settings(Mpeg2SettingsProperty(mpeg2Settings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.VideoCodecSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.VideoCodecSettingsProperty,
    ) : CdkObject(cdkObject),
        VideoCodecSettingsProperty {
      /**
       * The settings for the video codec in a frame capture output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videocodecsettings.html#cfn-medialive-channel-videocodecsettings-framecapturesettings)
       */
      override fun frameCaptureSettings(): Any? = unwrap(this).getFrameCaptureSettings()

      /**
       * The settings for the H.264 codec in the output.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videocodecsettings.html#cfn-medialive-channel-videocodecsettings-h264settings)
       */
      override fun h264Settings(): Any? = unwrap(this).getH264Settings()

      /**
       * Settings for video encoded with the H265 codec.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videocodecsettings.html#cfn-medialive-channel-videocodecsettings-h265settings)
       */
      override fun h265Settings(): Any? = unwrap(this).getH265Settings()

      /**
       * Settings for video encoded with the MPEG-2 codec.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videocodecsettings.html#cfn-medialive-channel-videocodecsettings-mpeg2settings)
       */
      override fun mpeg2Settings(): Any? = unwrap(this).getMpeg2Settings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): VideoCodecSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.VideoCodecSettingsProperty):
          VideoCodecSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          VideoCodecSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: VideoCodecSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.VideoCodecSettingsProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.VideoCodecSettingsProperty
    }
  }

  /**
   * Encoding information for one output video.
   *
   * The parent of this entity is EncoderSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * VideoDescriptionProperty videoDescriptionProperty = VideoDescriptionProperty.builder()
   * .codecSettings(VideoCodecSettingsProperty.builder()
   * .frameCaptureSettings(FrameCaptureSettingsProperty.builder()
   * .captureInterval(123)
   * .captureIntervalUnits("captureIntervalUnits")
   * .timecodeBurninSettings(TimecodeBurninSettingsProperty.builder()
   * .fontSize("fontSize")
   * .position("position")
   * .prefix("prefix")
   * .build())
   * .build())
   * .h264Settings(H264SettingsProperty.builder()
   * .adaptiveQuantization("adaptiveQuantization")
   * .afdSignaling("afdSignaling")
   * .bitrate(123)
   * .bufFillPct(123)
   * .bufSize(123)
   * .colorMetadata("colorMetadata")
   * .colorSpaceSettings(H264ColorSpaceSettingsProperty.builder()
   * .colorSpacePassthroughSettings(ColorSpacePassthroughSettingsProperty.builder().build())
   * .rec601Settings(Rec601SettingsProperty.builder().build())
   * .rec709Settings(Rec709SettingsProperty.builder().build())
   * .build())
   * .entropyEncoding("entropyEncoding")
   * .filterSettings(H264FilterSettingsProperty.builder()
   * .temporalFilterSettings(TemporalFilterSettingsProperty.builder()
   * .postFilterSharpening("postFilterSharpening")
   * .strength("strength")
   * .build())
   * .build())
   * .fixedAfd("fixedAfd")
   * .flickerAq("flickerAq")
   * .forceFieldPictures("forceFieldPictures")
   * .framerateControl("framerateControl")
   * .framerateDenominator(123)
   * .framerateNumerator(123)
   * .gopBReference("gopBReference")
   * .gopClosedCadence(123)
   * .gopNumBFrames(123)
   * .gopSize(123)
   * .gopSizeUnits("gopSizeUnits")
   * .level("level")
   * .lookAheadRateControl("lookAheadRateControl")
   * .maxBitrate(123)
   * .minIInterval(123)
   * .numRefFrames(123)
   * .parControl("parControl")
   * .parDenominator(123)
   * .parNumerator(123)
   * .profile("profile")
   * .qualityLevel("qualityLevel")
   * .qvbrQualityLevel(123)
   * .rateControlMode("rateControlMode")
   * .scanType("scanType")
   * .sceneChangeDetect("sceneChangeDetect")
   * .slices(123)
   * .softness(123)
   * .spatialAq("spatialAq")
   * .subgopLength("subgopLength")
   * .syntax("syntax")
   * .temporalAq("temporalAq")
   * .timecodeBurninSettings(TimecodeBurninSettingsProperty.builder()
   * .fontSize("fontSize")
   * .position("position")
   * .prefix("prefix")
   * .build())
   * .timecodeInsertion("timecodeInsertion")
   * .build())
   * .h265Settings(H265SettingsProperty.builder()
   * .adaptiveQuantization("adaptiveQuantization")
   * .afdSignaling("afdSignaling")
   * .alternativeTransferFunction("alternativeTransferFunction")
   * .bitrate(123)
   * .bufSize(123)
   * .colorMetadata("colorMetadata")
   * .colorSpaceSettings(H265ColorSpaceSettingsProperty.builder()
   * .colorSpacePassthroughSettings(ColorSpacePassthroughSettingsProperty.builder().build())
   * .dolbyVision81Settings(DolbyVision81SettingsProperty.builder().build())
   * .hdr10Settings(Hdr10SettingsProperty.builder()
   * .maxCll(123)
   * .maxFall(123)
   * .build())
   * .rec601Settings(Rec601SettingsProperty.builder().build())
   * .rec709Settings(Rec709SettingsProperty.builder().build())
   * .build())
   * .filterSettings(H265FilterSettingsProperty.builder()
   * .temporalFilterSettings(TemporalFilterSettingsProperty.builder()
   * .postFilterSharpening("postFilterSharpening")
   * .strength("strength")
   * .build())
   * .build())
   * .fixedAfd("fixedAfd")
   * .flickerAq("flickerAq")
   * .framerateDenominator(123)
   * .framerateNumerator(123)
   * .gopClosedCadence(123)
   * .gopSize(123)
   * .gopSizeUnits("gopSizeUnits")
   * .level("level")
   * .lookAheadRateControl("lookAheadRateControl")
   * .maxBitrate(123)
   * .minIInterval(123)
   * .mvOverPictureBoundaries("mvOverPictureBoundaries")
   * .mvTemporalPredictor("mvTemporalPredictor")
   * .parDenominator(123)
   * .parNumerator(123)
   * .profile("profile")
   * .qvbrQualityLevel(123)
   * .rateControlMode("rateControlMode")
   * .scanType("scanType")
   * .sceneChangeDetect("sceneChangeDetect")
   * .slices(123)
   * .tier("tier")
   * .tileHeight(123)
   * .tilePadding("tilePadding")
   * .tileWidth(123)
   * .timecodeBurninSettings(TimecodeBurninSettingsProperty.builder()
   * .fontSize("fontSize")
   * .position("position")
   * .prefix("prefix")
   * .build())
   * .timecodeInsertion("timecodeInsertion")
   * .treeblockSize("treeblockSize")
   * .build())
   * .mpeg2Settings(Mpeg2SettingsProperty.builder()
   * .adaptiveQuantization("adaptiveQuantization")
   * .afdSignaling("afdSignaling")
   * .colorMetadata("colorMetadata")
   * .colorSpace("colorSpace")
   * .displayAspectRatio("displayAspectRatio")
   * .filterSettings(Mpeg2FilterSettingsProperty.builder()
   * .temporalFilterSettings(TemporalFilterSettingsProperty.builder()
   * .postFilterSharpening("postFilterSharpening")
   * .strength("strength")
   * .build())
   * .build())
   * .fixedAfd("fixedAfd")
   * .framerateDenominator(123)
   * .framerateNumerator(123)
   * .gopClosedCadence(123)
   * .gopNumBFrames(123)
   * .gopSize(123)
   * .gopSizeUnits("gopSizeUnits")
   * .scanType("scanType")
   * .subgopLength("subgopLength")
   * .timecodeBurninSettings(TimecodeBurninSettingsProperty.builder()
   * .fontSize("fontSize")
   * .position("position")
   * .prefix("prefix")
   * .build())
   * .timecodeInsertion("timecodeInsertion")
   * .build())
   * .build())
   * .height(123)
   * .name("name")
   * .respondToAfd("respondToAfd")
   * .scalingBehavior("scalingBehavior")
   * .sharpness(123)
   * .width(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videodescription.html)
   */
  public interface VideoDescriptionProperty {
    /**
     * The video codec settings.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videodescription.html#cfn-medialive-channel-videodescription-codecsettings)
     */
    public fun codecSettings(): Any? = unwrap(this).getCodecSettings()

    /**
     * The output video height, in pixels.
     *
     * This must be an even number. For most codecs, you can keep this field and width blank in
     * order to use the height and width (resolution) from the source. Note that we don't recommend
     * keeping the field blank. For the Frame Capture codec, height and width are required.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videodescription.html#cfn-medialive-channel-videodescription-height)
     */
    public fun height(): Number? = unwrap(this).getHeight()

    /**
     * The name of this VideoDescription.
     *
     * Outputs use this name to uniquely identify this description. Description names should be
     * unique within this channel.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videodescription.html#cfn-medialive-channel-videodescription-name)
     */
    public fun name(): String? = unwrap(this).getName()

    /**
     * Indicates how to respond to the AFD values in the input stream.
     *
     * RESPOND causes input video to be clipped, depending on the AFD value, input display aspect
     * ratio, and output display aspect ratio, and (except for the FRAMECAPTURE codec) includes the
     * values in the output. PASSTHROUGH (does not apply to FRAMECAPTURE codec) ignores the AFD values
     * and includes the values in the output, so input video is not clipped. NONE ignores the AFD
     * values and does not include the values through to the output, so input video is not clipped.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videodescription.html#cfn-medialive-channel-videodescription-respondtoafd)
     */
    public fun respondToAfd(): String? = unwrap(this).getRespondToAfd()

    /**
     * STRETCHTOOUTPUT configures the output position to stretch the video to the specified output
     * resolution (height and width).
     *
     * This option overrides any position value. DEFAULT might insert black boxes (pillar boxes or
     * letter boxes) around the video to provide the specified output resolution.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videodescription.html#cfn-medialive-channel-videodescription-scalingbehavior)
     */
    public fun scalingBehavior(): String? = unwrap(this).getScalingBehavior()

    /**
     * Changes the strength of the anti-alias filter used for scaling.
     *
     * 0 is the softest setting, and 100 is the sharpest. We recommend a setting of 50 for most
     * content.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videodescription.html#cfn-medialive-channel-videodescription-sharpness)
     */
    public fun sharpness(): Number? = unwrap(this).getSharpness()

    /**
     * The output video width, in pixels.
     *
     * It must be an even number. For most codecs, you can keep this field and height blank in order
     * to use the height and width (resolution) from the source. Note that we don't recommend keeping
     * the field blank. For the Frame Capture codec, height and width are required.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videodescription.html#cfn-medialive-channel-videodescription-width)
     */
    public fun width(): Number? = unwrap(this).getWidth()

    /**
     * A builder for [VideoDescriptionProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param codecSettings The video codec settings.
       */
      public fun codecSettings(codecSettings: IResolvable)

      /**
       * @param codecSettings The video codec settings.
       */
      public fun codecSettings(codecSettings: VideoCodecSettingsProperty)

      /**
       * @param codecSettings The video codec settings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("69dab3e5c50533464654d9f350f7b87163f440f123de1e172b43e62bbf084294")
      public fun codecSettings(codecSettings: VideoCodecSettingsProperty.Builder.() -> Unit)

      /**
       * @param height The output video height, in pixels.
       * This must be an even number. For most codecs, you can keep this field and width blank in
       * order to use the height and width (resolution) from the source. Note that we don't recommend
       * keeping the field blank. For the Frame Capture codec, height and width are required.
       */
      public fun height(height: Number)

      /**
       * @param name The name of this VideoDescription.
       * Outputs use this name to uniquely identify this description. Description names should be
       * unique within this channel.
       */
      public fun name(name: String)

      /**
       * @param respondToAfd Indicates how to respond to the AFD values in the input stream.
       * RESPOND causes input video to be clipped, depending on the AFD value, input display aspect
       * ratio, and output display aspect ratio, and (except for the FRAMECAPTURE codec) includes the
       * values in the output. PASSTHROUGH (does not apply to FRAMECAPTURE codec) ignores the AFD
       * values and includes the values in the output, so input video is not clipped. NONE ignores the
       * AFD values and does not include the values through to the output, so input video is not
       * clipped.
       */
      public fun respondToAfd(respondToAfd: String)

      /**
       * @param scalingBehavior STRETCHTOOUTPUT configures the output position to stretch the video
       * to the specified output resolution (height and width).
       * This option overrides any position value. DEFAULT might insert black boxes (pillar boxes or
       * letter boxes) around the video to provide the specified output resolution.
       */
      public fun scalingBehavior(scalingBehavior: String)

      /**
       * @param sharpness Changes the strength of the anti-alias filter used for scaling.
       * 0 is the softest setting, and 100 is the sharpest. We recommend a setting of 50 for most
       * content.
       */
      public fun sharpness(sharpness: Number)

      /**
       * @param width The output video width, in pixels.
       * It must be an even number. For most codecs, you can keep this field and height blank in
       * order to use the height and width (resolution) from the source. Note that we don't recommend
       * keeping the field blank. For the Frame Capture codec, height and width are required.
       */
      public fun width(width: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.VideoDescriptionProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.VideoDescriptionProperty.builder()

      /**
       * @param codecSettings The video codec settings.
       */
      override fun codecSettings(codecSettings: IResolvable) {
        cdkBuilder.codecSettings(codecSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param codecSettings The video codec settings.
       */
      override fun codecSettings(codecSettings: VideoCodecSettingsProperty) {
        cdkBuilder.codecSettings(codecSettings.let(VideoCodecSettingsProperty.Companion::unwrap))
      }

      /**
       * @param codecSettings The video codec settings.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("69dab3e5c50533464654d9f350f7b87163f440f123de1e172b43e62bbf084294")
      override fun codecSettings(codecSettings: VideoCodecSettingsProperty.Builder.() -> Unit): Unit
          = codecSettings(VideoCodecSettingsProperty(codecSettings))

      /**
       * @param height The output video height, in pixels.
       * This must be an even number. For most codecs, you can keep this field and width blank in
       * order to use the height and width (resolution) from the source. Note that we don't recommend
       * keeping the field blank. For the Frame Capture codec, height and width are required.
       */
      override fun height(height: Number) {
        cdkBuilder.height(height)
      }

      /**
       * @param name The name of this VideoDescription.
       * Outputs use this name to uniquely identify this description. Description names should be
       * unique within this channel.
       */
      override fun name(name: String) {
        cdkBuilder.name(name)
      }

      /**
       * @param respondToAfd Indicates how to respond to the AFD values in the input stream.
       * RESPOND causes input video to be clipped, depending on the AFD value, input display aspect
       * ratio, and output display aspect ratio, and (except for the FRAMECAPTURE codec) includes the
       * values in the output. PASSTHROUGH (does not apply to FRAMECAPTURE codec) ignores the AFD
       * values and includes the values in the output, so input video is not clipped. NONE ignores the
       * AFD values and does not include the values through to the output, so input video is not
       * clipped.
       */
      override fun respondToAfd(respondToAfd: String) {
        cdkBuilder.respondToAfd(respondToAfd)
      }

      /**
       * @param scalingBehavior STRETCHTOOUTPUT configures the output position to stretch the video
       * to the specified output resolution (height and width).
       * This option overrides any position value. DEFAULT might insert black boxes (pillar boxes or
       * letter boxes) around the video to provide the specified output resolution.
       */
      override fun scalingBehavior(scalingBehavior: String) {
        cdkBuilder.scalingBehavior(scalingBehavior)
      }

      /**
       * @param sharpness Changes the strength of the anti-alias filter used for scaling.
       * 0 is the softest setting, and 100 is the sharpest. We recommend a setting of 50 for most
       * content.
       */
      override fun sharpness(sharpness: Number) {
        cdkBuilder.sharpness(sharpness)
      }

      /**
       * @param width The output video width, in pixels.
       * It must be an even number. For most codecs, you can keep this field and height blank in
       * order to use the height and width (resolution) from the source. Note that we don't recommend
       * keeping the field blank. For the Frame Capture codec, height and width are required.
       */
      override fun width(width: Number) {
        cdkBuilder.width(width)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.VideoDescriptionProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.VideoDescriptionProperty,
    ) : CdkObject(cdkObject),
        VideoDescriptionProperty {
      /**
       * The video codec settings.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videodescription.html#cfn-medialive-channel-videodescription-codecsettings)
       */
      override fun codecSettings(): Any? = unwrap(this).getCodecSettings()

      /**
       * The output video height, in pixels.
       *
       * This must be an even number. For most codecs, you can keep this field and width blank in
       * order to use the height and width (resolution) from the source. Note that we don't recommend
       * keeping the field blank. For the Frame Capture codec, height and width are required.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videodescription.html#cfn-medialive-channel-videodescription-height)
       */
      override fun height(): Number? = unwrap(this).getHeight()

      /**
       * The name of this VideoDescription.
       *
       * Outputs use this name to uniquely identify this description. Description names should be
       * unique within this channel.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videodescription.html#cfn-medialive-channel-videodescription-name)
       */
      override fun name(): String? = unwrap(this).getName()

      /**
       * Indicates how to respond to the AFD values in the input stream.
       *
       * RESPOND causes input video to be clipped, depending on the AFD value, input display aspect
       * ratio, and output display aspect ratio, and (except for the FRAMECAPTURE codec) includes the
       * values in the output. PASSTHROUGH (does not apply to FRAMECAPTURE codec) ignores the AFD
       * values and includes the values in the output, so input video is not clipped. NONE ignores the
       * AFD values and does not include the values through to the output, so input video is not
       * clipped.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videodescription.html#cfn-medialive-channel-videodescription-respondtoafd)
       */
      override fun respondToAfd(): String? = unwrap(this).getRespondToAfd()

      /**
       * STRETCHTOOUTPUT configures the output position to stretch the video to the specified output
       * resolution (height and width).
       *
       * This option overrides any position value. DEFAULT might insert black boxes (pillar boxes or
       * letter boxes) around the video to provide the specified output resolution.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videodescription.html#cfn-medialive-channel-videodescription-scalingbehavior)
       */
      override fun scalingBehavior(): String? = unwrap(this).getScalingBehavior()

      /**
       * Changes the strength of the anti-alias filter used for scaling.
       *
       * 0 is the softest setting, and 100 is the sharpest. We recommend a setting of 50 for most
       * content.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videodescription.html#cfn-medialive-channel-videodescription-sharpness)
       */
      override fun sharpness(): Number? = unwrap(this).getSharpness()

      /**
       * The output video width, in pixels.
       *
       * It must be an even number. For most codecs, you can keep this field and height blank in
       * order to use the height and width (resolution) from the source. Note that we don't recommend
       * keeping the field blank. For the Frame Capture codec, height and width are required.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videodescription.html#cfn-medialive-channel-videodescription-width)
       */
      override fun width(): Number? = unwrap(this).getWidth()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): VideoDescriptionProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.VideoDescriptionProperty):
          VideoDescriptionProperty = CdkObjectWrappers.wrap(cdkObject) as? VideoDescriptionProperty
          ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: VideoDescriptionProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.VideoDescriptionProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.VideoDescriptionProperty
    }
  }

  /**
   * Settings to configure color space settings in the incoming video.
   *
   * The parent of this entity is VideoSelector.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * VideoSelectorColorSpaceSettingsProperty videoSelectorColorSpaceSettingsProperty =
   * VideoSelectorColorSpaceSettingsProperty.builder()
   * .hdr10Settings(Hdr10SettingsProperty.builder()
   * .maxCll(123)
   * .maxFall(123)
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselectorcolorspacesettings.html)
   */
  public interface VideoSelectorColorSpaceSettingsProperty {
    /**
     * Settings to configure color space settings in the incoming video.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselectorcolorspacesettings.html#cfn-medialive-channel-videoselectorcolorspacesettings-hdr10settings)
     */
    public fun hdr10Settings(): Any? = unwrap(this).getHdr10Settings()

    /**
     * A builder for [VideoSelectorColorSpaceSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param hdr10Settings Settings to configure color space settings in the incoming video.
       */
      public fun hdr10Settings(hdr10Settings: IResolvable)

      /**
       * @param hdr10Settings Settings to configure color space settings in the incoming video.
       */
      public fun hdr10Settings(hdr10Settings: Hdr10SettingsProperty)

      /**
       * @param hdr10Settings Settings to configure color space settings in the incoming video.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("f2f20bb5313106114bba895cd120c35561f191f4b705f44a9ada20b65b8c81b4")
      public fun hdr10Settings(hdr10Settings: Hdr10SettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorColorSpaceSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorColorSpaceSettingsProperty.builder()

      /**
       * @param hdr10Settings Settings to configure color space settings in the incoming video.
       */
      override fun hdr10Settings(hdr10Settings: IResolvable) {
        cdkBuilder.hdr10Settings(hdr10Settings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param hdr10Settings Settings to configure color space settings in the incoming video.
       */
      override fun hdr10Settings(hdr10Settings: Hdr10SettingsProperty) {
        cdkBuilder.hdr10Settings(hdr10Settings.let(Hdr10SettingsProperty.Companion::unwrap))
      }

      /**
       * @param hdr10Settings Settings to configure color space settings in the incoming video.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("f2f20bb5313106114bba895cd120c35561f191f4b705f44a9ada20b65b8c81b4")
      override fun hdr10Settings(hdr10Settings: Hdr10SettingsProperty.Builder.() -> Unit): Unit =
          hdr10Settings(Hdr10SettingsProperty(hdr10Settings))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorColorSpaceSettingsProperty
          = cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorColorSpaceSettingsProperty,
    ) : CdkObject(cdkObject),
        VideoSelectorColorSpaceSettingsProperty {
      /**
       * Settings to configure color space settings in the incoming video.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselectorcolorspacesettings.html#cfn-medialive-channel-videoselectorcolorspacesettings-hdr10settings)
       */
      override fun hdr10Settings(): Any? = unwrap(this).getHdr10Settings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          VideoSelectorColorSpaceSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorColorSpaceSettingsProperty):
          VideoSelectorColorSpaceSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          VideoSelectorColorSpaceSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: VideoSelectorColorSpaceSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorColorSpaceSettingsProperty
          = (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorColorSpaceSettingsProperty
    }
  }

  /**
   * Selects a specific PID from within a video source.
   *
   * The parent of this entity is VideoSelectorSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * VideoSelectorPidProperty videoSelectorPidProperty = VideoSelectorPidProperty.builder()
   * .pid(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselectorpid.html)
   */
  public interface VideoSelectorPidProperty {
    /**
     * Selects a specific PID from within a video source.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselectorpid.html#cfn-medialive-channel-videoselectorpid-pid)
     */
    public fun pid(): Number? = unwrap(this).getPid()

    /**
     * A builder for [VideoSelectorPidProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param pid Selects a specific PID from within a video source.
       */
      public fun pid(pid: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorPidProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorPidProperty.builder()

      /**
       * @param pid Selects a specific PID from within a video source.
       */
      override fun pid(pid: Number) {
        cdkBuilder.pid(pid)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorPidProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorPidProperty,
    ) : CdkObject(cdkObject),
        VideoSelectorPidProperty {
      /**
       * Selects a specific PID from within a video source.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselectorpid.html#cfn-medialive-channel-videoselectorpid-pid)
       */
      override fun pid(): Number? = unwrap(this).getPid()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): VideoSelectorPidProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorPidProperty):
          VideoSelectorPidProperty = CdkObjectWrappers.wrap(cdkObject) as? VideoSelectorPidProperty
          ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: VideoSelectorPidProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorPidProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorPidProperty
    }
  }

  /**
   * Used to extract video by the program ID.
   *
   * The parent of this entity is VideoSelectorSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * VideoSelectorProgramIdProperty videoSelectorProgramIdProperty =
   * VideoSelectorProgramIdProperty.builder()
   * .programId(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselectorprogramid.html)
   */
  public interface VideoSelectorProgramIdProperty {
    /**
     * Selects a specific program from within a multi-program transport stream.
     *
     * If the program doesn't exist, MediaLive selects the first program within the transport stream
     * by default.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselectorprogramid.html#cfn-medialive-channel-videoselectorprogramid-programid)
     */
    public fun programId(): Number? = unwrap(this).getProgramId()

    /**
     * A builder for [VideoSelectorProgramIdProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param programId Selects a specific program from within a multi-program transport stream.
       * If the program doesn't exist, MediaLive selects the first program within the transport
       * stream by default.
       */
      public fun programId(programId: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorProgramIdProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorProgramIdProperty.builder()

      /**
       * @param programId Selects a specific program from within a multi-program transport stream.
       * If the program doesn't exist, MediaLive selects the first program within the transport
       * stream by default.
       */
      override fun programId(programId: Number) {
        cdkBuilder.programId(programId)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorProgramIdProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorProgramIdProperty,
    ) : CdkObject(cdkObject),
        VideoSelectorProgramIdProperty {
      /**
       * Selects a specific program from within a multi-program transport stream.
       *
       * If the program doesn't exist, MediaLive selects the first program within the transport
       * stream by default.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselectorprogramid.html#cfn-medialive-channel-videoselectorprogramid-programid)
       */
      override fun programId(): Number? = unwrap(this).getProgramId()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): VideoSelectorProgramIdProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorProgramIdProperty):
          VideoSelectorProgramIdProperty = CdkObjectWrappers.wrap(cdkObject) as?
          VideoSelectorProgramIdProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: VideoSelectorProgramIdProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorProgramIdProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorProgramIdProperty
    }
  }

  /**
   * Information about the video to extract from the input. An input can contain only one video
   * selector.
   *
   * The parent of this entity is InputSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * VideoSelectorProperty videoSelectorProperty = VideoSelectorProperty.builder()
   * .colorSpace("colorSpace")
   * .colorSpaceSettings(VideoSelectorColorSpaceSettingsProperty.builder()
   * .hdr10Settings(Hdr10SettingsProperty.builder()
   * .maxCll(123)
   * .maxFall(123)
   * .build())
   * .build())
   * .colorSpaceUsage("colorSpaceUsage")
   * .selectorSettings(VideoSelectorSettingsProperty.builder()
   * .videoSelectorPid(VideoSelectorPidProperty.builder()
   * .pid(123)
   * .build())
   * .videoSelectorProgramId(VideoSelectorProgramIdProperty.builder()
   * .programId(123)
   * .build())
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselector.html)
   */
  public interface VideoSelectorProperty {
    /**
     * Specifies the color space of an input.
     *
     * This setting works in tandem with colorSpaceConversion to determine if MediaLive will perform
     * any conversion.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselector.html#cfn-medialive-channel-videoselector-colorspace)
     */
    public fun colorSpace(): String? = unwrap(this).getColorSpace()

    /**
     * Settings to configure color space settings in the incoming video.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselector.html#cfn-medialive-channel-videoselector-colorspacesettings)
     */
    public fun colorSpaceSettings(): Any? = unwrap(this).getColorSpaceSettings()

    /**
     * Applies only if colorSpace is a value other than Follow.
     *
     * This field controls how the value in the colorSpace field is used. Fallback means that when
     * the input does include color space data, that data is used, but when the input has no color
     * space data, the value in colorSpace is used. Choose fallback if your input is sometimes missing
     * color space data, but when it does have color space data, that data is correct. Force means to
     * always use the value in colorSpace. Choose force if your input usually has no color space data
     * or might have unreliable color space data.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselector.html#cfn-medialive-channel-videoselector-colorspaceusage)
     */
    public fun colorSpaceUsage(): String? = unwrap(this).getColorSpaceUsage()

    /**
     * Information about the video to select from the content.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselector.html#cfn-medialive-channel-videoselector-selectorsettings)
     */
    public fun selectorSettings(): Any? = unwrap(this).getSelectorSettings()

    /**
     * A builder for [VideoSelectorProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param colorSpace Specifies the color space of an input.
       * This setting works in tandem with colorSpaceConversion to determine if MediaLive will
       * perform any conversion.
       */
      public fun colorSpace(colorSpace: String)

      /**
       * @param colorSpaceSettings Settings to configure color space settings in the incoming video.
       */
      public fun colorSpaceSettings(colorSpaceSettings: IResolvable)

      /**
       * @param colorSpaceSettings Settings to configure color space settings in the incoming video.
       */
      public fun colorSpaceSettings(colorSpaceSettings: VideoSelectorColorSpaceSettingsProperty)

      /**
       * @param colorSpaceSettings Settings to configure color space settings in the incoming video.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("6e2421f4c2b0f6e241caf12c279d5f76e520ef75d9a2f716912c7af6979f6502")
      public
          fun colorSpaceSettings(colorSpaceSettings: VideoSelectorColorSpaceSettingsProperty.Builder.() -> Unit)

      /**
       * @param colorSpaceUsage Applies only if colorSpace is a value other than Follow.
       * This field controls how the value in the colorSpace field is used. Fallback means that when
       * the input does include color space data, that data is used, but when the input has no color
       * space data, the value in colorSpace is used. Choose fallback if your input is sometimes
       * missing color space data, but when it does have color space data, that data is correct. Force
       * means to always use the value in colorSpace. Choose force if your input usually has no color
       * space data or might have unreliable color space data.
       */
      public fun colorSpaceUsage(colorSpaceUsage: String)

      /**
       * @param selectorSettings Information about the video to select from the content.
       */
      public fun selectorSettings(selectorSettings: IResolvable)

      /**
       * @param selectorSettings Information about the video to select from the content.
       */
      public fun selectorSettings(selectorSettings: VideoSelectorSettingsProperty)

      /**
       * @param selectorSettings Information about the video to select from the content.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("1c804652e447ee859f6db2993372d4752d251703d9f04ee632062fb178291ec7")
      public
          fun selectorSettings(selectorSettings: VideoSelectorSettingsProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorProperty.builder()

      /**
       * @param colorSpace Specifies the color space of an input.
       * This setting works in tandem with colorSpaceConversion to determine if MediaLive will
       * perform any conversion.
       */
      override fun colorSpace(colorSpace: String) {
        cdkBuilder.colorSpace(colorSpace)
      }

      /**
       * @param colorSpaceSettings Settings to configure color space settings in the incoming video.
       */
      override fun colorSpaceSettings(colorSpaceSettings: IResolvable) {
        cdkBuilder.colorSpaceSettings(colorSpaceSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param colorSpaceSettings Settings to configure color space settings in the incoming video.
       */
      override fun colorSpaceSettings(colorSpaceSettings: VideoSelectorColorSpaceSettingsProperty) {
        cdkBuilder.colorSpaceSettings(colorSpaceSettings.let(VideoSelectorColorSpaceSettingsProperty.Companion::unwrap))
      }

      /**
       * @param colorSpaceSettings Settings to configure color space settings in the incoming video.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("6e2421f4c2b0f6e241caf12c279d5f76e520ef75d9a2f716912c7af6979f6502")
      override
          fun colorSpaceSettings(colorSpaceSettings: VideoSelectorColorSpaceSettingsProperty.Builder.() -> Unit):
          Unit = colorSpaceSettings(VideoSelectorColorSpaceSettingsProperty(colorSpaceSettings))

      /**
       * @param colorSpaceUsage Applies only if colorSpace is a value other than Follow.
       * This field controls how the value in the colorSpace field is used. Fallback means that when
       * the input does include color space data, that data is used, but when the input has no color
       * space data, the value in colorSpace is used. Choose fallback if your input is sometimes
       * missing color space data, but when it does have color space data, that data is correct. Force
       * means to always use the value in colorSpace. Choose force if your input usually has no color
       * space data or might have unreliable color space data.
       */
      override fun colorSpaceUsage(colorSpaceUsage: String) {
        cdkBuilder.colorSpaceUsage(colorSpaceUsage)
      }

      /**
       * @param selectorSettings Information about the video to select from the content.
       */
      override fun selectorSettings(selectorSettings: IResolvable) {
        cdkBuilder.selectorSettings(selectorSettings.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param selectorSettings Information about the video to select from the content.
       */
      override fun selectorSettings(selectorSettings: VideoSelectorSettingsProperty) {
        cdkBuilder.selectorSettings(selectorSettings.let(VideoSelectorSettingsProperty.Companion::unwrap))
      }

      /**
       * @param selectorSettings Information about the video to select from the content.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("1c804652e447ee859f6db2993372d4752d251703d9f04ee632062fb178291ec7")
      override
          fun selectorSettings(selectorSettings: VideoSelectorSettingsProperty.Builder.() -> Unit):
          Unit = selectorSettings(VideoSelectorSettingsProperty(selectorSettings))

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorProperty
          = cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorProperty,
    ) : CdkObject(cdkObject),
        VideoSelectorProperty {
      /**
       * Specifies the color space of an input.
       *
       * This setting works in tandem with colorSpaceConversion to determine if MediaLive will
       * perform any conversion.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselector.html#cfn-medialive-channel-videoselector-colorspace)
       */
      override fun colorSpace(): String? = unwrap(this).getColorSpace()

      /**
       * Settings to configure color space settings in the incoming video.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselector.html#cfn-medialive-channel-videoselector-colorspacesettings)
       */
      override fun colorSpaceSettings(): Any? = unwrap(this).getColorSpaceSettings()

      /**
       * Applies only if colorSpace is a value other than Follow.
       *
       * This field controls how the value in the colorSpace field is used. Fallback means that when
       * the input does include color space data, that data is used, but when the input has no color
       * space data, the value in colorSpace is used. Choose fallback if your input is sometimes
       * missing color space data, but when it does have color space data, that data is correct. Force
       * means to always use the value in colorSpace. Choose force if your input usually has no color
       * space data or might have unreliable color space data.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselector.html#cfn-medialive-channel-videoselector-colorspaceusage)
       */
      override fun colorSpaceUsage(): String? = unwrap(this).getColorSpaceUsage()

      /**
       * Information about the video to select from the content.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselector.html#cfn-medialive-channel-videoselector-selectorsettings)
       */
      override fun selectorSettings(): Any? = unwrap(this).getSelectorSettings()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): VideoSelectorProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorProperty):
          VideoSelectorProperty = CdkObjectWrappers.wrap(cdkObject) as? VideoSelectorProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: VideoSelectorProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorProperty
    }
  }

  /**
   * Information about the video to extract from the input.
   *
   * The parent of this entity is VideoSelector.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * VideoSelectorSettingsProperty videoSelectorSettingsProperty =
   * VideoSelectorSettingsProperty.builder()
   * .videoSelectorPid(VideoSelectorPidProperty.builder()
   * .pid(123)
   * .build())
   * .videoSelectorProgramId(VideoSelectorProgramIdProperty.builder()
   * .programId(123)
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselectorsettings.html)
   */
  public interface VideoSelectorSettingsProperty {
    /**
     * Used to extract video by PID.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselectorsettings.html#cfn-medialive-channel-videoselectorsettings-videoselectorpid)
     */
    public fun videoSelectorPid(): Any? = unwrap(this).getVideoSelectorPid()

    /**
     * Used to extract video by program ID.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselectorsettings.html#cfn-medialive-channel-videoselectorsettings-videoselectorprogramid)
     */
    public fun videoSelectorProgramId(): Any? = unwrap(this).getVideoSelectorProgramId()

    /**
     * A builder for [VideoSelectorSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param videoSelectorPid Used to extract video by PID.
       */
      public fun videoSelectorPid(videoSelectorPid: IResolvable)

      /**
       * @param videoSelectorPid Used to extract video by PID.
       */
      public fun videoSelectorPid(videoSelectorPid: VideoSelectorPidProperty)

      /**
       * @param videoSelectorPid Used to extract video by PID.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("b493cd2d8667bed2aaa0a4a99807ca42c8cb76aa5c141820de8d595a470e0b2c")
      public fun videoSelectorPid(videoSelectorPid: VideoSelectorPidProperty.Builder.() -> Unit)

      /**
       * @param videoSelectorProgramId Used to extract video by program ID.
       */
      public fun videoSelectorProgramId(videoSelectorProgramId: IResolvable)

      /**
       * @param videoSelectorProgramId Used to extract video by program ID.
       */
      public fun videoSelectorProgramId(videoSelectorProgramId: VideoSelectorProgramIdProperty)

      /**
       * @param videoSelectorProgramId Used to extract video by program ID.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("26c1c65f209f4c8d5b86051333090e136aae2c00db917fa13b828a3411767e1d")
      public
          fun videoSelectorProgramId(videoSelectorProgramId: VideoSelectorProgramIdProperty.Builder.() -> Unit)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorSettingsProperty.builder()

      /**
       * @param videoSelectorPid Used to extract video by PID.
       */
      override fun videoSelectorPid(videoSelectorPid: IResolvable) {
        cdkBuilder.videoSelectorPid(videoSelectorPid.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param videoSelectorPid Used to extract video by PID.
       */
      override fun videoSelectorPid(videoSelectorPid: VideoSelectorPidProperty) {
        cdkBuilder.videoSelectorPid(videoSelectorPid.let(VideoSelectorPidProperty.Companion::unwrap))
      }

      /**
       * @param videoSelectorPid Used to extract video by PID.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("b493cd2d8667bed2aaa0a4a99807ca42c8cb76aa5c141820de8d595a470e0b2c")
      override fun videoSelectorPid(videoSelectorPid: VideoSelectorPidProperty.Builder.() -> Unit):
          Unit = videoSelectorPid(VideoSelectorPidProperty(videoSelectorPid))

      /**
       * @param videoSelectorProgramId Used to extract video by program ID.
       */
      override fun videoSelectorProgramId(videoSelectorProgramId: IResolvable) {
        cdkBuilder.videoSelectorProgramId(videoSelectorProgramId.let(IResolvable.Companion::unwrap))
      }

      /**
       * @param videoSelectorProgramId Used to extract video by program ID.
       */
      override fun videoSelectorProgramId(videoSelectorProgramId: VideoSelectorProgramIdProperty) {
        cdkBuilder.videoSelectorProgramId(videoSelectorProgramId.let(VideoSelectorProgramIdProperty.Companion::unwrap))
      }

      /**
       * @param videoSelectorProgramId Used to extract video by program ID.
       */
      @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
      @JvmName("26c1c65f209f4c8d5b86051333090e136aae2c00db917fa13b828a3411767e1d")
      override
          fun videoSelectorProgramId(videoSelectorProgramId: VideoSelectorProgramIdProperty.Builder.() -> Unit):
          Unit = videoSelectorProgramId(VideoSelectorProgramIdProperty(videoSelectorProgramId))

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorSettingsProperty,
    ) : CdkObject(cdkObject),
        VideoSelectorSettingsProperty {
      /**
       * Used to extract video by PID.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselectorsettings.html#cfn-medialive-channel-videoselectorsettings-videoselectorpid)
       */
      override fun videoSelectorPid(): Any? = unwrap(this).getVideoSelectorPid()

      /**
       * Used to extract video by program ID.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselectorsettings.html#cfn-medialive-channel-videoselectorsettings-videoselectorprogramid)
       */
      override fun videoSelectorProgramId(): Any? = unwrap(this).getVideoSelectorProgramId()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): VideoSelectorSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorSettingsProperty):
          VideoSelectorSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          VideoSelectorSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: VideoSelectorSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.VideoSelectorSettingsProperty
    }
  }

  /**
   * Settings to enable VPC mode in the channel, so that the endpoints for all outputs are in your
   * VPC.
   *
   * This entity is at the top level in the channel.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * VpcOutputSettingsProperty vpcOutputSettingsProperty = VpcOutputSettingsProperty.builder()
   * .publicAddressAllocationIds(List.of("publicAddressAllocationIds"))
   * .securityGroupIds(List.of("securityGroupIds"))
   * .subnetIds(List.of("subnetIds"))
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-vpcoutputsettings.html)
   */
  public interface VpcOutputSettingsProperty {
    /**
     * List of public address allocation IDs to associate with ENIs that will be created in Output
     * VPC.
     *
     * Must specify one for SINGLE_PIPELINE, two for STANDARD channels
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-vpcoutputsettings.html#cfn-medialive-channel-vpcoutputsettings-publicaddressallocationids)
     */
    public fun publicAddressAllocationIds(): List =
        unwrap(this).getPublicAddressAllocationIds() ?: emptyList()

    /**
     * A list of up to 5 EC2 VPC security group IDs to attach to the Output VPC network interfaces.
     *
     * If none are specified then the VPC default security group will be used
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-vpcoutputsettings.html#cfn-medialive-channel-vpcoutputsettings-securitygroupids)
     */
    public fun securityGroupIds(): List = unwrap(this).getSecurityGroupIds() ?: emptyList()

    /**
     * A list of VPC subnet IDs from the same VPC.
     *
     * If STANDARD channel, subnet IDs must be mapped to two unique availability zones (AZ).
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-vpcoutputsettings.html#cfn-medialive-channel-vpcoutputsettings-subnetids)
     */
    public fun subnetIds(): List = unwrap(this).getSubnetIds() ?: emptyList()

    /**
     * A builder for [VpcOutputSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param publicAddressAllocationIds List of public address allocation IDs to associate with
       * ENIs that will be created in Output VPC.
       * Must specify one for SINGLE_PIPELINE, two for STANDARD channels
       */
      public fun publicAddressAllocationIds(publicAddressAllocationIds: List)

      /**
       * @param publicAddressAllocationIds List of public address allocation IDs to associate with
       * ENIs that will be created in Output VPC.
       * Must specify one for SINGLE_PIPELINE, two for STANDARD channels
       */
      public fun publicAddressAllocationIds(vararg publicAddressAllocationIds: String)

      /**
       * @param securityGroupIds A list of up to 5 EC2 VPC security group IDs to attach to the
       * Output VPC network interfaces.
       * If none are specified then the VPC default security group will be used
       */
      public fun securityGroupIds(securityGroupIds: List)

      /**
       * @param securityGroupIds A list of up to 5 EC2 VPC security group IDs to attach to the
       * Output VPC network interfaces.
       * If none are specified then the VPC default security group will be used
       */
      public fun securityGroupIds(vararg securityGroupIds: String)

      /**
       * @param subnetIds A list of VPC subnet IDs from the same VPC.
       * If STANDARD channel, subnet IDs must be mapped to two unique availability zones (AZ).
       */
      public fun subnetIds(subnetIds: List)

      /**
       * @param subnetIds A list of VPC subnet IDs from the same VPC.
       * If STANDARD channel, subnet IDs must be mapped to two unique availability zones (AZ).
       */
      public fun subnetIds(vararg subnetIds: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.VpcOutputSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.VpcOutputSettingsProperty.builder()

      /**
       * @param publicAddressAllocationIds List of public address allocation IDs to associate with
       * ENIs that will be created in Output VPC.
       * Must specify one for SINGLE_PIPELINE, two for STANDARD channels
       */
      override fun publicAddressAllocationIds(publicAddressAllocationIds: List) {
        cdkBuilder.publicAddressAllocationIds(publicAddressAllocationIds)
      }

      /**
       * @param publicAddressAllocationIds List of public address allocation IDs to associate with
       * ENIs that will be created in Output VPC.
       * Must specify one for SINGLE_PIPELINE, two for STANDARD channels
       */
      override fun publicAddressAllocationIds(vararg publicAddressAllocationIds: String): Unit =
          publicAddressAllocationIds(publicAddressAllocationIds.toList())

      /**
       * @param securityGroupIds A list of up to 5 EC2 VPC security group IDs to attach to the
       * Output VPC network interfaces.
       * If none are specified then the VPC default security group will be used
       */
      override fun securityGroupIds(securityGroupIds: List) {
        cdkBuilder.securityGroupIds(securityGroupIds)
      }

      /**
       * @param securityGroupIds A list of up to 5 EC2 VPC security group IDs to attach to the
       * Output VPC network interfaces.
       * If none are specified then the VPC default security group will be used
       */
      override fun securityGroupIds(vararg securityGroupIds: String): Unit =
          securityGroupIds(securityGroupIds.toList())

      /**
       * @param subnetIds A list of VPC subnet IDs from the same VPC.
       * If STANDARD channel, subnet IDs must be mapped to two unique availability zones (AZ).
       */
      override fun subnetIds(subnetIds: List) {
        cdkBuilder.subnetIds(subnetIds)
      }

      /**
       * @param subnetIds A list of VPC subnet IDs from the same VPC.
       * If STANDARD channel, subnet IDs must be mapped to two unique availability zones (AZ).
       */
      override fun subnetIds(vararg subnetIds: String): Unit = subnetIds(subnetIds.toList())

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.VpcOutputSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.VpcOutputSettingsProperty,
    ) : CdkObject(cdkObject),
        VpcOutputSettingsProperty {
      /**
       * List of public address allocation IDs to associate with ENIs that will be created in Output
       * VPC.
       *
       * Must specify one for SINGLE_PIPELINE, two for STANDARD channels
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-vpcoutputsettings.html#cfn-medialive-channel-vpcoutputsettings-publicaddressallocationids)
       */
      override fun publicAddressAllocationIds(): List =
          unwrap(this).getPublicAddressAllocationIds() ?: emptyList()

      /**
       * A list of up to 5 EC2 VPC security group IDs to attach to the Output VPC network
       * interfaces.
       *
       * If none are specified then the VPC default security group will be used
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-vpcoutputsettings.html#cfn-medialive-channel-vpcoutputsettings-securitygroupids)
       */
      override fun securityGroupIds(): List = unwrap(this).getSecurityGroupIds() ?:
          emptyList()

      /**
       * A list of VPC subnet IDs from the same VPC.
       *
       * If STANDARD channel, subnet IDs must be mapped to two unique availability zones (AZ).
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-vpcoutputsettings.html#cfn-medialive-channel-vpcoutputsettings-subnetids)
       */
      override fun subnetIds(): List = unwrap(this).getSubnetIds() ?: emptyList()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): VpcOutputSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.VpcOutputSettingsProperty):
          VpcOutputSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          VpcOutputSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: VpcOutputSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.VpcOutputSettingsProperty = (wrapped
          as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.VpcOutputSettingsProperty
    }
  }

  /**
   * The setup of WAV audio in the output.
   *
   * The parent of this entity is AudioCodecSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * WavSettingsProperty wavSettingsProperty = WavSettingsProperty.builder()
   * .bitDepth(123)
   * .codingMode("codingMode")
   * .sampleRate(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-wavsettings.html)
   */
  public interface WavSettingsProperty {
    /**
     * Bits per sample.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-wavsettings.html#cfn-medialive-channel-wavsettings-bitdepth)
     */
    public fun bitDepth(): Number? = unwrap(this).getBitDepth()

    /**
     * The audio coding mode for the WAV audio.
     *
     * The mode determines the number of channels in the audio.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-wavsettings.html#cfn-medialive-channel-wavsettings-codingmode)
     */
    public fun codingMode(): String? = unwrap(this).getCodingMode()

    /**
     * Sample rate in Hz.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-wavsettings.html#cfn-medialive-channel-wavsettings-samplerate)
     */
    public fun sampleRate(): Number? = unwrap(this).getSampleRate()

    /**
     * A builder for [WavSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param bitDepth Bits per sample.
       */
      public fun bitDepth(bitDepth: Number)

      /**
       * @param codingMode The audio coding mode for the WAV audio.
       * The mode determines the number of channels in the audio.
       */
      public fun codingMode(codingMode: String)

      /**
       * @param sampleRate Sample rate in Hz.
       */
      public fun sampleRate(sampleRate: Number)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.WavSettingsProperty.Builder =
          software.amazon.awscdk.services.medialive.CfnChannel.WavSettingsProperty.builder()

      /**
       * @param bitDepth Bits per sample.
       */
      override fun bitDepth(bitDepth: Number) {
        cdkBuilder.bitDepth(bitDepth)
      }

      /**
       * @param codingMode The audio coding mode for the WAV audio.
       * The mode determines the number of channels in the audio.
       */
      override fun codingMode(codingMode: String) {
        cdkBuilder.codingMode(codingMode)
      }

      /**
       * @param sampleRate Sample rate in Hz.
       */
      override fun sampleRate(sampleRate: Number) {
        cdkBuilder.sampleRate(sampleRate)
      }

      public fun build(): software.amazon.awscdk.services.medialive.CfnChannel.WavSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.WavSettingsProperty,
    ) : CdkObject(cdkObject),
        WavSettingsProperty {
      /**
       * Bits per sample.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-wavsettings.html#cfn-medialive-channel-wavsettings-bitdepth)
       */
      override fun bitDepth(): Number? = unwrap(this).getBitDepth()

      /**
       * The audio coding mode for the WAV audio.
       *
       * The mode determines the number of channels in the audio.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-wavsettings.html#cfn-medialive-channel-wavsettings-codingmode)
       */
      override fun codingMode(): String? = unwrap(this).getCodingMode()

      /**
       * Sample rate in Hz.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-wavsettings.html#cfn-medialive-channel-wavsettings-samplerate)
       */
      override fun sampleRate(): Number? = unwrap(this).getSampleRate()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}): WavSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.WavSettingsProperty):
          WavSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as? WavSettingsProperty ?:
          Wrapper(cdkObject)

      internal fun unwrap(wrapped: WavSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.WavSettingsProperty = (wrapped as
          CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.WavSettingsProperty
    }
  }

  /**
   * The configuration of Web VTT captions in the output.
   *
   * The parent of this entity is CaptionDestinationSettings.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import io.cloudshiftdev.awscdk.services.medialive.*;
   * WebvttDestinationSettingsProperty webvttDestinationSettingsProperty =
   * WebvttDestinationSettingsProperty.builder()
   * .styleControl("styleControl")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-webvttdestinationsettings.html)
   */
  public interface WebvttDestinationSettingsProperty {
    /**
     * Controls whether the color and position of the source captions is passed through to the
     * WebVTT output captions.
     *
     * PASSTHROUGH - Valid only if the source captions are EMBEDDED or TELETEXT. NO_STYLE_DATA -
     * Don't pass through the style. The output captions will not contain any font styling information.
     *
     * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-webvttdestinationsettings.html#cfn-medialive-channel-webvttdestinationsettings-stylecontrol)
     */
    public fun styleControl(): String? = unwrap(this).getStyleControl()

    /**
     * A builder for [WebvttDestinationSettingsProperty]
     */
    @CdkDslMarker
    public interface Builder {
      /**
       * @param styleControl Controls whether the color and position of the source captions is
       * passed through to the WebVTT output captions.
       * PASSTHROUGH - Valid only if the source captions are EMBEDDED or TELETEXT. NO_STYLE_DATA -
       * Don't pass through the style. The output captions will not contain any font styling
       * information.
       */
      public fun styleControl(styleControl: String)
    }

    private class BuilderImpl : Builder {
      private val cdkBuilder:
          software.amazon.awscdk.services.medialive.CfnChannel.WebvttDestinationSettingsProperty.Builder
          =
          software.amazon.awscdk.services.medialive.CfnChannel.WebvttDestinationSettingsProperty.builder()

      /**
       * @param styleControl Controls whether the color and position of the source captions is
       * passed through to the WebVTT output captions.
       * PASSTHROUGH - Valid only if the source captions are EMBEDDED or TELETEXT. NO_STYLE_DATA -
       * Don't pass through the style. The output captions will not contain any font styling
       * information.
       */
      override fun styleControl(styleControl: String) {
        cdkBuilder.styleControl(styleControl)
      }

      public fun build():
          software.amazon.awscdk.services.medialive.CfnChannel.WebvttDestinationSettingsProperty =
          cdkBuilder.build()
    }

    private class Wrapper(
      cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.WebvttDestinationSettingsProperty,
    ) : CdkObject(cdkObject),
        WebvttDestinationSettingsProperty {
      /**
       * Controls whether the color and position of the source captions is passed through to the
       * WebVTT output captions.
       *
       * PASSTHROUGH - Valid only if the source captions are EMBEDDED or TELETEXT. NO_STYLE_DATA -
       * Don't pass through the style. The output captions will not contain any font styling
       * information.
       *
       * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-webvttdestinationsettings.html#cfn-medialive-channel-webvttdestinationsettings-stylecontrol)
       */
      override fun styleControl(): String? = unwrap(this).getStyleControl()
    }

    public companion object {
      public operator fun invoke(block: Builder.() -> Unit = {}):
          WebvttDestinationSettingsProperty {
        val builderImpl = BuilderImpl()
        return Wrapper(builderImpl.apply(block).build())
      }

      internal
          fun wrap(cdkObject: software.amazon.awscdk.services.medialive.CfnChannel.WebvttDestinationSettingsProperty):
          WebvttDestinationSettingsProperty = CdkObjectWrappers.wrap(cdkObject) as?
          WebvttDestinationSettingsProperty ?: Wrapper(cdkObject)

      internal fun unwrap(wrapped: WebvttDestinationSettingsProperty):
          software.amazon.awscdk.services.medialive.CfnChannel.WebvttDestinationSettingsProperty =
          (wrapped as CdkObject).cdkObject as
          software.amazon.awscdk.services.medialive.CfnChannel.WebvttDestinationSettingsProperty
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy