{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.MediaConvert.Types.Mpeg2Settings
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.MediaConvert.Types.Mpeg2Settings where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.MediaConvert.Types.Mpeg2AdaptiveQuantization
import Amazonka.MediaConvert.Types.Mpeg2CodecLevel
import Amazonka.MediaConvert.Types.Mpeg2CodecProfile
import Amazonka.MediaConvert.Types.Mpeg2DynamicSubGop
import Amazonka.MediaConvert.Types.Mpeg2FramerateControl
import Amazonka.MediaConvert.Types.Mpeg2FramerateConversionAlgorithm
import Amazonka.MediaConvert.Types.Mpeg2GopSizeUnits
import Amazonka.MediaConvert.Types.Mpeg2InterlaceMode
import Amazonka.MediaConvert.Types.Mpeg2IntraDcPrecision
import Amazonka.MediaConvert.Types.Mpeg2ParControl
import Amazonka.MediaConvert.Types.Mpeg2QualityTuningLevel
import Amazonka.MediaConvert.Types.Mpeg2RateControlMode
import Amazonka.MediaConvert.Types.Mpeg2ScanTypeConversionMode
import Amazonka.MediaConvert.Types.Mpeg2SceneChangeDetect
import Amazonka.MediaConvert.Types.Mpeg2SlowPal
import Amazonka.MediaConvert.Types.Mpeg2SpatialAdaptiveQuantization
import Amazonka.MediaConvert.Types.Mpeg2Syntax
import Amazonka.MediaConvert.Types.Mpeg2Telecine
import Amazonka.MediaConvert.Types.Mpeg2TemporalAdaptiveQuantization
import qualified Amazonka.Prelude as Prelude

-- | Required when you set (Codec) under (VideoDescription)>(CodecSettings)
-- to the value MPEG2.
--
-- /See:/ 'newMpeg2Settings' smart constructor.
data Mpeg2Settings = Mpeg2Settings'
  { -- | 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 (spatialAdaptiveQuantization),
    -- and Temporal adaptive quantization (temporalAdaptiveQuantization).
    Mpeg2Settings -> Maybe Mpeg2AdaptiveQuantization
adaptiveQuantization :: Prelude.Maybe Mpeg2AdaptiveQuantization,
    -- | 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.
    Mpeg2Settings -> Maybe Natural
bitrate :: Prelude.Maybe Prelude.Natural,
    -- | Use Level (Mpeg2CodecLevel) to set the MPEG-2 level for the video
    -- output.
    Mpeg2Settings -> Maybe Mpeg2CodecLevel
codecLevel :: Prelude.Maybe Mpeg2CodecLevel,
    -- | Use Profile (Mpeg2CodecProfile) to set the MPEG-2 profile for the video
    -- output.
    Mpeg2Settings -> Maybe Mpeg2CodecProfile
codecProfile :: Prelude.Maybe Mpeg2CodecProfile,
    -- | 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 (numberBFramesBetweenReferenceFrames).
    Mpeg2Settings -> Maybe Mpeg2DynamicSubGop
dynamicSubGop :: Prelude.Maybe Mpeg2DynamicSubGop,
    -- | 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.
    -- If you are creating your transcoding job specification as a JSON file
    -- without the console, use FramerateControl to specify which value the
    -- service uses for the frame rate for this output. Choose
    -- INITIALIZE_FROM_SOURCE if you want the service to use the frame rate
    -- from the input. Choose SPECIFIED if you want the service to use the
    -- frame rate you specify in the settings FramerateNumerator and
    -- FramerateDenominator.
    Mpeg2Settings -> Maybe Mpeg2FramerateControl
framerateControl :: Prelude.Maybe Mpeg2FramerateControl,
    -- | Choose the method that you want MediaConvert to use when increasing or
    -- decreasing the frame rate. We recommend using drop duplicate
    -- (DUPLICATE_DROP) for numerically simple conversions, such as 60 fps to
    -- 30 fps. For numerically complex conversions, you can use interpolate
    -- (INTERPOLATE) to avoid stutter. 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, use FrameFormer (FRAMEFORMER) to do
    -- motion-compensated interpolation. FrameFormer chooses the best
    -- conversion method frame by frame. Note that using FrameFormer increases
    -- the transcoding time and incurs a significant add-on cost.
    Mpeg2Settings -> Maybe Mpeg2FramerateConversionAlgorithm
framerateConversionAlgorithm :: Prelude.Maybe Mpeg2FramerateConversionAlgorithm,
    -- | 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.
    Mpeg2Settings -> Maybe Natural
framerateDenominator :: Prelude.Maybe Prelude.Natural,
    -- | 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.
    Mpeg2Settings -> Maybe Natural
framerateNumerator :: Prelude.Maybe Prelude.Natural,
    -- | 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.
    Mpeg2Settings -> Maybe Natural
gopClosedCadence :: Prelude.Maybe Prelude.Natural,
    -- | 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 (GopSizeUnits) to Specified, seconds
    -- (SECONDS). The default value for GOP mode control (GopSizeUnits) is
    -- Frames (FRAMES).
    Mpeg2Settings -> Maybe Double
gopSize :: Prelude.Maybe Prelude.Double,
    -- | Specify the units for GOP size (GopSize). If you don\'t specify a value
    -- here, by default the encoder measures GOP size in frames.
    Mpeg2Settings -> Maybe Mpeg2GopSizeUnits
gopSizeUnits :: Prelude.Maybe Mpeg2GopSizeUnits,
    -- | 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.
    Mpeg2Settings -> Maybe Natural
hrdBufferFinalFillPercentage :: Prelude.Maybe Prelude.Natural,
    -- | Percentage of the buffer that should initially be filled (HRD buffer
    -- model).
    Mpeg2Settings -> Maybe Natural
hrdBufferInitialFillPercentage :: Prelude.Maybe Prelude.Natural,
    -- | Size of buffer (HRD buffer model) in bits. For example, enter five
    -- megabits as 5000000.
    Mpeg2Settings -> Maybe Natural
hrdBufferSize :: Prelude.Maybe Prelude.Natural,
    -- | Choose the scan line type for the output. Keep the default value,
    -- Progressive (PROGRESSIVE) to create a progressive output, regardless of
    -- the scan type of your input. Use Top field first (TOP_FIELD) or Bottom
    -- field first (BOTTOM_FIELD) to create an output that\'s interlaced with
    -- the same field polarity throughout. Use Follow, default top
    -- (FOLLOW_TOP_FIELD) or Follow, default bottom (FOLLOW_BOTTOM_FIELD) 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.
    Mpeg2Settings -> Maybe Mpeg2InterlaceMode
interlaceMode :: Prelude.Maybe Mpeg2InterlaceMode,
    -- | Use Intra DC precision (Mpeg2IntraDcPrecision) 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.
    Mpeg2Settings -> Maybe Mpeg2IntraDcPrecision
intraDcPrecision :: Prelude.Maybe Mpeg2IntraDcPrecision,
    -- | Maximum bitrate in bits\/second. For example, enter five megabits per
    -- second as 5000000.
    Mpeg2Settings -> Maybe Natural
maxBitrate :: Prelude.Maybe Prelude.Natural,
    -- | Use this setting only when you also enable Scene change detection
    -- (SceneChangeDetect). 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 (minIInterval) 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.
    Mpeg2Settings -> Maybe Natural
minIInterval :: Prelude.Maybe Prelude.Natural,
    -- | 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.
    Mpeg2Settings -> Maybe Natural
numberBFramesBetweenReferenceFrames :: Prelude.Maybe Prelude.Natural,
    -- | Optional. Specify how the service determines the pixel aspect ratio
    -- (PAR) for this output. The default behavior, Follow source
    -- (INITIALIZE_FROM_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. To specify a different PAR by editing the JSON
    -- job specification, choose SPECIFIED. When you choose SPECIFIED for this
    -- setting, you must also specify values for the parNumerator and
    -- parDenominator settings.
    Mpeg2Settings -> Maybe Mpeg2ParControl
parControl :: Prelude.Maybe Mpeg2ParControl,
    -- | Required when you set Pixel aspect ratio (parControl) 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.
    Mpeg2Settings -> Maybe Natural
parDenominator :: Prelude.Maybe Prelude.Natural,
    -- | Required when you set Pixel aspect ratio (parControl) 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.
    Mpeg2Settings -> Maybe Natural
parNumerator :: Prelude.Maybe Prelude.Natural,
    -- | Optional. Use Quality tuning level (qualityTuningLevel) to choose how
    -- you want to trade off encoding speed for output video quality. The
    -- default behavior is faster, lower quality, single-pass encoding.
    Mpeg2Settings -> Maybe Mpeg2QualityTuningLevel
qualityTuningLevel :: Prelude.Maybe Mpeg2QualityTuningLevel,
    -- | Use Rate control mode (Mpeg2RateControlMode) to specify whether the
    -- bitrate is variable (vbr) or constant (cbr).
    Mpeg2Settings -> Maybe Mpeg2RateControlMode
rateControlMode :: Prelude.Maybe Mpeg2RateControlMode,
    -- | Use this setting for interlaced outputs, when your output frame rate is
    -- half of your input frame rate. In this situation, choose Optimized
    -- interlacing (INTERLACED_OPTIMIZE) 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 (INTERLACED), 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 (telecine) to None (NONE) or Soft (SOFT). You can\'t use
    -- optimized interlacing for hard telecine outputs. You must also set
    -- Interlace mode (interlaceMode) to a value other than Progressive
    -- (PROGRESSIVE).
    Mpeg2Settings -> Maybe Mpeg2ScanTypeConversionMode
scanTypeConversionMode :: Prelude.Maybe Mpeg2ScanTypeConversionMode,
    -- | Enable this setting to insert I-frames at scene changes that the service
    -- automatically detects. This improves video quality and is enabled by
    -- default.
    Mpeg2Settings -> Maybe Mpeg2SceneChangeDetect
sceneChangeDetect :: Prelude.Maybe Mpeg2SceneChangeDetect,
    -- | 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. In your JSON job
    -- specification, set (framerateControl) to (SPECIFIED),
    -- (framerateNumerator) to 25 and (framerateDenominator) to 1.
    Mpeg2Settings -> Maybe Mpeg2SlowPal
slowPal :: Prelude.Maybe Mpeg2SlowPal,
    -- | 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 (sharpness) or by enabling
    -- a noise reducer filter (noiseReducerFilter). The Softness (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.
    Mpeg2Settings -> Maybe Natural
softness :: Prelude.Maybe Prelude.Natural,
    -- | Keep the default value, Enabled (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
    -- (adaptiveQuantization) 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.
    Mpeg2Settings -> Maybe Mpeg2SpatialAdaptiveQuantization
spatialAdaptiveQuantization :: Prelude.Maybe Mpeg2SpatialAdaptiveQuantization,
    -- | 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 (D_10) for your MXF profile (profile), you must also set this value
    -- to D10 (D_10).
    Mpeg2Settings -> Maybe Mpeg2Syntax
syntax :: Prelude.Maybe Mpeg2Syntax,
    -- | 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
    -- (HARD) produces a 29.97i output. Soft telecine (SOFT) 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
    -- (NONE), MediaConvert does a standard frame rate conversion to 29.97
    -- without doing anything with the field polarity to create a smoother
    -- picture.
    Mpeg2Settings -> Maybe Mpeg2Telecine
telecine :: Prelude.Maybe Mpeg2Telecine,
    -- | Keep the default value, Enabled (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 (adaptiveQuantization).
    Mpeg2Settings -> Maybe Mpeg2TemporalAdaptiveQuantization
temporalAdaptiveQuantization :: Prelude.Maybe Mpeg2TemporalAdaptiveQuantization
  }
  deriving (Mpeg2Settings -> Mpeg2Settings -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Mpeg2Settings -> Mpeg2Settings -> Bool
$c/= :: Mpeg2Settings -> Mpeg2Settings -> Bool
== :: Mpeg2Settings -> Mpeg2Settings -> Bool
$c== :: Mpeg2Settings -> Mpeg2Settings -> Bool
Prelude.Eq, ReadPrec [Mpeg2Settings]
ReadPrec Mpeg2Settings
Int -> ReadS Mpeg2Settings
ReadS [Mpeg2Settings]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Mpeg2Settings]
$creadListPrec :: ReadPrec [Mpeg2Settings]
readPrec :: ReadPrec Mpeg2Settings
$creadPrec :: ReadPrec Mpeg2Settings
readList :: ReadS [Mpeg2Settings]
$creadList :: ReadS [Mpeg2Settings]
readsPrec :: Int -> ReadS Mpeg2Settings
$creadsPrec :: Int -> ReadS Mpeg2Settings
Prelude.Read, Int -> Mpeg2Settings -> ShowS
[Mpeg2Settings] -> ShowS
Mpeg2Settings -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Mpeg2Settings] -> ShowS
$cshowList :: [Mpeg2Settings] -> ShowS
show :: Mpeg2Settings -> String
$cshow :: Mpeg2Settings -> String
showsPrec :: Int -> Mpeg2Settings -> ShowS
$cshowsPrec :: Int -> Mpeg2Settings -> ShowS
Prelude.Show, forall x. Rep Mpeg2Settings x -> Mpeg2Settings
forall x. Mpeg2Settings -> Rep Mpeg2Settings x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Mpeg2Settings x -> Mpeg2Settings
$cfrom :: forall x. Mpeg2Settings -> Rep Mpeg2Settings x
Prelude.Generic)

-- |
-- Create a value of 'Mpeg2Settings' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'adaptiveQuantization', 'mpeg2Settings_adaptiveQuantization' - 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 (spatialAdaptiveQuantization),
-- and Temporal adaptive quantization (temporalAdaptiveQuantization).
--
-- 'bitrate', 'mpeg2Settings_bitrate' - 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.
--
-- 'codecLevel', 'mpeg2Settings_codecLevel' - Use Level (Mpeg2CodecLevel) to set the MPEG-2 level for the video
-- output.
--
-- 'codecProfile', 'mpeg2Settings_codecProfile' - Use Profile (Mpeg2CodecProfile) to set the MPEG-2 profile for the video
-- output.
--
-- 'dynamicSubGop', 'mpeg2Settings_dynamicSubGop' - 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 (numberBFramesBetweenReferenceFrames).
--
-- 'framerateControl', 'mpeg2Settings_framerateControl' - 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.
-- If you are creating your transcoding job specification as a JSON file
-- without the console, use FramerateControl to specify which value the
-- service uses for the frame rate for this output. Choose
-- INITIALIZE_FROM_SOURCE if you want the service to use the frame rate
-- from the input. Choose SPECIFIED if you want the service to use the
-- frame rate you specify in the settings FramerateNumerator and
-- FramerateDenominator.
--
-- 'framerateConversionAlgorithm', 'mpeg2Settings_framerateConversionAlgorithm' - Choose the method that you want MediaConvert to use when increasing or
-- decreasing the frame rate. We recommend using drop duplicate
-- (DUPLICATE_DROP) for numerically simple conversions, such as 60 fps to
-- 30 fps. For numerically complex conversions, you can use interpolate
-- (INTERPOLATE) to avoid stutter. 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, use FrameFormer (FRAMEFORMER) to do
-- motion-compensated interpolation. FrameFormer chooses the best
-- conversion method frame by frame. Note that using FrameFormer increases
-- the transcoding time and incurs a significant add-on cost.
--
-- 'framerateDenominator', 'mpeg2Settings_framerateDenominator' - 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.
--
-- 'framerateNumerator', 'mpeg2Settings_framerateNumerator' - 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.
--
-- 'gopClosedCadence', 'mpeg2Settings_gopClosedCadence' - 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.
--
-- 'gopSize', 'mpeg2Settings_gopSize' - 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 (GopSizeUnits) to Specified, seconds
-- (SECONDS). The default value for GOP mode control (GopSizeUnits) is
-- Frames (FRAMES).
--
-- 'gopSizeUnits', 'mpeg2Settings_gopSizeUnits' - Specify the units for GOP size (GopSize). If you don\'t specify a value
-- here, by default the encoder measures GOP size in frames.
--
-- 'hrdBufferFinalFillPercentage', 'mpeg2Settings_hrdBufferFinalFillPercentage' - 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.
--
-- 'hrdBufferInitialFillPercentage', 'mpeg2Settings_hrdBufferInitialFillPercentage' - Percentage of the buffer that should initially be filled (HRD buffer
-- model).
--
-- 'hrdBufferSize', 'mpeg2Settings_hrdBufferSize' - Size of buffer (HRD buffer model) in bits. For example, enter five
-- megabits as 5000000.
--
-- 'interlaceMode', 'mpeg2Settings_interlaceMode' - Choose the scan line type for the output. Keep the default value,
-- Progressive (PROGRESSIVE) to create a progressive output, regardless of
-- the scan type of your input. Use Top field first (TOP_FIELD) or Bottom
-- field first (BOTTOM_FIELD) to create an output that\'s interlaced with
-- the same field polarity throughout. Use Follow, default top
-- (FOLLOW_TOP_FIELD) or Follow, default bottom (FOLLOW_BOTTOM_FIELD) 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.
--
-- 'intraDcPrecision', 'mpeg2Settings_intraDcPrecision' - Use Intra DC precision (Mpeg2IntraDcPrecision) 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.
--
-- 'maxBitrate', 'mpeg2Settings_maxBitrate' - Maximum bitrate in bits\/second. For example, enter five megabits per
-- second as 5000000.
--
-- 'minIInterval', 'mpeg2Settings_minIInterval' - Use this setting only when you also enable Scene change detection
-- (SceneChangeDetect). 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 (minIInterval) 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.
--
-- 'numberBFramesBetweenReferenceFrames', 'mpeg2Settings_numberBFramesBetweenReferenceFrames' - 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.
--
-- 'parControl', 'mpeg2Settings_parControl' - Optional. Specify how the service determines the pixel aspect ratio
-- (PAR) for this output. The default behavior, Follow source
-- (INITIALIZE_FROM_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. To specify a different PAR by editing the JSON
-- job specification, choose SPECIFIED. When you choose SPECIFIED for this
-- setting, you must also specify values for the parNumerator and
-- parDenominator settings.
--
-- 'parDenominator', 'mpeg2Settings_parDenominator' - Required when you set Pixel aspect ratio (parControl) 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.
--
-- 'parNumerator', 'mpeg2Settings_parNumerator' - Required when you set Pixel aspect ratio (parControl) 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.
--
-- 'qualityTuningLevel', 'mpeg2Settings_qualityTuningLevel' - Optional. Use Quality tuning level (qualityTuningLevel) to choose how
-- you want to trade off encoding speed for output video quality. The
-- default behavior is faster, lower quality, single-pass encoding.
--
-- 'rateControlMode', 'mpeg2Settings_rateControlMode' - Use Rate control mode (Mpeg2RateControlMode) to specify whether the
-- bitrate is variable (vbr) or constant (cbr).
--
-- 'scanTypeConversionMode', 'mpeg2Settings_scanTypeConversionMode' - Use this setting for interlaced outputs, when your output frame rate is
-- half of your input frame rate. In this situation, choose Optimized
-- interlacing (INTERLACED_OPTIMIZE) 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 (INTERLACED), 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 (telecine) to None (NONE) or Soft (SOFT). You can\'t use
-- optimized interlacing for hard telecine outputs. You must also set
-- Interlace mode (interlaceMode) to a value other than Progressive
-- (PROGRESSIVE).
--
-- 'sceneChangeDetect', 'mpeg2Settings_sceneChangeDetect' - Enable this setting to insert I-frames at scene changes that the service
-- automatically detects. This improves video quality and is enabled by
-- default.
--
-- 'slowPal', 'mpeg2Settings_slowPal' - 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. In your JSON job
-- specification, set (framerateControl) to (SPECIFIED),
-- (framerateNumerator) to 25 and (framerateDenominator) to 1.
--
-- 'softness', 'mpeg2Settings_softness' - 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 (sharpness) or by enabling
-- a noise reducer filter (noiseReducerFilter). The Softness (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.
--
-- 'spatialAdaptiveQuantization', 'mpeg2Settings_spatialAdaptiveQuantization' - Keep the default value, Enabled (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
-- (adaptiveQuantization) 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.
--
-- 'syntax', 'mpeg2Settings_syntax' - 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 (D_10) for your MXF profile (profile), you must also set this value
-- to D10 (D_10).
--
-- 'telecine', 'mpeg2Settings_telecine' - 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
-- (HARD) produces a 29.97i output. Soft telecine (SOFT) 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
-- (NONE), MediaConvert does a standard frame rate conversion to 29.97
-- without doing anything with the field polarity to create a smoother
-- picture.
--
-- 'temporalAdaptiveQuantization', 'mpeg2Settings_temporalAdaptiveQuantization' - Keep the default value, Enabled (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 (adaptiveQuantization).
newMpeg2Settings ::
  Mpeg2Settings
newMpeg2Settings :: Mpeg2Settings
newMpeg2Settings =
  Mpeg2Settings'
    { $sel:adaptiveQuantization:Mpeg2Settings' :: Maybe Mpeg2AdaptiveQuantization
adaptiveQuantization =
        forall a. Maybe a
Prelude.Nothing,
      $sel:bitrate:Mpeg2Settings' :: Maybe Natural
bitrate = forall a. Maybe a
Prelude.Nothing,
      $sel:codecLevel:Mpeg2Settings' :: Maybe Mpeg2CodecLevel
codecLevel = forall a. Maybe a
Prelude.Nothing,
      $sel:codecProfile:Mpeg2Settings' :: Maybe Mpeg2CodecProfile
codecProfile = forall a. Maybe a
Prelude.Nothing,
      $sel:dynamicSubGop:Mpeg2Settings' :: Maybe Mpeg2DynamicSubGop
dynamicSubGop = forall a. Maybe a
Prelude.Nothing,
      $sel:framerateControl:Mpeg2Settings' :: Maybe Mpeg2FramerateControl
framerateControl = forall a. Maybe a
Prelude.Nothing,
      $sel:framerateConversionAlgorithm:Mpeg2Settings' :: Maybe Mpeg2FramerateConversionAlgorithm
framerateConversionAlgorithm = forall a. Maybe a
Prelude.Nothing,
      $sel:framerateDenominator:Mpeg2Settings' :: Maybe Natural
framerateDenominator = forall a. Maybe a
Prelude.Nothing,
      $sel:framerateNumerator:Mpeg2Settings' :: Maybe Natural
framerateNumerator = forall a. Maybe a
Prelude.Nothing,
      $sel:gopClosedCadence:Mpeg2Settings' :: Maybe Natural
gopClosedCadence = forall a. Maybe a
Prelude.Nothing,
      $sel:gopSize:Mpeg2Settings' :: Maybe Double
gopSize = forall a. Maybe a
Prelude.Nothing,
      $sel:gopSizeUnits:Mpeg2Settings' :: Maybe Mpeg2GopSizeUnits
gopSizeUnits = forall a. Maybe a
Prelude.Nothing,
      $sel:hrdBufferFinalFillPercentage:Mpeg2Settings' :: Maybe Natural
hrdBufferFinalFillPercentage = forall a. Maybe a
Prelude.Nothing,
      $sel:hrdBufferInitialFillPercentage:Mpeg2Settings' :: Maybe Natural
hrdBufferInitialFillPercentage = forall a. Maybe a
Prelude.Nothing,
      $sel:hrdBufferSize:Mpeg2Settings' :: Maybe Natural
hrdBufferSize = forall a. Maybe a
Prelude.Nothing,
      $sel:interlaceMode:Mpeg2Settings' :: Maybe Mpeg2InterlaceMode
interlaceMode = forall a. Maybe a
Prelude.Nothing,
      $sel:intraDcPrecision:Mpeg2Settings' :: Maybe Mpeg2IntraDcPrecision
intraDcPrecision = forall a. Maybe a
Prelude.Nothing,
      $sel:maxBitrate:Mpeg2Settings' :: Maybe Natural
maxBitrate = forall a. Maybe a
Prelude.Nothing,
      $sel:minIInterval:Mpeg2Settings' :: Maybe Natural
minIInterval = forall a. Maybe a
Prelude.Nothing,
      $sel:numberBFramesBetweenReferenceFrames:Mpeg2Settings' :: Maybe Natural
numberBFramesBetweenReferenceFrames =
        forall a. Maybe a
Prelude.Nothing,
      $sel:parControl:Mpeg2Settings' :: Maybe Mpeg2ParControl
parControl = forall a. Maybe a
Prelude.Nothing,
      $sel:parDenominator:Mpeg2Settings' :: Maybe Natural
parDenominator = forall a. Maybe a
Prelude.Nothing,
      $sel:parNumerator:Mpeg2Settings' :: Maybe Natural
parNumerator = forall a. Maybe a
Prelude.Nothing,
      $sel:qualityTuningLevel:Mpeg2Settings' :: Maybe Mpeg2QualityTuningLevel
qualityTuningLevel = forall a. Maybe a
Prelude.Nothing,
      $sel:rateControlMode:Mpeg2Settings' :: Maybe Mpeg2RateControlMode
rateControlMode = forall a. Maybe a
Prelude.Nothing,
      $sel:scanTypeConversionMode:Mpeg2Settings' :: Maybe Mpeg2ScanTypeConversionMode
scanTypeConversionMode = forall a. Maybe a
Prelude.Nothing,
      $sel:sceneChangeDetect:Mpeg2Settings' :: Maybe Mpeg2SceneChangeDetect
sceneChangeDetect = forall a. Maybe a
Prelude.Nothing,
      $sel:slowPal:Mpeg2Settings' :: Maybe Mpeg2SlowPal
slowPal = forall a. Maybe a
Prelude.Nothing,
      $sel:softness:Mpeg2Settings' :: Maybe Natural
softness = forall a. Maybe a
Prelude.Nothing,
      $sel:spatialAdaptiveQuantization:Mpeg2Settings' :: Maybe Mpeg2SpatialAdaptiveQuantization
spatialAdaptiveQuantization = forall a. Maybe a
Prelude.Nothing,
      $sel:syntax:Mpeg2Settings' :: Maybe Mpeg2Syntax
syntax = forall a. Maybe a
Prelude.Nothing,
      $sel:telecine:Mpeg2Settings' :: Maybe Mpeg2Telecine
telecine = forall a. Maybe a
Prelude.Nothing,
      $sel:temporalAdaptiveQuantization:Mpeg2Settings' :: Maybe Mpeg2TemporalAdaptiveQuantization
temporalAdaptiveQuantization = forall a. Maybe a
Prelude.Nothing
    }

-- | 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 (spatialAdaptiveQuantization),
-- and Temporal adaptive quantization (temporalAdaptiveQuantization).
mpeg2Settings_adaptiveQuantization :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Mpeg2AdaptiveQuantization)
mpeg2Settings_adaptiveQuantization :: Lens' Mpeg2Settings (Maybe Mpeg2AdaptiveQuantization)
mpeg2Settings_adaptiveQuantization = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Mpeg2AdaptiveQuantization
adaptiveQuantization :: Maybe Mpeg2AdaptiveQuantization
$sel:adaptiveQuantization:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2AdaptiveQuantization
adaptiveQuantization} -> Maybe Mpeg2AdaptiveQuantization
adaptiveQuantization) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Mpeg2AdaptiveQuantization
a -> Mpeg2Settings
s {$sel:adaptiveQuantization:Mpeg2Settings' :: Maybe Mpeg2AdaptiveQuantization
adaptiveQuantization = Maybe Mpeg2AdaptiveQuantization
a} :: Mpeg2Settings)

-- | 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.
mpeg2Settings_bitrate :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Prelude.Natural)
mpeg2Settings_bitrate :: Lens' Mpeg2Settings (Maybe Natural)
mpeg2Settings_bitrate = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Natural
bitrate :: Maybe Natural
$sel:bitrate:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
bitrate} -> Maybe Natural
bitrate) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Natural
a -> Mpeg2Settings
s {$sel:bitrate:Mpeg2Settings' :: Maybe Natural
bitrate = Maybe Natural
a} :: Mpeg2Settings)

