/* tslint:disable */
/* eslint-disable */
/**
 * Jellyfin API
 * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
 *
 * The version of the OpenAPI document: 10.8.9
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

import { exists, mapValues } from '../runtime';
import type { MediaStreamType } from './MediaStreamType';
import {
    MediaStreamTypeFromJSON,
    MediaStreamTypeFromJSONTyped,
    MediaStreamTypeToJSON,
} from './MediaStreamType';
import type { SubtitleDeliveryMethod } from './SubtitleDeliveryMethod';
import {
    SubtitleDeliveryMethodFromJSON,
    SubtitleDeliveryMethodFromJSONTyped,
    SubtitleDeliveryMethodToJSON,
} from './SubtitleDeliveryMethod';

/**
 * Class MediaStream.
 * @export
 * @interface MediaStream
 */
export interface MediaStream {
    /**
     * Gets or sets the codec.
     * @type {string}
     * @memberof MediaStream
     */
    codec?: string | null;
    /**
     * Gets or sets the codec tag.
     * @type {string}
     * @memberof MediaStream
     */
    codecTag?: string | null;
    /**
     * Gets or sets the language.
     * @type {string}
     * @memberof MediaStream
     */
    language?: string | null;
    /**
     * Gets or sets the color range.
     * @type {string}
     * @memberof MediaStream
     */
    colorRange?: string | null;
    /**
     * Gets or sets the color space.
     * @type {string}
     * @memberof MediaStream
     */
    colorSpace?: string | null;
    /**
     * Gets or sets the color transfer.
     * @type {string}
     * @memberof MediaStream
     */
    colorTransfer?: string | null;
    /**
     * Gets or sets the color primaries.
     * @type {string}
     * @memberof MediaStream
     */
    colorPrimaries?: string | null;
    /**
     * Gets or sets the Dolby Vision version major.
     * @type {number}
     * @memberof MediaStream
     */
    dvVersionMajor?: number | null;
    /**
     * Gets or sets the Dolby Vision version minor.
     * @type {number}
     * @memberof MediaStream
     */
    dvVersionMinor?: number | null;
    /**
     * Gets or sets the Dolby Vision profile.
     * @type {number}
     * @memberof MediaStream
     */
    dvProfile?: number | null;
    /**
     * Gets or sets the Dolby Vision level.
     * @type {number}
     * @memberof MediaStream
     */
    dvLevel?: number | null;
    /**
     * Gets or sets the Dolby Vision rpu present flag.
     * @type {number}
     * @memberof MediaStream
     */
    rpuPresentFlag?: number | null;
    /**
     * Gets or sets the Dolby Vision el present flag.
     * @type {number}
     * @memberof MediaStream
     */
    elPresentFlag?: number | null;
    /**
     * Gets or sets the Dolby Vision bl present flag.
     * @type {number}
     * @memberof MediaStream
     */
    blPresentFlag?: number | null;
    /**
     * Gets or sets the Dolby Vision bl signal compatibility id.
     * @type {number}
     * @memberof MediaStream
     */
    dvBlSignalCompatibilityId?: number | null;
    /**
     * Gets or sets the comment.
     * @type {string}
     * @memberof MediaStream
     */
    comment?: string | null;
    /**
     * Gets or sets the time base.
     * @type {string}
     * @memberof MediaStream
     */
    timeBase?: string | null;
    /**
     * Gets or sets the codec time base.
     * @type {string}
     * @memberof MediaStream
     */
    codecTimeBase?: string | null;
    /**
     * Gets or sets the title.
     * @type {string}
     * @memberof MediaStream
     */
    title?: string | null;
    /**
     * Gets the video range.
     * @type {string}
     * @memberof MediaStream
     */
    readonly videoRange?: string | null;
    /**
     * Gets the video range type.
     * @type {string}
     * @memberof MediaStream
     */
    readonly videoRangeType?: string | null;
    /**
     * Gets the video dovi title.
     * @type {string}
     * @memberof MediaStream
     */
    readonly videoDoViTitle?: string | null;
    /**
     * 
     * @type {string}
     * @memberof MediaStream
     */
    localizedUndefined?: string | null;
    /**
     * 
     * @type {string}
     * @memberof MediaStream
     */
    localizedDefault?: string | null;
    /**
     * 
     * @type {string}
     * @memberof MediaStream
     */
    localizedForced?: string | null;
    /**
     * 
     * @type {string}
     * @memberof MediaStream
     */
    localizedExternal?: string | null;
    /**
     * 
     * @type {string}
     * @memberof MediaStream
     */
    readonly displayTitle?: string | null;
    /**
     * 
     * @type {string}
     * @memberof MediaStream
     */
    nalLengthSize?: string | null;
    /**
     * Gets or sets a value indicating whether this instance is interlaced.
     * @type {boolean}
     * @memberof MediaStream
     */
    isInterlaced?: boolean;
    /**
     * 
     * @type {boolean}
     * @memberof MediaStream
     */
    isAVC?: boolean | null;
    /**
     * Gets or sets the channel layout.
     * @type {string}
     * @memberof MediaStream
     */
    channelLayout?: string | null;
    /**
     * Gets or sets the bit rate.
     * @type {number}
     * @memberof MediaStream
     */
    bitRate?: number | null;
    /**
     * Gets or sets the bit depth.
     * @type {number}
     * @memberof MediaStream
     */
    bitDepth?: number | null;
    /**
     * Gets or sets the reference frames.
     * @type {number}
     * @memberof MediaStream
     */
    refFrames?: number | null;
    /**
     * Gets or sets the length of the packet.
     * @type {number}
     * @memberof MediaStream
     */
    packetLength?: number | null;
    /**
     * Gets or sets the channels.
     * @type {number}
     * @memberof MediaStream
     */
    channels?: number | null;
    /**
     * Gets or sets the sample rate.
     * @type {number}
     * @memberof MediaStream
     */
    sampleRate?: number | null;
    /**
     * Gets or sets a value indicating whether this instance is default.
     * @type {boolean}
     * @memberof MediaStream
     */
    isDefault?: boolean;
    /**
     * Gets or sets a value indicating whether this instance is forced.
     * @type {boolean}
     * @memberof MediaStream
     */
    isForced?: boolean;
    /**
     * Gets or sets the height.
     * @type {number}
     * @memberof MediaStream
     */
    height?: number | null;
    /**
     * Gets or sets the width.
     * @type {number}
     * @memberof MediaStream
     */
    width?: number | null;
    /**
     * Gets or sets the average frame rate.
     * @type {number}
     * @memberof MediaStream
     */
    averageFrameRate?: number | null;
    /**
     * Gets or sets the real frame rate.
     * @type {number}
     * @memberof MediaStream
     */
    realFrameRate?: number | null;
    /**
     * Gets or sets the profile.
     * @type {string}
     * @memberof MediaStream
     */
    profile?: string | null;
    /**
     * 
     * @type {MediaStreamType}
     * @memberof MediaStream
     */
    type?: MediaStreamType;
    /**
     * Gets or sets the aspect ratio.
     * @type {string}
     * @memberof MediaStream
     */
    aspectRatio?: string | null;
    /**
     * Gets or sets the index.
     * @type {number}
     * @memberof MediaStream
     */
    index?: number;
    /**
     * Gets or sets the score.
     * @type {number}
     * @memberof MediaStream
     */
    score?: number | null;
    /**
     * Gets or sets a value indicating whether this instance is external.
     * @type {boolean}
     * @memberof MediaStream
     */
    isExternal?: boolean;
    /**
     * 
     * @type {SubtitleDeliveryMethod}
     * @memberof MediaStream
     */
    deliveryMethod?: SubtitleDeliveryMethod | null;
    /**
     * Gets or sets the delivery URL.
     * @type {string}
     * @memberof MediaStream
     */
    deliveryUrl?: string | null;
    /**
     * Gets or sets a value indicating whether this instance is external URL.
     * @type {boolean}
     * @memberof MediaStream
     */
    isExternalUrl?: boolean | null;
    /**
     * 
     * @type {boolean}
     * @memberof MediaStream
     */
    readonly isTextSubtitleStream?: boolean;
    /**
     * Gets or sets a value indicating whether [supports external stream].
     * @type {boolean}
     * @memberof MediaStream
     */
    supportsExternalStream?: boolean;
    /**
     * Gets or sets the filename.
     * @type {string}
     * @memberof MediaStream
     */
    path?: string | null;
    /**
     * Gets or sets the pixel format.
     * @type {string}
     * @memberof MediaStream
     */
    pixelFormat?: string | null;
    /**
     * Gets or sets the level.
     * @type {number}
     * @memberof MediaStream
     */
    level?: number | null;
    /**
     * Gets or sets whether this instance is anamorphic.
     * @type {boolean}
     * @memberof MediaStream
     */
    isAnamorphic?: boolean | null;
}

