diff --git a/NEWS.md b/NEWS.md index a482e748ad..091e2043b1 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,11 @@ tag next -------------------------------- +tag f0.4.4 +-------------------------------- +- desktop: add libyuv for YUV2RGB +- ijkplayer: iOS videotoolbox notify rotate msg +- fix: call start after preparAsync may cause pause state + tag f0.4.3 -------------------------------- - desktop: fix invalid audio channel number for portaudio diff --git a/android/ijkplayer/gradle.properties b/android/ijkplayer/gradle.properties index e2af4d1c04..8f323baa5c 100644 --- a/android/ijkplayer/gradle.properties +++ b/android/ijkplayer/gradle.properties @@ -17,8 +17,8 @@ # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true -VERSION_NAME=0.4.3 -VERSION_CODE=000403 +VERSION_NAME=0.4.4 +VERSION_CODE=000404 GROUP=com.befovy.fijkplayer # http://central.sonatype.org/pages/requirements.html diff --git a/desktop/CMakeLists.txt b/desktop/CMakeLists.txt index af36ca0311..326eb1bdd8 100644 --- a/desktop/CMakeLists.txt +++ b/desktop/CMakeLists.txt @@ -93,7 +93,7 @@ target_include_directories(IjkPlayer PRIVATE ${IJKROOT_PATH}/ijkmedia) target_include_directories(IjkPlayer PRIVATE ${IJK_FFMPAG_BUILD_DIR}/include) target_include_directories(IjkPlayer PRIVATE "${IJK_DESKTOP_PTHREAD_BUILD_DIR}/../../include") -target_link_libraries(IjkPlayer ijksdl_static ijkplayer_static) +target_link_libraries(IjkPlayer ijksdl_static ijkplayer_static yuv) if (WIN32) diff --git a/ijkmedia/CMakeLists.txt b/ijkmedia/CMakeLists.txt index f021e4b0aa..e788df3132 100644 --- a/ijkmedia/CMakeLists.txt +++ b/ijkmedia/CMakeLists.txt @@ -26,6 +26,7 @@ endif () if(IJK_DESKTOP_UNI) add_subdirectory(portaudio) + add_subdirectory(ijkyuv) endif() add_subdirectory(ijksdl) diff --git a/ijkmedia/ijkplayer/ff_ffplay.c b/ijkmedia/ijkplayer/ff_ffplay.c index 5e70b6791a..5ed8b11453 100755 --- a/ijkmedia/ijkplayer/ff_ffplay.c +++ b/ijkmedia/ijkplayer/ff_ffplay.c @@ -3372,6 +3372,10 @@ static int read_thread(void *arg) SDL_Delay(20); } } + if (is->pause_req && ffp->start_on_prepared) { + ffp->auto_resume = true; + } + if (ffp->auto_resume) { ffp_notify_msg1(ffp, FFP_REQ_START); ffp->auto_resume = 0; diff --git a/ijkmedia/ijksdl/CMakeLists.txt b/ijkmedia/ijksdl/CMakeLists.txt index 8c60483194..731e57a13c 100644 --- a/ijkmedia/ijksdl/CMakeLists.txt +++ b/ijkmedia/ijksdl/CMakeLists.txt @@ -132,6 +132,7 @@ target_include_directories(${IJKSDL_LIB_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/ if(IJK_DESKTOP_UNI) target_include_directories(${IJKSDL_LIB_NAME} PRIVATE "${IJKROOT_PATH}/ijkmedia/portaudio/include") + target_include_directories(${IJKSDL_LIB_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/../ijkyuv/include) endif() if (WIN32) diff --git a/ijkmedia/ijksdl/ffmpeg/abi_all/image_convert.c b/ijkmedia/ijksdl/ffmpeg/abi_all/image_convert.c index d48a92761a..1b0aac6da2 100644 --- a/ijkmedia/ijksdl/ffmpeg/abi_all/image_convert.c +++ b/ijkmedia/ijksdl/ffmpeg/abi_all/image_convert.c @@ -22,7 +22,7 @@ *****************************************************************************/ #include "../ijksdl_image_convert.h" -#if defined(__ANDROID__) +#if defined(__ANDROID__) || defined(IJK_DESKTOP_UNI) #include "libyuv.h" #endif @@ -30,7 +30,7 @@ int ijk_image_convert(int width, int height, enum AVPixelFormat dst_format, uint8_t **dst_data, int *dst_linesize, enum AVPixelFormat src_format, const uint8_t **src_data, const int *src_linesize) { -#if defined(__ANDROID__) +#if defined(__ANDROID__) || defined(IJK_DESKTOP_UNI) switch (src_format) { case AV_PIX_FMT_YUV420P: case AV_PIX_FMT_YUVJ420P: // FIXME: 9 not equal to AV_PIX_FMT_YUV420P, but a workaround @@ -49,6 +49,20 @@ int ijk_image_convert(int width, int height, src_data[2], src_linesize[2], dst_data[0], dst_linesize[0], width, height); + case AV_PIX_FMT_BGR32_1: + return I420ToARGB( + src_data[0], src_linesize[0], + src_data[1], src_linesize[1], + src_data[2], src_linesize[2], + dst_data[0], dst_linesize[0], + width, height); + case AV_PIX_FMT_RGB32_1: + return I420ToABGR( + src_data[0], src_linesize[0], + src_data[1], src_linesize[1], + src_data[2], src_linesize[2], + dst_data[0], dst_linesize[0], + width, height); default: break; } diff --git a/ijkmedia/ijksdl/ffmpeg/ijksdl_vout_overlay_ffmpeg.c b/ijkmedia/ijksdl/ffmpeg/ijksdl_vout_overlay_ffmpeg.c index c22f8633aa..56c2588ce6 100644 --- a/ijkmedia/ijksdl/ffmpeg/ijksdl_vout_overlay_ffmpeg.c +++ b/ijkmedia/ijksdl/ffmpeg/ijksdl_vout_overlay_ffmpeg.c @@ -202,10 +202,10 @@ static int func_fill_frame(SDL_VoutOverlay *overlay, const AVFrame *frame) dst_format = AV_PIX_FMT_RGB565; break; case SDL_FCC_BGRA: - dst_format = AV_PIX_FMT_BGRA; + dst_format = AV_PIX_FMT_BGR32_1; break; case SDL_FCC_RGBA: - dst_format = AV_PIX_FMT_RGBA; + dst_format = AV_PIX_FMT_RGB32_1; break; default: ALOGE("SDL_VoutFFmpeg_ConvertPicture: unexpected overlay format %s(%d)", diff --git a/ios/CocoaPodsPub/FIJKPlayer.podspec b/ios/CocoaPodsPub/FIJKPlayer.podspec index b5e7256405..ef540a0e1e 100644 --- a/ios/CocoaPodsPub/FIJKPlayer.podspec +++ b/ios/CocoaPodsPub/FIJKPlayer.podspec @@ -16,7 +16,7 @@ Pod::Spec.new do |spec| # spec.name = "FIJKPlayer" - spec.version = "0.4.3" + spec.version = "0.4.4" spec.summary = "ijkplayer iOS video player SDK" spec.author = { "befovy" => "befovy@gmail.com" } @@ -75,7 +75,7 @@ Pod::Spec.new do |spec| # Supports git, hg, bzr, svn and HTTP. # - spec.source = { :http => "https://github.com/befovy/ijkplayer/releases/download/f0.4.3/IJKPlayer.tar.gz" } + spec.source = { :http => "https://github.com/befovy/ijkplayer/releases/download/f0.4.4/IJKPlayer.tar.gz" } # ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # # # CocoaPods is smart about how it includes source code. For source files diff --git a/ios/IJKMediaDemo/IJKMediaDemo/IJKMediaDemo-Info.plist b/ios/IJKMediaDemo/IJKMediaDemo/IJKMediaDemo-Info.plist index 9657171a13..188c74cebc 100644 --- a/ios/IJKMediaDemo/IJKMediaDemo/IJKMediaDemo-Info.plist +++ b/ios/IJKMediaDemo/IJKMediaDemo/IJKMediaDemo-Info.plist @@ -21,11 +21,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.4.3 + 0.4.4 CFBundleSignature ???? CFBundleVersion - 000403 + 000404 LSRequiresIPhoneOS UIFileSharingEnabled diff --git a/ios/IJKMediaPlayer/IJKMediaPlayer/IJKFFMediaPlayer.h b/ios/IJKMediaPlayer/IJKMediaPlayer/IJKFFMediaPlayer.h index 24503ca004..1bac037b46 100644 --- a/ios/IJKMediaPlayer/IJKMediaPlayer/IJKFFMediaPlayer.h +++ b/ios/IJKMediaPlayer/IJKMediaPlayer/IJKFFMediaPlayer.h @@ -39,6 +39,7 @@ typedef NS_ENUM(NSInteger, IJKMPEventType) { IJKMPET_BUFFERING_START = 500, IJKMPET_BUFFERING_END = 501, IJKMPET_BUFFERING_UPDATE = 502, + IJKMPET_CURRENT_POSITION_UPDATE = 510, IJKMPET_PLAYBACK_STATE_CHANGED = 700, }; diff --git a/ios/IJKMediaPlayer/IJKMediaPlayer/ijkmedia/ijkplayer/ios/pipeline/ffpipenode_ios_videotoolbox_vdec.m b/ios/IJKMediaPlayer/IJKMediaPlayer/ijkmedia/ijkplayer/ios/pipeline/ffpipenode_ios_videotoolbox_vdec.m index 6c742d05f6..861e06390f 100644 --- a/ios/IJKMediaPlayer/IJKMediaPlayer/ijkmedia/ijkplayer/ios/pipeline/ffpipenode_ios_videotoolbox_vdec.m +++ b/ios/IJKMediaPlayer/IJKMediaPlayer/ijkmedia/ijkplayer/ios/pipeline/ffpipenode_ios_videotoolbox_vdec.m @@ -52,6 +52,8 @@ int videotoolbox_video_thread(void *arg) Decoder *d = &is->viddec; int ret = 0; + ffp_notify_msg2(ffp, FFP_MSG_VIDEO_ROTATION_CHANGED, ffp_get_video_rotate_degrees(ffp)); + for (;;) { if (is->abort_request || d->queue->abort_request) {