-- | Use Level (Mpeg2CodecLevel) to set the MPEG-2 level for the video
-- output.
mpeg2Settings_codecLevel :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Mpeg2CodecLevel)
mpeg2Settings_codecLevel :: Lens' Mpeg2Settings (Maybe Mpeg2CodecLevel)
mpeg2Settings_codecLevel = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Mpeg2CodecLevel
codecLevel :: Maybe Mpeg2CodecLevel
$sel:codecLevel:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2CodecLevel
codecLevel} -> Maybe Mpeg2CodecLevel
codecLevel) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Mpeg2CodecLevel
a -> Mpeg2Settings
s {$sel:codecLevel:Mpeg2Settings' :: Maybe Mpeg2CodecLevel
codecLevel = Maybe Mpeg2CodecLevel
a} :: Mpeg2Settings)

-- | Use Profile (Mpeg2CodecProfile) to set the MPEG-2 profile for the video
-- output.
mpeg2Settings_codecProfile :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Mpeg2CodecProfile)
mpeg2Settings_codecProfile :: Lens' Mpeg2Settings (Maybe Mpeg2CodecProfile)
mpeg2Settings_codecProfile = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Mpeg2CodecProfile
codecProfile :: Maybe Mpeg2CodecProfile
$sel:codecProfile:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2CodecProfile
codecProfile} -> Maybe Mpeg2CodecProfile
codecProfile) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Mpeg2CodecProfile
a -> Mpeg2Settings
s {$sel:codecProfile:Mpeg2Settings' :: Maybe Mpeg2CodecProfile
codecProfile = Maybe Mpeg2CodecProfile
a} :: Mpeg2Settings)

