{-# 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.MediaLive.Types.H264Settings
-- Copyright   : (c) 2013-2021 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.MediaLive.Types.H264Settings where

import qualified Amazonka.Core as Core
import qualified Amazonka.Lens as Lens
import Amazonka.MediaLive.Types.AfdSignaling
import Amazonka.MediaLive.Types.FixedAfd
import Amazonka.MediaLive.Types.H264AdaptiveQuantization
import Amazonka.MediaLive.Types.H264ColorMetadata
import Amazonka.MediaLive.Types.H264ColorSpaceSettings
import Amazonka.MediaLive.Types.H264EntropyEncoding
import Amazonka.MediaLive.Types.H264FilterSettings
import Amazonka.MediaLive.Types.H264FlickerAq
import Amazonka.MediaLive.Types.H264ForceFieldPictures
import Amazonka.MediaLive.Types.H264FramerateControl
import Amazonka.MediaLive.Types.H264GopBReference
import Amazonka.MediaLive.Types.H264GopSizeUnits
import Amazonka.MediaLive.Types.H264Level
import Amazonka.MediaLive.Types.H264LookAheadRateControl
import Amazonka.MediaLive.Types.H264ParControl
import Amazonka.MediaLive.Types.H264Profile
import Amazonka.MediaLive.Types.H264QualityLevel
import Amazonka.MediaLive.Types.H264RateControlMode
import Amazonka.MediaLive.Types.H264ScanType
import Amazonka.MediaLive.Types.H264SceneChangeDetect
import Amazonka.MediaLive.Types.H264SpatialAq
import Amazonka.MediaLive.Types.H264SubGopLength
import Amazonka.MediaLive.Types.H264Syntax
import Amazonka.MediaLive.Types.H264TemporalAq
import Amazonka.MediaLive.Types.H264TimecodeInsertionBehavior
import qualified Amazonka.Prelude as Prelude

-- | H264 Settings
--
-- /See:/ 'newH264Settings' smart constructor.
data H264Settings = H264Settings'
  { -- | Temporal makes adjustments within each frame based on temporal variation
    -- of content complexity. The value to enter in this field depends on the
    -- value in the Adaptive quantization field: If you have set the Adaptive
    -- quantization field to Auto, MediaLive ignores any value in this field.
    -- MediaLive will determine if temporal AQ is appropriate and will apply
    -- the appropriate strength. If you have set the Adaptive quantization
    -- field to a strength, you can set this field to Enabled or Disabled.
    -- Enabled: MediaLive will apply temporal AQ using the specified strength.
    -- Disabled: MediaLive won\'t apply temporal AQ. If you have set the
    -- Adaptive quantization to Disabled, MediaLive ignores any value in this
    -- field and doesn\'t apply temporal AQ.
    H264Settings -> Maybe H264TemporalAq
temporalAq :: Prelude.Maybe H264TemporalAq,
    -- | Scene change detection. - On: inserts I-frames when scene change is
    -- detected. - Off: does not force an I-frame when scene change is
    -- detected.
    H264Settings -> Maybe H264SceneChangeDetect
sceneChangeDetect :: Prelude.Maybe H264SceneChangeDetect,
    -- | Sets the scan type of the output to progressive or top-field-first
    -- interlaced.
    H264Settings -> Maybe H264ScanType
scanType :: Prelude.Maybe H264ScanType,
    -- | Determines how timecodes should be inserted into the video elementary
    -- stream. - \'disabled\': Do not include timecodes - \'picTimingSei\':
    -- Pass through picture timing SEI messages from the source specified in
    -- Timecode Config
    H264Settings -> Maybe H264TimecodeInsertionBehavior
timecodeInsertion :: Prelude.Maybe H264TimecodeInsertionBehavior,
    -- | Pixel Aspect Ratio numerator.
    H264Settings -> Maybe Natural
parNumerator :: Prelude.Maybe Prelude.Natural,
    -- | Indicates that AFD values will be written into the output stream. If
    -- afdSignaling is \"auto\", the system will try to preserve the input AFD
    -- value (in cases where multiple AFD values are valid). If set to
    -- \"fixed\", the AFD value will be the value configured in the fixedAfd
    -- parameter.
    H264Settings -> Maybe AfdSignaling
afdSignaling :: Prelude.Maybe AfdSignaling,
    -- | GOP size (keyframe interval) in units of either frames or seconds per
    -- gopSizeUnits. If gopSizeUnits is frames, gopSize must be an integer and
    -- must be greater than or equal to 1. If gopSizeUnits is seconds, gopSize
    -- must be greater than 0, but need not be an integer.
    H264Settings -> Maybe Double
gopSize :: Prelude.Maybe Prelude.Double,
    -- | Indicates if the gopSize is specified in frames or seconds. If seconds
    -- the system will convert the gopSize into a frame count at run time.
    H264Settings -> Maybe H264GopSizeUnits
gopSizeUnits :: Prelude.Maybe H264GopSizeUnits,
    -- | If set to fixed, use gopNumBFrames B-frames per sub-GOP. If set to
    -- dynamic, optimize the number of B-frames used for each sub-GOP to
    -- improve visual quality.
    H264Settings -> Maybe H264SubGopLength
subgopLength :: Prelude.Maybe H264SubGopLength,
    -- | Leave as STANDARD_QUALITY or choose a different value (which might
    -- result in additional costs to run the channel). - ENHANCED_QUALITY:
    -- Produces a slightly better video quality without an increase in the
    -- bitrate. Has an effect only when the Rate control mode is QVBR or CBR.
    -- If this channel is in a MediaLive multiplex, the value must be
    -- ENHANCED_QUALITY. - STANDARD_QUALITY: Valid for any Rate control mode.
    H264Settings -> Maybe H264QualityLevel
qualityLevel :: Prelude.Maybe H264QualityLevel,
    -- | Number of slices per picture. Must be less than or equal to the number
    -- of macroblock rows for progressive pictures, and less than or equal to
    -- half the number of macroblock rows for interlaced pictures. This field
    -- is optional; when no value is specified the encoder will choose the
    -- number of slices based on encode resolution.
    H264Settings -> Maybe Natural
slices :: Prelude.Maybe Prelude.Natural,
    -- | H.264 Profile.
    H264Settings -> Maybe H264Profile
profile :: Prelude.Maybe H264Profile,
    -- | Rate control mode. QVBR: Quality will match the specified quality level
    -- except when it is constrained by the maximum bitrate. Recommended if you
    -- or your viewers pay for bandwidth. VBR: Quality and bitrate vary,
    -- depending on the video complexity. Recommended instead of QVBR if you
    -- want to maintain a specific average bitrate over the duration of the
    -- channel. CBR: Quality varies, depending on the video complexity.
    -- Recommended only if you distribute your assets to devices that cannot
    -- handle variable bitrates. Multiplex: This rate control mode is only
    -- supported (and is required) when the video is being delivered to a
    -- MediaLive Multiplex in which case the rate control configuration is
    -- controlled by the properties within the Multiplex Program.
    H264Settings -> Maybe H264RateControlMode
rateControlMode :: Prelude.Maybe H264RateControlMode,
    -- | Only meaningful if sceneChangeDetect is set to enabled. Defaults to 5 if
    -- multiplex rate control is used. Enforces separation between repeated
    -- (cadence) I-frames and I-frames inserted by Scene Change Detection. If a
    -- scene change I-frame is within I-interval frames of a cadence I-frame,
    -- the GOP is shrunk and\/or stretched to the scene change I-frame. GOP
    -- stretch requires enabling lookahead as well as setting I-interval. The
    -- normal cadence resumes for the next GOP. Note: Maximum GOP stretch = GOP
    -- size + Min-I-interval - 1
    H264Settings -> Maybe Natural
minIInterval :: Prelude.Maybe Prelude.Natural,
    -- | Controls the target quality for the video encode. Applies only when the
    -- rate control mode is QVBR. You can set a target quality or you can let
    -- MediaLive determine the best quality. To set a target quality, enter
    -- values in the QVBR quality level field and the Max bitrate field. Enter
    -- values that suit your most important viewing devices. Recommended values
    -- are: - Primary screen: Quality level: 8 to 10. Max bitrate: 4M - PC or
    -- tablet: Quality level: 7. Max bitrate: 1.5M to 3M - Smartphone: Quality
    -- level: 6. Max bitrate: 1M to 1.5M To let MediaLive decide, leave the
    -- QVBR quality level field empty, and in Max bitrate enter the maximum
    -- rate you want in the video. For more information, see the section called
    -- \"Video - rate control mode\" in the MediaLive user guide
    H264Settings -> Maybe Natural
qvbrQualityLevel :: Prelude.Maybe Prelude.Natural,
    -- | Color Space settings
    H264Settings -> Maybe H264ColorSpaceSettings
colorSpaceSettings :: Prelude.Maybe H264ColorSpaceSettings,
    -- | This field indicates how the output pixel aspect ratio is specified. If
    -- \"specified\" is selected then the output video pixel aspect ratio is
    -- determined by parNumerator and parDenominator, else if
    -- \"initializeFromSource\" is selected then the output pixsel aspect ratio
    -- will be set equal to the input video pixel aspect ratio of the first
    -- input.
    H264Settings -> Maybe H264ParControl
parControl :: Prelude.Maybe H264ParControl,
    -- | Flicker AQ makes adjustments within each frame to reduce flicker or
    -- \'pop\' on I-frames. The value to enter in this field depends on the
    -- value in the Adaptive quantization field: If you have set the Adaptive
    -- quantization field to Auto, MediaLive ignores any value in this field.
    -- MediaLive will determine if flicker AQ is appropriate and will apply the
    -- appropriate strength. If you have set the Adaptive quantization field to
    -- a strength, you can set this field to Enabled or Disabled. Enabled:
    -- MediaLive will apply flicker AQ using the specified strength. Disabled:
    -- MediaLive won\'t apply flicker AQ. If you have set the Adaptive
    -- quantization to Disabled, MediaLive ignores any value in this field and
    -- doesn\'t apply flicker AQ.
    H264Settings -> Maybe H264FlickerAq
flickerAq :: Prelude.Maybe H264FlickerAq,
    -- | Size of buffer (HRD buffer model) in bits.
    H264Settings -> Maybe Natural
bufSize :: Prelude.Maybe Prelude.Natural,
    -- | Spatial AQ makes adjustments within each frame based on spatial
    -- variation of content complexity. The value to enter in this field
    -- depends on the value in the Adaptive quantization field: If you have set
    -- the Adaptive quantization field to Auto, MediaLive ignores any value in
    -- this field. MediaLive will determine if spatial AQ is appropriate and
    -- will apply the appropriate strength. If you have set the Adaptive
    -- quantization field to a strength, you can set this field to Enabled or
    -- Disabled. Enabled: MediaLive will apply spatial AQ using the specified
    -- strength. Disabled: MediaLive won\'t apply spatial AQ. If you have set
    -- the Adaptive quantization to Disabled, MediaLive ignores any value in
    -- this field and doesn\'t apply spatial AQ.
    H264Settings -> Maybe H264SpatialAq
spatialAq :: Prelude.Maybe H264SpatialAq,
    -- | Number of B-frames between reference frames.
    H264Settings -> Maybe Natural
gopNumBFrames :: Prelude.Maybe Prelude.Natural,
    -- | Four bit AFD value to write on all frames of video in the output stream.
    -- Only valid when afdSignaling is set to \'Fixed\'.
    H264Settings -> Maybe FixedAfd
fixedAfd :: Prelude.Maybe FixedAfd,
    -- | Softness. Selects quantizer matrix, larger values reduce high-frequency
    -- content in the encoded image. If not set to zero, must be greater than
    -- 15.
    H264Settings -> Maybe Natural
softness :: Prelude.Maybe Prelude.Natural,
    -- | Optional filters that you can apply to an encode.
    H264Settings -> Maybe H264FilterSettings
filterSettings :: Prelude.Maybe H264FilterSettings,
    -- | Average bitrate in bits\/second. Required when the rate control mode is
    -- VBR or CBR. Not used for QVBR. In an MS Smooth output group, each output
    -- must have a unique value when its bitrate is rounded down to the nearest
    -- multiple of 1000.
    H264Settings -> Maybe Natural
bitrate :: Prelude.Maybe Prelude.Natural,
    -- | Framerate denominator.
    H264Settings -> Maybe Natural
framerateDenominator :: Prelude.Maybe Prelude.Natural,
    -- | This setting applies only when scan type is \"interlaced.\" It controls
    -- whether coding is performed on a field basis or on a frame basis. (When
    -- the video is progressive, the coding is always performed on a frame
    -- basis.) enabled: Force MediaLive to code on a field basis, so that odd
    -- and even sets of fields are coded separately. disabled: Code the two
    -- sets of fields separately (on a field basis) or together (on a frame
    -- basis using PAFF), depending on what is most appropriate for the
    -- content.
    H264Settings -> Maybe H264ForceFieldPictures
forceFieldPictures :: Prelude.Maybe H264ForceFieldPictures,
    -- | Entropy encoding mode. Use cabac (must be in Main or High profile) or
    -- cavlc.
    H264Settings -> Maybe H264EntropyEncoding
entropyEncoding :: Prelude.Maybe H264EntropyEncoding,
    -- | This field indicates how the output video frame rate is specified. If
    -- \"specified\" is selected then the output video frame rate is determined
    -- by framerateNumerator and framerateDenominator, else if
    -- \"initializeFromSource\" is selected then the output video frame rate
    -- will be set equal to the input video frame rate of the first input.
    H264Settings -> Maybe H264FramerateControl
framerateControl :: Prelude.Maybe H264FramerateControl,
    -- | Includes colorspace metadata in the output.
    H264Settings -> Maybe H264ColorMetadata
colorMetadata :: Prelude.Maybe H264ColorMetadata,
    -- | Amount of lookahead. A value of low can decrease latency and memory
    -- usage, while high can produce better quality for certain content.
    H264Settings -> Maybe H264LookAheadRateControl
lookAheadRateControl :: Prelude.Maybe H264LookAheadRateControl,
    -- | Enables or disables adaptive quantization, which is a technique
    -- MediaLive can apply to video on a frame-by-frame basis to produce more
    -- compression without losing quality. There are three types of adaptive
    -- quantization: flicker, spatial, and temporal. Set the field in one of
    -- these ways: Set to Auto. Recommended. For each type of AQ, MediaLive
    -- will determine if AQ is needed, and if so, the appropriate strength. Set
    -- a strength (a value other than Auto or Disable). This strength will
    -- apply to any of the AQ fields that you choose to enable. Set to Disabled
    -- to disable all types of adaptive quantization.
    H264Settings -> Maybe H264AdaptiveQuantization
adaptiveQuantization :: Prelude.Maybe H264AdaptiveQuantization,
    -- | Framerate numerator - framerate is a fraction, e.g. 24000 \/ 1001 =
    -- 23.976 fps.
    H264Settings -> Maybe Natural
framerateNumerator :: Prelude.Maybe Prelude.Natural,
    -- | H.264 Level.
    H264Settings -> Maybe H264Level
level :: Prelude.Maybe H264Level,
    -- | Documentation update needed
    H264Settings -> Maybe H264GopBReference
gopBReference :: Prelude.Maybe H264GopBReference,
    -- | For QVBR: See the tooltip for Quality level For VBR: Set the maximum
    -- bitrate in order to accommodate expected spikes in the complexity of the
    -- video.
    H264Settings -> Maybe Natural
maxBitrate :: Prelude.Maybe Prelude.Natural,
    -- | Produces a bitstream compliant with SMPTE RP-2027.
    H264Settings -> Maybe H264Syntax
syntax :: Prelude.Maybe H264Syntax,
    -- | Percentage of the buffer that should initially be filled (HRD buffer
    -- model).
    H264Settings -> Maybe Natural
bufFillPct :: Prelude.Maybe Prelude.Natural,
    -- | Frequency of closed GOPs. In streaming applications, it is recommended
    -- that this be set to 1 so a decoder joining mid-stream will receive an
    -- IDR frame as quickly as possible. Setting this value to 0 will break
    -- output segmenting.
    H264Settings -> Maybe Natural
gopClosedCadence :: Prelude.Maybe Prelude.Natural,
    -- | Number of reference frames to use. The encoder may use more than
    -- requested if using B-frames and\/or interlaced encoding.
    H264Settings -> Maybe Natural
numRefFrames :: Prelude.Maybe Prelude.Natural,
    -- | Pixel Aspect Ratio denominator.
    H264Settings -> Maybe Natural
parDenominator :: Prelude.Maybe Prelude.Natural
  }
  deriving (H264Settings -> H264Settings -> Bool
(H264Settings -> H264Settings -> Bool)
-> (H264Settings -> H264Settings -> Bool) -> Eq H264Settings
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: H264Settings -> H264Settings -> Bool
$c/= :: H264Settings -> H264Settings -> Bool
== :: H264Settings -> H264Settings -> Bool
$c== :: H264Settings -> H264Settings -> Bool
Prelude.Eq, ReadPrec [H264Settings]
ReadPrec H264Settings
Int -> ReadS H264Settings
ReadS [H264Settings]
(Int -> ReadS H264Settings)
-> ReadS [H264Settings]
-> ReadPrec H264Settings
-> ReadPrec [H264Settings]
-> Read H264Settings
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [H264Settings]
$creadListPrec :: ReadPrec [H264Settings]
readPrec :: ReadPrec H264Settings
$creadPrec :: ReadPrec H264Settings
readList :: ReadS [H264Settings]
$creadList :: ReadS [H264Settings]
readsPrec :: Int -> ReadS H264Settings
$creadsPrec :: Int -> ReadS H264Settings
Prelude.Read, Int -> H264Settings -> ShowS
[H264Settings] -> ShowS
H264Settings -> String
(Int -> H264Settings -> ShowS)
-> (H264Settings -> String)
-> ([H264Settings] -> ShowS)
-> Show H264Settings
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [H264Settings] -> ShowS
$cshowList :: [H264Settings] -> ShowS
show :: H264Settings -> String
$cshow :: H264Settings -> String
showsPrec :: Int -> H264Settings -> ShowS
$cshowsPrec :: Int -> H264Settings -> ShowS
Prelude.Show, (forall x. H264Settings -> Rep H264Settings x)
-> (forall x. Rep H264Settings x -> H264Settings)
-> Generic H264Settings
forall x. Rep H264Settings x -> H264Settings
forall x. H264Settings -> Rep H264Settings x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep H264Settings x -> H264Settings
$cfrom :: forall x. H264Settings -> Rep H264Settings x
Prelude.Generic)

-- |
-- Create a value of 'H264Settings' 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:
--
-- 'temporalAq', 'h264Settings_temporalAq' - Temporal makes adjustments within each frame based on temporal variation
-- of content complexity. The value to enter in this field depends on the
-- value in the Adaptive quantization field: If you have set the Adaptive
-- quantization field to Auto, MediaLive ignores any value in this field.
-- MediaLive will determine if temporal AQ is appropriate and will apply
-- the appropriate strength. If you have set the Adaptive quantization
-- field to a strength, you can set this field to Enabled or Disabled.
-- Enabled: MediaLive will apply temporal AQ using the specified strength.
-- Disabled: MediaLive won\'t apply temporal AQ. If you have set the
-- Adaptive quantization to Disabled, MediaLive ignores any value in this
-- field and doesn\'t apply temporal AQ.
--
-- 'sceneChangeDetect', 'h264Settings_sceneChangeDetect' - Scene change detection. - On: inserts I-frames when scene change is
-- detected. - Off: does not force an I-frame when scene change is
-- detected.
--
-- 'scanType', 'h264Settings_scanType' - Sets the scan type of the output to progressive or top-field-first
-- interlaced.
--
-- 'timecodeInsertion', 'h264Settings_timecodeInsertion' - Determines how timecodes should be inserted into the video elementary
-- stream. - \'disabled\': Do not include timecodes - \'picTimingSei\':
-- Pass through picture timing SEI messages from the source specified in
-- Timecode Config
--
-- 'parNumerator', 'h264Settings_parNumerator' - Pixel Aspect Ratio numerator.
--
-- 'afdSignaling', 'h264Settings_afdSignaling' - Indicates that AFD values will be written into the output stream. If
-- afdSignaling is \"auto\", the system will try to preserve the input AFD
-- value (in cases where multiple AFD values are valid). If set to
-- \"fixed\", the AFD value will be the value configured in the fixedAfd
-- parameter.
--
-- 'gopSize', 'h264Settings_gopSize' - GOP size (keyframe interval) in units of either frames or seconds per
-- gopSizeUnits. If gopSizeUnits is frames, gopSize must be an integer and
-- must be greater than or equal to 1. If gopSizeUnits is seconds, gopSize
-- must be greater than 0, but need not be an integer.
--
-- 'gopSizeUnits', 'h264Settings_gopSizeUnits' - Indicates if the gopSize is specified in frames or seconds. If seconds
-- the system will convert the gopSize into a frame count at run time.
--
-- 'subgopLength', 'h264Settings_subgopLength' - If set to fixed, use gopNumBFrames B-frames per sub-GOP. If set to
-- dynamic, optimize the number of B-frames used for each sub-GOP to
-- improve visual quality.
--
-- 'qualityLevel', 'h264Settings_qualityLevel' - Leave as STANDARD_QUALITY or choose a different value (which might
-- result in additional costs to run the channel). - ENHANCED_QUALITY:
-- Produces a slightly better video quality without an increase in the
-- bitrate. Has an effect only when the Rate control mode is QVBR or CBR.
-- If this channel is in a MediaLive multiplex, the value must be
-- ENHANCED_QUALITY. - STANDARD_QUALITY: Valid for any Rate control mode.
--
-- 'slices', 'h264Settings_slices' - Number of slices per picture. Must be less than or equal to the number
-- of macroblock rows for progressive pictures, and less than or equal to
-- half the number of macroblock rows for interlaced pictures. This field
-- is optional; when no value is specified the encoder will choose the
-- number of slices based on encode resolution.
--
-- 'profile', 'h264Settings_profile' - H.264 Profile.
--
-- 'rateControlMode', 'h264Settings_rateControlMode' - Rate control mode. QVBR: Quality will match the specified quality level
-- except when it is constrained by the maximum bitrate. Recommended if you
-- or your viewers pay for bandwidth. VBR: Quality and bitrate vary,
-- depending on the video complexity. Recommended instead of QVBR if you
-- want to maintain a specific average bitrate over the duration of the
-- channel. CBR: Quality varies, depending on the video complexity.
-- Recommended only if you distribute your assets to devices that cannot
-- handle variable bitrates. Multiplex: This rate control mode is only
-- supported (and is required) when the video is being delivered to a
-- MediaLive Multiplex in which case the rate control configuration is
-- controlled by the properties within the Multiplex Program.
--
-- 'minIInterval', 'h264Settings_minIInterval' - Only meaningful if sceneChangeDetect is set to enabled. Defaults to 5 if
-- multiplex rate control is used. Enforces separation between repeated
-- (cadence) I-frames and I-frames inserted by Scene Change Detection. If a
-- scene change I-frame is within I-interval frames of a cadence I-frame,
-- the GOP is shrunk and\/or stretched to the scene change I-frame. GOP
-- stretch requires enabling lookahead as well as setting I-interval. The
-- normal cadence resumes for the next GOP. Note: Maximum GOP stretch = GOP
-- size + Min-I-interval - 1
--
-- 'qvbrQualityLevel', 'h264Settings_qvbrQualityLevel' - Controls the target quality for the video encode. Applies only when the
-- rate control mode is QVBR. You can set a target quality or you can let
-- MediaLive determine the best quality. To set a target quality, enter
-- values in the QVBR quality level field and the Max bitrate field. Enter
-- values that suit your most important viewing devices. Recommended values
-- are: - Primary screen: Quality level: 8 to 10. Max bitrate: 4M - PC or
-- tablet: Quality level: 7. Max bitrate: 1.5M to 3M - Smartphone: Quality
-- level: 6. Max bitrate: 1M to 1.5M To let MediaLive decide, leave the
-- QVBR quality level field empty, and in Max bitrate enter the maximum
-- rate you want in the video. For more information, see the section called
-- \"Video - rate control mode\" in the MediaLive user guide
--
-- 'colorSpaceSettings', 'h264Settings_colorSpaceSettings' - Color Space settings
--
-- 'parControl', 'h264Settings_parControl' - This field indicates how the output pixel aspect ratio is specified. If
-- \"specified\" is selected then the output video pixel aspect ratio is
-- determined by parNumerator and parDenominator, else if
-- \"initializeFromSource\" is selected then the output pixsel aspect ratio
-- will be set equal to the input video pixel aspect ratio of the first
-- input.
--
-- 'flickerAq', 'h264Settings_flickerAq' - Flicker AQ makes adjustments within each frame to reduce flicker or
-- \'pop\' on I-frames. The value to enter in this field depends on the
-- value in the Adaptive quantization field: If you have set the Adaptive
-- quantization field to Auto, MediaLive ignores any value in this field.
-- MediaLive will determine if flicker AQ is appropriate and will apply the
-- appropriate strength. If you have set the Adaptive quantization field to
-- a strength, you can set this field to Enabled or Disabled. Enabled:
-- MediaLive will apply flicker AQ using the specified strength. Disabled:
-- MediaLive won\'t apply flicker AQ. If you have set the Adaptive
-- quantization to Disabled, MediaLive ignores any value in this field and
-- doesn\'t apply flicker AQ.
--
-- 'bufSize', 'h264Settings_bufSize' - Size of buffer (HRD buffer model) in bits.
--
-- 'spatialAq', 'h264Settings_spatialAq' - Spatial AQ makes adjustments within each frame based on spatial
-- variation of content complexity. The value to enter in this field
-- depends on the value in the Adaptive quantization field: If you have set
-- the Adaptive quantization field to Auto, MediaLive ignores any value in
-- this field. MediaLive will determine if spatial AQ is appropriate and
-- will apply the appropriate strength. If you have set the Adaptive
-- quantization field to a strength, you can set this field to Enabled or
-- Disabled. Enabled: MediaLive will apply spatial AQ using the specified
-- strength. Disabled: MediaLive won\'t apply spatial AQ. If you have set
-- the Adaptive quantization to Disabled, MediaLive ignores any value in
-- this field and doesn\'t apply spatial AQ.
--
-- 'gopNumBFrames', 'h264Settings_gopNumBFrames' - Number of B-frames between reference frames.
--
-- 'fixedAfd', 'h264Settings_fixedAfd' - Four bit AFD value to write on all frames of video in the output stream.
-- Only valid when afdSignaling is set to \'Fixed\'.
--
-- 'softness', 'h264Settings_softness' - Softness. Selects quantizer matrix, larger values reduce high-frequency
-- content in the encoded image. If not set to zero, must be greater than
-- 15.
--
-- 'filterSettings', 'h264Settings_filterSettings' - Optional filters that you can apply to an encode.
--
-- 'bitrate', 'h264Settings_bitrate' - Average bitrate in bits\/second. Required when the rate control mode is
-- VBR or CBR. Not used for QVBR. In an MS Smooth output group, each output
-- must have a unique value when its bitrate is rounded down to the nearest
-- multiple of 1000.
--
-- 'framerateDenominator', 'h264Settings_framerateDenominator' - Framerate denominator.
--
-- 'forceFieldPictures', 'h264Settings_forceFieldPictures' - This setting applies only when scan type is \"interlaced.\" It controls
-- whether coding is performed on a field basis or on a frame basis. (When
-- the video is progressive, the coding is always performed on a frame
-- basis.) enabled: Force MediaLive to code on a field basis, so that odd
-- and even sets of fields are coded separately. disabled: Code the two
-- sets of fields separately (on a field basis) or together (on a frame
-- basis using PAFF), depending on what is most appropriate for the
-- content.
--
-- 'entropyEncoding', 'h264Settings_entropyEncoding' - Entropy encoding mode. Use cabac (must be in Main or High profile) or
-- cavlc.
--
-- 'framerateControl', 'h264Settings_framerateControl' - This field indicates how the output video frame rate is specified. If
-- \"specified\" is selected then the output video frame rate is determined
-- by framerateNumerator and framerateDenominator, else if
-- \"initializeFromSource\" is selected then the output video frame rate
-- will be set equal to the input video frame rate of the first input.
--
-- 'colorMetadata', 'h264Settings_colorMetadata' - Includes colorspace metadata in the output.
--
-- 'lookAheadRateControl', 'h264Settings_lookAheadRateControl' - Amount of lookahead. A value of low can decrease latency and memory
-- usage, while high can produce better quality for certain content.
--
-- 'adaptiveQuantization', 'h264Settings_adaptiveQuantization' - Enables or disables adaptive quantization, which is a technique
-- MediaLive can apply to video on a frame-by-frame basis to produce more
-- compression without losing quality. There are three types of adaptive
-- quantization: flicker, spatial, and temporal. Set the field in one of
-- these ways: Set to Auto. Recommended. For each type of AQ, MediaLive
-- will determine if AQ is needed, and if so, the appropriate strength. Set
-- a strength (a value other than Auto or Disable). This strength will
-- apply to any of the AQ fields that you choose to enable. Set to Disabled
-- to disable all types of adaptive quantization.
--
-- 'framerateNumerator', 'h264Settings_framerateNumerator' - Framerate numerator - framerate is a fraction, e.g. 24000 \/ 1001 =
-- 23.976 fps.
--
-- 'level', 'h264Settings_level' - H.264 Level.
--
-- 'gopBReference', 'h264Settings_gopBReference' - Documentation update needed
--
-- 'maxBitrate', 'h264Settings_maxBitrate' - For QVBR: See the tooltip for Quality level For VBR: Set the maximum
-- bitrate in order to accommodate expected spikes in the complexity of the
-- video.
--
-- 'syntax', 'h264Settings_syntax' - Produces a bitstream compliant with SMPTE RP-2027.
--
-- 'bufFillPct', 'h264Settings_bufFillPct' - Percentage of the buffer that should initially be filled (HRD buffer
-- model).
--
-- 'gopClosedCadence', 'h264Settings_gopClosedCadence' - Frequency of closed GOPs. In streaming applications, it is recommended
-- that this be set to 1 so a decoder joining mid-stream will receive an
-- IDR frame as quickly as possible. Setting this value to 0 will break
-- output segmenting.
--
-- 'numRefFrames', 'h264Settings_numRefFrames' - Number of reference frames to use. The encoder may use more than
-- requested if using B-frames and\/or interlaced encoding.
--
-- 'parDenominator', 'h264Settings_parDenominator' - Pixel Aspect Ratio denominator.
newH264Settings ::
  H264Settings
newH264Settings :: H264Settings
newH264Settings =
  H264Settings' :: Maybe H264TemporalAq
-> Maybe H264SceneChangeDetect
-> Maybe H264ScanType
-> Maybe H264TimecodeInsertionBehavior
-> Maybe Natural
-> Maybe AfdSignaling
-> Maybe Double
-> Maybe H264GopSizeUnits
-> Maybe H264SubGopLength
-> Maybe H264QualityLevel
-> Maybe Natural
-> Maybe H264Profile
-> Maybe H264RateControlMode
-> Maybe Natural
-> Maybe Natural
-> Maybe H264ColorSpaceSettings
-> Maybe H264ParControl
-> Maybe H264FlickerAq
-> Maybe Natural
-> Maybe H264SpatialAq
-> Maybe Natural
-> Maybe FixedAfd
-> Maybe Natural
-> Maybe H264FilterSettings
-> Maybe Natural
-> Maybe Natural
-> Maybe H264ForceFieldPictures
-> Maybe H264EntropyEncoding
-> Maybe H264FramerateControl
-> Maybe H264ColorMetadata
-> Maybe H264LookAheadRateControl
-> Maybe H264AdaptiveQuantization
-> Maybe Natural
-> Maybe H264Level
-> Maybe H264GopBReference
-> Maybe Natural
-> Maybe H264Syntax
-> Maybe Natural
-> Maybe Natural
-> Maybe Natural
-> Maybe Natural
-> H264Settings
H264Settings'
    { $sel:temporalAq:H264Settings' :: Maybe H264TemporalAq
temporalAq = Maybe H264TemporalAq
forall a. Maybe a
Prelude.Nothing,
      $sel:sceneChangeDetect:H264Settings' :: Maybe H264SceneChangeDetect
sceneChangeDetect = Maybe H264SceneChangeDetect
forall a. Maybe a
Prelude.Nothing,
      $sel:scanType:H264Settings' :: Maybe H264ScanType
scanType = Maybe H264ScanType
forall a. Maybe a
Prelude.Nothing,
      $sel:timecodeInsertion:H264Settings' :: Maybe H264TimecodeInsertionBehavior
timecodeInsertion = Maybe H264TimecodeInsertionBehavior
forall a. Maybe a
Prelude.Nothing,
      $sel:parNumerator:H264Settings' :: Maybe Natural
parNumerator = Maybe Natural
forall a. Maybe a
Prelude.Nothing,
      $sel:afdSignaling:H264Settings' :: Maybe AfdSignaling
afdSignaling = Maybe AfdSignaling
forall a. Maybe a
Prelude.Nothing,
      $sel:gopSize:H264Settings' :: Maybe Double
gopSize = Maybe Double
forall a. Maybe a
Prelude.Nothing,
      $sel:gopSizeUnits:H264Settings' :: Maybe H264GopSizeUnits
gopSizeUnits = Maybe H264GopSizeUnits
forall a. Maybe a
Prelude.Nothing,
      $sel:subgopLength:H264Settings' :: Maybe H264SubGopLength
subgopLength = Maybe H264SubGopLength
forall a. Maybe a
Prelude.Nothing,
      $sel:qualityLevel:H264Settings' :: Maybe H264QualityLevel
qualityLevel = Maybe H264QualityLevel
forall a. Maybe a
Prelude.Nothing,
      $sel:slices:H264Settings' :: Maybe Natural
slices = Maybe Natural
forall a. Maybe a
Prelude.Nothing,
      $sel:profile:H264Settings' :: Maybe H264Profile
profile = Maybe H264Profile
forall a. Maybe a
Prelude.Nothing,
      $sel:rateControlMode:H264Settings' :: Maybe H264RateControlMode
rateControlMode = Maybe H264RateControlMode
forall a. Maybe a
Prelude.Nothing,
      $sel:minIInterval:H264Settings' :: Maybe Natural
minIInterval = Maybe Natural
forall a. Maybe a
Prelude.Nothing,
      $sel:qvbrQualityLevel:H264Settings' :: Maybe Natural
qvbrQualityLevel = Maybe Natural
forall a. Maybe a
Prelude.Nothing,
      $sel:colorSpaceSettings:H264Settings' :: Maybe H264ColorSpaceSettings
colorSpaceSettings = Maybe H264ColorSpaceSettings
forall a. Maybe a
Prelude.Nothing,
      $sel:parControl:H264Settings' :: Maybe H264ParControl
parControl = Maybe H264ParControl
forall a. Maybe a
Prelude.Nothing,
      $sel:flickerAq:H264Settings' :: Maybe H264FlickerAq
flickerAq = Maybe H264FlickerAq
forall a. Maybe a
Prelude.Nothing,
      $sel:bufSize:H264Settings' :: Maybe Natural
bufSize = Maybe Natural
forall a. Maybe a
Prelude.Nothing,
      $sel:spatialAq:H264Settings' :: Maybe H264SpatialAq
spatialAq = Maybe H264SpatialAq
forall a. Maybe a
Prelude.Nothing,
      $sel:gopNumBFrames:H264Settings' :: Maybe Natural
gopNumBFrames = Maybe Natural
forall a. Maybe a
Prelude.Nothing,
      $sel:fixedAfd:H264Settings' :: Maybe FixedAfd
fixedAfd = Maybe FixedAfd
forall a. Maybe a
Prelude.Nothing,
      $sel:softness:H264Settings' :: Maybe Natural
softness = Maybe Natural
forall a. Maybe a
Prelude.Nothing,
      $sel:filterSettings:H264Settings' :: Maybe H264FilterSettings
filterSettings = Maybe H264FilterSettings
forall a. Maybe a
Prelude.Nothing,
      $sel:bitrate:H264Settings' :: Maybe Natural
bitrate = Maybe Natural
forall a. Maybe a
Prelude.Nothing,
      $sel:framerateDenominator:H264Settings' :: Maybe Natural
framerateDenominator = Maybe Natural
forall a. Maybe a
Prelude.Nothing,
      $sel:forceFieldPictures:H264Settings' :: Maybe H264ForceFieldPictures
forceFieldPictures = Maybe H264ForceFieldPictures
forall a. Maybe a
Prelude.Nothing,
      $sel:entropyEncoding:H264Settings' :: Maybe H264EntropyEncoding
entropyEncoding = Maybe H264EntropyEncoding
forall a. Maybe a
Prelude.Nothing,
      $sel:framerateControl:H264Settings' :: Maybe H264FramerateControl
framerateControl = Maybe H264FramerateControl
forall a. Maybe a
Prelude.Nothing,
      $sel:colorMetadata:H264Settings' :: Maybe H264ColorMetadata
colorMetadata = Maybe H264ColorMetadata
forall a. Maybe a
Prelude.Nothing,
      $sel:lookAheadRateControl:H264Settings' :: Maybe H264LookAheadRateControl
lookAheadRateControl = Maybe H264LookAheadRateControl
forall a. Maybe a
Prelude.Nothing,
      $sel:adaptiveQuantization:H264Settings' :: Maybe H264AdaptiveQuantization
adaptiveQuantization = Maybe H264AdaptiveQuantization
forall a. Maybe a
Prelude.Nothing,
      $sel:framerateNumerator:H264Settings' :: Maybe Natural
framerateNumerator = Maybe Natural
forall a. Maybe a
Prelude.Nothing,
      $sel:level:H264Settings' :: Maybe H264Level
level = Maybe H264Level
forall a. Maybe a
Prelude.Nothing,
      $sel:gopBReference:H264Settings' :: Maybe H264GopBReference
gopBReference = Maybe H264GopBReference
forall a. Maybe a
Prelude.Nothing,
      $sel:maxBitrate:H264Settings' :: Maybe Natural
maxBitrate = Maybe Natural
forall a. Maybe a
Prelude.Nothing,
      $sel:syntax:H264Settings' :: Maybe H264Syntax
syntax = Maybe H264Syntax
forall a. Maybe a
Prelude.Nothing,
      $sel:bufFillPct:H264Settings' :: Maybe Natural
bufFillPct = Maybe Natural
forall a. Maybe a
Prelude.Nothing,
      $sel:gopClosedCadence:H264Settings' :: Maybe Natural
gopClosedCadence = Maybe Natural
forall a. Maybe a
Prelude.Nothing,
      $sel:numRefFrames:H264Settings' :: Maybe Natural
numRefFrames = Maybe Natural
forall a. Maybe a
Prelude.Nothing,
      $sel:parDenominator:H264Settings' :: Maybe Natural
parDenominator = Maybe Natural
forall a. Maybe a
Prelude.Nothing
    }

-- | Temporal makes adjustments within each frame based on temporal variation
-- of content complexity. The value to enter in this field depends on the
-- value in the Adaptive quantization field: If you have set the Adaptive
-- quantization field to Auto, MediaLive ignores any value in this field.
-- MediaLive will determine if temporal AQ is appropriate and will apply
-- the appropriate strength. If you have set the Adaptive quantization
-- field to a strength, you can set this field to Enabled or Disabled.
-- Enabled: MediaLive will apply temporal AQ using the specified strength.
-- Disabled: MediaLive won\'t apply temporal AQ. If you have set the
-- Adaptive quantization to Disabled, MediaLive ignores any value in this
-- field and doesn\'t apply temporal AQ.
h264Settings_temporalAq :: Lens.Lens' H264Settings (Prelude.Maybe H264TemporalAq)
h264Settings_temporalAq :: (Maybe H264TemporalAq -> f (Maybe H264TemporalAq))
-> H264Settings -> f H264Settings
h264Settings_temporalAq = (H264Settings -> Maybe H264TemporalAq)
-> (H264Settings -> Maybe H264TemporalAq -> H264Settings)
-> Lens
     H264Settings
     H264Settings
     (Maybe H264TemporalAq)
     (Maybe H264TemporalAq)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe H264TemporalAq
temporalAq :: Maybe H264TemporalAq
$sel:temporalAq:H264Settings' :: H264Settings -> Maybe H264TemporalAq
temporalAq} -> Maybe H264TemporalAq
temporalAq) (\s :: H264Settings
s@H264Settings' {} Maybe H264TemporalAq
a -> H264Settings
s {$sel:temporalAq:H264Settings' :: Maybe H264TemporalAq
temporalAq = Maybe H264TemporalAq
a} :: H264Settings)

