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

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

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

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.MediaConvert.Types.AfdSignaling
import Amazonka.MediaConvert.Types.AntiAlias
import Amazonka.MediaConvert.Types.ColorMetadata
import Amazonka.MediaConvert.Types.DropFrameTimecode
import Amazonka.MediaConvert.Types.Rectangle
import Amazonka.MediaConvert.Types.RespondToAfd
import Amazonka.MediaConvert.Types.ScalingBehavior
import Amazonka.MediaConvert.Types.VideoCodecSettings
import Amazonka.MediaConvert.Types.VideoPreprocessor
import Amazonka.MediaConvert.Types.VideoTimecodeInsertion
import qualified Amazonka.Prelude as Prelude

-- | Settings related to video encoding of your output. The specific video
-- settings depend on the video codec that you choose. When you work
-- directly in your JSON job specification, include one instance of Video
-- description (VideoDescription) per output.
--
-- /See:/ 'newVideoDescription' smart constructor.
data VideoDescription = VideoDescription'
  { -- | This setting only applies to H.264, H.265, and MPEG2 outputs. Use Insert
    -- AFD signaling (AfdSignaling) to specify whether the service includes AFD
    -- values in the output video data and what those values are. * Choose None
    -- to remove all AFD values from this output. * Choose Fixed to ignore
    -- input AFD values and instead encode the value specified in the job. *
    -- Choose Auto to calculate output AFD values based on the input AFD scaler
    -- data.
    VideoDescription -> Maybe AfdSignaling
afdSignaling :: Prelude.Maybe AfdSignaling,
    -- | The anti-alias filter is automatically applied to all outputs. The
    -- service no longer accepts the value DISABLED for AntiAlias. If you
    -- specify that in your job, the service will ignore the setting.
    VideoDescription -> Maybe AntiAlias
antiAlias :: Prelude.Maybe AntiAlias,
    -- | Video codec settings, (CodecSettings) under (VideoDescription), contains
    -- the group of settings related to video encoding. The settings in this
    -- group vary depending on the value that you choose for Video codec
    -- (Codec). For each codec enum that you choose, define the corresponding
    -- settings object. The following lists the codec enum, settings object
    -- pairs. * AV1, Av1Settings * AVC_INTRA, AvcIntraSettings * FRAME_CAPTURE,
    -- FrameCaptureSettings * H_264, H264Settings * H_265, H265Settings *
    -- MPEG2, Mpeg2Settings * PRORES, ProresSettings * VC3, Vc3Settings * VP8,
    -- Vp8Settings * VP9, Vp9Settings * XAVC, XavcSettings
    VideoDescription -> Maybe VideoCodecSettings
codecSettings :: Prelude.Maybe VideoCodecSettings,
    -- | Choose Insert (INSERT) for this setting to include color metadata in
    -- this output. Choose Ignore (IGNORE) to exclude color metadata from this
    -- output. If you don\'t specify a value, the service sets this to Insert
    -- by default.
    VideoDescription -> Maybe ColorMetadata
colorMetadata :: Prelude.Maybe ColorMetadata,
    -- | Use Cropping selection (crop) to specify the video area that the service
    -- will include in the output video frame.
    VideoDescription -> Maybe Rectangle
crop :: Prelude.Maybe Rectangle,
    -- | Applies only to 29.97 fps outputs. When this feature is enabled, the
    -- service will use drop-frame timecode on outputs. If it is not possible
    -- to use drop-frame timecode, the system will fall back to non-drop-frame.
    -- This setting is enabled by default when Timecode insertion
    -- (TimecodeInsertion) is enabled.
    VideoDescription -> Maybe DropFrameTimecode
dropFrameTimecode :: Prelude.Maybe DropFrameTimecode,
    -- | Applies only if you set AFD Signaling(AfdSignaling) to Fixed (FIXED).
    -- Use Fixed (FixedAfd) to specify a four-bit AFD value which the service
    -- will write on all frames of this video output.
    VideoDescription -> Maybe Natural
fixedAfd :: Prelude.Maybe Prelude.Natural,
    -- | Use the Height (Height) setting to define the video resolution height
    -- for this output. Specify in pixels. If you don\'t provide a value here,
    -- the service will use the input height.
    VideoDescription -> Maybe Natural
height :: Prelude.Maybe Prelude.Natural,
    -- | Use Selection placement (position) to define the video area in your
    -- output frame. The area outside of the rectangle that you specify here is
    -- black.
    VideoDescription -> Maybe Rectangle
position :: Prelude.Maybe Rectangle,
    -- | Use Respond to AFD (RespondToAfd) to specify how the service changes the
    -- video itself in response to AFD values in the input. * Choose Respond to
    -- clip the input video frame according to the AFD value, input display
    -- aspect ratio, and output display aspect ratio. * Choose Passthrough to
    -- include the input AFD values. Do not choose this when AfdSignaling is
    -- set to (NONE). A preferred implementation of this workflow is to set
    -- RespondToAfd to (NONE) and set AfdSignaling to (AUTO). * Choose None to
    -- remove all input AFD values from this output.
    VideoDescription -> Maybe RespondToAfd
respondToAfd :: Prelude.Maybe RespondToAfd,
    -- | Specify how the service handles outputs that have a different aspect
    -- ratio from the input aspect ratio. Choose Stretch to output
    -- (STRETCH_TO_OUTPUT) to have the service stretch your video image to fit.
    -- Keep the setting Default (DEFAULT) to have the service letterbox your
    -- video instead. This setting overrides any value that you specify for the
    -- setting Selection placement (position) in this output.
    VideoDescription -> Maybe ScalingBehavior
scalingBehavior :: Prelude.Maybe ScalingBehavior,
    -- | Use Sharpness (Sharpness) setting to specify the strength of
    -- anti-aliasing. This setting changes the width of the anti-alias filter
    -- kernel used for scaling. Sharpness only applies if your output
    -- resolution is different from your input resolution. 0 is the softest
    -- setting, 100 the sharpest, and 50 recommended for most content.
    VideoDescription -> Maybe Natural
sharpness :: Prelude.Maybe Prelude.Natural,
    -- | Applies only to H.264, H.265, MPEG2, and ProRes outputs. Only enable
    -- Timecode insertion when the input frame rate is identical to the output
    -- frame rate. To include timecodes in this output, set Timecode insertion
    -- (VideoTimecodeInsertion) to PIC_TIMING_SEI. To leave them out, set it to
    -- DISABLED. Default is DISABLED. When the service inserts timecodes in an
    -- output, by default, it uses any embedded timecodes from the input. If
    -- none are present, the service will set the timecode for the first output
    -- frame to zero. To change this default behavior, adjust the settings
    -- under Timecode configuration (TimecodeConfig). In the console, these
    -- settings are located under Job > Job settings > Timecode configuration.
    -- Note - Timecode source under input settings (InputTimecodeSource) does
    -- not affect the timecodes that are inserted in the output. Source under
    -- Job settings > Timecode configuration (TimecodeSource) does.
    VideoDescription -> Maybe VideoTimecodeInsertion
timecodeInsertion :: Prelude.Maybe VideoTimecodeInsertion,
    -- | Find additional transcoding features under Preprocessors
    -- (VideoPreprocessors). Enable the features at each output individually.
    -- These features are disabled by default.
    VideoDescription -> Maybe VideoPreprocessor
videoPreprocessors :: Prelude.Maybe VideoPreprocessor,
    -- | Use Width (Width) to define the video resolution width, in pixels, for
    -- this output. If you don\'t provide a value here, the service will use
    -- the input width.
    VideoDescription -> Maybe Natural
width :: Prelude.Maybe Prelude.Natural
  }
  deriving (VideoDescription -> VideoDescription -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: VideoDescription -> VideoDescription -> Bool
$c/= :: VideoDescription -> VideoDescription -> Bool
== :: VideoDescription -> VideoDescription -> Bool
$c== :: VideoDescription -> VideoDescription -> Bool
Prelude.Eq, ReadPrec [VideoDescription]
ReadPrec VideoDescription
Int -> ReadS VideoDescription
ReadS [VideoDescription]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [VideoDescription]
$creadListPrec :: ReadPrec [VideoDescription]
readPrec :: ReadPrec VideoDescription
$creadPrec :: ReadPrec VideoDescription
readList :: ReadS [VideoDescription]
$creadList :: ReadS [VideoDescription]
readsPrec :: Int -> ReadS VideoDescription
$creadsPrec :: Int -> ReadS VideoDescription
Prelude.Read, Int -> VideoDescription -> ShowS
[VideoDescription] -> ShowS
VideoDescription -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [VideoDescription] -> ShowS
$cshowList :: [VideoDescription] -> ShowS
show :: VideoDescription -> String
$cshow :: VideoDescription -> String
showsPrec :: Int -> VideoDescription -> ShowS
$cshowsPrec :: Int -> VideoDescription -> ShowS
Prelude.Show, forall x. Rep VideoDescription x -> VideoDescription
forall x. VideoDescription -> Rep VideoDescription x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep VideoDescription x -> VideoDescription
$cfrom :: forall x. VideoDescription -> Rep VideoDescription x
Prelude.Generic)