-- | 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 (numberBFramesBetweenReferenceFrames).
mpeg2Settings_dynamicSubGop :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Mpeg2DynamicSubGop)
mpeg2Settings_dynamicSubGop :: Lens' Mpeg2Settings (Maybe Mpeg2DynamicSubGop)
mpeg2Settings_dynamicSubGop = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Mpeg2DynamicSubGop
dynamicSubGop :: Maybe Mpeg2DynamicSubGop
$sel:dynamicSubGop:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2DynamicSubGop
dynamicSubGop} -> Maybe Mpeg2DynamicSubGop
dynamicSubGop) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Mpeg2DynamicSubGop
a -> Mpeg2Settings
s {$sel:dynamicSubGop:Mpeg2Settings' :: Maybe Mpeg2DynamicSubGop
dynamicSubGop = Maybe Mpeg2DynamicSubGop
a} :: Mpeg2Settings)

-- | 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.
-- If you are creating your transcoding job specification as a JSON file
-- without the console, use FramerateControl to specify which value the
-- service uses for the frame rate for this output. Choose
-- INITIALIZE_FROM_SOURCE if you want the service to use the frame rate
-- from the input. Choose SPECIFIED if you want the service to use the
-- frame rate you specify in the settings FramerateNumerator and
-- FramerateDenominator.
mpeg2Settings_framerateControl :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Mpeg2FramerateControl)
mpeg2Settings_framerateControl :: Lens' Mpeg2Settings (Maybe Mpeg2FramerateControl)
mpeg2Settings_framerateControl = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Mpeg2FramerateControl
framerateControl :: Maybe Mpeg2FramerateControl
$sel:framerateControl:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2FramerateControl
framerateControl} -> Maybe Mpeg2FramerateControl
framerateControl) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Mpeg2FramerateControl
a -> Mpeg2Settings
s {$sel:framerateControl:Mpeg2Settings' :: Maybe Mpeg2FramerateControl
framerateControl = Maybe Mpeg2FramerateControl
a} :: Mpeg2Settings)