-- | Scene change detection. - On: inserts I-frames when scene change is
-- detected. - Off: does not force an I-frame when scene change is
-- detected.
h264Settings_sceneChangeDetect :: Lens.Lens' H264Settings (Prelude.Maybe H264SceneChangeDetect)
h264Settings_sceneChangeDetect :: (Maybe H264SceneChangeDetect -> f (Maybe H264SceneChangeDetect))
-> H264Settings -> f H264Settings
h264Settings_sceneChangeDetect = (H264Settings -> Maybe H264SceneChangeDetect)
-> (H264Settings -> Maybe H264SceneChangeDetect -> H264Settings)
-> Lens
     H264Settings
     H264Settings
     (Maybe H264SceneChangeDetect)
     (Maybe H264SceneChangeDetect)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe H264SceneChangeDetect
sceneChangeDetect :: Maybe H264SceneChangeDetect
$sel:sceneChangeDetect:H264Settings' :: H264Settings -> Maybe H264SceneChangeDetect
sceneChangeDetect} -> Maybe H264SceneChangeDetect
sceneChangeDetect) (\s :: H264Settings
s@H264Settings' {} Maybe H264SceneChangeDetect
a -> H264Settings
s {$sel:sceneChangeDetect:H264Settings' :: Maybe H264SceneChangeDetect
sceneChangeDetect = Maybe H264SceneChangeDetect
a} :: H264Settings)

