瀏覽代碼

Merge pull request #2635 from MediaBrowser/dev

Dev
Luke 8 年之前
父節點
當前提交
43d91a392f
共有 29 個文件被更改,包括 140 次插入200 次删除
  1. 2 1
      Emby.Dlna/Didl/DidlBuilder.cs
  2. 1 7
      Emby.Server.Implementations/Data/BaseSqliteRepository.cs
  3. 36 33
      Emby.Server.Implementations/Data/SqliteItemRepository.cs
  4. 0 9
      Emby.Server.Implementations/Dto/DtoService.cs
  5. 0 6
      MediaBrowser.Api/ItemUpdateService.cs
  6. 1 1
      MediaBrowser.Api/Playback/BaseStreamingService.cs
  7. 0 15
      MediaBrowser.Controller/Entities/IHasAwards.cs
  8. 1 3
      MediaBrowser.Controller/Entities/Movies/Movie.cs
  9. 0 1
      MediaBrowser.Controller/MediaBrowser.Controller.csproj
  10. 2 1
      MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
  11. 0 15
      MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs
  12. 0 7
      MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs
  13. 1 1
      MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs
  14. 6 1
      MediaBrowser.Model/Dlna/ConditionProcessor.cs
  15. 2 1
      MediaBrowser.Model/Dlna/ContentFeatureBuilder.cs
  16. 2 2
      MediaBrowser.Model/Dlna/DeviceProfile.cs
  17. 2 1
      MediaBrowser.Model/Dlna/ProfileConditionValue.cs
  18. 9 6
      MediaBrowser.Model/Dlna/StreamBuilder.cs
  19. 0 2
      MediaBrowser.Model/Dto/BaseItemDto.cs
  20. 0 5
      MediaBrowser.Model/Querying/ItemFields.cs
  21. 0 15
      MediaBrowser.Providers/Manager/ProviderUtils.cs
  22. 0 6
      MediaBrowser.Providers/Omdb/OmdbProvider.cs
  23. 42 22
      MediaBrowser.Server.Mac.sln
  24. 14 14
      MediaBrowser.Server.Mac/Emby.Server.Mac.csproj
  25. 17 2
      MediaBrowser.Server.Mac/Main.cs
  26. 1 0
      MediaBrowser.Server.Mac/packages.config
  27. 0 15
      MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs
  28. 0 7
      MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs
  29. 1 1
      SharedVersion.cs

+ 2 - 1
Emby.Dlna/Didl/DidlBuilder.cs

@@ -488,7 +488,8 @@ namespace Emby.Dlna.Didl
             var mediaProfile = _profile.GetAudioMediaProfile(streamInfo.Container,
             var mediaProfile = _profile.GetAudioMediaProfile(streamInfo.Container,
                 streamInfo.TargetAudioCodec,
                 streamInfo.TargetAudioCodec,
                 targetChannels,
                 targetChannels,
-                targetAudioBitrate);
+                targetAudioBitrate,
+                targetSampleRate);
 
 
             var filename = url.Substring(0, url.IndexOf('?'));
             var filename = url.Substring(0, url.IndexOf('?'));
 
 

+ 1 - 7
Emby.Server.Implementations/Data/BaseSqliteRepository.cs

@@ -124,7 +124,7 @@ namespace Emby.Server.Implementations.Data
 
 
                 if (CacheSize.HasValue)
                 if (CacheSize.HasValue)
                 {
                 {
-                    queries.Add("PRAGMA cache_size=-" + CacheSize.Value.ToString(CultureInfo.InvariantCulture));
+                    queries.Add("PRAGMA cache_size=" + CacheSize.Value.ToString(CultureInfo.InvariantCulture));
                 }
                 }
 
 
                 if (EnableTempStoreMemory)
                 if (EnableTempStoreMemory)
@@ -132,12 +132,6 @@ namespace Emby.Server.Implementations.Data
                     queries.Add("PRAGMA temp_store = memory");
                     queries.Add("PRAGMA temp_store = memory");
                 }
                 }
 
 
-                //var cacheSize = CacheSize;
-                //if (cacheSize.HasValue)
-                //{
-
-                //}
-
                 ////foreach (var query in queries)
                 ////foreach (var query in queries)
                 ////{
                 ////{
                 ////    db.Execute(query);
                 ////    db.Execute(query);

+ 36 - 33
Emby.Server.Implementations/Data/SqliteItemRepository.cs