-- |
-- Create a value of 'VideoDescription' 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:
--
-- 'afdSignaling', 'videoDescription_afdSignaling' - This setting only applies to H.264, H.265, and MPEG2 outputs. Use Insert
-- AFD signaling (AfdSignaling) to specify whether the service includes AFD
-- values in the output video data and what those values are. * Choose None
-- to remove all AFD values from this output. * Choose Fixed to ignore
-- input AFD values and instead encode the value specified in the job. *
-- Choose Auto to calculate output AFD values based on the input AFD scaler
-- data.
--
-- 'antiAlias', 'videoDescription_antiAlias' - The anti-alias filter is automatically applied to all outputs. The
-- service no longer accepts the value DISABLED for AntiAlias. If you
-- specify that in your job, the service will ignore the setting.
--
-- 'codecSettings', 'videoDescription_codecSettings' - Video codec settings, (CodecSettings) under (VideoDescription), contains
-- the group of settings related to video encoding. The settings in this
-- group vary depending on the value that you choose for Video codec
-- (Codec). For each codec enum that you choose, define the corresponding
-- settings object. The following lists the codec enum, settings object
-- pairs. * AV1, Av1Settings * AVC_INTRA, AvcIntraSettings * FRAME_CAPTURE,
-- FrameCaptureSettings * H_264, H264Settings * H_265, H265Settings *
-- MPEG2, Mpeg2Settings * PRORES, ProresSettings * VC3, Vc3Settings * VP8,
-- Vp8Settings * VP9, Vp9Settings * XAVC, XavcSettings
--
-- 'colorMetadata', 'videoDescription_colorMetadata' - Choose Insert (INSERT) for this setting to include color metadata in
-- this output. Choose Ignore (IGNORE) to exclude color metadata from this
-- output. If you don\'t specify a value, the service sets this to Insert
-- by default.
--
-- 'crop', 'videoDescription_crop' - Use Cropping selection (crop) to specify the video area that the service
-- will include in the output video frame.
--
-- 'dropFrameTimecode', 'videoDescription_dropFrameTimecode' - Applies only to 29.97 fps outputs. When this feature is enabled, the
-- service will use drop-frame timecode on outputs. If it is not possible
-- to use drop-frame timecode, the system will fall back to non-drop-frame.
-- This setting is enabled by default when Timecode insertion
-- (TimecodeInsertion) is enabled.
--
-- 'fixedAfd', 'videoDescription_fixedAfd' - Applies only if you set AFD Signaling(AfdSignaling) to Fixed (FIXED).
-- Use Fixed (FixedAfd) to specify a four-bit AFD value which the service
-- will write on all frames of this video output.
--
-- 'height', 'videoDescription_height' - Use the Height (Height) setting to define the video resolution height
-- for this output. Specify in pixels. If you don\'t provide a value here,
-- the service will use the input height.
--
-- 'position', 'videoDescription_position' - Use Selection placement (position) to define the video area in your
-- output frame. The area outside of the rectangle that you specify here is
-- black.
--
-- 'respondToAfd', 'videoDescription_respondToAfd' - Use Respond to AFD (RespondToAfd) to specify how the service changes the
-- video itself in response to AFD values in the input. * Choose Respond to
-- clip the input video frame according to the AFD value, input display
-- aspect ratio, and output display aspect ratio. * Choose Passthrough to
-- include the input AFD values. Do not choose this when AfdSignaling is
-- set to (NONE). A preferred implementation of this workflow is to set
-- RespondToAfd to (NONE) and set AfdSignaling to (AUTO). * Choose None to
-- remove all input AFD values from this output.
--
-- 'scalingBehavior', 'videoDescription_scalingBehavior' - Specify how the service handles outputs that have a different aspect
-- ratio from the input aspect ratio. Choose Stretch to output
-- (STRETCH_TO_OUTPUT) to have the service stretch your video image to fit.
-- Keep the setting Default (DEFAULT) to have the service letterbox your
-- video instead. This setting overrides any value that you specify for the
-- setting Selection placement (position) in this output.
--
-- 'sharpness', 'videoDescription_sharpness' - Use Sharpness (Sharpness) setting to specify the strength of
-- anti-aliasing. This setting changes the width of the anti-alias filter
-- kernel used for scaling. Sharpness only applies if your output
-- resolution is different from your input resolution. 0 is the softest
-- setting, 100 the sharpest, and 50 recommended for most content.
--
-- 'timecodeInsertion', 'videoDescription_timecodeInsertion' - Applies only to H.264, H.265, MPEG2, and ProRes outputs. Only enable
-- Timecode insertion when the input frame rate is identical to the output
-- frame rate. To include timecodes in this output, set Timecode insertion
-- (VideoTimecodeInsertion) to PIC_TIMING_SEI. To leave them out, set it to
-- DISABLED. Default is DISABLED. When the service inserts timecodes in an
-- output, by default, it uses any embedded timecodes from the input. If
-- none are present, the service will set the timecode for the first output
-- frame to zero. To change this default behavior, adjust the settings
-- under Timecode configuration (TimecodeConfig). In the console, these
-- settings are located under Job > Job settings > Timecode configuration.
-- Note - Timecode source under input settings (InputTimecodeSource) does
-- not affect the timecodes that are inserted in the output. Source under
-- Job settings > Timecode configuration (TimecodeSource) does.
--
-- 'videoPreprocessors', 'videoDescription_videoPreprocessors' - Find additional transcoding features under Preprocessors
-- (VideoPreprocessors). Enable the features at each output individually.
-- These features are disabled by default.
--
-- 'width', 'videoDescription_width' - Use Width (Width) to define the video resolution width, in pixels, for
-- this output. If you don\'t provide a value here, the service will use
-- the input width.
newVideoDescription ::
  VideoDescription