-- | Sets the scan type of the output to progressive or top-field-first
-- interlaced.
h264Settings_scanType :: Lens.Lens' H264Settings (Prelude.Maybe H264ScanType)
h264Settings_scanType :: (Maybe H264ScanType -> f (Maybe H264ScanType))
-> H264Settings -> f H264Settings
h264Settings_scanType = (H264Settings -> Maybe H264ScanType)
-> (H264Settings -> Maybe H264ScanType -> H264Settings)
-> Lens
     H264Settings H264Settings (Maybe H264ScanType) (Maybe H264ScanType)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe H264ScanType
scanType :: Maybe H264ScanType
$sel:scanType:H264Settings' :: H264Settings -> Maybe H264ScanType
scanType} -> Maybe H264ScanType
scanType) (\s :: H264Settings
s@H264Settings' {} Maybe H264ScanType
a -> H264Settings
s {$sel:scanType:H264Settings' :: Maybe H264ScanType
scanType = Maybe H264ScanType
a} :: H264Settings)

-- | Determines how timecodes should be inserted into the video elementary
-- stream. - \'disabled\': Do not include timecodes - \'picTimingSei\':
-- Pass through picture timing SEI messages from the source specified in
-- Timecode Config
h264Settings_timecodeInsertion :: Lens.Lens' H264Settings (Prelude.Maybe H264TimecodeInsertionBehavior)
h264Settings_timecodeInsertion :: (Maybe H264TimecodeInsertionBehavior
 -> f (Maybe H264TimecodeInsertionBehavior))
-> H264Settings -> f H264Settings
h264Settings_timecodeInsertion = (H264Settings -> Maybe H264TimecodeInsertionBehavior)
-> (H264Settings
    -> Maybe H264TimecodeInsertionBehavior -> H264Settings)
-> Lens
     H264Settings
     H264Settings
     (Maybe H264TimecodeInsertionBehavior)
     (Maybe H264TimecodeInsertionBehavior)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe H264TimecodeInsertionBehavior
timecodeInsertion :: Maybe H264TimecodeInsertionBehavior
$sel:timecodeInsertion:H264Settings' :: H264Settings -> Maybe H264TimecodeInsertionBehavior
timecodeInsertion} -> Maybe H264TimecodeInsertionBehavior
timecodeInsertion) (\s :: H264Settings
s@H264Settings' {} Maybe H264TimecodeInsertionBehavior
a -> H264Settings
s {$sel:timecodeInsertion:H264Settings' :: Maybe H264TimecodeInsertionBehavior
timecodeInsertion = Maybe H264TimecodeInsertionBehavior
a} :: H264Settings)

-- | Pixel Aspect Ratio numerator.
h264Settings_parNumerator :: Lens.Lens' H264Settings (Prelude.Maybe Prelude.Natural)
h264Settings_parNumerator :: (Maybe Natural -> f (Maybe Natural))
-> H264Settings -> f H264Settings
h264Settings_parNumerator = (H264Settings -> Maybe Natural)
-> (H264Settings -> Maybe Natural -> H264Settings)
-> Lens H264Settings H264Settings (Maybe Natural) (Maybe Natural)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe Natural
parNumerator :: Maybe Natural
$sel:parNumerator:H264Settings' :: H264Settings -> Maybe Natural
parNumerator} -> Maybe Natural
parNumerator) (\s :: H264Settings
s@H264Settings' {} Maybe Natural
a -> H264Settings
s {$sel:parNumerator:H264Settings' :: Maybe Natural
parNumerator = Maybe Natural
a} :: H264Settings)

-- | Indicates that AFD values will be written into the output stream. If
-- afdSignaling is \"auto\", the system will try to preserve the input AFD
-- value (in cases where multiple AFD values are valid). If set to
-- \"fixed\", the AFD value will be the value configured in the fixedAfd
-- parameter.
h264Settings_afdSignaling :: Lens.Lens' H264Settings (Prelude.Maybe AfdSignaling)
h264Settings_afdSignaling :: (Maybe AfdSignaling -> f (Maybe AfdSignaling))
-> H264Settings -> f H264Settings
h264Settings_afdSignaling = (H264Settings -> Maybe AfdSignaling)
-> (H264Settings -> Maybe AfdSignaling -> H264Settings)
-> Lens
     H264Settings H264Settings (Maybe AfdSignaling) (Maybe AfdSignaling)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe AfdSignaling
afdSignaling :: Maybe AfdSignaling
$sel:afdSignaling:H264Settings' :: H264Settings -> Maybe AfdSignaling
afdSignaling} -> Maybe AfdSignaling
afdSignaling) (\s :: H264Settings
s@H264Settings' {} Maybe AfdSignaling
a -> H264Settings
s {$sel:afdSignaling:H264Settings' :: Maybe AfdSignaling
afdSignaling = Maybe AfdSignaling
a} :: H264Settings)

-- | GOP size (keyframe interval) in units of either frames or seconds per
-- gopSizeUnits. If gopSizeUnits is frames, gopSize must be an integer and
-- must be greater than or equal to 1. If gopSizeUnits is seconds, gopSize
-- must be greater than 0, but need not be an integer.
h264Settings_gopSize :: Lens.Lens' H264Settings (Prelude.Maybe Prelude.Double)
h264Settings_gopSize :: (Maybe Double -> f (Maybe Double))
-> H264Settings -> f H264Settings
h264Settings_gopSize = (H264Settings -> Maybe Double)
-> (H264Settings -> Maybe Double -> H264Settings)
-> Lens H264Settings H264Settings (Maybe Double) (Maybe Double)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe Double
gopSize :: Maybe Double
$sel:gopSize:H264Settings' :: H264Settings -> Maybe Double
gopSize} -> Maybe Double
gopSize) (\s :: H264Settings
s@H264Settings' {} Maybe Double
a -> H264Settings
s {$sel:gopSize:H264Settings' :: Maybe Double
gopSize = Maybe Double
a} :: H264Settings)

-- | Indicates if the gopSize is specified in frames or seconds. If seconds
-- the system will convert the gopSize into a frame count at run time.
h264Settings_gopSizeUnits :: Lens.Lens' H264Settings (Prelude.Maybe H264GopSizeUnits)
h264Settings_gopSizeUnits :: (Maybe H264GopSizeUnits -> f (Maybe H264GopSizeUnits))
-> H264Settings -> f H264Settings
h264Settings_gopSizeUnits = (H264Settings -> Maybe H264GopSizeUnits)
-> (H264Settings -> Maybe H264GopSizeUnits -> H264Settings)
-> Lens
     H264Settings
     H264Settings
     (Maybe H264GopSizeUnits)
     (Maybe H264GopSizeUnits)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe H264GopSizeUnits
