diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index 0f635cbe..8efc4d1b 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -47,9 +47,9 @@ jobs: - run: brew install tree xcodegen - name: Download Pre Compiled Dependencies run: | - ./FFToolChain/main.sh install -p ios -l 'ass ffmpeg' - ./FFToolChain/main.sh install -p macos -l 'ass ffmpeg' - ./FFToolChain/main.sh install -p tvos -l 'ass ffmpeg' + ./FFToolChain/main.sh install -p ios -l 'ass ffmpeg8' + ./FFToolChain/main.sh install -p macos -l 'ass ffmpeg8' + ./FFToolChain/main.sh install -p tvos -l 'ass ffmpeg8' - name: Build iOS Framework run: ./examples/ios/build-framework.sh - name: Build macOS Framework diff --git a/FFToolChain b/FFToolChain index b7847f3b..4913c0c4 160000 --- a/FFToolChain +++ b/FFToolChain @@ -1 +1 @@ -Subproject commit b7847f3b362f605085e38a0169f870bf98d0845f +Subproject commit 4913c0c4079aafb92f5d81651a67a6f073a84331 diff --git a/FSPlayer-5.yml b/FSPlayer-5.yml new file mode 100644 index 00000000..1d28c76a --- /dev/null +++ b/FSPlayer-5.yml @@ -0,0 +1,302 @@ +name: FSPlayer +options: + bundleIdPrefix: com.debugly +targets: + FSPlayer-macOS: + platform: macOS + type: framework + deploymentTarget: 10.14 + preBuildScripts: + - script: cd ${MY_PROJECT_DIR}/ijkmedia/ijkplayer;sh version.sh ./ ijkversion.h + name: ijkversion.h + sources: + - path: ijkmedia + headerVisibility: project + excludes: + - "ijkplayer/version.sh" + - "ijksdl/ijksdl_extra_log.c" + - "ijkplayer/ijkversion.h" + - "ijkplayer/ijkavformat/ijkioandroidio.c" + - "ijkplayer/android/**/*.*" + - "ijksdl/android/**/*.*" + - "ijksdl/ffmpeg/ijksdl_vout_overlay_ffmpeg.[hc]" + - "ijksdl/ios/*.*" + - "wrapper/apple/*.*" + - "ijkplayer/ff_subtitle_preference.h" + - path: ijkmedia/ijkplayer/ff_subtitle_preference.h + headerVisibility: public + - path: ijkmedia/wrapper/apple + headerVisibility: public + settings: + PRODUCT_NAME: FSPlayer + MARKETING_VERSION: 1.0.7 + DEFINES_MODULE: YES + CLANG_WARN_DOCUMENTATION_COMMENTS: NO + MODULEMAP_FILE: "${MY_PROJECT_DIR}/module-macos.modulemap" + MY_PROJECT_DIR: "${MY_PROJECT_DIR}" + SWIFT_INCLUDE_PATHS: + - "${MY_PROJECT_DIR}/ijkmedia/wrapper/apple" + GENERATE_INFOPLIST_FILE: YES + GCC_PREPROCESSOR_DEFINITIONS: "$(inherited)" + MTL_LANGUAGE_REVISION: Metal20 + METAL_LIBRARY_OUTPUT_DIR: "${CONFIGURATION_BUILD_DIR}/FSPlayer.framework/Resources" + ALWAYS_SEARCH_USER_PATHS: YES + HEADER_SEARCH_PATHS: + - "$(inherited)" + - "${MY_PROJECT_DIR}/ijkmedia" + - "${MY_PROJECT_DIR}/ijkmedia/ijkplayer" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/ffmpeg/include" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/ass/include" + LIBRARY_SEARCH_PATHS: + - "$(inherited)" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/ass/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/bluray/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/dav1d/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/dvdread/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/ffmpeg/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/freetype/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/fribidi/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/harfbuzz/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/openssl/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/opus/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/smb2/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/uavs3d/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/unibreak/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/xml2/lib" + dependencies: + - sdk: AppKit.framework + - sdk: AudioUnit.framework + - sdk: AudioToolbox.framework + - sdk: Metal.framework + - sdk: CoreFoundation.framework + - sdk: CoreVideo.framework + - sdk: CoreImage.framework + - sdk: VideoToolbox.framework + - sdk: CoreMedia.framework + - sdk: Security.framework + - sdk: libz.tbd + - sdk: libbz2.tbd + - sdk: libiconv.tbd + - sdk: liblzma.tbd + - sdk: ../../FFToolChain/build/product/macos/universal/ass/lib/libass.a + - sdk: ../../FFToolChain/build/product/macos/universal/bluray/lib/libbluray.a + - sdk: ../../FFToolChain/build/product/macos/universal/dav1d/lib/libdav1d.a + - sdk: ../../FFToolChain/build/product/macos/universal/dvdread/lib/libdvdread.a + - sdk: ../../FFToolChain/build/product/macos/universal/ffmpeg/lib/libavcodec.a + - sdk: ../../FFToolChain/build/product/macos/universal/ffmpeg/lib/libavdevice.a + - sdk: ../../FFToolChain/build/product/macos/universal/ffmpeg/lib/libavfilter.a + - sdk: ../../FFToolChain/build/product/macos/universal/ffmpeg/lib/libavformat.a + - sdk: ../../FFToolChain/build/product/macos/universal/ffmpeg/lib/libavutil.a + - sdk: ../../FFToolChain/build/product/macos/universal/ffmpeg/lib/libswresample.a + - sdk: ../../FFToolChain/build/product/macos/universal/ffmpeg/lib/libswscale.a + - sdk: ../../FFToolChain/build/product/macos/universal/freetype/lib/libfreetype.a + - sdk: ../../FFToolChain/build/product/macos/universal/fribidi/lib/libfribidi.a + - sdk: ../../FFToolChain/build/product/macos/universal/harfbuzz/lib/libharfbuzz-subset.a + - sdk: ../../FFToolChain/build/product/macos/universal/harfbuzz/lib/libharfbuzz.a + - sdk: ../../FFToolChain/build/product/macos/universal/openssl/lib/libcrypto.a + - sdk: ../../FFToolChain/build/product/macos/universal/openssl/lib/libssl.a + - sdk: ../../FFToolChain/build/product/macos/universal/opus/lib/libopus.a + - sdk: ../../FFToolChain/build/product/macos/universal/smb2/lib/libsmb2.a + - sdk: ../../FFToolChain/build/product/macos/universal/uavs3d/lib/libuavs3d.a + - sdk: ../../FFToolChain/build/product/macos/universal/unibreak/lib/libunibreak.a + - sdk: ../../FFToolChain/build/product/macos/universal/xml2/lib/libxml2.a + FSPlayer-iOS: + platform: iOS + supportedDestinations: [iOS] + type: framework + deploymentTarget: 12.0 + preBuildScripts: + - script: cd ${MY_PROJECT_DIR}/ijkmedia/ijkplayer;sh version.sh ./ ijkversion.h + name: ijkversion.h + sources: + - path: ijkmedia + headerVisibility: project + excludes: + - "ijkplayer/version.sh" + - "ijksdl/ijksdl_extra_log.c" + - "ijkplayer/ijkversion.h" + - "ijkplayer/ijkavformat/ijkioandroidio.c" + - "ijkplayer/android/**/*.*" + - "ijksdl/android/**/*.*" + - "ijksdl/ffmpeg/ijksdl_vout_overlay_ffmpeg.[hc]" + - "ijksdl/mac/*.*" + - "wrapper/apple/*.*" + - "ijkplayer/ff_subtitle_preference.h" + - path: ijkmedia/ijkplayer/ff_subtitle_preference.h + headerVisibility: public + - path: ijkmedia/wrapper/apple + headerVisibility: public + settings: + PRODUCT_NAME: FSPlayer + MARKETING_VERSION: 1.0.7 + DEFINES_MODULE: YES + CLANG_WARN_DOCUMENTATION_COMMENTS: NO + MODULEMAP_FILE: "${MY_PROJECT_DIR}/module-ios.modulemap" + SWIFT_INCLUDE_PATHS: + - "${MY_PROJECT_DIR}/ijkmedia/wrapper/apple" + GENERATE_INFOPLIST_FILE: YES + GCC_PREPROCESSOR_DEFINITIONS: "$(inherited)" + MTL_LANGUAGE_REVISION: Metal20 + METAL_LIBRARY_OUTPUT_DIR: "${CONFIGURATION_BUILD_DIR}/FSPlayer.framework" + ALWAYS_SEARCH_USER_PATHS: YES + ENABLE_BITCODE: NO + OTHER_LDFLAGS: $(inherited) -l"opus" -l"crypto" -l"ssl" -l"dav1d" -l"dvdread" -l"freetype" -l"fribidi" -l"harfbuzz" -l"harfbuzz-subset" -l"unibreak" -l"ass" -l"uavs3d" -l"avcodec" -l"avdevice" -l"avfilter" -l"avformat" -l"avutil" -l"swresample" -l"swscale" -l"smb2" -l"xml2" -l"bluray" + HEADER_SEARCH_PATHS: + - "$(inherited)" + - "${MY_PROJECT_DIR}/ijkmedia" + - "${MY_PROJECT_DIR}/ijkmedia/ijkplayer" + HEADER_SEARCH_PATHS[sdk=iphoneos*]: + - "$(inherited)" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/ffmpeg/include" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/ass/include" + HEADER_SEARCH_PATHS[sdk=iphonesimulator*]: + - "$(inherited)" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/ffmpeg/include" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/ass/include" + LIBRARY_SEARCH_PATHS[sdk=iphoneos*]: + - "$(inherited)" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/ass/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/bluray/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/dav1d/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/dvdread/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/ffmpeg/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/freetype/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/fribidi/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/harfbuzz/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/openssl/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/opus/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/smb2/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/uavs3d/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/unibreak/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/xml2/lib" + LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*]: + - "$(inherited)" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/ass/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/bluray/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/dav1d/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/dvdread/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/ffmpeg/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/freetype/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/fribidi/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/harfbuzz/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/openssl/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/opus/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/smb2/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/uavs3d/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/unibreak/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/xml2/lib" + dependencies: + - sdk: UIKit.framework + - sdk: AudioToolbox.framework + - sdk: Metal.framework + - sdk: CoreFoundation.framework + - sdk: CoreVideo.framework + - sdk: CoreImage.framework + - sdk: VideoToolbox.framework + - sdk: CoreMedia.framework + - sdk: Security.framework + - sdk: libz.tbd + - sdk: libbz2.tbd + - sdk: libiconv.tbd + - sdk: liblzma.tbd + FSPlayer-tvOS: + platform: tvOS + type: framework + deploymentTarget: 12.0 + preBuildScripts: + - script: cd ${MY_PROJECT_DIR}/ijkmedia/ijkplayer;sh version.sh ./ ijkversion.h + name: ijkversion.h + sources: + - path: ijkmedia + headerVisibility: project + excludes: + - "ijkplayer/version.sh" + - "ijkplayer/ijkversion.h" + - "ijkplayer/ijkavformat/ijkioandroidio.c" + - "ijkplayer/android/**/*.*" + - "ijksdl/ijksdl_extra_log.c" + - "ijksdl/ijksdl_container.*" + - "ijksdl/ffmpeg/ijksdl_vout_overlay_ffmpeg.[hc]" + - "ijksdl/android/**/*.*" + - "ijksdl/mac/*.*" + - "wrapper/apple/*.*" + - "ijkplayer/ff_subtitle_preference.h" + - path: ijkmedia/ijkplayer/ff_subtitle_preference.h + headerVisibility: public + - path: ijkmedia/wrapper/apple + headerVisibility: public + settings: + PRODUCT_NAME: FSPlayer + MARKETING_VERSION: 1.0.7 + DEFINES_MODULE: YES + CLANG_WARN_DOCUMENTATION_COMMENTS: NO + MODULEMAP_FILE: "${MY_PROJECT_DIR}/module-tvos.modulemap" + SWIFT_INCLUDE_PATHS: + - "${MY_PROJECT_DIR}/ijkmedia/wrapper/apple" + GENERATE_INFOPLIST_FILE: YES + GCC_PREPROCESSOR_DEFINITIONS: "$(inherited)" + MTL_LANGUAGE_REVISION: Metal20 + METAL_LIBRARY_OUTPUT_DIR: "${CONFIGURATION_BUILD_DIR}/FSPlayer.framework" + ALWAYS_SEARCH_USER_PATHS: YES + ENABLE_BITCODE: NO + OTHER_LDFLAGS: $(inherited) -l"opus" -l"crypto" -l"ssl" -l"dav1d" -l"dvdread" -l"freetype" -l"fribidi" -l"harfbuzz" -l"harfbuzz-subset" -l"unibreak" -l"ass" -l"uavs3d" -l"avcodec" -l"avdevice" -l"avfilter" -l"avformat" -l"avutil" -l"swresample" -l"swscale" -l"smb2" -l"xml2" -l"bluray" + HEADER_SEARCH_PATHS: + - "$(inherited)" + - "${MY_PROJECT_DIR}/ijkmedia" + - "${MY_PROJECT_DIR}/ijkmedia/ijkplayer" + HEADER_SEARCH_PATHS[sdk=appletvos*]: + - "$(inherited)" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/ffmpeg/include" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/ass/include" + HEADER_SEARCH_PATHS[sdk=appletvsimulator*]: + - "$(inherited)" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/ffmpeg/include" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/ass/include" + LIBRARY_SEARCH_PATHS[sdk=appletvos*]: + - "$(inherited)" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/ass/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/bluray/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/dav1d/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/dvdread/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/ffmpeg/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/freetype/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/fribidi/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/harfbuzz/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/openssl/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/opus/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/smb2/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/uavs3d/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/unibreak/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/xml2/lib" + LIBRARY_SEARCH_PATHS[sdk=appletvsimulator*]: + - "$(inherited)" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/ass/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/bluray/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/dav1d/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/dvdread/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/ffmpeg/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/freetype/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/fribidi/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/harfbuzz/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/openssl/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/opus/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/smb2/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/uavs3d/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/unibreak/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/xml2/lib" + dependencies: + - sdk: UIKit.framework + - sdk: AudioToolbox.framework + - sdk: Metal.framework + - sdk: CoreFoundation.framework + - sdk: CoreVideo.framework + - sdk: CoreImage.framework + - sdk: VideoToolbox.framework + - sdk: CoreMedia.framework + - sdk: Security.framework + - sdk: libz.tbd + - sdk: libbz2.tbd + - sdk: libiconv.tbd + - sdk: liblzma.tbd + + diff --git a/FSPlayer-6.yml b/FSPlayer-6.yml new file mode 100644 index 00000000..1d28c76a --- /dev/null +++ b/FSPlayer-6.yml @@ -0,0 +1,302 @@ +name: FSPlayer +options: + bundleIdPrefix: com.debugly +targets: + FSPlayer-macOS: + platform: macOS + type: framework + deploymentTarget: 10.14 + preBuildScripts: + - script: cd ${MY_PROJECT_DIR}/ijkmedia/ijkplayer;sh version.sh ./ ijkversion.h + name: ijkversion.h + sources: + - path: ijkmedia + headerVisibility: project + excludes: + - "ijkplayer/version.sh" + - "ijksdl/ijksdl_extra_log.c" + - "ijkplayer/ijkversion.h" + - "ijkplayer/ijkavformat/ijkioandroidio.c" + - "ijkplayer/android/**/*.*" + - "ijksdl/android/**/*.*" + - "ijksdl/ffmpeg/ijksdl_vout_overlay_ffmpeg.[hc]" + - "ijksdl/ios/*.*" + - "wrapper/apple/*.*" + - "ijkplayer/ff_subtitle_preference.h" + - path: ijkmedia/ijkplayer/ff_subtitle_preference.h + headerVisibility: public + - path: ijkmedia/wrapper/apple + headerVisibility: public + settings: + PRODUCT_NAME: FSPlayer + MARKETING_VERSION: 1.0.7 + DEFINES_MODULE: YES + CLANG_WARN_DOCUMENTATION_COMMENTS: NO + MODULEMAP_FILE: "${MY_PROJECT_DIR}/module-macos.modulemap" + MY_PROJECT_DIR: "${MY_PROJECT_DIR}" + SWIFT_INCLUDE_PATHS: + - "${MY_PROJECT_DIR}/ijkmedia/wrapper/apple" + GENERATE_INFOPLIST_FILE: YES + GCC_PREPROCESSOR_DEFINITIONS: "$(inherited)" + MTL_LANGUAGE_REVISION: Metal20 + METAL_LIBRARY_OUTPUT_DIR: "${CONFIGURATION_BUILD_DIR}/FSPlayer.framework/Resources" + ALWAYS_SEARCH_USER_PATHS: YES + HEADER_SEARCH_PATHS: + - "$(inherited)" + - "${MY_PROJECT_DIR}/ijkmedia" + - "${MY_PROJECT_DIR}/ijkmedia/ijkplayer" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/ffmpeg/include" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/ass/include" + LIBRARY_SEARCH_PATHS: + - "$(inherited)" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/ass/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/bluray/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/dav1d/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/dvdread/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/ffmpeg/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/freetype/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/fribidi/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/harfbuzz/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/openssl/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/opus/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/smb2/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/uavs3d/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/unibreak/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/macos/universal/xml2/lib" + dependencies: + - sdk: AppKit.framework + - sdk: AudioUnit.framework + - sdk: AudioToolbox.framework + - sdk: Metal.framework + - sdk: CoreFoundation.framework + - sdk: CoreVideo.framework + - sdk: CoreImage.framework + - sdk: VideoToolbox.framework + - sdk: CoreMedia.framework + - sdk: Security.framework + - sdk: libz.tbd + - sdk: libbz2.tbd + - sdk: libiconv.tbd + - sdk: liblzma.tbd + - sdk: ../../FFToolChain/build/product/macos/universal/ass/lib/libass.a + - sdk: ../../FFToolChain/build/product/macos/universal/bluray/lib/libbluray.a + - sdk: ../../FFToolChain/build/product/macos/universal/dav1d/lib/libdav1d.a + - sdk: ../../FFToolChain/build/product/macos/universal/dvdread/lib/libdvdread.a + - sdk: ../../FFToolChain/build/product/macos/universal/ffmpeg/lib/libavcodec.a + - sdk: ../../FFToolChain/build/product/macos/universal/ffmpeg/lib/libavdevice.a + - sdk: ../../FFToolChain/build/product/macos/universal/ffmpeg/lib/libavfilter.a + - sdk: ../../FFToolChain/build/product/macos/universal/ffmpeg/lib/libavformat.a + - sdk: ../../FFToolChain/build/product/macos/universal/ffmpeg/lib/libavutil.a + - sdk: ../../FFToolChain/build/product/macos/universal/ffmpeg/lib/libswresample.a + - sdk: ../../FFToolChain/build/product/macos/universal/ffmpeg/lib/libswscale.a + - sdk: ../../FFToolChain/build/product/macos/universal/freetype/lib/libfreetype.a + - sdk: ../../FFToolChain/build/product/macos/universal/fribidi/lib/libfribidi.a + - sdk: ../../FFToolChain/build/product/macos/universal/harfbuzz/lib/libharfbuzz-subset.a + - sdk: ../../FFToolChain/build/product/macos/universal/harfbuzz/lib/libharfbuzz.a + - sdk: ../../FFToolChain/build/product/macos/universal/openssl/lib/libcrypto.a + - sdk: ../../FFToolChain/build/product/macos/universal/openssl/lib/libssl.a + - sdk: ../../FFToolChain/build/product/macos/universal/opus/lib/libopus.a + - sdk: ../../FFToolChain/build/product/macos/universal/smb2/lib/libsmb2.a + - sdk: ../../FFToolChain/build/product/macos/universal/uavs3d/lib/libuavs3d.a + - sdk: ../../FFToolChain/build/product/macos/universal/unibreak/lib/libunibreak.a + - sdk: ../../FFToolChain/build/product/macos/universal/xml2/lib/libxml2.a + FSPlayer-iOS: + platform: iOS + supportedDestinations: [iOS] + type: framework + deploymentTarget: 12.0 + preBuildScripts: + - script: cd ${MY_PROJECT_DIR}/ijkmedia/ijkplayer;sh version.sh ./ ijkversion.h + name: ijkversion.h + sources: + - path: ijkmedia + headerVisibility: project + excludes: + - "ijkplayer/version.sh" + - "ijksdl/ijksdl_extra_log.c" + - "ijkplayer/ijkversion.h" + - "ijkplayer/ijkavformat/ijkioandroidio.c" + - "ijkplayer/android/**/*.*" + - "ijksdl/android/**/*.*" + - "ijksdl/ffmpeg/ijksdl_vout_overlay_ffmpeg.[hc]" + - "ijksdl/mac/*.*" + - "wrapper/apple/*.*" + - "ijkplayer/ff_subtitle_preference.h" + - path: ijkmedia/ijkplayer/ff_subtitle_preference.h + headerVisibility: public + - path: ijkmedia/wrapper/apple + headerVisibility: public + settings: + PRODUCT_NAME: FSPlayer + MARKETING_VERSION: 1.0.7 + DEFINES_MODULE: YES + CLANG_WARN_DOCUMENTATION_COMMENTS: NO + MODULEMAP_FILE: "${MY_PROJECT_DIR}/module-ios.modulemap" + SWIFT_INCLUDE_PATHS: + - "${MY_PROJECT_DIR}/ijkmedia/wrapper/apple" + GENERATE_INFOPLIST_FILE: YES + GCC_PREPROCESSOR_DEFINITIONS: "$(inherited)" + MTL_LANGUAGE_REVISION: Metal20 + METAL_LIBRARY_OUTPUT_DIR: "${CONFIGURATION_BUILD_DIR}/FSPlayer.framework" + ALWAYS_SEARCH_USER_PATHS: YES + ENABLE_BITCODE: NO + OTHER_LDFLAGS: $(inherited) -l"opus" -l"crypto" -l"ssl" -l"dav1d" -l"dvdread" -l"freetype" -l"fribidi" -l"harfbuzz" -l"harfbuzz-subset" -l"unibreak" -l"ass" -l"uavs3d" -l"avcodec" -l"avdevice" -l"avfilter" -l"avformat" -l"avutil" -l"swresample" -l"swscale" -l"smb2" -l"xml2" -l"bluray" + HEADER_SEARCH_PATHS: + - "$(inherited)" + - "${MY_PROJECT_DIR}/ijkmedia" + - "${MY_PROJECT_DIR}/ijkmedia/ijkplayer" + HEADER_SEARCH_PATHS[sdk=iphoneos*]: + - "$(inherited)" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/ffmpeg/include" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/ass/include" + HEADER_SEARCH_PATHS[sdk=iphonesimulator*]: + - "$(inherited)" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/ffmpeg/include" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/ass/include" + LIBRARY_SEARCH_PATHS[sdk=iphoneos*]: + - "$(inherited)" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/ass/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/bluray/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/dav1d/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/dvdread/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/ffmpeg/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/freetype/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/fribidi/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/harfbuzz/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/openssl/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/opus/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/smb2/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/uavs3d/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/unibreak/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal/xml2/lib" + LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*]: + - "$(inherited)" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/ass/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/bluray/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/dav1d/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/dvdread/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/ffmpeg/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/freetype/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/fribidi/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/harfbuzz/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/openssl/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/opus/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/smb2/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/uavs3d/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/unibreak/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/ios/universal-simulator/xml2/lib" + dependencies: + - sdk: UIKit.framework + - sdk: AudioToolbox.framework + - sdk: Metal.framework + - sdk: CoreFoundation.framework + - sdk: CoreVideo.framework + - sdk: CoreImage.framework + - sdk: VideoToolbox.framework + - sdk: CoreMedia.framework + - sdk: Security.framework + - sdk: libz.tbd + - sdk: libbz2.tbd + - sdk: libiconv.tbd + - sdk: liblzma.tbd + FSPlayer-tvOS: + platform: tvOS + type: framework + deploymentTarget: 12.0 + preBuildScripts: + - script: cd ${MY_PROJECT_DIR}/ijkmedia/ijkplayer;sh version.sh ./ ijkversion.h + name: ijkversion.h + sources: + - path: ijkmedia + headerVisibility: project + excludes: + - "ijkplayer/version.sh" + - "ijkplayer/ijkversion.h" + - "ijkplayer/ijkavformat/ijkioandroidio.c" + - "ijkplayer/android/**/*.*" + - "ijksdl/ijksdl_extra_log.c" + - "ijksdl/ijksdl_container.*" + - "ijksdl/ffmpeg/ijksdl_vout_overlay_ffmpeg.[hc]" + - "ijksdl/android/**/*.*" + - "ijksdl/mac/*.*" + - "wrapper/apple/*.*" + - "ijkplayer/ff_subtitle_preference.h" + - path: ijkmedia/ijkplayer/ff_subtitle_preference.h + headerVisibility: public + - path: ijkmedia/wrapper/apple + headerVisibility: public + settings: + PRODUCT_NAME: FSPlayer + MARKETING_VERSION: 1.0.7 + DEFINES_MODULE: YES + CLANG_WARN_DOCUMENTATION_COMMENTS: NO + MODULEMAP_FILE: "${MY_PROJECT_DIR}/module-tvos.modulemap" + SWIFT_INCLUDE_PATHS: + - "${MY_PROJECT_DIR}/ijkmedia/wrapper/apple" + GENERATE_INFOPLIST_FILE: YES + GCC_PREPROCESSOR_DEFINITIONS: "$(inherited)" + MTL_LANGUAGE_REVISION: Metal20 + METAL_LIBRARY_OUTPUT_DIR: "${CONFIGURATION_BUILD_DIR}/FSPlayer.framework" + ALWAYS_SEARCH_USER_PATHS: YES + ENABLE_BITCODE: NO + OTHER_LDFLAGS: $(inherited) -l"opus" -l"crypto" -l"ssl" -l"dav1d" -l"dvdread" -l"freetype" -l"fribidi" -l"harfbuzz" -l"harfbuzz-subset" -l"unibreak" -l"ass" -l"uavs3d" -l"avcodec" -l"avdevice" -l"avfilter" -l"avformat" -l"avutil" -l"swresample" -l"swscale" -l"smb2" -l"xml2" -l"bluray" + HEADER_SEARCH_PATHS: + - "$(inherited)" + - "${MY_PROJECT_DIR}/ijkmedia" + - "${MY_PROJECT_DIR}/ijkmedia/ijkplayer" + HEADER_SEARCH_PATHS[sdk=appletvos*]: + - "$(inherited)" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/ffmpeg/include" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/ass/include" + HEADER_SEARCH_PATHS[sdk=appletvsimulator*]: + - "$(inherited)" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/ffmpeg/include" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/ass/include" + LIBRARY_SEARCH_PATHS[sdk=appletvos*]: + - "$(inherited)" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/ass/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/bluray/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/dav1d/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/dvdread/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/ffmpeg/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/freetype/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/fribidi/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/harfbuzz/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/openssl/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/opus/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/smb2/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/uavs3d/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/unibreak/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal/xml2/lib" + LIBRARY_SEARCH_PATHS[sdk=appletvsimulator*]: + - "$(inherited)" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/ass/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/bluray/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/dav1d/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/dvdread/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/ffmpeg/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/freetype/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/fribidi/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/harfbuzz/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/openssl/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/opus/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/smb2/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/uavs3d/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/unibreak/lib" + - "${MY_PROJECT_DIR}/FFToolChain/build/product/tvos/universal-simulator/xml2/lib" + dependencies: + - sdk: UIKit.framework + - sdk: AudioToolbox.framework + - sdk: Metal.framework + - sdk: CoreFoundation.framework + - sdk: CoreVideo.framework + - sdk: CoreImage.framework + - sdk: VideoToolbox.framework + - sdk: CoreMedia.framework + - sdk: Security.framework + - sdk: libz.tbd + - sdk: libbz2.tbd + - sdk: libiconv.tbd + - sdk: liblzma.tbd + + diff --git a/generate-proj.sh b/generate-proj.sh index b7986216..ba24316a 100755 --- a/generate-proj.sh +++ b/generate-proj.sh @@ -20,4 +20,9 @@ cd "$THIS_DIR" set -e export MY_PROJECT_DIR="$THIS_DIR" -xcodegen -p . -s FSPlayer.yml \ No newline at end of file + +if [[ -n $1 ]];then + xcodegen -p . -s FSPlayer-$1.yml +else + xcodegen -p . -s FSPlayer.yml +fi \ No newline at end of file diff --git a/ijkmedia/ijkplayer/ff_ffinc.h b/ijkmedia/ijkplayer/ff_ffinc.h index 6ae586b2..c6888124 100644 --- a/ijkmedia/ijkplayer/ff_ffinc.h +++ b/ijkmedia/ijkplayer/ff_ffinc.h @@ -36,8 +36,13 @@ #include "libavutil/version.h" #include "libswresample/swresample.h" #include "libavformat/avformat.h" +#include "ff_version.h" +#if IS_FFMPEG_6 #include "libavformat/application.h" -#include "libavcodec/avfft.h" +#else +#include "libavutil/application.h" +#endif +//#include "libavcodec/avfft.h" #include "libswscale/swscale.h" #include "ijksdl/ijksdl.h" diff --git a/ijkmedia/ijkplayer/ff_ffplay.c b/ijkmedia/ijkplayer/ff_ffplay.c index 8fa72455..6a2ccb9e 100755 --- a/ijkmedia/ijkplayer/ff_ffplay.c +++ b/ijkmedia/ijkplayer/ff_ffplay.c @@ -50,7 +50,7 @@ #endif #include "libswscale/swscale.h" #include "libavutil/opt.h" -#include "libavcodec/avfft.h" +//#include "libavcodec/avfft.h" #include "libswresample/swresample.h" #include "ff_version.h" #if CONFIG_AUDIO_AVFILTER || CONFIG_VIDEO_AVFILTER @@ -1237,7 +1237,7 @@ static int get_z_rotate_degrees(AVStream *video_st) if (!video_st) return 0; int32_t *displaymatrix = NULL; -#if IS_FFMPEG_5 +#if IS_FFMPEG_6 const AVPacketSideData *sideData = av_packet_side_data_get(video_st->codecpar->coded_side_data, video_st->codecpar->nb_coded_side_data, AV_PKT_DATA_DISPLAYMATRIX); if (sideData && sideData->size >= 36) { displaymatrix = (int32_t *)sideData->data; @@ -1397,21 +1397,6 @@ static int queue_picture(FFPlayer *ffp, AVFrame *src_frame, double pts, double d vp->sar = src_frame->sample_aspect_ratio; - /* HEIC tile-grid: decode 输出是每个 tile 的独立 AVFrame, - * 但 overlay 应当承载整张 canvas;将 tile 的宽高改写为 canvas 宽高 - * 以避免 alloc_picture 在 tile 切换时反复重建 overlay。 - */ - int tile_canvas_w_fix = 0; - int tile_canvas_h_fix = 0; - if (src_frame->opaque_ref && - src_frame->opaque_ref->size >= (int)sizeof(FSTileGridMetadata)) { - FSTileGridMetadata *tmeta = (FSTileGridMetadata *)src_frame->opaque_ref->data; - if (tmeta->nb_tiles > 0 && tmeta->canvas_w > 0 && tmeta->canvas_h > 0) { - tile_canvas_w_fix = tmeta->canvas_w; - tile_canvas_h_fix = tmeta->canvas_h; - } - } - //TODO: windows and android plat. //软解时,上层指定了明确的overlay-format时需要转格式 if (src_frame->format != AV_PIX_FMT_VIDEOTOOLBOX) { @@ -1539,9 +1524,30 @@ static int queue_picture(FFPlayer *ffp, AVFrame *src_frame, double pts, double d } } - /* alloc or resize hardware picture buffer */ +#if IS_TILEGRID_HEIC_ENABLED + /* HEIC tile-grid: decode 输出是每个 tile 的独立 AVFrame, + * 但 overlay 应当承载整张 canvas;将 tile 的宽高改写为 canvas 宽高 + * 以避免 alloc_picture 在 tile 切换时反复重建 overlay。 + */ + int tile_canvas_w_fix = 0; + int tile_canvas_h_fix = 0; + if (src_frame->opaque_ref && + src_frame->opaque_ref->size >= (int)sizeof(FSTileGridMetadata)) { + FSTileGridMetadata *tmeta = (FSTileGridMetadata *)src_frame->opaque_ref->data; + if (tmeta->nb_tiles > 0 && tmeta->canvas_w > 0 && tmeta->canvas_h > 0) { + tile_canvas_w_fix = tmeta->canvas_w; + tile_canvas_h_fix = tmeta->canvas_h; + } + } int cmp_w = tile_canvas_w_fix > 0 ? tile_canvas_w_fix : src_frame->width; int cmp_h = tile_canvas_h_fix > 0 ? tile_canvas_h_fix : src_frame->height; +#else + int cmp_w = src_frame->width; + int cmp_h = src_frame->height; +#endif + + /* alloc or resize hardware picture buffer */ + if (!vp->bmp || !vp->allocated || vp->width != cmp_w || vp->height != cmp_h || @@ -1577,7 +1583,7 @@ static int queue_picture(FFPlayer *ffp, AVFrame *src_frame, double pts, double d av_log(NULL, AV_LOG_FATAL, "Cannot initialize the conversion context\n"); return -3; } - +#if IS_TILEGRID_HEIC_ENABLED /* HEIC tile-grid: 如果 overlay 还在累积 tile,不要 push 到渲染队列, * 保留 writable 槽位给下一个 tile 继续写入。 */ @@ -1589,7 +1595,10 @@ static int queue_picture(FFPlayer *ffp, AVFrame *src_frame, double pts, double d if (isPending) { return 0; } - +#else + /* update the bitmap content */ + SDL_VoutUnlockYUVOverlay(vp->bmp); +#endif vp->pts = pts; vp->duration = duration; vp->pos = pos; @@ -3654,7 +3663,7 @@ static int read_thread(void *arg) do { if (av_stristart(is->filename, "data:", NULL) && orig_nb_streams > 0) { for (i = 0; i < orig_nb_streams; i++) { - if (!ic->streams[i] || !ic->streams[i]->codecpar || ic->streams[i]->codecpar->profile == FF_PROFILE_UNKNOWN) { + if (!ic->streams[i] || !ic->streams[i]->codecpar || ic->streams[i]->codecpar->profile == AV_PROFILE_UNKNOWN) { break; } } @@ -4166,7 +4175,7 @@ static int read_thread(void *arg) } do { - +#if IS_TILEGRID_HEIC_ENABLED if (ic->nb_stream_groups > 0) { for (unsigned int i = 0; i < ic->nb_stream_groups; i++) { AVStreamGroup *group = ic->stream_groups[i]; @@ -4247,7 +4256,7 @@ static int read_thread(void *arg) } break; } - +#endif AVStream *st = ic->streams[pkt->stream_index]; /* check if packet is in play range specified by user, then queue, otherwise discard */ stream_start_time = st->start_time; diff --git a/ijkmedia/ijkplayer/ff_ffplay_def.h b/ijkmedia/ijkplayer/ff_ffplay_def.h index 5758b4a3..6f614e8f 100755 --- a/ijkmedia/ijkplayer/ff_ffplay_def.h +++ b/ijkmedia/ijkplayer/ff_ffplay_def.h @@ -49,7 +49,7 @@ #include "libavformat/avformat.h" #include "libswscale/swscale.h" #include "libavutil/opt.h" -#include "libavcodec/avfft.h" +//#include "libavcodec/avfft.h" #include "libswresample/swresample.h" #if CONFIG_AUDIO_AVFILTER || CONFIG_VIDEO_AVFILTER diff --git a/ijkmedia/ijkplayer/ff_version.h b/ijkmedia/ijkplayer/ff_version.h index 853114a8..c08024b9 100644 --- a/ijkmedia/ijkplayer/ff_version.h +++ b/ijkmedia/ijkplayer/ff_version.h @@ -26,9 +26,15 @@ #include "libavformat/version_major.h" #define IS_FFMPEG_7 (LIBAVFORMAT_VERSION_MAJOR >= 61) -#define IS_LESS_THAN_FFMPEG_7 (LIBAVFORMAT_VERSION_MAJOR < 61) +#define IS_LESS_THAN_FFMPEG_7 (LIBAVFORMAT_VERSION_MAJOR < 61) #define IS_FFMPEG_6 (LIBAVFORMAT_VERSION_MAJOR >= 60) +#define IS_LESS_THAN_FFMPEG_6 (LIBAVFORMAT_VERSION_MAJOR < 60) #define IS_FFMPEG_5 (LIBAVFORMAT_VERSION_MAJOR >= 59) #define IS_FFMPEG_4 (LIBAVFORMAT_VERSION_MAJOR >= 58) +#define IS_TILEGRID_HEIC_ENABLED IS_FFMPEG_7 + +#if IS_LESS_THAN_FFMPEG_6 +#define AV_PROFILE_UNKNOWN FF_PROFILE_UNKNOWN +#endif #endif /* ff_version_h */ diff --git a/ijkmedia/ijkplayer/ijkavformat/allformats.c b/ijkmedia/ijkplayer/ijkavformat/allformats.c index e4a2c3dd..84960765 100644 --- a/ijkmedia/ijkplayer/ijkavformat/allformats.c +++ b/ijkmedia/ijkplayer/ijkavformat/allformats.c @@ -211,14 +211,18 @@ void ijkav_register_all(void) #ifdef __ANDROID__ FS_REGISTER_PROTOCOL(ijkmediadatasource); #endif +#if IS_FFMPEG_6 FS_REGISTER_PROTOCOL(ijkhttp2); +#endif FS_REGISTER_PROTOCOL(ijkio); FS_REGISTER_PROTOCOL(ijktcphook); FS_REGISTER_PROTOCOL(ijkhttphook); FS_REGISTER_PROTOCOL(ijksegment); /* demuxers */ FS_REGISTER_DEMUXER(ijklivehook); +#if IS_FFMPEG_6 //private hls demuxer FS_REGISTER_DEMUXER(ijkplaceholder1); +#endif av_log(NULL, AV_LOG_INFO, "===== custom modules end =====\n"); } diff --git a/ijkmedia/ijkplayer/ijkavformat/ijkhls.c b/ijkmedia/ijkplayer/ijkavformat/ijkhls.c index 7fb751e0..f2836071 100644 --- a/ijkmedia/ijkplayer/ijkavformat/ijkhls.c +++ b/ijkmedia/ijkplayer/ijkavformat/ijkhls.c @@ -27,6 +27,9 @@ * https://www.rfc-editor.org/rfc/rfc8216.txt */ +#include "../ff_version.h" +#include "libavformat/avformat.h" +#if IS_FFMPEG_6 #include "libffmpeg/config_components.h" #include "libavformat/http.h" @@ -39,7 +42,7 @@ #include "libavutil/opt.h" #include "libavutil/dict.h" #include "libavutil/time.h" -#include "libavformat/avformat.h" + #include "libavformat/demux.h" #include "libavutil/internal.h" #include "libavformat/avio_internal.h" @@ -48,7 +51,6 @@ #include "libavformat/hls_sample_encryption.h" #include "libavformat/internal.h" -#include "../ff_version.h" #define INITIAL_BUFFER_SIZE 32768 @@ -2761,6 +2763,8 @@ static const AVClass fs_hls_class = { .version = LIBAVUTIL_VERSION_INT, }; +#endif + #if IS_FFMPEG_7 const FFInputFormat ijkff_ijkplaceholder1_demuxer = { .p.name = "debug_hls", @@ -2776,7 +2780,7 @@ const FFInputFormat ijkff_ijkplaceholder1_demuxer = { .read_seek = hls_read_seek, }; -#else +#elif IS_FFMPEG_6 const AVInputFormat ijkff_ijkplaceholder1_demuxer = { .name = "fs_hls", @@ -2791,4 +2795,21 @@ const AVInputFormat ijkff_ijkplaceholder1_demuxer = { .read_close = hls_close, .read_seek = hls_read_seek, }; + +#else + +#define IJK_DUMMY_DEMUXER(x) \ +static const AVClass ijk_##x##_demuxer_class = { \ + .class_name = #x, \ + .item_name = av_default_item_name, \ + .version = LIBAVUTIL_VERSION_INT, \ + }; \ + \ +AVInputFormat ff_##x##_demuxer = { \ + .name = #x, \ + .priv_data_size = 1, \ + .priv_class = &ijk_##x##_demuxer_class, \ +}; + +IJK_DUMMY_DEMUXER(ijkplaceholder1); #endif diff --git a/ijkmedia/ijkplayer/ijkavformat/ijkiourlhook.c b/ijkmedia/ijkplayer/ijkavformat/ijkiourlhook.c index 2434314b..40cf07d8 100644 --- a/ijkmedia/ijkplayer/ijkavformat/ijkiourlhook.c +++ b/ijkmedia/ijkplayer/ijkavformat/ijkiourlhook.c @@ -26,7 +26,12 @@ #include #include "ijkiourl.h" #include "ijkioprotocol.h" +#include "../ff_version.h" +#if IS_FFMPEG_6 #include "libavformat/application.h" +#else +#include "libavutil/application.h" +#endif #include "libavformat/avio.h" #include "libavutil/error.h" #include "libavutil/avstring.h" diff --git a/ijkmedia/ijkplayer/ijkavformat/ijklivehook.c b/ijkmedia/ijkplayer/ijkavformat/ijklivehook.c index 95fd39cc..4cfb8e54 100644 --- a/ijkmedia/ijkplayer/ijkavformat/ijklivehook.c +++ b/ijkmedia/ijkplayer/ijkavformat/ijklivehook.c @@ -30,8 +30,13 @@ #include "ijkplayer/ijkavutil/opt.h" #include "ijkavformat.h" -#include "libavformat/application.h" #include "../ff_version.h" +#if IS_FFMPEG_6 +#include "libavformat/application.h" +#else +#include "libavutil/application.h" +#endif + typedef struct { AVClass *class; diff --git a/ijkmedia/ijkplayer/ijkavformat/ijksegment.c b/ijkmedia/ijkplayer/ijkavformat/ijksegment.c index 08eb67fe..db88d576 100644 --- a/ijkmedia/ijkplayer/ijkavformat/ijksegment.c +++ b/ijkmedia/ijkplayer/ijkavformat/ijksegment.c @@ -26,8 +26,12 @@ #include "libavutil/avstring.h" #include "libavutil/log.h" #include "libavutil/opt.h" - +#include "../ff_version.h" +#if IS_FFMPEG_6 #include "libavformat/application.h" +#else +#include "libavutil/application.h" +#endif typedef struct Context { AVClass *class; diff --git a/ijkmedia/ijkplayer/ijkavformat/ijkurlhook.c b/ijkmedia/ijkplayer/ijkavformat/ijkurlhook.c index 441fb010..e26e517a 100644 --- a/ijkmedia/ijkplayer/ijkavformat/ijkurlhook.c +++ b/ijkmedia/ijkplayer/ijkavformat/ijkurlhook.c @@ -26,8 +26,12 @@ #include "libavutil/avstring.h" #include "libavutil/log.h" #include "libavutil/opt.h" - +#include "../ff_version.h" +#if IS_FFMPEG_6 #include "libavformat/application.h" +#else +#include "libavutil/application.h" +#endif typedef struct Context { AVClass *class; diff --git a/ijkmedia/ijkplayer/ijkmeta.c b/ijkmedia/ijkplayer/ijkmeta.c index ff7628cb..71414e2a 100755 --- a/ijkmedia/ijkplayer/ijkmeta.c +++ b/ijkmedia/ijkplayer/ijkmeta.c @@ -26,6 +26,7 @@ #include "ff_ffinc.h" #include "ijksdl/ijksdl_misc.h" #include "ff_ffplay.h" +#include "ff_version.h" #define FS_META_INIT_CAPACITY 13 @@ -302,7 +303,7 @@ void ijkmeta_set_avformat_context_l(IjkMediaMeta *meta, AVFormatContext *ic) const char *codec_name = avcodec_get_name(codecpar->codec_id); if (codec_name) ijkmeta_set_string_l(stream_meta, FSM_KEY_CODEC_NAME, codec_name); - if (codecpar->profile != FF_PROFILE_UNKNOWN) { + if (codecpar->profile != AV_PROFILE_UNKNOWN) { const AVCodec *codec = avcodec_find_decoder(codecpar->codec_id); if (codec) { ijkmeta_set_int64_l(stream_meta, FSM_KEY_CODEC_PROFILE_ID, codecpar->profile); diff --git a/ijkmedia/ijksdl/apple/ijksdl_vout_ios_gles2.m b/ijkmedia/ijksdl/apple/ijksdl_vout_ios_gles2.m index 14841e9a..2fe91750 100644 --- a/ijkmedia/ijksdl/apple/ijksdl_vout_ios_gles2.m +++ b/ijkmedia/ijksdl/apple/ijksdl_vout_ios_gles2.m @@ -149,7 +149,7 @@ static int vout_display_overlay_l(SDL_Vout *vout, SDL_VoutOverlay *overlay, SDL_ ALOGE("vout_display_overlay_l: invalid format:%d\n",overlay->format); return -4; } - +#if IS_TILEGRID_HEIC_ENABLED /* HEIC tile grid 路径:把所有 tile 打包到 FSOverlayAttach.tilePieces */ if (overlay->is_tile_grid) { int count = SDL_VoutOverlay_GetTileCount(overlay); @@ -191,7 +191,8 @@ static int vout_display_overlay_l(SDL_Vout *vout, SDL_VoutOverlay *overlay, SDL_ free(bufs); free(xs); free(ys); free(ws); free(hs); return [gl_view displayAttach:attach]; } - +#endif + CVPixelBufferRef videoPic = SDL_Overlay_getCVPixelBufferRef(overlay); if (videoPic) { FSOverlayAttach *attach = [[FSOverlayAttach alloc] init]; diff --git a/ijkmedia/ijksdl/apple/ijksdl_vout_overlay_ffmpeg.m b/ijkmedia/ijksdl/apple/ijksdl_vout_overlay_ffmpeg.m index 4655256f..348aabcd 100644 --- a/ijkmedia/ijksdl/apple/ijksdl_vout_overlay_ffmpeg.m +++ b/ijkmedia/ijksdl/apple/ijksdl_vout_overlay_ffmpeg.m @@ -29,6 +29,7 @@ #include #include #include "ijkplayer/ff_heic_tile.h" +#include "ff_version.h" #define USE_VIMAGE_ACCELERATE 0 @@ -36,23 +37,14 @@ #import #endif -typedef struct FSTileSlot { - CVPixelBufferRef pb; // 已拷贝的 tile CVPixelBuffer(owned) - int x, y; // tile 在 canvas 上的位置 - int w, h; // tile 尺寸 - int filled; // 是否已填充 -} FSTileSlot; - -// forward declaration so func_free_l can call it before definition -static void tile_slots_free(SDL_VoutOverlay_Opaque *opaque); - +struct FSTileSlot; struct SDL_VoutOverlay_Opaque { SDL_mutex *mutex; Uint16 pitches[AV_NUM_DATA_POINTERS]; CVPixelBufferRef pixelBuffer; CVPixelBufferPoolRef pixelBufferPool; - +#if IS_TILEGRID_HEIC_ENABLED /* HEIC tile grid 模式 */ int tile_mode; // 1 表示当前正在累积 tile int tile_expected; // 期望总数(grid->nb_tiles) @@ -60,9 +52,80 @@ int tile_ready; // 1 表示已攒齐、可显示 int tile_canvas_w; int tile_canvas_h; - FSTileSlot *tiles; // 长度 tile_expected + struct FSTileSlot *tiles; // 长度 tile_expected +#endif }; +#if IS_TILEGRID_HEIC_ENABLED + +typedef struct FSTileSlot { + CVPixelBufferRef pb; // 已拷贝的 tile CVPixelBuffer(owned) + int x, y; // tile 在 canvas 上的位置 + int w, h; // tile 尺寸 + int filled; // 是否已填充 +} FSTileSlot; + +static void tile_slots_free(SDL_VoutOverlay_Opaque *opaque) +{ + if (!opaque || !opaque->tiles) + return; + for (int i = 0; i < opaque->tile_expected; i++) { + if (opaque->tiles[i].pb) { + CVPixelBufferRelease(opaque->tiles[i].pb); + opaque->tiles[i].pb = NULL; + } + } + free(opaque->tiles); + opaque->tiles = NULL; + opaque->tile_expected = 0; + opaque->tile_received = 0; + opaque->tile_ready = 0; + opaque->tile_mode = 0; + opaque->tile_canvas_w = 0; + opaque->tile_canvas_h = 0; +} + +static int func_is_tile_pending(SDL_VoutOverlay *overlay) +{ + if (!overlay) return 0; + SDL_VoutOverlay_Opaque *opaque = overlay->opaque; + if (!opaque || !opaque->tile_mode) return 0; + return opaque->tile_ready ? 0 : 1; +} + +static int func_get_tile_count(SDL_VoutOverlay *overlay) +{ + if (!overlay) return 0; + SDL_VoutOverlay_Opaque *opaque = overlay->opaque; + if (!opaque || !opaque->tile_mode) return 0; + return opaque->tile_received; +} + +static int func_get_tile_buffers(SDL_VoutOverlay *overlay, + CVPixelBufferRef *out_buffers, + int *out_x, int *out_y, + int *out_w, int *out_h, + int max_count) +{ + if (!overlay) return 0; + SDL_VoutOverlay_Opaque *opaque = overlay->opaque; + if (!opaque || !opaque->tile_mode || !opaque->tiles) return 0; + int n = opaque->tile_expected < max_count ? opaque->tile_expected : max_count; + int k = 0; + for (int i = 0; i < n; i++) { + FSTileSlot *slot = &opaque->tiles[i]; + if (!slot->filled || !slot->pb) continue; + if (out_buffers) out_buffers[k] = slot->pb; + if (out_x) out_x[k] = slot->x; + if (out_y) out_y[k] = slot->y; + if (out_w) out_w[k] = slot->w; + if (out_h) out_h[k] = slot->h; + k++; + } + return k; +} +#endif + static SDL_Class g_vout_overlay_ffmpeg_class = { .name = "FFmpegVoutOverlay", }; @@ -332,9 +395,9 @@ static void func_free_l(SDL_VoutOverlay *overlay) CVPixelBufferRelease(opaque->pixelBuffer); opaque->pixelBuffer = NULL; } - +#if IS_TILEGRID_HEIC_ENABLED tile_slots_free(opaque); - +#endif if (opaque->mutex) SDL_DestroyMutex(opaque->mutex); @@ -353,33 +416,13 @@ static int func_unlock(SDL_VoutOverlay *overlay) return SDL_UnlockMutex(opaque->mutex); } -static void tile_slots_free(SDL_VoutOverlay_Opaque *opaque) -{ - if (!opaque || !opaque->tiles) - return; - for (int i = 0; i < opaque->tile_expected; i++) { - if (opaque->tiles[i].pb) { - CVPixelBufferRelease(opaque->tiles[i].pb); - opaque->tiles[i].pb = NULL; - } - } - free(opaque->tiles); - opaque->tiles = NULL; - opaque->tile_expected = 0; - opaque->tile_received = 0; - opaque->tile_ready = 0; - opaque->tile_mode = 0; - opaque->tile_canvas_w = 0; - opaque->tile_canvas_h = 0; -} - static int func_fill_avframe_to_cvpixelbuffer(SDL_VoutOverlay *overlay, const AVFrame *frame) { if (!overlay || !frame) return -100; SDL_VoutOverlay_Opaque *opaque = overlay->opaque; - +#if IS_TILEGRID_HEIC_ENABLED /* ---------- HEIC tile grid 分支 ---------- */ FSTileGridMetadata *tmeta = NULL; if (frame->opaque_ref && frame->opaque_ref->size >= (int)sizeof(FSTileGridMetadata)) { @@ -476,7 +519,8 @@ static int func_fill_avframe_to_cvpixelbuffer(SDL_VoutOverlay *overlay, const AV overlay->tile_canvas_w = 0; overlay->tile_canvas_h = 0; } - +#endif + if (opaque->pixelBuffer) { CVPixelBufferRelease(opaque->pixelBuffer); opaque->pixelBuffer = NULL; @@ -508,46 +552,6 @@ static int func_fill_avframe_to_cvpixelbuffer(SDL_VoutOverlay *overlay, const AV return -100; } -static int func_is_tile_pending(SDL_VoutOverlay *overlay) -{ - if (!overlay) return 0; - SDL_VoutOverlay_Opaque *opaque = overlay->opaque; - if (!opaque || !opaque->tile_mode) return 0; - return opaque->tile_ready ? 0 : 1; -} - -static int func_get_tile_count(SDL_VoutOverlay *overlay) -{ - if (!overlay) return 0; - SDL_VoutOverlay_Opaque *opaque = overlay->opaque; - if (!opaque || !opaque->tile_mode) return 0; - return opaque->tile_received; -} - -static int func_get_tile_buffers(SDL_VoutOverlay *overlay, - CVPixelBufferRef *out_buffers, - int *out_x, int *out_y, - int *out_w, int *out_h, - int max_count) -{ - if (!overlay) return 0; - SDL_VoutOverlay_Opaque *opaque = overlay->opaque; - if (!opaque || !opaque->tile_mode || !opaque->tiles) return 0; - int n = opaque->tile_expected < max_count ? opaque->tile_expected : max_count; - int k = 0; - for (int i = 0; i < n; i++) { - FSTileSlot *slot = &opaque->tiles[i]; - if (!slot->filled || !slot->pb) continue; - if (out_buffers) out_buffers[k] = slot->pb; - if (out_x) out_x[k] = slot->x; - if (out_y) out_y[k] = slot->y; - if (out_w) out_w[k] = slot->w; - if (out_h) out_h[k] = slot->h; - k++; - } - return k; -} - struct SDL_Vout_Opaque { void *cvPixelBufferPool; int cv_format; @@ -582,9 +586,11 @@ static int func_get_tile_buffers(SDL_VoutOverlay *overlay, overlay->lock = func_lock; overlay->unlock = func_unlock; overlay->func_fill_frame = func_fill_avframe_to_cvpixelbuffer; +#if IS_TILEGRID_HEIC_ENABLED overlay->func_is_tile_pending = func_is_tile_pending; overlay->func_get_tile_count = func_get_tile_count; overlay->func_get_tile_buffers = func_get_tile_buffers; +#endif SDL_Vout_Opaque * voutOpaque = display->opaque; if (display->cvpixelbufferpool && !voutOpaque->cvPixelBufferPool) { diff --git a/ijkmedia/ijksdl/apple/ijksdl_vout_overlay_ffmpeg_hw.m b/ijkmedia/ijksdl/apple/ijksdl_vout_overlay_ffmpeg_hw.m index c018ce29..131315b6 100644 --- a/ijkmedia/ijksdl/apple/ijksdl_vout_overlay_ffmpeg_hw.m +++ b/ijkmedia/ijksdl/apple/ijksdl_vout_overlay_ffmpeg_hw.m @@ -28,17 +28,9 @@ #include "ijksdl_vout_internal.h" #include "ijksdl_video.h" #include "ijkplayer/ff_heic_tile.h" +#include "ff_version.h" -typedef struct FSTileSlot { - CVPixelBufferRef pb; // 已拷贝的 tile CVPixelBuffer(owned) - int x, y; // tile 在 canvas 上的位置 - int w, h; // tile 尺寸 - int filled; // 是否已填充 -} FSTileSlot; - -// forward declaration so func_free_l can call it before definition -static void tile_slots_free(SDL_VoutOverlay_Opaque *opaque); - +struct FSTileSlot; struct SDL_VoutOverlay_Opaque { SDL_mutex *mutex; CVPixelBufferRef pixel_buffer; @@ -51,49 +43,19 @@ int tile_ready; // 1 表示已攒齐、可显示 int tile_canvas_w; int tile_canvas_h; - FSTileSlot *tiles; // 长度 tile_expected +#if IS_TILEGRID_HEIC_ENABLED + struct FSTileSlot *tiles; // 长度 tile_expected +#endif }; -static void func_free_l(SDL_VoutOverlay *overlay) -{ - if (!overlay) - return; - SDL_VoutOverlay_Opaque *opaque = overlay->opaque; - if (!opaque) - return; - overlay->unref(overlay); - if (opaque->mutex) - SDL_DestroyMutex(opaque->mutex); - - SDL_VoutOverlay_FreeInternal(overlay); -} +#if IS_TILEGRID_HEIC_ENABLED -static int func_lock(SDL_VoutOverlay *overlay) -{ - SDL_VoutOverlay_Opaque *opaque = overlay->opaque; - return SDL_LockMutex(opaque->mutex); -} - -static int func_unlock(SDL_VoutOverlay *overlay) -{ - SDL_VoutOverlay_Opaque *opaque = overlay->opaque; - return SDL_UnlockMutex(opaque->mutex); -} - -static void func_unref(SDL_VoutOverlay *overlay) -{ - if (!overlay) { - return; - } - SDL_VoutOverlay_Opaque *opaque = overlay->opaque; - if (!opaque) { - return; - } - - CVBufferRelease(opaque->pixel_buffer); - opaque->pixel_buffer = NULL; - return; -} +typedef struct FSTileSlot { + CVPixelBufferRef pb; // 已拷贝的 tile CVPixelBuffer(owned) + int x, y; // tile 在 canvas 上的位置 + int w, h; // tile 尺寸 + int filled; // 是否已填充 +} FSTileSlot; static void tile_slots_free(SDL_VoutOverlay_Opaque *opaque) { @@ -154,6 +116,49 @@ static int func_get_tile_buffers(SDL_VoutOverlay *overlay, } return k; } +#endif + + +static void func_free_l(SDL_VoutOverlay *overlay) +{ + if (!overlay) + return; + SDL_VoutOverlay_Opaque *opaque = overlay->opaque; + if (!opaque) + return; + overlay->unref(overlay); + if (opaque->mutex) + SDL_DestroyMutex(opaque->mutex); + + SDL_VoutOverlay_FreeInternal(overlay); +} + +static int func_lock(SDL_VoutOverlay *overlay) +{ + SDL_VoutOverlay_Opaque *opaque = overlay->opaque; + return SDL_LockMutex(opaque->mutex); +} + +static int func_unlock(SDL_VoutOverlay *overlay) +{ + SDL_VoutOverlay_Opaque *opaque = overlay->opaque; + return SDL_UnlockMutex(opaque->mutex); +} + +static void func_unref(SDL_VoutOverlay *overlay) +{ + if (!overlay) { + return; + } + SDL_VoutOverlay_Opaque *opaque = overlay->opaque; + if (!opaque) { + return; + } + + CVBufferRelease(opaque->pixel_buffer); + opaque->pixel_buffer = NULL; + return; +} static int func_fill_frame(SDL_VoutOverlay *overlay, const AVFrame *frame) { @@ -169,7 +174,7 @@ static int func_fill_frame(SDL_VoutOverlay *overlay, const AVFrame *frame) } SDL_VoutOverlay_Opaque *opaque = overlay->opaque; - +#if IS_TILEGRID_HEIC_ENABLED /* ---------- HEIC tile grid 分支 ---------- */ FSTileGridMetadata *tmeta = NULL; if (frame->opaque_ref && frame->opaque_ref->size >= (int)sizeof(FSTileGridMetadata)) { @@ -260,7 +265,7 @@ static int func_fill_frame(SDL_VoutOverlay *overlay, const AVFrame *frame) overlay->tile_canvas_w = 0; overlay->tile_canvas_h = 0; } - +#endif if (opaque->pixel_buffer != NULL) { CVPixelBufferRelease(opaque->pixel_buffer); @@ -333,10 +338,11 @@ CVPixelBufferRef SDL_VoutFFmpeg_HW_GetCVPixelBufferRef(SDL_VoutOverlay *overlay) overlay->unlock = func_unlock; overlay->unref = func_unref; overlay->func_fill_frame = func_fill_frame; +#if IS_TILEGRID_HEIC_ENABLED overlay->func_is_tile_pending = func_is_tile_pending; overlay->func_get_tile_count = func_get_tile_count; overlay->func_get_tile_buffers = func_get_tile_buffers; - +#endif opaque->mutex = SDL_CreateMutex(); return overlay; } diff --git a/ijkmedia/ijksdl/ijksdl_vout.c b/ijkmedia/ijksdl/ijksdl_vout.c index e9ede063..1cbbe4a4 100644 --- a/ijkmedia/ijksdl/ijksdl_vout.c +++ b/ijkmedia/ijksdl/ijksdl_vout.c @@ -217,6 +217,7 @@ int SDL_VoutFillFrameYUVOverlay(SDL_VoutOverlay *overlay, const AVFrame *frame) return overlay->func_fill_frame(overlay, frame); } +#if IS_TILEGRID_HEIC_ENABLED int SDL_VoutOverlay_IsTilePending(SDL_VoutOverlay *overlay) { if (!overlay || !overlay->func_is_tile_pending) @@ -231,7 +232,6 @@ int SDL_VoutOverlay_GetTileCount(SDL_VoutOverlay *overlay) return overlay->func_get_tile_count(overlay); } -#ifdef __APPLE__ int SDL_VoutOverlay_GetTileCVPixelBuffers(SDL_VoutOverlay *overlay, CVPixelBufferRef *out_buffers, int *out_x, int *out_y, diff --git a/ijkmedia/ijksdl/ijksdl_vout.h b/ijkmedia/ijksdl/ijksdl_vout.h index 62a57a3d..73f30462 100644 --- a/ijkmedia/ijksdl/ijksdl_vout.h +++ b/ijkmedia/ijksdl/ijksdl_vout.h @@ -32,7 +32,7 @@ #include "ijksdl_video.h" #include "ijksdl/ffmpeg/ijksdl_inc_ffmpeg.h" #include "ijksdl_fourcc.h" - +#include "ff_version.h" #ifdef __APPLE__ #include #endif @@ -56,7 +56,7 @@ struct SDL_VoutOverlay { //for auto rotate video int auto_z_rotate_degrees; int has_alpha; - +#if IS_TILEGRID_HEIC_ENABLED /* HEIC tile grid 支持: * 当 overlay 处于 tile-grid 模式时 is_tile_grid=1, * tile_canvas_w/h 为整张 canvas 的尺寸。 @@ -65,7 +65,8 @@ struct SDL_VoutOverlay { int is_tile_grid; int tile_canvas_w; int tile_canvas_h; - +#endif + SDL_Class *opaque_class; SDL_VoutOverlay_Opaque *opaque; @@ -75,7 +76,7 @@ struct SDL_VoutOverlay { void (*unref)(SDL_VoutOverlay *overlay); int (*func_fill_frame)(SDL_VoutOverlay *overlay, const AVFrame *frame); - +#if IS_TILEGRID_HEIC_ENABLED /* HEIC tile grid 查询接口(可选实现,NULL 表示不支持) * func_is_tile_pending: 返回 1 表示当前还在累积 tile,上游不应把此帧 push 到渲染队列 * func_get_tile_count: 返回已收集到的 tile 数(一般等于 nb_tiles) @@ -83,7 +84,6 @@ struct SDL_VoutOverlay { */ int (*func_is_tile_pending)(SDL_VoutOverlay *overlay); int (*func_get_tile_count)(SDL_VoutOverlay *overlay); -#ifdef __APPLE__ int (*func_get_tile_buffers)(SDL_VoutOverlay *overlay, CVPixelBufferRef *out_buffers, int *out_x, int *out_y, @@ -124,11 +124,11 @@ void SDL_VoutFreeYUVOverlay(SDL_VoutOverlay *overlay); void SDL_VoutUnrefYUVOverlay(SDL_VoutOverlay *overlay); int SDL_VoutFillFrameYUVOverlay(SDL_VoutOverlay *overlay, const AVFrame *frame); +#if IS_TILEGRID_HEIC_ENABLED /* HEIC tile grid: 查询 overlay 是否还在累积 tile(未攒齐不要 push) */ int SDL_VoutOverlay_IsTilePending(SDL_VoutOverlay *overlay); /* HEIC tile grid: 已收集的 tile 数 */ int SDL_VoutOverlay_GetTileCount(SDL_VoutOverlay *overlay); -#ifdef __APPLE__ /* HEIC tile grid: 批量取 tile CVPixelBufferRef 及位置(调用方负责 CVPixelBufferRetain/Release) */ int SDL_VoutOverlay_GetTileCVPixelBuffers(SDL_VoutOverlay *overlay, CVPixelBufferRef *out_buffers, diff --git a/ijkmedia/ijksdl/metal/FSMetalView.m b/ijkmedia/ijksdl/metal/FSMetalView.m index 10ce35db..e5b17c32 100644 --- a/ijkmedia/ijksdl/metal/FSMetalView.m +++ b/ijkmedia/ijksdl/metal/FSMetalView.m @@ -596,7 +596,7 @@ - (void)drawRect:(NSRect)dirtyRect //[renderEncoder popDebugGroup]; [renderEncoder endEncoding]; //[commandBuffer presentDrawable:drawable]; - [commandBuffer presentDrawable:drawable atTime:currentAttach.presentationTime]; + [commandBuffer presentDrawable:drawable]; // Finalize rendering here & push the command buffer to the GPU. [commandBuffer commit]; self.previousTag = currentAttach.tag;