Skip to content
Merged
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
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
## 1.15.0
- **FEAT**(android, iOS, macOS): Add `NativeLogLevel` parameter to all API methods for controlling native log verbosity per call. Supported levels: `none`, `error`, `warning`, `info`, `debug`, `verbose`.

## 1.14.4
- **FIX**(android): Fix image layers crash on Android by recycling intermediate thumbnail bitmaps.
- **FIX**(android, iOS, macOS): Additional fixes for audio extraction.
Expand Down
25 changes: 25 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ The ProVideoEditor is a Flutter widget designed for video editing within your ap
#### 📱 **Runtime Features**
- 📊 **Progress**: Track the progress of one or multiple running tasks.
- 🧵 **Multi-Tasking**: Execute multiple video processing tasks concurrently.
- 🔇 **Native Log Level**: Control native log verbosity per API call with `NativeLogLevel` (`none`, `error`, `warning`, `info`, `debug`, `verbose`).


### Platform Support
Expand Down Expand Up @@ -592,6 +593,30 @@ List<Uint8List> result = await ProVideoEditor.instance.getKeyFrames(
);
```

#### Native Log Level Example

Control native log verbosity per API call on Android, iOS, and macOS.

```dart
/// Silence all native logs for this call
List<Uint8List> thumbnails = await ProVideoEditor.instance.getThumbnails(
ThumbnailConfigs(
video: EditorVideo.asset('assets/my-video.mp4'),
outputSize: const Size(200, 200),
timestamps: const [Duration(seconds: 5)],
),
nativeLogLevel: NativeLogLevel.none,
);

/// Show only errors
VideoMetadata metadata = await ProVideoEditor.instance.getMetadata(
video: EditorVideo.asset('assets/my-video.mp4'),
nativeLogLevel: NativeLogLevel.error,
);