gopSizeUnits :: Maybe H264GopSizeUnits
$sel:gopSizeUnits:H264Settings' :: H264Settings -> Maybe H264GopSizeUnits
gopSizeUnits} -> Maybe H264GopSizeUnits
gopSizeUnits) (\s :: H264Settings
s@H264Settings' {} Maybe H264GopSizeUnits
a -> H264Settings
s {$sel:gopSizeUnits:H264Settings' :: Maybe H264GopSizeUnits
gopSizeUnits = Maybe H264GopSizeUnits
a} :: H264Settings)

-- | If set to fixed, use gopNumBFrames B-frames per sub-GOP. If set to
-- dynamic, optimize the number of B-frames used for each sub-GOP to
-- improve visual quality.
h264Settings_subgopLength :: Lens.Lens' H264Settings (Prelude.Maybe H264SubGopLength)
h264Settings_subgopLength :: (Maybe H264SubGopLength -> f (Maybe H264SubGopLength))
-> H264Settings -> f H264Settings
h264Settings_subgopLength = (H264Settings -> Maybe H264SubGopLength)
-> (H264Settings -> Maybe H264SubGopLength -> H264Settings)
-> Lens
     H264Settings
     H264Settings
     (Maybe H264SubGopLength)
     (Maybe H264SubGopLength)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe H264SubGopLength
subgopLength :: Maybe H264SubGopLength
$sel:subgopLength:H264Settings' :: H264Settings -> Maybe H264SubGopLength
subgopLength} -> Maybe H264SubGopLength
subgopLength) (\s :: H264Settings
s@H264Settings' {} Maybe H264SubGopLength
a -> H264Settings
s {$sel:subgopLength:H264Settings' :: Maybe H264SubGopLength
subgopLength = Maybe H264SubGopLength
a} :: H264Settings)

-- | Leave as STANDARD_QUALITY or choose a different value (which might
-- result in additional costs to run the channel). - ENHANCED_QUALITY:
-- Produces a slightly better video quality without an increase in the
-- bitrate. Has an effect only when the Rate control mode is QVBR or CBR.
-- If this channel is in a MediaLive multiplex, the value must be
-- ENHANCED_QUALITY. - STANDARD_QUALITY: Valid for any Rate control mode.
h264Settings_qualityLevel :: Lens.Lens' H264Settings (Prelude.Maybe H264QualityLevel)
h264Settings_qualityLevel :: (Maybe H264QualityLevel -> f (Maybe H264QualityLevel))
-> H264Settings -> f H264Settings
h264Settings_qualityLevel = (H264Settings -> Maybe H264QualityLevel)
-> (H264Settings -> Maybe H264QualityLevel -> H264Settings)
-> Lens
     H264Settings
     H264Settings
     (Maybe H264QualityLevel)
     (Maybe H264QualityLevel)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe H264QualityLevel
qualityLevel :: Maybe H264QualityLevel
$sel:qualityLevel:H264Settings' :: H264Settings -> Maybe H264QualityLevel
qualityLevel} -> Maybe H264QualityLevel
qualityLevel) (\s :: H264Settings
s@H264Settings' {} Maybe H264QualityLevel
a -> H264Settings
s {$sel:qualityLevel:H264Settings' :: Maybe H264QualityLevel
qualityLevel = Maybe H264QualityLevel
a} :: H264Settings)

-- | Number of slices per picture. Must be less than or equal to the number
-- of macroblock rows for progressive pictures, and less than or equal to
-- half the number of macroblock rows for interlaced pictures. This field
-- is optional; when no value is specified the encoder will choose the
-- number of slices based on encode resolution.
h264Settings_slices :: Lens.Lens' H264Settings (Prelude.Maybe Prelude.Natural)
h264Settings_slices :: (Maybe Natural -> f (Maybe Natural))
-> H264Settings -> f H264Settings
h264Settings_slices = (H264Settings -> Maybe Natural)
-> (H264Settings -> Maybe Natural -> H264Settings)
-> Lens H264Settings H264Settings (Maybe Natural) (Maybe Natural)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe Natural
slices :: Maybe Natural
$sel:slices:H264Settings' :: H264Settings -> Maybe Natural
slices} -> Maybe Natural
slices) (\s :: H264Settings
s@H264Settings' {} Maybe Natural
a -> H264Settings
s {$sel:slices:H264Settings' :: Maybe Natural
slices = Maybe Natural
a} :: H264Settings)

-- | H.264 Profile.
h264Settings_profile :: Lens.Lens' H264Settings (Prelude.Maybe H264Profile)
h264Settings_profile :: (Maybe H264Profile -> f (Maybe H264Profile))
-> H264Settings -> f H264Settings
h264Settings_profile = (H264Settings -> Maybe H264Profile)
-> (H264Settings -> Maybe H264Profile -> H264Settings)
-> Lens
     H264Settings H264Settings (Maybe H264Profile) (Maybe H264Profile)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe H264Profile
profile :: Maybe H264Profile
$sel:profile:H264Settings' :: H264Settings -> Maybe H264Profile
profile} -> Maybe H264Profile
profile) (\s :: H264Settings
s@H264Settings' {} Maybe H264Profile
a -> H264Settings
s {$sel:profile:H264Settings' :: Maybe H264Profile
profile = Maybe H264Profile
a} :: H264Settings)

-- | Rate control mode. QVBR: Quality will match the specified quality level
-- except when it is constrained by the maximum bitrate. Recommended if you
-- or your viewers pay for bandwidth. VBR: Quality and bitrate vary,
-- depending on the video complexity. Recommended instead of QVBR if you
-- want to maintain a specific average bitrate over the duration of the
-- channel. CBR: Quality varies, depending on the video complexity.
-- Recommended only if you distribute your assets to devices that cannot
-- handle variable bitrates. Multiplex: This rate control mode is only
-- supported (and is required) when the video is being delivered to a
-- MediaLive Multiplex in which case the rate control configuration is
-- controlled by the properties within the Multiplex Program.
h264Settings_rateControlMode :: Lens.Lens' H264Settings (Prelude.Maybe H264RateControlMode)
h264Settings_rateControlMode :: (Maybe H264RateControlMode -> f (Maybe H264RateControlMode))
-> H264Settings -> f H264Settings
h264Settings_rateControlMode = (H264Settings -> Maybe H264RateControlMode)
-> (H264Settings -> Maybe H264RateControlMode -> H264Settings)
-> Lens
     H264Settings
     H264Settings
     (Maybe H264RateControlMode)
     (Maybe H264RateControlMode)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe H264RateControlMode
rateControlMode :: Maybe H264RateControlMode
$sel:rateControlMode:H264Settings' :: H264Settings -> Maybe H264RateControlMode
rateControlMode} -> Maybe H264RateControlMode
rateControlMode) (\s :: H264Settings
s@H264Settings' {} Maybe H264RateControlMode
a -> H264Settings
s {$sel:rateControlMode:H264Settings' :: Maybe H264RateControlMode
rateControlMode = Maybe H264RateControlMode
a} :: H264Settings)

-- | Only meaningful if sceneChangeDetect is set to enabled. Defaults to 5 if
-- multiplex rate control is used. Enforces separation between repeated
-- (cadence) I-frames and I-frames inserted by Scene Change Detection. If a
-- scene change I-frame is within I-interval frames of a cadence I-frame,
-- the GOP is shrunk and\/or stretched to the scene change I-frame. GOP
-- stretch requires enabling lookahead as well as setting I-interval. The
-- normal cadence resumes for the next GOP. Note: Maximum GOP stretch = GOP
-- size + Min-I-interval - 1
h264Settings_minIInterval :: Lens.Lens' H264Settings (Prelude.Maybe Prelude.Natural)
h264Settings_minIInterval :: (Maybe Natural -> f (Maybe Natural))
-> H264Settings -> f H264Settings
h264Settings_minIInterval = (H264Settings -> Maybe Natural)
-> (H264Settings -> Maybe Natural -> H264Settings)
-> Lens H264Settings H264Settings (Maybe Natural) (Maybe Natural)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe Natural
minIInterval :: Maybe Natural
$sel:minIInterval:H264Settings' :: H264Settings -> Maybe Natural
minIInterval} -> Maybe Natural
minIInterval) (\s :: H264Settings
s@H264Settings' {} Maybe Natural
a -> H264Settings
s {$sel:minIInterval:H264Settings' :: Maybe Natural
minIInterval = Maybe Natural
a} :: H264Settings)

-- | Controls the target quality for the video encode. Applies only when the
-- rate control mode is QVBR. You can set a target quality or you can let
-- MediaLive determine the best quality. To set a target quality, enter
-- values in the QVBR quality level field and the Max bitrate field. Enter
-- values that suit your most important viewing devices. Recommended values
-- are: - Primary screen: Quality level: 8 to 10. Max bitrate: 4M - PC or
-- tablet: Quality level: 7. Max bitrate: 1.5M to 3M - Smartphone: Quality
-- level: 6. Max bitrate: 1M to 1.5M To let MediaLive decide, leave the
-- QVBR quality level field empty, and in Max bitrate enter the maximum
-- rate you want in the video. For more information, see the section called
-- \"Video - rate control mode\" in the MediaLive user guide
h264Settings_qvbrQualityLevel :: Lens.Lens' H264Settings (Prelude.Maybe Prelude.Natural)
h264Settings_qvbrQualityLevel :: (Maybe Natural -> f (Maybe Natural))
-> H264Settings -> f H264Settings
h264Settings_qvbrQualityLevel = (H264Settings -> Maybe Natural)
-> (H264Settings -> Maybe Natural -> H264Settings)
-> Lens H264Settings H264Settings (Maybe Natural) (Maybe Natural)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe Natural
qvbrQualityLevel :: Maybe Natural
$sel:qvbrQualityLevel:H264Settings' :: H264Settings -> Maybe Natural
qvbrQualityLevel} -> Maybe Natural
qvbrQualityLevel) (\s :: H264Settings
s@H264Settings' {} Maybe Natural
a -> H264Settings
s {$sel:qvbrQualityLevel:H264Settings' :: Maybe Natural
qvbrQualityLevel = Maybe Natural
a} :: H264Settings)

-- | Color Space settings
h264Settings_colorSpaceSettings :: Lens.Lens' H264Settings (Prelude.Maybe H264ColorSpaceSettings)
h264Settings_colorSpaceSettings :: (Maybe H264ColorSpaceSettings -> f (Maybe H264ColorSpaceSettings))
-> H264Settings -> f H264Settings
h264Settings_colorSpaceSettings = (H264Settings -> Maybe H264ColorSpaceSettings)
-> (H264Settings -> Maybe H264ColorSpaceSettings -> H264Settings)
-> Lens
     H264Settings
     H264Settings
     (Maybe H264ColorSpaceSettings)
     (Maybe H264ColorSpaceSettings)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe H264ColorSpaceSettings
colorSpaceSettings :: Maybe H264ColorSpaceSettings
$sel:colorSpaceSettings:H264Settings' :: H264Settings -> Maybe H264ColorSpaceSettings
colorSpaceSettings} -> Maybe H264ColorSpaceSettings
colorSpaceSettings) (\s :: H264Settings
s@H264Settings' {} Maybe H264ColorSpaceSettings
a -> H264Settings
s {$sel:colorSpaceSettings:H264Settings' :: Maybe H264ColorSpaceSettings
colorSpaceSettings = Maybe H264ColorSpaceSettings
a} :: H264Settings)

-- | This field indicates how the output pixel aspect ratio is specified. If
-- \"specified\" is selected then the output video pixel aspect ratio is
-- determined by parNumerator and parDenominator, else if
-- \"initializeFromSource\" is selected then the output pixsel aspect ratio
-- will be set equal to the input video pixel aspect ratio of the first
-- input.
h264Settings_parControl :: Lens.Lens' H264Settings (Prelude.Maybe H264ParControl)
h264Settings_parControl :: (Maybe H264ParControl -> f (Maybe H264ParControl))
-> H264Settings -> f H264Settings
h264Settings_parControl = (H264Settings -> Maybe H264ParControl)
-> (H264Settings -> Maybe H264ParControl -> H264Settings)
-> Lens
     H264Settings
     H264Settings
     (Maybe H264ParControl)
     (Maybe H264ParControl)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe H264ParControl
parControl :: Maybe H264ParControl
$sel:parControl:H264Settings' :: H264Settings -> Maybe H264ParControl
parControl} -> Maybe H264ParControl
parControl) (\s :: H264Settings
s@H264Settings' {} Maybe H264ParControl
a -> H264Settings
s {$sel:parControl:H264Settings' :: Maybe H264ParControl
parControl = Maybe H264ParControl
a} :: H264Settings)

-- | Flicker AQ makes adjustments within each frame to reduce flicker or
-- \'pop\' on I-frames. The value to enter in this field depends on the
-- value in the Adaptive quantization field: If you have set the Adaptive
-- quantization field to Auto, MediaLive ignores any value in this field.
-- MediaLive will determine if flicker AQ is appropriate and will apply the
-- appropriate strength. If you have set the Adaptive quantization field to
-- a strength, you can set this field to Enabled or Disabled. Enabled:
-- MediaLive will apply flicker AQ using the specified strength. Disabled:
-- MediaLive won\'t apply flicker AQ. If you have set the Adaptive
-- quantization to Disabled, MediaLive ignores any value in this field and
-- doesn\'t apply flicker AQ.
h264Settings_flickerAq :: Lens.Lens' H264Settings (Prelude.Maybe H264FlickerAq)
h264Settings_flickerAq :: (Maybe H264FlickerAq -> f (Maybe H264FlickerAq))
-> H264Settings -> f H264Settings
h264Settings_flickerAq = (H264Settings -> Maybe H264FlickerAq)
-> (H264Settings -> Maybe H264FlickerAq -> H264Settings)
-> Lens
     H264Settings
     H264Settings
     (Maybe H264FlickerAq)
     (Maybe H264FlickerAq)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe H264FlickerAq
flickerAq :: Maybe H264FlickerAq
$sel:flickerAq:H264Settings' :: H264Settings -> Maybe H264FlickerAq
flickerAq} -> Maybe H264FlickerAq
flickerAq) (\s :: H264Settings
s@H264Settings' {} Maybe H264FlickerAq
a -> H264Settings
s {$sel:flickerAq:H264Settings' :: Maybe H264FlickerAq
flickerAq = Maybe H264FlickerAq
a} :: H264Settings)

-- | Size of buffer (HRD buffer model) in bits.
h264Settings_bufSize :: Lens.Lens' H264Settings (Prelude.Maybe Prelude.Natural)
h264Settings_bufSize :: (Maybe Natural -> f (Maybe Natural))
-> H264Settings -> f H264Settings
h264Settings_bufSize = (H264Settings -> Maybe Natural)
-> (H264Settings -> Maybe Natural -> H264Settings)
-> Lens H264Settings H264Settings (Maybe Natural) (Maybe Natural)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe Natural
bufSize :: Maybe Natural
$sel:bufSize:H264Settings' :: H264Settings -> Maybe Natural
bufSize} -> Maybe Natural
bufSize) (\s :: H264Settings
s@H264Settings' {} Maybe Natural
a -> H264Settings
s {$sel:bufSize:H264Settings' :: Maybe Natural
bufSize = Maybe Natural
a} :: H264Settings)

-- | Spatial AQ makes adjustments within each frame based on spatial
-- variation of content complexity. The value to enter in this field
-- depends on the value in the Adaptive quantization field: If you have set
-- the Adaptive quantization field to Auto, MediaLive ignores any value in
-- this field. MediaLive will determine if spatial AQ is appropriate and
-- will apply the appropriate strength. If you have set the Adaptive
-- quantization field to a strength, you can set this field to Enabled or
-- Disabled. Enabled: MediaLive will apply spatial AQ using the specified
-- strength. Disabled: MediaLive won\'t apply spatial AQ. If you have set
-- the Adaptive quantization to Disabled, MediaLive ignores any value in
-- this field and doesn\'t apply spatial AQ.
h264Settings_spatialAq :: Lens.Lens' H264Settings (Prelude.Maybe H264SpatialAq)
h264Settings_spatialAq :: (Maybe H264SpatialAq -> f (Maybe H264SpatialAq))
-> H264Settings -> f H264Settings
h264Settings_spatialAq = (H264Settings -> Maybe H264SpatialAq)
-> (H264Settings -> Maybe H264SpatialAq -> H264Settings)
-> Lens
     H264Settings
     H264Settings
     (Maybe H264SpatialAq)
     (Maybe H264SpatialAq)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe H264SpatialAq