-- | Choose the method that you want MediaConvert to use when increasing or
-- decreasing the frame rate. We recommend using drop duplicate
-- (DUPLICATE_DROP) for numerically simple conversions, such as 60 fps to
-- 30 fps. For numerically complex conversions, you can use interpolate
-- (INTERPOLATE) to avoid stutter. 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, use FrameFormer (FRAMEFORMER) to do
-- motion-compensated interpolation. FrameFormer chooses the best
-- conversion method frame by frame. Note that using FrameFormer increases
-- the transcoding time and incurs a significant add-on cost.
mpeg2Settings_framerateConversionAlgorithm :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Mpeg2FramerateConversionAlgorithm)
mpeg2Settings_framerateConversionAlgorithm :: Lens' Mpeg2Settings (Maybe Mpeg2FramerateConversionAlgorithm)
mpeg2Settings_framerateConversionAlgorithm = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Mpeg2FramerateConversionAlgorithm
framerateConversionAlgorithm :: Maybe Mpeg2FramerateConversionAlgorithm
$sel:framerateConversionAlgorithm:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2FramerateConversionAlgorithm
framerateConversionAlgorithm} -> Maybe Mpeg2FramerateConversionAlgorithm
framerateConversionAlgorithm) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Mpeg2FramerateConversionAlgorithm
a -> Mpeg2Settings
s {$sel:framerateConversionAlgorithm:Mpeg2Settings' :: Maybe Mpeg2FramerateConversionAlgorithm
framerateConversionAlgorithm = Maybe Mpeg2FramerateConversionAlgorithm
a} :: Mpeg2Settings)

-- | 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.
mpeg2Settings_framerateDenominator :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Prelude.Natural)
mpeg2Settings_framerateDenominator :: Lens' Mpeg2Settings (Maybe Natural)
mpeg2Settings_framerateDenominator = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Natural
framerateDenominator :: Maybe Natural
$sel:framerateDenominator:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
framerateDenominator} -> Maybe Natural
framerateDenominator) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Natural
a -> Mpeg2Settings
s {$sel:framerateDenominator:Mpeg2Settings' :: Maybe Natural
framerateDenominator = Maybe Natural
a} :: Mpeg2Settings)

-- | 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.
mpeg2Settings_framerateNumerator :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Prelude.Natural)
mpeg2Settings_framerateNumerator :: Lens' Mpeg2Settings (Maybe Natural)
mpeg2Settings_framerateNumerator = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Natural
framerateNumerator :: Maybe Natural
$sel:framerateNumerator:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
framerateNumerator} -> Maybe Natural
framerateNumerator) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Natural
a -> Mpeg2Settings
s {$sel:framerateNumerator:Mpeg2Settings' :: Maybe Natural
framerateNumerator = Maybe Natural
a} :: Mpeg2Settings)

-- | 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.
mpeg2Settings_gopClosedCadence :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Prelude.Natural)
mpeg2Settings_gopClosedCadence :: Lens' Mpeg2Settings (Maybe Natural)
mpeg2Settings_gopClosedCadence = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Natural
gopClosedCadence :: Maybe Natural
$sel:gopClosedCadence:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
gopClosedCadence} -> Maybe Natural
gopClosedCadence) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Natural
a -> Mpeg2Settings
s {$sel:gopClosedCadence:Mpeg2Settings' :: Maybe Natural
gopClosedCadence = Maybe Natural
a} :: Mpeg2Settings)

-- | 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 (GopSizeUnits) to Specified, seconds
-- (SECONDS). The default value for GOP mode control (GopSizeUnits) is
-- Frames (FRAMES).
mpeg2Settings_gopSize :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Prelude.Double)
mpeg2Settings_gopSize :: Lens' Mpeg2Settings (Maybe Double)
mpeg2Settings_gopSize = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Double
gopSize :: Maybe Double
$sel:gopSize:Mpeg2Settings' :: Mpeg2Settings -> Maybe Double
gopSize} -> Maybe Double
gopSize) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Double
a -> Mpeg2Settings
s {$sel:gopSize:Mpeg2Settings' :: Maybe Double
gopSize = Maybe Double
a} :: Mpeg2Settings)

-- | Specify the units for GOP size (GopSize). If you don\'t specify a value
-- here, by default the encoder measures GOP size in frames.
mpeg2Settings_gopSizeUnits :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Mpeg2GopSizeUnits)
mpeg2Settings_gopSizeUnits :: Lens' Mpeg2Settings (Maybe Mpeg2GopSizeUnits)
mpeg2Settings_gopSizeUnits = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Mpeg2GopSizeUnits
gopSizeUnits :: Maybe Mpeg2GopSizeUnits
$sel:gopSizeUnits:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2GopSizeUnits
gopSizeUnits} -> Maybe Mpeg2GopSizeUnits
gopSizeUnits) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Mpeg2GopSizeUnits
a -> Mpeg2Settings
s {$sel:gopSizeUnits:Mpeg2Settings' :: Maybe Mpeg2GopSizeUnits
gopSizeUnits = Maybe Mpeg2GopSizeUnits
a} :: Mpeg2Settings)

-- | 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.
mpeg2Settings_hrdBufferFinalFillPercentage :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Prelude.Natural)
mpeg2Settings_hrdBufferFinalFillPercentage :: Lens' Mpeg2Settings (Maybe Natural)
mpeg2Settings_hrdBufferFinalFillPercentage = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Natural
hrdBufferFinalFillPercentage :: Maybe Natural
$sel:hrdBufferFinalFillPercentage:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
hrdBufferFinalFillPercentage} -> Maybe Natural
hrdBufferFinalFillPercentage) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Natural
a -> Mpeg2Settings
s {$sel:hrdBufferFinalFillPercentage:Mpeg2Settings' :: Maybe Natural
hrdBufferFinalFillPercentage = Maybe Natural
a} :: Mpeg2Settings)

-- | Percentage of the buffer that should initially be filled (HRD buffer
-- model).
mpeg2Settings_hrdBufferInitialFillPercentage :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Prelude.Natural)
mpeg2Settings_hrdBufferInitialFillPercentage :: Lens' Mpeg2Settings (Maybe Natural)
mpeg2Settings_hrdBufferInitialFillPercentage = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Natural
hrdBufferInitialFillPercentage :: Maybe Natural
$sel:hrdBufferInitialFillPercentage:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
hrdBufferInitialFillPercentage} -> Maybe Natural
hrdBufferInitialFillPercentage) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Natural
a -> Mpeg2Settings
s {$sel:hrdBufferInitialFillPercentage:Mpeg2Settings' :: Maybe Natural
hrdBufferInitialFillPercentage = Maybe Natural
a} :: Mpeg2Settings)