newVideoDescription :: VideoDescription
newVideoDescription =
  VideoDescription'
    { $sel:afdSignaling:VideoDescription' :: Maybe AfdSignaling
afdSignaling = forall a. Maybe a
Prelude.Nothing,
      $sel:antiAlias:VideoDescription' :: Maybe AntiAlias
antiAlias = forall a. Maybe a
Prelude.Nothing,
      $sel:codecSettings:VideoDescription' :: Maybe VideoCodecSettings
codecSettings = forall a. Maybe a
Prelude.Nothing,
      $sel:colorMetadata:VideoDescription' :: Maybe ColorMetadata
colorMetadata = forall a. Maybe a
Prelude.Nothing,
      $sel:crop:VideoDescription' :: Maybe Rectangle
crop = forall a. Maybe a
Prelude.Nothing,
      $sel:dropFrameTimecode:VideoDescription' :: Maybe DropFrameTimecode
dropFrameTimecode = forall a. Maybe a
Prelude.Nothing,
      $sel:fixedAfd:VideoDescription' :: Maybe Natural
fixedAfd = forall a. Maybe a
Prelude.Nothing,
      $sel:height:VideoDescription' :: Maybe Natural
height = forall a. Maybe a
Prelude.Nothing,
      $sel:position:VideoDescription' :: Maybe Rectangle
position = forall a. Maybe a
Prelude.Nothing,
      $sel:respondToAfd:VideoDescription' :: Maybe RespondToAfd
respondToAfd = forall a. Maybe a
Prelude.Nothing,
      $sel:scalingBehavior:VideoDescription' :: Maybe ScalingBehavior
scalingBehavior = forall a. Maybe a
Prelude.Nothing,
      $sel:sharpness:VideoDescription' :: Maybe Natural
sharpness = forall a. Maybe a
Prelude.Nothing,
      $sel:timecodeInsertion:VideoDescription' :: Maybe VideoTimecodeInsertion
timecodeInsertion = forall a. Maybe a
Prelude.Nothing,
      $sel:videoPreprocessors:VideoDescription' :: Maybe VideoPreprocessor
videoPreprocessors = forall a. Maybe a
Prelude.Nothing,
      $sel:width:VideoDescription' :: Maybe Natural
width = forall a. Maybe a
Prelude.Nothing
    }

