From 49a8bca5829efbe2b8b89781ff03b54549ab2a38 Mon Sep 17 00:00:00 2001 From: jiasong <593908937@qq.com> Date: Mon, 13 Apr 2026 14:02:37 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E4=BD=BF=E7=94=A8Xcode=20View=20Hierarchy?= =?UTF-8?q?=E7=AD=89=E9=98=BB=E7=A2=8D=E4=B8=BB=E7=BA=BF=E7=A8=8B=E6=B8=B2?= =?UTF-8?q?=E6=9F=93=E7=9A=84=E4=BB=A3=E7=A0=81=E4=BC=9A=E4=BD=BFMetal?= =?UTF-8?q?=E6=B8=B2=E6=9F=93=E5=8D=A1=E9=A1=BF=E6=88=96=E9=BB=91=E5=B1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ijkmedia/ijksdl/metal/FSMetalView.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ijkmedia/ijksdl/metal/FSMetalView.m b/ijkmedia/ijksdl/metal/FSMetalView.m index 03614617..2c22b5ed 100644 --- a/ijkmedia/ijksdl/metal/FSMetalView.m +++ b/ijkmedia/ijksdl/metal/FSMetalView.m @@ -489,7 +489,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; From 4fc8c29ca0ccd7038e64bbfd4494aabf51de98f2 Mon Sep 17 00:00:00 2001 From: qianlongxu Date: Sat, 9 May 2026 09:48:55 +0800 Subject: [PATCH 2/6] disable tile grid heic feature when use ffmpeg 6 --- ijkmedia/ijkplayer/ff_ffplay.c | 49 ++++--- ijkmedia/ijkplayer/ff_version.h | 4 +- ijkmedia/ijksdl/apple/ijksdl_vout_ios_gles2.m | 5 +- .../ijksdl/apple/ijksdl_vout_overlay_ffmpeg.m | 137 +++++++++--------- .../apple/ijksdl_vout_overlay_ffmpeg_hw.m | 127 ++++++++-------- ijkmedia/ijksdl/ijksdl_vout.c | 2 +- ijkmedia/ijksdl/ijksdl_vout.h | 10 +- 7 files changed, 176 insertions(+), 158 deletions(-) diff --git a/ijkmedia/ijkplayer/ff_ffplay.c b/ijkmedia/ijkplayer/ff_ffplay.c index 8fa72455..97e29345 100755 --- a/ijkmedia/ijkplayer/ff_ffplay.c +++ b/ijkmedia/ijkplayer/ff_ffplay.c @@ -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; @@ -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_version.h b/ijkmedia/ijkplayer/ff_version.h index 853114a8..46fa2797 100644 --- a/ijkmedia/ijkplayer/ff_version.h +++ b/ijkmedia/ijkplayer/ff_version.h @@ -26,9 +26,9 @@ #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_FFMPEG_5 (LIBAVFORMAT_VERSION_MAJOR >= 59) #define IS_FFMPEG_4 (LIBAVFORMAT_VERSION_MAJOR >= 58) - +#define IS_TILEGRID_HEIC_ENABLED IS_FFMPEG_7 #endif /* ff_version_h */ 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..b9393191 100644 --- a/ijkmedia/ijksdl/apple/ijksdl_vout_overlay_ffmpeg.m +++ b/ijkmedia/ijksdl/apple/ijksdl_vout_overlay_ffmpeg.m @@ -36,6 +36,8 @@ #import #endif +#if IS_TILEGRID_HEIC_ENABLED + typedef struct FSTileSlot { CVPixelBufferRef pb; // 已拷贝的 tile CVPixelBuffer(owned) int x, y; // tile 在 canvas 上的位置 @@ -43,8 +45,66 @@ int filled; // 是否已填充 } FSTileSlot; -// forward declaration so func_free_l can call it before definition -static void tile_slots_free(SDL_VoutOverlay_Opaque *opaque); +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 struct SDL_VoutOverlay_Opaque { SDL_mutex *mutex; @@ -60,7 +120,9 @@ int tile_ready; // 1 表示已攒齐、可显示 int tile_canvas_w; int tile_canvas_h; +#if IS_TILEGRID_HEIC_ENABLED FSTileSlot *tiles; // 长度 tile_expected +#endif }; static SDL_Class g_vout_overlay_ffmpeg_class = { @@ -332,9 +394,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 +415,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 +518,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 +551,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 +585,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..f3c5e3c5 100644 --- a/ijkmedia/ijksdl/apple/ijksdl_vout_overlay_ffmpeg_hw.m +++ b/ijkmedia/ijksdl/apple/ijksdl_vout_overlay_ffmpeg_hw.m @@ -29,6 +29,8 @@ #include "ijksdl_video.h" #include "ijkplayer/ff_heic_tile.h" +#if IS_TILEGRID_HEIC_ENABLED + typedef struct FSTileSlot { CVPixelBufferRef pb; // 已拷贝的 tile CVPixelBuffer(owned) int x, y; // tile 在 canvas 上的位置 @@ -36,65 +38,6 @@ int filled; // 是否已填充 } FSTileSlot; -// forward declaration so func_free_l can call it before definition -static void tile_slots_free(SDL_VoutOverlay_Opaque *opaque); - -struct SDL_VoutOverlay_Opaque { - SDL_mutex *mutex; - CVPixelBufferRef pixel_buffer; - Uint16 pitches[AV_NUM_DATA_POINTERS]; - - /* HEIC tile grid 模式 */ - int tile_mode; // 1 表示当前正在累积 tile - int tile_expected; // 期望总数(grid->nb_tiles) - int tile_received; // 已收到并存入槽位的 tile 数 - int tile_ready; // 1 表示已攒齐、可显示 - int tile_canvas_w; - int tile_canvas_h; - FSTileSlot *tiles; // 长度 tile_expected -}; - -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 void tile_slots_free(SDL_VoutOverlay_Opaque *opaque) { if (!opaque || !opaque->tiles) @@ -154,6 +97,65 @@ static int func_get_tile_buffers(SDL_VoutOverlay *overlay, } return k; } +#endif + +struct SDL_VoutOverlay_Opaque { + SDL_mutex *mutex; + CVPixelBufferRef pixel_buffer; + Uint16 pitches[AV_NUM_DATA_POINTERS]; + + /* HEIC tile grid 模式 */ + int tile_mode; // 1 表示当前正在累积 tile + int tile_expected; // 期望总数(grid->nb_tiles) + int tile_received; // 已收到并存入槽位的 tile 数 + int tile_ready; // 1 表示已攒齐、可显示 + int tile_canvas_w; + int tile_canvas_h; +#if IS_TILEGRID_HEIC_ENABLED + 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); +} + +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 +171,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 +262,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 +335,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..2ab5bd7c 100644 --- a/ijkmedia/ijksdl/ijksdl_vout.h +++ b/ijkmedia/ijksdl/ijksdl_vout.h @@ -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, From 99749419068f39000e3d77b0070219788bc16283 Mon Sep 17 00:00:00 2001 From: qianlongxu Date: Sat, 9 May 2026 09:51:11 +0800 Subject: [PATCH 3/6] ffmpeg6 can use av_packet_side_data_get --- ijkmedia/ijkplayer/ff_ffplay.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ijkmedia/ijkplayer/ff_ffplay.c b/ijkmedia/ijkplayer/ff_ffplay.c index 97e29345..de797de4 100755 --- a/ijkmedia/ijkplayer/ff_ffplay.c +++ b/ijkmedia/ijkplayer/ff_ffplay.c @@ -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; From d5f7ef991bd525f450223dd8824059d0381b8385 Mon Sep 17 00:00:00 2001 From: qianlongxu Date: Sat, 9 May 2026 10:13:53 +0800 Subject: [PATCH 4/6] compatible with ffmpeg 8 --- ijkmedia/ijkplayer/ff_ffinc.h | 2 +- ijkmedia/ijkplayer/ff_ffplay.c | 4 ++-- ijkmedia/ijkplayer/ff_ffplay_def.h | 2 +- ijkmedia/ijkplayer/ff_version.h | 6 ++++++ ijkmedia/ijkplayer/ijkmeta.c | 3 ++- 5 files changed, 12 insertions(+), 5 deletions(-) diff --git a/ijkmedia/ijkplayer/ff_ffinc.h b/ijkmedia/ijkplayer/ff_ffinc.h index 6ae586b2..e9991220 100644 --- a/ijkmedia/ijkplayer/ff_ffinc.h +++ b/ijkmedia/ijkplayer/ff_ffinc.h @@ -37,7 +37,7 @@ #include "libswresample/swresample.h" #include "libavformat/avformat.h" #include "libavformat/application.h" -#include "libavcodec/avfft.h" +//#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 de797de4..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 @@ -3663,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; } } 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 46fa2797..c08024b9 100644 --- a/ijkmedia/ijkplayer/ff_version.h +++ b/ijkmedia/ijkplayer/ff_version.h @@ -28,7 +28,13 @@ #define IS_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/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); From e4e3fdf51bba837053ee58250a89f321aa9fd490 Mon Sep 17 00:00:00 2001 From: qianlongxu Date: Mon, 11 May 2026 09:13:43 +0800 Subject: [PATCH 5/6] compatible with ffmpeg 5,6,7,8 --- FFToolChain | 2 +- FSPlayer-5.yml | 302 ++++++++++++++++++ FSPlayer-6.yml | 302 ++++++++++++++++++ generate-proj.sh | 7 +- ijkmedia/ijkplayer/ff_ffinc.h | 5 + ijkmedia/ijkplayer/ijkavformat/allformats.c | 4 + ijkmedia/ijkplayer/ijkavformat/ijkhls.c | 27 +- ijkmedia/ijkplayer/ijkavformat/ijkiourlhook.c | 5 + ijkmedia/ijkplayer/ijkavformat/ijklivehook.c | 7 +- ijkmedia/ijkplayer/ijkavformat/ijksegment.c | 6 +- ijkmedia/ijkplayer/ijkavformat/ijkurlhook.c | 6 +- .../ijksdl/apple/ijksdl_vout_overlay_ffmpeg.m | 39 +-- .../apple/ijksdl_vout_overlay_ffmpeg_hw.m | 35 +- ijkmedia/ijksdl/ijksdl_vout.h | 2 +- 14 files changed, 705 insertions(+), 44 deletions(-) create mode 100644 FSPlayer-5.yml create mode 100644 FSPlayer-6.yml 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 e9991220..c6888124 100644 --- a/ijkmedia/ijkplayer/ff_ffinc.h +++ b/ijkmedia/ijkplayer/ff_ffinc.h @@ -36,7 +36,12 @@ #include "libavutil/version.h" #include "libswresample/swresample.h" #include "libavformat/avformat.h" +#include "ff_version.h" +#if IS_FFMPEG_6 #include "libavformat/application.h" +#else +#include "libavutil/application.h" +#endif //#include "libavcodec/avfft.h" #include "libswscale/swscale.h" #include "ijksdl/ijksdl.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/ijksdl/apple/ijksdl_vout_overlay_ffmpeg.m b/ijkmedia/ijksdl/apple/ijksdl_vout_overlay_ffmpeg.m index b9393191..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,6 +37,25 @@ #import #endif +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) + int tile_received; // 已收到并存入槽位的 tile 数 + int tile_ready; // 1 表示已攒齐、可显示 + int tile_canvas_w; + int tile_canvas_h; + struct FSTileSlot *tiles; // 长度 tile_expected +#endif +}; + #if IS_TILEGRID_HEIC_ENABLED typedef struct FSTileSlot { @@ -106,25 +126,6 @@ static int func_get_tile_buffers(SDL_VoutOverlay *overlay, } #endif -struct SDL_VoutOverlay_Opaque { - SDL_mutex *mutex; - Uint16 pitches[AV_NUM_DATA_POINTERS]; - - CVPixelBufferRef pixelBuffer; - CVPixelBufferPoolRef pixelBufferPool; - - /* HEIC tile grid 模式 */ - int tile_mode; // 1 表示当前正在累积 tile - int tile_expected; // 期望总数(grid->nb_tiles) - int tile_received; // 已收到并存入槽位的 tile 数 - int tile_ready; // 1 表示已攒齐、可显示 - int tile_canvas_w; - int tile_canvas_h; -#if IS_TILEGRID_HEIC_ENABLED - FSTileSlot *tiles; // 长度 tile_expected -#endif -}; - static SDL_Class g_vout_overlay_ffmpeg_class = { .name = "FFmpegVoutOverlay", }; diff --git a/ijkmedia/ijksdl/apple/ijksdl_vout_overlay_ffmpeg_hw.m b/ijkmedia/ijksdl/apple/ijksdl_vout_overlay_ffmpeg_hw.m index f3c5e3c5..131315b6 100644 --- a/ijkmedia/ijksdl/apple/ijksdl_vout_overlay_ffmpeg_hw.m +++ b/ijkmedia/ijksdl/apple/ijksdl_vout_overlay_ffmpeg_hw.m @@ -28,6 +28,25 @@ #include "ijksdl_vout_internal.h" #include "ijksdl_video.h" #include "ijkplayer/ff_heic_tile.h" +#include "ff_version.h" + +struct FSTileSlot; +struct SDL_VoutOverlay_Opaque { + SDL_mutex *mutex; + CVPixelBufferRef pixel_buffer; + Uint16 pitches[AV_NUM_DATA_POINTERS]; + + /* HEIC tile grid 模式 */ + int tile_mode; // 1 表示当前正在累积 tile + int tile_expected; // 期望总数(grid->nb_tiles) + int tile_received; // 已收到并存入槽位的 tile 数 + int tile_ready; // 1 表示已攒齐、可显示 + int tile_canvas_w; + int tile_canvas_h; +#if IS_TILEGRID_HEIC_ENABLED + struct FSTileSlot *tiles; // 长度 tile_expected +#endif +}; #if IS_TILEGRID_HEIC_ENABLED @@ -99,22 +118,6 @@ static int func_get_tile_buffers(SDL_VoutOverlay *overlay, } #endif -struct SDL_VoutOverlay_Opaque { - SDL_mutex *mutex; - CVPixelBufferRef pixel_buffer; - Uint16 pitches[AV_NUM_DATA_POINTERS]; - - /* HEIC tile grid 模式 */ - int tile_mode; // 1 表示当前正在累积 tile - int tile_expected; // 期望总数(grid->nb_tiles) - int tile_received; // 已收到并存入槽位的 tile 数 - int tile_ready; // 1 表示已攒齐、可显示 - int tile_canvas_w; - int tile_canvas_h; -#if IS_TILEGRID_HEIC_ENABLED - FSTileSlot *tiles; // 长度 tile_expected -#endif -}; static void func_free_l(SDL_VoutOverlay *overlay) { diff --git a/ijkmedia/ijksdl/ijksdl_vout.h b/ijkmedia/ijksdl/ijksdl_vout.h index 2ab5bd7c..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 From 61e1725e14f0aa8936e0375219a2128e7fd84e92 Mon Sep 17 00:00:00 2001 From: qianlongxu Date: Mon, 11 May 2026 10:10:53 +0800 Subject: [PATCH 6/6] use ffmpeg8 --- .github/workflows/apple.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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