-- | Size of buffer (HRD buffer model) in bits. For example, enter five
-- megabits as 5000000.
mpeg2Settings_hrdBufferSize :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Prelude.Natural)
mpeg2Settings_hrdBufferSize :: Lens' Mpeg2Settings (Maybe Natural)
mpeg2Settings_hrdBufferSize = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Natural
hrdBufferSize :: Maybe Natural
$sel:hrdBufferSize:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
hrdBufferSize} -> Maybe Natural
hrdBufferSize) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Natural
a -> Mpeg2Settings
s {$sel:hrdBufferSize:Mpeg2Settings' :: Maybe Natural
hrdBufferSize = Maybe Natural
a} :: Mpeg2Settings)

-- | Choose the scan line type for the output. Keep the default value,
-- Progressive (PROGRESSIVE) to create a progressive output, regardless of
-- the scan type of your input. Use Top field first (TOP_FIELD) or Bottom
-- field first (BOTTOM_FIELD) to create an output that\'s interlaced with
-- the same field polarity throughout. Use Follow, default top
-- (FOLLOW_TOP_FIELD) or Follow, default bottom (FOLLOW_BOTTOM_FIELD) 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.
mpeg2Settings_interlaceMode :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Mpeg2InterlaceMode)
mpeg2Settings_interlaceMode :: Lens' Mpeg2Settings (Maybe Mpeg2InterlaceMode)
mpeg2Settings_interlaceMode = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Mpeg2InterlaceMode
interlaceMode :: Maybe Mpeg2InterlaceMode
$sel:interlaceMode:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2InterlaceMode
interlaceMode} -> Maybe Mpeg2InterlaceMode
interlaceMode) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Mpeg2InterlaceMode
a -> Mpeg2Settings
s {$sel:interlaceMode:Mpeg2Settings' :: Maybe Mpeg2InterlaceMode
interlaceMode = Maybe Mpeg2InterlaceMode
a} :: Mpeg2Settings)

-- | Use Intra DC precision (Mpeg2IntraDcPrecision) 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.
mpeg2Settings_intraDcPrecision :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Mpeg2IntraDcPrecision)
mpeg2Settings_intraDcPrecision :: Lens' Mpeg2Settings (Maybe Mpeg2IntraDcPrecision)
mpeg2Settings_intraDcPrecision = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Mpeg2IntraDcPrecision
intraDcPrecision :: Maybe Mpeg2IntraDcPrecision
$sel:intraDcPrecision:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2IntraDcPrecision
intraDcPrecision} -> Maybe Mpeg2IntraDcPrecision
intraDcPrecision) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Mpeg2IntraDcPrecision
a -> Mpeg2Settings
s {$sel:intraDcPrecision:Mpeg2Settings' :: Maybe Mpeg2IntraDcPrecision
intraDcPrecision = Maybe Mpeg2IntraDcPrecision
a} :: Mpeg2Settings)

-- | Maximum bitrate in bits\/second. For example, enter five megabits per
-- second as 5000000.
mpeg2Settings_maxBitrate :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Prelude.Natural)
mpeg2Settings_maxBitrate :: Lens' Mpeg2Settings (Maybe Natural)
mpeg2Settings_maxBitrate = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Natural
maxBitrate :: Maybe Natural
$sel:maxBitrate:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
maxBitrate} -> Maybe Natural
maxBitrate) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Natural
a -> Mpeg2Settings
s {$sel:maxBitrate:Mpeg2Settings' :: Maybe Natural
maxBitrate = Maybe Natural
a} :: Mpeg2Settings)

-- | Use this setting only when you also enable Scene change detection
-- (SceneChangeDetect). 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 (minIInterval) 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.
mpeg2Settings_minIInterval :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Prelude.Natural)
mpeg2Settings_minIInterval :: Lens' Mpeg2Settings (Maybe Natural)
mpeg2Settings_minIInterval = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Natural
minIInterval :: Maybe Natural
$sel:minIInterval:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
minIInterval} -> Maybe Natural
minIInterval) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Natural
a -> Mpeg2Settings
s {$sel:minIInterval:Mpeg2Settings' :: Maybe Natural
minIInterval = Maybe Natural
a} :: Mpeg2Settings)

-- | 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.
mpeg2Settings_numberBFramesBetweenReferenceFrames :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Prelude.Natural)
mpeg2Settings_numberBFramesBetweenReferenceFrames :: Lens' Mpeg2Settings (Maybe Natural)
mpeg2Settings_numberBFramesBetweenReferenceFrames = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Natural
numberBFramesBetweenReferenceFrames :: Maybe Natural
$sel:numberBFramesBetweenReferenceFrames:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
numberBFramesBetweenReferenceFrames} -> Maybe Natural
numberBFramesBetweenReferenceFrames) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Natural
a -> Mpeg2Settings
s {$sel:numberBFramesBetweenReferenceFrames:Mpeg2Settings' :: Maybe Natural
numberBFramesBetweenReferenceFrames = Maybe Natural
a} :: Mpeg2Settings)

-- | Optional. Specify how the service determines the pixel aspect ratio
-- (PAR) for this output. The default behavior, Follow source
-- (INITIALIZE_FROM_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. To specify a different PAR by editing the JSON
-- job specification, choose SPECIFIED. When you choose SPECIFIED for this
-- setting, you must also specify values for the parNumerator and
-- parDenominator settings.
mpeg2Settings_parControl :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Mpeg2ParControl)
mpeg2Settings_parControl :: Lens' Mpeg2Settings (Maybe Mpeg2ParControl)
mpeg2Settings_parControl = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Mpeg2ParControl
parControl :: Maybe Mpeg2ParControl
$sel:parControl:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2ParControl
parControl} -> Maybe Mpeg2ParControl
parControl) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Mpeg2ParControl
a -> Mpeg2Settings
s {$sel:parControl:Mpeg2Settings' :: Maybe Mpeg2ParControl
parControl = Maybe Mpeg2ParControl
a} :: Mpeg2Settings)

-- | Required when you set Pixel aspect ratio (parControl) 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.
mpeg2Settings_parDenominator :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Prelude.Natural)
mpeg2Settings_parDenominator :: Lens' Mpeg2Settings (Maybe Natural)
mpeg2Settings_parDenominator = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Natural
parDenominator :: Maybe Natural
$sel:parDenominator:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
parDenominator} -> Maybe Natural
parDenominator) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Natural
a -> Mpeg2Settings
s {$sel:parDenominator:Mpeg2Settings' :: Maybe Natural
parDenominator = Maybe Natural
a} :: Mpeg2Settings)

-- | Required when you set Pixel aspect ratio (parControl) 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.
mpeg2Settings_parNumerator :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Prelude.Natural)
mpeg2Settings_parNumerator :: Lens' Mpeg2Settings (Maybe Natural)
mpeg2Settings_parNumerator = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Natural
parNumerator :: Maybe Natural
$sel:parNumerator:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
parNumerator} -> Maybe Natural
parNumerator) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Natural
a -> Mpeg2Settings
s {$sel:parNumerator:Mpeg2Settings' :: Maybe Natural
parNumerator = Maybe Natural
a} :: Mpeg2Settings)

-- | Optional. Use Quality tuning level (qualityTuningLevel) to choose how
-- you want to trade off encoding speed for output video quality. The
-- default behavior is faster, lower quality, single-pass encoding.
mpeg2Settings_qualityTuningLevel :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Mpeg2QualityTuningLevel)
mpeg2Settings_qualityTuningLevel :: Lens' Mpeg2Settings (Maybe Mpeg2QualityTuningLevel)
mpeg2Settings_qualityTuningLevel = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Mpeg2QualityTuningLevel
qualityTuningLevel :: Maybe Mpeg2QualityTuningLevel
$sel:qualityTuningLevel:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2QualityTuningLevel
qualityTuningLevel} -> Maybe Mpeg2QualityTuningLevel
qualityTuningLevel) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Mpeg2QualityTuningLevel
a -> Mpeg2Settings
s {$sel:qualityTuningLevel:Mpeg2Settings' :: Maybe Mpeg2QualityTuningLevel
qualityTuningLevel = Maybe Mpeg2QualityTuningLevel
a} :: Mpeg2Settings)

-- | Use Rate control mode (Mpeg2RateControlMode) to specify whether the
-- bitrate is variable (vbr) or constant (cbr).
mpeg2Settings_rateControlMode :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Mpeg2RateControlMode)
mpeg2Settings_rateControlMode :: Lens' Mpeg2Settings (Maybe Mpeg2RateControlMode)
mpeg2Settings_rateControlMode = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Mpeg2RateControlMode
rateControlMode :: Maybe Mpeg2RateControlMode
$sel:rateControlMode:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2RateControlMode
rateControlMode} -> Maybe Mpeg2RateControlMode
rateControlMode) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Mpeg2RateControlMode
a -> Mpeg2Settings
s {$sel:rateControlMode:Mpeg2Settings' :: Maybe Mpeg2RateControlMode
rateControlMode = Maybe Mpeg2RateControlMode
a} :: Mpeg2Settings)

-- | Use this setting for interlaced outputs, when your output frame rate is
-- half of your input frame rate. In this situation, choose Optimized
-- interlacing (INTERLACED_OPTIMIZE) 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 (INTERLACED), 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 (telecine) to None (NONE) or Soft (SOFT). You can\'t use
-- optimized interlacing for hard telecine outputs. You must also set
-- Interlace mode (interlaceMode) to a value other than Progressive
-- (PROGRESSIVE).
mpeg2Settings_scanTypeConversionMode :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Mpeg2ScanTypeConversionMode)
mpeg2Settings_scanTypeConversionMode :: Lens' Mpeg2Settings (Maybe Mpeg2ScanTypeConversionMode)
mpeg2Settings_scanTypeConversionMode = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Mpeg2ScanTypeConversionMode
scanTypeConversionMode :: Maybe Mpeg2ScanTypeConversionMode
$sel:scanTypeConversionMode:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2ScanTypeConversionMode
scanTypeConversionMode} -> Maybe Mpeg2ScanTypeConversionMode
scanTypeConversionMode) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Mpeg2ScanTypeConversionMode
a -> Mpeg2Settings
s {$sel:scanTypeConversionMode:Mpeg2Settings' :: Maybe Mpeg2ScanTypeConversionMode
scanTypeConversionMode = Maybe Mpeg2ScanTypeConversionMode
a} :: Mpeg2Settings)