-- | This setting only applies to H.264, H.265, and MPEG2 outputs. Use Insert
-- AFD signaling (AfdSignaling) to specify whether the service includes AFD
-- values in the output video data and what those values are. * Choose None
-- to remove all AFD values from this output. * Choose Fixed to ignore
-- input AFD values and instead encode the value specified in the job. *
-- Choose Auto to calculate output AFD values based on the input AFD scaler
-- data.
videoDescription_afdSignaling :: Lens.Lens' VideoDescription (Prelude.Maybe AfdSignaling)
videoDescription_afdSignaling :: Lens' VideoDescription (Maybe AfdSignaling)
videoDescription_afdSignaling = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VideoDescription' {Maybe AfdSignaling
afdSignaling :: Maybe AfdSignaling
$sel:afdSignaling:VideoDescription' :: VideoDescription -> Maybe AfdSignaling
afdSignaling} -> Maybe AfdSignaling
afdSignaling) (\s :: VideoDescription
s@VideoDescription' {} Maybe AfdSignaling
a -> VideoDescription
s {$sel:afdSignaling:VideoDescription' :: Maybe AfdSignaling
afdSignaling = Maybe AfdSignaling
a} :: VideoDescription)

-- | The anti-alias filter is automatically applied to all outputs. The
-- service no longer accepts the value DISABLED for AntiAlias. If you
-- specify that in your job, the service will ignore the setting.
videoDescription_antiAlias :: Lens.Lens' VideoDescription (Prelude.Maybe AntiAlias)
videoDescription_antiAlias :: Lens' VideoDescription (Maybe AntiAlias)
videoDescription_antiAlias = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VideoDescription' {Maybe AntiAlias
antiAlias :: Maybe AntiAlias
$sel:antiAlias:VideoDescription' :: VideoDescription -> Maybe AntiAlias
antiAlias} -> Maybe AntiAlias
antiAlias) (\s :: VideoDescription
s@VideoDescription' {} Maybe AntiAlias
a -> VideoDescription
s {$sel:antiAlias:VideoDescription' :: Maybe AntiAlias
antiAlias = Maybe AntiAlias
a} :: VideoDescription)

-- | Video codec settings, (CodecSettings) under (VideoDescription), contains
-- the group of settings related to video encoding. The settings in this
-- group vary depending on the value that you choose for Video codec
-- (Codec). For each codec enum that you choose, define the corresponding
-- settings object. The following lists the codec enum, settings object
-- pairs. * AV1, Av1Settings * AVC_INTRA, AvcIntraSettings * FRAME_CAPTURE,
-- FrameCaptureSettings * H_264, H264Settings * H_265, H265Settings *
-- MPEG2, Mpeg2Settings * PRORES, ProresSettings * VC3, Vc3Settings * VP8,
-- Vp8Settings * VP9, Vp9Settings * XAVC, XavcSettings
videoDescription_codecSettings :: Lens.Lens' VideoDescription (Prelude.Maybe VideoCodecSettings)
videoDescription_codecSettings :: Lens' VideoDescription (Maybe VideoCodecSettings)
videoDescription_codecSettings = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VideoDescription' {Maybe VideoCodecSettings
codecSettings :: Maybe VideoCodecSettings
$sel:codecSettings:VideoDescription' :: VideoDescription -> Maybe VideoCodecSettings
codecSettings} -> Maybe VideoCodecSettings
codecSettings) (\s :: VideoDescription
s@VideoDescription' {} Maybe VideoCodecSettings
a -> VideoDescription
s {$sel:codecSettings:VideoDescription' :: Maybe VideoCodecSettings
codecSettings = Maybe VideoCodecSettings
a} :: VideoDescription)

-- | Choose Insert (INSERT) for this setting to include color metadata in
-- this output. Choose Ignore (IGNORE) to exclude color metadata from this
-- output. If you don\'t specify a value, the service sets this to Insert
-- by default.
videoDescription_colorMetadata :: Lens.Lens' VideoDescription (Prelude.Maybe ColorMetadata)
videoDescription_colorMetadata :: Lens' VideoDescription (Maybe ColorMetadata)
videoDescription_colorMetadata = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VideoDescription' {Maybe ColorMetadata
colorMetadata :: Maybe ColorMetadata
$sel:colorMetadata:VideoDescription' :: VideoDescription -> Maybe ColorMetadata
colorMetadata} -> Maybe ColorMetadata
colorMetadata) (\s :: VideoDescription
s@VideoDescription' {} Maybe ColorMetadata
a -> VideoDescription
s {$sel:colorMetadata:VideoDescription' :: Maybe ColorMetadata
colorMetadata = Maybe ColorMetadata
a} :: VideoDescription)

