Struct aws_sdk_mediaconvert::types::builders::Mpeg2SettingsBuilder
source · #[non_exhaustive]pub struct Mpeg2SettingsBuilder { /* private fields */ }
Expand description
A builder for Mpeg2Settings
.
Implementations§
source§impl Mpeg2SettingsBuilder
impl Mpeg2SettingsBuilder
sourcepub fn adaptive_quantization(self, input: Mpeg2AdaptiveQuantization) -> Self
pub fn adaptive_quantization(self, input: Mpeg2AdaptiveQuantization) -> Self
Specify the strength of any adaptive quantization filters that you enable. The value that you choose here applies to the following settings: Spatial adaptive quantization, and Temporal adaptive quantization.
sourcepub fn set_adaptive_quantization(
self,
input: Option<Mpeg2AdaptiveQuantization>
) -> Self
pub fn set_adaptive_quantization( self, input: Option<Mpeg2AdaptiveQuantization> ) -> Self
Specify the strength of any adaptive quantization filters that you enable. The value that you choose here applies to the following settings: Spatial adaptive quantization, and Temporal adaptive quantization.
sourcepub fn get_adaptive_quantization(&self) -> &Option<Mpeg2AdaptiveQuantization>
pub fn get_adaptive_quantization(&self) -> &Option<Mpeg2AdaptiveQuantization>
Specify the strength of any adaptive quantization filters that you enable. The value that you choose here applies to the following settings: Spatial adaptive quantization, and Temporal adaptive quantization.
sourcepub fn bitrate(self, input: i32) -> Self
pub fn bitrate(self, input: i32) -> Self
Specify the average bitrate in bits per second. Required for VBR and CBR. For MS Smooth outputs, bitrates must be unique when rounded down to the nearest multiple of 1000.
sourcepub fn set_bitrate(self, input: Option<i32>) -> Self
pub fn set_bitrate(self, input: Option<i32>) -> Self
Specify the average bitrate in bits per second. Required for VBR and CBR. For MS Smooth outputs, bitrates must be unique when rounded down to the nearest multiple of 1000.
sourcepub fn get_bitrate(&self) -> &Option<i32>
pub fn get_bitrate(&self) -> &Option<i32>
Specify the average bitrate in bits per second. Required for VBR and CBR. For MS Smooth outputs, bitrates must be unique when rounded down to the nearest multiple of 1000.
sourcepub fn codec_level(self, input: Mpeg2CodecLevel) -> Self
pub fn codec_level(self, input: Mpeg2CodecLevel) -> Self
Use Level to set the MPEG-2 level for the video output.
sourcepub fn set_codec_level(self, input: Option<Mpeg2CodecLevel>) -> Self
pub fn set_codec_level(self, input: Option<Mpeg2CodecLevel>) -> Self
Use Level to set the MPEG-2 level for the video output.
sourcepub fn get_codec_level(&self) -> &Option<Mpeg2CodecLevel>
pub fn get_codec_level(&self) -> &Option<Mpeg2CodecLevel>
Use Level to set the MPEG-2 level for the video output.
sourcepub fn codec_profile(self, input: Mpeg2CodecProfile) -> Self
pub fn codec_profile(self, input: Mpeg2CodecProfile) -> Self
Use Profile to set the MPEG-2 profile for the video output.
sourcepub fn set_codec_profile(self, input: Option<Mpeg2CodecProfile>) -> Self
pub fn set_codec_profile(self, input: Option<Mpeg2CodecProfile>) -> Self
Use Profile to set the MPEG-2 profile for the video output.
sourcepub fn get_codec_profile(&self) -> &Option<Mpeg2CodecProfile>
pub fn get_codec_profile(&self) -> &Option<Mpeg2CodecProfile>
Use Profile to set the MPEG-2 profile for the video output.
sourcepub fn dynamic_sub_gop(self, input: Mpeg2DynamicSubGop) -> Self
pub fn dynamic_sub_gop(self, input: Mpeg2DynamicSubGop) -> Self
Choose Adaptive to improve subjective video quality for high-motion content. This will cause the service to use fewer B-frames (which infer information based on other frames) for high-motion portions of the video and more B-frames for low-motion portions. The maximum number of B-frames is limited by the value you provide for the setting B frames between reference frames.
sourcepub fn set_dynamic_sub_gop(self, input: Option<Mpeg2DynamicSubGop>) -> Self
pub fn set_dynamic_sub_gop(self, input: Option<Mpeg2DynamicSubGop>) -> Self
Choose Adaptive to improve subjective video quality for high-motion content. This will cause the service to use fewer B-frames (which infer information based on other frames) for high-motion portions of the video and more B-frames for low-motion portions. The maximum number of B-frames is limited by the value you provide for the setting B frames between reference frames.
sourcepub fn get_dynamic_sub_gop(&self) -> &Option<Mpeg2DynamicSubGop>
pub fn get_dynamic_sub_gop(&self) -> &Option<Mpeg2DynamicSubGop>
Choose Adaptive to improve subjective video quality for high-motion content. This will cause the service to use fewer B-frames (which infer information based on other frames) for high-motion portions of the video and more B-frames for low-motion portions. The maximum number of B-frames is limited by the value you provide for the setting B frames between reference frames.
sourcepub fn framerate_control(self, input: Mpeg2FramerateControl) -> Self
pub fn framerate_control(self, input: Mpeg2FramerateControl) -> Self
If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction.
sourcepub fn set_framerate_control(self, input: Option<Mpeg2FramerateControl>) -> Self
pub fn set_framerate_control(self, input: Option<Mpeg2FramerateControl>) -> Self
If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction.
sourcepub fn get_framerate_control(&self) -> &Option<Mpeg2FramerateControl>
pub fn get_framerate_control(&self) -> &Option<Mpeg2FramerateControl>
If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction.
sourcepub fn framerate_conversion_algorithm(
self,
input: Mpeg2FramerateConversionAlgorithm
) -> Self
pub fn framerate_conversion_algorithm( self, input: Mpeg2FramerateConversionAlgorithm ) -> Self
Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96.
sourcepub fn set_framerate_conversion_algorithm(
self,
input: Option<Mpeg2FramerateConversionAlgorithm>
) -> Self
pub fn set_framerate_conversion_algorithm( self, input: Option<Mpeg2FramerateConversionAlgorithm> ) -> Self
Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96.
sourcepub fn get_framerate_conversion_algorithm(
&self
) -> &Option<Mpeg2FramerateConversionAlgorithm>
pub fn get_framerate_conversion_algorithm( &self ) -> &Option<Mpeg2FramerateConversionAlgorithm>
Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96.
sourcepub fn framerate_denominator(self, input: i32) -> Self
pub fn framerate_denominator(self, input: i32) -> Self
When you use the API for transcode jobs that use frame rate conversion, specify the frame rate as a fraction. For example, 24000 / 1001 = 23.976 fps. Use FramerateDenominator to specify the denominator of this fraction. In this example, use 1001 for the value of FramerateDenominator. When you use the console for transcode jobs that use frame rate conversion, provide the value as a decimal number for Framerate. In this example, specify 23.976.
sourcepub fn set_framerate_denominator(self, input: Option<i32>) -> Self
pub fn set_framerate_denominator(self, input: Option<i32>) -> Self
When you use the API for transcode jobs that use frame rate conversion, specify the frame rate as a fraction. For example, 24000 / 1001 = 23.976 fps. Use FramerateDenominator to specify the denominator of this fraction. In this example, use 1001 for the value of FramerateDenominator. When you use the console for transcode jobs that use frame rate conversion, provide the value as a decimal number for Framerate. In this example, specify 23.976.
sourcepub fn get_framerate_denominator(&self) -> &Option<i32>
pub fn get_framerate_denominator(&self) -> &Option<i32>
When you use the API for transcode jobs that use frame rate conversion, specify the frame rate as a fraction. For example, 24000 / 1001 = 23.976 fps. Use FramerateDenominator to specify the denominator of this fraction. In this example, use 1001 for the value of FramerateDenominator. When you use the console for transcode jobs that use frame rate conversion, provide the value as a decimal number for Framerate. In this example, specify 23.976.
sourcepub fn framerate_numerator(self, input: i32) -> Self
pub fn framerate_numerator(self, input: i32) -> Self
When you use the API for transcode jobs that use frame rate conversion, specify the frame rate as a fraction. For example, 24000 / 1001 = 23.976 fps. Use FramerateNumerator to specify the numerator of this fraction. In this example, use 24000 for the value of FramerateNumerator. When you use the console for transcode jobs that use frame rate conversion, provide the value as a decimal number for Framerate. In this example, specify 23.976.
sourcepub fn set_framerate_numerator(self, input: Option<i32>) -> Self
pub fn set_framerate_numerator(self, input: Option<i32>) -> Self
When you use the API for transcode jobs that use frame rate conversion, specify the frame rate as a fraction. For example, 24000 / 1001 = 23.976 fps. Use FramerateNumerator to specify the numerator of this fraction. In this example, use 24000 for the value of FramerateNumerator. When you use the console for transcode jobs that use frame rate conversion, provide the value as a decimal number for Framerate. In this example, specify 23.976.
sourcepub fn get_framerate_numerator(&self) -> &Option<i32>
pub fn get_framerate_numerator(&self) -> &Option<i32>
When you use the API for transcode jobs that use frame rate conversion, specify the frame rate as a fraction. For example, 24000 / 1001 = 23.976 fps. Use FramerateNumerator to specify the numerator of this fraction. In this example, use 24000 for the value of FramerateNumerator. When you use the console for transcode jobs that use frame rate conversion, provide the value as a decimal number for Framerate. In this example, specify 23.976.
sourcepub fn gop_closed_cadence(self, input: i32) -> Self
pub fn gop_closed_cadence(self, input: i32) -> Self
Specify the relative frequency of open to closed GOPs in this output. For example, if you want to allow four open GOPs and then require a closed GOP, set this value to 5. When you create a streaming output, we recommend that you keep the default value, 1, so that players starting mid-stream receive an IDR frame as quickly as possible. Don’t set this value to 0; that would break output segmenting.
sourcepub fn set_gop_closed_cadence(self, input: Option<i32>) -> Self
pub fn set_gop_closed_cadence(self, input: Option<i32>) -> Self
Specify the relative frequency of open to closed GOPs in this output. For example, if you want to allow four open GOPs and then require a closed GOP, set this value to 5. When you create a streaming output, we recommend that you keep the default value, 1, so that players starting mid-stream receive an IDR frame as quickly as possible. Don’t set this value to 0; that would break output segmenting.
sourcepub fn get_gop_closed_cadence(&self) -> &Option<i32>
pub fn get_gop_closed_cadence(&self) -> &Option<i32>
Specify the relative frequency of open to closed GOPs in this output. For example, if you want to allow four open GOPs and then require a closed GOP, set this value to 5. When you create a streaming output, we recommend that you keep the default value, 1, so that players starting mid-stream receive an IDR frame as quickly as possible. Don’t set this value to 0; that would break output segmenting.
sourcepub fn gop_size(self, input: f64) -> Self
pub fn gop_size(self, input: f64) -> Self
Specify the interval between keyframes, in seconds or frames, for this output. Default: 12 Related settings: When you specify the GOP size in seconds, set GOP mode control to Specified, seconds. The default value for GOP mode control is Frames.
sourcepub fn set_gop_size(self, input: Option<f64>) -> Self
pub fn set_gop_size(self, input: Option<f64>) -> Self
Specify the interval between keyframes, in seconds or frames, for this output. Default: 12 Related settings: When you specify the GOP size in seconds, set GOP mode control to Specified, seconds. The default value for GOP mode control is Frames.
sourcepub fn get_gop_size(&self) -> &Option<f64>
pub fn get_gop_size(&self) -> &Option<f64>
Specify the interval between keyframes, in seconds or frames, for this output. Default: 12 Related settings: When you specify the GOP size in seconds, set GOP mode control to Specified, seconds. The default value for GOP mode control is Frames.
sourcepub fn gop_size_units(self, input: Mpeg2GopSizeUnits) -> Self
pub fn gop_size_units(self, input: Mpeg2GopSizeUnits) -> Self
Specify the units for GOP size. If you don’t specify a value here, by default the encoder measures GOP size in frames.
sourcepub fn set_gop_size_units(self, input: Option<Mpeg2GopSizeUnits>) -> Self
pub fn set_gop_size_units(self, input: Option<Mpeg2GopSizeUnits>) -> Self
Specify the units for GOP size. If you don’t specify a value here, by default the encoder measures GOP size in frames.
sourcepub fn get_gop_size_units(&self) -> &Option<Mpeg2GopSizeUnits>
pub fn get_gop_size_units(&self) -> &Option<Mpeg2GopSizeUnits>
Specify the units for GOP size. If you don’t specify a value here, by default the encoder measures GOP size in frames.
sourcepub fn hrd_buffer_final_fill_percentage(self, input: i32) -> Self
pub fn hrd_buffer_final_fill_percentage(self, input: i32) -> Self
If your downstream systems have strict buffer requirements: Specify the minimum percentage of the HRD buffer that’s available at the end of each encoded video segment. For the best video quality: Set to 0 or leave blank to automatically determine the final buffer fill percentage.
sourcepub fn set_hrd_buffer_final_fill_percentage(self, input: Option<i32>) -> Self
pub fn set_hrd_buffer_final_fill_percentage(self, input: Option<i32>) -> Self
If your downstream systems have strict buffer requirements: Specify the minimum percentage of the HRD buffer that’s available at the end of each encoded video segment. For the best video quality: Set to 0 or leave blank to automatically determine the final buffer fill percentage.
sourcepub fn get_hrd_buffer_final_fill_percentage(&self) -> &Option<i32>
pub fn get_hrd_buffer_final_fill_percentage(&self) -> &Option<i32>
If your downstream systems have strict buffer requirements: Specify the minimum percentage of the HRD buffer that’s available at the end of each encoded video segment. For the best video quality: Set to 0 or leave blank to automatically determine the final buffer fill percentage.
sourcepub fn hrd_buffer_initial_fill_percentage(self, input: i32) -> Self
pub fn hrd_buffer_initial_fill_percentage(self, input: i32) -> Self
Percentage of the buffer that should initially be filled (HRD buffer model).
sourcepub fn set_hrd_buffer_initial_fill_percentage(self, input: Option<i32>) -> Self
pub fn set_hrd_buffer_initial_fill_percentage(self, input: Option<i32>) -> Self
Percentage of the buffer that should initially be filled (HRD buffer model).
sourcepub fn get_hrd_buffer_initial_fill_percentage(&self) -> &Option<i32>
pub fn get_hrd_buffer_initial_fill_percentage(&self) -> &Option<i32>
Percentage of the buffer that should initially be filled (HRD buffer model).
sourcepub fn hrd_buffer_size(self, input: i32) -> Self
pub fn hrd_buffer_size(self, input: i32) -> Self
Size of buffer (HRD buffer model) in bits. For example, enter five megabits as 5000000.
sourcepub fn set_hrd_buffer_size(self, input: Option<i32>) -> Self
pub fn set_hrd_buffer_size(self, input: Option<i32>) -> Self
Size of buffer (HRD buffer model) in bits. For example, enter five megabits as 5000000.
sourcepub fn get_hrd_buffer_size(&self) -> &Option<i32>
pub fn get_hrd_buffer_size(&self) -> &Option<i32>
Size of buffer (HRD buffer model) in bits. For example, enter five megabits as 5000000.
sourcepub fn interlace_mode(self, input: Mpeg2InterlaceMode) -> Self
pub fn interlace_mode(self, input: Mpeg2InterlaceMode) -> Self
Choose the scan line type for the output. Keep the default value, Progressive to create a progressive output, regardless of the scan type of your input. Use Top field first or Bottom field first to create an output that’s interlaced with the same field polarity throughout. Use Follow, default top or Follow, default bottom to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose.
sourcepub fn set_interlace_mode(self, input: Option<Mpeg2InterlaceMode>) -> Self
pub fn set_interlace_mode(self, input: Option<Mpeg2InterlaceMode>) -> Self
Choose the scan line type for the output. Keep the default value, Progressive to create a progressive output, regardless of the scan type of your input. Use Top field first or Bottom field first to create an output that’s interlaced with the same field polarity throughout. Use Follow, default top or Follow, default bottom to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose.
sourcepub fn get_interlace_mode(&self) -> &Option<Mpeg2InterlaceMode>
pub fn get_interlace_mode(&self) -> &Option<Mpeg2InterlaceMode>
Choose the scan line type for the output. Keep the default value, Progressive to create a progressive output, regardless of the scan type of your input. Use Top field first or Bottom field first to create an output that’s interlaced with the same field polarity throughout. Use Follow, default top or Follow, default bottom to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose.
sourcepub fn intra_dc_precision(self, input: Mpeg2IntraDcPrecision) -> Self
pub fn intra_dc_precision(self, input: Mpeg2IntraDcPrecision) -> Self
Use Intra DC precision to set quantization precision for intra-block DC coefficients. If you choose the value auto, the service will automatically select the precision based on the per-frame compression ratio.
sourcepub fn set_intra_dc_precision(
self,
input: Option<Mpeg2IntraDcPrecision>
) -> Self
pub fn set_intra_dc_precision( self, input: Option<Mpeg2IntraDcPrecision> ) -> Self
Use Intra DC precision to set quantization precision for intra-block DC coefficients. If you choose the value auto, the service will automatically select the precision based on the per-frame compression ratio.
sourcepub fn get_intra_dc_precision(&self) -> &Option<Mpeg2IntraDcPrecision>
pub fn get_intra_dc_precision(&self) -> &Option<Mpeg2IntraDcPrecision>
Use Intra DC precision to set quantization precision for intra-block DC coefficients. If you choose the value auto, the service will automatically select the precision based on the per-frame compression ratio.
sourcepub fn max_bitrate(self, input: i32) -> Self
pub fn max_bitrate(self, input: i32) -> Self
Maximum bitrate in bits/second. For example, enter five megabits per second as 5000000.
sourcepub fn set_max_bitrate(self, input: Option<i32>) -> Self
pub fn set_max_bitrate(self, input: Option<i32>) -> Self
Maximum bitrate in bits/second. For example, enter five megabits per second as 5000000.
sourcepub fn get_max_bitrate(&self) -> &Option<i32>
pub fn get_max_bitrate(&self) -> &Option<i32>
Maximum bitrate in bits/second. For example, enter five megabits per second as 5000000.
sourcepub fn min_i_interval(self, input: i32) -> Self
pub fn min_i_interval(self, input: i32) -> Self
Use this setting only when you also enable Scene change detection. This setting determines how the encoder manages the spacing between I-frames that it inserts as part of the I-frame cadence and the I-frames that it inserts for Scene change detection. When you specify a value for this setting, the encoder determines whether to skip a cadence-driven I-frame by the value you set. For example, if you set Min I interval to 5 and a cadence-driven I-frame would fall within 5 frames of a scene-change I-frame, then the encoder skips the cadence-driven I-frame. In this way, one GOP is shrunk slightly and one GOP is stretched slightly. When the cadence-driven I-frames are farther from the scene-change I-frame than the value you set, then the encoder leaves all I-frames in place and the GOPs surrounding the scene change are smaller than the usual cadence GOPs.
sourcepub fn set_min_i_interval(self, input: Option<i32>) -> Self
pub fn set_min_i_interval(self, input: Option<i32>) -> Self
Use this setting only when you also enable Scene change detection. This setting determines how the encoder manages the spacing between I-frames that it inserts as part of the I-frame cadence and the I-frames that it inserts for Scene change detection. When you specify a value for this setting, the encoder determines whether to skip a cadence-driven I-frame by the value you set. For example, if you set Min I interval to 5 and a cadence-driven I-frame would fall within 5 frames of a scene-change I-frame, then the encoder skips the cadence-driven I-frame. In this way, one GOP is shrunk slightly and one GOP is stretched slightly. When the cadence-driven I-frames are farther from the scene-change I-frame than the value you set, then the encoder leaves all I-frames in place and the GOPs surrounding the scene change are smaller than the usual cadence GOPs.
sourcepub fn get_min_i_interval(&self) -> &Option<i32>
pub fn get_min_i_interval(&self) -> &Option<i32>
Use this setting only when you also enable Scene change detection. This setting determines how the encoder manages the spacing between I-frames that it inserts as part of the I-frame cadence and the I-frames that it inserts for Scene change detection. When you specify a value for this setting, the encoder determines whether to skip a cadence-driven I-frame by the value you set. For example, if you set Min I interval to 5 and a cadence-driven I-frame would fall within 5 frames of a scene-change I-frame, then the encoder skips the cadence-driven I-frame. In this way, one GOP is shrunk slightly and one GOP is stretched slightly. When the cadence-driven I-frames are farther from the scene-change I-frame than the value you set, then the encoder leaves all I-frames in place and the GOPs surrounding the scene change are smaller than the usual cadence GOPs.
sourcepub fn number_b_frames_between_reference_frames(self, input: i32) -> Self
pub fn number_b_frames_between_reference_frames(self, input: i32) -> Self
Specify the number of B-frames that MediaConvert puts between reference frames in this output. Valid values are whole numbers from 0 through 7. When you don’t specify a value, MediaConvert defaults to 2.
sourcepub fn set_number_b_frames_between_reference_frames(
self,
input: Option<i32>
) -> Self
pub fn set_number_b_frames_between_reference_frames( self, input: Option<i32> ) -> Self
Specify the number of B-frames that MediaConvert puts between reference frames in this output. Valid values are whole numbers from 0 through 7. When you don’t specify a value, MediaConvert defaults to 2.
sourcepub fn get_number_b_frames_between_reference_frames(&self) -> &Option<i32>
pub fn get_number_b_frames_between_reference_frames(&self) -> &Option<i32>
Specify the number of B-frames that MediaConvert puts between reference frames in this output. Valid values are whole numbers from 0 through 7. When you don’t specify a value, MediaConvert defaults to 2.
sourcepub fn par_control(self, input: Mpeg2ParControl) -> Self
pub fn par_control(self, input: Mpeg2ParControl) -> Self
Optional. Specify how the service determines the pixel aspect ratio (PAR) for this output. The default behavior, Follow source, uses the PAR from your input video for your output. To specify a different PAR in the console, choose any value other than Follow source. When you choose SPECIFIED for this setting, you must also specify values for the parNumerator and parDenominator settings.
sourcepub fn set_par_control(self, input: Option<Mpeg2ParControl>) -> Self
pub fn set_par_control(self, input: Option<Mpeg2ParControl>) -> Self
Optional. Specify how the service determines the pixel aspect ratio (PAR) for this output. The default behavior, Follow source, uses the PAR from your input video for your output. To specify a different PAR in the console, choose any value other than Follow source. When you choose SPECIFIED for this setting, you must also specify values for the parNumerator and parDenominator settings.
sourcepub fn get_par_control(&self) -> &Option<Mpeg2ParControl>
pub fn get_par_control(&self) -> &Option<Mpeg2ParControl>
Optional. Specify how the service determines the pixel aspect ratio (PAR) for this output. The default behavior, Follow source, uses the PAR from your input video for your output. To specify a different PAR in the console, choose any value other than Follow source. When you choose SPECIFIED for this setting, you must also specify values for the parNumerator and parDenominator settings.
sourcepub fn par_denominator(self, input: i32) -> Self
pub fn par_denominator(self, input: i32) -> Self
Required when you set Pixel aspect ratio to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parDenominator is 33.
sourcepub fn set_par_denominator(self, input: Option<i32>) -> Self
pub fn set_par_denominator(self, input: Option<i32>) -> Self
Required when you set Pixel aspect ratio to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parDenominator is 33.
sourcepub fn get_par_denominator(&self) -> &Option<i32>
pub fn get_par_denominator(&self) -> &Option<i32>
Required when you set Pixel aspect ratio to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parDenominator is 33.
sourcepub fn par_numerator(self, input: i32) -> Self
pub fn par_numerator(self, input: i32) -> Self
Required when you set Pixel aspect ratio to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parNumerator is 40.
sourcepub fn set_par_numerator(self, input: Option<i32>) -> Self
pub fn set_par_numerator(self, input: Option<i32>) -> Self
Required when you set Pixel aspect ratio to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parNumerator is 40.
sourcepub fn get_par_numerator(&self) -> &Option<i32>
pub fn get_par_numerator(&self) -> &Option<i32>
Required when you set Pixel aspect ratio to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parNumerator is 40.
sourcepub fn quality_tuning_level(self, input: Mpeg2QualityTuningLevel) -> Self
pub fn quality_tuning_level(self, input: Mpeg2QualityTuningLevel) -> Self
Optional. Use Quality tuning level to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, single-pass encoding.
sourcepub fn set_quality_tuning_level(
self,
input: Option<Mpeg2QualityTuningLevel>
) -> Self
pub fn set_quality_tuning_level( self, input: Option<Mpeg2QualityTuningLevel> ) -> Self
Optional. Use Quality tuning level to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, single-pass encoding.
sourcepub fn get_quality_tuning_level(&self) -> &Option<Mpeg2QualityTuningLevel>
pub fn get_quality_tuning_level(&self) -> &Option<Mpeg2QualityTuningLevel>
Optional. Use Quality tuning level to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, single-pass encoding.
sourcepub fn rate_control_mode(self, input: Mpeg2RateControlMode) -> Self
pub fn rate_control_mode(self, input: Mpeg2RateControlMode) -> Self
Use Rate control mode to specify whether the bitrate is variable (vbr) or constant (cbr).
sourcepub fn set_rate_control_mode(self, input: Option<Mpeg2RateControlMode>) -> Self
pub fn set_rate_control_mode(self, input: Option<Mpeg2RateControlMode>) -> Self
Use Rate control mode to specify whether the bitrate is variable (vbr) or constant (cbr).
sourcepub fn get_rate_control_mode(&self) -> &Option<Mpeg2RateControlMode>
pub fn get_rate_control_mode(&self) -> &Option<Mpeg2RateControlMode>
Use Rate control mode to specify whether the bitrate is variable (vbr) or constant (cbr).
sourcepub fn scan_type_conversion_mode(
self,
input: Mpeg2ScanTypeConversionMode
) -> Self
pub fn scan_type_conversion_mode( self, input: Mpeg2ScanTypeConversionMode ) -> Self
Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing, for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn’t suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine to None or Soft. You can’t use optimized interlacing for hard telecine outputs. You must also set Interlace mode to a value other than Progressive.
sourcepub fn set_scan_type_conversion_mode(
self,
input: Option<Mpeg2ScanTypeConversionMode>
) -> Self
pub fn set_scan_type_conversion_mode( self, input: Option<Mpeg2ScanTypeConversionMode> ) -> Self
Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing, for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn’t suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine to None or Soft. You can’t use optimized interlacing for hard telecine outputs. You must also set Interlace mode to a value other than Progressive.
sourcepub fn get_scan_type_conversion_mode(
&self
) -> &Option<Mpeg2ScanTypeConversionMode>
pub fn get_scan_type_conversion_mode( &self ) -> &Option<Mpeg2ScanTypeConversionMode>
Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing, for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn’t suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine to None or Soft. You can’t use optimized interlacing for hard telecine outputs. You must also set Interlace mode to a value other than Progressive.
sourcepub fn scene_change_detect(self, input: Mpeg2SceneChangeDetect) -> Self
pub fn scene_change_detect(self, input: Mpeg2SceneChangeDetect) -> Self
Enable this setting to insert I-frames at scene changes that the service automatically detects. This improves video quality and is enabled by default.
sourcepub fn set_scene_change_detect(
self,
input: Option<Mpeg2SceneChangeDetect>
) -> Self
pub fn set_scene_change_detect( self, input: Option<Mpeg2SceneChangeDetect> ) -> Self
Enable this setting to insert I-frames at scene changes that the service automatically detects. This improves video quality and is enabled by default.
sourcepub fn get_scene_change_detect(&self) -> &Option<Mpeg2SceneChangeDetect>
pub fn get_scene_change_detect(&self) -> &Option<Mpeg2SceneChangeDetect>
Enable this setting to insert I-frames at scene changes that the service automatically detects. This improves video quality and is enabled by default.
sourcepub fn slow_pal(self, input: Mpeg2SlowPal) -> Self
pub fn slow_pal(self, input: Mpeg2SlowPal) -> Self
Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output. When you enable slow PAL, MediaConvert relabels the video frames to 25 fps and resamples your audio to keep it synchronized with the video. Note that enabling this setting will slightly reduce the duration of your video. Required settings: You must also set Framerate to 25.
sourcepub fn set_slow_pal(self, input: Option<Mpeg2SlowPal>) -> Self
pub fn set_slow_pal(self, input: Option<Mpeg2SlowPal>) -> Self
Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output. When you enable slow PAL, MediaConvert relabels the video frames to 25 fps and resamples your audio to keep it synchronized with the video. Note that enabling this setting will slightly reduce the duration of your video. Required settings: You must also set Framerate to 25.
sourcepub fn get_slow_pal(&self) -> &Option<Mpeg2SlowPal>
pub fn get_slow_pal(&self) -> &Option<Mpeg2SlowPal>
Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output. When you enable slow PAL, MediaConvert relabels the video frames to 25 fps and resamples your audio to keep it synchronized with the video. Note that enabling this setting will slightly reduce the duration of your video. Required settings: You must also set Framerate to 25.
sourcepub fn softness(self, input: i32) -> Self
pub fn softness(self, input: i32) -> Self
Ignore this setting unless you need to comply with a specification that requires a specific value. If you don’t have a specification requirement, we recommend that you adjust the softness of your output by using a lower value for the setting Sharpness or by enabling a noise reducer filter. The Softness setting specifies the quantization matrices that the encoder uses. Keep the default value, 0, to use the AWS Elemental default matrices. Choose a value from 17 to 128 to use planar interpolation. Increasing values from 17 to 128 result in increasing reduction of high-frequency data. The value 128 results in the softest video.
sourcepub fn set_softness(self, input: Option<i32>) -> Self
pub fn set_softness(self, input: Option<i32>) -> Self
Ignore this setting unless you need to comply with a specification that requires a specific value. If you don’t have a specification requirement, we recommend that you adjust the softness of your output by using a lower value for the setting Sharpness or by enabling a noise reducer filter. The Softness setting specifies the quantization matrices that the encoder uses. Keep the default value, 0, to use the AWS Elemental default matrices. Choose a value from 17 to 128 to use planar interpolation. Increasing values from 17 to 128 result in increasing reduction of high-frequency data. The value 128 results in the softest video.
sourcepub fn get_softness(&self) -> &Option<i32>
pub fn get_softness(&self) -> &Option<i32>
Ignore this setting unless you need to comply with a specification that requires a specific value. If you don’t have a specification requirement, we recommend that you adjust the softness of your output by using a lower value for the setting Sharpness or by enabling a noise reducer filter. The Softness setting specifies the quantization matrices that the encoder uses. Keep the default value, 0, to use the AWS Elemental default matrices. Choose a value from 17 to 128 to use planar interpolation. Increasing values from 17 to 128 result in increasing reduction of high-frequency data. The value 128 results in the softest video.
sourcepub fn spatial_adaptive_quantization(
self,
input: Mpeg2SpatialAdaptiveQuantization
) -> Self
pub fn spatial_adaptive_quantization( self, input: Mpeg2SpatialAdaptiveQuantization ) -> Self
Keep the default value, Enabled, to adjust quantization within each frame based on spatial variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas that can sustain more distortion with no noticeable visual degradation and uses more bits on areas where any small distortion will be noticeable. For example, complex textured blocks are encoded with fewer bits and smooth textured blocks are encoded with more bits. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn’t take into account where the viewer’s attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen with a lot of complex texture, you might choose to disable this feature. Related setting: When you enable spatial adaptive quantization, set the value for Adaptive quantization depending on your content. For homogeneous content, such as cartoons and video games, set it to Low. For content with a wider variety of textures, set it to High or Higher.
sourcepub fn set_spatial_adaptive_quantization(
self,
input: Option<Mpeg2SpatialAdaptiveQuantization>
) -> Self
pub fn set_spatial_adaptive_quantization( self, input: Option<Mpeg2SpatialAdaptiveQuantization> ) -> Self
Keep the default value, Enabled, to adjust quantization within each frame based on spatial variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas that can sustain more distortion with no noticeable visual degradation and uses more bits on areas where any small distortion will be noticeable. For example, complex textured blocks are encoded with fewer bits and smooth textured blocks are encoded with more bits. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn’t take into account where the viewer’s attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen with a lot of complex texture, you might choose to disable this feature. Related setting: When you enable spatial adaptive quantization, set the value for Adaptive quantization depending on your content. For homogeneous content, such as cartoons and video games, set it to Low. For content with a wider variety of textures, set it to High or Higher.
sourcepub fn get_spatial_adaptive_quantization(
&self
) -> &Option<Mpeg2SpatialAdaptiveQuantization>
pub fn get_spatial_adaptive_quantization( &self ) -> &Option<Mpeg2SpatialAdaptiveQuantization>
Keep the default value, Enabled, to adjust quantization within each frame based on spatial variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas that can sustain more distortion with no noticeable visual degradation and uses more bits on areas where any small distortion will be noticeable. For example, complex textured blocks are encoded with fewer bits and smooth textured blocks are encoded with more bits. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn’t take into account where the viewer’s attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen with a lot of complex texture, you might choose to disable this feature. Related setting: When you enable spatial adaptive quantization, set the value for Adaptive quantization depending on your content. For homogeneous content, such as cartoons and video games, set it to Low. For content with a wider variety of textures, set it to High or Higher.
sourcepub fn syntax(self, input: Mpeg2Syntax) -> Self
pub fn syntax(self, input: Mpeg2Syntax) -> Self
Specify whether this output’s video uses the D10 syntax. Keep the default value to not use the syntax. Related settings: When you choose D10 for your MXF profile, you must also set this value to D10.
sourcepub fn set_syntax(self, input: Option<Mpeg2Syntax>) -> Self
pub fn set_syntax(self, input: Option<Mpeg2Syntax>) -> Self
Specify whether this output’s video uses the D10 syntax. Keep the default value to not use the syntax. Related settings: When you choose D10 for your MXF profile, you must also set this value to D10.
sourcepub fn get_syntax(&self) -> &Option<Mpeg2Syntax>
pub fn get_syntax(&self) -> &Option<Mpeg2Syntax>
Specify whether this output’s video uses the D10 syntax. Keep the default value to not use the syntax. Related settings: When you choose D10 for your MXF profile, you must also set this value to D10.
sourcepub fn telecine(self, input: Mpeg2Telecine) -> Self
pub fn telecine(self, input: Mpeg2Telecine) -> Self
When you do frame rate conversion from 23.976 frames per second (fps) to 29.97 fps, and your output scan type is interlaced, you can optionally enable hard or soft telecine to create a smoother picture. Hard telecine produces a 29.97i output. Soft telecine produces an output with a 23.976 output that signals to the video player device to do the conversion during play back. When you keep the default value, None, MediaConvert does a standard frame rate conversion to 29.97 without doing anything with the field polarity to create a smoother picture.
sourcepub fn set_telecine(self, input: Option<Mpeg2Telecine>) -> Self
pub fn set_telecine(self, input: Option<Mpeg2Telecine>) -> Self
When you do frame rate conversion from 23.976 frames per second (fps) to 29.97 fps, and your output scan type is interlaced, you can optionally enable hard or soft telecine to create a smoother picture. Hard telecine produces a 29.97i output. Soft telecine produces an output with a 23.976 output that signals to the video player device to do the conversion during play back. When you keep the default value, None, MediaConvert does a standard frame rate conversion to 29.97 without doing anything with the field polarity to create a smoother picture.
sourcepub fn get_telecine(&self) -> &Option<Mpeg2Telecine>
pub fn get_telecine(&self) -> &Option<Mpeg2Telecine>
When you do frame rate conversion from 23.976 frames per second (fps) to 29.97 fps, and your output scan type is interlaced, you can optionally enable hard or soft telecine to create a smoother picture. Hard telecine produces a 29.97i output. Soft telecine produces an output with a 23.976 output that signals to the video player device to do the conversion during play back. When you keep the default value, None, MediaConvert does a standard frame rate conversion to 29.97 without doing anything with the field polarity to create a smoother picture.
sourcepub fn temporal_adaptive_quantization(
self,
input: Mpeg2TemporalAdaptiveQuantization
) -> Self
pub fn temporal_adaptive_quantization( self, input: Mpeg2TemporalAdaptiveQuantization ) -> Self
Keep the default value, Enabled, to adjust quantization within each frame based on temporal variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas of the frame that aren’t moving and uses more bits on complex objects with sharp edges that move a lot. For example, this feature improves the readability of text tickers on newscasts and scoreboards on sports matches. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn’t take into account where the viewer’s attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen that doesn’t have moving objects with sharp edges, such as sports athletes’ faces, you might choose to disable this feature. Related setting: When you enable temporal quantization, adjust the strength of the filter with the setting Adaptive quantization.
sourcepub fn set_temporal_adaptive_quantization(
self,
input: Option<Mpeg2TemporalAdaptiveQuantization>
) -> Self
pub fn set_temporal_adaptive_quantization( self, input: Option<Mpeg2TemporalAdaptiveQuantization> ) -> Self
Keep the default value, Enabled, to adjust quantization within each frame based on temporal variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas of the frame that aren’t moving and uses more bits on complex objects with sharp edges that move a lot. For example, this feature improves the readability of text tickers on newscasts and scoreboards on sports matches. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn’t take into account where the viewer’s attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen that doesn’t have moving objects with sharp edges, such as sports athletes’ faces, you might choose to disable this feature. Related setting: When you enable temporal quantization, adjust the strength of the filter with the setting Adaptive quantization.
sourcepub fn get_temporal_adaptive_quantization(
&self
) -> &Option<Mpeg2TemporalAdaptiveQuantization>
pub fn get_temporal_adaptive_quantization( &self ) -> &Option<Mpeg2TemporalAdaptiveQuantization>
Keep the default value, Enabled, to adjust quantization within each frame based on temporal variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas of the frame that aren’t moving and uses more bits on complex objects with sharp edges that move a lot. For example, this feature improves the readability of text tickers on newscasts and scoreboards on sports matches. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn’t take into account where the viewer’s attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen that doesn’t have moving objects with sharp edges, such as sports athletes’ faces, you might choose to disable this feature. Related setting: When you enable temporal quantization, adjust the strength of the filter with the setting Adaptive quantization.
sourcepub fn build(self) -> Mpeg2Settings
pub fn build(self) -> Mpeg2Settings
Consumes the builder and constructs a Mpeg2Settings
.
Trait Implementations§
source§impl Clone for Mpeg2SettingsBuilder
impl Clone for Mpeg2SettingsBuilder
source§fn clone(&self) -> Mpeg2SettingsBuilder
fn clone(&self) -> Mpeg2SettingsBuilder
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for Mpeg2SettingsBuilder
impl Debug for Mpeg2SettingsBuilder
source§impl Default for Mpeg2SettingsBuilder
impl Default for Mpeg2SettingsBuilder
source§fn default() -> Mpeg2SettingsBuilder
fn default() -> Mpeg2SettingsBuilder
source§impl PartialEq for Mpeg2SettingsBuilder
impl PartialEq for Mpeg2SettingsBuilder
source§fn eq(&self, other: &Mpeg2SettingsBuilder) -> bool
fn eq(&self, other: &Mpeg2SettingsBuilder) -> bool
self
and other
values to be equal, and is used
by ==
.impl StructuralPartialEq for Mpeg2SettingsBuilder
Auto Trait Implementations§
impl Freeze for Mpeg2SettingsBuilder
impl RefUnwindSafe for Mpeg2SettingsBuilder
impl Send for Mpeg2SettingsBuilder
impl Sync for Mpeg2SettingsBuilder
impl Unpin for Mpeg2SettingsBuilder
impl UnwindSafe for Mpeg2SettingsBuilder
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more