-- | Enable this setting to insert I-frames at scene changes that the service
-- automatically detects. This improves video quality and is enabled by
-- default.
mpeg2Settings_sceneChangeDetect :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Mpeg2SceneChangeDetect)
mpeg2Settings_sceneChangeDetect :: Lens' Mpeg2Settings (Maybe Mpeg2SceneChangeDetect)
mpeg2Settings_sceneChangeDetect = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Mpeg2SceneChangeDetect
sceneChangeDetect :: Maybe Mpeg2SceneChangeDetect
$sel:sceneChangeDetect:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2SceneChangeDetect
sceneChangeDetect} -> Maybe Mpeg2SceneChangeDetect
sceneChangeDetect) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Mpeg2SceneChangeDetect
a -> Mpeg2Settings
s {$sel:sceneChangeDetect:Mpeg2Settings' :: Maybe Mpeg2SceneChangeDetect
sceneChangeDetect = Maybe Mpeg2SceneChangeDetect
a} :: Mpeg2Settings)

-- | 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. In your JSON job
-- specification, set (framerateControl) to (SPECIFIED),
-- (framerateNumerator) to 25 and (framerateDenominator) to 1.
mpeg2Settings_slowPal :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Mpeg2SlowPal)
mpeg2Settings_slowPal :: Lens' Mpeg2Settings (Maybe Mpeg2SlowPal)
mpeg2Settings_slowPal = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Mpeg2SlowPal
slowPal :: Maybe Mpeg2SlowPal
$sel:slowPal:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2SlowPal
slowPal} -> Maybe Mpeg2SlowPal
slowPal) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Mpeg2SlowPal
a -> Mpeg2Settings
s {$sel:slowPal:Mpeg2Settings' :: Maybe Mpeg2SlowPal
slowPal = Maybe Mpeg2SlowPal
a} :: Mpeg2Settings)

-- | 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 (sharpness) or by enabling
-- a noise reducer filter (noiseReducerFilter). The Softness (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.
mpeg2Settings_softness :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Prelude.Natural)
mpeg2Settings_softness :: Lens' Mpeg2Settings (Maybe Natural)
mpeg2Settings_softness = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Natural
softness :: Maybe Natural
$sel:softness:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
softness} -> Maybe Natural
softness) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Natural
a -> Mpeg2Settings
s {$sel:softness:Mpeg2Settings' :: Maybe Natural
softness = Maybe Natural
a} :: Mpeg2Settings)

-- | Keep the default value, Enabled (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
-- (adaptiveQuantization) 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.
mpeg2Settings_spatialAdaptiveQuantization :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Mpeg2SpatialAdaptiveQuantization)
mpeg2Settings_spatialAdaptiveQuantization :: Lens' Mpeg2Settings (Maybe Mpeg2SpatialAdaptiveQuantization)
mpeg2Settings_spatialAdaptiveQuantization = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Mpeg2SpatialAdaptiveQuantization
spatialAdaptiveQuantization :: Maybe Mpeg2SpatialAdaptiveQuantization
$sel:spatialAdaptiveQuantization:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2SpatialAdaptiveQuantization
spatialAdaptiveQuantization} -> Maybe Mpeg2SpatialAdaptiveQuantization
spatialAdaptiveQuantization) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Mpeg2SpatialAdaptiveQuantization
a -> Mpeg2Settings
s {$sel:spatialAdaptiveQuantization:Mpeg2Settings' :: Maybe Mpeg2SpatialAdaptiveQuantization
spatialAdaptiveQuantization = Maybe Mpeg2SpatialAdaptiveQuantization
a} :: Mpeg2Settings)

-- | 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 (D_10) for your MXF profile (profile), you must also set this value
-- to D10 (D_10).
mpeg2Settings_syntax :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Mpeg2Syntax)
mpeg2Settings_syntax :: Lens' Mpeg2Settings (Maybe Mpeg2Syntax)
mpeg2Settings_syntax = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Mpeg2Syntax
syntax :: Maybe Mpeg2Syntax
$sel:syntax:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2Syntax
syntax} -> Maybe Mpeg2Syntax
syntax) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Mpeg2Syntax
a -> Mpeg2Settings
s {$sel:syntax:Mpeg2Settings' :: Maybe Mpeg2Syntax
syntax = Maybe Mpeg2Syntax
a} :: Mpeg2Settings)

-- | 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
-- (HARD) produces a 29.97i output. Soft telecine (SOFT) 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
-- (NONE), MediaConvert does a standard frame rate conversion to 29.97
-- without doing anything with the field polarity to create a smoother
-- picture.
mpeg2Settings_telecine :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Mpeg2Telecine)
mpeg2Settings_telecine :: Lens' Mpeg2Settings (Maybe Mpeg2Telecine)
mpeg2Settings_telecine = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Mpeg2Telecine
telecine :: Maybe Mpeg2Telecine
$sel:telecine:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2Telecine
telecine} -> Maybe Mpeg2Telecine
telecine) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Mpeg2Telecine
a -> Mpeg2Settings
s {$sel:telecine:Mpeg2Settings' :: Maybe Mpeg2Telecine
telecine = Maybe Mpeg2Telecine
a} :: Mpeg2Settings)

-- | Keep the default value, Enabled (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 (adaptiveQuantization).
mpeg2Settings_temporalAdaptiveQuantization :: Lens.Lens' Mpeg2Settings (Prelude.Maybe Mpeg2TemporalAdaptiveQuantization)
mpeg2Settings_temporalAdaptiveQuantization :: Lens' Mpeg2Settings (Maybe Mpeg2TemporalAdaptiveQuantization)
mpeg2Settings_temporalAdaptiveQuantization = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Mpeg2Settings' {Maybe Mpeg2TemporalAdaptiveQuantization
temporalAdaptiveQuantization :: Maybe Mpeg2TemporalAdaptiveQuantization
$sel:temporalAdaptiveQuantization:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2TemporalAdaptiveQuantization
temporalAdaptiveQuantization} -> Maybe Mpeg2TemporalAdaptiveQuantization
temporalAdaptiveQuantization) (\s :: Mpeg2Settings
s@Mpeg2Settings' {} Maybe Mpeg2TemporalAdaptiveQuantization
a -> Mpeg2Settings
s {$sel:temporalAdaptiveQuantization:Mpeg2Settings' :: Maybe Mpeg2TemporalAdaptiveQuantization
temporalAdaptiveQuantization = Maybe Mpeg2TemporalAdaptiveQuantization
a} :: Mpeg2Settings)

instance Data.FromJSON Mpeg2Settings where
  parseJSON :: Value -> Parser Mpeg2Settings
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"Mpeg2Settings"
      ( \Object
x ->
          Maybe Mpeg2AdaptiveQuantization
-> Maybe Natural
-> Maybe Mpeg2CodecLevel
-> Maybe Mpeg2CodecProfile
-> Maybe Mpeg2DynamicSubGop
-> Maybe Mpeg2FramerateControl
-> Maybe Mpeg2FramerateConversionAlgorithm
-> Maybe Natural
-> Maybe Natural
-> Maybe Natural
-> Maybe Double
-> Maybe Mpeg2GopSizeUnits
-> Maybe Natural
-> Maybe Natural
-> Maybe Natural
-> Maybe Mpeg2InterlaceMode
-> Maybe Mpeg2IntraDcPrecision
-> Maybe Natural
-> Maybe Natural
-> Maybe Natural
-> Maybe Mpeg2ParControl
-> Maybe Natural
-> Maybe Natural
-> Maybe Mpeg2QualityTuningLevel
-> Maybe Mpeg2RateControlMode
-> Maybe Mpeg2ScanTypeConversionMode
-> Maybe Mpeg2SceneChangeDetect
-> Maybe Mpeg2SlowPal
-> Maybe Natural
-> Maybe Mpeg2SpatialAdaptiveQuantization
-> Maybe Mpeg2Syntax
-> Maybe Mpeg2Telecine
-> Maybe Mpeg2TemporalAdaptiveQuantization
-> Mpeg2Settings
Mpeg2Settings'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"adaptiveQuantization")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"bitrate")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"codecLevel")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"codecProfile")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"dynamicSubGop")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"framerateControl")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"framerateConversionAlgorithm")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"framerateDenominator")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"framerateNumerator")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"gopClosedCadence")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"gopSize")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"gopSizeUnits")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"hrdBufferFinalFillPercentage")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"hrdBufferInitialFillPercentage")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"hrdBufferSize")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"interlaceMode")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"intraDcPrecision")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"maxBitrate")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"minIInterval")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"numberBFramesBetweenReferenceFrames")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"parControl")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"parDenominator")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"parNumerator")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"qualityTuningLevel")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"rateControlMode")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"scanTypeConversionMode")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"sceneChangeDetect")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"slowPal")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"softness")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"spatialAdaptiveQuantization")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"syntax")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"telecine")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"temporalAdaptiveQuantization")
      )

instance Prelude.Hashable Mpeg2Settings where
  hashWithSalt :: Int -> Mpeg2Settings -> Int