spatialAq :: Maybe H264SpatialAq
$sel:spatialAq:H264Settings' :: H264Settings -> Maybe H264SpatialAq
spatialAq} -> Maybe H264SpatialAq
spatialAq) (\s :: H264Settings
s@H264Settings' {} Maybe H264SpatialAq
a -> H264Settings
s {$sel:spatialAq:H264Settings' :: Maybe H264SpatialAq
spatialAq = Maybe H264SpatialAq
a} :: H264Settings)

-- | Number of B-frames between reference frames.
h264Settings_gopNumBFrames :: Lens.Lens' H264Settings (Prelude.Maybe Prelude.Natural)
h264Settings_gopNumBFrames :: (Maybe Natural -> f (Maybe Natural))
-> H264Settings -> f H264Settings
h264Settings_gopNumBFrames = (H264Settings -> Maybe Natural)
-> (H264Settings -> Maybe Natural -> H264Settings)
-> Lens H264Settings H264Settings (Maybe Natural) (Maybe Natural)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe Natural
gopNumBFrames :: Maybe Natural
$sel:gopNumBFrames:H264Settings' :: H264Settings -> Maybe Natural
gopNumBFrames} -> Maybe Natural
gopNumBFrames) (\s :: H264Settings
s@H264Settings' {} Maybe Natural
a -> H264Settings
s {$sel:gopNumBFrames:H264Settings' :: Maybe Natural
gopNumBFrames = Maybe Natural
a} :: H264Settings)

-- | Four bit AFD value to write on all frames of video in the output stream.
-- Only valid when afdSignaling is set to \'Fixed\'.
h264Settings_fixedAfd :: Lens.Lens' H264Settings (Prelude.Maybe FixedAfd)
h264Settings_fixedAfd :: (Maybe FixedAfd -> f (Maybe FixedAfd))
-> H264Settings -> f H264Settings
h264Settings_fixedAfd = (H264Settings -> Maybe FixedAfd)
-> (H264Settings -> Maybe FixedAfd -> H264Settings)
-> Lens H264Settings H264Settings (Maybe FixedAfd) (Maybe FixedAfd)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe FixedAfd
fixedAfd :: Maybe FixedAfd
$sel:fixedAfd:H264Settings' :: H264Settings -> Maybe FixedAfd
fixedAfd} -> Maybe FixedAfd
fixedAfd) (\s :: H264Settings
s@H264Settings' {} Maybe FixedAfd
a -> H264Settings
s {$sel:fixedAfd:H264Settings' :: Maybe FixedAfd
fixedAfd = Maybe FixedAfd
a} :: H264Settings)

-- | Softness. Selects quantizer matrix, larger values reduce high-frequency
-- content in the encoded image. If not set to zero, must be greater than
-- 15.
h264Settings_softness :: Lens.Lens' H264Settings (Prelude.Maybe Prelude.Natural)
h264Settings_softness :: (Maybe Natural -> f (Maybe Natural))
-> H264Settings -> f H264Settings
h264Settings_softness = (H264Settings -> Maybe Natural)
-> (H264Settings -> Maybe Natural -> H264Settings)
-> Lens H264Settings H264Settings (Maybe Natural) (Maybe Natural)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe Natural
softness :: Maybe Natural
$sel:softness:H264Settings' :: H264Settings -> Maybe Natural
softness} -> Maybe Natural
softness) (\s :: H264Settings
s@H264Settings' {} Maybe Natural
a -> H264Settings
s {$sel:softness:H264Settings' :: Maybe Natural
softness = Maybe Natural
a} :: H264Settings)

-- | Optional filters that you can apply to an encode.
h264Settings_filterSettings :: Lens.Lens' H264Settings (Prelude.Maybe H264FilterSettings)
h264Settings_filterSettings :: (Maybe H264FilterSettings -> f (Maybe H264FilterSettings))
-> H264Settings -> f H264Settings
h264Settings_filterSettings = (H264Settings -> Maybe H264FilterSettings)
-> (H264Settings -> Maybe H264FilterSettings -> H264Settings)
-> Lens
     H264Settings
     H264Settings
     (Maybe H264FilterSettings)
     (Maybe H264FilterSettings)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe H264FilterSettings
filterSettings :: Maybe H264FilterSettings
$sel:filterSettings:H264Settings' :: H264Settings -> Maybe H264FilterSettings
filterSettings} -> Maybe H264FilterSettings
filterSettings) (\s :: H264Settings
s@H264Settings' {} Maybe H264FilterSettings
a -> H264Settings
s {$sel:filterSettings:H264Settings' :: Maybe H264FilterSettings
filterSettings = Maybe H264FilterSettings
a} :: H264Settings)

-- | Average bitrate in bits\/second. Required when the rate control mode is
-- VBR or CBR. Not used for QVBR. In an MS Smooth output group, each output
-- must have a unique value when its bitrate is rounded down to the nearest
-- multiple of 1000.
h264Settings_bitrate :: Lens.Lens' H264Settings (Prelude.Maybe Prelude.Natural)
h264Settings_bitrate :: (Maybe Natural -> f (Maybe Natural))
-> H264Settings -> f H264Settings
h264Settings_bitrate = (H264Settings -> Maybe Natural)
-> (H264Settings -> Maybe Natural -> H264Settings)
-> Lens H264Settings H264Settings (Maybe Natural) (Maybe Natural)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe Natural
bitrate :: Maybe Natural
$sel:bitrate:H264Settings' :: H264Settings -> Maybe Natural
bitrate} -> Maybe Natural
bitrate) (\s :: H264Settings
s@H264Settings' {} Maybe Natural
a -> H264Settings
s {$sel:bitrate:H264Settings' :: Maybe Natural
bitrate = Maybe Natural
a} :: H264Settings)

-- | Framerate denominator.
h264Settings_framerateDenominator :: Lens.Lens' H264Settings (Prelude.Maybe Prelude.Natural)
h264Settings_framerateDenominator :: (Maybe Natural -> f (Maybe Natural))
-> H264Settings -> f H264Settings
h264Settings_framerateDenominator = (H264Settings -> Maybe Natural)
-> (H264Settings -> Maybe Natural -> H264Settings)
-> Lens H264Settings H264Settings (Maybe Natural) (Maybe Natural)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe Natural
framerateDenominator :: Maybe Natural
$sel:framerateDenominator:H264Settings' :: H264Settings -> Maybe Natural
framerateDenominator} -> Maybe Natural
framerateDenominator) (\s :: H264Settings
s@H264Settings' {} Maybe Natural
a -> H264Settings
s {$sel:framerateDenominator:H264Settings' :: Maybe Natural
framerateDenominator = Maybe Natural
a} :: H264Settings)

-- | This setting applies only when scan type is \"interlaced.\" It controls
-- whether coding is performed on a field basis or on a frame basis. (When
-- the video is progressive, the coding is always performed on a frame
-- basis.) enabled: Force MediaLive to code on a field basis, so that odd
-- and even sets of fields are coded separately. disabled: Code the two
-- sets of fields separately (on a field basis) or together (on a frame
-- basis using PAFF), depending on what is most appropriate for the
-- content.
h264Settings_forceFieldPictures :: Lens.Lens' H264Settings (Prelude.Maybe H264ForceFieldPictures)
h264Settings_forceFieldPictures :: (Maybe H264ForceFieldPictures -> f (Maybe H264ForceFieldPictures))
-> H264Settings -> f H264Settings
h264Settings_forceFieldPictures = (H264Settings -> Maybe H264ForceFieldPictures)
-> (H264Settings -> Maybe H264ForceFieldPictures -> H264Settings)
-> Lens
     H264Settings
     H264Settings
     (Maybe H264ForceFieldPictures)
     (Maybe H264ForceFieldPictures)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe H264ForceFieldPictures
forceFieldPictures :: Maybe H264ForceFieldPictures
$sel:forceFieldPictures:H264Settings' :: H264Settings -> Maybe H264ForceFieldPictures
forceFieldPictures} -> Maybe H264ForceFieldPictures
forceFieldPictures) (\s :: H264Settings
s@H264Settings' {} Maybe H264ForceFieldPictures
a -> H264Settings
s {$sel:forceFieldPictures:H264Settings' :: Maybe H264ForceFieldPictures
forceFieldPictures = Maybe H264ForceFieldPictures
a} :: H264Settings)

-- | Entropy encoding mode. Use cabac (must be in Main or High profile) or
-- cavlc.
h264Settings_entropyEncoding :: Lens.Lens' H264Settings (Prelude.Maybe H264EntropyEncoding)
h264Settings_entropyEncoding :: (Maybe H264EntropyEncoding -> f (Maybe H264EntropyEncoding))
-> H264Settings -> f H264Settings
h264Settings_entropyEncoding = (H264Settings -> Maybe H264EntropyEncoding)
-> (H264Settings -> Maybe H264EntropyEncoding -> H264Settings)
-> Lens
     H264Settings
     H264Settings
     (Maybe H264EntropyEncoding)
     (Maybe H264EntropyEncoding)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe H264EntropyEncoding
entropyEncoding :: Maybe H264EntropyEncoding
$sel:entropyEncoding:H264Settings' :: H264Settings -> Maybe H264EntropyEncoding
entropyEncoding} -> Maybe H264EntropyEncoding
entropyEncoding) (\s :: H264Settings
s@H264Settings' {} Maybe H264EntropyEncoding
a -> H264Settings
s {$sel:entropyEncoding:H264Settings' :: Maybe H264EntropyEncoding
entropyEncoding = Maybe H264EntropyEncoding
a} :: H264Settings)

-- | This field indicates how the output video frame rate is specified. If
-- \"specified\" is selected then the output video frame rate is determined
-- by framerateNumerator and framerateDenominator, else if
-- \"initializeFromSource\" is selected then the output video frame rate
-- will be set equal to the input video frame rate of the first input.
h264Settings_framerateControl :: Lens.Lens' H264Settings (Prelude.Maybe H264FramerateControl)
h264Settings_framerateControl :: (Maybe H264FramerateControl -> f (Maybe H264FramerateControl))
-> H264Settings -> f H264Settings
h264Settings_framerateControl = (H264Settings -> Maybe H264FramerateControl)
-> (H264Settings -> Maybe H264FramerateControl -> H264Settings)
-> Lens
     H264Settings
     H264Settings
     (Maybe H264FramerateControl)
     (Maybe H264FramerateControl)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe H264FramerateControl
framerateControl :: Maybe H264FramerateControl
$sel:framerateControl:H264Settings' :: H264Settings -> Maybe H264FramerateControl
framerateControl} -> Maybe H264FramerateControl
framerateControl) (\s :: H264Settings
s@H264Settings' {} Maybe H264FramerateControl
a -> H264Settings
s {$sel:framerateControl:H264Settings' :: Maybe H264FramerateControl
framerateControl = Maybe H264FramerateControl
a} :: H264Settings)

-- | Includes colorspace metadata in the output.
h264Settings_colorMetadata :: Lens.Lens' H264Settings (Prelude.Maybe H264ColorMetadata)
h264Settings_colorMetadata :: (Maybe H264ColorMetadata -> f (Maybe H264ColorMetadata))
-> H264Settings -> f H264Settings
h264Settings_colorMetadata = (H264Settings -> Maybe H264ColorMetadata)
-> (H264Settings -> Maybe H264ColorMetadata -> H264Settings)
-> Lens
     H264Settings
     H264Settings
     (Maybe H264ColorMetadata)
     (Maybe H264ColorMetadata)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe H264ColorMetadata
colorMetadata :: Maybe H264ColorMetadata
$sel:colorMetadata:H264Settings' :: H264Settings -> Maybe H264ColorMetadata
colorMetadata} -> Maybe H264ColorMetadata
colorMetadata) (\s :: H264Settings
s@H264Settings' {} Maybe H264ColorMetadata
a -> H264Settings
s {$sel:colorMetadata:H264Settings' :: Maybe H264ColorMetadata
colorMetadata = Maybe H264ColorMetadata
a} :: H264Settings)

-- | Amount of lookahead. A value of low can decrease latency and memory
-- usage, while high can produce better quality for certain content.
h264Settings_lookAheadRateControl :: Lens.Lens' H264Settings (Prelude.Maybe H264LookAheadRateControl)
h264Settings_lookAheadRateControl :: (Maybe H264LookAheadRateControl
 -> f (Maybe H264LookAheadRateControl))
-> H264Settings -> f H264Settings
h264Settings_lookAheadRateControl = (H264Settings -> Maybe H264LookAheadRateControl)
-> (H264Settings -> Maybe H264LookAheadRateControl -> H264Settings)
-> Lens
     H264Settings
     H264Settings
     (Maybe H264LookAheadRateControl)
     (Maybe H264LookAheadRateControl)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe H264LookAheadRateControl
lookAheadRateControl :: Maybe H264LookAheadRateControl
$sel:lookAheadRateControl:H264Settings' :: H264Settings -> Maybe H264LookAheadRateControl
lookAheadRateControl} -> Maybe H264LookAheadRateControl
lookAheadRateControl) (\s :: H264Settings
s@H264Settings' {} Maybe H264LookAheadRateControl
a -> H264Settings
s {$sel:lookAheadRateControl:H264Settings' :: Maybe H264LookAheadRateControl
lookAheadRateControl = Maybe H264LookAheadRateControl
a} :: H264Settings)

-- | Enables or disables adaptive quantization, which is a technique
-- MediaLive can apply to video on a frame-by-frame basis to produce more
-- compression without losing quality. There are three types of adaptive
-- quantization: flicker, spatial, and temporal. Set the field in one of
-- these ways: Set to Auto. Recommended. For each type of AQ, MediaLive
-- will determine if AQ is needed, and if so, the appropriate strength. Set
-- a strength (a value other than Auto or Disable). This strength will
-- apply to any of the AQ fields that you choose to enable. Set to Disabled
-- to disable all types of adaptive quantization.
h264Settings_adaptiveQuantization :: Lens.Lens' H264Settings (Prelude.Maybe H264AdaptiveQuantization)
h264Settings_adaptiveQuantization :: (Maybe H264AdaptiveQuantization
 -> f (Maybe H264AdaptiveQuantization))
-> H264Settings -> f H264Settings
h264Settings_adaptiveQuantization = (H264Settings -> Maybe H264AdaptiveQuantization)
-> (H264Settings -> Maybe H264AdaptiveQuantization -> H264Settings)
-> Lens
     H264Settings
     H264Settings
     (Maybe H264AdaptiveQuantization)
     (Maybe H264AdaptiveQuantization)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe H264AdaptiveQuantization
adaptiveQuantization :: Maybe H264AdaptiveQuantization
$sel:adaptiveQuantization:H264Settings' :: H264Settings -> Maybe H264AdaptiveQuantization
adaptiveQuantization} -> Maybe H264AdaptiveQuantization
adaptiveQuantization) (\s :: H264Settings
s@H264Settings' {} Maybe H264AdaptiveQuantization
a -> H264Settings
s {$sel:adaptiveQuantization:H264Settings' :: Maybe H264AdaptiveQuantization
adaptiveQuantization = Maybe H264AdaptiveQuantization
a} :: H264Settings)

-- | Framerate numerator - framerate is a fraction, e.g. 24000 \/ 1001 =
-- 23.976 fps.
h264Settings_framerateNumerator :: Lens.Lens' H264Settings (Prelude.Maybe Prelude.Natural)
h264Settings_framerateNumerator :: (Maybe Natural -> f (Maybe Natural))
-> H264Settings -> f H264Settings
h264Settings_framerateNumerator = (H264Settings -> Maybe Natural)
-> (H264Settings -> Maybe Natural -> H264Settings)
-> Lens H264Settings H264Settings (Maybe Natural) (Maybe Natural)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe Natural
framerateNumerator :: Maybe Natural
$sel:framerateNumerator:H264Settings' :: H264Settings -> Maybe Natural
framerateNumerator} -> Maybe Natural
framerateNumerator) (\s :: H264Settings
s@H264Settings' {} Maybe Natural
a -> H264Settings
s {$sel:framerateNumerator:H264Settings' :: Maybe Natural
framerateNumerator = Maybe Natural
a} :: H264Settings)