/**
 * Check if a given object implements the MediaStream interface.
 */
export function instanceOfMediaStream(value: object): boolean {
    let isInstance = true;

    return isInstance;
}

export function MediaStreamFromJSON(json: any): MediaStream {
    return MediaStreamFromJSONTyped(json, false);
}

export function MediaStreamFromJSONTyped(json: any, ignoreDiscriminator: boolean): MediaStream {
    if ((json === undefined) || (json === null)) {
        return json;
    }
    return {
        
        'codec': !exists(json, 'Codec') ? undefined : json['Codec'],
        'codecTag': !exists(json, 'CodecTag') ? undefined : json['CodecTag'],
        'language': !exists(json, 'Language') ? undefined : json['Language'],
        'colorRange': !exists(json, 'ColorRange') ? undefined : json['ColorRange'],
        'colorSpace': !exists(json, 'ColorSpace') ? undefined : json['ColorSpace'],
        'colorTransfer': !exists(json, 'ColorTransfer') ? undefined : json['ColorTransfer'],
        'colorPrimaries': !exists(json, 'ColorPrimaries') ? undefined : json['ColorPrimaries'],
        'dvVersionMajor': !exists(json, 'DvVersionMajor') ? undefined : json['DvVersionMajor'],
        'dvVersionMinor': !exists(json, 'DvVersionMinor') ? undefined : json['DvVersionMinor'],
        'dvProfile': !exists(json, 'DvProfile') ? undefined : json['DvProfile'],
        'dvLevel': !exists(json, 'DvLevel') ? undefined : json['DvLevel'],
        'rpuPresentFlag': !exists(json, 'RpuPresentFlag') ? undefined : json['RpuPresentFlag'],
        'elPresentFlag': !exists(json, 'ElPresentFlag') ? undefined : json['ElPresentFlag'],
        'blPresentFlag': !exists(json, 'BlPresentFlag') ? undefined : json['BlPresentFlag'],
        'dvBlSignalCompatibilityId': !exists(json, 'DvBlSignalCompatibilityId') ? undefined : json['DvBlSignalCompatibilityId'],
        'comment': !exists(json, 'Comment') ? undefined : json['Comment'],
        'timeBase': !exists(json, 'TimeBase') ? undefined : json['TimeBase'],
        'codecTimeBase': !exists(json, 'CodecTimeBase') ? undefined : json['CodecTimeBase'],
        'title': !exists(json, 'Title') ? undefined : json['Title'],
        'videoRange': !exists(json, 'VideoRange') ? undefined : json['VideoRange'],
        'videoRangeType': !exists(json, 'VideoRangeType') ? undefined : json['VideoRangeType'],
        'videoDoViTitle': !exists(json, 'VideoDoViTitle') ? undefined : json['VideoDoViTitle'],
        'localizedUndefined': !exists(json, 'LocalizedUndefined') ? undefined : json['LocalizedUndefined'],
        'localizedDefault': !exists(json, 'LocalizedDefault') ? undefined : json['LocalizedDefault'],
        'localizedForced': !exists(json, 'LocalizedForced') ? undefined : json['LocalizedForced'],
        'localizedExternal': !exists(json, 'LocalizedExternal') ? undefined : json['LocalizedExternal'],
        'displayTitle': !exists(json, 'DisplayTitle') ? undefined : json['DisplayTitle'],
        'nalLengthSize': !exists(json, 'NalLengthSize') ? undefined : json['NalLengthSize'],
        'isInterlaced': !exists(json, 'IsInterlaced') ? undefined : json['IsInterlaced'],
        'isAVC': !exists(json, 'IsAVC') ? undefined : json['IsAVC'],
        'channelLayout': !exists(json, 'ChannelLayout') ? undefined : json['ChannelLayout'],
        'bitRate': !exists(json, 'BitRate') ? undefined : json['BitRate'],
        'bitDepth': !exists(json, 'BitDepth') ? undefined : json['BitDepth'],
        'refFrames': !exists(json, 'RefFrames') ? undefined : json['RefFrames'],
        'packetLength': !exists(json, 'PacketLength') ? undefined : json['PacketLength'],
        'channels': !exists(json, 'Channels') ? undefined : json['Channels'],
        'sampleRate': !exists(json, 'SampleRate') ? undefined : json['SampleRate'],
        'isDefault': !exists(json, 'IsDefault') ? undefined : json['IsDefault'],
        'isForced': !exists(json, 'IsForced') ? undefined : json['IsForced'],
        'height': !exists(json, 'Height') ? undefined : json['Height'],
        'width': !exists(json, 'Width') ? undefined : json['Width'],
        'averageFrameRate': !exists(json, 'AverageFrameRate') ? undefined : json['AverageFrameRate'],
        'realFrameRate': !exists(json, 'RealFrameRate') ? undefined : json['RealFrameRate'],
        'profile': !exists(json, 'Profile') ? undefined : json['Profile'],
        'type': !exists(json, 'Type') ? undefined : MediaStreamTypeFromJSON(json['Type']),
        'aspectRatio': !exists(json, 'AspectRatio') ? undefined : json['AspectRatio'],
        'index': !exists(json, 'Index') ? undefined : json['Index'],
        'score': !exists(json, 'Score') ? undefined : json['Score'],
        'isExternal': !exists(json, 'IsExternal') ? undefined : json['IsExternal'],
        'deliveryMethod': !exists(json, 'DeliveryMethod') ? undefined : SubtitleDeliveryMethodFromJSON(json['DeliveryMethod']),
        'deliveryUrl': !exists(json, 'DeliveryUrl') ? undefined : json['DeliveryUrl'],
        'isExternalUrl': !exists(json, 'IsExternalUrl') ? undefined : json['IsExternalUrl'],
        'isTextSubtitleStream': !exists(json, 'IsTextSubtitleStream') ? undefined : json['IsTextSubtitleStream'],
        'supportsExternalStream': !exists(json, 'SupportsExternalStream') ? undefined : json['SupportsExternalStream'],
        'path': !exists(json, 'Path') ? undefined : json['Path'],
        'pixelFormat': !exists(json, 'PixelFormat') ? undefined : json['PixelFormat'],
        'level': !exists(json, 'Level') ? undefined : json['Level'],
        'isAnamorphic': !exists(json, 'IsAnamorphic') ? undefined : json['IsAnamorphic'],
    };
}

