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) {