-- | H.264 Level.
h264Settings_level :: Lens.Lens' H264Settings (Prelude.Maybe H264Level)
h264Settings_level :: (Maybe H264Level -> f (Maybe H264Level))
-> H264Settings -> f H264Settings
h264Settings_level = (H264Settings -> Maybe H264Level)
-> (H264Settings -> Maybe H264Level -> H264Settings)
-> Lens
     H264Settings H264Settings (Maybe H264Level) (Maybe H264Level)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe H264Level
level :: Maybe H264Level
$sel:level:H264Settings' :: H264Settings -> Maybe H264Level
level} -> Maybe H264Level
level) (\s :: H264Settings
s@H264Settings' {} Maybe H264Level
a -> H264Settings
s {$sel:level:H264Settings' :: Maybe H264Level
level = Maybe H264Level
a} :: H264Settings)

-- | Documentation update needed
h264Settings_gopBReference :: Lens.Lens' H264Settings (Prelude.Maybe H264GopBReference)
h264Settings_gopBReference :: (Maybe H264GopBReference -> f (Maybe H264GopBReference))
-> H264Settings -> f H264Settings
h264Settings_gopBReference = (H264Settings -> Maybe H264GopBReference)
-> (H264Settings -> Maybe H264GopBReference -> H264Settings)
-> Lens
     H264Settings
     H264Settings
     (Maybe H264GopBReference)
     (Maybe H264GopBReference)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe H264GopBReference
gopBReference :: Maybe H264GopBReference
$sel:gopBReference:H264Settings' :: H264Settings -> Maybe H264GopBReference
gopBReference} -> Maybe H264GopBReference
gopBReference) (\s :: H264Settings
s@H264Settings' {} Maybe H264GopBReference
a -> H264Settings
s {$sel:gopBReference:H264Settings' :: Maybe H264GopBReference
gopBReference = Maybe H264GopBReference
a} :: H264Settings)

-- | For QVBR: See the tooltip for Quality level For VBR: Set the maximum
-- bitrate in order to accommodate expected spikes in the complexity of the
-- video.
h264Settings_maxBitrate :: Lens.Lens' H264Settings (Prelude.Maybe Prelude.Natural)
h264Settings_maxBitrate :: (Maybe Natural -> f (Maybe Natural))
-> H264Settings -> f H264Settings
h264Settings_maxBitrate = (H264Settings -> Maybe Natural)
-> (H264Settings -> Maybe Natural -> H264Settings)
-> Lens H264Settings H264Settings (Maybe Natural) (Maybe Natural)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe Natural
maxBitrate :: Maybe Natural
$sel:maxBitrate:H264Settings' :: H264Settings -> Maybe Natural
maxBitrate} -> Maybe Natural
maxBitrate) (\s :: H264Settings
s@H264Settings' {} Maybe Natural
a -> H264Settings
s {$sel:maxBitrate:H264Settings' :: Maybe Natural
maxBitrate = Maybe Natural
a} :: H264Settings)

-- | Produces a bitstream compliant with SMPTE RP-2027.
h264Settings_syntax :: Lens.Lens' H264Settings (Prelude.Maybe H264Syntax)
h264Settings_syntax :: (Maybe H264Syntax -> f (Maybe H264Syntax))
-> H264Settings -> f H264Settings
h264Settings_syntax = (H264Settings -> Maybe H264Syntax)
-> (H264Settings -> Maybe H264Syntax -> H264Settings)
-> Lens
     H264Settings H264Settings (Maybe H264Syntax) (Maybe H264Syntax)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe H264Syntax
syntax :: Maybe H264Syntax
$sel:syntax:H264Settings' :: H264Settings -> Maybe H264Syntax
syntax} -> Maybe H264Syntax
syntax) (\s :: H264Settings
s@H264Settings' {} Maybe H264Syntax
a -> H264Settings
s {$sel:syntax:H264Settings' :: Maybe H264Syntax
syntax = Maybe H264Syntax
a} :: H264Settings)

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

-- | Frequency of closed GOPs. In streaming applications, it is recommended
-- that this be set to 1 so a decoder joining mid-stream will receive an
-- IDR frame as quickly as possible. Setting this value to 0 will break
-- output segmenting.
h264Settings_gopClosedCadence :: Lens.Lens' H264Settings (Prelude.Maybe Prelude.Natural)
h264Settings_gopClosedCadence :: (Maybe Natural -> f (Maybe Natural))
-> H264Settings -> f H264Settings
h264Settings_gopClosedCadence = (H264Settings -> Maybe Natural)
-> (H264Settings -> Maybe Natural -> H264Settings)
-> Lens H264Settings H264Settings (Maybe Natural) (Maybe Natural)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe Natural
gopClosedCadence :: Maybe Natural
$sel:gopClosedCadence:H264Settings' :: H264Settings -> Maybe Natural
gopClosedCadence} -> Maybe Natural
gopClosedCadence) (\s :: H264Settings
s@H264Settings' {} Maybe Natural
a -> H264Settings
s {$sel:gopClosedCadence:H264Settings' :: Maybe Natural
gopClosedCadence = Maybe Natural
a} :: H264Settings)

-- | Number of reference frames to use. The encoder may use more than
-- requested if using B-frames and\/or interlaced encoding.
h264Settings_numRefFrames :: Lens.Lens' H264Settings (Prelude.Maybe Prelude.Natural)
h264Settings_numRefFrames :: (Maybe Natural -> f (Maybe Natural))
-> H264Settings -> f H264Settings
h264Settings_numRefFrames = (H264Settings -> Maybe Natural)
-> (H264Settings -> Maybe Natural -> H264Settings)
-> Lens H264Settings H264Settings (Maybe Natural) (Maybe Natural)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe Natural
numRefFrames :: Maybe Natural
$sel:numRefFrames:H264Settings' :: H264Settings -> Maybe Natural
numRefFrames} -> Maybe Natural
numRefFrames) (\s :: H264Settings
s@H264Settings' {} Maybe Natural
a -> H264Settings
s {$sel:numRefFrames:H264Settings' :: Maybe Natural
numRefFrames = Maybe Natural
a} :: H264Settings)

-- | Pixel Aspect Ratio denominator.
h264Settings_parDenominator :: Lens.Lens' H264Settings (Prelude.Maybe Prelude.Natural)
h264Settings_parDenominator :: (Maybe Natural -> f (Maybe Natural))
-> H264Settings -> f H264Settings
h264Settings_parDenominator = (H264Settings -> Maybe Natural)
-> (H264Settings -> Maybe Natural -> H264Settings)
-> Lens H264Settings H264Settings (Maybe Natural) (Maybe Natural)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\H264Settings' {Maybe Natural
parDenominator :: Maybe Natural
$sel:parDenominator:H264Settings' :: H264Settings -> Maybe Natural
parDenominator} -> Maybe Natural
parDenominator) (\s :: H264Settings
s@H264Settings' {} Maybe Natural
a -> H264Settings
s {$sel:parDenominator:H264Settings' :: Maybe Natural
parDenominator = Maybe Natural
a} :: H264Settings)

instance Core.FromJSON H264Settings where
  parseJSON :: Value -> Parser H264Settings
parseJSON =
    String
-> (Object -> Parser H264Settings) -> Value -> Parser H264Settings
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Core.withObject
      String
"H264Settings"
      ( \Object
x ->
          Maybe H264TemporalAq
-> Maybe H264SceneChangeDetect
-> Maybe H264ScanType
-> Maybe H264TimecodeInsertionBehavior
-> Maybe Natural
-> Maybe AfdSignaling
-> Maybe Double
-> Maybe H264GopSizeUnits
-> Maybe H264SubGopLength
-> Maybe H264QualityLevel
-> Maybe Natural
-> Maybe H264Profile
-> Maybe H264RateControlMode
-> Maybe Natural
-> Maybe Natural
-> Maybe H264ColorSpaceSettings
-> Maybe H264ParControl
-> Maybe H264FlickerAq
-> Maybe Natural
-> Maybe H264SpatialAq
-> Maybe Natural
-> Maybe FixedAfd
-> Maybe Natural
-> Maybe H264FilterSettings
-> Maybe Natural
-> Maybe Natural
-> Maybe H264ForceFieldPictures
-> Maybe H264EntropyEncoding
-> Maybe H264FramerateControl
-> Maybe H264ColorMetadata
-> Maybe H264LookAheadRateControl
-> Maybe H264AdaptiveQuantization
-> Maybe Natural
-> Maybe H264Level
-> Maybe H264GopBReference
-> Maybe Natural
-> Maybe H264Syntax
-> Maybe Natural
-> Maybe Natural
-> Maybe Natural
-> Maybe Natural
-> H264Settings
H264Settings'
            (Maybe H264TemporalAq
 -> Maybe H264SceneChangeDetect
 -> Maybe H264ScanType
 -> Maybe H264TimecodeInsertionBehavior
 -> Maybe Natural
 -> Maybe AfdSignaling
 -> Maybe Double
 -> Maybe H264GopSizeUnits
 -> Maybe H264SubGopLength
 -> Maybe H264QualityLevel
 -> Maybe Natural
 -> Maybe H264Profile
 -> Maybe H264RateControlMode
 -> Maybe Natural
 -> Maybe Natural
 -> Maybe H264ColorSpaceSettings
 -> Maybe H264ParControl
 -> Maybe H264FlickerAq
 -> Maybe Natural
 -> Maybe H264SpatialAq
 -> Maybe Natural
 -> Maybe FixedAfd
 -> Maybe Natural
 -> Maybe H264FilterSettings
 -> Maybe Natural
 -> Maybe Natural
 -> Maybe H264ForceFieldPictures
 -> Maybe H264EntropyEncoding
 -> Maybe H264FramerateControl
 -> Maybe H264ColorMetadata
 -> Maybe H264LookAheadRateControl
 -> Maybe H264AdaptiveQuantization
 -> Maybe Natural
 -> Maybe H264Level
 -> Maybe H264GopBReference
 -> Maybe Natural
 -> Maybe H264Syntax
 -> Maybe Natural
 -> Maybe Natural
 -> Maybe Natural
 -> Maybe Natural
 -> H264Settings)
-> Parser (Maybe H264TemporalAq)
-> Parser
     (Maybe H264SceneChangeDetect
      -> Maybe H264ScanType
      -> Maybe H264TimecodeInsertionBehavior
      -> Maybe Natural
      -> Maybe AfdSignaling
      -> Maybe Double
      -> Maybe H264GopSizeUnits
      -> Maybe H264SubGopLength
      -> Maybe H264QualityLevel
      -> Maybe Natural
      -> Maybe H264Profile
      -> Maybe H264RateControlMode
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ColorSpaceSettings
      -> Maybe H264ParControl
      -> Maybe H264FlickerAq
      -> Maybe Natural
      -> Maybe H264SpatialAq
      -> Maybe Natural
      -> Maybe FixedAfd
      -> Maybe Natural
      -> Maybe H264FilterSettings
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ForceFieldPictures
      -> Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x Object -> Text -> Parser (Maybe H264TemporalAq)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"temporalAq")
            Parser
  (Maybe H264SceneChangeDetect
   -> Maybe H264ScanType
   -> Maybe H264TimecodeInsertionBehavior
   -> Maybe Natural
   -> Maybe AfdSignaling
   -> Maybe Double
   -> Maybe H264GopSizeUnits
   -> Maybe H264SubGopLength
   -> Maybe H264QualityLevel
   -> Maybe Natural
   -> Maybe H264Profile
   -> Maybe H264RateControlMode
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ColorSpaceSettings
   -> Maybe H264ParControl
   -> Maybe H264FlickerAq
   -> Maybe Natural
   -> Maybe H264SpatialAq
   -> Maybe Natural
   -> Maybe FixedAfd
   -> Maybe Natural
   -> Maybe H264FilterSettings
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ForceFieldPictures
   -> Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe H264SceneChangeDetect)
-> Parser
     (Maybe H264ScanType
      -> Maybe H264TimecodeInsertionBehavior
      -> Maybe Natural
      -> Maybe AfdSignaling
      -> Maybe Double
      -> Maybe H264GopSizeUnits
      -> Maybe H264SubGopLength
      -> Maybe H264QualityLevel
      -> Maybe Natural
      -> Maybe H264Profile
      -> Maybe H264RateControlMode
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ColorSpaceSettings
      -> Maybe H264ParControl
      -> Maybe H264FlickerAq
      -> Maybe Natural
      -> Maybe H264SpatialAq
      -> Maybe Natural
      -> Maybe FixedAfd
      -> Maybe Natural
      -> Maybe H264FilterSettings
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ForceFieldPictures
      -> Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe H264SceneChangeDetect)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"sceneChangeDetect")
            Parser
  (Maybe H264ScanType
   -> Maybe H264TimecodeInsertionBehavior
   -> Maybe Natural
   -> Maybe AfdSignaling
   -> Maybe Double
   -> Maybe H264GopSizeUnits
   -> Maybe H264SubGopLength
   -> Maybe H264QualityLevel
   -> Maybe Natural
   -> Maybe H264Profile
   -> Maybe H264RateControlMode
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ColorSpaceSettings
   -> Maybe H264ParControl
   -> Maybe H264FlickerAq
   -> Maybe Natural
   -> Maybe H264SpatialAq
   -> Maybe Natural
   -> Maybe FixedAfd
   -> Maybe Natural
   -> Maybe H264FilterSettings
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ForceFieldPictures
   -> Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe H264ScanType)
-> Parser
     (Maybe H264TimecodeInsertionBehavior
      -> Maybe Natural
      -> Maybe AfdSignaling
      -> Maybe Double
      -> Maybe H264GopSizeUnits
      -> Maybe H264SubGopLength
      -> Maybe H264QualityLevel
      -> Maybe Natural
      -> Maybe H264Profile
      -> Maybe H264RateControlMode
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ColorSpaceSettings
      -> Maybe H264ParControl
      -> Maybe H264FlickerAq
      -> Maybe Natural
      -> Maybe H264SpatialAq
      -> Maybe Natural
      -> Maybe FixedAfd
      -> Maybe Natural
      -> Maybe H264FilterSettings
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ForceFieldPictures
      -> Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe H264ScanType)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"scanType")
            Parser
  (Maybe H264TimecodeInsertionBehavior
   -> Maybe Natural
   -> Maybe AfdSignaling
   -> Maybe Double
   -> Maybe H264GopSizeUnits
   -> Maybe H264SubGopLength
   -> Maybe H264QualityLevel
   -> Maybe Natural
   -> Maybe H264Profile
   -> Maybe H264RateControlMode
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ColorSpaceSettings
   -> Maybe H264ParControl
   -> Maybe H264FlickerAq
   -> Maybe Natural
   -> Maybe H264SpatialAq
   -> Maybe Natural
   -> Maybe FixedAfd
   -> Maybe Natural
   -> Maybe H264FilterSettings
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ForceFieldPictures
   -> Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe H264TimecodeInsertionBehavior)
-> Parser
     (Maybe Natural
      -> Maybe AfdSignaling
      -> Maybe Double
      -> Maybe H264GopSizeUnits
      -> Maybe H264SubGopLength
      -> Maybe H264QualityLevel
      -> Maybe Natural
      -> Maybe H264Profile
      -> Maybe H264RateControlMode
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ColorSpaceSettings
      -> Maybe H264ParControl
      -> Maybe H264FlickerAq
      -> Maybe Natural
      -> Maybe H264SpatialAq
      -> Maybe Natural
      -> Maybe FixedAfd
      -> Maybe Natural
      -> Maybe H264FilterSettings
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ForceFieldPictures
      -> Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe H264TimecodeInsertionBehavior)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"timecodeInsertion")
            Parser
  (Maybe Natural
   -> Maybe AfdSignaling
   -> Maybe Double
   -> Maybe H264GopSizeUnits
   -> Maybe H264SubGopLength
   -> Maybe H264QualityLevel
   -> Maybe Natural
   -> Maybe H264Profile
   -> Maybe H264RateControlMode
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ColorSpaceSettings
   -> Maybe H264ParControl
   -> Maybe H264FlickerAq
   -> Maybe Natural
   -> Maybe H264SpatialAq
   -> Maybe Natural
   -> Maybe FixedAfd
   -> Maybe Natural
   -> Maybe H264FilterSettings
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ForceFieldPictures
   -> Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe Natural)