export function MediaStreamToJSON(value?: MediaStream | null): any {
    if (value === undefined) {
        return undefined;
    }
    if (value === null) {
        return null;
    }
    return {
        
        'Codec': value.codec,
        'CodecTag': value.codecTag,
        'Language': value.language,
        'ColorRange': value.colorRange,
        'ColorSpace': value.colorSpace,
        'ColorTransfer': value.colorTransfer,
        'ColorPrimaries': value.colorPrimaries,
        'DvVersionMajor': value.dvVersionMajor,
        'DvVersionMinor': value.dvVersionMinor,
        'DvProfile': value.dvProfile,
        'DvLevel': value.dvLevel,
        'RpuPresentFlag': value.rpuPresentFlag,
        'ElPresentFlag': value.elPresentFlag,
        'BlPresentFlag': value.blPresentFlag,
        'DvBlSignalCompatibilityId': value.dvBlSignalCompatibilityId,
        'Comment': value.comment,
        'TimeBase': value.timeBase,
        'CodecTimeBase': value.codecTimeBase,
        'Title': value.title,
        'LocalizedUndefined': value.localizedUndefined,
        'LocalizedDefault': value.localizedDefault,
        'LocalizedForced': value.localizedForced,
        'LocalizedExternal': value.localizedExternal,
        'NalLengthSize': value.nalLengthSize,
        'IsInterlaced': value.isInterlaced,
        'IsAVC': value.isAVC,
        'ChannelLayout': value.channelLayout,
        'BitRate': value.bitRate,
        'BitDepth': value.bitDepth,
        'RefFrames': value.refFrames,
        'PacketLength': value.packetLength,
        'Channels': value.channels,
        'SampleRate': value.sampleRate,
        'IsDefault': value.isDefault,
        'IsForced': value.isForced,
        'Height': value.height,
        'Width': value.width,
        'AverageFrameRate': value.averageFrameRate,
        'RealFrameRate': value.realFrameRate,
        'Profile': value.profile,
        'Type': MediaStreamTypeToJSON(value.type),
        'AspectRatio': value.aspectRatio,
        'Index': value.index,
        'Score': value.score,
        'IsExternal': value.isExternal,
        'DeliveryMethod': SubtitleDeliveryMethodToJSON(value.deliveryMethod),
        'DeliveryUrl': value.deliveryUrl,
        'IsExternalUrl': value.isExternalUrl,
        'SupportsExternalStream': value.supportsExternalStream,
        'Path': value.path,
        'PixelFormat': value.pixelFormat,
        'Level': value.level,
        'IsAnamorphic': value.isAnamorphic,
    };
}

