Skip to content

Commit 353a2f4

Browse files
Updated the query to convert image to video
1 parent 857bda5 commit 353a2f4

File tree

9 files changed

+132
-15
lines changed

9 files changed

+132
-15
lines changed

SSffmpegVideoOperation/src/main/java/com/simform/videooperations/Common.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import android.os.Build
1111
import android.os.Environment
1212
import android.provider.OpenableColumns
1313
import android.text.TextUtils
14-
import androidx.activity.result.contract.ActivityResultContracts
1514
import androidx.appcompat.app.AppCompatActivity
1615
import com.jaiselrahman.filepicker.activity.FilePickerActivity
1716
import com.jaiselrahman.filepicker.config.Configurations
@@ -203,7 +202,7 @@ object Common {
203202
}
204203
}
205204
val dest = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
206-
File(dir, File.separator + System.currentTimeMillis().div(1000L) + extension)
205+
File(dir, System.currentTimeMillis().div(1000L).toString() + extension)
207206
} else {
208207
// Fallback for devices below Android 14
209208
File(dir.path + File.separator + OUT_PUT_DIR + System.currentTimeMillis().div(1000L) + extension)

SSffmpegVideoOperation/src/main/java/com/simform/videooperations/FFmpegQueryExtension.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public class FFmpegQueryExtension {
4646
add("-i")
4747
add(input)
4848
add("-s")
49-
add("${width}x${height}")
49+
add("${((width ?: 0)/2) * 2}x${((height ?: 0)/2) * 2}") // Ensure width and height are even numbers
5050
add("-vf")
5151
add("format=yuv420p,$fade")
5252
add("-t")

app/src/main/java/com/simform/videoimageeditor/BaseActivity.kt

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,40 @@ abstract class BaseActivity(view: Int, title: Int) : AppCompatActivity(), View.O
9191

9292
}
9393

94+
val pickAudio = registerForActivityResult(ActivityResultContracts.OpenDocument()) { uri ->
95+
if (uri != null) {
96+
// Got audio Uri, do something with it
97+
val mediaFiles = listOf(MediaFile().apply {
98+
setUri(uri)
99+
setMediaType(MediaFile.TYPE_AUDIO)
100+
setMimeType(contentResolver.getType(uri))
101+
setName(uri.lastPathSegment ?: "Unknown")
102+
})
103+
this.mediaFiles = mediaFiles
104+
(this as FileSelection).selectedFiles(mediaFiles, Common.AUDIO_FILE_REQUEST_CODE)
105+
} else {
106+
Toast.makeText(this, "No audio selected", Toast.LENGTH_SHORT).show()
107+
}
108+
}
109+
110+
val pickMultipleAudio = registerForActivityResult(ActivityResultContracts.OpenMultipleDocuments()) { uris ->
111+
if (uris != null) {
112+
// Got audio Uri, do something with it
113+
val mediaFiles = uris.map { uri ->
114+
MediaFile().apply {
115+
setUri(uri)
116+
setMediaType(MediaFile.TYPE_AUDIO)
117+
setMimeType(contentResolver.getType(uri))
118+
setName(uri.lastPathSegment ?: "Unknown")
119+
}
120+
}
121+
this.mediaFiles = mediaFiles
122+
(this as FileSelection).selectedFiles(mediaFiles, Common.AUDIO_FILE_REQUEST_CODE)
123+
} else {
124+
Toast.makeText(this, "No audio selected", Toast.LENGTH_SHORT).show()
125+
}
126+
}
127+
94128
override fun onCreate(savedInstanceState: Bundle?) {
95129
super.onCreate(savedInstanceState)
96130
// Content view will be set by individual activities using view binding

app/src/main/java/com/simform/videoimageeditor/otherFFMPEGProcessActivity/AudiosMergeActivity.kt

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.simform.videoimageeditor.otherFFMPEGProcessActivity
22

33
import android.annotation.SuppressLint
4+
import android.os.Build
45
import android.view.View
56
import android.widget.Toast
67
import com.jaiselrahman.filepicker.model.MediaFile
@@ -29,7 +30,16 @@ class AudiosMergeActivity : BaseActivity(R.layout.activity_audios_merge, R.strin
2930
override fun onClick(v: View?) {
3031
when (v?.id) {
3132
R.id.btnAudioPath -> {
32-
Common.selectFile(this, maxSelection = 10, isImageSelection = false, isAudioSelection = true)
33+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
34+
pickMultipleAudio.launch(arrayOf("audio/*"))
35+
} else {
36+
Common.selectFile(
37+
this,
38+
maxSelection = 10,
39+
isImageSelection = false,
40+
isAudioSelection = true
41+
)
42+
}
3343
}
3444
R.id.btnMerge -> {
3545
mediaFiles?.size?.let {
@@ -50,7 +60,12 @@ class AudiosMergeActivity : BaseActivity(R.layout.activity_audios_merge, R.strin
5060
mediaFiles?.let {
5161
for (element in it) {
5262
val paths = Paths()
53-
paths.filePath = element.path
63+
paths.filePath =
64+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
65+
Common.saveFileToTempAndGetPath(this, element.uri) ?: ""
66+
} else {
67+
element.path ?: ""
68+
}
5469
paths.isImageFile = true
5570
pathsList.add(paths)
5671
}

app/src/main/java/com/simform/videoimageeditor/otherFFMPEGProcessActivity/ChangeAudioVolumeActivity.kt

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.simform.videoimageeditor.otherFFMPEGProcessActivity
22

33
import android.annotation.SuppressLint
4+
import android.os.Build
45
import android.view.View
56
import android.widget.Toast
67
import com.jaiselrahman.filepicker.model.MediaFile
@@ -29,7 +30,16 @@ class ChangeAudioVolumeActivity : BaseActivity(R.layout.activity_change_audio_va
2930
override fun onClick(v: View?) {
3031
when (v?.id) {
3132
R.id.btnAudioPath -> {
32-
Common.selectFile(this, maxSelection = 1, isImageSelection = false, isAudioSelection = true)
33+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
34+
pickAudio.launch(arrayOf("audio/*"))
35+
} else {
36+
Common.selectFile(
37+
this,
38+
maxSelection = 1,
39+
isImageSelection = false,
40+
isAudioSelection = true
41+
)
42+
}
3343
}
3444
R.id.btnChange -> {
3545
mediaFiles?.size?.let {
@@ -88,7 +98,12 @@ class ChangeAudioVolumeActivity : BaseActivity(R.layout.activity_change_audio_va
8898
when (requestCode) {
8999
Common.AUDIO_FILE_REQUEST_CODE -> {
90100
if (mediaFiles != null && mediaFiles.isNotEmpty()) {
91-
binding.tvInputPathAudio.text = mediaFiles[0].path
101+
binding.tvInputPathAudio.text =
102+
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
103+
Common.saveFileToTempAndGetPath(this, mediaFiles[0].uri)
104+
} else {
105+
mediaFiles[0].path ?: ""
106+
}
92107
isInputAudioSelected = true
93108
} else {
94109
Toast.makeText(this, getString(R.string.min_audio_selection_validation), Toast.LENGTH_SHORT).show()

app/src/main/java/com/simform/videoimageeditor/otherFFMPEGProcessActivity/CompressAudioActivity.kt

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.simform.videoimageeditor.otherFFMPEGProcessActivity
22

33
import android.annotation.SuppressLint
4+
import android.os.Build
45
import android.view.View
56
import android.widget.Toast
67
import com.jaiselrahman.filepicker.model.MediaFile
@@ -31,7 +32,16 @@ class CompressAudioActivity : BaseActivity(R.layout.activity_compress_audio, R.s
3132
override fun onClick(v: View?) {
3233
when (v?.id) {
3334
R.id.btnAudioPath -> {
34-
Common.selectFile(this, maxSelection = 1, isImageSelection = false, isAudioSelection = true)
35+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
36+
pickAudio.launch(arrayOf("audio/*"))
37+
} else {
38+
Common.selectFile(
39+
this,
40+
maxSelection = 1,
41+
isImageSelection = false,
42+
isAudioSelection = true
43+
)
44+
}
3545
}
3646
R.id.btnChange -> {
3747
mediaFiles?.size?.let {
@@ -90,7 +100,12 @@ class CompressAudioActivity : BaseActivity(R.layout.activity_compress_audio, R.s
90100
when (requestCode) {
91101
Common.AUDIO_FILE_REQUEST_CODE -> {
92102
if (mediaFiles != null && mediaFiles.isNotEmpty()) {
93-
binding.tvInputPathAudio.text = mediaFiles[0].path
103+
binding.tvInputPathAudio.text =
104+
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
105+
Common.saveFileToTempAndGetPath(this, mediaFiles[0].uri)
106+
} else {
107+
mediaFiles[0].path ?: ""
108+
}
94109
isInputAudioSelected = true
95110
} else {
96111
Toast.makeText(this, getString(R.string.min_audio_selection_validation), Toast.LENGTH_SHORT).show()

app/src/main/java/com/simform/videoimageeditor/otherFFMPEGProcessActivity/CropAudioActivity.kt

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.simform.videoimageeditor.otherFFMPEGProcessActivity
22

33
import android.annotation.SuppressLint
4+
import android.os.Build
45
import android.text.TextUtils
56
import android.view.View
67
import android.widget.TextView
@@ -12,8 +13,10 @@ import com.simform.videoimageeditor.databinding.ActivityCropAudioBinding
1213
import com.simform.videoimageeditor.ikovac.timepickerwithseconds.MyTimePickerDialog
1314
import com.simform.videooperations.CallBackOfQuery
1415
import com.simform.videooperations.Common
16+
import com.simform.videooperations.Common.stringForTime
1517
import com.simform.videooperations.FFmpegCallBack
1618
import com.simform.videooperations.LogMessage
19+
import java.io.File
1720
import java.text.ParseException
1821
import java.text.SimpleDateFormat
1922
import java.util.Date
@@ -40,7 +43,16 @@ class CropAudioActivity : BaseActivity(R.layout.activity_crop_audio, R.string.cr
4043
override fun onClick(v: View?) {
4144
when (v?.id) {
4245
R.id.btnAudioPath -> {
43-
Common.selectFile(this, maxSelection = 1, isImageSelection = false, isAudioSelection = true)
46+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
47+
pickAudio.launch(arrayOf("audio/*"))
48+
} else {
49+
Common.selectFile(
50+
this,
51+
maxSelection = 1,
52+
isImageSelection = false,
53+
isAudioSelection = true
54+
)
55+
}
4456
}
4557
R.id.btnSelectStartTime -> {
4658
if (!TextUtils.isEmpty(maxTimeString) && !TextUtils.equals(maxTimeString, getString(R.string.zero_time))) {
@@ -84,8 +96,20 @@ class CropAudioActivity : BaseActivity(R.layout.activity_crop_audio, R.string.cr
8496
override fun selectedFiles(mediaFiles: List<MediaFile>?, requestCode: Int) {
8597
if (requestCode == Common.AUDIO_FILE_REQUEST_CODE) {
8698
if (mediaFiles != null && mediaFiles.isNotEmpty()) {
87-
binding.tvInputPath.text = mediaFiles[0].path
88-
maxTimeString = Common.stringForTime(mediaFiles[0].duration)
99+
binding.tvInputPath.text =
100+
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
101+
Common.saveFileToTempAndGetPath(this, mediaFiles[0].uri)
102+
} else {
103+
mediaFiles[0].path ?: ""
104+
}
105+
maxTimeString =
106+
stringForTime(
107+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
108+
Common.getDurationFromFile(File(binding.tvInputPath.text.toString()))
109+
} else {
110+
mediaFiles[0].duration
111+
}
112+
)
89113
binding.tvMaxTime.text = "Selected audio max time : $maxTimeString"
90114
} else {
91115
Toast.makeText(this, getString(R.string.audio_not_selected_toast_message), Toast.LENGTH_SHORT).show()

app/src/main/java/com/simform/videoimageeditor/otherFFMPEGProcessActivity/FastAndSlowAudioActivity.kt

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.simform.videoimageeditor.otherFFMPEGProcessActivity
22

3+
import android.os.Build
34
import android.view.View
45
import android.widget.Toast
56
import com.jaiselrahman.filepicker.model.MediaFile
@@ -29,7 +30,16 @@ class FastAndSlowAudioActivity : BaseActivity(R.layout.activity_fast_and_slow_au
2930
override fun onClick(v: View?) {
3031
when (v?.id) {
3132
R.id.btnAudioPath -> {
32-
Common.selectFile(this, maxSelection = 1, isImageSelection = false, isAudioSelection = true)
33+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
34+
pickAudio.launch(arrayOf("audio/*"))
35+
} else {
36+
Common.selectFile(
37+
this,
38+
maxSelection = 1,
39+
isImageSelection = false,
40+
isAudioSelection = true
41+
)
42+
}
3343
}
3444
R.id.btnMotion -> {
3545
when {
@@ -76,7 +86,12 @@ class FastAndSlowAudioActivity : BaseActivity(R.layout.activity_fast_and_slow_au
7686
when (requestCode) {
7787
Common.AUDIO_FILE_REQUEST_CODE -> {
7888
if (mediaFiles != null && mediaFiles.isNotEmpty()) {
79-
binding.tvInputPathAudio.text = mediaFiles[0].path
89+
binding.tvInputPathAudio.text =
90+
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
91+
Common.saveFileToTempAndGetPath(this, mediaFiles[0].uri)
92+
} else {
93+
mediaFiles[0].path ?: ""
94+
}
8095
isInputAudioSelected = true
8196
} else {
8297
Toast.makeText(this, getString(R.string.audio_not_selected_toast_message), Toast.LENGTH_SHORT).show()

app/src/main/java/com/simform/videoimageeditor/videoProcessActivity/ExtractImagesActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ class ExtractImagesActivity : BaseActivity(R.layout.activity_extract_images, R.s
8686
}
8787

8888
override fun success() {
89-
binding.tvOutputPath.text = "Output Directory : \n${File(getExternalFilesDir(Common.OUT_PUT_DIR).toString()).absolutePath} \n\nTotal Frames Extracted: $totalFramesExtracted"
89+
binding.tvOutputPath.text = "Output Directory : \n${outputPath} \n\nTotal Frames Extracted: $totalFramesExtracted"
9090
processStop()
9191
}
9292

0 commit comments

Comments
 (0)