FFMpegMediaFrameSource: fix video playback after seek

This commit is contained in:
Peter Iakovlev
2019-03-21 19:31:40 +04:00
parent bd4b2544f4
commit dbb1bd63ed
2 changed files with 14 additions and 7 deletions

View File

@@ -276,8 +276,10 @@ final class FFMpegMediaFrameSource: NSObject, MediaFrameSource {
return MediaFrameSourceSeekResult(buffers: MediaPlaybackBuffers(audioBuffer: nil, videoBuffer: nil), extraDecodedVideoFrames: [], timestamp: timestamp)
}
}))
let _ = currentSemaphore.swap(nil)
subscriber.putCompletion()
} else {
let _ = currentSemaphore.swap(nil)
subscriber.putError(.generic)
}
}

View File

@@ -84,7 +84,7 @@ private func readPacketCallback(userData: UnsafeMutableRawPointer?, buffer: Unsa
}
if totalCount > maximumFetchSize {
context.readingError = true
return -1
return 0
}
}
@@ -111,7 +111,8 @@ private func readPacketCallback(userData: UnsafeMutableRawPointer?, buffer: Unsa
let _ = context.currentSemaphore.swap(nil)
disposable.dispose()
if !completedRequest {
return -1
context.readingError = true
return 0
}
}
}
@@ -162,7 +163,8 @@ private func readPacketCallback(userData: UnsafeMutableRawPointer?, buffer: Unsa
let _ = context.currentSemaphore.swap(nil)
disposable.dispose()
if !completedRequest {
return -1
context.readingError = true
return 0
}
}
}
@@ -175,7 +177,8 @@ private func readPacketCallback(userData: UnsafeMutableRawPointer?, buffer: Unsa
}
if context.closed {
return -1
context.readingError = true
return 0
}
return fetchedCount
}
@@ -212,7 +215,8 @@ private func seekCallback(userData: UnsafeMutableRawPointer?, offset: Int64, whe
let _ = context.currentSemaphore.swap(nil)
disposable.dispose()
if !completedRequest {
return -1
context.readingError = true
return 0
}
resourceSize = resultSize
}
@@ -222,7 +226,7 @@ private func seekCallback(userData: UnsafeMutableRawPointer?, offset: Int64, whe
}
if (whence & FFMPEG_AVSEEK_SIZE) != 0 {
result = Int64(resourceSize == Int(Int32.max - 1) ? -1 : resourceSize)
result = Int64(resourceSize == Int(Int32.max - 1) ? 0 : resourceSize)
} else {
context.readingOffset = Int(min(Int64(resourceSize), offset))
@@ -248,7 +252,8 @@ private func seekCallback(userData: UnsafeMutableRawPointer?, offset: Int64, whe
}
if context.closed {
return -1
context.readingError = true
return 0
}
return result