-- | Use Cropping selection (crop) to specify the video area that the service
-- will include in the output video frame.
videoDescription_crop :: Lens.Lens' VideoDescription (Prelude.Maybe Rectangle)
videoDescription_crop :: Lens' VideoDescription (Maybe Rectangle)
videoDescription_crop = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VideoDescription' {Maybe Rectangle
crop :: Maybe Rectangle
$sel:crop:VideoDescription' :: VideoDescription -> Maybe Rectangle
crop} -> Maybe Rectangle
crop) (\s :: VideoDescription
s@VideoDescription' {} Maybe Rectangle
a -> VideoDescription
s {$sel:crop:VideoDescription' :: Maybe Rectangle
crop = Maybe Rectangle
a} :: VideoDescription)

-- | Applies only to 29.97 fps outputs. When this feature is enabled, the
-- service will use drop-frame timecode on outputs. If it is not possible
-- to use drop-frame timecode, the system will fall back to non-drop-frame.
-- This setting is enabled by default when Timecode insertion
-- (TimecodeInsertion) is enabled.
videoDescription_dropFrameTimecode :: Lens.Lens' VideoDescription (Prelude.Maybe DropFrameTimecode)
videoDescription_dropFrameTimecode :: Lens' VideoDescription (Maybe DropFrameTimecode)
videoDescription_dropFrameTimecode = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VideoDescription' {Maybe DropFrameTimecode
dropFrameTimecode :: Maybe DropFrameTimecode
$sel:dropFrameTimecode:VideoDescription' :: VideoDescription -> Maybe DropFrameTimecode
dropFrameTimecode} -> Maybe DropFrameTimecode
dropFrameTimecode) (\s :: VideoDescription
s@VideoDescription' {} Maybe DropFrameTimecode
a -> VideoDescription
s {$sel:dropFrameTimecode:VideoDescription' :: Maybe DropFrameTimecode
dropFrameTimecode = Maybe DropFrameTimecode
a} :: VideoDescription)

-- | Applies only if you set AFD Signaling(AfdSignaling) to Fixed (FIXED).
-- Use Fixed (FixedAfd) to specify a four-bit AFD value which the service
-- will write on all frames of this video output.
videoDescription_fixedAfd :: Lens.Lens' VideoDescription (Prelude.Maybe Prelude.Natural)
videoDescription_fixedAfd :: Lens' VideoDescription (Maybe Natural)
videoDescription_fixedAfd = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VideoDescription' {Maybe Natural
fixedAfd :: Maybe Natural
$sel:fixedAfd:VideoDescription' :: VideoDescription -> Maybe Natural
fixedAfd} -> Maybe Natural
fixedAfd) (\s :: VideoDescription
s@VideoDescription' {} Maybe Natural
a -> VideoDescription
s {$sel:fixedAfd:VideoDescription' :: Maybe Natural
fixedAfd = Maybe Natural
a} :: VideoDescription)

-- | Use the Height (Height) setting to define the video resolution height
-- for this output. Specify in pixels. If you don\'t provide a value here,
-- the service will use the input height.
videoDescription_height :: Lens.Lens' VideoDescription (Prelude.Maybe Prelude.Natural)
videoDescription_height :: Lens' VideoDescription (Maybe Natural)
videoDescription_height = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VideoDescription' {Maybe Natural
height :: Maybe Natural
$sel:height:VideoDescription' :: VideoDescription -> Maybe Natural
height} -> Maybe Natural
height) (\s :: VideoDescription
s@VideoDescription' {} Maybe Natural
a -> VideoDescription
s {$sel:height:VideoDescription' :: Maybe Natural
height = Maybe Natural
a} :: VideoDescription)

-- | Use Selection placement (position) to define the video area in your
-- output frame. The area outside of the rectangle that you specify here is
-- black.
videoDescription_position :: Lens.Lens' VideoDescription (Prelude.Maybe Rectangle)
videoDescription_position :: Lens' VideoDescription (Maybe Rectangle)
videoDescription_position = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VideoDescription' {Maybe Rectangle
position :: Maybe Rectangle
$sel:position:VideoDescription' :: VideoDescription -> Maybe Rectangle
position} -> Maybe Rectangle
position) (\s :: VideoDescription
s@VideoDescription' {} Maybe Rectangle
a -> VideoDescription
s {$sel:position:VideoDescription' :: Maybe Rectangle
position = Maybe Rectangle
a} :: VideoDescription)

-- | Use Respond to AFD (RespondToAfd) to specify how the service changes the
-- video itself in response to AFD values in the input. * Choose Respond to
-- clip the input video frame according to the AFD value, input display
-- aspect ratio, and output display aspect ratio. * Choose Passthrough to
-- include the input AFD values. Do not choose this when AfdSignaling is
-- set to (NONE). A preferred implementation of this workflow is to set
-- RespondToAfd to (NONE) and set AfdSignaling to (AUTO). * Choose None to
-- remove all input AFD values from this output.
videoDescription_respondToAfd :: Lens.Lens' VideoDescription (Prelude.Maybe RespondToAfd)
videoDescription_respondToAfd :: Lens' VideoDescription (Maybe RespondToAfd)
videoDescription_respondToAfd = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VideoDescription' {Maybe RespondToAfd
respondToAfd :: Maybe RespondToAfd
$sel:respondToAfd:VideoDescription' :: VideoDescription -> Maybe RespondToAfd
respondToAfd} -> Maybe RespondToAfd
respondToAfd) (\s :: VideoDescription
s@VideoDescription' {} Maybe RespondToAfd
a -> VideoDescription
s {$sel:respondToAfd:VideoDescription' :: Maybe RespondToAfd
respondToAfd = Maybe RespondToAfd
a} :: VideoDescription)