-> Parser
     (Maybe AfdSignaling
      -> Maybe Double
      -> Maybe H264GopSizeUnits
      -> Maybe H264SubGopLength
      -> Maybe H264QualityLevel
      -> Maybe Natural
      -> Maybe H264Profile
      -> Maybe H264RateControlMode
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ColorSpaceSettings
      -> Maybe H264ParControl
      -> Maybe H264FlickerAq
      -> Maybe Natural
      -> Maybe H264SpatialAq
      -> Maybe Natural
      -> Maybe FixedAfd
      -> Maybe Natural
      -> Maybe H264FilterSettings
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ForceFieldPictures
      -> Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Natural)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"parNumerator")
            Parser
  (Maybe AfdSignaling
   -> Maybe Double
   -> Maybe H264GopSizeUnits
   -> Maybe H264SubGopLength
   -> Maybe H264QualityLevel
   -> Maybe Natural
   -> Maybe H264Profile
   -> Maybe H264RateControlMode
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ColorSpaceSettings
   -> Maybe H264ParControl
   -> Maybe H264FlickerAq
   -> Maybe Natural
   -> Maybe H264SpatialAq
   -> Maybe Natural
   -> Maybe FixedAfd
   -> Maybe Natural
   -> Maybe H264FilterSettings
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ForceFieldPictures
   -> Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe AfdSignaling)
-> Parser
     (Maybe Double
      -> Maybe H264GopSizeUnits
      -> Maybe H264SubGopLength
      -> Maybe H264QualityLevel
      -> Maybe Natural
      -> Maybe H264Profile
      -> Maybe H264RateControlMode
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ColorSpaceSettings
      -> Maybe H264ParControl
      -> Maybe H264FlickerAq
      -> Maybe Natural
      -> Maybe H264SpatialAq
      -> Maybe Natural
      -> Maybe FixedAfd
      -> Maybe Natural
      -> Maybe H264FilterSettings
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ForceFieldPictures
      -> Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe AfdSignaling)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"afdSignaling")
            Parser
  (Maybe Double
   -> Maybe H264GopSizeUnits
   -> Maybe H264SubGopLength
   -> Maybe H264QualityLevel
   -> Maybe Natural
   -> Maybe H264Profile
   -> Maybe H264RateControlMode
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ColorSpaceSettings
   -> Maybe H264ParControl
   -> Maybe H264FlickerAq
   -> Maybe Natural
   -> Maybe H264SpatialAq
   -> Maybe Natural
   -> Maybe FixedAfd
   -> Maybe Natural
   -> Maybe H264FilterSettings
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ForceFieldPictures
   -> Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe Double)
-> Parser
     (Maybe H264GopSizeUnits
      -> Maybe H264SubGopLength
      -> Maybe H264QualityLevel
      -> Maybe Natural
      -> Maybe H264Profile
      -> Maybe H264RateControlMode
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ColorSpaceSettings
      -> Maybe H264ParControl
      -> Maybe H264FlickerAq
      -> Maybe Natural
      -> Maybe H264SpatialAq
      -> Maybe Natural
      -> Maybe FixedAfd
      -> Maybe Natural
      -> Maybe H264FilterSettings
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ForceFieldPictures
      -> Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Double)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"gopSize")
            Parser
  (Maybe H264GopSizeUnits
   -> Maybe H264SubGopLength
   -> Maybe H264QualityLevel
   -> Maybe Natural
   -> Maybe H264Profile
   -> Maybe H264RateControlMode
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ColorSpaceSettings
   -> Maybe H264ParControl
   -> Maybe H264FlickerAq
   -> Maybe Natural
   -> Maybe H264SpatialAq
   -> Maybe Natural
   -> Maybe FixedAfd
   -> Maybe Natural
   -> Maybe H264FilterSettings
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ForceFieldPictures
   -> Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe H264GopSizeUnits)
-> Parser
     (Maybe H264SubGopLength
      -> Maybe H264QualityLevel
      -> Maybe Natural
      -> Maybe H264Profile
      -> Maybe H264RateControlMode
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ColorSpaceSettings
      -> Maybe H264ParControl
      -> Maybe H264FlickerAq
      -> Maybe Natural
      -> Maybe H264SpatialAq
      -> Maybe Natural
      -> Maybe FixedAfd
      -> Maybe Natural
      -> Maybe H264FilterSettings
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ForceFieldPictures
      -> Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe H264GopSizeUnits)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"gopSizeUnits")
            Parser
  (Maybe H264SubGopLength
   -> Maybe H264QualityLevel
   -> Maybe Natural
   -> Maybe H264Profile
   -> Maybe H264RateControlMode
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ColorSpaceSettings
   -> Maybe H264ParControl
   -> Maybe H264FlickerAq
   -> Maybe Natural
   -> Maybe H264SpatialAq
   -> Maybe Natural
   -> Maybe FixedAfd
   -> Maybe Natural
   -> Maybe H264FilterSettings
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ForceFieldPictures
   -> Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe H264SubGopLength)
-> Parser
     (Maybe H264QualityLevel
      -> Maybe Natural
      -> Maybe H264Profile
      -> Maybe H264RateControlMode
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ColorSpaceSettings
      -> Maybe H264ParControl
      -> Maybe H264FlickerAq
      -> Maybe Natural
      -> Maybe H264SpatialAq
      -> Maybe Natural
      -> Maybe FixedAfd
      -> Maybe Natural
      -> Maybe H264FilterSettings
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ForceFieldPictures
      -> Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe H264SubGopLength)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"subgopLength")
            Parser
  (Maybe H264QualityLevel
   -> Maybe Natural
   -> Maybe H264Profile
   -> Maybe H264RateControlMode
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ColorSpaceSettings
   -> Maybe H264ParControl
   -> Maybe H264FlickerAq
   -> Maybe Natural
   -> Maybe H264SpatialAq
   -> Maybe Natural
   -> Maybe FixedAfd
   -> Maybe Natural
   -> Maybe H264FilterSettings
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ForceFieldPictures
   -> Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe H264QualityLevel)
-> Parser
     (Maybe Natural
      -> Maybe H264Profile
      -> Maybe H264RateControlMode
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ColorSpaceSettings
      -> Maybe H264ParControl
      -> Maybe H264FlickerAq
      -> Maybe Natural
      -> Maybe H264SpatialAq
      -> Maybe Natural
      -> Maybe FixedAfd
      -> Maybe Natural
      -> Maybe H264FilterSettings
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ForceFieldPictures
      -> Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe H264QualityLevel)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"qualityLevel")
            Parser
  (Maybe Natural
   -> Maybe H264Profile
   -> Maybe H264RateControlMode
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ColorSpaceSettings
   -> Maybe H264ParControl
   -> Maybe H264FlickerAq
   -> Maybe Natural
   -> Maybe H264SpatialAq
   -> Maybe Natural
   -> Maybe FixedAfd
   -> Maybe Natural
   -> Maybe H264FilterSettings
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ForceFieldPictures
   -> Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe Natural)
-> Parser
     (Maybe H264Profile
      -> Maybe H264RateControlMode
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ColorSpaceSettings
      -> Maybe H264ParControl
      -> Maybe H264FlickerAq
      -> Maybe Natural
      -> Maybe H264SpatialAq
      -> Maybe Natural
      -> Maybe FixedAfd
      -> Maybe Natural
      -> Maybe H264FilterSettings
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ForceFieldPictures
      -> Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Natural)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"slices")
            Parser
  (Maybe H264Profile
   -> Maybe H264RateControlMode
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ColorSpaceSettings
   -> Maybe H264ParControl
   -> Maybe H264FlickerAq
   -> Maybe Natural
   -> Maybe H264SpatialAq
   -> Maybe Natural
   -> Maybe FixedAfd
   -> Maybe Natural
   -> Maybe H264FilterSettings
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ForceFieldPictures
   -> Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe H264Profile)
-> Parser
     (Maybe H264RateControlMode
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ColorSpaceSettings
      -> Maybe H264ParControl
      -> Maybe H264FlickerAq
      -> Maybe Natural
      -> Maybe H264SpatialAq
      -> Maybe Natural
      -> Maybe FixedAfd
      -> Maybe Natural
      -> Maybe H264FilterSettings
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ForceFieldPictures
      -> Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe H264Profile)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"profile")
            Parser
  (Maybe H264RateControlMode
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ColorSpaceSettings
   -> Maybe H264ParControl
   -> Maybe H264FlickerAq
   -> Maybe Natural
   -> Maybe H264SpatialAq
   -> Maybe Natural
   -> Maybe FixedAfd
   -> Maybe Natural
   -> Maybe H264FilterSettings
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ForceFieldPictures
   -> Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe H264RateControlMode)
-> Parser
     (Maybe Natural
      -> Maybe Natural
      -> Maybe H264ColorSpaceSettings
      -> Maybe H264ParControl
      -> Maybe H264FlickerAq
      -> Maybe Natural
      -> Maybe H264SpatialAq
      -> Maybe Natural
      -> Maybe FixedAfd
      -> Maybe Natural
      -> Maybe H264FilterSettings
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ForceFieldPictures
      -> Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe H264RateControlMode)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"rateControlMode")
            Parser
  (Maybe Natural
   -> Maybe Natural
   -> Maybe H264ColorSpaceSettings
   -> Maybe H264ParControl
   -> Maybe H264FlickerAq
   -> Maybe Natural
   -> Maybe H264SpatialAq
   -> Maybe Natural
   -> Maybe FixedAfd
   -> Maybe Natural
   -> Maybe H264FilterSettings
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ForceFieldPictures
   -> Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe Natural)
-> Parser
     (Maybe Natural
      -> Maybe H264ColorSpaceSettings
      -> Maybe H264ParControl
      -> Maybe H264FlickerAq
      -> Maybe Natural
      -> Maybe H264SpatialAq
      -> Maybe Natural
      -> Maybe FixedAfd
      -> Maybe Natural
      -> Maybe H264FilterSettings
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ForceFieldPictures
      -> Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Natural)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"minIInterval")
            Parser
  (Maybe Natural
   -> Maybe H264ColorSpaceSettings
   -> Maybe H264ParControl
   -> Maybe H264FlickerAq
   -> Maybe Natural
   -> Maybe H264SpatialAq
   -> Maybe Natural
   -> Maybe FixedAfd
   -> Maybe Natural
   -> Maybe H264FilterSettings
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ForceFieldPictures
   -> Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe Natural)
-> Parser
     (Maybe H264ColorSpaceSettings
      -> Maybe H264ParControl
      -> Maybe H264FlickerAq
      -> Maybe Natural
      -> Maybe H264SpatialAq
      -> Maybe Natural
      -> Maybe FixedAfd
      -> Maybe Natural
      -> Maybe H264FilterSettings
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ForceFieldPictures
      -> Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Natural)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"qvbrQualityLevel")
            Parser
  (Maybe H264ColorSpaceSettings
   -> Maybe H264ParControl
   -> Maybe H264FlickerAq
   -> Maybe Natural
   -> Maybe H264SpatialAq
   -> Maybe Natural
   -> Maybe FixedAfd
   -> Maybe Natural
   -> Maybe H264FilterSettings
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ForceFieldPictures
   -> Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe H264ColorSpaceSettings)
-> Parser
     (Maybe H264ParControl
      -> Maybe H264FlickerAq
      -> Maybe Natural
      -> Maybe H264SpatialAq
      -> Maybe Natural
      -> Maybe FixedAfd
      -> Maybe Natural
      -> Maybe H264FilterSettings
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ForceFieldPictures
      -> Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe H264ColorSpaceSettings)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"colorSpaceSettings")
            Parser
  (Maybe H264ParControl
   -> Maybe H264FlickerAq
   -> Maybe Natural
   -> Maybe H264SpatialAq
   -> Maybe Natural
   -> Maybe FixedAfd
   -> Maybe Natural
   -> Maybe H264FilterSettings
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ForceFieldPictures
   -> Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe H264ParControl)
-> Parser
     (Maybe H264FlickerAq
      -> Maybe Natural
      -> Maybe H264SpatialAq
      -> Maybe Natural
      -> Maybe FixedAfd
      -> Maybe Natural
      -> Maybe H264FilterSettings
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ForceFieldPictures
      -> Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe H264ParControl)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"parControl")
            Parser
  (Maybe H264FlickerAq
   -> Maybe Natural
   -> Maybe H264SpatialAq
   -> Maybe Natural
   -> Maybe FixedAfd
   -> Maybe Natural
   -> Maybe H264FilterSettings
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ForceFieldPictures
   -> Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe H264FlickerAq)
-> Parser
     (Maybe Natural
      -> Maybe H264SpatialAq
      -> Maybe Natural
      -> Maybe FixedAfd
      -> Maybe Natural
      -> Maybe H264FilterSettings
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ForceFieldPictures
      -> Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe H264FlickerAq)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"flickerAq")
            Parser
  (Maybe Natural
   -> Maybe H264SpatialAq
   -> Maybe Natural
   -> Maybe FixedAfd
   -> Maybe Natural
   -> Maybe H264FilterSettings
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ForceFieldPictures
   -> Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe Natural)
-> Parser
     (Maybe H264SpatialAq
      -> Maybe Natural
      -> Maybe FixedAfd
      -> Maybe Natural
      -> Maybe H264FilterSettings
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ForceFieldPictures
      -> Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Natural)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"bufSize")
            Parser
  (Maybe H264SpatialAq
   -> Maybe Natural
   -> Maybe FixedAfd
   -> Maybe Natural
   -> Maybe H264FilterSettings
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ForceFieldPictures
   -> Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe H264SpatialAq)
-> Parser
     (Maybe Natural
      -> Maybe FixedAfd
      -> Maybe Natural
      -> Maybe H264FilterSettings
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ForceFieldPictures
      -> Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe H264SpatialAq)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"spatialAq")
            Parser
  (Maybe Natural
   -> Maybe FixedAfd
   -> Maybe Natural
   -> Maybe H264FilterSettings
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ForceFieldPictures
   -> Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe Natural)
-> Parser
     (Maybe FixedAfd
      -> Maybe Natural
      -> Maybe H264FilterSettings
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ForceFieldPictures
      -> Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Natural)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"gopNumBFrames")
            Parser
  (Maybe FixedAfd
   -> Maybe Natural
   -> Maybe H264FilterSettings
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ForceFieldPictures
   -> Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe FixedAfd)
-> Parser
     (Maybe Natural
      -> Maybe H264FilterSettings
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ForceFieldPictures
      -> Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe FixedAfd)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"fixedAfd")
            Parser
  (Maybe Natural
   -> Maybe H264FilterSettings
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ForceFieldPictures
   -> Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe Natural)
-> Parser
     (Maybe H264FilterSettings
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe H264ForceFieldPictures
      -> Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Natural)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"softness")
            Parser
  (Maybe H264FilterSettings
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe H264ForceFieldPictures
   -> Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe H264FilterSettings)
-> Parser
     (Maybe Natural
      -> Maybe Natural
      -> Maybe H264ForceFieldPictures
      -> Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe H264FilterSettings)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"filterSettings")
            Parser
  (Maybe Natural
   -> Maybe Natural
   -> Maybe H264ForceFieldPictures
   -> Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe Natural)
-> Parser
     (Maybe Natural
      -> Maybe H264ForceFieldPictures
      -> Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Natural)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"bitrate")
            Parser
  (Maybe Natural
   -> Maybe H264ForceFieldPictures
   -> Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe Natural)
-> Parser
     (Maybe H264ForceFieldPictures
      -> Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Natural)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"framerateDenominator")
            Parser
  (Maybe H264ForceFieldPictures
   -> Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe H264ForceFieldPictures)
-> Parser
     (Maybe H264EntropyEncoding
      -> Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe H264ForceFieldPictures)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"forceFieldPictures")
            Parser
  (Maybe H264EntropyEncoding
   -> Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe H264EntropyEncoding)