@@ -142,7 +142,7 @@ namespace Emby.Server.Implementations.Data
                    = "create table if not exists mediastreams (ItemId GUID, StreamIndex INT, StreamType TEXT, Codec TEXT, Language TEXT, ChannelLayout TEXT, Profile TEXT, AspectRatio TEXT, Path TEXT, IsInterlaced BIT, BitRate INT NULL, Channels INT NULL, SampleRate INT NULL, IsDefault BIT, IsForced BIT, IsExternal BIT, Height INT NULL, Width INT NULL, AverageFrameRate FLOAT NULL, RealFrameRate FLOAT NULL, Level FLOAT NULL, PixelFormat TEXT, BitDepth INT NULL, IsAnamorphic BIT NULL, RefFrames INT NULL, CodecTag TEXT NULL, Comment TEXT NULL, NalLengthSize TEXT NULL, IsAvc BIT NULL, Title TEXT NULL, TimeBase TEXT NULL, CodecTimeBase TEXT NULL, PRIMARY KEY (ItemId, StreamIndex))";
                    = "create table if not exists mediastreams (ItemId GUID, StreamIndex INT, StreamType TEXT, Codec TEXT, Language TEXT, ChannelLayout TEXT, Profile TEXT, AspectRatio TEXT, Path TEXT, IsInterlaced BIT, BitRate INT NULL, Channels INT NULL, SampleRate INT NULL, IsDefault BIT, IsForced BIT, IsExternal BIT, Height INT NULL, Width INT NULL, AverageFrameRate FLOAT NULL, RealFrameRate FLOAT NULL, Level FLOAT NULL, PixelFormat TEXT, BitDepth INT NULL, IsAnamorphic BIT NULL, RefFrames INT NULL, CodecTag TEXT NULL, Comment TEXT NULL, NalLengthSize TEXT NULL, IsAvc BIT NULL, Title TEXT NULL, TimeBase TEXT NULL, CodecTimeBase TEXT NULL, PRIMARY KEY (ItemId, StreamIndex))";
 
 
                 string[] queries = {
                 string[] queries = {
-                                "PRAGMA locking_mode=NORMAL",
+                                "PRAGMA locking_mode=EXCLUSIVE",
 
 
                                 "create table if not exists TypedBaseItems (guid GUID primary key NOT NULL, type TEXT NOT NULL, data BLOB NULL, ParentId GUID NULL, Path TEXT NULL)",
                                 "create table if not exists TypedBaseItems (guid GUID primary key NOT NULL, type TEXT NOT NULL, data BLOB NULL, ParentId GUID NULL, Path TEXT NULL)",
 
 
@@ -1258,22 +1258,6 @@ namespace Emby.Server.Implementations.Data
         {
         {
             if (_config.Configuration.SkipDeserializationForBasicTypes)
             if (_config.Configuration.SkipDeserializationForBasicTypes)
             {
             {
-                if (type == typeof(MusicGenre))
-                {
-                    return false;
-                }
-                if (type == typeof(GameGenre))
-                {
-                    return false;
-                }
-                if (type == typeof(Genre))
-                {
-                    return false;
-                }
-                if (type == typeof(Studio))
-                {
-                    return false;
-                }
                 if (type == typeof(Person))
                 if (type == typeof(Person))
                 {
                 {
                     return false;
                     return false;
@@ -1282,26 +1266,10 @@ namespace Emby.Server.Implementations.Data
                 {
                 {
                     return false;
                     return false;
                 }
                 }
-                if (type == typeof(ManualCollectionsFolder))
-                {
-                    return false;
-                }
-                if (type == typeof(CameraUploadsFolder))
-                {
-                    return false;
-                }
-                if (type == typeof(PlaylistsFolder))
-                {
-                    return false;
-                }
                 if (type == typeof(UserRootFolder))
                 if (type == typeof(UserRootFolder))
                 {
                 {
                     return false;
                     return false;
                 }
                 }
-                if (type == typeof(PhotoAlbum))
-                {
-                    return false;
-                }
                 if (type == typeof(Season))
                 if (type == typeof(Season))
                 {
                 {
                     return false;
                     return false;
@@ -1312,6 +1280,41 @@ namespace Emby.Server.Implementations.Data
                 }
                 }
             }
             }
 
 
+            if (type == typeof(MusicGenre))
+            {
+                return false;
+            }
+            if (type == typeof(GameGenre))
+            {
+                return false;
+            }
+            if (type == typeof(Genre))
+            {
+                return false;
+            }
+            if (type == typeof(Studio))
+            {
+                return false;
+            }
+
+            if (type == typeof(ManualCollectionsFolder))
+            {
+                return false;
+            }
+            if (type == typeof(CameraUploadsFolder))
+            {
+                return false;
+            }
+            if (type == typeof(PlaylistsFolder))
+            {
+                return false;
+            }
+
+            if (type == typeof(PhotoAlbum))
+            {
+                return false;
+            }
+
             if (type == typeof(Year))
             if (type == typeof(Year))
             {
             {
                 return false;
                 return false;

+ 0 - 9
Emby.Server.Implementations/Dto/DtoService.cs

@@ -883,15 +883,6 @@ namespace Emby.Server.Implementations.Dto
                 dto.AspectRatio = hasAspectRatio.AspectRatio;
                 dto.AspectRatio = hasAspectRatio.AspectRatio;
             }
             }
 
 
-            if (fields.Contains(ItemFields.AwardSummary))
-            {
-                var hasAwards = item as IHasAwards;
-                if (hasAwards != null)
-                {
-                    dto.AwardSummary = hasAwards.AwardSummary;
-                }
-            }
-
             var backdropLimit = options.GetImageLimit(ImageType.Backdrop);
             var backdropLimit = options.GetImageLimit(ImageType.Backdrop);
             if (backdropLimit > 0)
             if (backdropLimit > 0)
             {
             {

+ 0 - 6
MediaBrowser.Api/ItemUpdateService.cs

@@ -335,12 +335,6 @@ namespace MediaBrowser.Api
                 video.Video3DFormat = request.Video3DFormat;
                 video.Video3DFormat = request.Video3DFormat;
             }
             }
 
 
-            var hasAwards = item as IHasAwards;
-            if (hasAwards != null)
-            {
-                hasAwards.AwardSummary = request.AwardSummary;
-            }
-
             var game = item as Game;
             var game = item as Game;
 
 
             if (game != null)
             if (game != null)

+ 1 - 1
MediaBrowser.Api/Playback/BaseStreamingService.cs

@@ -866,7 +866,7 @@ namespace MediaBrowser.Api.Playback
             var videoCodec = state.ActualOutputVideoCodec;
             var videoCodec = state.ActualOutputVideoCodec;
 
 
             var mediaProfile = state.VideoRequest == null ?
             var mediaProfile = state.VideoRequest == null ?
-                profile.GetAudioMediaProfile(state.OutputContainer, audioCodec, state.OutputAudioChannels, state.OutputAudioBitrate) :
+                profile.GetAudioMediaProfile(state.OutputContainer, audioCodec, state.OutputAudioChannels, state.OutputAudioBitrate, state.OutputAudioSampleRate) :
                 profile.GetVideoMediaProfile(state.OutputContainer,
                 profile.GetVideoMediaProfile(state.OutputContainer,
                 audioCodec,
                 audioCodec,
                 videoCodec,
                 videoCodec,

+ 0 - 15
MediaBrowser.Controller/Entities/IHasAwards.cs

@@ -1,15 +0,0 @@
-
-namespace MediaBrowser.Controller.Entities
-{
-    /// <summary>
-    /// Interface IHasAwards
-    /// </summary>
-    public interface IHasAwards
-    {
-        /// <summary>
-        /// Gets or sets the awards summary.
-        /// </summary>
-        /// <value>The awards summary.</value>
-        string AwardSummary { get; set; }
-    }
-}

+ 1 - 3
MediaBrowser.Controller/Entities/Movies/Movie.cs

@@ -17,7 +17,7 @@ namespace MediaBrowser.Controller.Entities.Movies
     /// <summary>
     /// <summary>
     /// Class Movie
     /// Class Movie
     /// </summary>
     /// </summary>
-    public class Movie : Video, IHasSpecialFeatures, IHasTrailers, IHasAwards, IHasLookupInfo<MovieInfo>, ISupportsBoxSetGrouping
+    public class Movie : Video, IHasSpecialFeatures, IHasTrailers, IHasLookupInfo<MovieInfo>, ISupportsBoxSetGrouping
     {
     {
         public List<Guid> SpecialFeatureIds { get; set; }
         public List<Guid> SpecialFeatureIds { get; set; }
 
 
@@ -29,8 +29,6 @@ namespace MediaBrowser.Controller.Entities.Movies
             RemoteTrailerIds = new List<Guid>();
             RemoteTrailerIds = new List<Guid>();
         }
         }
 
 
-        public string AwardSummary { get; set; }
-
         public List<Guid> LocalTrailerIds { get; set; }
         public List<Guid> LocalTrailerIds { get; set; }
         public List<Guid> RemoteTrailerIds { get; set; }
         public List<Guid> RemoteTrailerIds { get; set; }
 
 

+ 0 - 1
MediaBrowser.Controller/MediaBrowser.Controller.csproj

@@ -131,7 +131,6 @@
     <Compile Include="Entities\ItemImageInfo.cs" />
     <Compile Include="Entities\ItemImageInfo.cs" />
     <Compile Include="Entities\LinkedChild.cs" />
     <Compile Include="Entities\LinkedChild.cs" />
     <Compile Include="Entities\MusicVideo.cs" />
     <Compile Include="Entities\MusicVideo.cs" />
-    <Compile Include="Entities\IHasAwards.cs" />
     <Compile Include="Entities\PeopleHelper.cs" />
     <Compile Include="Entities\PeopleHelper.cs" />
     <Compile Include="Entities\Photo.cs" />
     <Compile Include="Entities\Photo.cs" />
     <Compile Include="Entities\PhotoAlbum.cs" />
     <Compile Include="Entities\PhotoAlbum.cs" />

+ 2 - 1
MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs

@@ -1749,7 +1749,8 @@ namespace MediaBrowser.Controller.MediaEncoding
             {
             {
                 if (!string.IsNullOrWhiteSpace(encodingOptions.HardwareAccelerationType))
                 if (!string.IsNullOrWhiteSpace(encodingOptions.HardwareAccelerationType))
                 {
                 {
-                    return "-hwaccel auto";
+                    // causing unpredictable results
+                    //return "-hwaccel auto";
                 }
                 }
 
 
                 if (string.Equals(encodingOptions.HardwareAccelerationType, "qsv", StringComparison.OrdinalIgnoreCase))
                 if (string.Equals(encodingOptions.HardwareAccelerationType, "qsv", StringComparison.OrdinalIgnoreCase))

+ 0 - 15
MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs

@@ -207,21 +207,6 @@ namespace MediaBrowser.LocalMetadata.Parsers
                         break;
                         break;
                     }
                     }
 
 
-                case "AwardSummary":
-                    {
-                        var text = reader.ReadElementContentAsString();
-                        var hasAwards = item as IHasAwards;
-                        if (hasAwards != null)
-                        {
-                            if (!string.IsNullOrWhiteSpace(text))
-                            {
-                                hasAwards.AwardSummary = text;
-                            }
-                        }
-
-                        break;
-                    }
-
                 case "SortTitle":
                 case "SortTitle":
                     {
                     {
                         var val = reader.ReadElementContentAsString();
                         var val = reader.ReadElementContentAsString();

+ 0 - 7
MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs

@@ -35,7 +35,6 @@ namespace MediaBrowser.LocalMetadata.Savers
                     "AspectRatio",
                     "AspectRatio",
                     "AudioDbAlbumId",
                     "AudioDbAlbumId",
                     "AudioDbArtistId",
                     "AudioDbArtistId",
-                    "AwardSummary",
                     "BirthDate",
                     "BirthDate",
                     
                     
                     // Deprecated. No longer saving in this field.
                     // Deprecated. No longer saving in this field.
@@ -403,12 +402,6 @@ namespace MediaBrowser.LocalMetadata.Savers
                 writer.WriteElementString("DisplayOrder", hasDisplayOrder.DisplayOrder);
                 writer.WriteElementString("DisplayOrder", hasDisplayOrder.DisplayOrder);
             }
             }
 
 
-            var hasAwards = item as IHasAwards;
-            if (hasAwards != null && !string.IsNullOrEmpty(hasAwards.AwardSummary))
-            {
-                writer.WriteElementString("AwardSummary", hasAwards.AwardSummary);
-            }
-
             if (item.CommunityRating.HasValue)
             if (item.CommunityRating.HasValue)
             {
             {
                 writer.WriteElementString("Rating", item.CommunityRating.Value.ToString(UsCulture));
                 writer.WriteElementString("Rating", item.CommunityRating.Value.ToString(UsCulture));

+ 1 - 1
MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs

@@ -263,7 +263,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
             var outputContainer = state.Options.OutputContainer;
             var outputContainer = state.Options.OutputContainer;
 
 
             var mediaProfile = state.IsVideoRequest ?
             var mediaProfile = state.IsVideoRequest ?
-                profile.GetAudioMediaProfile(outputContainer, audioCodec, state.OutputAudioChannels, state.OutputAudioBitrate) :
+                profile.GetAudioMediaProfile(outputContainer, audioCodec, state.OutputAudioChannels, state.OutputAudioBitrate, state.OutputAudioSampleRate) :
                 profile.GetVideoMediaProfile(outputContainer,
                 profile.GetVideoMediaProfile(outputContainer,
                 audioCodec,
                 audioCodec,
                 videoCodec,
                 videoCodec,

+ 6 - 1
MediaBrowser.Model/Dlna/ConditionProcessor.cs

@@ -76,7 +76,7 @@ namespace MediaBrowser.Model.Dlna
             }
             }
         }
         }
 
 
-        public bool IsAudioConditionSatisfied(ProfileCondition condition, int? audioChannels, int? audioBitrate)
+        public bool IsAudioConditionSatisfied(ProfileCondition condition, int? audioChannels, int? audioBitrate, int? audioSampleRate)
         {
         {
             switch (condition.Property)
             switch (condition.Property)
             {
             {
@@ -84,6 +84,8 @@ namespace MediaBrowser.Model.Dlna
                     return IsConditionSatisfied(condition, audioBitrate);
                     return IsConditionSatisfied(condition, audioBitrate);
                 case ProfileConditionValue.AudioChannels:
                 case ProfileConditionValue.AudioChannels:
                     return IsConditionSatisfied(condition, audioChannels);
                     return IsConditionSatisfied(condition, audioChannels);
+                case ProfileConditionValue.AudioSampleRate:
+                    return IsConditionSatisfied(condition, audioSampleRate);
                 default:
                 default:
                     throw new ArgumentException("Unexpected condition on audio file: " + condition.Property);
                     throw new ArgumentException("Unexpected condition on audio file: " + condition.Property);
             }
             }
@@ -92,6 +94,7 @@ namespace MediaBrowser.Model.Dlna
         public bool IsVideoAudioConditionSatisfied(ProfileCondition condition,
         public bool IsVideoAudioConditionSatisfied(ProfileCondition condition,
             int? audioChannels,
             int? audioChannels,
             int? audioBitrate,
             int? audioBitrate,
+            int? audioSampleRate,
             string audioProfile,
             string audioProfile,
             bool? isSecondaryTrack)
             bool? isSecondaryTrack)
         {
         {
@@ -105,6 +108,8 @@ namespace MediaBrowser.Model.Dlna
                     return IsConditionSatisfied(condition, audioChannels);
                     return IsConditionSatisfied(condition, audioChannels);
                 case ProfileConditionValue.IsSecondaryAudio:
                 case ProfileConditionValue.IsSecondaryAudio:
                     return IsConditionSatisfied(condition, isSecondaryTrack);
                     return IsConditionSatisfied(condition, isSecondaryTrack);
+                case ProfileConditionValue.AudioSampleRate:
+                    return IsConditionSatisfied(condition, audioSampleRate);
                 default:
                 default:
                     throw new ArgumentException("Unexpected condition on audio file: " + condition.Property);
                     throw new ArgumentException("Unexpected condition on audio file: " + condition.Property);
             }
             }

+ 2 - 1
MediaBrowser.Model/Dlna/ContentFeatureBuilder.cs

@@ -85,7 +85,8 @@ namespace MediaBrowser.Model.Dlna
             ResponseProfile mediaProfile = _profile.GetAudioMediaProfile(container,
             ResponseProfile mediaProfile = _profile.GetAudioMediaProfile(container,
                 audioCodec,
                 audioCodec,
                 audioChannels,
                 audioChannels,
-                audioBitrate);
+                audioBitrate,
+                audioSampleRate);
 
 
             string orgPn = mediaProfile == null ? null : mediaProfile.OrgPn;
             string orgPn = mediaProfile == null ? null : mediaProfile.OrgPn;
 
 

+ 2 - 2
MediaBrowser.Model/Dlna/DeviceProfile.cs

@@ -185,7 +185,7 @@ namespace MediaBrowser.Model.Dlna
             return null;
             return null;
         }
         }
 
 
-        public ResponseProfile GetAudioMediaProfile(string container, string audioCodec, int? audioChannels, int? audioBitrate)
+        public ResponseProfile GetAudioMediaProfile(string container, string audioCodec, int? audioChannels, int? audioBitrate, int? audioSampleRate)
         {
         {
             container = StringHelper.TrimStart(container ?? string.Empty, '.');
             container = StringHelper.TrimStart(container ?? string.Empty, '.');
 
 
@@ -213,7 +213,7 @@ namespace MediaBrowser.Model.Dlna
                 var anyOff = false;
                 var anyOff = false;
                 foreach (ProfileCondition c in i.Conditions)
                 foreach (ProfileCondition c in i.Conditions)
                 {
                 {
-                    if (!conditionProcessor.IsAudioConditionSatisfied(GetModelProfileCondition(c), audioChannels, audioBitrate))
+                    if (!conditionProcessor.IsAudioConditionSatisfied(GetModelProfileCondition(c), audioChannels, audioBitrate, audioSampleRate))
                     {
                     {
                         anyOff = true;
                         anyOff = true;
                         break;
                         break;

+ 2 - 1
MediaBrowser.Model/Dlna/ProfileConditionValue.cs

@@ -22,6 +22,7 @@
         IsSecondaryAudio = 18,
         IsSecondaryAudio = 18,
         VideoCodecTag = 19,
         VideoCodecTag = 19,
         IsAvc = 20,
         IsAvc = 20,
-        IsInterlaced = 21
+        IsInterlaced = 21,
+        AudioSampleRate = 22
     }
     }
 }
 }

+ 9 - 6
MediaBrowser.Model/Dlna/StreamBuilder.cs

@@ -139,6 +139,7 @@ namespace MediaBrowser.Model.Dlna
 
 
             int? inputAudioChannels = audioStream == null ? null : audioStream.Channels;
             int? inputAudioChannels = audioStream == null ? null : audioStream.Channels;
             int? inputAudioBitrate = audioStream == null ? null : audioStream.BitDepth;
             int? inputAudioBitrate = audioStream == null ? null : audioStream.BitDepth;
+            int? inputAudioSampleRate = audioStream == null ? null : audioStream.SampleRate;
 
 
             if (directPlayMethods.Count > 0)
             if (directPlayMethods.Count > 0)
             {
             {
@@ -155,7 +156,7 @@ namespace MediaBrowser.Model.Dlna
                             bool applyConditions = true;
                             bool applyConditions = true;
                             foreach (ProfileCondition applyCondition in i.ApplyConditions)
                             foreach (ProfileCondition applyCondition in i.ApplyConditions)
                             {
                             {
-                                if (!conditionProcessor.IsAudioConditionSatisfied(applyCondition, inputAudioChannels, inputAudioBitrate))
+                                if (!conditionProcessor.IsAudioConditionSatisfied(applyCondition, inputAudioChannels, inputAudioBitrate, inputAudioSampleRate))
                                 {
                                 {
                                     LogConditionFailure(options.Profile, "AudioCodecProfile", applyCondition, item);
                                     LogConditionFailure(options.Profile, "AudioCodecProfile", applyCondition, item);
                                     applyConditions = false;
                                     applyConditions = false;
@@ -176,7 +177,7 @@ namespace MediaBrowser.Model.Dlna
                     bool all = true;
                     bool all = true;
                     foreach (ProfileCondition c in conditions)
                     foreach (ProfileCondition c in conditions)
                     {
                     {
-                        if (!conditionProcessor.IsAudioConditionSatisfied(c, inputAudioChannels, inputAudioBitrate))
+                        if (!conditionProcessor.IsAudioConditionSatisfied(c, inputAudioChannels, inputAudioBitrate, inputAudioSampleRate))
                         {
                         {
                             LogConditionFailure(options.Profile, "AudioCodecProfile", c, item);
                             LogConditionFailure(options.Profile, "AudioCodecProfile", c, item);
                             all = false;
                             all = false;
@@ -251,7 +252,7 @@ namespace MediaBrowser.Model.Dlna
                     bool applyConditions = true;
                     bool applyConditions = true;
                     foreach (ProfileCondition applyCondition in i.ApplyConditions)
                     foreach (ProfileCondition applyCondition in i.ApplyConditions)
                     {
                     {
-                        if (!conditionProcessor.IsAudioConditionSatisfied(applyCondition, inputAudioChannels, inputAudioBitrate))
+                        if (!conditionProcessor.IsAudioConditionSatisfied(applyCondition, inputAudioChannels, inputAudioBitrate, inputAudioSampleRate))
                         {
                         {
                             LogConditionFailure(options.Profile, "AudioCodecProfile", applyCondition, item);
                             LogConditionFailure(options.Profile, "AudioCodecProfile", applyCondition, item);
                             applyConditions = false;
                             applyConditions = false;
@@ -519,8 +520,9 @@ namespace MediaBrowser.Model.Dlna
                             int? inputAudioBitrate = audioStream == null ? null : audioStream.BitRate;
                             int? inputAudioBitrate = audioStream == null ? null : audioStream.BitRate;
                             int? audioChannels = audioStream == null ? null : audioStream.Channels;
                             int? audioChannels = audioStream == null ? null : audioStream.Channels;
                             string audioProfile = audioStream == null ? null : audioStream.Profile;
                             string audioProfile = audioStream == null ? null : audioStream.Profile;
+                            int? inputAudioSampleRate = audioStream == null ? null : audioStream.SampleRate;
 
 
-                            if (!conditionProcessor.IsVideoAudioConditionSatisfied(applyCondition, audioChannels, inputAudioBitrate, audioProfile, isSecondaryAudio))
+                            if (!conditionProcessor.IsVideoAudioConditionSatisfied(applyCondition, audioChannels, inputAudioBitrate, inputAudioSampleRate, audioProfile, isSecondaryAudio))
                             {
                             {
                                 LogConditionFailure(options.Profile, "AudioCodecProfile", applyCondition, item);
                                 LogConditionFailure(options.Profile, "AudioCodecProfile", applyCondition, item);
                                 applyConditions = false;
                                 applyConditions = false;
@@ -752,6 +754,7 @@ namespace MediaBrowser.Model.Dlna
             int? audioBitrate = audioStream == null ? null : audioStream.BitRate;
             int? audioBitrate = audioStream == null ? null : audioStream.BitRate;
             int? audioChannels = audioStream == null ? null : audioStream.Channels;
             int? audioChannels = audioStream == null ? null : audioStream.Channels;
             string audioProfile = audioStream == null ? null : audioStream.Profile;
             string audioProfile = audioStream == null ? null : audioStream.Profile;
+            int? audioSampleRate = audioStream == null ? null : audioStream.SampleRate;
 
 
             TransportStreamTimestamp? timestamp = videoStream == null ? TransportStreamTimestamp.None : mediaSource.Timestamp;
             TransportStreamTimestamp? timestamp = videoStream == null ? TransportStreamTimestamp.None : mediaSource.Timestamp;
             int? packetLength = videoStream == null ? null : videoStream.PacketLength;
             int? packetLength = videoStream == null ? null : videoStream.PacketLength;
@@ -841,7 +844,7 @@ namespace MediaBrowser.Model.Dlna
                         bool applyConditions = true;
                         bool applyConditions = true;
                         foreach (ProfileCondition applyCondition in i.ApplyConditions)
                         foreach (ProfileCondition applyCondition in i.ApplyConditions)
                         {
                         {
-                            if (!conditionProcessor.IsVideoAudioConditionSatisfied(applyCondition, audioChannels, audioBitrate, audioProfile, isSecondaryAudio))
+                            if (!conditionProcessor.IsVideoAudioConditionSatisfied(applyCondition, audioChannels, audioBitrate, audioSampleRate, audioProfile, isSecondaryAudio))
                             {
                             {
                                 LogConditionFailure(profile, "VideoAudioCodecProfile", applyCondition, mediaSource);
                                 LogConditionFailure(profile, "VideoAudioCodecProfile", applyCondition, mediaSource);
                                 applyConditions = false;
                                 applyConditions = false;
@@ -861,7 +864,7 @@ namespace MediaBrowser.Model.Dlna
 
 
                 foreach (ProfileCondition i in conditions)
                 foreach (ProfileCondition i in conditions)
                 {
                 {
-                    if (!conditionProcessor.IsVideoAudioConditionSatisfied(i, audioChannels, audioBitrate, audioProfile, isSecondaryAudio))
+                    if (!conditionProcessor.IsVideoAudioConditionSatisfied(i, audioChannels, audioBitrate, audioSampleRate, audioProfile, isSecondaryAudio))
                     {
                     {
                         LogConditionFailure(profile, "VideoAudioCodecProfile", i, mediaSource);
                         LogConditionFailure(profile, "VideoAudioCodecProfile", i, mediaSource);
 
 

+ 0 - 2
MediaBrowser.Model/Dto/BaseItemDto.cs

@@ -79,8 +79,6 @@ namespace MediaBrowser.Model.Dto
         public string PreferredMetadataLanguage { get; set; }
         public string PreferredMetadataLanguage { get; set; }
         public string PreferredMetadataCountryCode { get; set; }
         public string PreferredMetadataCountryCode { get; set; }
 
 
-        public string AwardSummary { get; set; }
-
         /// <summary>
         /// <summary>
         /// Gets or sets a value indicating whether [supports synchronize].
         /// Gets or sets a value indicating whether [supports synchronize].
         /// </summary>
         /// </summary>

+ 0 - 5
MediaBrowser.Model/Querying/ItemFields.cs

@@ -15,11 +15,6 @@
         /// </summary>
         /// </summary>
         AlternateEpisodeNumbers,
         AlternateEpisodeNumbers,
 
 
-        /// <summary>
-        /// The awards summary
-        /// </summary>
-        AwardSummary,
-
         /// <summary>
         /// <summary>
         /// The can delete
         /// The can delete
         /// </summary>
         /// </summary>

+ 0 - 15
MediaBrowser.Providers/Manager/ProviderUtils.cs

@@ -198,7 +198,6 @@ namespace MediaBrowser.Providers.Manager
 
 
             MergeAlbumArtist(source, target, lockedFields, replaceData);
             MergeAlbumArtist(source, target, lockedFields, replaceData);
             MergeCriticRating(source, target, lockedFields, replaceData);
             MergeCriticRating(source, target, lockedFields, replaceData);
-            MergeAwards(source, target, lockedFields, replaceData);
             MergeTrailers(source, target, lockedFields, replaceData);
             MergeTrailers(source, target, lockedFields, replaceData);
             MergeVideoInfo(source, target, lockedFields, replaceData);
             MergeVideoInfo(source, target, lockedFields, replaceData);
 
 
@@ -273,20 +272,6 @@ namespace MediaBrowser.Providers.Manager
             }
             }
         }
         }
 
 
-        private static void MergeAwards(BaseItem source, BaseItem target, List<MetadataFields> lockedFields, bool replaceData)
-        {
-            var sourceCast = source as IHasAwards;
-            var targetCast = target as IHasAwards;
-
-            if (sourceCast != null && targetCast != null)
-            {
-                if (replaceData || string.IsNullOrEmpty(targetCast.AwardSummary))
-                {
-                    targetCast.AwardSummary = sourceCast.AwardSummary;
-                }
-            }
-        }
-
         private static void MergeCriticRating(BaseItem source, BaseItem target, List<MetadataFields> lockedFields, bool replaceData)
         private static void MergeCriticRating(BaseItem source, BaseItem target, List<MetadataFields> lockedFields, bool replaceData)
         {
         {
             if (replaceData || !target.CriticRating.HasValue)
             if (replaceData || !target.CriticRating.HasValue)

+ 0 - 6
MediaBrowser.Providers/Omdb/OmdbProvider.cs

@@ -406,12 +406,6 @@ namespace MediaBrowser.Providers.Omdb
                 }
                 }
             }
             }
 
 
-            var hasAwards = item as IHasAwards;
-            if (hasAwards != null && !string.IsNullOrEmpty(result.Awards))
-            {
-                hasAwards.AwardSummary = WebUtility.HtmlDecode(result.Awards);
-            }
-
             if (isConfiguredForEnglish)
             if (isConfiguredForEnglish)
             {
             {
                 // Omdb is currently english only, so for other languages skip this and let secondary providers fill it in
                 // Omdb is currently english only, so for other languages skip this and let secondary providers fill it in

+ 42 - 22
MediaBrowser.Server.Mac.sln

@@ -37,8 +37,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DvdLib", "DvdLib\DvdLib.csp
 EndProject
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Emby.Dlna", "Emby.Dlna\Emby.Dlna.csproj", "{805844AB-E92F-45E6-9D99-4F6D48D129A5}"
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Emby.Dlna", "Emby.Dlna\Emby.Dlna.csproj", "{805844AB-E92F-45E6-9D99-4F6D48D129A5}"
 EndProject
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Emby.Drawing.Net", "Emby.Drawing.Net\Emby.Drawing.Net.csproj", "{C97A239E-A96C-4D64-A844-CCF8CC30AECB}"
-EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Emby.Photos", "Emby.Photos\Emby.Photos.csproj", "{89AB4548-770D-41FD-A891-8DAFF44F452C}"
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Emby.Photos", "Emby.Photos\Emby.Photos.csproj", "{89AB4548-770D-41FD-A891-8DAFF44F452C}"
 EndProject
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Emby.Server.Implementations", "Emby.Server.Implementations\Emby.Server.Implementations.csproj", "{E383961B-9356-4D5D-8233-9A1079D03055}"
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Emby.Server.Implementations", "Emby.Server.Implementations\Emby.Server.Implementations.csproj", "{E383961B-9356-4D5D-8233-9A1079D03055}"
@@ -47,6 +45,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RSSDP", "RSSDP\RSSDP.csproj
 EndProject
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SocketHttpListener.Portable", "SocketHttpListener.Portable\SocketHttpListener.Portable.csproj", "{4F26D5D8-A7B0-42B3-BA42-7CB7D245934E}"
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SocketHttpListener.Portable", "SocketHttpListener.Portable\SocketHttpListener.Portable.csproj", "{4F26D5D8-A7B0-42B3-BA42-7CB7D245934E}"
 EndProject
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Emby.Drawing.Skia", "Emby.Drawing.Skia\Emby.Drawing.Skia.csproj", "{2312DA6D-FF86-4597-9777-BCEEC32D96DD}"
+EndProject
 Global
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		AppStore|Any CPU = AppStore|Any CPU
 		AppStore|Any CPU = AppStore|Any CPU
@@ -398,26 +398,6 @@ Global
 		{805844AB-E92F-45E6-9D99-4F6D48D129A5}.Signed|Any CPU.Build.0 = Release|Any CPU
 		{805844AB-E92F-45E6-9D99-4F6D48D129A5}.Signed|Any CPU.Build.0 = Release|Any CPU
 		{805844AB-E92F-45E6-9D99-4F6D48D129A5}.Signed|x86.ActiveCfg = Release|Any CPU
 		{805844AB-E92F-45E6-9D99-4F6D48D129A5}.Signed|x86.ActiveCfg = Release|Any CPU
 		{805844AB-E92F-45E6-9D99-4F6D48D129A5}.Signed|x86.Build.0 = Release|Any CPU
 		{805844AB-E92F-45E6-9D99-4F6D48D129A5}.Signed|x86.Build.0 = Release|Any CPU
-		{C97A239E-A96C-4D64-A844-CCF8CC30AECB}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
-		{C97A239E-A96C-4D64-A844-CCF8CC30AECB}.AppStore|Any CPU.Build.0 = Release|Any CPU
-		{C97A239E-A96C-4D64-A844-CCF8CC30AECB}.AppStore|x86.ActiveCfg = Release|Any CPU
-		{C97A239E-A96C-4D64-A844-CCF8CC30AECB}.AppStore|x86.Build.0 = Release|Any CPU
-		{C97A239E-A96C-4D64-A844-CCF8CC30AECB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{C97A239E-A96C-4D64-A844-CCF8CC30AECB}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{C97A239E-A96C-4D64-A844-CCF8CC30AECB}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{C97A239E-A96C-4D64-A844-CCF8CC30AECB}.Debug|x86.Build.0 = Debug|Any CPU
-		{C97A239E-A96C-4D64-A844-CCF8CC30AECB}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU
-		{C97A239E-A96C-4D64-A844-CCF8CC30AECB}.Release Mono|Any CPU.Build.0 = Release|Any CPU
-		{C97A239E-A96C-4D64-A844-CCF8CC30AECB}.Release Mono|x86.ActiveCfg = Release|Any CPU
-		{C97A239E-A96C-4D64-A844-CCF8CC30AECB}.Release Mono|x86.Build.0 = Release|Any CPU
-		{C97A239E-A96C-4D64-A844-CCF8CC30AECB}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{C97A239E-A96C-4D64-A844-CCF8CC30AECB}.Release|Any CPU.Build.0 = Release|Any CPU
-		{C97A239E-A96C-4D64-A844-CCF8CC30AECB}.Release|x86.ActiveCfg = Release|Any CPU
-		{C97A239E-A96C-4D64-A844-CCF8CC30AECB}.Release|x86.Build.0 = Release|Any CPU
-		{C97A239E-A96C-4D64-A844-CCF8CC30AECB}.Signed|Any CPU.ActiveCfg = Release|Any CPU
-		{C97A239E-A96C-4D64-A844-CCF8CC30AECB}.Signed|Any CPU.Build.0 = Release|Any CPU
-		{C97A239E-A96C-4D64-A844-CCF8CC30AECB}.Signed|x86.ActiveCfg = Release|Any CPU
-		{C97A239E-A96C-4D64-A844-CCF8CC30AECB}.Signed|x86.Build.0 = Release|Any CPU
 		{89AB4548-770D-41FD-A891-8DAFF44F452C}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
 		{89AB4548-770D-41FD-A891-8DAFF44F452C}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
 		{89AB4548-770D-41FD-A891-8DAFF44F452C}.AppStore|Any CPU.Build.0 = Release|Any CPU
 		{89AB4548-770D-41FD-A891-8DAFF44F452C}.AppStore|Any CPU.Build.0 = Release|Any CPU
 		{89AB4548-770D-41FD-A891-8DAFF44F452C}.AppStore|x86.ActiveCfg = Release|Any CPU
 		{89AB4548-770D-41FD-A891-8DAFF44F452C}.AppStore|x86.ActiveCfg = Release|Any CPU
@@ -498,6 +478,46 @@ Global
 		{4F26D5D8-A7B0-42B3-BA42-7CB7D245934E}.Signed|Any CPU.Build.0 = Release|Any CPU
 		{4F26D5D8-A7B0-42B3-BA42-7CB7D245934E}.Signed|Any CPU.Build.0 = Release|Any CPU
 		{4F26D5D8-A7B0-42B3-BA42-7CB7D245934E}.Signed|x86.ActiveCfg = Release|Any CPU
 		{4F26D5D8-A7B0-42B3-BA42-7CB7D245934E}.Signed|x86.ActiveCfg = Release|Any CPU
 		{4F26D5D8-A7B0-42B3-BA42-7CB7D245934E}.Signed|x86.Build.0 = Release|Any CPU
 		{4F26D5D8-A7B0-42B3-BA42-7CB7D245934E}.Signed|x86.Build.0 = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Debug|Win32.ActiveCfg = Debug|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Debug|Win32.Build.0 = Debug|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Debug|x64.Build.0 = Debug|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Debug|x86.Build.0 = Debug|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Release Mono|Any CPU.Build.0 = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Release Mono|Win32.ActiveCfg = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Release Mono|Win32.Build.0 = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Release Mono|x64.ActiveCfg = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Release Mono|x64.Build.0 = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Release Mono|x86.ActiveCfg = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Release Mono|x86.Build.0 = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Release|Any CPU.Build.0 = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Release|Win32.ActiveCfg = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Release|Win32.Build.0 = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Release|x64.ActiveCfg = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Release|x64.Build.0 = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Release|x86.ActiveCfg = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Release|x86.Build.0 = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Signed|Any CPU.ActiveCfg = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Signed|Any CPU.Build.0 = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Signed|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Signed|Mixed Platforms.Build.0 = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Signed|Win32.ActiveCfg = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Signed|Win32.Build.0 = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Signed|x64.ActiveCfg = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Signed|x64.Build.0 = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Signed|x86.ActiveCfg = Release|Any CPU
+		{2312DA6D-FF86-4597-9777-BCEEC32D96DD}.Signed|x86.Build.0 = Release|Any CPU
 	EndGlobalSection
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
 		HideSolutionNode = FALSE

+ 14 - 14
MediaBrowser.Server.Mac/Emby.Server.Mac.csproj

@@ -121,6 +121,9 @@
     <Reference Include="TagLib.Portable">
     <Reference Include="TagLib.Portable">
       <HintPath>..\ThirdParty\taglib\TagLib.Portable.dll</HintPath>
       <HintPath>..\ThirdParty\taglib\TagLib.Portable.dll</HintPath>
     </Reference>
     </Reference>
+    <Reference Include="SkiaSharp">
+      <HintPath>..\packages\SkiaSharp.1.57.1\lib\net45\SkiaSharp.dll</HintPath>
+    </Reference>
     <Reference Include="SQLitePCLRaw.core">
     <Reference Include="SQLitePCLRaw.core">
       <HintPath>..\packages\SQLitePCLRaw.core.1.1.5\lib\net45\SQLitePCLRaw.core.dll</HintPath>
       <HintPath>..\packages\SQLitePCLRaw.core.1.1.5\lib\net45\SQLitePCLRaw.core.dll</HintPath>
     </Reference>
     </Reference>
@@ -221,13 +224,9 @@
       <Project>{89AB4548-770D-41FD-A891-8DAFF44F452C}</Project>
       <Project>{89AB4548-770D-41FD-A891-8DAFF44F452C}</Project>
       <Name>Emby.Photos</Name>
       <Name>Emby.Photos</Name>
     </ProjectReference>
     </ProjectReference>
-    <ProjectReference Include="..\Emby.Drawing.Net\Emby.Drawing.Net.csproj">
-      <Project>{C97A239E-A96C-4D64-A844-CCF8CC30AECB}</Project>
-      <Name>Emby.Drawing.Net</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Emby.Drawing.ImageMagick\Emby.Drawing.ImageMagick.csproj">
-      <Project>{6CFEE013-6E7C-432B-AC37-CABF0880C69A}</Project>
-      <Name>Emby.Drawing.ImageMagick</Name>
+    <ProjectReference Include="..\Emby.Drawing.Skia\Emby.Drawing.Skia.csproj">
+      <Project>{2312da6d-ff86-4597-9777-bceec32d96dd}</Project>
+      <Name>Emby.Drawing.Skia</Name>
     </ProjectReference>
     </ProjectReference>
     <ProjectReference Include="..\Emby.Drawing\Emby.Drawing.csproj">
     <ProjectReference Include="..\Emby.Drawing\Emby.Drawing.csproj">
       <Project>{08FFF49B-F175-4807-A2B5-73B0EBD9F716}</Project>
       <Project>{08FFF49B-F175-4807-A2B5-73B0EBD9F716}</Project>
@@ -923,12 +922,6 @@
     <BundleResource Include="..\MediaBrowser.WebDashboard\dashboard-ui\bower_components\emby-webcomponents\emby-textarea\emby-textarea.js">
     <BundleResource Include="..\MediaBrowser.WebDashboard\dashboard-ui\bower_components\emby-webcomponents\emby-textarea\emby-textarea.js">
       <Link>Resources\dashboard-ui\bower_components\emby-webcomponents\emby-textarea\emby-textarea.js</Link>
       <Link>Resources\dashboard-ui\bower_components\emby-webcomponents\emby-textarea\emby-textarea.js</Link>
     </BundleResource>
     </BundleResource>
-    <BundleResource Include="..\MediaBrowser.WebDashboard\dashboard-ui\bower_components\emby-webcomponents\emby-toggle\emby-toggle.css">
-      <Link>Resources\dashboard-ui\bower_components\emby-webcomponents\emby-toggle\emby-toggle.css</Link>
-    </BundleResource>
-    <BundleResource Include="..\MediaBrowser.WebDashboard\dashboard-ui\bower_components\emby-webcomponents\emby-toggle\emby-toggle.js">
-      <Link>Resources\dashboard-ui\bower_components\emby-webcomponents\emby-toggle\emby-toggle.js</Link>
-    </BundleResource>
     <BundleResource Include="..\MediaBrowser.WebDashboard\dashboard-ui\bower_components\emby-webcomponents\fonts\material-icons\2fcryfnatjcs6g4u3t-y5ewrjpiaoeww8aihgqwrjao.woff">
     <BundleResource Include="..\MediaBrowser.WebDashboard\dashboard-ui\bower_components\emby-webcomponents\fonts\material-icons\2fcryfnatjcs6g4u3t-y5ewrjpiaoeww8aihgqwrjao.woff">
       <Link>Resources\dashboard-ui\bower_components\emby-webcomponents\fonts\material-icons\2fcryfnatjcs6g4u3t-y5ewrjpiaoeww8aihgqwrjao.woff</Link>
       <Link>Resources\dashboard-ui\bower_components\emby-webcomponents\fonts\material-icons\2fcryfnatjcs6g4u3t-y5ewrjpiaoeww8aihgqwrjao.woff</Link>
     </BundleResource>
     </BundleResource>
@@ -1040,6 +1033,9 @@
     <BundleResource Include="..\MediaBrowser.WebDashboard\dashboard-ui\bower_components\emby-webcomponents\lazyloader\lazyloader-intersectionobserver.js">
     <BundleResource Include="..\MediaBrowser.WebDashboard\dashboard-ui\bower_components\emby-webcomponents\lazyloader\lazyloader-intersectionobserver.js">
       <Link>Resources\dashboard-ui\bower_components\emby-webcomponents\lazyloader\lazyloader-intersectionobserver.js</Link>
       <Link>Resources\dashboard-ui\bower_components\emby-webcomponents\lazyloader\lazyloader-intersectionobserver.js</Link>
     </BundleResource>
     </BundleResource>
+    <BundleResource Include="..\MediaBrowser.WebDashboard\dashboard-ui\bower_components\emby-webcomponents\lazyloader\lazyedgehack.css">
+      <Link>Resources\dashboard-ui\bower_components\emby-webcomponents\lazyloader\lazyedgehack.css</Link>
+    </BundleResource>
     <BundleResource Include="..\MediaBrowser.WebDashboard\dashboard-ui\bower_components\emby-webcomponents\lazyloader\lazyloader-scroll.js">
     <BundleResource Include="..\MediaBrowser.WebDashboard\dashboard-ui\bower_components\emby-webcomponents\lazyloader\lazyloader-scroll.js">
       <Link>Resources\dashboard-ui\bower_components\emby-webcomponents\lazyloader\lazyloader-scroll.js</Link>
       <Link>Resources\dashboard-ui\bower_components\emby-webcomponents\lazyloader\lazyloader-scroll.js</Link>
     </BundleResource>
     </BundleResource>
@@ -2704,7 +2700,7 @@
     </BundleResource>
     </BundleResource>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
-    <NativeReference Include="..\ThirdParty\SQLite3\osx\libsqlite3.0.dylib">
+    <NativeReference Include="..\packages\SkiaSharp.1.57.1\runtimes\osx\native\libSkiaSharp.dylib">
       <Kind>Dynamic</Kind>
       <Kind>Dynamic</Kind>
       <SmartLink>False</SmartLink>
       <SmartLink>False</SmartLink>
     </NativeReference>
     </NativeReference>
@@ -2712,5 +2708,9 @@
       <Kind>Dynamic</Kind>
       <Kind>Dynamic</Kind>
       <SmartLink>False</SmartLink>
       <SmartLink>False</SmartLink>
     </NativeReference>
     </NativeReference>
+    <NativeReference Include="..\ThirdParty\SQLite3\osx\libsqlite3.0.dylib">
+      <Kind>Dynamic</Kind>
+      <SmartLink>False</SmartLink>
+    </NativeReference>
   </ItemGroup>
   </ItemGroup>
 </Project>
 </Project>

+ 17 - 2
MediaBrowser.Server.Mac/Main.cs

@@ -32,7 +32,10 @@ using Mono.Unix.Native;
 using MediaBrowser.Model.System;
 using MediaBrowser.Model.System;
 using MediaBrowser.Model.IO;
 using MediaBrowser.Model.IO;
 using Emby.Server.Core.Logging;
 using Emby.Server.Core.Logging;
-using Emby.Drawing.Net;
+using Emby.Drawing;
+using Emby.Drawing.Skia;
+using MediaBrowser.Controller.Drawing;
+using MediaBrowser.Model.Drawing;
 
 
 namespace MediaBrowser.Server.Mac
 namespace MediaBrowser.Server.Mac
 {
 {
@@ -112,7 +115,7 @@ namespace MediaBrowser.Server.Mac
 
 
 			_fileSystem = fileSystem;
 			_fileSystem = fileSystem;
 
 
-			var imageEncoder = new GDIImageEncoder(fileSystem, logManager.GetLogger("GDI"));
+			var imageEncoder = GetImageEncoder(appPaths, fileSystem, logManager);
 
 
 			AppHost = new MacAppHost(appPaths,
 			AppHost = new MacAppHost(appPaths,
 									 logManager,
 									 logManager,
@@ -138,6 +141,18 @@ namespace MediaBrowser.Server.Mac
 			Task.Run (() => StartServer(CancellationToken.None));
 			Task.Run (() => StartServer(CancellationToken.None));
         }
         }
 
 
+	    private static IImageEncoder GetImageEncoder(ServerApplicationPaths appPaths, IFileSystem fileSystem, ILogManager logManager)
+	    {
+	        try
+	        {
+                return new SkiaEncoder(logManager.GetLogger("Skia"), appPaths, () => AppHost.HttpClient, fileSystem);
+            }
+            catch (Exception ex)
+	        {
+	            return new NullImageEncoder();
+	        }
+	    }
+
         private static void GenerateCertificate(string certPath, string certHost, string certPassword)
         private static void GenerateCertificate(string certPath, string certHost, string certPassword)
         {
         {
 			CertificateGenerator.CreateSelfSignCertificatePfx(certPath, certHost, certPassword, _logger);
 			CertificateGenerator.CreateSelfSignCertificatePfx(certPath, certHost, certPassword, _logger);

+ 1 - 0
MediaBrowser.Server.Mac/packages.config

@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
 <packages>
   <package id="Mono.Posix" version="4.0.0.0" targetFramework="net45" />
   <package id="Mono.Posix" version="4.0.0.0" targetFramework="net45" />
+  <package id="SkiaSharp" version="1.57.1" targetFramework="net462" />
 </packages>
 </packages>

+ 0 - 15
MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs

@@ -341,21 +341,6 @@ namespace MediaBrowser.XbmcMetadata.Parsers
                         break;
                         break;
                     }
                     }
 
 
-                case "awardsummary":
-                    {
-                        var text = reader.ReadElementContentAsString();
-                        var hasAwards = item as IHasAwards;
-                        if (hasAwards != null)
-                        {
-                            if (!string.IsNullOrWhiteSpace(text))
-                            {
-                                hasAwards.AwardSummary = text;
-                            }
-                        }
-
-                        break;
-                    }
-
                 case "sorttitle":
                 case "sorttitle":
                     {
                     {
                         var val = reader.ReadElementContentAsString();
                         var val = reader.ReadElementContentAsString();

+ 0 - 7
MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs

@@ -81,7 +81,6 @@ namespace MediaBrowser.XbmcMetadata.Savers
                     "country",
                     "country",
                     "audiodbalbumid",
                     "audiodbalbumid",
                     "audiodbartistid",
                     "audiodbartistid",
-                    "awardsummary",
                     "enddate",
                     "enddate",
                     "lockedfields",
                     "lockedfields",
                     "zap2itid",
                     "zap2itid",
@@ -711,12 +710,6 @@ namespace MediaBrowser.XbmcMetadata.Savers
                 writer.WriteElementString("plotkeyword", tag);
                 writer.WriteElementString("plotkeyword", tag);
             }
             }
 
 
-            var hasAwards = item as IHasAwards;
-            if (hasAwards != null && !string.IsNullOrEmpty(hasAwards.AwardSummary))
-            {
-                writer.WriteElementString("awardsummary", hasAwards.AwardSummary);
-            }
-
             var externalId = item.GetProviderId(MetadataProviders.AudioDbArtist);
             var externalId = item.GetProviderId(MetadataProviders.AudioDbArtist);
 
 
             if (!string.IsNullOrEmpty(externalId))
             if (!string.IsNullOrEmpty(externalId))

+ 1 - 1
SharedVersion.cs

@@ -1,3 +1,3 @@
 using System.Reflection;
 using System.Reflection;
 
 
-[assembly: AssemblyVersion("3.2.16.1")]
+[assembly: AssemblyVersion("3.2.16.2")]