-- | Specify how the service handles outputs that have a different aspect
-- ratio from the input aspect ratio. Choose Stretch to output
-- (STRETCH_TO_OUTPUT) to have the service stretch your video image to fit.
-- Keep the setting Default (DEFAULT) to have the service letterbox your
-- video instead. This setting overrides any value that you specify for the
-- setting Selection placement (position) in this output.
videoDescription_scalingBehavior :: Lens.Lens' VideoDescription (Prelude.Maybe ScalingBehavior)
videoDescription_scalingBehavior :: Lens' VideoDescription (Maybe ScalingBehavior)
videoDescription_scalingBehavior = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VideoDescription' {Maybe ScalingBehavior
scalingBehavior :: Maybe ScalingBehavior
$sel:scalingBehavior:VideoDescription' :: VideoDescription -> Maybe ScalingBehavior
scalingBehavior} -> Maybe ScalingBehavior
scalingBehavior) (\s :: VideoDescription
s@VideoDescription' {} Maybe ScalingBehavior
a -> VideoDescription
s {$sel:scalingBehavior:VideoDescription' :: Maybe ScalingBehavior
scalingBehavior = Maybe ScalingBehavior
a} :: VideoDescription)

-- | Use Sharpness (Sharpness) setting to specify the strength of
-- anti-aliasing. This setting changes the width of the anti-alias filter
-- kernel used for scaling. Sharpness only applies if your output
-- resolution is different from your input resolution. 0 is the softest
-- setting, 100 the sharpest, and 50 recommended for most content.
videoDescription_sharpness :: Lens.Lens' VideoDescription (Prelude.Maybe Prelude.Natural)
videoDescription_sharpness :: Lens' VideoDescription (Maybe Natural)
videoDescription_sharpness = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VideoDescription' {Maybe Natural
sharpness :: Maybe Natural
$sel:sharpness:VideoDescription' :: VideoDescription -> Maybe Natural
sharpness} -> Maybe Natural
sharpness) (\s :: VideoDescription
s@VideoDescription' {} Maybe Natural
a -> VideoDescription
s {$sel:sharpness:VideoDescription' :: Maybe Natural
sharpness = Maybe Natural
a} :: VideoDescription)

-- | Applies only to H.264, H.265, MPEG2, and ProRes outputs. Only enable
-- Timecode insertion when the input frame rate is identical to the output
-- frame rate. To include timecodes in this output, set Timecode insertion
-- (VideoTimecodeInsertion) to PIC_TIMING_SEI. To leave them out, set it to
-- DISABLED. Default is DISABLED. When the service inserts timecodes in an
-- output, by default, it uses any embedded timecodes from the input. If
-- none are present, the service will set the timecode for the first output
-- frame to zero. To change this default behavior, adjust the settings
-- under Timecode configuration (TimecodeConfig). In the console, these
-- settings are located under Job > Job settings > Timecode configuration.
-- Note - Timecode source under input settings (InputTimecodeSource) does
-- not affect the timecodes that are inserted in the output. Source under
-- Job settings > Timecode configuration (TimecodeSource) does.
videoDescription_timecodeInsertion :: Lens.Lens' VideoDescription (Prelude.Maybe VideoTimecodeInsertion)
videoDescription_timecodeInsertion :: Lens' VideoDescription (Maybe VideoTimecodeInsertion)
videoDescription_timecodeInsertion = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VideoDescription' {Maybe VideoTimecodeInsertion
timecodeInsertion :: Maybe VideoTimecodeInsertion
$sel:timecodeInsertion:VideoDescription' :: VideoDescription -> Maybe VideoTimecodeInsertion
timecodeInsertion} -> Maybe VideoTimecodeInsertion
timecodeInsertion) (\s :: VideoDescription
s@VideoDescription' {} Maybe VideoTimecodeInsertion
a -> VideoDescription
s {$sel:timecodeInsertion:VideoDescription' :: Maybe VideoTimecodeInsertion
timecodeInsertion = Maybe VideoTimecodeInsertion
a} :: VideoDescription)

-- | Find additional transcoding features under Preprocessors
-- (VideoPreprocessors). Enable the features at each output individually.
-- These features are disabled by default.
videoDescription_videoPreprocessors :: Lens.Lens' VideoDescription (Prelude.Maybe VideoPreprocessor)
videoDescription_videoPreprocessors :: Lens' VideoDescription (Maybe VideoPreprocessor)
videoDescription_videoPreprocessors = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VideoDescription' {Maybe VideoPreprocessor
videoPreprocessors :: Maybe VideoPreprocessor
$sel:videoPreprocessors:VideoDescription' :: VideoDescription -> Maybe VideoPreprocessor
videoPreprocessors} -> Maybe VideoPreprocessor
videoPreprocessors) (\s :: VideoDescription
s@VideoDescription' {} Maybe VideoPreprocessor
a -> VideoDescription
s {$sel:videoPreprocessors:VideoDescription' :: Maybe VideoPreprocessor
videoPreprocessors = Maybe VideoPreprocessor
a} :: VideoDescription)

-- | Use Width (Width) to define the video resolution width, in pixels, for
-- this output. If you don\'t provide a value here, the service will use
-- the input width.
videoDescription_width :: Lens.Lens' VideoDescription (Prelude.Maybe Prelude.Natural)
videoDescription_width :: Lens' VideoDescription (Maybe Natural)
videoDescription_width = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\VideoDescription' {Maybe Natural
width :: Maybe Natural
$sel:width:VideoDescription' :: VideoDescription -> Maybe Natural
width} -> Maybe Natural
width) (\s :: VideoDescription
s@VideoDescription' {} Maybe Natural
a -> VideoDescription
s {$sel:width:VideoDescription' :: Maybe Natural
width = Maybe Natural
a} :: VideoDescription)

