# encoding: utf-8
# Code generated by Microsoft (R) AutoRest Code Generator.
# Changes may cause incorrect behavior and will be lost if the code is
# regenerated.

module Azure::MediaServices::Mgmt::V2020_05_01
  module Models
    #
    # Describes all the properties for encoding a video with the H.265 codec.
    #
    class H265Video < Video

      include MsRestAzure


      def initialize
        @odatatype = "#Microsoft.Media.H265Video"
      end

      attr_accessor :odatatype

      # @return [Boolean] Specifies whether or not the encoder should insert
      # key frames at scene changes. If not specified, the default is false.
      # This flag should be set to true only when the encoder is being
      # configured to produce a single output video.
      attr_accessor :scene_change_detection

      # @return [H265Complexity] Tells the encoder how to choose its encoding
      # settings.  Quality will provide for a higher compression ratio but at a
      # higher cost and longer compute time.  Speed will produce a relatively
      # larger file but is faster and more economical. The default value is
      # Balanced. Possible values include: 'Speed', 'Balanced', 'Quality'
      attr_accessor :complexity

      # @return [Array<H265Layer>] The collection of output H.265 layers to be
      # produced by the encoder.
      attr_accessor :layers


      #
      # Mapper for H265Video class as Ruby Hash.
      # This will be used for serialization/deserialization.
      #
      def self.mapper()
        {
          client_side_validation: true,
          required: false,
          serialized_name: '#Microsoft.Media.H265Video',
          type: {
            name: 'Composite',
            class_name: 'H265Video',
            model_properties: {
              label: {
                client_side_validation: true,
                required: false,
                serialized_name: 'label',
                type: {
                  name: 'String'
                }
              },
              odatatype: {
                client_side_validation: true,
                required: true,
                serialized_name: '@odata\\.type',
                type: {
                  name: 'String'
                }
              },
              key_frame_interval: {
                client_side_validation: true,
                required: false,
                serialized_name: 'keyFrameInterval',
                type: {
                  name: 'TimeSpan'
                }
              },
              stretch_mode: {
                client_side_validation: true,
                required: false,
                serialized_name: 'stretchMode',
                type: {
                  name: 'String'
                }
              },
              sync_mode: {
                client_side_validation: true,
                required: false,
                serialized_name: 'syncMode',
                type: {
                  name: 'String'
                }
              },
              scene_change_detection: {
                client_side_validation: true,
                required: false,
                serialized_name: 'sceneChangeDetection',
                type: {
                  name: 'Boolean'
                }
              },
              complexity: {
                client_side_validation: true,
                required: false,
                serialized_name: 'complexity',
                type: {
                  name: 'String'
                }
              },
              layers: {
                client_side_validation: true,
                required: false,
                serialized_name: 'layers',
                type: {
                  name: 'Sequence',
                  element: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'H265LayerElementType',
                      type: {
                        name: 'Composite',
                        class_name: 'H265Layer'
                      }
                  }
                }
              }
            }
          }
        }
      end
    end
  end
end