-> Parser
     (Maybe H264FramerateControl
      -> Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe H264EntropyEncoding)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"entropyEncoding")
            Parser
  (Maybe H264FramerateControl
   -> Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe H264FramerateControl)
-> Parser
     (Maybe H264ColorMetadata
      -> Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe H264FramerateControl)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"framerateControl")
            Parser
  (Maybe H264ColorMetadata
   -> Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe H264ColorMetadata)
-> Parser
     (Maybe H264LookAheadRateControl
      -> Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe H264ColorMetadata)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"colorMetadata")
            Parser
  (Maybe H264LookAheadRateControl
   -> Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe H264LookAheadRateControl)
-> Parser
     (Maybe H264AdaptiveQuantization
      -> Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe H264LookAheadRateControl)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"lookAheadRateControl")
            Parser
  (Maybe H264AdaptiveQuantization
   -> Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe H264AdaptiveQuantization)
-> Parser
     (Maybe Natural
      -> Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe H264AdaptiveQuantization)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"adaptiveQuantization")
            Parser
  (Maybe Natural
   -> Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe Natural)
-> Parser
     (Maybe H264Level
      -> Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Natural)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"framerateNumerator")
            Parser
  (Maybe H264Level
   -> Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe H264Level)
-> Parser
     (Maybe H264GopBReference
      -> Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe H264Level)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"level")
            Parser
  (Maybe H264GopBReference
   -> Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe H264GopBReference)
-> Parser
     (Maybe Natural
      -> Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe H264GopBReference)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"gopBReference")
            Parser
  (Maybe Natural
   -> Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe Natural)
-> Parser
     (Maybe H264Syntax
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> Maybe Natural
      -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Natural)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"maxBitrate")
            Parser
  (Maybe H264Syntax
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> Maybe Natural
   -> H264Settings)
-> Parser (Maybe H264Syntax)
-> Parser
     (Maybe Natural
      -> Maybe Natural -> Maybe Natural -> Maybe Natural -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe H264Syntax)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"syntax")
            Parser
  (Maybe Natural
   -> Maybe Natural -> Maybe Natural -> Maybe Natural -> H264Settings)
-> Parser (Maybe Natural)
-> Parser
     (Maybe Natural -> Maybe Natural -> Maybe Natural -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Natural)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"bufFillPct")
            Parser
  (Maybe Natural -> Maybe Natural -> Maybe Natural -> H264Settings)
-> Parser (Maybe Natural)
-> Parser (Maybe Natural -> Maybe Natural -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Natural)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"gopClosedCadence")
            Parser (Maybe Natural -> Maybe Natural -> H264Settings)
-> Parser (Maybe Natural) -> Parser (Maybe Natural -> H264Settings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Natural)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"numRefFrames")
            Parser (Maybe Natural -> H264Settings)
-> Parser (Maybe Natural) -> Parser H264Settings
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Natural)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"parDenominator")
      )

instance Prelude.Hashable H264Settings

instance Prelude.NFData H264Settings

instance Core.ToJSON H264Settings where
  toJSON :: H264Settings -> Value
toJSON H264Settings' {Maybe Double
Maybe Natural
Maybe AfdSignaling
Maybe FixedAfd
Maybe H264AdaptiveQuantization
Maybe H264ColorMetadata
Maybe H264EntropyEncoding
Maybe H264FlickerAq
Maybe H264ForceFieldPictures
Maybe H264FramerateControl
Maybe H264GopBReference
Maybe H264GopSizeUnits
Maybe H264Level
Maybe H264LookAheadRateControl
Maybe H264ParControl
Maybe H264Profile
Maybe H264QualityLevel
Maybe H264RateControlMode
Maybe H264ScanType
Maybe H264SceneChangeDetect
Maybe H264SpatialAq
Maybe H264SubGopLength
Maybe H264Syntax
Maybe H264TemporalAq
Maybe H264TimecodeInsertionBehavior
Maybe H264ColorSpaceSettings
Maybe H264FilterSettings
parDenominator :: Maybe Natural
numRefFrames :: Maybe Natural
gopClosedCadence :: Maybe Natural
bufFillPct :: Maybe Natural
syntax :: Maybe H264Syntax
maxBitrate :: Maybe Natural
gopBReference :: Maybe H264GopBReference
level :: Maybe H264Level
framerateNumerator :: Maybe Natural
adaptiveQuantization :: Maybe H264AdaptiveQuantization
lookAheadRateControl :: Maybe H264LookAheadRateControl
colorMetadata :: Maybe H264ColorMetadata
framerateControl :: Maybe H264FramerateControl
entropyEncoding :: Maybe H264EntropyEncoding
forceFieldPictures :: Maybe H264ForceFieldPictures
framerateDenominator :: Maybe Natural
bitrate :: Maybe Natural
filterSettings :: Maybe H264FilterSettings
softness :: Maybe Natural
fixedAfd :: Maybe FixedAfd
gopNumBFrames :: Maybe Natural
spatialAq :: Maybe H264SpatialAq
bufSize :: Maybe Natural
flickerAq :: Maybe H264FlickerAq
parControl :: Maybe H264ParControl
colorSpaceSettings :: Maybe H264ColorSpaceSettings
qvbrQualityLevel :: Maybe Natural
minIInterval :: Maybe Natural
rateControlMode :: Maybe H264RateControlMode
profile :: Maybe H264Profile
slices :: Maybe Natural
qualityLevel :: Maybe H264QualityLevel
subgopLength :: Maybe H264SubGopLength
gopSizeUnits :: Maybe H264GopSizeUnits
gopSize :: Maybe Double
afdSignaling :: Maybe AfdSignaling
parNumerator :: Maybe Natural
timecodeInsertion :: Maybe H264TimecodeInsertionBehavior
scanType :: Maybe H264ScanType
sceneChangeDetect :: Maybe H264SceneChangeDetect
temporalAq :: Maybe H264TemporalAq
$sel:parDenominator:H264Settings' :: H264Settings -> Maybe Natural
$sel:numRefFrames:H264Settings' :: H264Settings -> Maybe Natural
$sel:gopClosedCadence:H264Settings' :: H264Settings -> Maybe Natural
$sel:bufFillPct:H264Settings' :: H264Settings -> Maybe Natural
$sel:syntax:H264Settings' :: H264Settings -> Maybe H264Syntax
$sel:maxBitrate:H264Settings' :: H264Settings -> Maybe Natural
$sel:gopBReference:H264Settings' :: H264Settings -> Maybe H264GopBReference
$sel:level:H264Settings' :: H264Settings -> Maybe H264Level
$sel:framerateNumerator:H264Settings' :: H264Settings -> Maybe Natural
$sel:adaptiveQuantization:H264Settings' :: H264Settings -> Maybe H264AdaptiveQuantization
$sel:lookAheadRateControl:H264Settings' :: H264Settings -> Maybe H264LookAheadRateControl
$sel:colorMetadata:H264Settings' :: H264Settings -> Maybe H264ColorMetadata
$sel:framerateControl:H264Settings' :: H264Settings -> Maybe H264FramerateControl
$sel:entropyEncoding:H264Settings' :: H264Settings -> Maybe H264EntropyEncoding
$sel:forceFieldPictures:H264Settings' :: H264Settings -> Maybe H264ForceFieldPictures
$sel:framerateDenominator:H264Settings' :: H264Settings -> Maybe Natural
$sel:bitrate:H264Settings' :: H264Settings -> Maybe Natural
$sel:filterSettings:H264Settings' :: H264Settings -> Maybe H264FilterSettings
$sel:softness:H264Settings' :: H264Settings -> Maybe Natural
$sel:fixedAfd:H264Settings' :: H264Settings -> Maybe FixedAfd
$sel:gopNumBFrames:H264Settings' :: H264Settings -> Maybe Natural
$sel:spatialAq:H264Settings' :: H264Settings -> Maybe H264SpatialAq
$sel:bufSize:H264Settings' :: H264Settings -> Maybe Natural
$sel:flickerAq:H264Settings' :: H264Settings -> Maybe H264FlickerAq
$sel:parControl:H264Settings' :: H264Settings -> Maybe H264ParControl
$sel:colorSpaceSettings:H264Settings' :: H264Settings -> Maybe H264ColorSpaceSettings
$sel:qvbrQualityLevel:H264Settings' :: H264Settings -> Maybe Natural
$sel:minIInterval:H264Settings' :: H264Settings -> Maybe Natural
$sel:rateControlMode:H264Settings' :: H264Settings -> Maybe H264RateControlMode
$sel:profile:H264Settings' :: H264Settings -> Maybe H264Profile
$sel:slices:H264Settings' :: H264Settings -> Maybe Natural
$sel:qualityLevel:H264Settings' :: H264Settings -> Maybe H264QualityLevel
$sel:subgopLength:H264Settings' :: H264Settings -> Maybe H264SubGopLength
$sel:gopSizeUnits:H264Settings' :: H264Settings -> Maybe H264GopSizeUnits
$sel:gopSize:H264Settings' :: H264Settings -> Maybe Double
$sel:afdSignaling:H264Settings' :: H264Settings -> Maybe AfdSignaling
$sel:parNumerator:H264Settings' :: H264Settings -> Maybe Natural
$sel:timecodeInsertion:H264Settings' :: H264Settings -> Maybe H264TimecodeInsertionBehavior
$sel:scanType:H264Settings' :: H264Settings -> Maybe H264ScanType
$sel:sceneChangeDetect:H264Settings' :: H264Settings -> Maybe H264SceneChangeDetect
$sel:temporalAq:H264Settings' :: H264Settings -> Maybe H264TemporalAq
..} =
    [Pair] -> Value
Core.object
      ( [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Text
"temporalAq" Text -> H264TemporalAq -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (H264TemporalAq -> Pair) -> Maybe H264TemporalAq -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe H264TemporalAq
temporalAq,
            (Text
"sceneChangeDetect" Text -> H264SceneChangeDetect -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (H264SceneChangeDetect -> Pair)
-> Maybe H264SceneChangeDetect -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe H264SceneChangeDetect
sceneChangeDetect,
            (Text
"scanType" Text -> H264ScanType -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (H264ScanType -> Pair) -> Maybe H264ScanType -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe H264ScanType
scanType,
            (Text
"timecodeInsertion" Text -> H264TimecodeInsertionBehavior -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (H264TimecodeInsertionBehavior -> Pair)
-> Maybe H264TimecodeInsertionBehavior -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe H264TimecodeInsertionBehavior
timecodeInsertion,
            (Text
"parNumerator" Text -> Natural -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Natural -> Pair) -> Maybe Natural -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
parNumerator,
            (Text
"afdSignaling" Text -> AfdSignaling -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (AfdSignaling -> Pair) -> Maybe AfdSignaling -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe AfdSignaling
afdSignaling,
            (Text
"gopSize" Text -> Double -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Double -> Pair) -> Maybe Double -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Double
gopSize,
            (Text
"gopSizeUnits" Text -> H264GopSizeUnits -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (H264GopSizeUnits -> Pair) -> Maybe H264GopSizeUnits -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe H264GopSizeUnits
gopSizeUnits,
            (Text
"subgopLength" Text -> H264SubGopLength -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (H264SubGopLength -> Pair) -> Maybe H264SubGopLength -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe H264SubGopLength
subgopLength,
            (Text
"qualityLevel" Text -> H264QualityLevel -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (H264QualityLevel -> Pair) -> Maybe H264QualityLevel -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe H264QualityLevel
qualityLevel,
            (Text
"slices" Text -> Natural -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Natural -> Pair) -> Maybe Natural -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
slices,
            (Text
"profile" Text -> H264Profile -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (H264Profile -> Pair) -> Maybe H264Profile -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe H264Profile
profile,
            (Text
"rateControlMode" Text -> H264RateControlMode -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (H264RateControlMode -> Pair)
-> Maybe H264RateControlMode -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe H264RateControlMode
rateControlMode,
            (Text
"minIInterval" Text -> Natural -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Natural -> Pair) -> Maybe Natural -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
minIInterval,
            (Text
"qvbrQualityLevel" Text -> Natural -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (Natural -> Pair) -> Maybe Natural -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
qvbrQualityLevel,
            (Text
"colorSpaceSettings" Text -> H264ColorSpaceSettings -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (H264ColorSpaceSettings -> Pair)
-> Maybe H264ColorSpaceSettings -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe H264ColorSpaceSettings
colorSpaceSettings,
            (Text
"parControl" Text -> H264ParControl -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (H264ParControl -> Pair) -> Maybe H264ParControl -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe H264ParControl
parControl,
            (Text
"flickerAq" Text -> H264FlickerAq -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (H264FlickerAq -> Pair) -> Maybe H264FlickerAq -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe H264FlickerAq
flickerAq,
            (Text
"bufSize" Text -> Natural -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Natural -> Pair) -> Maybe Natural -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
bufSize,
            (Text
"spatialAq" Text -> H264SpatialAq -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (H264SpatialAq -> Pair) -> Maybe H264SpatialAq -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe H264SpatialAq
spatialAq,
            (Text
"gopNumBFrames" Text -> Natural -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Natural -> Pair) -> Maybe Natural -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
gopNumBFrames,
            (Text
"fixedAfd" Text -> FixedAfd -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (FixedAfd -> Pair) -> Maybe FixedAfd -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe FixedAfd
fixedAfd,
            (Text
"softness" Text -> Natural -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Natural -> Pair) -> Maybe Natural -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
softness,
            (Text
"filterSettings" Text -> H264FilterSettings -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (H264FilterSettings -> Pair)
-> Maybe H264FilterSettings -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe H264FilterSettings
filterSettings,
            (Text
"bitrate" Text -> Natural -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Natural -> Pair) -> Maybe Natural -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
bitrate,
            (Text
"framerateDenominator" Text -> Natural -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (Natural -> Pair) -> Maybe Natural -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
framerateDenominator,
            (Text
"forceFieldPictures" Text -> H264ForceFieldPictures -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (H264ForceFieldPictures -> Pair)
-> Maybe H264ForceFieldPictures -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe H264ForceFieldPictures
forceFieldPictures,
            (Text
"entropyEncoding" Text -> H264EntropyEncoding -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (H264EntropyEncoding -> Pair)
-> Maybe H264EntropyEncoding -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe H264EntropyEncoding
entropyEncoding,
            (Text
"framerateControl" Text -> H264FramerateControl -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (H264FramerateControl -> Pair)
-> Maybe H264FramerateControl -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe H264FramerateControl
framerateControl,
            (Text
"colorMetadata" Text -> H264ColorMetadata -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (H264ColorMetadata -> Pair)
-> Maybe H264ColorMetadata -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe H264ColorMetadata
colorMetadata,
            (Text
"lookAheadRateControl" Text -> H264LookAheadRateControl -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (H264LookAheadRateControl -> Pair)
-> Maybe H264LookAheadRateControl -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe H264LookAheadRateControl
lookAheadRateControl,
            (Text
"adaptiveQuantization" Text -> H264AdaptiveQuantization -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (H264AdaptiveQuantization -> Pair)
-> Maybe H264AdaptiveQuantization -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe H264AdaptiveQuantization
adaptiveQuantization,
            (Text
"framerateNumerator" Text -> Natural -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (Natural -> Pair) -> Maybe Natural -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
framerateNumerator,
            (Text
"level" Text -> H264Level -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (H264Level -> Pair) -> Maybe H264Level -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe H264Level
level,
            (Text
"gopBReference" Text -> H264GopBReference -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (H264GopBReference -> Pair)
-> Maybe H264GopBReference -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe H264GopBReference
gopBReference,
            (Text
"maxBitrate" Text -> Natural -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Natural -> Pair) -> Maybe Natural -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
maxBitrate,
            (Text
"syntax" Text -> H264Syntax -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (H264Syntax -> Pair) -> Maybe H264Syntax -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe H264Syntax
syntax,
            (Text
"bufFillPct" Text -> Natural -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Natural -> Pair) -> Maybe Natural -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
bufFillPct,
            (Text
"gopClosedCadence" Text -> Natural -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (Natural -> Pair) -> Maybe Natural -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
gopClosedCadence,
            (Text
"numRefFrames" Text -> Natural -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Natural -> Pair) -> Maybe Natural -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
numRefFrames,
            (Text
"parDenominator" Text -> Natural -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (Natural -> Pair) -> Maybe Natural -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
parDenominator
          ]
      )