Skip to content
This repository has been archived by the owner on Aug 7, 2024. It is now read-only.

Trimmer improvements #272

Merged
merged 4 commits into from
Mar 12, 2024
Merged
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 18 additions & 4 deletions app/src/main/java/com/bnyro/recorder/util/MediaTrimmer.kt
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,17 @@ class MediaTrimmer {
): Boolean {
assert(endMs > startMs && endMs > 0)
return withContext(Dispatchers.IO) {
val extension = inputFile.uri.path!!.split('.').lastOrNull()
var extension = inputFile.uri.path!!.split('.').lastOrNull()
if (extension == "aac") { // Special case if trimming raw AAC input mux it into MP4 container
extension = "m4a"
}
val outputFile = (context.applicationContext as App).fileRepository.getOutputFile(
extension = extension ?: "mp4",
prefix = "Trim_"
)
val inputPfd = context.contentResolver.openFileDescriptor(inputFile.uri, "r")!!
val outputPfd = context.contentResolver.openFileDescriptor(outputFile!!.uri, "w")!!
trimMediaFile(inputPfd, outputPfd, startMs, endMs)
trimMediaFile(inputPfd, outputPfd, startMs, endMs, extension)
}
}

Expand All @@ -46,14 +49,25 @@ class MediaTrimmer {
inputPfd: ParcelFileDescriptor,
outputPfd: ParcelFileDescriptor,
startMs: Long,
endMs: Long
endMs: Long,
extension: String?
): Boolean {
return withContext(Dispatchers.IO) {
val extractor = MediaExtractor()
extractor.setDataSource(inputPfd.fileDescriptor)
val trackCount = extractor.trackCount
var outputFormat = MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4
if (extension == "3gp") {
outputFormat = MediaMuxer.OutputFormat.MUXER_OUTPUT_3GPP
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && extension == "ogg") {
outputFormat = MediaMuxer.OutputFormat.MUXER_OUTPUT_OGG
}
if (extension == "webm") { // No need to add API level 21 here as the whole app is minSdk 21
outputFormat = MediaMuxer.OutputFormat.MUXER_OUTPUT_WEBM
}
pvagner marked this conversation as resolved.
Show resolved Hide resolved
val muxer =
MediaMuxer(outputPfd.fileDescriptor, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4)
MediaMuxer(outputPfd.fileDescriptor, outputFormat)
val indexMap = SparseIntArray(trackCount)
var bufferSize = -1

Expand Down
Loading