hashWithSalt Int
_salt Mpeg2Settings' {Maybe Double
Maybe Natural
Maybe Mpeg2AdaptiveQuantization
Maybe Mpeg2CodecLevel
Maybe Mpeg2CodecProfile
Maybe Mpeg2DynamicSubGop
Maybe Mpeg2FramerateControl
Maybe Mpeg2FramerateConversionAlgorithm
Maybe Mpeg2GopSizeUnits
Maybe Mpeg2InterlaceMode
Maybe Mpeg2IntraDcPrecision
Maybe Mpeg2ParControl
Maybe Mpeg2QualityTuningLevel
Maybe Mpeg2RateControlMode
Maybe Mpeg2ScanTypeConversionMode
Maybe Mpeg2SceneChangeDetect
Maybe Mpeg2SlowPal
Maybe Mpeg2SpatialAdaptiveQuantization
Maybe Mpeg2Syntax
Maybe Mpeg2Telecine
Maybe Mpeg2TemporalAdaptiveQuantization
temporalAdaptiveQuantization :: Maybe Mpeg2TemporalAdaptiveQuantization
telecine :: Maybe Mpeg2Telecine
syntax :: Maybe Mpeg2Syntax
spatialAdaptiveQuantization :: Maybe Mpeg2SpatialAdaptiveQuantization
softness :: Maybe Natural
slowPal :: Maybe Mpeg2SlowPal
sceneChangeDetect :: Maybe Mpeg2SceneChangeDetect
scanTypeConversionMode :: Maybe Mpeg2ScanTypeConversionMode
rateControlMode :: Maybe Mpeg2RateControlMode
qualityTuningLevel :: Maybe Mpeg2QualityTuningLevel
parNumerator :: Maybe Natural
parDenominator :: Maybe Natural
parControl :: Maybe Mpeg2ParControl
numberBFramesBetweenReferenceFrames :: Maybe Natural
minIInterval :: Maybe Natural
maxBitrate :: Maybe Natural
intraDcPrecision :: Maybe Mpeg2IntraDcPrecision
interlaceMode :: Maybe Mpeg2InterlaceMode
hrdBufferSize :: Maybe Natural
hrdBufferInitialFillPercentage :: Maybe Natural
hrdBufferFinalFillPercentage :: Maybe Natural
gopSizeUnits :: Maybe Mpeg2GopSizeUnits
gopSize :: Maybe Double
gopClosedCadence :: Maybe Natural
framerateNumerator :: Maybe Natural
framerateDenominator :: Maybe Natural
framerateConversionAlgorithm :: Maybe Mpeg2FramerateConversionAlgorithm
framerateControl :: Maybe Mpeg2FramerateControl
dynamicSubGop :: Maybe Mpeg2DynamicSubGop
codecProfile :: Maybe Mpeg2CodecProfile
codecLevel :: Maybe Mpeg2CodecLevel
bitrate :: Maybe Natural
adaptiveQuantization :: Maybe Mpeg2AdaptiveQuantization
$sel:temporalAdaptiveQuantization:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2TemporalAdaptiveQuantization
$sel:telecine:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2Telecine
$sel:syntax:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2Syntax
$sel:spatialAdaptiveQuantization:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2SpatialAdaptiveQuantization
$sel:softness:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:slowPal:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2SlowPal
$sel:sceneChangeDetect:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2SceneChangeDetect
$sel:scanTypeConversionMode:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2ScanTypeConversionMode
$sel:rateControlMode:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2RateControlMode
$sel:qualityTuningLevel:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2QualityTuningLevel
$sel:parNumerator:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:parDenominator:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:parControl:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2ParControl
$sel:numberBFramesBetweenReferenceFrames:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:minIInterval:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:maxBitrate:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:intraDcPrecision:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2IntraDcPrecision
$sel:interlaceMode:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2InterlaceMode
$sel:hrdBufferSize:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:hrdBufferInitialFillPercentage:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:hrdBufferFinalFillPercentage:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:gopSizeUnits:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2GopSizeUnits
$sel:gopSize:Mpeg2Settings' :: Mpeg2Settings -> Maybe Double
$sel:gopClosedCadence:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:framerateNumerator:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:framerateDenominator:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:framerateConversionAlgorithm:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2FramerateConversionAlgorithm
$sel:framerateControl:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2FramerateControl
$sel:dynamicSubGop:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2DynamicSubGop
$sel:codecProfile:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2CodecProfile
$sel:codecLevel:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2CodecLevel
$sel:bitrate:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:adaptiveQuantization:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2AdaptiveQuantization
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Mpeg2AdaptiveQuantization
adaptiveQuantization
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
bitrate
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Mpeg2CodecLevel
codecLevel
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Mpeg2CodecProfile
codecProfile
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Mpeg2DynamicSubGop
dynamicSubGop
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Mpeg2FramerateControl
framerateControl
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Mpeg2FramerateConversionAlgorithm
framerateConversionAlgorithm
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
framerateDenominator
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
framerateNumerator
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
gopClosedCadence
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Double
gopSize
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Mpeg2GopSizeUnits
gopSizeUnits
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
hrdBufferFinalFillPercentage
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
hrdBufferInitialFillPercentage
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
hrdBufferSize
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Mpeg2InterlaceMode
interlaceMode
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Mpeg2IntraDcPrecision
intraDcPrecision
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
maxBitrate
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
minIInterval
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
numberBFramesBetweenReferenceFrames
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Mpeg2ParControl
parControl
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
parDenominator
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
parNumerator
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Mpeg2QualityTuningLevel
qualityTuningLevel
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Mpeg2RateControlMode
rateControlMode
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Mpeg2ScanTypeConversionMode
scanTypeConversionMode
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Mpeg2SceneChangeDetect
sceneChangeDetect
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Mpeg2SlowPal
slowPal
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
softness
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Mpeg2SpatialAdaptiveQuantization
spatialAdaptiveQuantization
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Mpeg2Syntax
syntax
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Mpeg2Telecine
telecine
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Mpeg2TemporalAdaptiveQuantization
temporalAdaptiveQuantization

instance Prelude.NFData Mpeg2Settings where
  rnf :: Mpeg2Settings -> ()
rnf Mpeg2Settings' {Maybe Double
Maybe Natural
Maybe Mpeg2AdaptiveQuantization
Maybe Mpeg2CodecLevel
Maybe Mpeg2CodecProfile
Maybe Mpeg2DynamicSubGop
Maybe Mpeg2FramerateControl
Maybe Mpeg2FramerateConversionAlgorithm
Maybe Mpeg2GopSizeUnits
Maybe Mpeg2InterlaceMode
Maybe Mpeg2IntraDcPrecision
Maybe Mpeg2ParControl
Maybe Mpeg2QualityTuningLevel
Maybe Mpeg2RateControlMode
Maybe Mpeg2ScanTypeConversionMode
Maybe Mpeg2SceneChangeDetect
Maybe Mpeg2SlowPal
Maybe Mpeg2SpatialAdaptiveQuantization
Maybe Mpeg2Syntax
Maybe Mpeg2Telecine
Maybe Mpeg2TemporalAdaptiveQuantization
temporalAdaptiveQuantization :: Maybe Mpeg2TemporalAdaptiveQuantization
telecine :: Maybe Mpeg2Telecine
syntax :: Maybe Mpeg2Syntax
spatialAdaptiveQuantization :: Maybe Mpeg2SpatialAdaptiveQuantization
softness :: Maybe Natural
slowPal :: Maybe Mpeg2SlowPal
sceneChangeDetect :: Maybe Mpeg2SceneChangeDetect
scanTypeConversionMode :: Maybe Mpeg2ScanTypeConversionMode
rateControlMode :: Maybe Mpeg2RateControlMode
qualityTuningLevel :: Maybe Mpeg2QualityTuningLevel
parNumerator :: Maybe Natural
parDenominator :: Maybe Natural
parControl :: Maybe Mpeg2ParControl
numberBFramesBetweenReferenceFrames :: Maybe Natural
minIInterval :: Maybe Natural
maxBitrate :: Maybe Natural
intraDcPrecision :: Maybe Mpeg2IntraDcPrecision
interlaceMode :: Maybe Mpeg2InterlaceMode
hrdBufferSize :: Maybe Natural
hrdBufferInitialFillPercentage :: Maybe Natural
hrdBufferFinalFillPercentage :: Maybe Natural
gopSizeUnits :: Maybe Mpeg2GopSizeUnits
gopSize :: Maybe Double
gopClosedCadence :: Maybe Natural
framerateNumerator :: Maybe Natural
framerateDenominator :: Maybe Natural
framerateConversionAlgorithm :: Maybe Mpeg2FramerateConversionAlgorithm
framerateControl :: Maybe Mpeg2FramerateControl
dynamicSubGop :: Maybe Mpeg2DynamicSubGop
codecProfile :: Maybe Mpeg2CodecProfile
codecLevel :: Maybe Mpeg2CodecLevel
bitrate :: Maybe Natural
adaptiveQuantization :: Maybe Mpeg2AdaptiveQuantization
$sel:temporalAdaptiveQuantization:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2TemporalAdaptiveQuantization
$sel:telecine:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2Telecine
$sel:syntax:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2Syntax
$sel:spatialAdaptiveQuantization:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2SpatialAdaptiveQuantization
$sel:softness:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:slowPal:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2SlowPal
$sel:sceneChangeDetect:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2SceneChangeDetect
$sel:scanTypeConversionMode:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2ScanTypeConversionMode
$sel:rateControlMode:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2RateControlMode
$sel:qualityTuningLevel:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2QualityTuningLevel
$sel:parNumerator:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:parDenominator:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:parControl:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2ParControl
$sel:numberBFramesBetweenReferenceFrames:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:minIInterval:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:maxBitrate:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:intraDcPrecision:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2IntraDcPrecision
$sel:interlaceMode:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2InterlaceMode
$sel:hrdBufferSize:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:hrdBufferInitialFillPercentage:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:hrdBufferFinalFillPercentage:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:gopSizeUnits:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2GopSizeUnits
$sel:gopSize:Mpeg2Settings' :: Mpeg2Settings -> Maybe Double
$sel:gopClosedCadence:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:framerateNumerator:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:framerateDenominator:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:framerateConversionAlgorithm:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2FramerateConversionAlgorithm
$sel:framerateControl:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2FramerateControl
$sel:dynamicSubGop:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2DynamicSubGop
$sel:codecProfile:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2CodecProfile
$sel:codecLevel:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2CodecLevel
$sel:bitrate:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:adaptiveQuantization:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2AdaptiveQuantization
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Mpeg2AdaptiveQuantization
adaptiveQuantization
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
bitrate
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Mpeg2CodecLevel
codecLevel
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Mpeg2CodecProfile
codecProfile
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Mpeg2DynamicSubGop
dynamicSubGop
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Mpeg2FramerateControl
framerateControl
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Mpeg2FramerateConversionAlgorithm
framerateConversionAlgorithm
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
framerateDenominator
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
framerateNumerator
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
gopClosedCadence
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Double
gopSize
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Mpeg2GopSizeUnits
gopSizeUnits
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
hrdBufferFinalFillPercentage
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
hrdBufferInitialFillPercentage
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
hrdBufferSize
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Mpeg2InterlaceMode
interlaceMode
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Mpeg2IntraDcPrecision
intraDcPrecision
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
maxBitrate
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
minIInterval
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe Natural
numberBFramesBetweenReferenceFrames
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Mpeg2ParControl
parControl
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
parDenominator
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
parNumerator
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe Mpeg2QualityTuningLevel
qualityTuningLevel
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe Mpeg2RateControlMode
rateControlMode
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe Mpeg2ScanTypeConversionMode
scanTypeConversionMode
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe Mpeg2SceneChangeDetect
sceneChangeDetect
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe Mpeg2SlowPal
slowPal
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe Natural
softness
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe Mpeg2SpatialAdaptiveQuantization
spatialAdaptiveQuantization
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe Mpeg2Syntax
syntax
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe Mpeg2Telecine
telecine
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe Mpeg2TemporalAdaptiveQuantization
temporalAdaptiveQuantization