instance Data.FromJSON VideoDescription where
  parseJSON :: Value -> Parser VideoDescription
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"VideoDescription"
      ( \Object
x ->
          Maybe AfdSignaling
-> Maybe AntiAlias
-> Maybe VideoCodecSettings
-> Maybe ColorMetadata
-> Maybe Rectangle
-> Maybe DropFrameTimecode
-> Maybe Natural
-> Maybe Natural
-> Maybe Rectangle
-> Maybe RespondToAfd
-> Maybe ScalingBehavior
-> Maybe Natural
-> Maybe VideoTimecodeInsertion
-> Maybe VideoPreprocessor
-> Maybe Natural
-> VideoDescription
VideoDescription'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"afdSignaling")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"antiAlias")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"codecSettings")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"colorMetadata")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"crop")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"dropFrameTimecode")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"fixedAfd")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"height")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"position")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"respondToAfd")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"scalingBehavior")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"sharpness")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"timecodeInsertion")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"videoPreprocessors")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"width")
      )

instance Prelude.Hashable VideoDescription where
  hashWithSalt :: Int -> VideoDescription -> Int
hashWithSalt Int
_salt VideoDescription' {Maybe Natural
Maybe AfdSignaling
Maybe AntiAlias
Maybe ColorMetadata
Maybe DropFrameTimecode
Maybe Rectangle
Maybe RespondToAfd
Maybe ScalingBehavior
Maybe VideoTimecodeInsertion
Maybe VideoPreprocessor
Maybe VideoCodecSettings
width :: Maybe Natural
videoPreprocessors :: Maybe VideoPreprocessor
timecodeInsertion :: Maybe VideoTimecodeInsertion
sharpness :: Maybe Natural
scalingBehavior :: Maybe ScalingBehavior
respondToAfd :: Maybe RespondToAfd
position :: Maybe Rectangle
height :: Maybe Natural
fixedAfd :: Maybe Natural
dropFrameTimecode :: Maybe DropFrameTimecode
crop :: Maybe Rectangle
colorMetadata :: Maybe ColorMetadata
codecSettings :: Maybe VideoCodecSettings
antiAlias :: Maybe AntiAlias
afdSignaling :: Maybe AfdSignaling
$sel:width:VideoDescription' :: VideoDescription -> Maybe Natural
$sel:videoPreprocessors:VideoDescription' :: VideoDescription -> Maybe VideoPreprocessor
$sel:timecodeInsertion:VideoDescription' :: VideoDescription -> Maybe VideoTimecodeInsertion
$sel:sharpness:VideoDescription' :: VideoDescription -> Maybe Natural
$sel:scalingBehavior:VideoDescription' :: VideoDescription -> Maybe ScalingBehavior
$sel:respondToAfd:VideoDescription' :: VideoDescription -> Maybe RespondToAfd
$sel:position:VideoDescription' :: VideoDescription -> Maybe Rectangle
$sel:height:VideoDescription' :: VideoDescription -> Maybe Natural
$sel:fixedAfd:VideoDescription' :: VideoDescription -> Maybe Natural
$sel:dropFrameTimecode:VideoDescription' :: VideoDescription -> Maybe DropFrameTimecode
$sel:crop:VideoDescription' :: VideoDescription -> Maybe Rectangle
$sel:colorMetadata:VideoDescription' :: VideoDescription -> Maybe ColorMetadata
$sel:codecSettings:VideoDescription' :: VideoDescription -> Maybe VideoCodecSettings
$sel:antiAlias:VideoDescription' :: VideoDescription -> Maybe AntiAlias
$sel:afdSignaling:VideoDescription' :: VideoDescription -> Maybe AfdSignaling
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AfdSignaling
afdSignaling
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AntiAlias
antiAlias
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe VideoCodecSettings
codecSettings
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ColorMetadata
colorMetadata
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Rectangle
crop
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DropFrameTimecode
dropFrameTimecode
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
fixedAfd
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
height
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Rectangle
position
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe RespondToAfd
respondToAfd
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ScalingBehavior
scalingBehavior
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
sharpness
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe VideoTimecodeInsertion
timecodeInsertion
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe VideoPreprocessor
videoPreprocessors
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
width

instance Prelude.NFData VideoDescription where
  rnf :: VideoDescription -> ()
