diff --git a/SGPlayer.xcodeproj/project.pbxproj b/SGPlayer.xcodeproj/project.pbxproj index 9c1f6854..ceec3214 100644 --- a/SGPlayer.xcodeproj/project.pbxproj +++ b/SGPlayer.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ @@ -557,14 +557,14 @@ 9CFA2330230BCD4400061AAC /* libavcodec.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CFA2328230BCD4400061AAC /* libavcodec.a */; }; 9CFA2331230BCD4400061AAC /* libswscale.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CFA2329230BCD4400061AAC /* libswscale.a */; }; 9CFA2332230BCD4400061AAC /* libavfilter.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CFA232A230BCD4400061AAC /* libavfilter.a */; }; - 9CFA2333230BCE3200061AAC /* libavcodec.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CFA2314230BCCEA00061AAC /* libavcodec.a */; }; - 9CFA2334230BCE3200061AAC /* libavfilter.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CFA2318230BCCEA00061AAC /* libavfilter.a */; }; - 9CFA2335230BCE3200061AAC /* libavformat.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CFA2313230BCCE900061AAC /* libavformat.a */; }; - 9CFA2336230BCE3200061AAC /* libavutil.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CFA2316230BCCEA00061AAC /* libavutil.a */; }; - 9CFA2337230BCE3200061AAC /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CFA2315230BCCEA00061AAC /* libcrypto.a */; }; - 9CFA2338230BCE3200061AAC /* libssl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CFA2317230BCCEA00061AAC /* libssl.a */; }; - 9CFA2339230BCE3200061AAC /* libswresample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CFA2319230BCCEA00061AAC /* libswresample.a */; }; - 9CFA233A230BCE3200061AAC /* libswscale.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CFA231A230BCCEA00061AAC /* libswscale.a */; }; + 9CFA2333230BCE3200061AAC /* libavcodec.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CFA2314230BCCEA00061AAC /* libavcodec.a */; platformFilter = ios; }; + 9CFA2334230BCE3200061AAC /* libavfilter.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CFA2318230BCCEA00061AAC /* libavfilter.a */; platformFilter = ios; }; + 9CFA2335230BCE3200061AAC /* libavformat.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CFA2313230BCCE900061AAC /* libavformat.a */; platformFilter = ios; }; + 9CFA2336230BCE3200061AAC /* libavutil.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CFA2316230BCCEA00061AAC /* libavutil.a */; platformFilter = ios; }; + 9CFA2337230BCE3200061AAC /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CFA2315230BCCEA00061AAC /* libcrypto.a */; platformFilter = ios; }; + 9CFA2338230BCE3200061AAC /* libssl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CFA2317230BCCEA00061AAC /* libssl.a */; platformFilter = ios; }; + 9CFA2339230BCE3200061AAC /* libswresample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CFA2319230BCCEA00061AAC /* libswresample.a */; platformFilter = ios; }; + 9CFA233A230BCE3200061AAC /* libswscale.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CFA231A230BCCEA00061AAC /* libswscale.a */; platformFilter = ios; }; 9CFA2343230BCE5100061AAC /* libavutil.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CFA233B230BCE5100061AAC /* libavutil.a */; }; 9CFA2344230BCE5100061AAC /* libswscale.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CFA233C230BCE5100061AAC /* libswscale.a */; }; 9CFA2345230BCE5100061AAC /* libssl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CFA233D230BCE5100061AAC /* libssl.a */; }; @@ -585,6 +585,208 @@ 9CFA236F230BD00C00061AAC /* avformat.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CFA2369230BD00C00061AAC /* avformat.h */; }; 9CFA2370230BD00C00061AAC /* swscale.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CFA236B230BD00C00061AAC /* swscale.h */; }; 9CFA2371230BD00C00061AAC /* swresample.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CFA236D230BD00C00061AAC /* swresample.h */; }; + B019873A231AAB3900EC1C47 /* SGDemuxerOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C262A3222B344D3006C8542 /* SGDemuxerOptions.m */; }; + B019873B231AAB3900EC1C47 /* SGPlayerItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C8D4E47200DFFC700ED8A58 /* SGPlayerItem.m */; }; + B019873C231AAB3900EC1C47 /* SGFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CA3CDB320E1F74300B852D0 /* SGFrame.m */; }; + B019873D231AAB3900EC1C47 /* SGMetalYUVRenderPipeline.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C8D6B3722C4A19400985D55 /* SGMetalYUVRenderPipeline.m */; }; + B019873E231AAB3900EC1C47 /* SGPacket.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C2C55AC2015D1D200131E15 /* SGPacket.m */; }; + B019873F231AAB3900EC1C47 /* SGMetalRenderPipelinePool.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C8D6B3222C4A19400985D55 /* SGMetalRenderPipelinePool.m */; }; + B0198740231AAB3900EC1C47 /* SGMetalPlaneModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C8D6B3922C4A19400985D55 /* SGMetalPlaneModel.m */; }; + B0198741231AAB3900EC1C47 /* SGObjectPool.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C2C55922015911600131E15 /* SGObjectPool.m */; }; + B0198742231AAB3900EC1C47 /* SGVideoDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C853F1121BFD85D005552C6 /* SGVideoDescriptor.m */; }; + B0198743231AAB3900EC1C47 /* SGVideoFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C2C559A2015B87400131E15 /* SGVideoFrame.m */; }; + B0198744231AAB3900EC1C47 /* SGClock.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C5C98FA20D26BE10089C112 /* SGClock.m */; }; + B0198745231AAB3900EC1C47 /* SGPLFImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CE6F51F2004D97C00D1F4C8 /* SGPLFImage.m */; }; + B0198746231AAB3900EC1C47 /* SGTrackSelection.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C1378AF23026B3A00FE0CFD /* SGTrackSelection.m */; }; + B0198747231AAB3900EC1C47 /* SGObjectQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C2C55B42015D92100131E15 /* SGObjectQueue.m */; }; + B0198748231AAB3900EC1C47 /* SGURLSegment.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CE71914219C3F7900256485 /* SGURLSegment.m */; }; + B0198749231AAB3900EC1C47 /* SGMetalTextureLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C8D6B3322C4A19400985D55 /* SGMetalTextureLoader.m */; }; + B019874A231AAB3900EC1C47 /* SGVRProjection.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C03E5EF212E645B001F0E1B /* SGVRProjection.m */; }; + B019874B231AAB3900EC1C47 /* SGAudioDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C525D5021AEC421005C5708 /* SGAudioDescriptor.m */; }; + B019874C231AAB3900EC1C47 /* SGMetalViewport.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C11816422C4E23200A12FD4 /* SGMetalViewport.m */; }; + B019874D231AAB3900EC1C47 /* SGDecoderOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C262A3A22B3450F006C8542 /* SGDecoderOptions.m */; }; + B019874E231AAB3900EC1C47 /* SGLock.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C43D51021872D3F00235169 /* SGLock.m */; }; + B019874F231AAB3900EC1C47 /* SGProcessorOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C1378BB23029F2E00FE0CFD /* SGProcessorOptions.m */; }; + B0198750231AAB3900EC1C47 /* SGAudioRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CF15E062011AE0700585326 /* SGAudioRenderer.m */; }; + B0198751231AAB3900EC1C47 /* SGSegment.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CE7191C219C408300256485 /* SGSegment.m */; }; + B0198752231AAB3900EC1C47 /* SGMetalRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C8D6B4622C4A19500985D55 /* SGMetalRenderer.m */; }; + B0198753231AAB3900EC1C47 /* SGAudioPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CE6842F200DD12F007BD834 /* SGAudioPlayer.m */; }; + B0198754231AAB3900EC1C47 /* SGTrack.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CF52CF6200F45D700950B81 /* SGTrack.m */; }; + B0198755231AAB3900EC1C47 /* SGMetalShader.metal in Sources */ = {isa = PBXBuildFile; fileRef = 9C8D6B4822C4A19500985D55 /* SGMetalShader.metal */; }; + B0198756231AAB3900EC1C47 /* SGTrackDemuxer.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C0A6F33219C33EA0027D5B1 /* SGTrackDemuxer.m */; }; + B0198757231AAB3900EC1C47 /* SGPaddingDemuxer.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CC2AD7522A65C7B0095A081 /* SGPaddingDemuxer.m */; }; + B0198758231AAB3900EC1C47 /* SGPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C25364F1FAB199500BBFA5C /* SGPlayer.m */; }; + B0198759231AAB3900EC1C47 /* SGMapping.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C1D2229201B1DA2005147FB /* SGMapping.m */; }; + B019875A231AAB3900EC1C47 /* (null) in Sources */ = {isa = PBXBuildFile; }; + B019875B231AAB3900EC1C47 /* SGFrameOutput.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C29D111217D741500343975 /* SGFrameOutput.m */; }; + B019875C231AAB3900EC1C47 /* SGAudioMixerUnit.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C4190F421AFF17700134099 /* SGAudioMixerUnit.m */; }; + B019875D231AAB3900EC1C47 /* SGMetalBGRARenderPipeline.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C8D6B3B22C4A19500985D55 /* SGMetalBGRARenderPipeline.m */; }; + B019875E231AAB3900EC1C47 /* SGMutableAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C6F9028219BE154001051CE /* SGMutableAsset.m */; }; + B019875F231AAB3900EC1C47 /* SGCapacity.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CC649FE2181A8C000453B3E /* SGCapacity.m */; }; + B0198760231AAB3900EC1C47 /* SGCodecDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CA57931219DAA270061093B /* SGCodecDescriptor.m */; }; + B0198761231AAB3900EC1C47 /* SGActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C329AA92005E3F800252B10 /* SGActivity.m */; }; + B0198762231AAB3900EC1C47 /* sonic.c in Sources */ = {isa = PBXBuildFile; fileRef = 9C3A685A21CB76B10031DDE1 /* sonic.c */; }; + B0198763231AAB3900EC1C47 /* SGError.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C8D4E7F200E1ACA00ED8A58 /* SGError.m */; }; + B0198764231AAB3900EC1C47 /* SGExtractingDemuxer.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CE71928219C48AC00256485 /* SGExtractingDemuxer.m */; }; + B0198765231AAB3900EC1C47 /* SGMetalNV12RenderPipeline.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C8D6B3522C4A19400985D55 /* SGMetalNV12RenderPipeline.m */; }; + B0198766231AAB3900EC1C47 /* SGURLDemuxer.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C95D2BB2152335400079B38 /* SGURLDemuxer.m */; }; + B0198767231AAB3900EC1C47 /* SGMetalModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C8D6B3422C4A19400985D55 /* SGMetalModel.m */; }; + B0198768231AAB3900EC1C47 /* SGVideoDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C3082C2212518EC00B44298 /* SGVideoDecoder.m */; }; + B0198769231AAB3900EC1C47 /* SGSWResample.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C66E1FD2188550D00B70DAA /* SGSWResample.m */; }; + B019876A231AAB3900EC1C47 /* SGVideoRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C2C55A22015C1E100131E15 /* SGVideoRenderer.m */; }; + B019876B231AAB3900EC1C47 /* SGPLFScreen.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CE6F5222004D97C00D1F4C8 /* SGPLFScreen.m */; }; + B019876C231AAB3900EC1C47 /* SGAudioFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C66E1F92188526200B70DAA /* SGAudioFormatter.m */; }; + B019876D231AAB3900EC1C47 /* SGFFmpeg.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CB61F5E2112B93C00F5BE6B /* SGFFmpeg.m */; }; + B019876E231AAB3900EC1C47 /* SGAudioProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C82EEB021AE356D00E9D523 /* SGAudioProcessor.m */; }; + B019876F231AAB3900EC1C47 /* (null) in Sources */ = {isa = PBXBuildFile; }; + B0198770231AAB3900EC1C47 /* SGAudioMixer.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C1F2DE621AF8F1A00D42158 /* SGAudioMixer.m */; }; + B0198771231AAB3900EC1C47 /* SGTimeLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CA57921219D69580061093B /* SGTimeLayout.m */; }; + B0198772231AAB3900EC1C47 /* (null) in Sources */ = {isa = PBXBuildFile; }; + B0198773231AAB3900EC1C47 /* SGPacketOutput.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C8D4E62200E0ACC00ED8A58 /* SGPacketOutput.m */; }; + B0198774231AAB3900EC1C47 /* SGMutableTrack.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C4190FC21B00FC600134099 /* SGMutableTrack.m */; }; + B0198775231AAB3900EC1C47 /* SGPLFColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CE6F51B2004D97C00D1F4C8 /* SGPLFColor.m */; }; + B0198776231AAB3900EC1C47 /* SGMotionSensor.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C03E5EB212E616B001F0E1B /* SGMotionSensor.m */; }; + B0198777231AAB3900EC1C47 /* SGPLFView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CE6F5242004D97C00D1F4C8 /* SGPLFView.m */; }; + B0198778231AAB3900EC1C47 /* SGMetalRenderPipeline.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C8D6B3822C4A19400985D55 /* SGMetalRenderPipeline.m */; }; + B0198779231AAB3900EC1C47 /* SGSWScale.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C37487A2135521D00572166 /* SGSWScale.m */; }; + B019877A231AAB3900EC1C47 /* SGMetalProjection.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C65F5B122C5EC2B00AE27DE /* SGMetalProjection.m */; }; + B019877B231AAB3900EC1C47 /* SGAudioDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C3082CF212521AB00B44298 /* SGAudioDecoder.m */; }; + B019877C231AAB3900EC1C47 /* SGURLAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C95D2C02152386C00079B38 /* SGURLAsset.m */; }; + B019877D231AAB3900EC1C47 /* SGDecodeContext.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C3082C621251AC200B44298 /* SGDecodeContext.m */; }; + B019877E231AAB3900EC1C47 /* SGMetalSphereModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C8D6B3022C4A19400985D55 /* SGMetalSphereModel.m */; }; + B019877F231AAB3900EC1C47 /* SGDecodeLoop.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CF15DE420118E1100585326 /* SGDecodeLoop.m */; }; + B0198780231AAB3900EC1C47 /* SGSonic.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C3A686221CB77010031DDE1 /* SGSonic.m */; }; + B0198781231AAB3900EC1C47 /* SGVRViewport.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CAAC99E2133A6800065E364 /* SGVRViewport.m */; }; + B0198782231AAB3900EC1C47 /* SGMutilDemuxer.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CB01C92219E863D00B36CFA /* SGMutilDemuxer.m */; }; + B0198783231AAB3900EC1C47 /* SGAudioFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CF15E1E2011BC5400585326 /* SGAudioFrame.m */; }; + B0198784231AAB3900EC1C47 /* SGAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CF63FC1211D8E33001B2684 /* SGAsset.m */; }; + B0198785231AAB3900EC1C47 /* SGOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C43D50C2187037200235169 /* SGOptions.m */; }; + B0198786231AAB3900EC1C47 /* SGTime.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C4663C920D0F83600CADDA7 /* SGTime.m */; }; + B0198787231AAB3900EC1C47 /* SGVideoProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C1378A72302681C00FE0CFD /* SGVideoProcessor.m */; }; + B0198788231AAB3900EC1C47 /* SGRenderTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C17554822C5B5B3003A93BC /* SGRenderTimer.m */; }; + B0198792231AAB3900EC1C47 /* libavcodec.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B0198724231A9DB400EC1C47 /* libavcodec.a */; platformFilter = maccatalyst; }; + B0198793231AAB3900EC1C47 /* libavfilter.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B0198725231A9DB400EC1C47 /* libavfilter.a */; platformFilter = maccatalyst; }; + B0198794231AAB3900EC1C47 /* libavformat.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B019872A231A9DB500EC1C47 /* libavformat.a */; platformFilter = maccatalyst; }; + B0198795231AAB3900EC1C47 /* libavutil.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B0198726231A9DB400EC1C47 /* libavutil.a */; platformFilter = maccatalyst; }; + B0198796231AAB3900EC1C47 /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B0198728231A9DB500EC1C47 /* libcrypto.a */; platformFilter = maccatalyst; }; + B0198797231AAB3900EC1C47 /* libssl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B0198727231A9DB500EC1C47 /* libssl.a */; platformFilter = maccatalyst; }; + B0198798231AAB3900EC1C47 /* libswresample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B0198729231A9DB500EC1C47 /* libswresample.a */; platformFilter = maccatalyst; }; + B0198799231AAB3900EC1C47 /* libswscale.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B0198723231A9DB400EC1C47 /* libswscale.a */; platformFilter = maccatalyst; }; + B019879A231AAB3900EC1C47 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CCC5F0D200C9B7000E833DA /* UIKit.framework */; }; + B019879B231AAB3900EC1C47 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CCC5F11200C9B7B00E833DA /* AVFoundation.framework */; }; + B019879C231AAB3900EC1C47 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CCC5F0F200C9B7700E833DA /* Foundation.framework */; }; + B019879E231AAB3900EC1C47 /* SGPLFScreen.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CE6F5212004D97C00D1F4C8 /* SGPLFScreen.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B019879F231AAB3900EC1C47 /* SGDemuxable.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C0DF027215A2FB9007142DB /* SGDemuxable.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987A0231AAB3900EC1C47 /* SGURLDemuxer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C95D2BC2152335400079B38 /* SGURLDemuxer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987A1231AAB3900EC1C47 /* SGError.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C8D4E7E200E1ACA00ED8A58 /* SGError.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987A2231AAB3900EC1C47 /* SGAudioFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C66E1F82188526200B70DAA /* SGAudioFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987A3231AAB3900EC1C47 /* SGAudioMixer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C1F2DE521AF8F1A00D42158 /* SGAudioMixer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987A4231AAB3900EC1C47 /* SGAudioMixerUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C4190F321AFF17700134099 /* SGAudioMixerUnit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987A5231AAB3900EC1C47 /* SGSWResample.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C66E1FC2188550D00B70DAA /* SGSWResample.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987A6231AAB3900EC1C47 /* SGSWScale.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C3748792135521D00572166 /* SGSWScale.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987A7231AAB3900EC1C47 /* SGSonic.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C3A686121CB77010031DDE1 /* SGSonic.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987A8231AAB3900EC1C47 /* SGPlayerHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C661C5A2304074900908563 /* SGPlayerHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987A9231AAB3900EC1C47 /* SGVideoProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C1378A62302681C00FE0CFD /* SGVideoProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987AA231AAB3900EC1C47 /* SGAudioProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C82EEAF21AE356D00E9D523 /* SGAudioProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987AB231AAB3900EC1C47 /* SGProcessorOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C1378BA23029F2E00FE0CFD /* SGProcessorOptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987AC231AAB3900EC1C47 /* SGProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C1378B623026C6700FE0CFD /* SGProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987AD231AAB3900EC1C47 /* avformat.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CFA234F230BCFFC00061AAC /* avformat.h */; }; + B01987AE231AAB3900EC1C47 /* (null) in Headers */ = {isa = PBXBuildFile; settings = {ATTRIBUTES = (Public, ); }; }; + B01987AF231AAB3900EC1C47 /* SGTrackSelection.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C1378AE23026B3A00FE0CFD /* SGTrackSelection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987B0231AAB3900EC1C47 /* SGDecoderOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C262A3922B3450F006C8542 /* SGDecoderOptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987B1231AAB3900EC1C47 /* (null) in Headers */ = {isa = PBXBuildFile; settings = {ATTRIBUTES = (Public, ); }; }; + B01987B2231AAB3900EC1C47 /* SGMetalProjection.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C65F5B022C5EC2B00AE27DE /* SGMetalProjection.h */; }; + B01987B3231AAB3900EC1C47 /* SGDemuxerOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C262A3122B344D3006C8542 /* SGDemuxerOptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987B4231AAB3900EC1C47 /* SGPacket.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2C55AB2015D1D200131E15 /* SGPacket.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987B5231AAB3900EC1C47 /* SGPacketOutput.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C8D4E61200E0ACC00ED8A58 /* SGPacketOutput.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987B6231AAB3900EC1C47 /* SGFrameOutput.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C29D110217D741500343975 /* SGFrameOutput.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987B7231AAB3900EC1C47 /* swscale.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CFA2351230BCFFC00061AAC /* swscale.h */; }; + B01987B8231AAB3900EC1C47 /* SGVideoDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C853F1021BFD85D005552C6 /* SGVideoDescriptor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987B9231AAB3900EC1C47 /* SGAudioDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C525D4F21AEC421005C5708 /* SGAudioDescriptor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987BA231AAB3900EC1C47 /* SGData.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C55337021B25EC000119235 /* SGData.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987BB231AAB3900EC1C47 /* SGURLSegment.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CE71913219C3F7900256485 /* SGURLSegment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987BC231AAB3900EC1C47 /* SGMetalViewport.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C11816322C4E23200A12FD4 /* SGMetalViewport.h */; }; + B01987BD231AAB3900EC1C47 /* SGMutableTrack.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C4190FB21B00FC600134099 /* SGMutableTrack.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987BE231AAB3900EC1C47 /* SGSegment.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CE7191B219C408300256485 /* SGSegment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987BF231AAB3900EC1C47 /* SGMutableAsset.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C6F9027219BE154001051CE /* SGMutableAsset.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987C0231AAB3900EC1C47 /* SGOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C43D50B2187037200235169 /* SGOptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987C1231AAB3900EC1C47 /* SGCapacity.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CC649FD2181A8C000453B3E /* SGCapacity.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987C2231AAB3900EC1C47 /* SGAudioRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CF15E052011AE0700585326 /* SGAudioRenderer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987C3231AAB3900EC1C47 /* SGVideoRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2C55A12015C1E100131E15 /* SGVideoRenderer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987C4231AAB3900EC1C47 /* SGLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C43D50F21872D3F00235169 /* SGLock.h */; }; + B01987C5231AAB3900EC1C47 /* SGTrack.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CF52CF5200F45D700950B81 /* SGTrack.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987C6231AAB3900EC1C47 /* SGPlayerItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C8D4E46200DFFC700ED8A58 /* SGPlayerItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987C7231AAB3900EC1C47 /* SGURLAsset.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C95D2BF2152386C00079B38 /* SGURLAsset.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987C8231AAB3900EC1C47 /* SGVideoFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2C55992015B87400131E15 /* SGVideoFrame.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987C9231AAB3900EC1C47 /* SGFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C389ACB20108C2E003259FF /* SGFrame.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987CA231AAB3900EC1C47 /* SGAudioFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CF15E1D2011BC5400585326 /* SGAudioFrame.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987CB231AAB3900EC1C47 /* SGDescriptor+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C935B9B21CCCA58007813F4 /* SGDescriptor+Internal.h */; }; + B01987CC231AAB3900EC1C47 /* SGMetalBGRARenderPipeline.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C8D6B4922C4A19500985D55 /* SGMetalBGRARenderPipeline.h */; }; + B01987CD231AAB3900EC1C47 /* SGMetalRenderPipelinePool.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C8D6B4122C4A19500985D55 /* SGMetalRenderPipelinePool.h */; }; + B01987CE231AAB3900EC1C47 /* SGVRViewport.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CAAC99D2133A6800065E364 /* SGVRViewport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987CF231AAB3900EC1C47 /* SGTime.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C4663C820D0F83600CADDA7 /* SGTime.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987D0231AAB3900EC1C47 /* SGClock+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C26CF56218D787D009FFCC4 /* SGClock+Internal.h */; }; + B01987D1231AAB3900EC1C47 /* SGMetalModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C8D6B4022C4A19500985D55 /* SGMetalModel.h */; }; + B01987D2231AAB3900EC1C47 /* SGAsset.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CF63FC0211D8E33001B2684 /* SGAsset.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987D3231AAB3900EC1C47 /* SGDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CA0F56220E0E24000501478 /* SGDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987D4231AAB3900EC1C47 /* SGPacket+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CEBCCA0217F109000430024 /* SGPacket+Internal.h */; }; + B01987D5231AAB3900EC1C47 /* SGMetalShader_iOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CBEE0E4230C0F520070187D /* SGMetalShader_iOS.h */; }; + B01987D6231AAB3900EC1C47 /* (null) in Headers */ = {isa = PBXBuildFile; }; + B01987D7231AAB3900EC1C47 /* SGMutilDemuxer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CB01C91219E863D00B36CFA /* SGMutilDemuxer.h */; }; + B01987D8231AAB3900EC1C47 /* SGTrackDemuxer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C0A6F32219C33EA0027D5B1 /* SGTrackDemuxer.h */; }; + B01987D9231AAB3900EC1C47 /* SGMetalNV12RenderPipeline.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C8D6B3F22C4A19500985D55 /* SGMetalNV12RenderPipeline.h */; }; + B01987DA231AAB3900EC1C47 /* SGExtractingDemuxer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CE71927219C48AC00256485 /* SGExtractingDemuxer.h */; }; + B01987DB231AAB3900EC1C47 /* SGObjectPool.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2C55912015911600131E15 /* SGObjectPool.h */; }; + B01987DC231AAB3900EC1C47 /* SGObjectQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C2C55B32015D92100131E15 /* SGObjectQueue.h */; }; + B01987DD231AAB3900EC1C47 /* SGSegment+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CE71923219C47FF00256485 /* SGSegment+Internal.h */; }; + B01987DE231AAB3900EC1C47 /* SGClock.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C5C98F920D26BE10089C112 /* SGClock.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987DF231AAB3900EC1C47 /* SGMetal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C8D6B3122C4A19400985D55 /* SGMetal.h */; }; + B01987E0231AAB3900EC1C47 /* SGAsset+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C0B6CB1217D823500900F1E /* SGAsset+Internal.h */; }; + B01987E1231AAB3900EC1C47 /* SGMacro.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CE6F5A12004E7ED00D1F4C8 /* SGMacro.h */; }; + B01987E2231AAB3900EC1C47 /* SGFFmpeg.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CB61F5D2112B93C00F5BE6B /* SGFFmpeg.h */; }; + B01987E3231AAB3900EC1C47 /* imgutils.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CFA234D230BCFFC00061AAC /* imgutils.h */; }; + B01987E4231AAB3900EC1C47 /* SGDecodable.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C0B6CB5217DBA1800900F1E /* SGDecodable.h */; }; + B01987E5231AAB3900EC1C47 /* SGPLFTargets.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CE6F52D2004D97C00D1F4C8 /* SGPLFTargets.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987E6231AAB3900EC1C47 /* SGRenderer+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CDFC3E4218B10F00065C826 /* SGRenderer+Internal.h */; }; + B01987E7231AAB3900EC1C47 /* SGPLFObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CE6F5202004D97C00D1F4C8 /* SGPLFObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987E8231AAB3900EC1C47 /* SGPLFColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CE6F51A2004D97C00D1F4C8 /* SGPLFColor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987E9231AAB3900EC1C47 /* SGTrack+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CEBCC9B217EF8E900430024 /* SGTrack+Internal.h */; }; + B01987EA231AAB3900EC1C47 /* SGMetalPlaneModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C8D6B4322C4A19500985D55 /* SGMetalPlaneModel.h */; }; + B01987EB231AAB3900EC1C47 /* SGPLFImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CE6F51E2004D97C00D1F4C8 /* SGPLFImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987EC231AAB3900EC1C47 /* SGRenderable.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CF15E012011ADB500585326 /* SGRenderable.h */; }; + B01987ED231AAB3900EC1C47 /* SGPLFView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CE6F5232004D97C00D1F4C8 /* SGPLFView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987EE231AAB3900EC1C47 /* SGPaddingDemuxer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CC2AD7422A65C7B0095A081 /* SGPaddingDemuxer.h */; }; + B01987EF231AAB3900EC1C47 /* SGPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C25364E1FAB199500BBFA5C /* SGPlayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01987F0231AAB3900EC1C47 /* SGDecodeLoop.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CF15DE320118E1100585326 /* SGDecodeLoop.h */; }; + B01987F1231AAB3900EC1C47 /* SGMapping.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C1D2228201B1DA2005147FB /* SGMapping.h */; }; + B01987F2231AAB3900EC1C47 /* SGTimeLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CA57920219D69580061093B /* SGTimeLayout.h */; }; + B01987F3231AAB3900EC1C47 /* SGMetalTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C8D6B3622C4A19400985D55 /* SGMetalTypes.h */; }; + B01987F4231AAB3900EC1C47 /* SGPlayerItem+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CC649F921818D8C00453B3E /* SGPlayerItem+Internal.h */; }; + B01987F5231AAB3900EC1C47 /* SGMetalYUVRenderPipeline.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C8D6B4422C4A19500985D55 /* SGMetalYUVRenderPipeline.h */; }; + B01987F6231AAB3900EC1C47 /* SGCodecDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CA57930219DAA270061093B /* SGCodecDescriptor.h */; }; + B01987F7231AAB3900EC1C47 /* SGMetalTextureLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C8D6B4222C4A19500985D55 /* SGMetalTextureLoader.h */; }; + B01987F8231AAB3900EC1C47 /* SGVideoDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C3082C1212518EB00B44298 /* SGVideoDecoder.h */; }; + B01987F9231AAB3900EC1C47 /* SGMetalRenderPipeline.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C8D6B4522C4A19500985D55 /* SGMetalRenderPipeline.h */; }; + B01987FA231AAB3900EC1C47 /* SGDecodeContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C3082C521251AC200B44298 /* SGDecodeContext.h */; }; + B01987FB231AAB3900EC1C47 /* SGMetalRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C8D6B3D22C4A19500985D55 /* SGMetalRenderer.h */; }; + B01987FC231AAB3900EC1C47 /* SGFrame+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CEBCCA6217F19BE00430024 /* SGFrame+Internal.h */; }; + B01987FD231AAB3900EC1C47 /* sonic.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C3A685921CB76B10031DDE1 /* sonic.h */; }; + B01987FE231AAB3900EC1C47 /* SGVRProjection.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C03E5EE212E645B001F0E1B /* SGVRProjection.h */; }; + B01987FF231AAB3900EC1C47 /* SGMotionSensor.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C03E5EA212E616B001F0E1B /* SGMotionSensor.h */; }; + B0198800231AAB3900EC1C47 /* swresample.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CFA2353230BCFFC00061AAC /* swresample.h */; }; + B0198801231AAB3900EC1C47 /* SGActivity.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C329AA82005E3F800252B10 /* SGActivity.h */; }; + B0198802231AAB3900EC1C47 /* SGAudioDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C3082CE212521AB00B44298 /* SGAudioDecoder.h */; }; + B0198803231AAB3900EC1C47 /* SGAudioPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CE6842E200DD12F007BD834 /* SGAudioPlayer.h */; }; + B0198804231AAB3900EC1C47 /* SGMetalSphereModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C8D6B3E22C4A19500985D55 /* SGMetalSphereModel.h */; }; + B0198805231AAB3900EC1C47 /* SGRenderTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C17554722C5B5B3003A93BC /* SGRenderTimer.h */; }; + B019880D231AAB8200EC1C47 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B019880C231AAB8200EC1C47 /* libz.tbd */; }; + B019880E231B4EA100EC1C47 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B019880C231AAB8200EC1C47 /* libz.tbd */; }; + EACF58D8238E9DC500F3659A /* SGPaddingSegment.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C20C5912333268100E183B2 /* SGPaddingSegment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EACF58D9238E9DF700F3659A /* SGFrameReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C22AE66237AC19E004D33DE /* SGFrameReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EACF58DA238E9E3400F3659A /* SGPaddingSegment.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C20C5922333268100E183B2 /* SGPaddingSegment.m */; }; + EACF58DB238E9E3E00F3659A /* SGFrameReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C22AE67237AC19E004D33DE /* SGFrameReader.m */; }; + EACF58DC238E9E6D00F3659A /* SGCodecContext.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C726149238B7C0300403272 /* SGCodecContext.m */; }; + EACF58DD238E9E7000F3659A /* SGCodecContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C726148238B7C0300403272 /* SGCodecContext.h */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -888,6 +1090,33 @@ 9CFA2369230BD00C00061AAC /* avformat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avformat.h; sourceTree = ""; }; 9CFA236B230BD00C00061AAC /* swscale.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = swscale.h; sourceTree = ""; }; 9CFA236D230BD00C00061AAC /* swresample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = swresample.h; sourceTree = ""; }; + B019870A231A9D7B00EC1C47 /* libavutil.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libavutil.a; path = build/build/Catalyst/universal/lib/libavutil.a; sourceTree = ""; }; + B019870B231A9D7B00EC1C47 /* libswresample.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libswresample.a; path = build/build/Catalyst/universal/lib/libswresample.a; sourceTree = ""; }; + B019870C231A9D7B00EC1C47 /* libswscale.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libswscale.a; path = build/build/Catalyst/universal/lib/libswscale.a; sourceTree = ""; }; + B019870D231A9D7B00EC1C47 /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcrypto.a; path = build/build/Catalyst/universal/lib/libcrypto.a; sourceTree = ""; }; + B019870E231A9D7B00EC1C47 /* libavcodec.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libavcodec.a; path = build/build/Catalyst/universal/lib/libavcodec.a; sourceTree = ""; }; + B019870F231A9D7B00EC1C47 /* libssl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libssl.a; path = build/build/Catalyst/universal/lib/libssl.a; sourceTree = ""; }; + B0198710231A9D7B00EC1C47 /* libavformat.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libavformat.a; path = build/build/Catalyst/universal/lib/libavformat.a; sourceTree = ""; }; + B0198711231A9D7B00EC1C47 /* libavfilter.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libavfilter.a; path = build/build/Catalyst/universal/lib/libavfilter.a; sourceTree = ""; }; + B0198712231A9D8F00EC1C47 /* libavutil.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libavutil.a; path = build/build/Catalyst/universal/lib/libavutil.a; sourceTree = ""; }; + B0198713231A9D8F00EC1C47 /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcrypto.a; path = build/build/Catalyst/universal/lib/libcrypto.a; sourceTree = ""; }; + B0198714231A9D8F00EC1C47 /* libavfilter.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libavfilter.a; path = build/build/Catalyst/universal/lib/libavfilter.a; sourceTree = ""; }; + B0198715231A9D9000EC1C47 /* libavcodec.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libavcodec.a; path = build/build/Catalyst/universal/lib/libavcodec.a; sourceTree = ""; }; + B0198716231A9D9000EC1C47 /* libswresample.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libswresample.a; path = build/build/Catalyst/universal/lib/libswresample.a; sourceTree = ""; }; + B0198717231A9D9000EC1C47 /* libavformat.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libavformat.a; path = build/build/Catalyst/universal/lib/libavformat.a; sourceTree = ""; }; + B0198718231A9D9000EC1C47 /* libswscale.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libswscale.a; path = build/build/Catalyst/universal/lib/libswscale.a; sourceTree = ""; }; + B0198719231A9D9000EC1C47 /* libssl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libssl.a; path = build/build/Catalyst/universal/lib/libssl.a; sourceTree = ""; }; + B0198723231A9DB400EC1C47 /* libswscale.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libswscale.a; path = build/build/Catalyst/universal/lib/libswscale.a; sourceTree = ""; }; + B0198724231A9DB400EC1C47 /* libavcodec.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libavcodec.a; path = build/build/Catalyst/universal/lib/libavcodec.a; sourceTree = ""; }; + B0198725231A9DB400EC1C47 /* libavfilter.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libavfilter.a; path = build/build/Catalyst/universal/lib/libavfilter.a; sourceTree = ""; }; + B0198726231A9DB400EC1C47 /* libavutil.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libavutil.a; path = build/build/Catalyst/universal/lib/libavutil.a; sourceTree = ""; }; + B0198727231A9DB500EC1C47 /* libssl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libssl.a; path = build/build/Catalyst/universal/lib/libssl.a; sourceTree = ""; }; + B0198728231A9DB500EC1C47 /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcrypto.a; path = build/build/Catalyst/universal/lib/libcrypto.a; sourceTree = ""; }; + B0198729231A9DB500EC1C47 /* libswresample.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libswresample.a; path = build/build/Catalyst/universal/lib/libswresample.a; sourceTree = ""; }; + B019872A231A9DB500EC1C47 /* libavformat.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libavformat.a; path = build/build/Catalyst/universal/lib/libavformat.a; sourceTree = ""; }; + B0198733231AA2AC00EC1C47 /* Catalyst.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Catalyst.h; sourceTree = ""; }; + B019880A231AAB3900EC1C47 /* SGPlayer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SGPlayer.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B019880C231AAB8200EC1C47 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -931,6 +1160,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + B019880E231B4EA100EC1C47 /* libz.tbd in Frameworks */, 9CFA2333230BCE3200061AAC /* libavcodec.a in Frameworks */, 9CFA2334230BCE3200061AAC /* libavfilter.a in Frameworks */, 9CFA2335230BCE3200061AAC /* libavformat.a in Frameworks */, @@ -945,6 +1175,25 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + B0198789231AAB3900EC1C47 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + B019880D231AAB8200EC1C47 /* libz.tbd in Frameworks */, + B0198792231AAB3900EC1C47 /* libavcodec.a in Frameworks */, + B0198793231AAB3900EC1C47 /* libavfilter.a in Frameworks */, + B0198794231AAB3900EC1C47 /* libavformat.a in Frameworks */, + B0198795231AAB3900EC1C47 /* libavutil.a in Frameworks */, + B0198796231AAB3900EC1C47 /* libcrypto.a in Frameworks */, + B0198797231AAB3900EC1C47 /* libssl.a in Frameworks */, + B0198798231AAB3900EC1C47 /* libswresample.a in Frameworks */, + B0198799231AAB3900EC1C47 /* libswscale.a in Frameworks */, + B019879A231AAB3900EC1C47 /* UIKit.framework in Frameworks */, + B019879B231AAB3900EC1C47 /* AVFoundation.framework in Frameworks */, + B019879C231AAB3900EC1C47 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -1032,6 +1281,7 @@ 9C25364E1FAB199500BBFA5C /* SGPlayer.h */, 9C25364F1FAB199500BBFA5C /* SGPlayer.m */, 9C661C5A2304074900908563 /* SGPlayerHeader.h */, + B0198733231AA2AC00EC1C47 /* Catalyst.h */, 9C478F341E713A9B00AD4289 /* Core */, ); path = Classes; @@ -1065,8 +1315,11 @@ 9C4793421E71402E00AD4289 /* Frameworks */ = { isa = PBXGroup; children = ( + B019880C231AAB8200EC1C47 /* libz.tbd */, + B0198722231A9DA900EC1C47 /* Catalyst */, 9CF9A020212D1D34008178BC /* libavcodec.a */, 9CFA2341230BCE5100061AAC /* libavcodec.a */, + B0198715231A9D9000EC1C47 /* libavcodec.a */, 9CF9A022212D1D35008178BC /* libavfilter.a */, 9C8636592190408300D730EC /* libavcodec.a */, 9C8637D72190476600D730EC /* libavcodec.a */, @@ -1077,14 +1330,22 @@ 9CFA2328230BCD4400061AAC /* libavcodec.a */, 9CFA232A230BCD4400061AAC /* libavfilter.a */, 9CFA233F230BCE5100061AAC /* libavfilter.a */, + B0198711231A9D7B00EC1C47 /* libavfilter.a */, 9C5C7BDA230AAC1200C75E3A /* libavformat.a */, 9CFA2325230BCD4400061AAC /* libavformat.a */, 9CFA233E230BCE5100061AAC /* libavformat.a */, + B019870E231A9D7B00EC1C47 /* libavcodec.a */, + B0198710231A9D7B00EC1C47 /* libavformat.a */, + B0198714231A9D8F00EC1C47 /* libavfilter.a */, + B0198717231A9D9000EC1C47 /* libavformat.a */, 9C5C7BD9230AAC1200C75E3A /* libavutil.a */, 9CFA2316230BCCEA00061AAC /* libavutil.a */, 9C5C7BD7230AAC1200C75E3A /* libcrypto.a */, 9CFA2340230BCE5100061AAC /* libcrypto.a */, 9C5C7BDB230AAC1200C75E3A /* libssl.a */, + B019870D231A9D7B00EC1C47 /* libcrypto.a */, + B019870F231A9D7B00EC1C47 /* libssl.a */, + B0198719231A9D9000EC1C47 /* libssl.a */, 9C5C7BD8230AAC1200C75E3A /* libswresample.a */, 9CFA233D230BCE5100061AAC /* libssl.a */, 9CFA2342230BCE5100061AAC /* libswresample.a */, @@ -1101,6 +1362,13 @@ 9CFA2329230BCD4400061AAC /* libswscale.a */, 9CFA233B230BCE5100061AAC /* libavutil.a */, 9CFA233C230BCE5100061AAC /* libswscale.a */, + B019870A231A9D7B00EC1C47 /* libavutil.a */, + B019870B231A9D7B00EC1C47 /* libswresample.a */, + B019870C231A9D7B00EC1C47 /* libswscale.a */, + B0198712231A9D8F00EC1C47 /* libavutil.a */, + B0198713231A9D8F00EC1C47 /* libcrypto.a */, + B0198716231A9D9000EC1C47 /* libswresample.a */, + B0198718231A9D9000EC1C47 /* libswscale.a */, 9C8636522190408300D730EC /* libavdevice.a */, 9C8636582190408300D730EC /* libavfilter.a */, 9C8638AC21904AF700D730EC /* libavcodec.a */, @@ -1356,6 +1624,7 @@ 9CEFA6D61E7122BF00835CAB /* SGPlayer.framework */, 9CD79FA62190068E00E39A7D /* SGPlayer.framework */, 9C8638A521904A0900D730EC /* SGPlayer.framework */, + B019880A231AAB3900EC1C47 /* SGPlayer.framework */, ); name = Products; sourceTree = ""; @@ -1569,6 +1838,21 @@ path = libswresample; sourceTree = ""; }; + B0198722231A9DA900EC1C47 /* Catalyst */ = { + isa = PBXGroup; + children = ( + B0198724231A9DB400EC1C47 /* libavcodec.a */, + B0198725231A9DB400EC1C47 /* libavfilter.a */, + B019872A231A9DB500EC1C47 /* libavformat.a */, + B0198726231A9DB400EC1C47 /* libavutil.a */, + B0198728231A9DB500EC1C47 /* libcrypto.a */, + B0198727231A9DB500EC1C47 /* libssl.a */, + B0198729231A9DB500EC1C47 /* libswresample.a */, + B0198723231A9DB400EC1C47 /* libswscale.a */, + ); + name = Catalyst; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -1903,6 +2187,120 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + B019879D231AAB3900EC1C47 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + B019879E231AAB3900EC1C47 /* SGPLFScreen.h in Headers */, + B019879F231AAB3900EC1C47 /* SGDemuxable.h in Headers */, + B01987A0231AAB3900EC1C47 /* SGURLDemuxer.h in Headers */, + B01987A1231AAB3900EC1C47 /* SGError.h in Headers */, + B01987A2231AAB3900EC1C47 /* SGAudioFormatter.h in Headers */, + B01987A3231AAB3900EC1C47 /* SGAudioMixer.h in Headers */, + B01987A4231AAB3900EC1C47 /* SGAudioMixerUnit.h in Headers */, + B01987A5231AAB3900EC1C47 /* SGSWResample.h in Headers */, + B01987A6231AAB3900EC1C47 /* SGSWScale.h in Headers */, + B01987A7231AAB3900EC1C47 /* SGSonic.h in Headers */, + B01987A8231AAB3900EC1C47 /* SGPlayerHeader.h in Headers */, + B01987A9231AAB3900EC1C47 /* SGVideoProcessor.h in Headers */, + B01987AA231AAB3900EC1C47 /* SGAudioProcessor.h in Headers */, + B01987AB231AAB3900EC1C47 /* SGProcessorOptions.h in Headers */, + B01987AC231AAB3900EC1C47 /* SGProcessor.h in Headers */, + B01987AD231AAB3900EC1C47 /* avformat.h in Headers */, + B01987AE231AAB3900EC1C47 /* (null) in Headers */, + B01987AF231AAB3900EC1C47 /* SGTrackSelection.h in Headers */, + B01987B0231AAB3900EC1C47 /* SGDecoderOptions.h in Headers */, + B01987B1231AAB3900EC1C47 /* (null) in Headers */, + B01987B2231AAB3900EC1C47 /* SGMetalProjection.h in Headers */, + B01987B3231AAB3900EC1C47 /* SGDemuxerOptions.h in Headers */, + B01987B4231AAB3900EC1C47 /* SGPacket.h in Headers */, + B01987B5231AAB3900EC1C47 /* SGPacketOutput.h in Headers */, + B01987B6231AAB3900EC1C47 /* SGFrameOutput.h in Headers */, + B01987B7231AAB3900EC1C47 /* swscale.h in Headers */, + B01987B8231AAB3900EC1C47 /* SGVideoDescriptor.h in Headers */, + B01987B9231AAB3900EC1C47 /* SGAudioDescriptor.h in Headers */, + B01987BA231AAB3900EC1C47 /* SGData.h in Headers */, + B01987BB231AAB3900EC1C47 /* SGURLSegment.h in Headers */, + B01987BC231AAB3900EC1C47 /* SGMetalViewport.h in Headers */, + B01987BD231AAB3900EC1C47 /* SGMutableTrack.h in Headers */, + B01987BE231AAB3900EC1C47 /* SGSegment.h in Headers */, + B01987BF231AAB3900EC1C47 /* SGMutableAsset.h in Headers */, + B01987C0231AAB3900EC1C47 /* SGOptions.h in Headers */, + B01987C1231AAB3900EC1C47 /* SGCapacity.h in Headers */, + B01987C2231AAB3900EC1C47 /* SGAudioRenderer.h in Headers */, + B01987C3231AAB3900EC1C47 /* SGVideoRenderer.h in Headers */, + B01987C4231AAB3900EC1C47 /* SGLock.h in Headers */, + B01987C5231AAB3900EC1C47 /* SGTrack.h in Headers */, + B01987C6231AAB3900EC1C47 /* SGPlayerItem.h in Headers */, + B01987C7231AAB3900EC1C47 /* SGURLAsset.h in Headers */, + B01987C8231AAB3900EC1C47 /* SGVideoFrame.h in Headers */, + B01987C9231AAB3900EC1C47 /* SGFrame.h in Headers */, + B01987CA231AAB3900EC1C47 /* SGAudioFrame.h in Headers */, + B01987CB231AAB3900EC1C47 /* SGDescriptor+Internal.h in Headers */, + B01987CC231AAB3900EC1C47 /* SGMetalBGRARenderPipeline.h in Headers */, + B01987CD231AAB3900EC1C47 /* SGMetalRenderPipelinePool.h in Headers */, + B01987CE231AAB3900EC1C47 /* SGVRViewport.h in Headers */, + B01987CF231AAB3900EC1C47 /* SGTime.h in Headers */, + B01987D0231AAB3900EC1C47 /* SGClock+Internal.h in Headers */, + B01987D1231AAB3900EC1C47 /* SGMetalModel.h in Headers */, + B01987D2231AAB3900EC1C47 /* SGAsset.h in Headers */, + B01987D3231AAB3900EC1C47 /* SGDefines.h in Headers */, + B01987D4231AAB3900EC1C47 /* SGPacket+Internal.h in Headers */, + B01987D5231AAB3900EC1C47 /* SGMetalShader_iOS.h in Headers */, + B01987D6231AAB3900EC1C47 /* (null) in Headers */, + B01987D7231AAB3900EC1C47 /* SGMutilDemuxer.h in Headers */, + B01987D8231AAB3900EC1C47 /* SGTrackDemuxer.h in Headers */, + B01987D9231AAB3900EC1C47 /* SGMetalNV12RenderPipeline.h in Headers */, + B01987DA231AAB3900EC1C47 /* SGExtractingDemuxer.h in Headers */, + B01987DB231AAB3900EC1C47 /* SGObjectPool.h in Headers */, + EACF58D8238E9DC500F3659A /* SGPaddingSegment.h in Headers */, + B01987DC231AAB3900EC1C47 /* SGObjectQueue.h in Headers */, + B01987DD231AAB3900EC1C47 /* SGSegment+Internal.h in Headers */, + B01987DE231AAB3900EC1C47 /* SGClock.h in Headers */, + B01987DF231AAB3900EC1C47 /* SGMetal.h in Headers */, + B01987E0231AAB3900EC1C47 /* SGAsset+Internal.h in Headers */, + B01987E1231AAB3900EC1C47 /* SGMacro.h in Headers */, + B01987E2231AAB3900EC1C47 /* SGFFmpeg.h in Headers */, + B01987E3231AAB3900EC1C47 /* imgutils.h in Headers */, + B01987E4231AAB3900EC1C47 /* SGDecodable.h in Headers */, + B01987E5231AAB3900EC1C47 /* SGPLFTargets.h in Headers */, + B01987E6231AAB3900EC1C47 /* SGRenderer+Internal.h in Headers */, + B01987E7231AAB3900EC1C47 /* SGPLFObject.h in Headers */, + B01987E8231AAB3900EC1C47 /* SGPLFColor.h in Headers */, + B01987E9231AAB3900EC1C47 /* SGTrack+Internal.h in Headers */, + B01987EA231AAB3900EC1C47 /* SGMetalPlaneModel.h in Headers */, + B01987EB231AAB3900EC1C47 /* SGPLFImage.h in Headers */, + B01987EC231AAB3900EC1C47 /* SGRenderable.h in Headers */, + B01987ED231AAB3900EC1C47 /* SGPLFView.h in Headers */, + B01987EE231AAB3900EC1C47 /* SGPaddingDemuxer.h in Headers */, + B01987EF231AAB3900EC1C47 /* SGPlayer.h in Headers */, + B01987F0231AAB3900EC1C47 /* SGDecodeLoop.h in Headers */, + B01987F1231AAB3900EC1C47 /* SGMapping.h in Headers */, + B01987F2231AAB3900EC1C47 /* SGTimeLayout.h in Headers */, + B01987F3231AAB3900EC1C47 /* SGMetalTypes.h in Headers */, + B01987F4231AAB3900EC1C47 /* SGPlayerItem+Internal.h in Headers */, + B01987F5231AAB3900EC1C47 /* SGMetalYUVRenderPipeline.h in Headers */, + B01987F6231AAB3900EC1C47 /* SGCodecDescriptor.h in Headers */, + B01987F7231AAB3900EC1C47 /* SGMetalTextureLoader.h in Headers */, + B01987F8231AAB3900EC1C47 /* SGVideoDecoder.h in Headers */, + EACF58DD238E9E7000F3659A /* SGCodecContext.h in Headers */, + B01987F9231AAB3900EC1C47 /* SGMetalRenderPipeline.h in Headers */, + B01987FA231AAB3900EC1C47 /* SGDecodeContext.h in Headers */, + B01987FB231AAB3900EC1C47 /* SGMetalRenderer.h in Headers */, + B01987FC231AAB3900EC1C47 /* SGFrame+Internal.h in Headers */, + B01987FD231AAB3900EC1C47 /* sonic.h in Headers */, + B01987FE231AAB3900EC1C47 /* SGVRProjection.h in Headers */, + B01987FF231AAB3900EC1C47 /* SGMotionSensor.h in Headers */, + EACF58D9238E9DF700F3659A /* SGFrameReader.h in Headers */, + B0198800231AAB3900EC1C47 /* swresample.h in Headers */, + B0198801231AAB3900EC1C47 /* SGActivity.h in Headers */, + B0198802231AAB3900EC1C47 /* SGAudioDecoder.h in Headers */, + B0198803231AAB3900EC1C47 /* SGAudioPlayer.h in Headers */, + B0198804231AAB3900EC1C47 /* SGMetalSphereModel.h in Headers */, + B0198805231AAB3900EC1C47 /* SGRenderTimer.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ @@ -1960,6 +2358,24 @@ productReference = 9CEFA6D61E7122BF00835CAB /* SGPlayer.framework */; productType = "com.apple.product-type.framework"; }; + B0198738231AAB3900EC1C47 /* SGPlayer Catalyst */ = { + isa = PBXNativeTarget; + buildConfigurationList = B0198807231AAB3900EC1C47 /* Build configuration list for PBXNativeTarget "SGPlayer Catalyst" */; + buildPhases = ( + B0198739231AAB3900EC1C47 /* Sources */, + B0198789231AAB3900EC1C47 /* Frameworks */, + B019879D231AAB3900EC1C47 /* Headers */, + B0198806231AAB3900EC1C47 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "SGPlayer Catalyst"; + productName = SGPlayer; + productReference = B019880A231AAB3900EC1C47 /* SGPlayer.framework */; + productType = "com.apple.product-type.framework"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -1997,6 +2413,7 @@ 9CEFA6D51E7122BF00835CAB /* SGPlayer iOS */, 9C8637F521904A0900D730EC /* SGPlayer macOS */, 9CD79E9C2190068E00E39A7D /* SGPlayer tvOS */, + B0198738231AAB3900EC1C47 /* SGPlayer Catalyst */, ); }; /* End PBXProject section */ @@ -2023,6 +2440,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + B0198806231AAB3900EC1C47 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -2282,6 +2706,95 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + B0198739231AAB3900EC1C47 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B019873A231AAB3900EC1C47 /* SGDemuxerOptions.m in Sources */, + B019873B231AAB3900EC1C47 /* SGPlayerItem.m in Sources */, + B019873C231AAB3900EC1C47 /* SGFrame.m in Sources */, + B019873D231AAB3900EC1C47 /* SGMetalYUVRenderPipeline.m in Sources */, + B019873E231AAB3900EC1C47 /* SGPacket.m in Sources */, + B019873F231AAB3900EC1C47 /* SGMetalRenderPipelinePool.m in Sources */, + B0198740231AAB3900EC1C47 /* SGMetalPlaneModel.m in Sources */, + B0198741231AAB3900EC1C47 /* SGObjectPool.m in Sources */, + B0198742231AAB3900EC1C47 /* SGVideoDescriptor.m in Sources */, + B0198743231AAB3900EC1C47 /* SGVideoFrame.m in Sources */, + B0198744231AAB3900EC1C47 /* SGClock.m in Sources */, + B0198745231AAB3900EC1C47 /* SGPLFImage.m in Sources */, + B0198746231AAB3900EC1C47 /* SGTrackSelection.m in Sources */, + B0198747231AAB3900EC1C47 /* SGObjectQueue.m in Sources */, + B0198748231AAB3900EC1C47 /* SGURLSegment.m in Sources */, + B0198749231AAB3900EC1C47 /* SGMetalTextureLoader.m in Sources */, + B019874A231AAB3900EC1C47 /* SGVRProjection.m in Sources */, + EACF58DA238E9E3400F3659A /* SGPaddingSegment.m in Sources */, + B019874B231AAB3900EC1C47 /* SGAudioDescriptor.m in Sources */, + B019874C231AAB3900EC1C47 /* SGMetalViewport.m in Sources */, + B019874D231AAB3900EC1C47 /* SGDecoderOptions.m in Sources */, + B019874E231AAB3900EC1C47 /* SGLock.m in Sources */, + B019874F231AAB3900EC1C47 /* SGProcessorOptions.m in Sources */, + B0198750231AAB3900EC1C47 /* SGAudioRenderer.m in Sources */, + B0198751231AAB3900EC1C47 /* SGSegment.m in Sources */, + B0198752231AAB3900EC1C47 /* SGMetalRenderer.m in Sources */, + B0198753231AAB3900EC1C47 /* SGAudioPlayer.m in Sources */, + B0198754231AAB3900EC1C47 /* SGTrack.m in Sources */, + B0198755231AAB3900EC1C47 /* SGMetalShader.metal in Sources */, + B0198756231AAB3900EC1C47 /* SGTrackDemuxer.m in Sources */, + B0198757231AAB3900EC1C47 /* SGPaddingDemuxer.m in Sources */, + B0198758231AAB3900EC1C47 /* SGPlayer.m in Sources */, + B0198759231AAB3900EC1C47 /* SGMapping.m in Sources */, + B019875A231AAB3900EC1C47 /* (null) in Sources */, + B019875B231AAB3900EC1C47 /* SGFrameOutput.m in Sources */, + B019875C231AAB3900EC1C47 /* SGAudioMixerUnit.m in Sources */, + B019875D231AAB3900EC1C47 /* SGMetalBGRARenderPipeline.m in Sources */, + B019875E231AAB3900EC1C47 /* SGMutableAsset.m in Sources */, + B019875F231AAB3900EC1C47 /* SGCapacity.m in Sources */, + B0198760231AAB3900EC1C47 /* SGCodecDescriptor.m in Sources */, + B0198761231AAB3900EC1C47 /* SGActivity.m in Sources */, + B0198762231AAB3900EC1C47 /* sonic.c in Sources */, + B0198763231AAB3900EC1C47 /* SGError.m in Sources */, + B0198764231AAB3900EC1C47 /* SGExtractingDemuxer.m in Sources */, + B0198765231AAB3900EC1C47 /* SGMetalNV12RenderPipeline.m in Sources */, + B0198766231AAB3900EC1C47 /* SGURLDemuxer.m in Sources */, + B0198767231AAB3900EC1C47 /* SGMetalModel.m in Sources */, + B0198768231AAB3900EC1C47 /* SGVideoDecoder.m in Sources */, + B0198769231AAB3900EC1C47 /* SGSWResample.m in Sources */, + B019876A231AAB3900EC1C47 /* SGVideoRenderer.m in Sources */, + B019876B231AAB3900EC1C47 /* SGPLFScreen.m in Sources */, + B019876C231AAB3900EC1C47 /* SGAudioFormatter.m in Sources */, + B019876D231AAB3900EC1C47 /* SGFFmpeg.m in Sources */, + B019876E231AAB3900EC1C47 /* SGAudioProcessor.m in Sources */, + B019876F231AAB3900EC1C47 /* (null) in Sources */, + B0198770231AAB3900EC1C47 /* SGAudioMixer.m in Sources */, + B0198771231AAB3900EC1C47 /* SGTimeLayout.m in Sources */, + B0198772231AAB3900EC1C47 /* (null) in Sources */, + B0198773231AAB3900EC1C47 /* SGPacketOutput.m in Sources */, + B0198774231AAB3900EC1C47 /* SGMutableTrack.m in Sources */, + B0198775231AAB3900EC1C47 /* SGPLFColor.m in Sources */, + B0198776231AAB3900EC1C47 /* SGMotionSensor.m in Sources */, + B0198777231AAB3900EC1C47 /* SGPLFView.m in Sources */, + B0198778231AAB3900EC1C47 /* SGMetalRenderPipeline.m in Sources */, + B0198779231AAB3900EC1C47 /* SGSWScale.m in Sources */, + B019877A231AAB3900EC1C47 /* SGMetalProjection.m in Sources */, + B019877B231AAB3900EC1C47 /* SGAudioDecoder.m in Sources */, + EACF58DB238E9E3E00F3659A /* SGFrameReader.m in Sources */, + B019877C231AAB3900EC1C47 /* SGURLAsset.m in Sources */, + B019877D231AAB3900EC1C47 /* SGDecodeContext.m in Sources */, + B019877E231AAB3900EC1C47 /* SGMetalSphereModel.m in Sources */, + B019877F231AAB3900EC1C47 /* SGDecodeLoop.m in Sources */, + B0198780231AAB3900EC1C47 /* SGSonic.m in Sources */, + B0198781231AAB3900EC1C47 /* SGVRViewport.m in Sources */, + B0198782231AAB3900EC1C47 /* SGMutilDemuxer.m in Sources */, + B0198783231AAB3900EC1C47 /* SGAudioFrame.m in Sources */, + B0198784231AAB3900EC1C47 /* SGAsset.m in Sources */, + B0198785231AAB3900EC1C47 /* SGOptions.m in Sources */, + B0198786231AAB3900EC1C47 /* SGTime.m in Sources */, + B0198787231AAB3900EC1C47 /* SGVideoProcessor.m in Sources */, + EACF58DC238E9E6D00F3659A /* SGCodecContext.m in Sources */, + B0198788231AAB3900EC1C47 /* SGRenderTimer.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ @@ -2308,7 +2821,11 @@ INFOPLIST_FILE = SGPlayer/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); LIBRARY_SEARCH_PATHS = "$(PROJECT_DIR)/build/build/macOS/universal/lib"; MACH_O_TYPE = staticlib; MACOSX_DEPLOYMENT_TARGET = 10.11; @@ -2346,7 +2863,11 @@ INFOPLIST_FILE = SGPlayer/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); LIBRARY_SEARCH_PATHS = "$(PROJECT_DIR)/build/build/macOS/universal/lib"; MACH_O_TYPE = staticlib; MACOSX_DEPLOYMENT_TARGET = 10.11; @@ -2384,7 +2905,11 @@ INFOPLIST_FILE = SGPlayer/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); LIBRARY_SEARCH_PATHS = "$(PROJECT_DIR)/build/build/tvOS/universal/lib"; MACH_O_TYPE = staticlib; MODULEMAP_FILE = "$(PROJECT_DIR)/SGPlayer/module.modulemap"; @@ -2421,7 +2946,11 @@ INFOPLIST_FILE = SGPlayer/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); LIBRARY_SEARCH_PATHS = "$(PROJECT_DIR)/build/build/tvOS/universal/lib"; MACH_O_TYPE = staticlib; MODULEMAP_FILE = "$(PROJECT_DIR)/SGPlayer/module.modulemap"; @@ -2568,9 +3097,16 @@ INFOPLIST_FILE = SGPlayer/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = "$(PROJECT_DIR)/build/build/iOS/universal/lib"; - MACH_O_TYPE = staticlib; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(PROJECT_DIR)/build/build/iOS/universal/lib", + "$(PROJECT_DIR)/build/build/Catalyst/universal/lib", + ); + MACH_O_TYPE = mh_dylib; MODULEMAP_FILE = "$(PROJECT_DIR)/SGPlayer/module.modulemap"; PRODUCT_BUNDLE_IDENTIFIER = com.libobjc.SGPlayer.iOS; PRODUCT_NAME = SGPlayer; @@ -2602,8 +3138,91 @@ INFOPLIST_FILE = SGPlayer/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = "$(PROJECT_DIR)/build/build/iOS/universal/lib"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(PROJECT_DIR)/build/build/iOS/universal/lib", + "$(PROJECT_DIR)/build/build/Catalyst/universal/lib", + ); + MACH_O_TYPE = mh_dylib; + MODULEMAP_FILE = "$(PROJECT_DIR)/SGPlayer/module.modulemap"; + PRODUCT_BUNDLE_IDENTIFIER = com.libobjc.SGPlayer.iOS; + PRODUCT_NAME = SGPlayer; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + B0198808231AAB3900EC1C47 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_WARN_ASSIGN_ENUM = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_SEMICOLON_BEFORE_METHOD_BODY = YES; + CODE_SIGN_IDENTITY = ""; + COMBINE_HIDPI_IMAGES = YES; + DEFINES_MODULE = NO; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_VERSION = A; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/build/build/iOS/universal/include"; + INFOPLIST_FILE = SGPlayer/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = "$(PROJECT_DIR)/build/build/Catalyst/universal/lib"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "$(PROJECT_DIR)/SGPlayer/module.modulemap"; + PRODUCT_BUNDLE_IDENTIFIER = com.libobjc.SGPlayer.iOS; + PRODUCT_NAME = SGPlayer; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + B0198809231AAB3900EC1C47 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_WARN_ASSIGN_ENUM = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_SEMICOLON_BEFORE_METHOD_BODY = YES; + CODE_SIGN_IDENTITY = ""; + COMBINE_HIDPI_IMAGES = YES; + DEFINES_MODULE = NO; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_VERSION = A; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/build/build/iOS/universal/include"; + INFOPLIST_FILE = SGPlayer/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = "$(PROJECT_DIR)/build/build/Catalyst/universal/lib"; MACH_O_TYPE = staticlib; MODULEMAP_FILE = "$(PROJECT_DIR)/SGPlayer/module.modulemap"; PRODUCT_BUNDLE_IDENTIFIER = com.libobjc.SGPlayer.iOS; @@ -2653,6 +3272,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + B0198807231AAB3900EC1C47 /* Build configuration list for PBXNativeTarget "SGPlayer Catalyst" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B0198808231AAB3900EC1C47 /* Debug */, + B0198809231AAB3900EC1C47 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = 9CEFA6CD1E7122BF00835CAB /* Project object */; diff --git a/SGPlayer.xcodeproj/xcshareddata/xcschemes/SGPlayer Catalyst.xcscheme b/SGPlayer.xcodeproj/xcshareddata/xcschemes/SGPlayer Catalyst.xcscheme new file mode 100644 index 00000000..eb52d8bf --- /dev/null +++ b/SGPlayer.xcodeproj/xcshareddata/xcschemes/SGPlayer Catalyst.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SGPlayer/Classes/Catalyst.h b/SGPlayer/Classes/Catalyst.h new file mode 100644 index 00000000..b8673c96 --- /dev/null +++ b/SGPlayer/Classes/Catalyst.h @@ -0,0 +1,159 @@ +// +// Catalyst.h +// SGPlayer +// +// Created by Steven Troughton-Smith on 31/08/2019. +// Copyright © 2019 single. All rights reserved. +// + +#ifndef Catalyst_h +#define Catalyst_h + +#define GLK_INLINE static __inline__ + +#if defined(__STRICT_ANSI__) +struct _GLKMatrix4 +{ + float m[16]; +} __attribute__((aligned(16))); +typedef struct _GLKMatrix4 GLKMatrix4; +#else +union _GLKMatrix4 +{ + struct + { + float m00, m01, m02, m03; + float m10, m11, m12, m13; + float m20, m21, m22, m23; + float m30, m31, m32, m33; + }; + float m[16]; +} __attribute__((aligned(16))); +typedef union _GLKMatrix4 GLKMatrix4; +#endif + +GLK_INLINE GLKMatrix4 GLKMatrix4Multiply(GLKMatrix4 matrixLeft, GLKMatrix4 matrixRight) +{ +#if defined(GLK_SSE3_INTRINSICS) + + const __m128 l0 = _mm_load_ps(&matrixLeft.m[0]); + const __m128 l1 = _mm_load_ps(&matrixLeft.m[4]); + const __m128 l2 = _mm_load_ps(&matrixLeft.m[8]); + const __m128 l3 = _mm_load_ps(&matrixLeft.m[12]); + + const __m128 r0 = _mm_load_ps(&matrixRight.m[0]); + const __m128 r1 = _mm_load_ps(&matrixRight.m[4]); + const __m128 r2 = _mm_load_ps(&matrixRight.m[8]); + const __m128 r3 = _mm_load_ps(&matrixRight.m[12]); + + const __m128 m0 = l0 * _mm_shuffle_ps(r0, r0, _MM_SHUFFLE(0, 0, 0, 0)) + + l1 * _mm_shuffle_ps(r0, r0, _MM_SHUFFLE(1, 1, 1, 1)) + + l2 * _mm_shuffle_ps(r0, r0, _MM_SHUFFLE(2, 2, 2, 2)) + + l3 * _mm_shuffle_ps(r0, r0, _MM_SHUFFLE(3, 3, 3, 3)); + + const __m128 m1 = l0 * _mm_shuffle_ps(r1, r1, _MM_SHUFFLE(0, 0, 0, 0)) + + l1 * _mm_shuffle_ps(r1, r1, _MM_SHUFFLE(1, 1, 1, 1)) + + l2 * _mm_shuffle_ps(r1, r1, _MM_SHUFFLE(2, 2, 2, 2)) + + l3 * _mm_shuffle_ps(r1, r1, _MM_SHUFFLE(3, 3, 3, 3)); + + const __m128 m2 = l0 * _mm_shuffle_ps(r2, r2, _MM_SHUFFLE(0, 0, 0, 0)) + + l1 * _mm_shuffle_ps(r2, r2, _MM_SHUFFLE(1, 1, 1, 1)) + + l2 * _mm_shuffle_ps(r2, r2, _MM_SHUFFLE(2, 2, 2, 2)) + + l3 * _mm_shuffle_ps(r2, r2, _MM_SHUFFLE(3, 3, 3, 3)); + + const __m128 m3 = l0 * _mm_shuffle_ps(r3, r3, _MM_SHUFFLE(0, 0, 0, 0)) + + l1 * _mm_shuffle_ps(r3, r3, _MM_SHUFFLE(1, 1, 1, 1)) + + l2 * _mm_shuffle_ps(r3, r3, _MM_SHUFFLE(2, 2, 2, 2)) + + l3 * _mm_shuffle_ps(r3, r3, _MM_SHUFFLE(3, 3, 3, 3)); + + GLKMatrix4 m; + _mm_store_ps(&m.m[0], m0); + _mm_store_ps(&m.m[4], m1); + _mm_store_ps(&m.m[8], m2); + _mm_store_ps(&m.m[12], m3); + return m; + +#else + GLKMatrix4 m; + + m.m[0] = matrixLeft.m[0] * matrixRight.m[0] + matrixLeft.m[4] * matrixRight.m[1] + matrixLeft.m[8] * matrixRight.m[2] + matrixLeft.m[12] * matrixRight.m[3]; + m.m[4] = matrixLeft.m[0] * matrixRight.m[4] + matrixLeft.m[4] * matrixRight.m[5] + matrixLeft.m[8] * matrixRight.m[6] + matrixLeft.m[12] * matrixRight.m[7]; + m.m[8] = matrixLeft.m[0] * matrixRight.m[8] + matrixLeft.m[4] * matrixRight.m[9] + matrixLeft.m[8] * matrixRight.m[10] + matrixLeft.m[12] * matrixRight.m[11]; + m.m[12] = matrixLeft.m[0] * matrixRight.m[12] + matrixLeft.m[4] * matrixRight.m[13] + matrixLeft.m[8] * matrixRight.m[14] + matrixLeft.m[12] * matrixRight.m[15]; + + m.m[1] = matrixLeft.m[1] * matrixRight.m[0] + matrixLeft.m[5] * matrixRight.m[1] + matrixLeft.m[9] * matrixRight.m[2] + matrixLeft.m[13] * matrixRight.m[3]; + m.m[5] = matrixLeft.m[1] * matrixRight.m[4] + matrixLeft.m[5] * matrixRight.m[5] + matrixLeft.m[9] * matrixRight.m[6] + matrixLeft.m[13] * matrixRight.m[7]; + m.m[9] = matrixLeft.m[1] * matrixRight.m[8] + matrixLeft.m[5] * matrixRight.m[9] + matrixLeft.m[9] * matrixRight.m[10] + matrixLeft.m[13] * matrixRight.m[11]; + m.m[13] = matrixLeft.m[1] * matrixRight.m[12] + matrixLeft.m[5] * matrixRight.m[13] + matrixLeft.m[9] * matrixRight.m[14] + matrixLeft.m[13] * matrixRight.m[15]; + + m.m[2] = matrixLeft.m[2] * matrixRight.m[0] + matrixLeft.m[6] * matrixRight.m[1] + matrixLeft.m[10] * matrixRight.m[2] + matrixLeft.m[14] * matrixRight.m[3]; + m.m[6] = matrixLeft.m[2] * matrixRight.m[4] + matrixLeft.m[6] * matrixRight.m[5] + matrixLeft.m[10] * matrixRight.m[6] + matrixLeft.m[14] * matrixRight.m[7]; + m.m[10] = matrixLeft.m[2] * matrixRight.m[8] + matrixLeft.m[6] * matrixRight.m[9] + matrixLeft.m[10] * matrixRight.m[10] + matrixLeft.m[14] * matrixRight.m[11]; + m.m[14] = matrixLeft.m[2] * matrixRight.m[12] + matrixLeft.m[6] * matrixRight.m[13] + matrixLeft.m[10] * matrixRight.m[14] + matrixLeft.m[14] * matrixRight.m[15]; + + m.m[3] = matrixLeft.m[3] * matrixRight.m[0] + matrixLeft.m[7] * matrixRight.m[1] + matrixLeft.m[11] * matrixRight.m[2] + matrixLeft.m[15] * matrixRight.m[3]; + m.m[7] = matrixLeft.m[3] * matrixRight.m[4] + matrixLeft.m[7] * matrixRight.m[5] + matrixLeft.m[11] * matrixRight.m[6] + matrixLeft.m[15] * matrixRight.m[7]; + m.m[11] = matrixLeft.m[3] * matrixRight.m[8] + matrixLeft.m[7] * matrixRight.m[9] + matrixLeft.m[11] * matrixRight.m[10] + matrixLeft.m[15] * matrixRight.m[11]; + m.m[15] = matrixLeft.m[3] * matrixRight.m[12] + matrixLeft.m[7] * matrixRight.m[13] + matrixLeft.m[11] * matrixRight.m[14] + matrixLeft.m[15] * matrixRight.m[15]; + + return m; +#endif +} + + +extern const GLKMatrix4 GLKMatrix4Identity; + +GLK_INLINE GLKMatrix4 GLKMatrix4MakeZRotation(float radians) +{ + float cos = cosf(radians); + float sin = sinf(radians); + + GLKMatrix4 m = { cos, sin, 0.0f, 0.0f, + -sin, cos, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f }; + + return m; +} + +GLK_INLINE GLKMatrix4 GLKMatrix4RotateZ(GLKMatrix4 matrix, float radians); +GLK_INLINE GLKMatrix4 GLKMatrix4RotateZ(GLKMatrix4 matrix, float radians) +{ + GLKMatrix4 rm = GLKMatrix4MakeZRotation(radians); + return GLKMatrix4Multiply(matrix, rm); +} + + +GLK_INLINE GLKMatrix4 GLKMatrix4Transpose(GLKMatrix4 matrix) +{ + GLKMatrix4 m = { matrix.m[0], matrix.m[4], matrix.m[8], matrix.m[12], + matrix.m[1], matrix.m[5], matrix.m[9], matrix.m[13], + matrix.m[2], matrix.m[6], matrix.m[10], matrix.m[14], + matrix.m[3], matrix.m[7], matrix.m[11], matrix.m[15] }; + return m; +} + + +GLK_INLINE GLKMatrix4 GLKMatrix4MakeYRotation(float radians) +{ + float cos = cosf(radians); + float sin = sinf(radians); + + GLKMatrix4 m = { cos, 0.0f, -sin, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + sin, 0.0f, cos, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f }; + + return m; +} + +GLK_INLINE GLKMatrix4 GLKMatrix4RotateY(GLKMatrix4 matrix, float radians) +{ + GLKMatrix4 rm = GLKMatrix4MakeYRotation(radians); + return GLKMatrix4Multiply(matrix, rm); +} + +GLK_INLINE float GLKMathDegreesToRadians(float degrees) { return degrees * (M_PI / 180); }; + + +#endif /* Catalyst_h */ diff --git a/SGPlayer/Classes/Core/SGAudio/SGAudioPlayer.m b/SGPlayer/Classes/Core/SGAudio/SGAudioPlayer.m index a719d7f3..e9745846 100644 --- a/SGPlayer/Classes/Core/SGAudio/SGAudioPlayer.m +++ b/SGPlayer/Classes/Core/SGAudio/SGAudioPlayer.m @@ -29,8 +29,8 @@ + (AudioComponentDescription)mixerACD { AudioComponentDescription acd; acd.componentType = kAudioUnitType_Mixer; -#if SGPLATFORM_TARGET_OS_MAC - acd.componentSubType = kAudioUnitSubType_StereoMixer; +#if SGPLATFORM_TARGET_OS_MAC || TARGET_OS_MACCATALYST + acd.componentSubType = kAudioUnitSubType_SpatialMixer; #elif SGPLATFORM_TARGET_OS_IPHONE_OR_TV acd.componentSubType = kAudioUnitSubType_MultiChannelMixer; #endif diff --git a/SGPlayer/Classes/Core/SGFFmpeg/SGFFmpeg.m b/SGPlayer/Classes/Core/SGFFmpeg/SGFFmpeg.m index c6c49da5..f2d82951 100644 --- a/SGPlayer/Classes/Core/SGFFmpeg/SGFFmpeg.m +++ b/SGPlayer/Classes/Core/SGFFmpeg/SGFFmpeg.m @@ -10,8 +10,8 @@ static void SGFFmpegLogCallback(void * context, int level, const char * format, va_list args) { -// NSString * message = [[NSString alloc] initWithFormat:[NSString stringWithUTF8String:format] arguments:args]; -// NSLog(@"SGFFLog : %@", message); + NSString * message = [[NSString alloc] initWithFormat:[NSString stringWithUTF8String:format] arguments:args]; + NSLog(@"> SGFFLog : %@", message); } void SGFFmpegSetupIfNeeded(void) diff --git a/SGPlayer/Classes/Core/SGMetal/SGMetalProjection.h b/SGPlayer/Classes/Core/SGMetal/SGMetalProjection.h index 810ca87d..f811c966 100644 --- a/SGPlayer/Classes/Core/SGMetal/SGMetalProjection.h +++ b/SGPlayer/Classes/Core/SGMetal/SGMetalProjection.h @@ -7,7 +7,11 @@ // #import +#if TARGET_OS_MACCATALYST +#import "Catalyst.h" +#else #import +#endif @interface SGMetalProjection : NSObject diff --git a/SGPlayer/Classes/Core/SGMetal/SGMetalRenderPipelinePool.m b/SGPlayer/Classes/Core/SGMetal/SGMetalRenderPipelinePool.m index b71409d9..b384039e 100644 --- a/SGPlayer/Classes/Core/SGMetal/SGMetalRenderPipelinePool.m +++ b/SGPlayer/Classes/Core/SGMetal/SGMetalRenderPipelinePool.m @@ -12,6 +12,9 @@ #import "SGMetalBGRARenderPipeline.h" #import "SGPLFTargets.h" +#if TARGET_OS_MACCATALYST +#import "SGMetalShader_macOS.h" +#else #if SGPLATFORM_TARGET_OS_IPHONE #import "SGMetalShader_iOS.h" #elif SGPLATFORM_TARGET_OS_TV @@ -19,6 +22,7 @@ #elif SGPLATFORM_TARGET_OS_MAC #import "SGMetalShader_macOS.h" #endif +#endif @interface SGMetalRenderPipelinePool () @@ -36,8 +40,8 @@ - (instancetype)initWithDevice:(id)device { if (self = [super init]) { self.device = device; - self.library = [device newLibraryWithData:dispatch_data_create(metallib, sizeof(metallib), dispatch_get_global_queue(0, 0), ^{}) error:NULL]; - } + self.library = [device newLibraryWithData:dispatch_data_create(metallib, sizeof(metallib), dispatch_get_global_queue(0, 0), ^{}) error:NULL]; + } return self; } diff --git a/SGPlayer/Classes/Core/SGMetal/SGMetalYUVRenderPipeline.m b/SGPlayer/Classes/Core/SGMetal/SGMetalYUVRenderPipeline.m index 8260a26a..1de90369 100644 --- a/SGPlayer/Classes/Core/SGMetal/SGMetalYUVRenderPipeline.m +++ b/SGPlayer/Classes/Core/SGMetal/SGMetalYUVRenderPipeline.m @@ -13,11 +13,26 @@ @implementation SGMetalYUVRenderPipeline - (instancetype)initWithDevice:(id)device library:(id)library { if (self = [super initWithDevice:device library:library]) { + + NSError *error = nil; + self.descriptor = [[MTLRenderPipelineDescriptor alloc] init]; - self.descriptor.vertexFunction = [self.library newFunctionWithName:@"vertexShader"]; - self.descriptor.fragmentFunction = [self.library newFunctionWithName:@"fragmentShaderYUV"]; - self.descriptor.colorAttachments[0].pixelFormat = MTLPixelFormatBGRA8Unorm; - self.state = [self.device newRenderPipelineStateWithDescriptor:self.descriptor error:nil]; + self.descriptor.vertexFunction = [self.library newFunctionWithName:@"vertexShader" constantValues:[MTLFunctionConstantValues new] error:&error]; + + if (error) + NSLog(@"ERROR: %@", error.localizedDescription); + + self.descriptor.fragmentFunction = [self.library newFunctionWithName:@"fragmentShaderYUV" constantValues:[MTLFunctionConstantValues new] error:&error]; + + if (error) + NSLog(@"ERROR: %@", error.localizedDescription); + + self.descriptor.colorAttachments[0].pixelFormat = MTLPixelFormatBGRA8Unorm; + self.state = [self.device newRenderPipelineStateWithDescriptor:self.descriptor error:&error]; + + if (error) + NSLog(@"ERROR: %@", error.localizedDescription); + } return self; } diff --git a/SGPlayer/Classes/Core/SGOption/SGDecoderOptions.m b/SGPlayer/Classes/Core/SGOption/SGDecoderOptions.m index 07d47644..b3d906ac 100644 --- a/SGPlayer/Classes/Core/SGOption/SGDecoderOptions.m +++ b/SGPlayer/Classes/Core/SGOption/SGDecoderOptions.m @@ -26,7 +26,7 @@ - (id)copyWithZone:(NSZone *)zone - (instancetype)init { if (self = [super init]) { - self->_options = nil; + self->_options = @{@"sn":[NSNull null]}; self->_threadsAuto = YES; self->_refcountedFrames = YES; self->_hardwareDecodeH264 = YES; diff --git a/SGPlayer/Classes/Core/SGOption/SGDemuxerOptions.m b/SGPlayer/Classes/Core/SGOption/SGDemuxerOptions.m index cea0f898..8012fdb0 100644 --- a/SGPlayer/Classes/Core/SGOption/SGDemuxerOptions.m +++ b/SGPlayer/Classes/Core/SGOption/SGDemuxerOptions.m @@ -20,9 +20,13 @@ - (id)copyWithZone:(NSZone *)zone - (instancetype)init { if (self = [super init]) { - self->_options = @{@"reconnect" : @(1), + self->_options = @{@"timeout" : @(20 * 1000 * 1000), + @"reconnect" : @(1), @"user-agent" : @"SGPlayer", - @"timeout" : @(20 * 1000 * 1000)}; +// @"headers": @"Connection: Keep-Alive\r\n", +// @"sn" : @"", +// @"vf" : @"scale=w=1920:h=1080:force_original_aspect_ratio=decrease" + }; } return self; } diff --git a/SGPlayer/Classes/Core/SGPlatform/SGPLFTargets.h b/SGPlayer/Classes/Core/SGPlatform/SGPLFTargets.h index a98ce3bb..b111e268 100644 --- a/SGPlayer/Classes/Core/SGPlatform/SGPLFTargets.h +++ b/SGPlayer/Classes/Core/SGPlatform/SGPLFTargets.h @@ -12,7 +12,7 @@ #import #define SGPLATFORM_TARGET_OS_MAC TARGET_OS_OSX -#define SGPLATFORM_TARGET_OS_IPHONE TARGET_OS_IOS +#define SGPLATFORM_TARGET_OS_IPHONE TARGET_OS_IOS||TARGET_OS_MACCATALYST #define SGPLATFORM_TARGET_OS_TV TARGET_OS_TV #define SGPLATFORM_TARGET_OS_MAC_OR_IPHONE (SGPLATFORM_TARGET_OS_MAC || SGPLATFORM_TARGET_OS_IPHONE) diff --git a/SGPlayer/Classes/Core/SGVR/SGMotionSensor.h b/SGPlayer/Classes/Core/SGVR/SGMotionSensor.h index 3eb32c37..ebbaf593 100644 --- a/SGPlayer/Classes/Core/SGVR/SGMotionSensor.h +++ b/SGPlayer/Classes/Core/SGVR/SGMotionSensor.h @@ -7,13 +7,18 @@ // #import + +#if TARGET_OS_MACCATALYST +#import "Catalyst.h" +#else #import +#endif + @interface SGMotionSensor : NSObject @property (nonatomic, readonly) BOOL ready; @property (nonatomic, readonly) GLKMatrix4 matrix; - - (void)start; - (void)stop; diff --git a/SGPlayer/Classes/Core/SGVR/SGMotionSensor.m b/SGPlayer/Classes/Core/SGVR/SGMotionSensor.m index 47fecd35..d7baa19a 100644 --- a/SGPlayer/Classes/Core/SGVR/SGMotionSensor.m +++ b/SGPlayer/Classes/Core/SGVR/SGMotionSensor.m @@ -15,8 +15,9 @@ @interface SGMotionSensor () @property (nonatomic) GLKMatrix4 deviceToDisplay; @property (nonatomic) GLKMatrix4 worldToInertialReferenceFrame; @property (nonatomic, strong) CMMotionManager * manager; +#if !TARGET_OS_MACCATALYST @property (nonatomic) UIInterfaceOrientation orientation; - +#endif @end @implementation SGMotionSensor @@ -27,6 +28,7 @@ - (instancetype)init self.deviceToDisplay = GLKMatrix4Identity; self.manager = [[CMMotionManager alloc] init]; self.worldToInertialReferenceFrame = [self getRotateEulerMatrixX:-90 Y:0 Z:90]; + #if !TARGET_OS_MACCATALYST switch ([UIApplication sharedApplication].statusBarOrientation) { case UIInterfaceOrientationPortrait: case UIInterfaceOrientationUnknown: @@ -40,10 +42,12 @@ - (instancetype)init self.defalutRotateY = 90; break; } + #endif } return self; } +#if !TARGET_OS_MACCATALYST - (void)setOrientation:(UIInterfaceOrientation)orientation { if (_orientation != orientation) { @@ -65,6 +69,7 @@ - (void)setOrientation:(UIInterfaceOrientation)orientation } } } +#endif - (BOOL)ready { @@ -98,7 +103,9 @@ - (GLKMatrix4)matrix if (!motion) { return GLKMatrix4Identity; } + #if !TARGET_OS_MACCATALYST self.orientation = [UIApplication sharedApplication].statusBarOrientation; +#endif CMRotationMatrix rotationMatrix = motion.attitude.rotationMatrix; GLKMatrix4 inertialReferenceFrameToDevice = GLKMatrix4Transpose([self glMatrixFromRotationMatrix:rotationMatrix]); GLKMatrix4 worldToDevice = GLKMatrix4Multiply(inertialReferenceFrameToDevice, self.worldToInertialReferenceFrame); diff --git a/SGPlayer/Classes/Core/SGVR/SGVRProjection.h b/SGPlayer/Classes/Core/SGVR/SGVRProjection.h index 111b7e6b..822cfca5 100644 --- a/SGPlayer/Classes/Core/SGVR/SGVRProjection.h +++ b/SGPlayer/Classes/Core/SGVR/SGVRProjection.h @@ -7,7 +7,14 @@ // #import + +#if TARGET_OS_MACCATALYST +#import "Catalyst.h" +#else #import +#endif + + #import "SGVRViewport.h" @interface SGVRProjection : NSObject @@ -17,6 +24,4 @@ - (BOOL)ready; - (BOOL)matrixWithAspect:(Float64)aspect matrix1:(GLKMatrix4 *)matrix1; - (BOOL)matrixWithAspect:(Float64)aspect matrix1:(GLKMatrix4 *)matrix1 matrix2:(GLKMatrix4 *)matrix2; - @end - diff --git a/SGPlayer/Classes/Core/SGVR/SGVRProjection.m b/SGPlayer/Classes/Core/SGVR/SGVRProjection.m index 05d1cbfb..92f1e129 100644 --- a/SGPlayer/Classes/Core/SGVR/SGVRProjection.m +++ b/SGPlayer/Classes/Core/SGVR/SGVRProjection.m @@ -8,13 +8,15 @@ #import "SGVRProjection.h" #import "SGPLFTargets.h" -#if SGPLATFORM_TARGET_OS_IPHONE +#if SGPLATFORM_TARGET_OS_IPHONE && !TARGET_OS_MACCATALYST #import "SGMotionSensor.h" #endif +const GLKMatrix4 GLKMatrix4Identity = { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f }; + @interface SGVRProjection () -#if SGPLATFORM_TARGET_OS_IPHONE +#if SGPLATFORM_TARGET_OS_IPHONE && !TARGET_OS_MACCATALYST @property (nonatomic, strong) SGMotionSensor * sensor; #endif @property (nonatomic) GLKMatrix4 lastMatrix11; @@ -42,7 +44,7 @@ - (void)dealloc - (void)start { -#if SGPLATFORM_TARGET_OS_IPHONE +#if SGPLATFORM_TARGET_OS_IPHONE && !TARGET_OS_MACCATALYST if (!self.sensor) { self.sensor = [[SGMotionSensor alloc] init]; [self.sensor start]; @@ -52,7 +54,7 @@ - (void)start - (void)stop { -#if SGPLATFORM_TARGET_OS_IPHONE +#if SGPLATFORM_TARGET_OS_IPHONE && !TARGET_OS_MACCATALYST if (self.sensor) { [self.sensor stop]; self.sensor = nil; @@ -64,7 +66,7 @@ - (void)stop - (BOOL)ready { -#if SGPLATFORM_TARGET_OS_IPHONE +#if SGPLATFORM_TARGET_OS_IPHONE && !TARGET_OS_MACCATALYST if (self.viewport.sensorEnable) { [self start]; return self.sensor.ready; @@ -75,7 +77,10 @@ - (BOOL)ready - (BOOL)matrixWithAspect:(Float64)aspect matrix1:(GLKMatrix4 *)matrix1 { -#if SGPLATFORM_TARGET_OS_IPHONE +#if TARGET_OS_MACCATALYST + return NO; +#else +#if SGPLATFORM_TARGET_OS_IPHONE && !TARGET_OS_MACCATALYST if (self.viewport.sensorEnable) { [self start]; if (!self.sensor.ready) { @@ -103,10 +108,14 @@ - (BOOL)matrixWithAspect:(Float64)aspect matrix1:(GLKMatrix4 *)matrix1 self.lastMatrix1Available = YES; self.lastMatrix11 = modelViewProjectionMatrix; return YES; +#endif } - (BOOL)matrixWithAspect:(Float64)aspect matrix1:(GLKMatrix4 *)matrix1 matrix2:(GLKMatrix4 *)matrix2 { + #if TARGET_OS_MACCATALYST + return NO; + #else #if SGPLATFORM_TARGET_OS_IPHONE if (self.viewport.sensorEnable) { [self start]; @@ -141,6 +150,7 @@ - (BOOL)matrixWithAspect:(Float64)aspect matrix1:(GLKMatrix4 *)matrix1 matrix2:( self.lastMatrix21 = modelViewProjectionMatrix1; self.lastMatrix22 = modelViewProjectionMatrix2; return YES; +#endif } @end diff --git a/demo/demo-ios/demo-ios.xcodeproj/project.pbxproj b/demo/demo-ios/demo-ios.xcodeproj/project.pbxproj index 5411a460..91643d8c 100644 --- a/demo/demo-ios/demo-ios.xcodeproj/project.pbxproj +++ b/demo/demo-ios/demo-ios.xcodeproj/project.pbxproj @@ -21,12 +21,27 @@ 9C886BBA1E78F13E00F2CFD1 /* libiconv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C886BB91E78F13E00F2CFD1 /* libiconv.tbd */; }; 9C886BBC1E78F14300F2CFD1 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C886BBB1E78F14300F2CFD1 /* libz.tbd */; }; 9C886BBE1E78F14700F2CFD1 /* libbz2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C886BBD1E78F14700F2CFD1 /* libbz2.tbd */; }; - 9C8A0E342190A687006F7AE8 /* SGPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C9824A41FAB073B00142215 /* SGPlayer.framework */; }; 9CD90232230BDF1900A358AA /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CD90231230BDF1900A358AA /* AVFoundation.framework */; }; 9CD90233230BDF2200A358AA /* VideoToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C3DD16B1E8FBD420003B17A /* VideoToolbox.framework */; }; 9CD90234230BDF2C00A358AA /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C3DD16D1E8FBD4A0003B17A /* AudioToolbox.framework */; }; + EACF58D5238E9DB400F3659A /* SGPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EACF58D4238E9DB400F3659A /* SGPlayer.framework */; }; + EACF58D6238E9DB400F3659A /* SGPlayer.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = EACF58D4238E9DB400F3659A /* SGPlayer.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; /* End PBXBuildFile section */ +/* Begin PBXCopyFilesBuildPhase section */ + EACF58D7238E9DB400F3659A /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + EACF58D6238E9DB400F3659A /* SGPlayer.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ 9C02F64E1E79293A00932489 /* SGPlayViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SGPlayViewController.h; sourceTree = ""; }; 9C02F6501E79293A00932489 /* SGPlayViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SGPlayViewController.xib; sourceTree = ""; }; @@ -63,6 +78,8 @@ 9CA86E891E8757B500E4A8B1 /* SGPlatform.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SGPlatform.framework; path = "../../Vendors/SGPlatform/build/Debug-iphoneos/SGPlatform.framework"; sourceTree = ""; }; 9CB695132190680E00196E54 /* SGPlayer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SGPlayer.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9CD90231230BDF1900A358AA /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; + EACF58D3238E9D8F00F3659A /* SGPlayer.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = SGPlayer.entitlements; sourceTree = ""; }; + EACF58D4238E9DB400F3659A /* SGPlayer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SGPlayer.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -70,11 +87,11 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9C8A0E342190A687006F7AE8 /* SGPlayer.framework in Frameworks */, 9CD90232230BDF1900A358AA /* AVFoundation.framework in Frameworks */, 9CD90234230BDF2C00A358AA /* AudioToolbox.framework in Frameworks */, 9CD90233230BDF2200A358AA /* VideoToolbox.framework in Frameworks */, 9C886BBA1E78F13E00F2CFD1 /* libiconv.tbd in Frameworks */, + EACF58D5238E9DB400F3659A /* SGPlayer.framework in Frameworks */, 9C886BBE1E78F14700F2CFD1 /* libbz2.tbd in Frameworks */, 9C886BBC1E78F14300F2CFD1 /* libz.tbd in Frameworks */, ); @@ -114,6 +131,7 @@ 9C886B951E78EC9F00F2CFD1 /* demo-ios */ = { isa = PBXGroup; children = ( + EACF58D3238E9D8F00F3659A /* SGPlayer.entitlements */, 9C886B991E78EC9F00F2CFD1 /* AppDelegate.h */, 9C886B9A1E78EC9F00F2CFD1 /* AppDelegate.m */, 9C886B9C1E78EC9F00F2CFD1 /* SGListViewController.h */, @@ -143,6 +161,7 @@ 9C886BAE1E78ECE500F2CFD1 /* Frameworks */ = { isa = PBXGroup; children = ( + EACF58D4238E9DB400F3659A /* SGPlayer.framework */, 9CD90231230BDF1900A358AA /* AVFoundation.framework */, 9CB695132190680E00196E54 /* SGPlayer.framework */, 9C329AA72005E11500252B10 /* SGAVPlayer.framework */, @@ -175,6 +194,7 @@ 9C886B8F1E78EC9F00F2CFD1 /* Sources */, 9C886B901E78EC9F00F2CFD1 /* Frameworks */, 9C886B911E78EC9F00F2CFD1 /* Resources */, + EACF58D7238E9DB400F3659A /* Embed Frameworks */, ); buildRules = ( ); @@ -196,7 +216,7 @@ TargetAttributes = { 9C886B921E78EC9F00F2CFD1 = { CreatedOnToolsVersion = 8.2.1; - DevelopmentTeam = 79WDBYQ4TC; + DevelopmentTeam = 4C34FT6ABU; ProvisioningStyle = Automatic; SystemCapabilities = { com.apple.BackgroundModes = { @@ -385,9 +405,11 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = "demo-ios/SGPlayer.entitlements"; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 79WDBYQ4TC; + DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = YES; + DEVELOPMENT_TEAM = 4C34FT6ABU; INFOPLIST_FILE = "demo-ios/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; @@ -398,6 +420,8 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.libobjc.SGPlayer.demo-ios"; PRODUCT_NAME = SGPlayer; PROVISIONING_PROFILE_SPECIFIER = ""; + SUPPORTS_MACCATALYST = YES; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; @@ -405,9 +429,11 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = "demo-ios/SGPlayer.entitlements"; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 79WDBYQ4TC; + DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = YES; + DEVELOPMENT_TEAM = 4C34FT6ABU; INFOPLIST_FILE = "demo-ios/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; @@ -418,6 +444,8 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.libobjc.SGPlayer.demo-ios"; PRODUCT_NAME = SGPlayer; PROVISIONING_PROFILE_SPECIFIER = ""; + SUPPORTS_MACCATALYST = YES; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; diff --git a/demo/demo-ios/demo-ios/SGPlayViewController.m b/demo/demo-ios/demo-ios/SGPlayViewController.m index c98af966..67a3fb24 100644 --- a/demo/demo-ios/demo-ios/SGPlayViewController.m +++ b/demo/demo-ios/demo-ios/SGPlayViewController.m @@ -42,7 +42,8 @@ - (void)viewDidLoad self.player.videoRenderer.view = self.view; self.player.videoRenderer.displayMode = self.videoItem.displayMode; - [self.player replaceWithAsset:self.videoItem.asset]; + + [self.player replaceWithAsset:self.videoItem.asset]; [self.player play]; } @@ -50,6 +51,8 @@ - (void)viewDidLoad - (void)infoChanged:(NSNotification *)notification { + + NSLog(@"UI = %@", notification.userInfo); SGTimeInfo time = [SGPlayer timeInfoFromUserInfo:notification.userInfo]; SGStateInfo state = [SGPlayer stateInfoFromUserInfo:notification.userInfo]; SGInfoAction action = [SGPlayer infoActionFromUserInfo:notification.userInfo]; diff --git a/demo/demo-ios/demo-ios/SGPlayer.entitlements b/demo/demo-ios/demo-ios/SGPlayer.entitlements new file mode 100644 index 00000000..ee95ab7e --- /dev/null +++ b/demo/demo-ios/demo-ios/SGPlayer.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.network.client + + + diff --git a/demo/demo-tvos/demo-tvos.xcodeproj/project.pbxproj b/demo/demo-tvos/demo-tvos.xcodeproj/project.pbxproj index 6d025460..3d69a909 100644 --- a/demo/demo-tvos/demo-tvos.xcodeproj/project.pbxproj +++ b/demo/demo-tvos/demo-tvos.xcodeproj/project.pbxproj @@ -19,6 +19,7 @@ 9C8637ED219047AE00D730EC /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C8637EC219047AE00D730EC /* libz.tbd */; }; 9C8637EF219047B400D730EC /* libiconv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C8637EE219047B400D730EC /* libiconv.tbd */; }; 9CD90238230BE08E00A358AA /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CD90237230BE08E00A358AA /* AVFoundation.framework */; }; + B0198812231B601000EC1C47 /* i-see-fire.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = B0198811231B601000EC1C47 /* i-see-fire.mp4 */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -39,6 +40,7 @@ 9C8637EC219047AE00D730EC /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; 9C8637EE219047B400D730EC /* libiconv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.tbd; path = usr/lib/libiconv.tbd; sourceTree = SDKROOT; }; 9CD90237230BE08E00A358AA /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; + B0198811231B601000EC1C47 /* i-see-fire.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; name = "i-see-fire.mp4"; path = "../../demo-assset/i-see-fire.mp4"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -108,6 +110,7 @@ isa = PBXGroup; children = ( 9C6901FF21901D3D00B546E3 /* Assets.xcassets */, + B0198811231B601000EC1C47 /* i-see-fire.mp4 */, 9C69020121901D3D00B546E3 /* Info.plist */, 9C69020221901D3D00B546E3 /* main.m */, ); @@ -173,6 +176,7 @@ files = ( 9C69020021901D3D00B546E3 /* Assets.xcassets in Resources */, 9C6901FE21901D3C00B546E3 /* Main.storyboard in Resources */, + B0198812231B601000EC1C47 /* i-see-fire.mp4 in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -318,7 +322,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = KAGR32AB25; + DEVELOPMENT_TEAM = 2ZDN69KUUV; INFOPLIST_FILE = "demo-tvos/Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", diff --git a/demo/demo-tvos/demo-tvos/ViewController.m b/demo/demo-tvos/demo-tvos/ViewController.m index 2799b766..1e838f57 100644 --- a/demo/demo-tvos/demo-tvos/ViewController.m +++ b/demo/demo-tvos/demo-tvos/ViewController.m @@ -18,10 +18,13 @@ @interface ViewController () @implementation ViewController -- (instancetype)init +- (instancetype)initWithCoder:(NSCoder *)coder { - if (self = [super init]) { + if (self = [super initWithCoder:coder]) { + self.player = [[SGPlayer alloc] init]; + + NSLog(@"player = %@", self.player); [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(infoChanged:) name:SGPlayerDidChangeInfosNotification object:self.player]; } return self; @@ -42,6 +45,7 @@ - (void)viewDidLoad self.player.videoRenderer.view = self.view; [self.player replaceWithAsset:asset]; [self.player play]; + NSLog(@"Loaded, play"); } #pragma mark - SGPlayer Notifications diff --git a/scripts/compile-ffmpeg.sh b/scripts/compile-ffmpeg.sh index 3d781330..0e6ea779 100755 --- a/scripts/compile-ffmpeg.sh +++ b/scripts/compile-ffmpeg.sh @@ -25,6 +25,7 @@ FF_ALL_ARCHS= FF_ALL_ARCHS_IOS="armv7 arm64 i386 x86_64" FF_ALL_ARCHS_TVOS="arm64 x86_64" FF_ALL_ARCHS_MACOS="x86_64" +FF_ALL_ARCHS_MACCATALYST="x86_64" FF_PLATFORM=$1 FF_ACTION=$2 @@ -127,8 +128,10 @@ elif [ "$FF_PLATFORM" = "tvOS" ]; then FF_ALL_ARCHS=$FF_ALL_ARCHS_TVOS elif [ "$FF_PLATFORM" = "macOS" ]; then FF_ALL_ARCHS=$FF_ALL_ARCHS_MACOS +elif [ "$FF_PLATFORM" = "Catalyst" ]; then + FF_ALL_ARCHS=$FF_ALL_ARCHS_MACCATALYST else - echo "You must specific an platform 'iOS, tvOS, macOS'.\n" + echo "You must specific an platform 'iOS, tvOS, macOS, Catalyst'.\n" exit 1 fi @@ -165,6 +168,9 @@ else echo " ---" echo " compile-ffmpeg.sh macOS build" echo " compile-ffmpeg.sh macOS clean" + echo " ---" + echo " compile-ffmpeg.sh Catalyst build" + echo " compile-ffmpeg.sh Catalyst clean" exit 1 fi diff --git a/scripts/compile-openssl.sh b/scripts/compile-openssl.sh index 27c443e7..60595e36 100755 --- a/scripts/compile-openssl.sh +++ b/scripts/compile-openssl.sh @@ -25,6 +25,7 @@ FF_ALL_ARCHS= FF_ALL_ARCHS_IOS="armv7 arm64 i386 x86_64" FF_ALL_ARCHS_TVOS="arm64 x86_64" FF_ALL_ARCHS_MACOS="x86_64" +FF_ALL_ARCHS_MACCATALYST="x86_64" FF_PLATFORM=$1 FF_ACTION=$2 @@ -76,8 +77,10 @@ elif [ "$FF_PLATFORM" = "tvOS" ]; then FF_ALL_ARCHS=$FF_ALL_ARCHS_TVOS elif [ "$FF_PLATFORM" = "macOS" ]; then FF_ALL_ARCHS=$FF_ALL_ARCHS_MACOS +elif [ "$FF_PLATFORM" = "Catalyst" ]; then + FF_ALL_ARCHS=$FF_ALL_ARCHS_MACCATALYST else - echo "You must specific an platform 'iOS, tvOS, macOS'.\n" + echo "You must specific an platform 'iOS, tvOS, macOS, Catalyst'.\n" exit 1 fi @@ -104,5 +107,8 @@ else echo " ---" echo " compile-openssl.sh macOS build" echo " compile-openssl.sh macOS clean" - exit 1 + echo " ---" + echo " compile-openssl.sh Catalyst build" + echo " compile-openssl.sh Catalyst clean" +exit 1 fi diff --git a/scripts/do-compile-ffmpeg.sh b/scripts/do-compile-ffmpeg.sh index 2a111b8e..33bb4f39 100755 --- a/scripts/do-compile-ffmpeg.sh +++ b/scripts/do-compile-ffmpeg.sh @@ -36,7 +36,7 @@ set -e # common defines FF_PLATFORM=$1 if [ -z "$FF_PLATFORM" ]; then - echo "You must specific an platform 'iOS, tvOS, macOS'.\n" + echo "You must specific an platform 'iOS, tvOS, macOS, Catalyst'.\n" exit 1 fi @@ -184,6 +184,18 @@ elif [ "$FF_PLATFORM" = "tvOS" ]; then echo "unknown architecture $FF_PLATFORM, $FF_ARCH"; exit 1 fi +elif [ "$FF_PLATFORM" = "Catalyst" ]; then + if [ "$FF_ARCH" = "x86_64" ]; then + FF_BUILD_NAME="ffmpeg-x86_64" + FF_BUILD_NAME_OPENSSL=openssl-x86_64 + FF_XCRUN_PLATFORM="iPhoneSimulator" + FF_XCRUN_OSVERSION="-target x86_64-apple-ios13.0-macabi -DTARGET_OS_MACCATALYST=1 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk" + FFMPEG_CFG_FLAGS="$FFMPEG_CFG_FLAGS $FFMPEG_CFG_FLAGS_INTEL" + else + echo "unknown architecture $FF_PLATFORM, $FF_ARCH"; + exit 1 + fi + else echo "unknown platform $FF_PLATFORM"; exit 1 @@ -240,6 +252,8 @@ if [ -f "${FFMPEG_DEP_OPENSSL_LIB}/libssl.a" ]; then FFMPEG_DEP_LIBS="$FFMPEG_CFLAGS -L${FFMPEG_DEP_OPENSSL_LIB} -lssl -lcrypto" fi +FFMPEG_CFG_FLAGS="$FFMPEG_CFG_FLAGS --enable-decoder=mpeg2video --enable-decoder=ac3 --enable-decoder=ac3_fixed --enable-decoder=dvbsub --enable-decoder=mp2 --enable-decoder=mp2float --enable-gpl --enable-nonfree" + #-------------------- echo "\n--------------------" echo "[*] configure" diff --git a/scripts/do-compile-openssl.sh b/scripts/do-compile-openssl.sh index 18ec83c7..5e26a924 100755 --- a/scripts/do-compile-openssl.sh +++ b/scripts/do-compile-openssl.sh @@ -52,7 +52,7 @@ esac # common defines FF_PLATFORM=$1 if [ -z "$FF_PLATFORM" ]; then - echo "You must specific an platform 'iOS, tvOS, macOS'.\n" + echo "You must specific an platform 'iOS, tvOS, macOS, Catalyst'.\n" exit 1 fi @@ -137,6 +137,16 @@ elif [ "$FF_PLATFORM" = "tvOS" ]; then echo "unknown architecture $FF_PLATFORM, $FF_ARCH"; exit 1 fi +elif [ "$FF_PLATFORM" = "Catalyst" ]; then + if [ "$FF_ARCH" = "x86_64" ]; then + FF_BUILD_NAME="openssl-x86_64" + FF_XCRUN_PLATFORM="iPhoneSimulator" + FF_XCRUN_OSVERSION="-DHAVE_FORK=0 -target x86_64-apple-ios13.0-macabi -DTARGET_OS_MACCATALYST=1 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk" + OPENSSL_CFG_FLAGS="darwin64-x86_64-cc $OPENSSL_CFG_FLAGS" + else + echo "unknown architecture $FF_PLATFORM, $FF_ARCH"; + exit 1 + fi else echo "unknown platform $FF_PLATFORM"; exit 1 diff --git a/scripts/init-ffmpeg.sh b/scripts/init-ffmpeg.sh index f7148623..a1ff293c 100755 --- a/scripts/init-ffmpeg.sh +++ b/scripts/init-ffmpeg.sh @@ -30,6 +30,7 @@ FF_ALL_ARCHS= FF_ALL_ARCHS_IOS="armv7 arm64 i386 x86_64" FF_ALL_ARCHS_TVOS="arm64 x86_64" FF_ALL_ARCHS_MACOS="x86_64" +FF_ALL_ARCHS_MACCATALYST="x86_64" FF_PLATFORM=$1 @@ -63,8 +64,10 @@ elif [ "$FF_PLATFORM" = "tvOS" ]; then FF_ALL_ARCHS=$FF_ALL_ARCHS_TVOS elif [ "$FF_PLATFORM" = "macOS" ]; then FF_ALL_ARCHS=$FF_ALL_ARCHS_MACOS +elif [ "$FF_PLATFORM" = "Catalyst" ]; then + FF_ALL_ARCHS=$FF_ALL_ARCHS_MACCATALYST else - echo "You must specific an platform 'iOS, tvOS, macOS'.\n" + echo "You must specific an platform 'iOS, tvOS, macOS, Catalyst'.\n" exit 1 fi diff --git a/scripts/init-openssl.sh b/scripts/init-openssl.sh index b0563ce1..d4f76363 100755 --- a/scripts/init-openssl.sh +++ b/scripts/init-openssl.sh @@ -27,6 +27,7 @@ FF_ALL_ARCHS= FF_ALL_ARCHS_IOS="armv7 arm64 i386 x86_64" FF_ALL_ARCHS_TVOS="arm64 x86_64" FF_ALL_ARCHS_MACOS="x86_64" +FF_ALL_ARCHS_MACCATALYST="x86_64" FF_PLATFORM=$1 @@ -57,8 +58,10 @@ elif [ "$FF_PLATFORM" = "tvOS" ]; then FF_ALL_ARCHS=$FF_ALL_ARCHS_TVOS elif [ "$FF_PLATFORM" = "macOS" ]; then FF_ALL_ARCHS=$FF_ALL_ARCHS_MACOS +elif [ "$FF_PLATFORM" = "Catalyst" ]; then + FF_ALL_ARCHS=$FF_ALL_ARCHS_MACCATALYST else - echo "You must specific an platform 'iOS, tvOS, macOS'.\n" + echo "You must specific an platform 'iOS, tvOS, macOS, Catalyst'.\n" exit 1 fi