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

software.amazon.awssdk.services.mediaconvert.model.Input Maven / Gradle / Ivy

Go to download

The AWS Java SDK for AWS Elemental MediaConvert module holds the client classes that are used for communicating with AWS Elemental MediaConvert Service

There is a newer version: 2.29.15
Show newest version
/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with
 * the License. A copy of the License is located at
 * 
 * http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
 * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions
 * and limitations under the License.
 */

package software.amazon.awssdk.services.mediaconvert.model;

import java.io.Serializable;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import software.amazon.awssdk.annotations.Generated;
import software.amazon.awssdk.core.SdkField;
import software.amazon.awssdk.core.SdkPojo;
import software.amazon.awssdk.core.protocol.MarshallLocation;
import software.amazon.awssdk.core.protocol.MarshallingType;
import software.amazon.awssdk.core.traits.ListTrait;
import software.amazon.awssdk.core.traits.LocationTrait;
import software.amazon.awssdk.core.traits.MapTrait;
import software.amazon.awssdk.core.util.DefaultSdkAutoConstructList;
import software.amazon.awssdk.core.util.DefaultSdkAutoConstructMap;
import software.amazon.awssdk.core.util.SdkAutoConstructList;
import software.amazon.awssdk.core.util.SdkAutoConstructMap;
import software.amazon.awssdk.utils.ToString;
import software.amazon.awssdk.utils.builder.CopyableBuilder;
import software.amazon.awssdk.utils.builder.ToCopyableBuilder;

/**
 * Use inputs to define the source files used in your transcoding job. For more information, see
 * https://docs.aws.amazon.com/mediaconvert/latest/ug/specify-input-settings.html. You can use multiple video inputs to
 * do input stitching. For more information, see
 * https://docs.aws.amazon.com/mediaconvert/latest/ug/assembling-multiple-inputs-and-input-clips.html
 */