instance Data.ToJSON Mpeg2Settings where
  toJSON :: Mpeg2Settings -> Value
toJSON Mpeg2Settings' {Maybe Double
Maybe Natural
Maybe Mpeg2AdaptiveQuantization
Maybe Mpeg2CodecLevel
Maybe Mpeg2CodecProfile
Maybe Mpeg2DynamicSubGop
Maybe Mpeg2FramerateControl
Maybe Mpeg2FramerateConversionAlgorithm
Maybe Mpeg2GopSizeUnits
Maybe Mpeg2InterlaceMode
Maybe Mpeg2IntraDcPrecision
Maybe Mpeg2ParControl
Maybe Mpeg2QualityTuningLevel
Maybe Mpeg2RateControlMode
Maybe Mpeg2ScanTypeConversionMode
Maybe Mpeg2SceneChangeDetect
Maybe Mpeg2SlowPal
Maybe Mpeg2SpatialAdaptiveQuantization
Maybe Mpeg2Syntax
Maybe Mpeg2Telecine
Maybe Mpeg2TemporalAdaptiveQuantization
temporalAdaptiveQuantization :: Maybe Mpeg2TemporalAdaptiveQuantization
telecine :: Maybe Mpeg2Telecine
syntax :: Maybe Mpeg2Syntax
spatialAdaptiveQuantization :: Maybe Mpeg2SpatialAdaptiveQuantization
softness :: Maybe Natural
slowPal :: Maybe Mpeg2SlowPal
sceneChangeDetect :: Maybe Mpeg2SceneChangeDetect
scanTypeConversionMode :: Maybe Mpeg2ScanTypeConversionMode
rateControlMode :: Maybe Mpeg2RateControlMode
qualityTuningLevel :: Maybe Mpeg2QualityTuningLevel
parNumerator :: Maybe Natural
parDenominator :: Maybe Natural
parControl :: Maybe Mpeg2ParControl
numberBFramesBetweenReferenceFrames :: Maybe Natural
minIInterval :: Maybe Natural
maxBitrate :: Maybe Natural
intraDcPrecision :: Maybe Mpeg2IntraDcPrecision
interlaceMode :: Maybe Mpeg2InterlaceMode
hrdBufferSize :: Maybe Natural
hrdBufferInitialFillPercentage :: Maybe Natural
hrdBufferFinalFillPercentage :: Maybe Natural
gopSizeUnits :: Maybe Mpeg2GopSizeUnits
gopSize :: Maybe Double
gopClosedCadence :: Maybe Natural
framerateNumerator :: Maybe Natural
framerateDenominator :: Maybe Natural
framerateConversionAlgorithm :: Maybe Mpeg2FramerateConversionAlgorithm
framerateControl :: Maybe Mpeg2FramerateControl
dynamicSubGop :: Maybe Mpeg2DynamicSubGop
codecProfile :: Maybe Mpeg2CodecProfile
codecLevel :: Maybe Mpeg2CodecLevel
bitrate :: Maybe Natural
adaptiveQuantization :: Maybe Mpeg2AdaptiveQuantization
$sel:temporalAdaptiveQuantization:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2TemporalAdaptiveQuantization
$sel:telecine:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2Telecine
$sel:syntax:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2Syntax
$sel:spatialAdaptiveQuantization:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2SpatialAdaptiveQuantization
$sel:softness:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:slowPal:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2SlowPal
$sel:sceneChangeDetect:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2SceneChangeDetect
$sel:scanTypeConversionMode:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2ScanTypeConversionMode
$sel:rateControlMode:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2RateControlMode
$sel:qualityTuningLevel:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2QualityTuningLevel
$sel:parNumerator:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:parDenominator:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:parControl:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2ParControl
$sel:numberBFramesBetweenReferenceFrames:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:minIInterval:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:maxBitrate:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:intraDcPrecision:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2IntraDcPrecision
$sel:interlaceMode:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2InterlaceMode
$sel:hrdBufferSize:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:hrdBufferInitialFillPercentage:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:hrdBufferFinalFillPercentage:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:gopSizeUnits:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2GopSizeUnits
$sel:gopSize:Mpeg2Settings' :: Mpeg2Settings -> Maybe Double
$sel:gopClosedCadence:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:framerateNumerator:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:framerateDenominator:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:framerateConversionAlgorithm:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2FramerateConversionAlgorithm
$sel:framerateControl:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2FramerateControl
$sel:dynamicSubGop:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2DynamicSubGop
$sel:codecProfile:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2CodecProfile
$sel:codecLevel:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2CodecLevel
$sel:bitrate:Mpeg2Settings' :: Mpeg2Settings -> Maybe Natural
$sel:adaptiveQuantization:Mpeg2Settings' :: Mpeg2Settings -> Maybe Mpeg2AdaptiveQuantization
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"adaptiveQuantization" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Mpeg2AdaptiveQuantization
adaptiveQuantization,
            (Key
"bitrate" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
bitrate,
            (Key
"codecLevel" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Mpeg2CodecLevel
codecLevel,
            (Key
"codecProfile" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Mpeg2CodecProfile
codecProfile,
            (Key
"dynamicSubGop" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Mpeg2DynamicSubGop
dynamicSubGop,
            (Key
"framerateControl" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Mpeg2FramerateControl
framerateControl,
            (Key
"framerateConversionAlgorithm" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Mpeg2FramerateConversionAlgorithm
framerateConversionAlgorithm,
            (Key
"framerateDenominator" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
framerateDenominator,
            (Key
"framerateNumerator" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
framerateNumerator,
            (Key
"gopClosedCadence" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
gopClosedCadence,
            (Key
"gopSize" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Double
gopSize,
            (Key
"gopSizeUnits" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Mpeg2GopSizeUnits
gopSizeUnits,
            (Key
"hrdBufferFinalFillPercentage" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
hrdBufferFinalFillPercentage,
            (Key
"hrdBufferInitialFillPercentage" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
hrdBufferInitialFillPercentage,
            (Key
"hrdBufferSize" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
hrdBufferSize,
            (Key
"interlaceMode" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Mpeg2InterlaceMode
interlaceMode,
            (Key
"intraDcPrecision" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Mpeg2IntraDcPrecision
intraDcPrecision,
            (Key
"maxBitrate" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
maxBitrate,
            (Key
"minIInterval" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
minIInterval,
            (Key
"numberBFramesBetweenReferenceFrames" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
numberBFramesBetweenReferenceFrames,
            (Key
"parControl" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Mpeg2ParControl
parControl,
            (Key
"parDenominator" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
parDenominator,
            (Key
"parNumerator" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
parNumerator,
            (Key
"qualityTuningLevel" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Mpeg2QualityTuningLevel
qualityTuningLevel,
            (Key
"rateControlMode" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Mpeg2RateControlMode
rateControlMode,
            (Key
"scanTypeConversionMode" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Mpeg2ScanTypeConversionMode
scanTypeConversionMode,
            (Key
"sceneChangeDetect" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Mpeg2SceneChangeDetect
sceneChangeDetect,
            (Key
"slowPal" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Mpeg2SlowPal
slowPal,
            (Key
"softness" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
softness,
            (Key
"spatialAdaptiveQuantization" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Mpeg2SpatialAdaptiveQuantization
spatialAdaptiveQuantization,
            (Key
"syntax" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Mpeg2Syntax
syntax,
            (Key
"telecine" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Mpeg2Telecine
telecine,
            (Key
"temporalAdaptiveQuantization" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Mpeg2TemporalAdaptiveQuantization
temporalAdaptiveQuantization
          ]
      )