diff --git a/app/src/main/java/org/pixeldroid/app/postCreation/PostCreationActivity.kt b/app/src/main/java/org/pixeldroid/app/postCreation/PostCreationActivity.kt index 9539fe00..b587cf21 100644 --- a/app/src/main/java/org/pixeldroid/app/postCreation/PostCreationActivity.kt +++ b/app/src/main/java/org/pixeldroid/app/postCreation/PostCreationActivity.kt @@ -39,7 +39,7 @@ import org.pixeldroid.app.postCreation.photoEdit.VideoEditActivity import org.pixeldroid.app.utils.BaseThemedWithoutBarActivity import org.pixeldroid.app.utils.db.entities.InstanceDatabaseEntity import org.pixeldroid.app.utils.db.entities.UserDatabaseEntity -import org.pixeldroid.app.utils.ffmpegSafeUri +import org.pixeldroid.app.utils.ffmpegCompliantUri import org.pixeldroid.app.utils.fileExtension import org.pixeldroid.app.utils.getMimeType import java.io.File @@ -333,21 +333,22 @@ class PostCreationActivity : BaseThemedWithoutBarActivity() { //val file = File.createTempFile("temp_video", ".webm") model.trackTempFile(file) val fileUri = file.toUri() - val outputVideoPath = ffmpegSafeUri(fileUri) + val outputVideoPath = ffmpegCompliantUri(fileUri) val inputUri = model.getPhotoData().value!![position].imageUri - val inputSafePath = ffmpegSafeUri(inputUri) + val ffmpegCompliantUri: String = ffmpegCompliantUri(inputUri) - val mediaInformation: MediaInformation? = FFprobeKit.getMediaInformation(ffmpegSafeUri(inputUri)).mediaInformation + val mediaInformation: MediaInformation? = FFprobeKit.getMediaInformation(ffmpegCompliantUri(inputUri)).mediaInformation val totalVideoDuration = mediaInformation?.duration?.toFloatOrNull() - val mutedString = if(muted) "-an" else "" - val startString = if(videoStart != null) "-ss $videoStart" else "" + val mutedString = if(muted) "-an" else null + val startString: List = if(videoStart != null) listOf("-ss", "$videoStart") else listOf(null, null) - val endString = if(videoEnd != null) "-to ${videoEnd - (videoStart ?: 0f)}" else "" + val endString: List = if(videoEnd != null) listOf("-to", "${videoEnd - (videoStart ?: 0f)}") else listOf(null, null) - val session: FFmpegSession = FFmpegKit.executeAsync("$startString -i $inputSafePath $endString -c copy $mutedString -y $outputVideoPath", + val session: FFmpegSession = + FFmpegKit.executeWithArgumentsAsync(listOfNotNull(startString[0], startString[1], "-i", ffmpegCompliantUri, endString[0], endString[1], "-c", "copy", mutedString, "-y", outputVideoPath).toTypedArray(), //val session: FFmpegSession = FFmpegKit.executeAsync("$startString -i $inputSafePath $endString -c:v libvpx-vp9 -c:a copy -an -y $outputVideoPath", { session -> val returnCode = session.returnCode diff --git a/app/src/main/java/org/pixeldroid/app/postCreation/photoEdit/VideoEditActivity.kt b/app/src/main/java/org/pixeldroid/app/postCreation/photoEdit/VideoEditActivity.kt index 58865a72..eb02a179 100644 --- a/app/src/main/java/org/pixeldroid/app/postCreation/photoEdit/VideoEditActivity.kt +++ b/app/src/main/java/org/pixeldroid/app/postCreation/photoEdit/VideoEditActivity.kt @@ -29,7 +29,7 @@ import org.pixeldroid.app.databinding.ActivityVideoEditBinding import org.pixeldroid.app.postCreation.PostCreationActivity import org.pixeldroid.app.postCreation.carousel.dpToPx import org.pixeldroid.app.utils.BaseThemedWithBarActivity -import org.pixeldroid.app.utils.ffmpegSafeUri +import org.pixeldroid.app.utils.ffmpegCompliantUri import java.io.File @@ -61,7 +61,7 @@ class VideoEditActivity : BaseThemedWithBarActivity() { val uri = intent.getParcelableExtra(PhotoEditActivity.PICTURE_URI)!! videoPosition = intent.getIntExtra(PhotoEditActivity.PICTURE_POSITION, -1) - val inputVideoPath = ffmpegSafeUri(uri) + val inputVideoPath = ffmpegCompliantUri(uri) val mediaInformation: MediaInformation? = FFprobeKit.getMediaInformation(inputVideoPath).mediaInformation binding.muter.setOnClickListener { @@ -232,15 +232,16 @@ class VideoEditActivity : BaseThemedWithBarActivity() { val file = File.createTempFile("temp_img", ".bmp") tempFiles.add(file) val fileUri = file.toUri() - val inputSafePath = ffmpegSafeUri(inputUri) + val ffmpegCompliantUri = ffmpegCompliantUri(inputUri) val outputImagePath = if(fileUri.toString().startsWith("content://")) FFmpegKitConfig.getSafParameterForWrite(this, fileUri) else fileUri.toString() - val session = FFmpegKit.executeAsync( - "-noaccurate_seek -ss $thumbTime -i $inputSafePath -vf scale=${thumbnail.width}:${thumbnail.height} -frames:v 1 -f image2 -y $outputImagePath", - { session -> + val session = FFmpegKit.executeWithArgumentsAsync(arrayOf( + "-noaccurate_seek", "-ss", "$thumbTime", "-i", ffmpegCompliantUri, "-vf", + "scale=${thumbnail.width}:${thumbnail.height}", + "-frames:v", "1", "-f", "image2", "-y", outputImagePath), { session -> val state = session.state val returnCode = session.returnCode @@ -254,7 +255,7 @@ class VideoEditActivity : BaseThemedWithBarActivity() { // CALLED WHEN SESSION IS EXECUTED Log.d("VideoEditActivity", "FFmpeg process exited with state $state and rc $returnCode.${session.failStackTrace}") }, - {/* CALLED WHEN SESSION PRINTS LOGS */ }) { /*CALLED WHEN SESSION GENERATES STATISTICS*/ } + {/* CALLED WHEN SESSION PRINTS LOGS */ }, { /*CALLED WHEN SESSION GENERATES STATISTICS*/ }) sessionList.add(session.sessionId) } diff --git a/app/src/main/java/org/pixeldroid/app/utils/Utils.kt b/app/src/main/java/org/pixeldroid/app/utils/Utils.kt index 639cf2d0..2242a46b 100644 --- a/app/src/main/java/org/pixeldroid/app/utils/Utils.kt +++ b/app/src/main/java/org/pixeldroid/app/utils/Utils.kt @@ -96,7 +96,7 @@ fun normalizeDomain(domain: String): String { .trim(Char::isWhitespace) } -fun Context.ffmpegSafeUri(inputUri: Uri?): String = +fun Context.ffmpegCompliantUri(inputUri: Uri?): String = if (inputUri?.scheme == "content") FFmpegKitConfig.getSafParameterForRead(this, inputUri) else inputUri.toString()