/// Available levels: none, error, warning, info, debug, verbose
```


## Sponsors
<p align="center">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package ch.waio.pro_video_editor

import android.os.Handler
import android.os.Looper
import android.util.Log
import ch.waio.pro_video_editor.src.features.audio.ExtractAudio
import ch.waio.pro_video_editor.src.features.audio.NoAudioTrackException
import ch.waio.pro_video_editor.src.features.audio.models.AudioExtractConfig
Expand All @@ -12,6 +11,7 @@ import ch.waio.pro_video_editor.src.features.metadata.models.MetadataConfig
import ch.waio.pro_video_editor.src.features.render.RenderVideo
import ch.waio.pro_video_editor.src.features.render.models.RenderConfig
import ch.waio.pro_video_editor.src.features.render.models.RenderTask
import ch.waio.pro_video_editor.src.shared.logging.PluginLog as Log
import ch.waio.pro_video_editor.src.features.thumbnail.ThumbnailGenerator
import ch.waio.pro_video_editor.src.features.thumbnail.models.ThumbnailConfig
import ch.waio.pro_video_editor.src.features.waveform.WaveformGenerator
Expand Down Expand Up @@ -134,6 +134,8 @@ class ProVideoEditorPlugin : FlutterPlugin, MethodCallHandler {
* - cancelTask: Cancels active render or audio extraction task
*/
override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) {
applyInlineNativeLogLevel(call)

when (call.method) {
"getPlatformVersion" -> handleGetPlatformVersion(result)
"getMetadata" -> handleGetMetadata(call, result)
Expand All @@ -148,6 +150,25 @@ class ProVideoEditorPlugin : FlutterPlugin, MethodCallHandler {
}
}

/**
* Applies an optional inline native log level from method call arguments.
*/
private fun applyInlineNativeLogLevel(call: MethodCall) {
val level = call.argument<String>("nativeLogLevel")
if (level.isNullOrBlank()) {
return
}

try {
Log.setMinimumLevel(level)
} catch (e: IllegalArgumentException) {
Log.w(
"ProVideoEditorPlugin",
"Ignoring invalid nativeLogLevel '$level': ${e.message}"
)
}
}

/**
* Returns the Android platform version string.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ import android.media.MediaFormat
import android.media.MediaMuxer
import android.os.Handler
import android.os.Looper
import android.util.Log
import ch.waio.pro_video_editor.src.features.audio.models.AudioExtractConfig
import ch.waio.pro_video_editor.src.features.audio.models.AudioExtractJobHandle
import ch.waio.pro_video_editor.src.shared.logging.PluginLog as Log
import java.io.File
import java.nio.ByteBuffer
import java.util.concurrent.atomic.AtomicBoolean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ import RENDER_TAG
import android.content.Context
import android.os.Handler
import android.os.Looper
import android.util.Log
import androidx.media3.common.util.UnstableApi
import androidx.media3.transformer.Composition
import androidx.media3.transformer.DefaultEncoderFactory
import androidx.media3.transformer.ExportException
import androidx.media3.transformer.ExportResult
import androidx.media3.transformer.ProgressHolder
import androidx.media3.transformer.Transformer
import ch.waio.pro_video_editor.src.shared.logging.PluginLog as Log
import java.io.File
import java.util.concurrent.atomic.AtomicBoolean
import java.util.concurrent.atomic.AtomicReference
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import android.media.MediaCodecInfo
import android.media.MediaCodecList
import android.util.Log
import androidx.media3.common.util.UnstableApi
import androidx.media3.transformer.DefaultEncoderFactory
import androidx.media3.transformer.VideoEncoderSettings
import ch.waio.pro_video_editor.src.shared.logging.PluginLog as Log

/**
* Configures video encoder bitrate settings.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import android.util.Log
import androidx.media3.common.Effect
import androidx.media3.common.util.UnstableApi
import androidx.media3.effect.GaussianBlur
import ch.waio.pro_video_editor.src.shared.logging.PluginLog as Log

/**
* Applies Gaussian blur effect to video.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import android.util.Log
import androidx.media3.common.Effect
import androidx.media3.common.util.UnstableApi
import androidx.media3.effect.SingleColorLut
import androidx.media3.effect.TimestampWrapper
import ch.waio.pro_video_editor.src.features.render.models.ColorFilterConfig
import ch.waio.pro_video_editor.src.shared.logging.PluginLog as Log

/**
* Applies color matrix transformation using 3D LUT (Look-Up Table).
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package ch.waio.pro_video_editor.src.features.render.helpers

import RENDER_TAG
import android.util.Log
import androidx.media3.common.Effect
import androidx.media3.common.util.UnstableApi
import androidx.media3.effect.Crop
import ch.waio.pro_video_editor.src.features.render.utils.getRotatedVideoDimensions
import ch.waio.pro_video_editor.src.shared.logging.PluginLog as Log
import java.io.File

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import android.util.Log
import androidx.media3.common.Effect
import androidx.media3.common.util.UnstableApi
import androidx.media3.effect.ScaleAndRotateTransformation
import ch.waio.pro_video_editor.src.shared.logging.PluginLog as Log

/**
* Applies horizontal and/or vertical flip transformation.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package ch.waio.pro_video_editor.src.features.render.helpers
import RENDER_TAG
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.util.Log
import androidx.media3.common.Effect
import androidx.media3.common.util.UnstableApi
import androidx.media3.effect.BitmapOverlay
Expand All @@ -14,6 +13,7 @@ import androidx.core.graphics.scale
import androidx.media3.effect.StaticOverlaySettings
import androidx.media3.effect.TimestampWrapper
import ch.waio.pro_video_editor.src.features.render.models.ImageLayer
import ch.waio.pro_video_editor.src.shared.logging.PluginLog as Log

/**
* Applies static image overlay on video.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import android.util.Log
import androidx.media3.common.Effect
import androidx.media3.common.audio.AudioProcessor
import androidx.media3.common.audio.SonicAudioProcessor
import androidx.media3.common.util.UnstableApi
import androidx.media3.effect.SpeedChangeEffect
import ch.waio.pro_video_editor.src.shared.logging.PluginLog as Log

/**
* Applies playback speed modification to both video and audio.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import android.util.Log
import androidx.media3.common.Effect
import androidx.media3.common.util.UnstableApi
import androidx.media3.effect.ScaleAndRotateTransformation
import ch.waio.pro_video_editor.src.shared.logging.PluginLog as Log

/**
* Applies video rotation transformation.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import android.util.Log
import androidx.media3.common.Effect
import androidx.media3.common.util.UnstableApi
import androidx.media3.effect.ScaleAndRotateTransformation
import ch.waio.pro_video_editor.src.shared.logging.PluginLog as Log

/**
* Applies scale transformation to video dimensions.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package ch.waio.pro_video_editor.src.features.render.helpers

import RENDER_TAG
import android.net.Uri
import android.util.Log
import androidx.media3.common.MediaItem
import androidx.media3.common.audio.AudioProcessor
import androidx.media3.common.audio.ChannelMixingAudioProcessor
Expand All @@ -11,6 +10,7 @@ import androidx.media3.common.util.UnstableApi
import androidx.media3.transformer.EditedMediaItem
import androidx.media3.transformer.EditedMediaItemSequence
import androidx.media3.transformer.Effects
import ch.waio.pro_video_editor.src.shared.logging.PluginLog as Log
import java.io.File

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@ package ch.waio.pro_video_editor.src.features.render.helpers

import RENDER_TAG
import android.content.Context
import android.util.Log
import androidx.media3.common.Effect
import androidx.media3.common.audio.AudioProcessor
import androidx.media3.common.util.UnstableApi
import androidx.media3.transformer.Composition
import androidx.media3.transformer.EditedMediaItemSequence
import ch.waio.pro_video_editor.src.features.render.models.AudioTrackConfig
import ch.waio.pro_video_editor.src.features.render.models.RenderConfig
import ch.waio.pro_video_editor.src.shared.logging.PluginLog as Log

/**
* Main builder class for creating Media3 Compositions from render configurations.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package ch.waio.pro_video_editor.src.features.render.helpers

import android.util.Log
import androidx.media3.common.C
import androidx.media3.common.Format
import androidx.media3.common.Metadata
Expand All @@ -13,6 +12,7 @@ import androidx.media3.muxer.Muxer
import androidx.media3.muxer.MuxerException
import androidx.media3.muxer.MuxerUtil
import androidx.media3.muxer.SeekableMuxerOutput
import ch.waio.pro_video_editor.src.shared.logging.PluginLog as Log
import com.google.common.collect.ImmutableList
import java.io.FileNotFoundException
import java.io.FileOutputStream
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package ch.waio.pro_video_editor.src.features.render.helpers
import RENDER_TAG
import android.media.MediaExtractor
import android.media.MediaFormat
import android.util.Log
import androidx.media3.common.util.UnstableApi
import ch.waio.pro_video_editor.src.shared.logging.PluginLog as Log

/**
* Utility class for extracting media information from video and audio files.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package ch.waio.pro_video_editor.src.features.render.helpers

import RENDER_TAG
import android.net.Uri
import android.util.Log
import applyScale
import androidx.media3.common.C
import androidx.media3.common.Effect
Expand All @@ -17,6 +16,7 @@ import androidx.media3.transformer.Effects
import ch.waio.pro_video_editor.src.features.render.models.LayerAnimationConfig
import ch.waio.pro_video_editor.src.features.render.models.VideoClip
import ch.waio.pro_video_editor.src.features.render.utils.getRotatedVideoDimensions
import ch.waio.pro_video_editor.src.shared.logging.PluginLog as Log
import java.io.File

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import RENDER_TAG
import android.content.Context
import android.os.Handler
import android.os.Looper
import android.util.Log
import androidx.media3.common.MediaItem
import androidx.media3.common.MimeTypes
import androidx.media3.common.util.UnstableApi
Expand All @@ -15,6 +14,7 @@ import androidx.media3.transformer.EditedMediaItemSequence
import androidx.media3.transformer.ExportException
import androidx.media3.transformer.ExportResult
import androidx.media3.transformer.Transformer
import ch.waio.pro_video_editor.src.shared.logging.PluginLog as Log
import java.io.File
import java.util.concurrent.CountDownLatch
import java.util.concurrent.atomic.AtomicReference
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package ch.waio.pro_video_editor.src.features.render.helpers

import RENDER_TAG
import android.util.Log
import androidx.media3.common.audio.BaseAudioProcessor
import androidx.media3.common.util.UnstableApi
import ch.waio.pro_video_editor.src.shared.logging.PluginLog as Log
import java.nio.ByteBuffer

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package ch.waio.pro_video_editor.src.features.render.helpers

import RENDER_TAG
import android.util.Log
import androidx.media3.common.audio.AudioProcessor
import androidx.media3.common.util.UnstableApi
import androidx.media3.transformer.AudioMixer
import androidx.media3.transformer.DefaultAudioMixer
import ch.waio.pro_video_editor.src.shared.logging.PluginLog as Log
import java.nio.ByteBuffer

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package ch.waio.pro_video_editor.src.features.render.models

import PACKAGE_TAG
import android.util.Log
import ch.waio.pro_video_editor.src.shared.logging.PluginLog as Log
import io.flutter.plugin.common.MethodCall

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import android.graphics.Bitmap
import android.media.MediaExtractor
import android.media.MediaFormat
import android.media.MediaMetadataRetriever
import android.util.Log
import ch.waio.pro_video_editor.src.features.thumbnail.models.ThumbnailConfig
import ch.waio.pro_video_editor.src.shared.logging.PluginLog as Log
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ import android.media.MediaExtractor
import android.media.MediaFormat
import android.os.Handler
import android.os.Looper
import android.util.Log
import ch.waio.pro_video_editor.src.features.audio.NoAudioTrackException
import ch.waio.pro_video_editor.src.features.waveform.models.WaveformConfig
import ch.waio.pro_video_editor.src.features.waveform.models.WaveformJobHandle
import ch.waio.pro_video_editor.src.shared.logging.PluginLog as Log
import java.nio.ByteBuffer
import java.nio.ByteOrder
import java.util.concurrent.atomic.AtomicBoolean
Expand Down
Loading
Loading