aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Model/Dlna/MediaOptions.cs
blob: 6b26ca94b513329dcc8d20fe4aa86a492e80df13 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
using System;
using MediaBrowser.Model.Dto;

namespace MediaBrowser.Model.Dlna
{
    /// <summary>
    /// Class MediaOptions.
    /// </summary>
    public class MediaOptions
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="MediaOptions"/> class.
        /// </summary>
        public MediaOptions()
        {
            Context = EncodingContext.Streaming;

            EnableDirectPlay = true;
            EnableDirectStream = true;
        }

        /// <summary>
        /// Gets or sets a value indicating whether direct playback is allowed.
        /// </summary>
        public bool EnableDirectPlay { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether direct streaming is allowed.
        /// </summary>
        public bool EnableDirectStream { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether direct playback is forced.
        /// </summary>
        public bool ForceDirectPlay { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether direct streaming is forced.
        /// </summary>
        public bool ForceDirectStream { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether audio stream copy is allowed.
        /// </summary>
        public bool AllowAudioStreamCopy { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether video stream copy is allowed.
        /// </summary>
        public bool AllowVideoStreamCopy { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether always burn in subtitles when transcoding.
        /// </summary>
        public bool AlwaysBurnInSubtitleWhenTranscoding { get; set; }

        /// <summary>
        /// Gets or sets the item id.
        /// </summary>
        public Guid ItemId { get; set; }

        /// <summary>
        /// Gets or sets the media sources.
        /// </summary>
        public MediaSourceInfo[] MediaSources { get; set; } = Array.Empty<MediaSourceInfo>();

        /// <summary>
        /// Gets or sets the device profile.
        /// </summary>
        public required DeviceProfile Profile { get; set; }

        /// <summary>
        /// Gets or sets a media source id. Optional. Only needed if a specific AudioStreamIndex or SubtitleStreamIndex are requested.
        /// </summary>
        public string? MediaSourceId { get; set; }

        /// <summary>
        /// Gets or sets the device id.
        /// </summary>
        public string? DeviceId { get; set; }

        /// <summary>
        /// Gets or sets an override of supported number of audio channels
        /// Example: DeviceProfile supports five channel, but user only has stereo speakers.
        /// </summary>
        public int? MaxAudioChannels { get; set; }

        /// <summary>
        /// Gets or sets the application's configured maximum bitrate.
        /// </summary>
        public int? MaxBitrate { get; set; }

        /// <summary>
        /// Gets or sets the context.
        /// </summary>
        /// <value>The context.</value>
        public EncodingContext Context { get; set; }

        /// <summary>
        /// Gets or sets the audio transcoding bitrate.
        /// </summary>
        /// <value>The audio transcoding bitrate.</value>
        public int? AudioTranscodingBitrate { get; set; }

        /// <summary>
        /// Gets or sets an override for the audio stream index.
        /// </summary>
        public int? AudioStreamIndex { get; set; }

        /// <summary>
        /// Gets or sets an override for the subtitle stream index.
        /// </summary>
        public int? SubtitleStreamIndex { get; set; }

        /// <summary>
        /// Gets the maximum bitrate.
        /// </summary>
        /// <param name="isAudio">Whether or not this is audio.</param>
        /// <returns>System.Nullable&lt;System.Int32&gt;.</returns>
        public int? GetMaxBitrate(bool isAudio)
        {
            if (MaxBitrate.HasValue)
            {
                return MaxBitrate;
            }

            if (Profile is null)
            {
                return null;
            }

            if (Context == EncodingContext.Static)
            {
                if (isAudio && Profile.MaxStaticMusicBitrate.HasValue)
                {
                    return Profile.MaxStaticMusicBitrate;
                }

                return Profile.MaxStaticBitrate;
            }

            return Profile.MaxStreamingBitrate;
        }
    }
}