# LN API Parity Table (OC -> Swift/LN)

## UIView+VAP
- `playHWDMp4:` -> `LNVAPFacade.lnPlayPlayer:filePath:` -> Done
- `playHWDMP4:delegate:` -> `LNVAPFacade.lnPlayPlayer:filePath:delegate:` -> Done
- `playHWDMP4:repeatCount:delegate:` -> `LNVAPFacade.lnPlayPlayer:filePath:repeatCount:delegate:` -> Done
- `stopHWDMP4` -> `LNVAPFacade.lnStopPlayer:` -> Done
- `pauseHWDMP4` -> `LNVAPFacade.lnPausePlayer:` -> Done
- `resumeHWDMP4` -> `LNVAPFacade.lnResumePlayer:` -> Done
- `registerHWDLog:` -> `LNVAPFacade.lnRegisterLogHandler:` -> Done
- `enableOldVersion:` -> `LNVAPFacade.lnEnableOldVersionOnPlayer:enable:` -> Done
- `setMute:` -> `LNVAPFacade.lnSetMutePlayer:mute:` -> Done
- `addVapTapGesture:` -> `LNVAPFacade.lnAddPlayerVapTapGesture:handler:` -> Done
- `addVapGesture:callback:` -> `LNVAPFacade.lnAddPlayerVapGesture:gesture:callback:` -> Done
- `hwd_fps` -> `LNVAPFacade.lnSetPlayerFPS:fps:` / `lnGetPlayerFPS:` -> Done
- `hwd_renderByOpenGL` -> `LNVAPFacade.lnSetPlayerRenderByOpenGL:enabled:` / `lnGetPlayerRenderByOpenGL:` -> Done
- `hwd_enterBackgroundOP` -> `LNVAPFacade.lnSetPlayerEnterBackgroundOperation:operation:` / `lnGetPlayerEnterBackgroundOperation:` -> Done
- `hwd_currentFrame` -> `LNVAPFacade.lnGetPlayerCurrentFrame:` -> Done
- `hwd_MP4FilePath` -> `LNVAPFacade.lnGetPlayerMP4FilePath:` -> Done
- `vap_maskInfo` -> `LNVAPFacade.lnSetPlayerMaskInfo:maskInfo:` / `lnGetPlayerMaskInfo:` -> Done

## UIView (MP4HWDDeprecated)
- `playHWDMP4:fps:blendMode:repeatCount:delegate:` family -> `LNVAPFacade.lnPlayPlayerDeprecated:filePath:fps:blendMode:repeatCount:delegate:` -> Done
- Note: `blendMode` kept only for compatibility; behavior follows current VAP path.

## QGVAPWrapView
- `playHWDMP4:repeatCount:delegate:` -> `LNVAPFacade.lnPlayWrap:filePath:repeatCount:delegate:` -> Done
- `play(no repeat/delegate convenience)` -> `LNVAPFacade.lnPlayWrap:filePath:` / `lnPlayWrap:filePath:delegate:` -> Done
- `stopHWDMP4` -> `LNVAPFacade.lnStopWrap:` -> Done
- `pauseHWDMP4` -> `LNVAPFacade.lnPauseWrap:` -> Done
- `resumeHWDMP4` -> `LNVAPFacade.lnResumeWrap:` -> Done
- `setMute:` -> `LNVAPFacade.lnSetMuteWrap:mute:` -> Done
- `addVapTapGesture:` -> `LNVAPFacade.lnAddWrapTapGesture:handler:` -> Done
- `addVapGesture:callback:` -> `LNVAPFacade.lnAddWrapGesture:gesture:callback:` -> Done
- `contentMode` -> `LNVAPFacade.lnSetWrapContentMode:mode:` / `lnGetWrapContentMode:` -> Done
- `autoDestoryAfterFinish` -> `LNVAPFacade.lnSetWrapAutoDestroyAfterFinish:enabled:` / `lnGetWrapAutoDestroyAfterFinish:` -> Done

## Behavioral Notes
- Legacy selector names are not re-declared on `LNVAPPlayerView/LNVAPWrapView` when they conflict with `UIView` category selectors; the migration path is via `LNVAPFacade`.
- Wrap legacy delegate callbacks now pass internal player container view (`playerView`) first, matching OC wrap behavior (`vapView`).
