Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
7 changes: 3 additions & 4 deletions SSffmpegVideoOperation/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,11 @@ repositories {
}

android {
compileSdkVersion 30
buildToolsVersion "29.0.3"

namespace 'com.simform.videooperations'
defaultConfig {
compileSdk 35
minSdkVersion 24
targetSdkVersion 30
targetSdkVersion 35

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles "consumer-rules.pro"
Expand Down
24 changes: 15 additions & 9 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,20 +1,19 @@
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-android-extensions'
id 'kotlin-kapt'
}

android {
compileSdkVersion 31

namespace 'com.simform.videoimageeditor'
compileSdk 35
defaultConfig {
applicationId "com.simform.videoimageeditor"
minSdkVersion 24
targetSdkVersion 31
targetSdkVersion 35
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx...test.runner.AndroidJUnitRunner"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
Expand All @@ -23,14 +22,21 @@ android {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}

compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}

kotlinOptions {
jvmTarget = '11'
}
flavorDimensions "default"

androidExtensions {
experimental = true

buildFeatures {
viewBinding true
}

flavorDimensions "default"
}

final roomSchemaDir = "$projectDir/roomSchemas"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ abstract class BaseActivity(view: Int, title: Int) : AppCompatActivity(), View.O

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(layoutView)
utils.addSupportActionBar(this, toolbarTitle)
// Content view will be set by individual activities using view binding
initialization()
utils.addSupportActionBar(this, toolbarTitle)
}

protected abstract fun initialization()
Expand Down
15 changes: 11 additions & 4 deletions app/src/main/java/com/simform/videoimageeditor/MainActivity.kt
Original file line number Diff line number Diff line change
@@ -1,18 +1,25 @@
package com.simform.videoimageeditor

import android.view.View
import com.simform.videoimageeditor.databinding.ActivityMainBinding
import com.simform.videoimageeditor.middlewareActivity.OtherFFMPEGProcessActivity
import com.simform.videoimageeditor.middlewareActivity.VideoProcessActivity
import kotlinx.android.synthetic.main.activity_main.imageGifOperation
import kotlinx.android.synthetic.main.activity_main.videoOperation

class MainActivity : BaseActivity(R.layout.activity_main, R.string.ffpmeg_title) {

private lateinit var binding: ActivityMainBinding

override fun initialization() {
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)

supportActionBar?.title = getString(R.string.ffpmeg_title)
supportActionBar?.setDisplayHomeAsUpEnabled(false)
supportActionBar?.setDisplayShowHomeEnabled(false)
videoOperation.setOnClickListener(this)
imageGifOperation.setOnClickListener(this)
binding.apply {
videoOperation.setOnClickListener(this@MainActivity)
imageGifOperation.setOnClickListener(this@MainActivity)
}
}

override fun onClick(v: View?) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,30 @@ package com.simform.videoimageeditor.middlewareActivity
import android.view.View
import com.simform.videoimageeditor.BaseActivity
import com.simform.videoimageeditor.R
import com.simform.videoimageeditor.databinding.ActivityOtherFfmpegProcessBinding
import com.simform.videoimageeditor.otherFFMPEGProcessActivity.AudiosMergeActivity
import com.simform.videoimageeditor.otherFFMPEGProcessActivity.ChangeAudioVolumeActivity
import com.simform.videoimageeditor.otherFFMPEGProcessActivity.CompressAudioActivity
import com.simform.videoimageeditor.otherFFMPEGProcessActivity.CropAudioActivity
import com.simform.videoimageeditor.otherFFMPEGProcessActivity.FastAndSlowAudioActivity
import com.simform.videoimageeditor.otherFFMPEGProcessActivity.MergeGIFActivity
import kotlinx.android.synthetic.main.activity_other_ffmpeg_process.btnAudiosVolumeUpdate
import kotlinx.android.synthetic.main.activity_other_ffmpeg_process.btnCompressAudio
import kotlinx.android.synthetic.main.activity_other_ffmpeg_process.btnCutAudio
import kotlinx.android.synthetic.main.activity_other_ffmpeg_process.btnFastAndSlowAudio
import kotlinx.android.synthetic.main.activity_other_ffmpeg_process.btnMergeAudios
import kotlinx.android.synthetic.main.activity_other_ffmpeg_process.btnMergeGIF

class OtherFFMPEGProcessActivity : BaseActivity(R.layout.activity_other_ffmpeg_process, R.string.other_ffmpeg_operations) {

private lateinit var binding: ActivityOtherFfmpegProcessBinding

override fun initialization() {
binding = ActivityOtherFfmpegProcessBinding.inflate(layoutInflater)
setContentView(binding.root)
supportActionBar?.title = getString(R.string.other_ffmpeg_operations)
btnMergeGIF.setOnClickListener(this)
btnMergeAudios.setOnClickListener(this)
btnAudiosVolumeUpdate.setOnClickListener(this)
btnFastAndSlowAudio.setOnClickListener(this)
btnCutAudio.setOnClickListener(this)
btnCompressAudio.setOnClickListener(this)
binding.apply {
btnMergeGIF.setOnClickListener(this@OtherFFMPEGProcessActivity)
btnMergeAudios.setOnClickListener(this@OtherFFMPEGProcessActivity)
btnAudiosVolumeUpdate.setOnClickListener(this@OtherFFMPEGProcessActivity)
btnFastAndSlowAudio.setOnClickListener(this@OtherFFMPEGProcessActivity)
btnCutAudio.setOnClickListener(this@OtherFFMPEGProcessActivity)
btnCompressAudio.setOnClickListener(this@OtherFFMPEGProcessActivity)
}
}

override fun onClick(v: View?) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,35 +3,42 @@ package com.simform.videoimageeditor.middlewareActivity
import android.view.View
import com.simform.videoimageeditor.BaseActivity
import com.simform.videoimageeditor.R
import com.simform.videoimageeditor.databinding.ActivityVideoProcessBinding
import com.simform.videoimageeditor.videoProcessActivity.*
import kotlinx.android.synthetic.main.activity_video_process.*

/**
* Created by Ashvin Vavaliya on 29,December,2020
* Simform Solutions Pvt Ltd.
*/
class VideoProcessActivity : BaseActivity(R.layout.activity_video_process, R.string.video_operations) {
private lateinit var binding: ActivityVideoProcessBinding

override fun initialization() {
binding = ActivityVideoProcessBinding.inflate(layoutInflater)
setContentView(binding.root)

supportActionBar?.title = getString(R.string.video_operations)
btnCutVideo.setOnClickListener(this)
btnImageToVideo.setOnClickListener(this)
btnAddWaterMarkOnVideo.setOnClickListener(this)
btnCombineImageVideo.setOnClickListener(this)
btnCombineImages.setOnClickListener(this)
btnCombineVideos.setOnClickListener(this)
btnCompressVideo.setOnClickListener(this)
btnExtractVideo.setOnClickListener(this)
btnExtractAudio.setOnClickListener(this)
btnMotion.setOnClickListener(this)
btnReverseVideo.setOnClickListener(this)
btnFadeInFadeOutVideo.setOnClickListener(this)
btnVideoConvertIntoGIF.setOnClickListener(this)
btnVideoRotateFlip.setOnClickListener(this)
btnMergeVideoAndAudio.setOnClickListener(this)
btnAddTextOnVideo.setOnClickListener(this)
btnRemoveAudioFromVideo.setOnClickListener(this)
btnMergeImageAndAudio.setOnClickListener(this)
btnSetAspectRatio.setOnClickListener(this)
binding.apply {
btnCutVideo.setOnClickListener(this@VideoProcessActivity)
btnImageToVideo.setOnClickListener(this@VideoProcessActivity)
btnAddWaterMarkOnVideo.setOnClickListener(this@VideoProcessActivity)
btnCombineImageVideo.setOnClickListener(this@VideoProcessActivity)
btnCombineImages.setOnClickListener(this@VideoProcessActivity)
btnCombineVideos.setOnClickListener(this@VideoProcessActivity)
btnCompressVideo.setOnClickListener(this@VideoProcessActivity)
btnExtractVideo.setOnClickListener(this@VideoProcessActivity)
btnExtractAudio.setOnClickListener(this@VideoProcessActivity)
btnMotion.setOnClickListener(this@VideoProcessActivity)
btnReverseVideo.setOnClickListener(this@VideoProcessActivity)
btnFadeInFadeOutVideo.setOnClickListener(this@VideoProcessActivity)
btnVideoConvertIntoGIF.setOnClickListener(this@VideoProcessActivity)
btnVideoRotateFlip.setOnClickListener(this@VideoProcessActivity)
btnMergeVideoAndAudio.setOnClickListener(this@VideoProcessActivity)
btnAddTextOnVideo.setOnClickListener(this@VideoProcessActivity)
btnRemoveAudioFromVideo.setOnClickListener(this@VideoProcessActivity)
btnMergeImageAndAudio.setOnClickListener(this@VideoProcessActivity)
btnSetAspectRatio.setOnClickListener(this@VideoProcessActivity)
}
}

override fun onClick(v: View?) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,24 +6,24 @@ import android.widget.Toast
import com.jaiselrahman.filepicker.model.MediaFile
import com.simform.videoimageeditor.BaseActivity
import com.simform.videoimageeditor.R
import com.simform.videoimageeditor.databinding.ActivityAudiosMergeBinding
import com.simform.videooperations.CallBackOfQuery
import com.simform.videooperations.Common
import com.simform.videooperations.Common.DURATION_FIRST
import com.simform.videooperations.FFmpegCallBack
import com.simform.videooperations.FFmpegQueryExtension
import com.simform.videooperations.LogMessage
import com.simform.videooperations.Paths
import kotlinx.android.synthetic.main.activity_audios_merge.btnAudioPath
import kotlinx.android.synthetic.main.activity_audios_merge.btnMerge
import kotlinx.android.synthetic.main.activity_audios_merge.mProgressView
import kotlinx.android.synthetic.main.activity_audios_merge.tvInputPathAudio
import kotlinx.android.synthetic.main.activity_audios_merge.tvOutputPath

class AudiosMergeActivity : BaseActivity(R.layout.activity_audios_merge, R.string.merge_audios) {
private lateinit var binding: ActivityAudiosMergeBinding
private var isInputAudioSelected: Boolean = false

override fun initialization() {
btnAudioPath.setOnClickListener(this)
btnMerge.setOnClickListener(this)
binding = ActivityAudiosMergeBinding.inflate(layoutInflater)
setContentView(binding.root)

binding.btnAudioPath.setOnClickListener(this)
binding.btnMerge.setOnClickListener(this)
}

override fun onClick(v: View?) {
Expand Down Expand Up @@ -59,11 +59,11 @@ class AudiosMergeActivity : BaseActivity(R.layout.activity_audios_merge, R.strin

CallBackOfQuery().callQuery(query, object : FFmpegCallBack {
override fun process(logMessage: LogMessage) {
tvOutputPath.text = logMessage.text
binding.tvOutputPath.text = logMessage.text
}

override fun success() {
tvOutputPath.text = String.format(getString(R.string.output_path), outputPath)
binding.tvOutputPath.text = String.format(getString(R.string.output_path), outputPath)
processStop()
}

Expand All @@ -79,15 +79,19 @@ class AudiosMergeActivity : BaseActivity(R.layout.activity_audios_merge, R.strin
}

private fun processStop() {
btnAudioPath.isEnabled = true
btnMerge.isEnabled = true
mProgressView.visibility = View.GONE
binding.apply {
btnAudioPath.isEnabled = true
btnMerge.isEnabled = true
mProgressView.root.visibility = View.GONE
}
}

private fun processStart() {
btnAudioPath.isEnabled = false
btnMerge.isEnabled = false
mProgressView.visibility = View.VISIBLE
binding.apply {
btnAudioPath.isEnabled = false
btnMerge.isEnabled = false
mProgressView.root.visibility = View.VISIBLE
}
}

@SuppressLint("NewApi")
Expand All @@ -97,7 +101,7 @@ class AudiosMergeActivity : BaseActivity(R.layout.activity_audios_merge, R.strin
if (mediaFiles != null && mediaFiles.isNotEmpty()) {
val size: Int = mediaFiles.size
if (size > 1) {
tvInputPathAudio.text = "$size Audio selected"
binding.tvInputPathAudio.text = "$size Audio selected"
isInputAudioSelected = true
} else {
Toast.makeText(this, getString(R.string.min_audio_selection_validation), Toast.LENGTH_SHORT).show()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,24 @@ import android.widget.Toast
import com.jaiselrahman.filepicker.model.MediaFile
import com.simform.videoimageeditor.BaseActivity
import com.simform.videoimageeditor.R
import com.simform.videoimageeditor.databinding.ActivityChangeAudioValumeBinding
import com.simform.videooperations.CallBackOfQuery
import com.simform.videooperations.Common
import com.simform.videooperations.FFmpegCallBack
import com.simform.videooperations.FFmpegQueryExtension
import com.simform.videooperations.LogMessage
import kotlinx.android.synthetic.main.activity_change_audio_valume.btnAudioPath
import kotlinx.android.synthetic.main.activity_change_audio_valume.btnChange
import kotlinx.android.synthetic.main.activity_change_audio_valume.mProgressView
import kotlinx.android.synthetic.main.activity_change_audio_valume.tvInputPathAudio
import kotlinx.android.synthetic.main.activity_change_audio_valume.tvOutputPath

class ChangeAudioVolumeActivity : BaseActivity(R.layout.activity_change_audio_valume, R.string.change_audio_volume) {
private lateinit var binding: ActivityChangeAudioValumeBinding
private var isInputAudioSelected: Boolean = false

override fun initialization() {
btnAudioPath.setOnClickListener(this)
btnChange.setOnClickListener(this)
binding = ActivityChangeAudioValumeBinding.inflate(layoutInflater)
setContentView(binding.root)

binding.apply {
btnAudioPath.setOnClickListener(this@ChangeAudioVolumeActivity)
btnChange.setOnClickListener(this@ChangeAudioVolumeActivity)
}
}

override fun onClick(v: View?) {
Expand All @@ -44,14 +46,14 @@ class ChangeAudioVolumeActivity : BaseActivity(R.layout.activity_change_audio_va

private fun mergeAudioProcess() {
val outputPath = Common.getFilePath(this, Common.MP3)
val query = ffmpegQueryExtension.audioVolumeUpdate(tvInputPathAudio.text.toString(), volume = 0.1f, output = outputPath)
val query = ffmpegQueryExtension.audioVolumeUpdate(binding.tvInputPathAudio.text.toString(), volume = 0.1f, output = outputPath)
CallBackOfQuery().callQuery(query, object : FFmpegCallBack {
override fun process(logMessage: LogMessage) {
tvOutputPath.text = logMessage.text
binding.tvOutputPath.text = logMessage.text
}

override fun success() {
tvOutputPath.text = String.format(getString(R.string.output_path), outputPath)
binding.tvOutputPath.text = String.format(getString(R.string.output_path), outputPath)
processStop()
}

Expand All @@ -66,23 +68,27 @@ class ChangeAudioVolumeActivity : BaseActivity(R.layout.activity_change_audio_va
}

private fun processStop() {
btnAudioPath.isEnabled = true
btnChange.isEnabled = true
mProgressView.visibility = View.GONE
binding.apply {
btnAudioPath.isEnabled = true
btnChange.isEnabled = true
mProgressView.root.visibility = View.GONE
}
}

private fun processStart() {
btnAudioPath.isEnabled = false
btnChange.isEnabled = false
mProgressView.visibility = View.VISIBLE
binding.apply {
btnAudioPath.isEnabled = false
btnChange.isEnabled = false
mProgressView.root.visibility = View.VISIBLE
}
}

@SuppressLint("NewApi")
override fun selectedFiles(mediaFiles: List<MediaFile>?, requestCode: Int) {
when (requestCode) {
Common.AUDIO_FILE_REQUEST_CODE -> {
if (mediaFiles != null && mediaFiles.isNotEmpty()) {
tvInputPathAudio.text = mediaFiles[0].path
binding.tvInputPathAudio.text = mediaFiles[0].path
isInputAudioSelected = true
} else {
Toast.makeText(this, getString(R.string.min_audio_selection_validation), Toast.LENGTH_SHORT).show()
Expand Down
Loading