|
@@ -229,11 +229,10 @@ extension OJADecoder {
|
|
|
// 这里统一采用coverBuffer的时间轴,否则会出现assetWriter不能写入帧的问题(因为之前时间点上已经写入过了)
|
|
|
// 参考https://stackoverflow.com/questions/34424252/unknown-underlying-osstatus-error-16364-when-using-avassetwriter
|
|
|
let sampleBufferTime: CMTime = CMSampleBufferGetOutputPresentationTimeStamp(coverBuffer)
|
|
|
-
|
|
|
-
|
|
|
- //这里有一个重大问题!!!!
|
|
|
- //这里有一个重大问题!!!!
|
|
|
- //这里有一个重大问题!!!!
|
|
|
+
|
|
|
+ // 这里有一个重大问题!!!!
|
|
|
+ // 这里有一个重大问题!!!!
|
|
|
+ // 这里有一个重大问题!!!!
|
|
|
/*
|
|
|
因为这里图片和视频都是一帧一帧来处理的,而blendFilter当图片和视频blend时,
|
|
|
都是以第一个输入的视频的时间轴为准的,
|
|
@@ -242,12 +241,20 @@ extension OJADecoder {
|
|
|
这个问题只有在图片后面接了其他filter之后会出现
|
|
|
因为接了filter之后,filter的outputFrame就不是图片的outputFrame了
|
|
|
*/
|
|
|
- for input in self.lastInputArray {
|
|
|
- input.processFrame(atSampleTime: sampleBufferTime)
|
|
|
+ for input in lastInputArray {
|
|
|
+ autoreleasepool {
|
|
|
+ if let mMovieInput = input as? OJAMovieFrameInput {
|
|
|
+ if let inputBuffer = mMovieInput.readVideoSampleBuffer() {
|
|
|
+ mMovieInput.processFrame(atSampleTime: sampleBufferTime, frameBuffer: inputBuffer)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ input.processFrame(atSampleTime: sampleBufferTime)
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/// 读取 fg 和 fgMask 素材,并且上传纹理
|
|
|
- if let fgMovieInput = self.fgMovieInput as? OJAAlphaMovieFrameInput{
|
|
|
+ if let fgMovieInput = self.fgMovieInput as? OJAAlphaMovieFrameInput {
|
|
|
if let fgBufferTemp = fgMovieInput.readCoverFrameBuffer(),
|
|
|
let fgMaskBufferTemp = fgMovieInput.readMaskFrameBuffer() {
|
|
|
fgMovieInput.processFrame(atSampleTime: sampleBufferTime, coverBuffer: fgBufferTemp, maskBuffer: fgMaskBufferTemp)
|