rnf VideoDescription' {Maybe Natural
Maybe AfdSignaling
Maybe AntiAlias
Maybe ColorMetadata
Maybe DropFrameTimecode
Maybe Rectangle
Maybe RespondToAfd
Maybe ScalingBehavior
Maybe VideoTimecodeInsertion
Maybe VideoPreprocessor
Maybe VideoCodecSettings
width :: Maybe Natural
videoPreprocessors :: Maybe VideoPreprocessor
timecodeInsertion :: Maybe VideoTimecodeInsertion
sharpness :: Maybe Natural
scalingBehavior :: Maybe ScalingBehavior
respondToAfd :: Maybe RespondToAfd
position :: Maybe Rectangle
height :: Maybe Natural
fixedAfd :: Maybe Natural
dropFrameTimecode :: Maybe DropFrameTimecode
crop :: Maybe Rectangle
colorMetadata :: Maybe ColorMetadata
codecSettings :: Maybe VideoCodecSettings
antiAlias :: Maybe AntiAlias
afdSignaling :: Maybe AfdSignaling
$sel:width:VideoDescription' :: VideoDescription -> Maybe Natural
$sel:videoPreprocessors:VideoDescription' :: VideoDescription -> Maybe VideoPreprocessor
$sel:timecodeInsertion:VideoDescription' :: VideoDescription -> Maybe VideoTimecodeInsertion
$sel:sharpness:VideoDescription' :: VideoDescription -> Maybe Natural
$sel:scalingBehavior:VideoDescription' :: VideoDescription -> Maybe ScalingBehavior
$sel:respondToAfd:VideoDescription' :: VideoDescription -> Maybe RespondToAfd
$sel:position:VideoDescription' :: VideoDescription -> Maybe Rectangle
$sel:height:VideoDescription' :: VideoDescription -> Maybe Natural
$sel:fixedAfd:VideoDescription' :: VideoDescription -> Maybe Natural
$sel:dropFrameTimecode:VideoDescription' :: VideoDescription -> Maybe DropFrameTimecode
$sel:crop:VideoDescription' :: VideoDescription -> Maybe Rectangle
$sel:colorMetadata:VideoDescription' :: VideoDescription -> Maybe ColorMetadata
$sel:codecSettings:VideoDescription' :: VideoDescription -> Maybe VideoCodecSettings
$sel:antiAlias:VideoDescription' :: VideoDescription -> Maybe AntiAlias
$sel:afdSignaling:VideoDescription' :: VideoDescription -> Maybe AfdSignaling
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe AfdSignaling
afdSignaling
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AntiAlias
antiAlias
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe VideoCodecSettings
codecSettings
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ColorMetadata
colorMetadata
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Rectangle
crop
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DropFrameTimecode
dropFrameTimecode
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
fixedAfd
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
height
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Rectangle
position
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe RespondToAfd
respondToAfd
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ScalingBehavior
scalingBehavior
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
sharpness
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe VideoTimecodeInsertion
timecodeInsertion
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe VideoPreprocessor
videoPreprocessors
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
width

instance Data.ToJSON VideoDescription where
  toJSON :: VideoDescription -> Value
toJSON VideoDescription' {Maybe Natural
Maybe AfdSignaling
Maybe AntiAlias
Maybe ColorMetadata
Maybe DropFrameTimecode
Maybe Rectangle
Maybe RespondToAfd
Maybe ScalingBehavior
Maybe VideoTimecodeInsertion
Maybe VideoPreprocessor
Maybe VideoCodecSettings
width :: Maybe Natural
videoPreprocessors :: Maybe VideoPreprocessor
timecodeInsertion :: Maybe VideoTimecodeInsertion
sharpness :: Maybe Natural
scalingBehavior :: Maybe ScalingBehavior
respondToAfd :: Maybe RespondToAfd
position :: Maybe Rectangle
height :: Maybe Natural
fixedAfd :: Maybe Natural
dropFrameTimecode :: Maybe DropFrameTimecode
crop :: Maybe Rectangle
colorMetadata :: Maybe ColorMetadata
codecSettings :: Maybe VideoCodecSettings
antiAlias :: Maybe AntiAlias
afdSignaling :: Maybe AfdSignaling
$sel:width:VideoDescription' :: VideoDescription -> Maybe Natural
$sel:videoPreprocessors:VideoDescription' :: VideoDescription -> Maybe VideoPreprocessor
$sel:timecodeInsertion:VideoDescription' :: VideoDescription -> Maybe VideoTimecodeInsertion
$sel:sharpness:VideoDescription' :: VideoDescription -> Maybe Natural
$sel:scalingBehavior:VideoDescription' :: VideoDescription -> Maybe ScalingBehavior
$sel:respondToAfd:VideoDescription' :: VideoDescription -> Maybe RespondToAfd
$sel:position:VideoDescription' :: VideoDescription -> Maybe Rectangle
$sel:height:VideoDescription' :: VideoDescription -> Maybe Natural
$sel:fixedAfd:VideoDescription' :: VideoDescription -> Maybe Natural
$sel:dropFrameTimecode:VideoDescription' :: VideoDescription -> Maybe DropFrameTimecode
$sel:crop:VideoDescription' :: VideoDescription -> Maybe Rectangle
$sel:colorMetadata:VideoDescription' :: VideoDescription -> Maybe ColorMetadata
$sel:codecSettings:VideoDescription' :: VideoDescription -> Maybe VideoCodecSettings
$sel:antiAlias:VideoDescription' :: VideoDescription -> Maybe AntiAlias
$sel:afdSignaling:VideoDescription' :: VideoDescription -> Maybe AfdSignaling
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"afdSignaling" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe AfdSignaling
afdSignaling,
            (Key
"antiAlias" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe AntiAlias
antiAlias,
            (Key
"codecSettings" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe VideoCodecSettings
codecSettings,
            (Key
"colorMetadata" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe ColorMetadata
colorMetadata,
            (Key
"crop" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Rectangle
crop,
            (Key
"dropFrameTimecode" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe DropFrameTimecode
dropFrameTimecode,
            (Key
"fixedAfd" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
fixedAfd,
            (Key
"height" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
height,
            (Key
"position" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Rectangle
position,
            (Key
"respondToAfd" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe RespondToAfd
respondToAfd,
            (Key
"scalingBehavior" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe ScalingBehavior
scalingBehavior,
            (Key
"sharpness" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
sharpness,
            (Key
"timecodeInsertion" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe VideoTimecodeInsertion
timecodeInsertion,
            (Key
"videoPreprocessors" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe VideoPreprocessor
videoPreprocessors,
            (Key
"width" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
width
          ]
      )