@Generated("software.amazon.awssdk:codegen")
public final class Input implements SdkPojo, Serializable, ToCopyableBuilder {
    private static final SdkField ADVANCED_INPUT_FILTER_FIELD = SdkField. builder(MarshallingType.STRING)
            .memberName("AdvancedInputFilter").getter(getter(Input::advancedInputFilterAsString))
            .setter(setter(Builder::advancedInputFilter))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("advancedInputFilter").build())
            .build();

    private static final SdkField ADVANCED_INPUT_FILTER_SETTINGS_FIELD = SdkField
            . builder(MarshallingType.SDK_POJO)
            .memberName("AdvancedInputFilterSettings")
            .getter(getter(Input::advancedInputFilterSettings))
            .setter(setter(Builder::advancedInputFilterSettings))
            .constructor(AdvancedInputFilterSettings::builder)
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("advancedInputFilterSettings")
                    .build()).build();

    private static final SdkField> AUDIO_SELECTOR_GROUPS_FIELD = SdkField
            .> builder(MarshallingType.MAP)
            .memberName("AudioSelectorGroups")
            .getter(getter(Input::audioSelectorGroups))
            .setter(setter(Builder::audioSelectorGroups))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("audioSelectorGroups").build(),
                    MapTrait.builder()
                            .keyLocationName("key")
                            .valueLocationName("value")
                            .valueFieldInfo(
                                    SdkField. builder(MarshallingType.SDK_POJO)
                                            .constructor(AudioSelectorGroup::builder)
                                            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD)
                                                    .locationName("value").build()).build()).build()).build();

    private static final SdkField> AUDIO_SELECTORS_FIELD = SdkField
            .> builder(MarshallingType.MAP)
            .memberName("AudioSelectors")
            .getter(getter(Input::audioSelectors))
            .setter(setter(Builder::audioSelectors))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("audioSelectors").build(),
                    MapTrait.builder()
                            .keyLocationName("key")
                            .valueLocationName("value")
                            .valueFieldInfo(
                                    SdkField. builder(MarshallingType.SDK_POJO)
                                            .constructor(AudioSelector::builder)
                                            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD)
                                                    .locationName("value").build()).build()).build()).build();

    private static final SdkField> CAPTION_SELECTORS_FIELD = SdkField
            .> builder(MarshallingType.MAP)
            .memberName("CaptionSelectors")
            .getter(getter(Input::captionSelectors))
            .setter(setter(Builder::captionSelectors))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("captionSelectors").build(),
                    MapTrait.builder()
                            .keyLocationName("key")
                            .valueLocationName("value")
                            .valueFieldInfo(
                                    SdkField. builder(MarshallingType.SDK_POJO)
                                            .constructor(CaptionSelector::builder)
                                            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD)
                                                    .locationName("value").build()).build()).build()).build();

    private static final SdkField CROP_FIELD = SdkField. builder(MarshallingType.SDK_POJO)
            .memberName("Crop").getter(getter(Input::crop)).setter(setter(Builder::crop)).constructor(Rectangle::builder)
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("crop").build()).build();

    private static final SdkField DEBLOCK_FILTER_FIELD = SdkField. builder(MarshallingType.STRING)
            .memberName("DeblockFilter").getter(getter(Input::deblockFilterAsString)).setter(setter(Builder::deblockFilter))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("deblockFilter").build()).build();

    private static final SdkField DECRYPTION_SETTINGS_FIELD = SdkField
            . builder(MarshallingType.SDK_POJO).memberName("DecryptionSettings")
            .getter(getter(Input::decryptionSettings)).setter(setter(Builder::decryptionSettings))
            .constructor(InputDecryptionSettings::builder)
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("decryptionSettings").build())
            .build();

    private static final SdkField DENOISE_FILTER_FIELD = SdkField. builder(MarshallingType.STRING)
            .memberName("DenoiseFilter").getter(getter(Input::denoiseFilterAsString)).setter(setter(Builder::denoiseFilter))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("denoiseFilter").build()).build();

    private static final SdkField DOLBY_VISION_METADATA_XML_FIELD = SdkField. builder(MarshallingType.STRING)
            .memberName("DolbyVisionMetadataXml").getter(getter(Input::dolbyVisionMetadataXml))
            .setter(setter(Builder::dolbyVisionMetadataXml))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("dolbyVisionMetadataXml").build())
            .build();

    private static final SdkField FILE_INPUT_FIELD = SdkField. builder(MarshallingType.STRING)
            .memberName("FileInput").getter(getter(Input::fileInput)).setter(setter(Builder::fileInput))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("fileInput").build()).build();

    private static final SdkField FILTER_ENABLE_FIELD = SdkField. builder(MarshallingType.STRING)
            .memberName("FilterEnable").getter(getter(Input::filterEnableAsString)).setter(setter(Builder::filterEnable))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("filterEnable").build()).build();

    private static final SdkField FILTER_STRENGTH_FIELD = SdkField. builder(MarshallingType.INTEGER)
            .memberName("FilterStrength").getter(getter(Input::filterStrength)).setter(setter(Builder::filterStrength))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("filterStrength").build()).build();

    private static final SdkField IMAGE_INSERTER_FIELD = SdkField
            . builder(MarshallingType.SDK_POJO).memberName("ImageInserter").getter(getter(Input::imageInserter))
            .setter(setter(Builder::imageInserter)).constructor(ImageInserter::builder)
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("imageInserter").build()).build();

    private static final SdkField> INPUT_CLIPPINGS_FIELD = SdkField
            .> builder(MarshallingType.LIST)
            .memberName("InputClippings")
            .getter(getter(Input::inputClippings))
            .setter(setter(Builder::inputClippings))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("inputClippings").build(),
                    ListTrait
                            .builder()
                            .memberLocationName(null)
                            .memberFieldInfo(
                                    SdkField. builder(MarshallingType.SDK_POJO)
                                            .constructor(InputClipping::builder)
                                            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD)
                                                    .locationName("member").build()).build()).build()).build();

    private static final SdkField INPUT_SCAN_TYPE_FIELD = SdkField. builder(MarshallingType.STRING)
            .memberName("InputScanType").getter(getter(Input::inputScanTypeAsString)).setter(setter(Builder::inputScanType))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("inputScanType").build()).build();

    private static final SdkField POSITION_FIELD = SdkField. builder(MarshallingType.SDK_POJO)
            .memberName("Position").getter(getter(Input::position)).setter(setter(Builder::position))
            .constructor(Rectangle::builder)
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("position").build()).build();

    private static final SdkField PROGRAM_NUMBER_FIELD = SdkField. builder(MarshallingType.INTEGER)
            .memberName("ProgramNumber").getter(getter(Input::programNumber)).setter(setter(Builder::programNumber))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("programNumber").build()).build();

    private static final SdkField PSI_CONTROL_FIELD = SdkField. builder(MarshallingType.STRING)
            .memberName("PsiControl").getter(getter(Input::psiControlAsString)).setter(setter(Builder::psiControl))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("psiControl").build()).build();

    private static final SdkField> SUPPLEMENTAL_IMPS_FIELD = SdkField
            .> builder(MarshallingType.LIST)
            .memberName("SupplementalImps")
            .getter(getter(Input::supplementalImps))
            .setter(setter(Builder::supplementalImps))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("supplementalImps").build(),
                    ListTrait
                            .builder()
                            .memberLocationName(null)
                            .memberFieldInfo(
                                    SdkField. builder(MarshallingType.STRING)
                                            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD)
                                                    .locationName("member").build()).build()).build()).build();

    private static final SdkField TIMECODE_SOURCE_FIELD = SdkField. builder(MarshallingType.STRING)
            .memberName("TimecodeSource").getter(getter(Input::timecodeSourceAsString)).setter(setter(Builder::timecodeSource))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("timecodeSource").build()).build();

    private static final SdkField TIMECODE_START_FIELD = SdkField. builder(MarshallingType.STRING)
            .memberName("TimecodeStart").getter(getter(Input::timecodeStart)).setter(setter(Builder::timecodeStart))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("timecodeStart").build()).build();

    private static final SdkField VIDEO_GENERATOR_FIELD = SdkField
            . builder(MarshallingType.SDK_POJO).memberName("VideoGenerator")
            .getter(getter(Input::videoGenerator)).setter(setter(Builder::videoGenerator))
            .constructor(InputVideoGenerator::builder)
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("videoGenerator").build()).build();

    private static final SdkField> VIDEO_OVERLAYS_FIELD = SdkField
            .> builder(MarshallingType.LIST)
            .memberName("VideoOverlays")
            .getter(getter(Input::videoOverlays))
            .setter(setter(Builder::videoOverlays))
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("videoOverlays").build(),
                    ListTrait
                            .builder()
                            .memberLocationName(null)
                            .memberFieldInfo(
                                    SdkField. builder(MarshallingType.SDK_POJO)
                                            .constructor(VideoOverlay::builder)
                                            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD)
                                                    .locationName("member").build()).build()).build()).build();

    private static final SdkField VIDEO_SELECTOR_FIELD = SdkField
            . builder(MarshallingType.SDK_POJO).memberName("VideoSelector").getter(getter(Input::videoSelector))
            .setter(setter(Builder::videoSelector)).constructor(VideoSelector::builder)
            .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("videoSelector").build()).build();

    private static final List> SDK_FIELDS = Collections.unmodifiableList(Arrays.asList(ADVANCED_INPUT_FILTER_FIELD,
            ADVANCED_INPUT_FILTER_SETTINGS_FIELD, AUDIO_SELECTOR_GROUPS_FIELD, AUDIO_SELECTORS_FIELD, CAPTION_SELECTORS_FIELD,
            CROP_FIELD, DEBLOCK_FILTER_FIELD, DECRYPTION_SETTINGS_FIELD, DENOISE_FILTER_FIELD, DOLBY_VISION_METADATA_XML_FIELD,
            FILE_INPUT_FIELD, FILTER_ENABLE_FIELD, FILTER_STRENGTH_FIELD, IMAGE_INSERTER_FIELD, INPUT_CLIPPINGS_FIELD,
            INPUT_SCAN_TYPE_FIELD, POSITION_FIELD, PROGRAM_NUMBER_FIELD, PSI_CONTROL_FIELD, SUPPLEMENTAL_IMPS_FIELD,
            TIMECODE_SOURCE_FIELD, TIMECODE_START_FIELD, VIDEO_GENERATOR_FIELD, VIDEO_OVERLAYS_FIELD, VIDEO_SELECTOR_FIELD));

    private static final long serialVersionUID = 1L;

    private final String advancedInputFilter;

    private final AdvancedInputFilterSettings advancedInputFilterSettings;

    private final Map audioSelectorGroups;

    private final Map audioSelectors;

    private final Map captionSelectors;

    private final Rectangle crop;

    private final String deblockFilter;

    private final InputDecryptionSettings decryptionSettings;

    private final String denoiseFilter;

    private final String dolbyVisionMetadataXml;

    private final String fileInput;

    private final String filterEnable;

    private final Integer filterStrength;

    private final ImageInserter imageInserter;

    private final List inputClippings;

    private final String inputScanType;

    private final Rectangle position;

    private final Integer programNumber;

    private final String psiControl;

    private final List supplementalImps;

    private final String timecodeSource;

    private final String timecodeStart;

    private final InputVideoGenerator videoGenerator;

    private final List videoOverlays;

    private final VideoSelector videoSelector;

    private Input(BuilderImpl builder) {
        this.advancedInputFilter = builder.advancedInputFilter;
        this.advancedInputFilterSettings = builder.advancedInputFilterSettings;
        this.audioSelectorGroups = builder.audioSelectorGroups;
        this.audioSelectors = builder.audioSelectors;
        this.captionSelectors = builder.captionSelectors;
        this.crop = builder.crop;
        this.deblockFilter = builder.deblockFilter;
        this.decryptionSettings = builder.decryptionSettings;
        this.denoiseFilter = builder.denoiseFilter;
        this.dolbyVisionMetadataXml = builder.dolbyVisionMetadataXml;
        this.fileInput = builder.fileInput;
        this.filterEnable = builder.filterEnable;
        this.filterStrength = builder.filterStrength;
        this.imageInserter = builder.imageInserter;
        this.inputClippings = builder.inputClippings;
        this.inputScanType = builder.inputScanType;
        this.position = builder.position;
        this.programNumber = builder.programNumber;
        this.psiControl = builder.psiControl;
        this.supplementalImps = builder.supplementalImps;
        this.timecodeSource = builder.timecodeSource;
        this.timecodeStart = builder.timecodeStart;
        this.videoGenerator = builder.videoGenerator;
        this.videoOverlays = builder.videoOverlays;
        this.videoSelector = builder.videoSelector;
    }

    /**
     * Use to remove noise, blocking, blurriness, or ringing from your input as a pre-filter step before encoding. The
     * Advanced input filter removes more types of compression artifacts and is an improvement when compared to basic
     * Deblock and Denoise filters. To remove video compression artifacts from your input and improve the video quality:
     * Choose Enabled. Additionally, this filter can help increase the video quality of your output relative to its
     * bitrate, since noisy inputs are more complex and require more bits to encode. To help restore loss of detail
     * after applying the filter, you can optionally add texture or sharpening as an additional step. Jobs that use this
     * feature incur pro-tier pricing. To not apply advanced input filtering: Choose Disabled. Note that you can still
     * apply basic filtering with Deblock and Denoise.
     * 

* If the service returns an enum value that is not available in the current SDK version, * {@link #advancedInputFilter} will return {@link AdvancedInputFilter#UNKNOWN_TO_SDK_VERSION}. The raw value * returned by the service is available from {@link #advancedInputFilterAsString}. *

* * @return Use to remove noise, blocking, blurriness, or ringing from your input as a pre-filter step before * encoding. The Advanced input filter removes more types of compression artifacts and is an improvement * when compared to basic Deblock and Denoise filters. To remove video compression artifacts from your input * and improve the video quality: Choose Enabled. Additionally, this filter can help increase the video * quality of your output relative to its bitrate, since noisy inputs are more complex and require more bits * to encode. To help restore loss of detail after applying the filter, you can optionally add texture or * sharpening as an additional step. Jobs that use this feature incur pro-tier pricing. To not apply * advanced input filtering: Choose Disabled. Note that you can still apply basic filtering with Deblock and * Denoise. * @see AdvancedInputFilter */ public final AdvancedInputFilter advancedInputFilter() { return AdvancedInputFilter.fromValue(advancedInputFilter); } /** * Use to remove noise, blocking, blurriness, or ringing from your input as a pre-filter step before encoding. The * Advanced input filter removes more types of compression artifacts and is an improvement when compared to basic * Deblock and Denoise filters. To remove video compression artifacts from your input and improve the video quality: * Choose Enabled. Additionally, this filter can help increase the video quality of your output relative to its * bitrate, since noisy inputs are more complex and require more bits to encode. To help restore loss of detail * after applying the filter, you can optionally add texture or sharpening as an additional step. Jobs that use this * feature incur pro-tier pricing. To not apply advanced input filtering: Choose Disabled. Note that you can still * apply basic filtering with Deblock and Denoise. *

* If the service returns an enum value that is not available in the current SDK version, * {@link #advancedInputFilter} will return {@link AdvancedInputFilter#UNKNOWN_TO_SDK_VERSION}. The raw value * returned by the service is available from {@link #advancedInputFilterAsString}. *

* * @return Use to remove noise, blocking, blurriness, or ringing from your input as a pre-filter step before * encoding. The Advanced input filter removes more types of compression artifacts and is an improvement * when compared to basic Deblock and Denoise filters. To remove video compression artifacts from your input * and improve the video quality: Choose Enabled. Additionally, this filter can help increase the video * quality of your output relative to its bitrate, since noisy inputs are more complex and require more bits * to encode. To help restore loss of detail after applying the filter, you can optionally add texture or * sharpening as an additional step. Jobs that use this feature incur pro-tier pricing. To not apply * advanced input filtering: Choose Disabled. Note that you can still apply basic filtering with Deblock and * Denoise. * @see AdvancedInputFilter */ public final String advancedInputFilterAsString() { return advancedInputFilter; } /** * Optional settings for Advanced input filter when you set Advanced input filter to Enabled. * * @return Optional settings for Advanced input filter when you set Advanced input filter to Enabled. */ public final AdvancedInputFilterSettings advancedInputFilterSettings() { return advancedInputFilterSettings; } /** * For responses, this returns true if the service returned a value for the AudioSelectorGroups property. This DOES * NOT check that the value is non-empty (for which, you should check the {@code isEmpty()} method on the property). * This is useful because the SDK will never return a null collection or map, but you may need to differentiate * between the service returning nothing (or null) and the service returning an empty collection or map. For * requests, this returns true if a value for the property was specified in the request builder, and false if a * value was not specified. */ public final boolean hasAudioSelectorGroups() { return audioSelectorGroups != null && !(audioSelectorGroups instanceof SdkAutoConstructMap); } /** * Use audio selector groups to combine multiple sidecar audio inputs so that you can assign them to a single output * audio tab. Note that, if you're working with embedded audio, it's simpler to assign multiple input tracks into a * single audio selector rather than use an audio selector group. *

* Attempts to modify the collection returned by this method will result in an UnsupportedOperationException. *

*

* This method will never return null. If you would like to know whether the service returned this field (so that * you can differentiate between null and empty), you can use the {@link #hasAudioSelectorGroups} method. *

* * @return Use audio selector groups to combine multiple sidecar audio inputs so that you can assign them to a * single output audio tab. Note that, if you're working with embedded audio, it's simpler to assign * multiple input tracks into a single audio selector rather than use an audio selector group. */ public final Map audioSelectorGroups() { return audioSelectorGroups; } /** * For responses, this returns true if the service returned a value for the AudioSelectors property. This DOES NOT * check that the value is non-empty (for which, you should check the {@code isEmpty()} method on the property). * This is useful because the SDK will never return a null collection or map, but you may need to differentiate * between the service returning nothing (or null) and the service returning an empty collection or map. For * requests, this returns true if a value for the property was specified in the request builder, and false if a * value was not specified. */ public final boolean hasAudioSelectors() { return audioSelectors != null && !(audioSelectors instanceof SdkAutoConstructMap); } /** * Use Audio selectors to specify a track or set of tracks from the input that you will use in your outputs. You can * use multiple Audio selectors per input. *

* Attempts to modify the collection returned by this method will result in an UnsupportedOperationException. *

*

* This method will never return null. If you would like to know whether the service returned this field (so that * you can differentiate between null and empty), you can use the {@link #hasAudioSelectors} method. *

* * @return Use Audio selectors to specify a track or set of tracks from the input that you will use in your outputs. * You can use multiple Audio selectors per input. */ public final Map audioSelectors() { return audioSelectors; } /** * For responses, this returns true if the service returned a value for the CaptionSelectors property. This DOES NOT * check that the value is non-empty (for which, you should check the {@code isEmpty()} method on the property). * This is useful because the SDK will never return a null collection or map, but you may need to differentiate * between the service returning nothing (or null) and the service returning an empty collection or map. For * requests, this returns true if a value for the property was specified in the request builder, and false if a * value was not specified. */ public final boolean hasCaptionSelectors() { return captionSelectors != null && !(captionSelectors instanceof SdkAutoConstructMap); } /** * Use captions selectors to specify the captions data from your input that you use in your outputs. You can use up * to 100 captions selectors per input. *

* Attempts to modify the collection returned by this method will result in an UnsupportedOperationException. *

*

* This method will never return null. If you would like to know whether the service returned this field (so that * you can differentiate between null and empty), you can use the {@link #hasCaptionSelectors} method. *

* * @return Use captions selectors to specify the captions data from your input that you use in your outputs. You can * use up to 100 captions selectors per input. */ public final Map captionSelectors() { return captionSelectors; } /** * Use Cropping selection to specify the video area that the service will include in the output video frame. If you * specify a value here, it will override any value that you specify in the output setting Cropping selection. * * @return Use Cropping selection to specify the video area that the service will include in the output video frame. * If you specify a value here, it will override any value that you specify in the output setting Cropping * selection. */ public final Rectangle crop() { return crop; } /** * Enable Deblock to produce smoother motion in the output. Default is disabled. Only manually controllable for * MPEG2 and uncompressed video inputs. *

* If the service returns an enum value that is not available in the current SDK version, {@link #deblockFilter} * will return {@link InputDeblockFilter#UNKNOWN_TO_SDK_VERSION}. The raw value returned by the service is available * from {@link #deblockFilterAsString}. *

* * @return Enable Deblock to produce smoother motion in the output. Default is disabled. Only manually controllable * for MPEG2 and uncompressed video inputs. * @see InputDeblockFilter */ public final InputDeblockFilter deblockFilter() { return InputDeblockFilter.fromValue(deblockFilter); } /** * Enable Deblock to produce smoother motion in the output. Default is disabled. Only manually controllable for * MPEG2 and uncompressed video inputs. *

* If the service returns an enum value that is not available in the current SDK version, {@link #deblockFilter} * will return {@link InputDeblockFilter#UNKNOWN_TO_SDK_VERSION}. The raw value returned by the service is available * from {@link #deblockFilterAsString}. *

* * @return Enable Deblock to produce smoother motion in the output. Default is disabled. Only manually controllable * for MPEG2 and uncompressed video inputs. * @see InputDeblockFilter */ public final String deblockFilterAsString() { return deblockFilter; } /** * Settings for decrypting any input files that you encrypt before you upload them to Amazon S3. MediaConvert can * decrypt files only when you use AWS Key Management Service (KMS) to encrypt the data key that you use to encrypt * your content. * * @return Settings for decrypting any input files that you encrypt before you upload them to Amazon S3. * MediaConvert can decrypt files only when you use AWS Key Management Service (KMS) to encrypt the data key * that you use to encrypt your content. */ public final InputDecryptionSettings decryptionSettings() { return decryptionSettings; } /** * Enable Denoise to filter noise from the input. Default is disabled. Only applicable to MPEG2, H.264, H.265, and * uncompressed video inputs. *

* If the service returns an enum value that is not available in the current SDK version, {@link #denoiseFilter} * will return {@link InputDenoiseFilter#UNKNOWN_TO_SDK_VERSION}. The raw value returned by the service is available * from {@link #denoiseFilterAsString}. *

* * @return Enable Denoise to filter noise from the input. Default is disabled. Only applicable to MPEG2, H.264, * H.265, and uncompressed video inputs. * @see InputDenoiseFilter */ public final InputDenoiseFilter denoiseFilter() { return InputDenoiseFilter.fromValue(denoiseFilter); } /** * Enable Denoise to filter noise from the input. Default is disabled. Only applicable to MPEG2, H.264, H.265, and * uncompressed video inputs. *

* If the service returns an enum value that is not available in the current SDK version, {@link #denoiseFilter} * will return {@link InputDenoiseFilter#UNKNOWN_TO_SDK_VERSION}. The raw value returned by the service is available * from {@link #denoiseFilterAsString}. *

* * @return Enable Denoise to filter noise from the input. Default is disabled. Only applicable to MPEG2, H.264, * H.265, and uncompressed video inputs. * @see InputDenoiseFilter */ public final String denoiseFilterAsString() { return denoiseFilter; } /** * Use this setting only when your video source has Dolby Vision studio mastering metadata that is carried in a * separate XML file. Specify the Amazon S3 location for the metadata XML file. MediaConvert uses this file to * provide global and frame-level metadata for Dolby Vision preprocessing. When you specify a file here and your * input also has interleaved global and frame level metadata, MediaConvert ignores the interleaved metadata and * uses only the the metadata from this external XML file. Note that your IAM service role must grant MediaConvert * read permissions to this file. For more information, see * https://docs.aws.amazon.com/mediaconvert/latest/ug/iam-role.html. * * @return Use this setting only when your video source has Dolby Vision studio mastering metadata that is carried * in a separate XML file. Specify the Amazon S3 location for the metadata XML file. MediaConvert uses this * file to provide global and frame-level metadata for Dolby Vision preprocessing. When you specify a file * here and your input also has interleaved global and frame level metadata, MediaConvert ignores the * interleaved metadata and uses only the the metadata from this external XML file. Note that your IAM * service role must grant MediaConvert read permissions to this file. For more information, see * https://docs.aws.amazon.com/mediaconvert/latest/ug/iam-role.html. */ public final String dolbyVisionMetadataXml() { return dolbyVisionMetadataXml; } /** * Specify the source file for your transcoding job. You can use multiple inputs in a single job. The service * concatenates these inputs, in the order that you specify them in the job, to create the outputs. If your input * format is IMF, specify your input by providing the path to your CPL. For example, "s3://bucket/vf/cpl.xml". If * the CPL is in an incomplete IMP, make sure to use *Supplemental IMPs* to specify any supplemental IMPs that * contain assets referenced by the CPL. * * @return Specify the source file for your transcoding job. You can use multiple inputs in a single job. The * service concatenates these inputs, in the order that you specify them in the job, to create the outputs. * If your input format is IMF, specify your input by providing the path to your CPL. For example, * "s3://bucket/vf/cpl.xml". If the CPL is in an incomplete IMP, make sure to use *Supplemental IMPs* to * specify any supplemental IMPs that contain assets referenced by the CPL. */ public final String fileInput() { return fileInput; } /** * Specify whether to apply input filtering to improve the video quality of your input. To apply filtering depending * on your input type and quality: Choose Auto. To apply no filtering: Choose Disable. To apply filtering regardless * of your input type and quality: Choose Force. When you do, you must also specify a value for Filter strength. *

* If the service returns an enum value that is not available in the current SDK version, {@link #filterEnable} will * return {@link InputFilterEnable#UNKNOWN_TO_SDK_VERSION}. The raw value returned by the service is available from * {@link #filterEnableAsString}. *

* * @return Specify whether to apply input filtering to improve the video quality of your input. To apply filtering * depending on your input type and quality: Choose Auto. To apply no filtering: Choose Disable. To apply * filtering regardless of your input type and quality: Choose Force. When you do, you must also specify a * value for Filter strength. * @see InputFilterEnable */ public final InputFilterEnable filterEnable() { return InputFilterEnable.fromValue(filterEnable); } /** * Specify whether to apply input filtering to improve the video quality of your input. To apply filtering depending * on your input type and quality: Choose Auto. To apply no filtering: Choose Disable. To apply filtering regardless * of your input type and quality: Choose Force. When you do, you must also specify a value for Filter strength. *

* If the service returns an enum value that is not available in the current SDK version, {@link #filterEnable} will * return {@link InputFilterEnable#UNKNOWN_TO_SDK_VERSION}. The raw value returned by the service is available from * {@link #filterEnableAsString}. *

* * @return Specify whether to apply input filtering to improve the video quality of your input. To apply filtering * depending on your input type and quality: Choose Auto. To apply no filtering: Choose Disable. To apply * filtering regardless of your input type and quality: Choose Force. When you do, you must also specify a * value for Filter strength. * @see InputFilterEnable */ public final String filterEnableAsString() { return filterEnable; } /** * Specify the strength of the input filter. To apply an automatic amount of filtering based the compression * artifacts measured in your input: We recommend that you leave Filter strength blank and set Filter enable to * Auto. To manually apply filtering: Enter a value from 1 to 5, where 1 is the least amount of filtering and 5 is * the most. The value that you enter applies to the strength of the Deblock or Denoise filters, or to the strength * of the Advanced input filter. * * @return Specify the strength of the input filter. To apply an automatic amount of filtering based the compression * artifacts measured in your input: We recommend that you leave Filter strength blank and set Filter enable * to Auto. To manually apply filtering: Enter a value from 1 to 5, where 1 is the least amount of filtering * and 5 is the most. The value that you enter applies to the strength of the Deblock or Denoise filters, or * to the strength of the Advanced input filter. */ public final Integer filterStrength() { return filterStrength; } /** * Enable the image inserter feature to include a graphic overlay on your video. Enable or disable this feature for * each input individually. This setting is disabled by default. * * @return Enable the image inserter feature to include a graphic overlay on your video. Enable or disable this * feature for each input individually. This setting is disabled by default. */ public final ImageInserter imageInserter() { return imageInserter; } /** * For responses, this returns true if the service returned a value for the InputClippings property. This DOES NOT * check that the value is non-empty (for which, you should check the {@code isEmpty()} method on the property). * This is useful because the SDK will never return a null collection or map, but you may need to differentiate * between the service returning nothing (or null) and the service returning an empty collection or map. For * requests, this returns true if a value for the property was specified in the request builder, and false if a * value was not specified. */ public final boolean hasInputClippings() { return inputClippings != null && !(inputClippings instanceof SdkAutoConstructList); } /** * Contains sets of start and end times that together specify a portion of the input to be used in the outputs. If * you provide only a start time, the clip will be the entire input from that point to the end. If you provide only * an end time, it will be the entire input up to that point. When you specify more than one input clip, the * transcoding service creates the job outputs by stringing the clips together in the order you specify them. *

* Attempts to modify the collection returned by this method will result in an UnsupportedOperationException. *

*

* This method will never return null. If you would like to know whether the service returned this field (so that * you can differentiate between null and empty), you can use the {@link #hasInputClippings} method. *

* * @return Contains sets of start and end times that together specify a portion of the input to be used in the * outputs. If you provide only a start time, the clip will be the entire input from that point to the end. * If you provide only an end time, it will be the entire input up to that point. When you specify more than * one input clip, the transcoding service creates the job outputs by stringing the clips together in the * order you specify them. */ public final List inputClippings() { return inputClippings; } /** * When you have a progressive segmented frame (PsF) input, use this setting to flag the input as PsF. MediaConvert * doesn't automatically detect PsF. Therefore, flagging your input as PsF results in better preservation of video * quality when you do deinterlacing and frame rate conversion. If you don't specify, the default value is Auto. * Auto is the correct setting for all inputs that are not PsF. Don't set this value to PsF when your input is * interlaced. Doing so creates horizontal interlacing artifacts. *

* If the service returns an enum value that is not available in the current SDK version, {@link #inputScanType} * will return {@link InputScanType#UNKNOWN_TO_SDK_VERSION}. The raw value returned by the service is available from * {@link #inputScanTypeAsString}. *

* * @return When you have a progressive segmented frame (PsF) input, use this setting to flag the input as PsF. * MediaConvert doesn't automatically detect PsF. Therefore, flagging your input as PsF results in better * preservation of video quality when you do deinterlacing and frame rate conversion. If you don't specify, * the default value is Auto. Auto is the correct setting for all inputs that are not PsF. Don't set this * value to PsF when your input is interlaced. Doing so creates horizontal interlacing artifacts. * @see InputScanType */ public final InputScanType inputScanType() { return InputScanType.fromValue(inputScanType); } /** * When you have a progressive segmented frame (PsF) input, use this setting to flag the input as PsF. MediaConvert * doesn't automatically detect PsF. Therefore, flagging your input as PsF results in better preservation of video * quality when you do deinterlacing and frame rate conversion. If you don't specify, the default value is Auto. * Auto is the correct setting for all inputs that are not PsF. Don't set this value to PsF when your input is * interlaced. Doing so creates horizontal interlacing artifacts. *

* If the service returns an enum value that is not available in the current SDK version, {@link #inputScanType} * will return {@link InputScanType#UNKNOWN_TO_SDK_VERSION}. The raw value returned by the service is available from * {@link #inputScanTypeAsString}. *

* * @return When you have a progressive segmented frame (PsF) input, use this setting to flag the input as PsF. * MediaConvert doesn't automatically detect PsF. Therefore, flagging your input as PsF results in better * preservation of video quality when you do deinterlacing and frame rate conversion. If you don't specify, * the default value is Auto. Auto is the correct setting for all inputs that are not PsF. Don't set this * value to PsF when your input is interlaced. Doing so creates horizontal interlacing artifacts. * @see InputScanType */ public final String inputScanTypeAsString() { return inputScanType; } /** * Use Selection placement to define the video area in your output frame. The area outside of the rectangle that you * specify here is black. If you specify a value here, it will override any value that you specify in the output * setting Selection placement. If you specify a value here, this will override any AFD values in your input, even * if you set Respond to AFD to Respond. If you specify a value here, this will ignore anything that you specify for * the setting Scaling Behavior. * * @return Use Selection placement to define the video area in your output frame. The area outside of the rectangle * that you specify here is black. If you specify a value here, it will override any value that you specify * in the output setting Selection placement. If you specify a value here, this will override any AFD values * in your input, even if you set Respond to AFD to Respond. If you specify a value here, this will ignore * anything that you specify for the setting Scaling Behavior. */ public final Rectangle position() { return position; } /** * Use Program to select a specific program from within a multi-program transport stream. Note that Quad 4K is not * currently supported. Default is the first program within the transport stream. If the program you specify doesn't * exist, the transcoding service will use this default. * * @return Use Program to select a specific program from within a multi-program transport stream. Note that Quad 4K * is not currently supported. Default is the first program within the transport stream. If the program you * specify doesn't exist, the transcoding service will use this default. */ public final Integer programNumber() { return programNumber; } /** * Set PSI control for transport stream inputs to specify which data the demux process to scans. * Ignore PSI - Scan * all PIDs for audio and video. * Use PSI - Scan only PSI data. *

* If the service returns an enum value that is not available in the current SDK version, {@link #psiControl} will * return {@link InputPsiControl#UNKNOWN_TO_SDK_VERSION}. The raw value returned by the service is available from * {@link #psiControlAsString}. *

* * @return Set PSI control for transport stream inputs to specify which data the demux process to scans. * Ignore * PSI - Scan all PIDs for audio and video. * Use PSI - Scan only PSI data. * @see InputPsiControl */ public final InputPsiControl psiControl() { return InputPsiControl.fromValue(psiControl); } /** * Set PSI control for transport stream inputs to specify which data the demux process to scans. * Ignore PSI - Scan * all PIDs for audio and video. * Use PSI - Scan only PSI data. *

* If the service returns an enum value that is not available in the current SDK version, {@link #psiControl} will * return {@link InputPsiControl#UNKNOWN_TO_SDK_VERSION}. The raw value returned by the service is available from * {@link #psiControlAsString}. *

* * @return Set PSI control for transport stream inputs to specify which data the demux process to scans. * Ignore * PSI - Scan all PIDs for audio and video. * Use PSI - Scan only PSI data. * @see InputPsiControl */ public final String psiControlAsString() { return psiControl; } /** * For responses, this returns true if the service returned a value for the SupplementalImps property. This DOES NOT * check that the value is non-empty (for which, you should check the {@code isEmpty()} method on the property). * This is useful because the SDK will never return a null collection or map, but you may need to differentiate * between the service returning nothing (or null) and the service returning an empty collection or map. For * requests, this returns true if a value for the property was specified in the request builder, and false if a * value was not specified. */ public final boolean hasSupplementalImps() { return supplementalImps != null && !(supplementalImps instanceof SdkAutoConstructList); } /** * Provide a list of any necessary supplemental IMPs. You need supplemental IMPs if the CPL that you're using for * your input is in an incomplete IMP. Specify either the supplemental IMP directories with a trailing slash or the * ASSETMAP.xml files. For example ["s3://bucket/ov/", "s3://bucket/vf2/ASSETMAP.xml"]. You don't need to specify * the IMP that contains your input CPL, because the service automatically detects it. *

* Attempts to modify the collection returned by this method will result in an UnsupportedOperationException. *

*

* This method will never return null. If you would like to know whether the service returned this field (so that * you can differentiate between null and empty), you can use the {@link #hasSupplementalImps} method. *

* * @return Provide a list of any necessary supplemental IMPs. You need supplemental IMPs if the CPL that you're * using for your input is in an incomplete IMP. Specify either the supplemental IMP directories with a * trailing slash or the ASSETMAP.xml files. For example ["s3://bucket/ov/", * "s3://bucket/vf2/ASSETMAP.xml"]. You don't need to specify the IMP that contains your input CPL, because * the service automatically detects it. */ public final List supplementalImps() { return supplementalImps; } /** * Use this Timecode source setting, located under the input settings, to specify how the service counts input video * frames. This input frame count affects only the behavior of features that apply to a single input at a time, such * as input clipping and synchronizing some captions formats. Choose Embedded to use the timecodes in your input * video. Choose Start at zero to start the first frame at zero. Choose Specified start to start the first frame at * the timecode that you specify in the setting Start timecode. If you don't specify a value for Timecode source, * the service will use Embedded by default. For more information about timecodes, see * https://docs.aws.amazon.com/console/mediaconvert/timecode. *

* If the service returns an enum value that is not available in the current SDK version, {@link #timecodeSource} * will return {@link InputTimecodeSource#UNKNOWN_TO_SDK_VERSION}. The raw value returned by the service is * available from {@link #timecodeSourceAsString}. *

* * @return Use this Timecode source setting, located under the input settings, to specify how the service counts * input video frames. This input frame count affects only the behavior of features that apply to a single * input at a time, such as input clipping and synchronizing some captions formats. Choose Embedded to use * the timecodes in your input video. Choose Start at zero to start the first frame at zero. Choose * Specified start to start the first frame at the timecode that you specify in the setting Start timecode. * If you don't specify a value for Timecode source, the service will use Embedded by default. For more * information about timecodes, see https://docs.aws.amazon.com/console/mediaconvert/timecode. * @see InputTimecodeSource */ public final InputTimecodeSource timecodeSource() { return InputTimecodeSource.fromValue(timecodeSource); } /** * Use this Timecode source setting, located under the input settings, to specify how the service counts input video * frames. This input frame count affects only the behavior of features that apply to a single input at a time, such * as input clipping and synchronizing some captions formats. Choose Embedded to use the timecodes in your input * video. Choose Start at zero to start the first frame at zero. Choose Specified start to start the first frame at * the timecode that you specify in the setting Start timecode. If you don't specify a value for Timecode source, * the service will use Embedded by default. For more information about timecodes, see * https://docs.aws.amazon.com/console/mediaconvert/timecode. *

* If the service returns an enum value that is not available in the current SDK version, {@link #timecodeSource} * will return {@link InputTimecodeSource#UNKNOWN_TO_SDK_VERSION}. The raw value returned by the service is * available from {@link #timecodeSourceAsString}. *

* * @return Use this Timecode source setting, located under the input settings, to specify how the service counts * input video frames. This input frame count affects only the behavior of features that apply to a single * input at a time, such as input clipping and synchronizing some captions formats. Choose Embedded to use * the timecodes in your input video. Choose Start at zero to start the first frame at zero. Choose * Specified start to start the first frame at the timecode that you specify in the setting Start timecode. * If you don't specify a value for Timecode source, the service will use Embedded by default. For more * information about timecodes, see https://docs.aws.amazon.com/console/mediaconvert/timecode. * @see InputTimecodeSource */ public final String timecodeSourceAsString() { return timecodeSource; } /** * Specify the timecode that you want the service to use for this input's initial frame. To use this setting, you * must set the Timecode source setting, located under the input settings, to Specified start. For more information * about timecodes, see https://docs.aws.amazon.com/console/mediaconvert/timecode. * * @return Specify the timecode that you want the service to use for this input's initial frame. To use this * setting, you must set the Timecode source setting, located under the input settings, to Specified start. * For more information about timecodes, see https://docs.aws.amazon.com/console/mediaconvert/timecode. */ public final String timecodeStart() { return timecodeStart; } /** * When you include Video generator, MediaConvert creates a video input with black frames. Use this setting if you * do not have a video input or if you want to add black video frames before, or after, other inputs. You can * specify Video generator, or you can specify an Input file, but you cannot specify both. For more information, see * https://docs.aws.amazon.com/mediaconvert/latest/ug/video-generator.html * * @return When you include Video generator, MediaConvert creates a video input with black frames. Use this setting * if you do not have a video input or if you want to add black video frames before, or after, other inputs. * You can specify Video generator, or you can specify an Input file, but you cannot specify both. For more * information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/video-generator.html */ public final InputVideoGenerator videoGenerator() { return videoGenerator; } /** * For responses, this returns true if the service returned a value for the VideoOverlays property. This DOES NOT * check that the value is non-empty (for which, you should check the {@code isEmpty()} method on the property). * This is useful because the SDK will never return a null collection or map, but you may need to differentiate * between the service returning nothing (or null) and the service returning an empty collection or map. For * requests, this returns true if a value for the property was specified in the request builder, and false if a * value was not specified. */ public final boolean hasVideoOverlays() { return videoOverlays != null && !(videoOverlays instanceof SdkAutoConstructList); } /** * Contains an array of video overlays. *

* Attempts to modify the collection returned by this method will result in an UnsupportedOperationException. *

*

* This method will never return null. If you would like to know whether the service returned this field (so that * you can differentiate between null and empty), you can use the {@link #hasVideoOverlays} method. *

* * @return Contains an array of video overlays. */ public final List videoOverlays() { return videoOverlays; } /** * Input video selectors contain the video settings for the input. Each of your inputs can have up to one video * selector. * * @return Input video selectors contain the video settings for the input. Each of your inputs can have up to one * video selector. */ public final VideoSelector videoSelector() { return videoSelector; } @Override public Builder toBuilder() { return new BuilderImpl(this); } public static Builder builder() { return new BuilderImpl(); } public static Class serializableBuilderClass() { return BuilderImpl.class; } @Override public final int hashCode() { int hashCode = 1; hashCode = 31 * hashCode + Objects.hashCode(advancedInputFilterAsString()); hashCode = 31 * hashCode + Objects.hashCode(advancedInputFilterSettings()); hashCode = 31 * hashCode + Objects.hashCode(hasAudioSelectorGroups() ? audioSelectorGroups() : null); hashCode = 31 * hashCode + Objects.hashCode(hasAudioSelectors() ? audioSelectors() : null); hashCode = 31 * hashCode + Objects.hashCode(hasCaptionSelectors() ? captionSelectors() : null); hashCode = 31 * hashCode + Objects.hashCode(crop()); hashCode = 31 * hashCode + Objects.hashCode(deblockFilterAsString()); hashCode = 31 * hashCode + Objects.hashCode(decryptionSettings()); hashCode = 31 * hashCode + Objects.hashCode(denoiseFilterAsString()); hashCode = 31 * hashCode + Objects.hashCode(dolbyVisionMetadataXml()); hashCode = 31 * hashCode + Objects.hashCode(fileInput()); hashCode = 31 * hashCode + Objects.hashCode(filterEnableAsString()); hashCode = 31 * hashCode + Objects.hashCode(filterStrength()); hashCode = 31 * hashCode + Objects.hashCode(imageInserter()); hashCode = 31 * hashCode + Objects.hashCode(hasInputClippings() ? inputClippings() : null); hashCode = 31 * hashCode + Objects.hashCode(inputScanTypeAsString()); hashCode = 31 * hashCode + Objects.hashCode(position()); hashCode = 31 * hashCode + Objects.hashCode(programNumber()); hashCode = 31 * hashCode + Objects.hashCode(psiControlAsString()); hashCode = 31 * hashCode + Objects.hashCode(hasSupplementalImps() ? supplementalImps() : null); hashCode = 31 * hashCode + Objects.hashCode(timecodeSourceAsString()); hashCode = 31 * hashCode + Objects.hashCode(timecodeStart()); hashCode = 31 * hashCode + Objects.hashCode(videoGenerator()); hashCode = 31 * hashCode + Objects.hashCode(hasVideoOverlays() ? videoOverlays() : null); hashCode = 31 * hashCode + Objects.hashCode(videoSelector()); return hashCode; } @Override public final boolean equals(Object obj) { return equalsBySdkFields(obj); } @Override public final boolean equalsBySdkFields(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (!(obj instanceof Input)) { return false; } Input other = (Input) obj; return Objects.equals(advancedInputFilterAsString(), other.advancedInputFilterAsString()) && Objects.equals(advancedInputFilterSettings(), other.advancedInputFilterSettings()) && hasAudioSelectorGroups() == other.hasAudioSelectorGroups() && Objects.equals(audioSelectorGroups(), other.audioSelectorGroups()) && hasAudioSelectors() == other.hasAudioSelectors() && Objects.equals(audioSelectors(), other.audioSelectors()) && hasCaptionSelectors() == other.hasCaptionSelectors() && Objects.equals(captionSelectors(), other.captionSelectors()) && Objects.equals(crop(), other.crop()) && Objects.equals(deblockFilterAsString(), other.deblockFilterAsString()) && Objects.equals(decryptionSettings(), other.decryptionSettings()) && Objects.equals(denoiseFilterAsString(), other.denoiseFilterAsString()) && Objects.equals(dolbyVisionMetadataXml(), other.dolbyVisionMetadataXml()) && Objects.equals(fileInput(), other.fileInput()) && Objects.equals(filterEnableAsString(), other.filterEnableAsString()) && Objects.equals(filterStrength(), other.filterStrength()) && Objects.equals(imageInserter(), other.imageInserter()) && hasInputClippings() == other.hasInputClippings() && Objects.equals(inputClippings(), other.inputClippings()) && Objects.equals(inputScanTypeAsString(), other.inputScanTypeAsString()) && Objects.equals(position(), other.position()) && Objects.equals(programNumber(), other.programNumber()) && Objects.equals(psiControlAsString(), other.psiControlAsString()) && hasSupplementalImps() == other.hasSupplementalImps() && Objects.equals(supplementalImps(), other.supplementalImps()) && Objects.equals(timecodeSourceAsString(), other.timecodeSourceAsString()) && Objects.equals(timecodeStart(), other.timecodeStart()) && Objects.equals(videoGenerator(), other.videoGenerator()) && hasVideoOverlays() == other.hasVideoOverlays() && Objects.equals(videoOverlays(), other.videoOverlays()) && Objects.equals(videoSelector(), other.videoSelector()); } /** * Returns a string representation of this object. This is useful for testing and debugging. Sensitive data will be * redacted from this string using a placeholder value. */ @Override public final String toString() { return ToString.builder("Input").add("AdvancedInputFilter", advancedInputFilterAsString()) .add("AdvancedInputFilterSettings", advancedInputFilterSettings()) .add("AudioSelectorGroups", hasAudioSelectorGroups() ? audioSelectorGroups() : null) .add("AudioSelectors", hasAudioSelectors() ? audioSelectors() : null) .add("CaptionSelectors", hasCaptionSelectors() ? captionSelectors() : null).add("Crop", crop()) .add("DeblockFilter", deblockFilterAsString()).add("DecryptionSettings", decryptionSettings()) .add("DenoiseFilter", denoiseFilterAsString()).add("DolbyVisionMetadataXml", dolbyVisionMetadataXml()) .add("FileInput", fileInput()).add("FilterEnable", filterEnableAsString()) .add("FilterStrength", filterStrength()).add("ImageInserter", imageInserter()) .add("InputClippings", hasInputClippings() ? inputClippings() : null) .add("InputScanType", inputScanTypeAsString()).add("Position", position()).add("ProgramNumber", programNumber()) .add("PsiControl", psiControlAsString()) .add("SupplementalImps", hasSupplementalImps() ? supplementalImps() : null) .add("TimecodeSource", timecodeSourceAsString()).add("TimecodeStart", timecodeStart()) .add("VideoGenerator", videoGenerator()).add("VideoOverlays", hasVideoOverlays() ? videoOverlays() : null) .add("VideoSelector", videoSelector()).build(); } public final Optional getValueForField(String fieldName, Class clazz) { switch (fieldName) { case "AdvancedInputFilter": return Optional.ofNullable(clazz.cast(advancedInputFilterAsString())); case "AdvancedInputFilterSettings": return Optional.ofNullable(clazz.cast(advancedInputFilterSettings())); case "AudioSelectorGroups": return Optional.ofNullable(clazz.cast(audioSelectorGroups())); case "AudioSelectors": return Optional.ofNullable(clazz.cast(audioSelectors())); case "CaptionSelectors": return Optional.ofNullable(clazz.cast(captionSelectors())); case "Crop": return Optional.ofNullable(clazz.cast(crop())); case "DeblockFilter": return Optional.ofNullable(clazz.cast(deblockFilterAsString())); case "DecryptionSettings": return Optional.ofNullable(clazz.cast(decryptionSettings())); case "DenoiseFilter": return Optional.ofNullable(clazz.cast(denoiseFilterAsString())); case "DolbyVisionMetadataXml": return Optional.ofNullable(clazz.cast(dolbyVisionMetadataXml())); case "FileInput": return Optional.ofNullable(clazz.cast(fileInput())); case "FilterEnable": return Optional.ofNullable(clazz.cast(filterEnableAsString())); case "FilterStrength": return Optional.ofNullable(clazz.cast(filterStrength())); case "ImageInserter": return Optional.ofNullable(clazz.cast(imageInserter())); case "InputClippings": return Optional.ofNullable(clazz.cast(inputClippings())); case "InputScanType": return Optional.ofNullable(clazz.cast(inputScanTypeAsString())); case "Position": return Optional.ofNullable(clazz.cast(position())); case "ProgramNumber": return Optional.ofNullable(clazz.cast(programNumber())); case "PsiControl": return Optional.ofNullable(clazz.cast(psiControlAsString())); case "SupplementalImps": return Optional.ofNullable(clazz.cast(supplementalImps())); case "TimecodeSource": return Optional.ofNullable(clazz.cast(timecodeSourceAsString())); case "TimecodeStart": return Optional.ofNullable(clazz.cast(timecodeStart())); case "VideoGenerator": return Optional.ofNullable(clazz.cast(videoGenerator())); case "VideoOverlays": return Optional.ofNullable(clazz.cast(videoOverlays())); case "VideoSelector": return Optional.ofNullable(clazz.cast(videoSelector())); default: return Optional.empty(); } } @Override public final List> sdkFields() { return SDK_FIELDS; } private static Function getter(Function g) { return obj -> g.apply((Input) obj); } private static BiConsumer setter(BiConsumer s) { return (obj, val) -> s.accept((Builder) obj, val); } public interface Builder extends SdkPojo, CopyableBuilder { /** * Use to remove noise, blocking, blurriness, or ringing from your input as a pre-filter step before encoding. * The Advanced input filter removes more types of compression artifacts and is an improvement when compared to * basic Deblock and Denoise filters. To remove video compression artifacts from your input and improve the * video quality: Choose Enabled. Additionally, this filter can help increase the video quality of your output * relative to its bitrate, since noisy inputs are more complex and require more bits to encode. To help restore * loss of detail after applying the filter, you can optionally add texture or sharpening as an additional step. * Jobs that use this feature incur pro-tier pricing. To not apply advanced input filtering: Choose Disabled. * Note that you can still apply basic filtering with Deblock and Denoise. * * @param advancedInputFilter * Use to remove noise, blocking, blurriness, or ringing from your input as a pre-filter step before * encoding. The Advanced input filter removes more types of compression artifacts and is an improvement * when compared to basic Deblock and Denoise filters. To remove video compression artifacts from your * input and improve the video quality: Choose Enabled. Additionally, this filter can help increase the * video quality of your output relative to its bitrate, since noisy inputs are more complex and require * more bits to encode. To help restore loss of detail after applying the filter, you can optionally add * texture or sharpening as an additional step. Jobs that use this feature incur pro-tier pricing. To not * apply advanced input filtering: Choose Disabled. Note that you can still apply basic filtering with * Deblock and Denoise. * @see AdvancedInputFilter * @return Returns a reference to this object so that method calls can be chained together. * @see AdvancedInputFilter */ Builder advancedInputFilter(String advancedInputFilter); /** * Use to remove noise, blocking, blurriness, or ringing from your input as a pre-filter step before encoding. * The Advanced input filter removes more types of compression artifacts and is an improvement when compared to * basic Deblock and Denoise filters. To remove video compression artifacts from your input and improve the * video quality: Choose Enabled. Additionally, this filter can help increase the video quality of your output * relative to its bitrate, since noisy inputs are more complex and require more bits to encode. To help restore * loss of detail after applying the filter, you can optionally add texture or sharpening as an additional step. * Jobs that use this feature incur pro-tier pricing. To not apply advanced input filtering: Choose Disabled. * Note that you can still apply basic filtering with Deblock and Denoise. * * @param advancedInputFilter * Use to remove noise, blocking, blurriness, or ringing from your input as a pre-filter step before * encoding. The Advanced input filter removes more types of compression artifacts and is an improvement * when compared to basic Deblock and Denoise filters. To remove video compression artifacts from your * input and improve the video quality: Choose Enabled. Additionally, this filter can help increase the * video quality of your output relative to its bitrate, since noisy inputs are more complex and require * more bits to encode. To help restore loss of detail after applying the filter, you can optionally add * texture or sharpening as an additional step. Jobs that use this feature incur pro-tier pricing. To not * apply advanced input filtering: Choose Disabled. Note that you can still apply basic filtering with * Deblock and Denoise. * @see AdvancedInputFilter * @return Returns a reference to this object so that method calls can be chained together. * @see AdvancedInputFilter */ Builder advancedInputFilter(AdvancedInputFilter advancedInputFilter); /** * Optional settings for Advanced input filter when you set Advanced input filter to Enabled. * * @param advancedInputFilterSettings * Optional settings for Advanced input filter when you set Advanced input filter to Enabled. * @return Returns a reference to this object so that method calls can be chained together. */ Builder advancedInputFilterSettings(AdvancedInputFilterSettings advancedInputFilterSettings); /** * Optional settings for Advanced input filter when you set Advanced input filter to Enabled. This is a * convenience method that creates an instance of the {@link AdvancedInputFilterSettings.Builder} avoiding the * need to create one manually via {@link AdvancedInputFilterSettings#builder()}. * *

* When the {@link Consumer} completes, {@link AdvancedInputFilterSettings.Builder#build()} is called * immediately and its result is passed to {@link #advancedInputFilterSettings(AdvancedInputFilterSettings)}. * * @param advancedInputFilterSettings * a consumer that will call methods on {@link AdvancedInputFilterSettings.Builder} * @return Returns a reference to this object so that method calls can be chained together. * @see #advancedInputFilterSettings(AdvancedInputFilterSettings) */ default Builder advancedInputFilterSettings(Consumer advancedInputFilterSettings) { return advancedInputFilterSettings(AdvancedInputFilterSettings.builder().applyMutation(advancedInputFilterSettings) .build()); } /** * Use audio selector groups to combine multiple sidecar audio inputs so that you can assign them to a single * output audio tab. Note that, if you're working with embedded audio, it's simpler to assign multiple input * tracks into a single audio selector rather than use an audio selector group. * * @param audioSelectorGroups * Use audio selector groups to combine multiple sidecar audio inputs so that you can assign them to a * single output audio tab. Note that, if you're working with embedded audio, it's simpler to assign * multiple input tracks into a single audio selector rather than use an audio selector group. * @return Returns a reference to this object so that method calls can be chained together. */ Builder audioSelectorGroups(Map audioSelectorGroups); /** * Use Audio selectors to specify a track or set of tracks from the input that you will use in your outputs. You * can use multiple Audio selectors per input. * * @param audioSelectors * Use Audio selectors to specify a track or set of tracks from the input that you will use in your * outputs. You can use multiple Audio selectors per input. * @return Returns a reference to this object so that method calls can be chained together. */ Builder audioSelectors(Map audioSelectors); /** * Use captions selectors to specify the captions data from your input that you use in your outputs. You can use * up to 100 captions selectors per input. * * @param captionSelectors * Use captions selectors to specify the captions data from your input that you use in your outputs. You * can use up to 100 captions selectors per input. * @return Returns a reference to this object so that method calls can be chained together. */ Builder captionSelectors(Map captionSelectors); /** * Use Cropping selection to specify the video area that the service will include in the output video frame. If * you specify a value here, it will override any value that you specify in the output setting Cropping * selection. * * @param crop * Use Cropping selection to specify the video area that the service will include in the output video * frame. If you specify a value here, it will override any value that you specify in the output setting * Cropping selection. * @return Returns a reference to this object so that method calls can be chained together. */ Builder crop(Rectangle crop); /** * Use Cropping selection to specify the video area that the service will include in the output video frame. If * you specify a value here, it will override any value that you specify in the output setting Cropping * selection. This is a convenience method that creates an instance of the {@link Rectangle.Builder} avoiding * the need to create one manually via {@link Rectangle#builder()}. * *

* When the {@link Consumer} completes, {@link Rectangle.Builder#build()} is called immediately and its result * is passed to {@link #crop(Rectangle)}. * * @param crop * a consumer that will call methods on {@link Rectangle.Builder} * @return Returns a reference to this object so that method calls can be chained together. * @see #crop(Rectangle) */ default Builder crop(Consumer crop) { return crop(Rectangle.builder().applyMutation(crop).build()); } /** * Enable Deblock to produce smoother motion in the output. Default is disabled. Only manually controllable for * MPEG2 and uncompressed video inputs. * * @param deblockFilter * Enable Deblock to produce smoother motion in the output. Default is disabled. Only manually * controllable for MPEG2 and uncompressed video inputs. * @see InputDeblockFilter * @return Returns a reference to this object so that method calls can be chained together. * @see InputDeblockFilter */ Builder deblockFilter(String deblockFilter); /** * Enable Deblock to produce smoother motion in the output. Default is disabled. Only manually controllable for * MPEG2 and uncompressed video inputs. * * @param deblockFilter * Enable Deblock to produce smoother motion in the output. Default is disabled. Only manually * controllable for MPEG2 and uncompressed video inputs. * @see InputDeblockFilter * @return Returns a reference to this object so that method calls can be chained together. * @see InputDeblockFilter */ Builder deblockFilter(InputDeblockFilter deblockFilter); /** * Settings for decrypting any input files that you encrypt before you upload them to Amazon S3. MediaConvert * can decrypt files only when you use AWS Key Management Service (KMS) to encrypt the data key that you use to * encrypt your content. * * @param decryptionSettings * Settings for decrypting any input files that you encrypt before you upload them to Amazon S3. * MediaConvert can decrypt files only when you use AWS Key Management Service (KMS) to encrypt the data * key that you use to encrypt your content. * @return Returns a reference to this object so that method calls can be chained together. */ Builder decryptionSettings(InputDecryptionSettings decryptionSettings); /** * Settings for decrypting any input files that you encrypt before you upload them to Amazon S3. MediaConvert * can decrypt files only when you use AWS Key Management Service (KMS) to encrypt the data key that you use to * encrypt your content. This is a convenience method that creates an instance of the * {@link InputDecryptionSettings.Builder} avoiding the need to create one manually via * {@link InputDecryptionSettings#builder()}. * *

* When the {@link Consumer} completes, {@link InputDecryptionSettings.Builder#build()} is called immediately * and its result is passed to {@link #decryptionSettings(InputDecryptionSettings)}. * * @param decryptionSettings * a consumer that will call methods on {@link InputDecryptionSettings.Builder} * @return Returns a reference to this object so that method calls can be chained together. * @see #decryptionSettings(InputDecryptionSettings) */ default Builder decryptionSettings(Consumer decryptionSettings) { return decryptionSettings(InputDecryptionSettings.builder().applyMutation(decryptionSettings).build()); } /** * Enable Denoise to filter noise from the input. Default is disabled. Only applicable to MPEG2, H.264, H.265, * and uncompressed video inputs. * * @param denoiseFilter * Enable Denoise to filter noise from the input. Default is disabled. Only applicable to MPEG2, H.264, * H.265, and uncompressed video inputs. * @see InputDenoiseFilter * @return Returns a reference to this object so that method calls can be chained together. * @see InputDenoiseFilter */ Builder denoiseFilter(String denoiseFilter); /** * Enable Denoise to filter noise from the input. Default is disabled. Only applicable to MPEG2, H.264, H.265, * and uncompressed video inputs. * * @param denoiseFilter * Enable Denoise to filter noise from the input. Default is disabled. Only applicable to MPEG2, H.264, * H.265, and uncompressed video inputs. * @see InputDenoiseFilter * @return Returns a reference to this object so that method calls can be chained together. * @see InputDenoiseFilter */ Builder denoiseFilter(InputDenoiseFilter denoiseFilter); /** * Use this setting only when your video source has Dolby Vision studio mastering metadata that is carried in a * separate XML file. Specify the Amazon S3 location for the metadata XML file. MediaConvert uses this file to * provide global and frame-level metadata for Dolby Vision preprocessing. When you specify a file here and your * input also has interleaved global and frame level metadata, MediaConvert ignores the interleaved metadata and * uses only the the metadata from this external XML file. Note that your IAM service role must grant * MediaConvert read permissions to this file. For more information, see * https://docs.aws.amazon.com/mediaconvert/latest/ug/iam-role.html. * * @param dolbyVisionMetadataXml * Use this setting only when your video source has Dolby Vision studio mastering metadata that is * carried in a separate XML file. Specify the Amazon S3 location for the metadata XML file. MediaConvert * uses this file to provide global and frame-level metadata for Dolby Vision preprocessing. When you * specify a file here and your input also has interleaved global and frame level metadata, MediaConvert * ignores the interleaved metadata and uses only the the metadata from this external XML file. Note that * your IAM service role must grant MediaConvert read permissions to this file. For more information, see * https://docs.aws.amazon.com/mediaconvert/latest/ug/iam-role.html. * @return Returns a reference to this object so that method calls can be chained together. */ Builder dolbyVisionMetadataXml(String dolbyVisionMetadataXml); /** * Specify the source file for your transcoding job. You can use multiple inputs in a single job. The service * concatenates these inputs, in the order that you specify them in the job, to create the outputs. If your * input format is IMF, specify your input by providing the path to your CPL. For example, * "s3://bucket/vf/cpl.xml". If the CPL is in an incomplete IMP, make sure to use *Supplemental IMPs* to specify * any supplemental IMPs that contain assets referenced by the CPL. * * @param fileInput * Specify the source file for your transcoding job. You can use multiple inputs in a single job. The * service concatenates these inputs, in the order that you specify them in the job, to create the * outputs. If your input format is IMF, specify your input by providing the path to your CPL. For * example, "s3://bucket/vf/cpl.xml". If the CPL is in an incomplete IMP, make sure to use *Supplemental * IMPs* to specify any supplemental IMPs that contain assets referenced by the CPL. * @return Returns a reference to this object so that method calls can be chained together. */ Builder fileInput(String fileInput); /** * Specify whether to apply input filtering to improve the video quality of your input. To apply filtering * depending on your input type and quality: Choose Auto. To apply no filtering: Choose Disable. To apply * filtering regardless of your input type and quality: Choose Force. When you do, you must also specify a value * for Filter strength. * * @param filterEnable * Specify whether to apply input filtering to improve the video quality of your input. To apply * filtering depending on your input type and quality: Choose Auto. To apply no filtering: Choose * Disable. To apply filtering regardless of your input type and quality: Choose Force. When you do, you * must also specify a value for Filter strength. * @see InputFilterEnable * @return Returns a reference to this object so that method calls can be chained together. * @see InputFilterEnable */ Builder filterEnable(String filterEnable); /** * Specify whether to apply input filtering to improve the video quality of your input. To apply filtering * depending on your input type and quality: Choose Auto. To apply no filtering: Choose Disable. To apply * filtering regardless of your input type and quality: Choose Force. When you do, you must also specify a value * for Filter strength. * * @param filterEnable * Specify whether to apply input filtering to improve the video quality of your input. To apply * filtering depending on your input type and quality: Choose Auto. To apply no filtering: Choose * Disable. To apply filtering regardless of your input type and quality: Choose Force. When you do, you * must also specify a value for Filter strength. * @see InputFilterEnable * @return Returns a reference to this object so that method calls can be chained together. * @see InputFilterEnable */ Builder filterEnable(InputFilterEnable filterEnable); /** * Specify the strength of the input filter. To apply an automatic amount of filtering based the compression * artifacts measured in your input: We recommend that you leave Filter strength blank and set Filter enable to * Auto. To manually apply filtering: Enter a value from 1 to 5, where 1 is the least amount of filtering and 5 * is the most. The value that you enter applies to the strength of the Deblock or Denoise filters, or to the * strength of the Advanced input filter. * * @param filterStrength * Specify the strength of the input filter. To apply an automatic amount of filtering based the * compression artifacts measured in your input: We recommend that you leave Filter strength blank and * set Filter enable to Auto. To manually apply filtering: Enter a value from 1 to 5, where 1 is the * least amount of filtering and 5 is the most. The value that you enter applies to the strength of the * Deblock or Denoise filters, or to the strength of the Advanced input filter. * @return Returns a reference to this object so that method calls can be chained together. */ Builder filterStrength(Integer filterStrength); /** * Enable the image inserter feature to include a graphic overlay on your video. Enable or disable this feature * for each input individually. This setting is disabled by default. * * @param imageInserter * Enable the image inserter feature to include a graphic overlay on your video. Enable or disable this * feature for each input individually. This setting is disabled by default. * @return Returns a reference to this object so that method calls can be chained together. */ Builder imageInserter(ImageInserter imageInserter); /** * Enable the image inserter feature to include a graphic overlay on your video. Enable or disable this feature * for each input individually. This setting is disabled by default. This is a convenience method that creates * an instance of the {@link ImageInserter.Builder} avoiding the need to create one manually via * {@link ImageInserter#builder()}. * *

* When the {@link Consumer} completes, {@link ImageInserter.Builder#build()} is called immediately and its * result is passed to {@link #imageInserter(ImageInserter)}. * * @param imageInserter * a consumer that will call methods on {@link ImageInserter.Builder} * @return Returns a reference to this object so that method calls can be chained together. * @see #imageInserter(ImageInserter) */ default Builder imageInserter(Consumer imageInserter) { return imageInserter(ImageInserter.builder().applyMutation(imageInserter).build()); } /** * Contains sets of start and end times that together specify a portion of the input to be used in the outputs. * If you provide only a start time, the clip will be the entire input from that point to the end. If you * provide only an end time, it will be the entire input up to that point. When you specify more than one input * clip, the transcoding service creates the job outputs by stringing the clips together in the order you * specify them. * * @param inputClippings * Contains sets of start and end times that together specify a portion of the input to be used in the * outputs. If you provide only a start time, the clip will be the entire input from that point to the * end. If you provide only an end time, it will be the entire input up to that point. When you specify * more than one input clip, the transcoding service creates the job outputs by stringing the clips * together in the order you specify them. * @return Returns a reference to this object so that method calls can be chained together. */ Builder inputClippings(Collection inputClippings); /** * Contains sets of start and end times that together specify a portion of the input to be used in the outputs. * If you provide only a start time, the clip will be the entire input from that point to the end. If you * provide only an end time, it will be the entire input up to that point. When you specify more than one input * clip, the transcoding service creates the job outputs by stringing the clips together in the order you * specify them. * * @param inputClippings * Contains sets of start and end times that together specify a portion of the input to be used in the * outputs. If you provide only a start time, the clip will be the entire input from that point to the * end. If you provide only an end time, it will be the entire input up to that point. When you specify * more than one input clip, the transcoding service creates the job outputs by stringing the clips * together in the order you specify them. * @return Returns a reference to this object so that method calls can be chained together. */ Builder inputClippings(InputClipping... inputClippings); /** * Contains sets of start and end times that together specify a portion of the input to be used in the outputs. * If you provide only a start time, the clip will be the entire input from that point to the end. If you * provide only an end time, it will be the entire input up to that point. When you specify more than one input * clip, the transcoding service creates the job outputs by stringing the clips together in the order you * specify them. This is a convenience method that creates an instance of the * {@link software.amazon.awssdk.services.mediaconvert.model.InputClipping.Builder} avoiding the need to create * one manually via {@link software.amazon.awssdk.services.mediaconvert.model.InputClipping#builder()}. * *

* When the {@link Consumer} completes, * {@link software.amazon.awssdk.services.mediaconvert.model.InputClipping.Builder#build()} is called * immediately and its result is passed to {@link #inputClippings(List)}. * * @param inputClippings * a consumer that will call methods on * {@link software.amazon.awssdk.services.mediaconvert.model.InputClipping.Builder} * @return Returns a reference to this object so that method calls can be chained together. * @see #inputClippings(java.util.Collection) */ Builder inputClippings(Consumer... inputClippings); /** * When you have a progressive segmented frame (PsF) input, use this setting to flag the input as PsF. * MediaConvert doesn't automatically detect PsF. Therefore, flagging your input as PsF results in better * preservation of video quality when you do deinterlacing and frame rate conversion. If you don't specify, the * default value is Auto. Auto is the correct setting for all inputs that are not PsF. Don't set this value to * PsF when your input is interlaced. Doing so creates horizontal interlacing artifacts. * * @param inputScanType * When you have a progressive segmented frame (PsF) input, use this setting to flag the input as PsF. * MediaConvert doesn't automatically detect PsF. Therefore, flagging your input as PsF results in better * preservation of video quality when you do deinterlacing and frame rate conversion. If you don't * specify, the default value is Auto. Auto is the correct setting for all inputs that are not PsF. Don't * set this value to PsF when your input is interlaced. Doing so creates horizontal interlacing * artifacts. * @see InputScanType * @return Returns a reference to this object so that method calls can be chained together. * @see InputScanType */ Builder inputScanType(String inputScanType); /** * When you have a progressive segmented frame (PsF) input, use this setting to flag the input as PsF. * MediaConvert doesn't automatically detect PsF. Therefore, flagging your input as PsF results in better * preservation of video quality when you do deinterlacing and frame rate conversion. If you don't specify, the * default value is Auto. Auto is the correct setting for all inputs that are not PsF. Don't set this value to * PsF when your input is interlaced. Doing so creates horizontal interlacing artifacts. * * @param inputScanType * When you have a progressive segmented frame (PsF) input, use this setting to flag the input as PsF. * MediaConvert doesn't automatically detect PsF. Therefore, flagging your input as PsF results in better * preservation of video quality when you do deinterlacing and frame rate conversion. If you don't * specify, the default value is Auto. Auto is the correct setting for all inputs that are not PsF. Don't * set this value to PsF when your input is interlaced. Doing so creates horizontal interlacing * artifacts. * @see InputScanType * @return Returns a reference to this object so that method calls can be chained together. * @see InputScanType */ Builder inputScanType(InputScanType inputScanType); /** * Use Selection placement to define the video area in your output frame. The area outside of the rectangle that * you specify here is black. If you specify a value here, it will override any value that you specify in the * output setting Selection placement. If you specify a value here, this will override any AFD values in your * input, even if you set Respond to AFD to Respond. If you specify a value here, this will ignore anything that * you specify for the setting Scaling Behavior. * * @param position * Use Selection placement to define the video area in your output frame. The area outside of the * rectangle that you specify here is black. If you specify a value here, it will override any value that * you specify in the output setting Selection placement. If you specify a value here, this will override * any AFD values in your input, even if you set Respond to AFD to Respond. If you specify a value here, * this will ignore anything that you specify for the setting Scaling Behavior. * @return Returns a reference to this object so that method calls can be chained together. */ Builder position(Rectangle position); /** * Use Selection placement to define the video area in your output frame. The area outside of the rectangle that * you specify here is black. If you specify a value here, it will override any value that you specify in the * output setting Selection placement. If you specify a value here, this will override any AFD values in your * input, even if you set Respond to AFD to Respond. If you specify a value here, this will ignore anything that * you specify for the setting Scaling Behavior. This is a convenience method that creates an instance of the * {@link Rectangle.Builder} avoiding the need to create one manually via {@link Rectangle#builder()}. * *

* When the {@link Consumer} completes, {@link Rectangle.Builder#build()} is called immediately and its result * is passed to {@link #position(Rectangle)}. * * @param position * a consumer that will call methods on {@link Rectangle.Builder} * @return Returns a reference to this object so that method calls can be chained together. * @see #position(Rectangle) */ default Builder position(Consumer position) { return position(Rectangle.builder().applyMutation(position).build()); } /** * Use Program to select a specific program from within a multi-program transport stream. Note that Quad 4K is * not currently supported. Default is the first program within the transport stream. If the program you specify * doesn't exist, the transcoding service will use this default. * * @param programNumber * Use Program to select a specific program from within a multi-program transport stream. Note that Quad * 4K is not currently supported. Default is the first program within the transport stream. If the * program you specify doesn't exist, the transcoding service will use this default. * @return Returns a reference to this object so that method calls can be chained together. */ Builder programNumber(Integer programNumber); /** * Set PSI control for transport stream inputs to specify which data the demux process to scans. * Ignore PSI - * Scan all PIDs for audio and video. * Use PSI - Scan only PSI data. * * @param psiControl * Set PSI control for transport stream inputs to specify which data the demux process to scans. * Ignore * PSI - Scan all PIDs for audio and video. * Use PSI - Scan only PSI data. * @see InputPsiControl * @return Returns a reference to this object so that method calls can be chained together. * @see InputPsiControl */ Builder psiControl(String psiControl); /** * Set PSI control for transport stream inputs to specify which data the demux process to scans. * Ignore PSI - * Scan all PIDs for audio and video. * Use PSI - Scan only PSI data. * * @param psiControl * Set PSI control for transport stream inputs to specify which data the demux process to scans. * Ignore * PSI - Scan all PIDs for audio and video. * Use PSI - Scan only PSI data. * @see InputPsiControl * @return Returns a reference to this object so that method calls can be chained together. * @see InputPsiControl */ Builder psiControl(InputPsiControl psiControl); /** * Provide a list of any necessary supplemental IMPs. You need supplemental IMPs if the CPL that you're using * for your input is in an incomplete IMP. Specify either the supplemental IMP directories with a trailing slash * or the ASSETMAP.xml files. For example ["s3://bucket/ov/", "s3://bucket/vf2/ASSETMAP.xml"]. You don't need to * specify the IMP that contains your input CPL, because the service automatically detects it. * * @param supplementalImps * Provide a list of any necessary supplemental IMPs. You need supplemental IMPs if the CPL that you're * using for your input is in an incomplete IMP. Specify either the supplemental IMP directories with a * trailing slash or the ASSETMAP.xml files. For example ["s3://bucket/ov/", * "s3://bucket/vf2/ASSETMAP.xml"]. You don't need to specify the IMP that contains your input CPL, * because the service automatically detects it. * @return Returns a reference to this object so that method calls can be chained together. */ Builder supplementalImps(Collection supplementalImps); /** * Provide a list of any necessary supplemental IMPs. You need supplemental IMPs if the CPL that you're using * for your input is in an incomplete IMP. Specify either the supplemental IMP directories with a trailing slash * or the ASSETMAP.xml files. For example ["s3://bucket/ov/", "s3://bucket/vf2/ASSETMAP.xml"]. You don't need to * specify the IMP that contains your input CPL, because the service automatically detects it. * * @param supplementalImps * Provide a list of any necessary supplemental IMPs. You need supplemental IMPs if the CPL that you're * using for your input is in an incomplete IMP. Specify either the supplemental IMP directories with a * trailing slash or the ASSETMAP.xml files. For example ["s3://bucket/ov/", * "s3://bucket/vf2/ASSETMAP.xml"]. You don't need to specify the IMP that contains your input CPL, * because the service automatically detects it. * @return Returns a reference to this object so that method calls can be chained together. */ Builder supplementalImps(String... supplementalImps); /** * Use this Timecode source setting, located under the input settings, to specify how the service counts input * video frames. This input frame count affects only the behavior of features that apply to a single input at a * time, such as input clipping and synchronizing some captions formats. Choose Embedded to use the timecodes in * your input video. Choose Start at zero to start the first frame at zero. Choose Specified start to start the * first frame at the timecode that you specify in the setting Start timecode. If you don't specify a value for * Timecode source, the service will use Embedded by default. For more information about timecodes, see * https://docs.aws.amazon.com/console/mediaconvert/timecode. * * @param timecodeSource * Use this Timecode source setting, located under the input settings, to specify how the service counts * input video frames. This input frame count affects only the behavior of features that apply to a * single input at a time, such as input clipping and synchronizing some captions formats. Choose * Embedded to use the timecodes in your input video. Choose Start at zero to start the first frame at * zero. Choose Specified start to start the first frame at the timecode that you specify in the setting * Start timecode. If you don't specify a value for Timecode source, the service will use Embedded by * default. For more information about timecodes, see * https://docs.aws.amazon.com/console/mediaconvert/timecode. * @see InputTimecodeSource * @return Returns a reference to this object so that method calls can be chained together. * @see InputTimecodeSource */ Builder timecodeSource(String timecodeSource); /** * Use this Timecode source setting, located under the input settings, to specify how the service counts input * video frames. This input frame count affects only the behavior of features that apply to a single input at a * time, such as input clipping and synchronizing some captions formats. Choose Embedded to use the timecodes in * your input video. Choose Start at zero to start the first frame at zero. Choose Specified start to start the * first frame at the timecode that you specify in the setting Start timecode. If you don't specify a value for * Timecode source, the service will use Embedded by default. For more information about timecodes, see * https://docs.aws.amazon.com/console/mediaconvert/timecode. * * @param timecodeSource * Use this Timecode source setting, located under the input settings, to specify how the service counts * input video frames. This input frame count affects only the behavior of features that apply to a * single input at a time, such as input clipping and synchronizing some captions formats. Choose * Embedded to use the timecodes in your input video. Choose Start at zero to start the first frame at * zero. Choose Specified start to start the first frame at the timecode that you specify in the setting * Start timecode. If you don't specify a value for Timecode source, the service will use Embedded by * default. For more information about timecodes, see * https://docs.aws.amazon.com/console/mediaconvert/timecode. * @see InputTimecodeSource * @return Returns a reference to this object so that method calls can be chained together. * @see InputTimecodeSource */ Builder timecodeSource(InputTimecodeSource timecodeSource); /** * Specify the timecode that you want the service to use for this input's initial frame. To use this setting, * you must set the Timecode source setting, located under the input settings, to Specified start. For more * information about timecodes, see https://docs.aws.amazon.com/console/mediaconvert/timecode. * * @param timecodeStart * Specify the timecode that you want the service to use for this input's initial frame. To use this * setting, you must set the Timecode source setting, located under the input settings, to Specified * start. For more information about timecodes, see * https://docs.aws.amazon.com/console/mediaconvert/timecode. * @return Returns a reference to this object so that method calls can be chained together. */ Builder timecodeStart(String timecodeStart); /** * When you include Video generator, MediaConvert creates a video input with black frames. Use this setting if * you do not have a video input or if you want to add black video frames before, or after, other inputs. You * can specify Video generator, or you can specify an Input file, but you cannot specify both. For more * information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/video-generator.html * * @param videoGenerator * When you include Video generator, MediaConvert creates a video input with black frames. Use this * setting if you do not have a video input or if you want to add black video frames before, or after, * other inputs. You can specify Video generator, or you can specify an Input file, but you cannot * specify both. For more information, see * https://docs.aws.amazon.com/mediaconvert/latest/ug/video-generator.html * @return Returns a reference to this object so that method calls can be chained together. */ Builder videoGenerator(InputVideoGenerator videoGenerator); /** * When you include Video generator, MediaConvert creates a video input with black frames. Use this setting if * you do not have a video input or if you want to add black video frames before, or after, other inputs. You * can specify Video generator, or you can specify an Input file, but you cannot specify both. For more * information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/video-generator.html This is a * convenience method that creates an instance of the {@link InputVideoGenerator.Builder} avoiding the need to * create one manually via {@link InputVideoGenerator#builder()}. * *

* When the {@link Consumer} completes, {@link InputVideoGenerator.Builder#build()} is called immediately and * its result is passed to {@link #videoGenerator(InputVideoGenerator)}. * * @param videoGenerator * a consumer that will call methods on {@link InputVideoGenerator.Builder} * @return Returns a reference to this object so that method calls can be chained together. * @see #videoGenerator(InputVideoGenerator) */ default Builder videoGenerator(Consumer videoGenerator) { return videoGenerator(InputVideoGenerator.builder().applyMutation(videoGenerator).build()); } /** * Contains an array of video overlays. * * @param videoOverlays * Contains an array of video overlays. * @return Returns a reference to this object so that method calls can be chained together. */ Builder videoOverlays(Collection videoOverlays); /** * Contains an array of video overlays. * * @param videoOverlays * Contains an array of video overlays. * @return Returns a reference to this object so that method calls can be chained together. */ Builder videoOverlays(VideoOverlay... videoOverlays); /** * Contains an array of video overlays. This is a convenience method that creates an instance of the * {@link software.amazon.awssdk.services.mediaconvert.model.VideoOverlay.Builder} avoiding the need to create * one manually via {@link software.amazon.awssdk.services.mediaconvert.model.VideoOverlay#builder()}. * *

* When the {@link Consumer} completes, * {@link software.amazon.awssdk.services.mediaconvert.model.VideoOverlay.Builder#build()} is called immediately * and its result is passed to {@link #videoOverlays(List)}. * * @param videoOverlays * a consumer that will call methods on * {@link software.amazon.awssdk.services.mediaconvert.model.VideoOverlay.Builder} * @return Returns a reference to this object so that method calls can be chained together. * @see #videoOverlays(java.util.Collection) */ Builder videoOverlays(Consumer... videoOverlays); /** * Input video selectors contain the video settings for the input. Each of your inputs can have up to one video * selector. * * @param videoSelector * Input video selectors contain the video settings for the input. Each of your inputs can have up to one * video selector. * @return Returns a reference to this object so that method calls can be chained together. */ Builder videoSelector(VideoSelector videoSelector); /** * Input video selectors contain the video settings for the input. Each of your inputs can have up to one video * selector. This is a convenience method that creates an instance of the {@link VideoSelector.Builder} avoiding * the need to create one manually via {@link VideoSelector#builder()}. * *

* When the {@link Consumer} completes, {@link VideoSelector.Builder#build()} is called immediately and its * result is passed to {@link #videoSelector(VideoSelector)}. * * @param videoSelector * a consumer that will call methods on {@link VideoSelector.Builder} * @return Returns a reference to this object so that method calls can be chained together. * @see #videoSelector(VideoSelector) */ default Builder videoSelector(Consumer videoSelector) { return videoSelector(VideoSelector.builder().applyMutation(videoSelector).build()); } } static final class BuilderImpl implements Builder { private String advancedInputFilter; private AdvancedInputFilterSettings advancedInputFilterSettings; private Map audioSelectorGroups = DefaultSdkAutoConstructMap.getInstance(); private Map audioSelectors = DefaultSdkAutoConstructMap.getInstance(); private Map captionSelectors = DefaultSdkAutoConstructMap.getInstance(); private Rectangle crop; private String deblockFilter; private InputDecryptionSettings decryptionSettings; private String denoiseFilter; private String dolbyVisionMetadataXml; private String fileInput; private String filterEnable; private Integer filterStrength; private ImageInserter imageInserter; private List inputClippings = DefaultSdkAutoConstructList.getInstance(); private String inputScanType; private Rectangle position; private Integer programNumber; private String psiControl; private List supplementalImps = DefaultSdkAutoConstructList.getInstance(); private String timecodeSource; private String timecodeStart; private InputVideoGenerator videoGenerator; private List videoOverlays = DefaultSdkAutoConstructList.getInstance(); private VideoSelector videoSelector; private BuilderImpl() { } private BuilderImpl(Input model) { advancedInputFilter(model.advancedInputFilter); advancedInputFilterSettings(model.advancedInputFilterSettings); audioSelectorGroups(model.audioSelectorGroups); audioSelectors(model.audioSelectors); captionSelectors(model.captionSelectors); crop(model.crop); deblockFilter(model.deblockFilter); decryptionSettings(model.decryptionSettings); denoiseFilter(model.denoiseFilter); dolbyVisionMetadataXml(model.dolbyVisionMetadataXml); fileInput(model.fileInput); filterEnable(model.filterEnable); filterStrength(model.filterStrength); imageInserter(model.imageInserter); inputClippings(model.inputClippings); inputScanType(model.inputScanType); position(model.position); programNumber(model.programNumber); psiControl(model.psiControl); supplementalImps(model.supplementalImps); timecodeSource(model.timecodeSource); timecodeStart(model.timecodeStart); videoGenerator(model.videoGenerator); videoOverlays(model.videoOverlays); videoSelector(model.videoSelector); } public final String getAdvancedInputFilter() { return advancedInputFilter; } public final void setAdvancedInputFilter(String advancedInputFilter) { this.advancedInputFilter = advancedInputFilter; } @Override public final Builder advancedInputFilter(String advancedInputFilter) { this.advancedInputFilter = advancedInputFilter; return this; } @Override public final Builder advancedInputFilter(AdvancedInputFilter advancedInputFilter) { this.advancedInputFilter(advancedInputFilter == null ? null : advancedInputFilter.toString()); return this; } public final AdvancedInputFilterSettings.Builder getAdvancedInputFilterSettings() { return advancedInputFilterSettings != null ? advancedInputFilterSettings.toBuilder() : null; } public final void setAdvancedInputFilterSettings(AdvancedInputFilterSettings.BuilderImpl advancedInputFilterSettings) { this.advancedInputFilterSettings = advancedInputFilterSettings != null ? advancedInputFilterSettings.build() : null; } @Override public final Builder advancedInputFilterSettings(AdvancedInputFilterSettings advancedInputFilterSettings) { this.advancedInputFilterSettings = advancedInputFilterSettings; return this; } public final Map getAudioSelectorGroups() { Map result = ___mapOfAudioSelectorGroupCopier .copyToBuilder(this.audioSelectorGroups); if (result instanceof SdkAutoConstructMap) { return null; } return result; } public final void setAudioSelectorGroups(Map audioSelectorGroups) { this.audioSelectorGroups = ___mapOfAudioSelectorGroupCopier.copyFromBuilder(audioSelectorGroups); } @Override public final Builder audioSelectorGroups(Map audioSelectorGroups) { this.audioSelectorGroups = ___mapOfAudioSelectorGroupCopier.copy(audioSelectorGroups); return this; } public final Map getAudioSelectors() { Map result = ___mapOfAudioSelectorCopier.copyToBuilder(this.audioSelectors); if (result instanceof SdkAutoConstructMap) { return null; } return result; } public final void setAudioSelectors(Map audioSelectors) { this.audioSelectors = ___mapOfAudioSelectorCopier.copyFromBuilder(audioSelectors); } @Override public final Builder audioSelectors(Map audioSelectors) { this.audioSelectors = ___mapOfAudioSelectorCopier.copy(audioSelectors); return this; } public final Map getCaptionSelectors() { Map result = ___mapOfCaptionSelectorCopier.copyToBuilder(this.captionSelectors); if (result instanceof SdkAutoConstructMap) { return null; } return result; } public final void setCaptionSelectors(Map captionSelectors) { this.captionSelectors = ___mapOfCaptionSelectorCopier.copyFromBuilder(captionSelectors); } @Override public final Builder captionSelectors(Map captionSelectors) { this.captionSelectors = ___mapOfCaptionSelectorCopier.copy(captionSelectors); return this; } public final Rectangle.Builder getCrop() { return crop != null ? crop.toBuilder() : null; } public final void setCrop(Rectangle.BuilderImpl crop) { this.crop = crop != null ? crop.build() : null; } @Override public final Builder crop(Rectangle crop) { this.crop = crop; return this; } public final String getDeblockFilter() { return deblockFilter; } public final void setDeblockFilter(String deblockFilter) { this.deblockFilter = deblockFilter; } @Override public final Builder deblockFilter(String deblockFilter) { this.deblockFilter = deblockFilter; return this; } @Override public final Builder deblockFilter(InputDeblockFilter deblockFilter) { this.deblockFilter(deblockFilter == null ? null : deblockFilter.toString()); return this; } public final InputDecryptionSettings.Builder getDecryptionSettings() { return decryptionSettings != null ? decryptionSettings.toBuilder() : null; } public final void setDecryptionSettings(InputDecryptionSettings.BuilderImpl decryptionSettings) { this.decryptionSettings = decryptionSettings != null ? decryptionSettings.build() : null; } @Override public final Builder decryptionSettings(InputDecryptionSettings decryptionSettings) { this.decryptionSettings = decryptionSettings; return this; } public final String getDenoiseFilter() { return denoiseFilter; } public final void setDenoiseFilter(String denoiseFilter) { this.denoiseFilter = denoiseFilter; } @Override public final Builder denoiseFilter(String denoiseFilter) { this.denoiseFilter = denoiseFilter; return this; } @Override public final Builder denoiseFilter(InputDenoiseFilter denoiseFilter) { this.denoiseFilter(denoiseFilter == null ? null : denoiseFilter.toString()); return this; } public final String getDolbyVisionMetadataXml() { return dolbyVisionMetadataXml; } public final void setDolbyVisionMetadataXml(String dolbyVisionMetadataXml) { this.dolbyVisionMetadataXml = dolbyVisionMetadataXml; } @Override public final Builder dolbyVisionMetadataXml(String dolbyVisionMetadataXml) { this.dolbyVisionMetadataXml = dolbyVisionMetadataXml; return this; } public final String getFileInput() { return fileInput; } public final void setFileInput(String fileInput) { this.fileInput = fileInput; } @Override public final Builder fileInput(String fileInput) { this.fileInput = fileInput; return this; } public final String getFilterEnable() { return filterEnable; } public final void setFilterEnable(String filterEnable) { this.filterEnable = filterEnable; } @Override public final Builder filterEnable(String filterEnable) { this.filterEnable = filterEnable; return this; } @Override public final Builder filterEnable(InputFilterEnable filterEnable) { this.filterEnable(filterEnable == null ? null : filterEnable.toString()); return this; } public final Integer getFilterStrength() { return filterStrength; } public final void setFilterStrength(Integer filterStrength) { this.filterStrength = filterStrength; } @Override public final Builder filterStrength(Integer filterStrength) { this.filterStrength = filterStrength; return this; } public final ImageInserter.Builder getImageInserter() { return imageInserter != null ? imageInserter.toBuilder() : null; } public final void setImageInserter(ImageInserter.BuilderImpl imageInserter) { this.imageInserter = imageInserter != null ? imageInserter.build() : null; } @Override public final Builder imageInserter(ImageInserter imageInserter) { this.imageInserter = imageInserter; return this; } public final List getInputClippings() { List result = ___listOfInputClippingCopier.copyToBuilder(this.inputClippings); if (result instanceof SdkAutoConstructList) { return null; } return result; } public final void setInputClippings(Collection inputClippings) { this.inputClippings = ___listOfInputClippingCopier.copyFromBuilder(inputClippings); } @Override public final Builder inputClippings(Collection inputClippings) { this.inputClippings = ___listOfInputClippingCopier.copy(inputClippings); return this; } @Override @SafeVarargs public final Builder inputClippings(InputClipping... inputClippings) { inputClippings(Arrays.asList(inputClippings)); return this; } @Override @SafeVarargs public final Builder inputClippings(Consumer... inputClippings) { inputClippings(Stream.of(inputClippings).map(c -> InputClipping.builder().applyMutation(c).build()) .collect(Collectors.toList())); return this; } public final String getInputScanType() { return inputScanType; } public final void setInputScanType(String inputScanType) { this.inputScanType = inputScanType; } @Override public final Builder inputScanType(String inputScanType) { this.inputScanType = inputScanType; return this; } @Override public final Builder inputScanType(InputScanType inputScanType) { this.inputScanType(inputScanType == null ? null : inputScanType.toString()); return this; } public final Rectangle.Builder getPosition() { return position != null ? position.toBuilder() : null; } public final void setPosition(Rectangle.BuilderImpl position) { this.position = position != null ? position.build() : null; } @Override public final Builder position(Rectangle position) { this.position = position; return this; } public final Integer getProgramNumber() { return programNumber; } public final void setProgramNumber(Integer programNumber) { this.programNumber = programNumber; } @Override public final Builder programNumber(Integer programNumber) { this.programNumber = programNumber; return this; } public final String getPsiControl() { return psiControl; } public final void setPsiControl(String psiControl) { this.psiControl = psiControl; } @Override public final Builder psiControl(String psiControl) { this.psiControl = psiControl; return this; } @Override public final Builder psiControl(InputPsiControl psiControl) { this.psiControl(psiControl == null ? null : psiControl.toString()); return this; } public final Collection getSupplementalImps() { if (supplementalImps instanceof SdkAutoConstructList) { return null; } return supplementalImps; } public final void setSupplementalImps(Collection supplementalImps) { this.supplementalImps = ___listOf__stringPatternS3ASSETMAPXmlCopier.copy(supplementalImps); } @Override public final Builder supplementalImps(Collection supplementalImps) { this.supplementalImps = ___listOf__stringPatternS3ASSETMAPXmlCopier.copy(supplementalImps); return this; } @Override @SafeVarargs public final Builder supplementalImps(String... supplementalImps) { supplementalImps(Arrays.asList(supplementalImps)); return this; } public final String getTimecodeSource() { return timecodeSource; } public final void setTimecodeSource(String timecodeSource) { this.timecodeSource = timecodeSource; } @Override public final Builder timecodeSource(String timecodeSource) { this.timecodeSource = timecodeSource; return this; } @Override public final Builder timecodeSource(InputTimecodeSource timecodeSource) { this.timecodeSource(timecodeSource == null ? null : timecodeSource.toString()); return this; } public final String getTimecodeStart() { return timecodeStart; } public final void setTimecodeStart(String timecodeStart) { this.timecodeStart = timecodeStart; } @Override public final Builder timecodeStart(String timecodeStart) { this.timecodeStart = timecodeStart; return this; } public final InputVideoGenerator.Builder getVideoGenerator() { return videoGenerator != null ? videoGenerator.toBuilder() : null; } public final void setVideoGenerator(InputVideoGenerator.BuilderImpl videoGenerator) { this.videoGenerator = videoGenerator != null ? videoGenerator.build() : null; } @Override public final Builder videoGenerator(InputVideoGenerator videoGenerator) { this.videoGenerator = videoGenerator; return this; } public final List getVideoOverlays() { List result = ___listOfVideoOverlayCopier.copyToBuilder(this.videoOverlays); if (result instanceof SdkAutoConstructList) { return null; } return result; } public final void setVideoOverlays(Collection videoOverlays) { this.videoOverlays = ___listOfVideoOverlayCopier.copyFromBuilder(videoOverlays); } @Override public final Builder videoOverlays(Collection videoOverlays) { this.videoOverlays = ___listOfVideoOverlayCopier.copy(videoOverlays); return this; } @Override @SafeVarargs public final Builder videoOverlays(VideoOverlay... videoOverlays) { videoOverlays(Arrays.asList(videoOverlays)); return this; } @Override @SafeVarargs public final Builder videoOverlays(Consumer... videoOverlays) { videoOverlays(Stream.of(videoOverlays).map(c -> VideoOverlay.builder().applyMutation(c).build()) .collect(Collectors.toList())); return this; } public final VideoSelector.Builder getVideoSelector() { return videoSelector != null ? videoSelector.toBuilder() : null; } public final void setVideoSelector(VideoSelector.BuilderImpl videoSelector) { this.videoSelector = videoSelector != null ? videoSelector.build() : null; } @Override public final Builder videoSelector(VideoSelector videoSelector) { this.videoSelector = videoSelector; return this; } @Override public Input build() { return new Input(this); } @Override public List> sdkFields() { return SDK_FIELDS; } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy