CLAUDE.md 1.9 KB

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Commands

One-time setup:

bash scripts/dev/setup_sdk_dev.sh

Build demos:

bash scripts/dev/build_demo.sh all    # both ObjC and Swift demos
bash scripts/dev/build_demo.sh objc
bash scripts/dev/build_demo.sh swift

Tests: Run via Xcode or xcodebuild test — no standalone test script exists.

IDE: Open QGVAPlayerDev.xcworkspace to work on SDK + demos together.

Architecture

QGVAPlayer is a high-performance iOS video animation player (iOS 12+) using H.264 hardware decoding and Metal GPU rendering. It plays VAP-format MP4s with transparent channel support, used for live-streaming special effects.

Data flow: MP4 file → LNMP4Parser (reads VAP boxes) → LNAnimatedImageDecodeThreadPool (multi-threaded frame decode) → LNHWDMetalCoreRenderer (YUV→RGB, Metal shaders) → LNVAPPlayerView (UIView display)

Key source locations (all under QGVAPlayer/QGVAPlayer/LNSwift/):

Directory Purpose
Core/ Playback engine (LNControllers.swift, LNVAPFacade.swift)
View/ LNVAPPlayerView (primary API), LNVAPWrapView
Render/ Metal renderer; OpenGL fallback via renderByOpenGL flag
Parser/ LNMP4Parser — reads MP4 boxes including custom vapc metadata
Model/ Playback types and data models
Bridges/ ObjC compatibility shims (LNLegacyMappings.swift)

Public API entry point: LNVAPPlayerView.lnPlay(filePath:repeatCount:) — any UIView can host this. Delegates: LNVAPPlaybackDelegate (Swift) and LNVAPLegacyPlaybackDelegate (ObjC).

Rendering: Metal (LNHWDMetalCoreRenderer) is default on iOS 13+; shaders live in QGVAPlayer/QGVAPlayer/Shaders/QGHWDShaders.metal. Alpha blend modes (left/right/top/bottom) are configured via vapc MP4 box metadata.