diff --git a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/AbstractSession.java b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/AbstractSession.java index 6f77cbb..9e799af 100644 --- a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/AbstractSession.java +++ b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/AbstractSession.java @@ -191,7 +191,7 @@ public abstract class AbstractSession implements Session { @Override public String getCommand() { - return FFmpegKit.argumentsToString(arguments); + return FFmpegKitConfig.argumentsToString(arguments); } @Override diff --git a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFmpegKit.java b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFmpegKit.java index 7b9cafe..1dd41f6 100644 --- a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFmpegKit.java +++ b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFmpegKit.java @@ -148,7 +148,7 @@ public class FFmpegKit { * @return FFmpeg session created for this execution */ public static FFmpegSession execute(final String command) { - return execute(parseArguments(command)); + return execute(FFmpegKitConfig.parseArguments(command)); } /** @@ -162,7 +162,7 @@ public class FFmpegKit { */ public static FFmpegSession executeAsync(final String command, final ExecuteCallback executeCallback) { - return executeAsync(parseArguments(command), executeCallback); + return executeAsync(FFmpegKitConfig.parseArguments(command), executeCallback); } /** @@ -180,7 +180,7 @@ public class FFmpegKit { final ExecuteCallback executeCallback, final LogCallback logCallback, final StatisticsCallback statisticsCallback) { - return executeAsync(parseArguments(command), executeCallback, logCallback, statisticsCallback); + return executeAsync(FFmpegKitConfig.parseArguments(command), executeCallback, logCallback, statisticsCallback); } /** @@ -196,7 +196,7 @@ public class FFmpegKit { public static FFmpegSession executeAsync(final String command, final ExecuteCallback executeCallback, final ExecutorService executorService) { - final FFmpegSession session = new FFmpegSession(parseArguments(command), executeCallback); + final FFmpegSession session = new FFmpegSession(FFmpegKitConfig.parseArguments(command), executeCallback); FFmpegKitConfig.asyncFFmpegExecute(session, executorService); @@ -220,7 +220,7 @@ public class FFmpegKit { final LogCallback logCallback, final StatisticsCallback statisticsCallback, final ExecutorService executorService) { - final FFmpegSession session = new FFmpegSession(parseArguments(command), executeCallback, logCallback, statisticsCallback); + final FFmpegSession session = new FFmpegSession(FFmpegKitConfig.parseArguments(command), executeCallback, logCallback, statisticsCallback); FFmpegKitConfig.asyncFFmpegExecute(session, executorService); @@ -262,84 +262,4 @@ public class FFmpegKit { return FFmpegKitConfig.getFFmpegSessions(); } - /** - *
Parses the given command into arguments. Uses space character to split the arguments.
- * Supports single and double quote characters.
- *
- * @param command string command
- * @return array of arguments
- */
- public static String[] parseArguments(final String command) {
- final List Concatenates arguments into a string adding a space character between two arguments.
- *
- * @param arguments arguments
- * @return concatenated string containing all arguments
- */
- public static String argumentsToString(final String[] arguments) {
- if (arguments == null) {
- return "null";
- }
-
- StringBuilder stringBuilder = new StringBuilder();
- for (int i = 0; i < arguments.length; i++) {
- if (i > 0) {
- stringBuilder.append(" ");
- }
- stringBuilder.append(arguments[i]);
- }
-
- return stringBuilder.toString();
- }
-
}
diff --git a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFmpegKitConfig.java b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFmpegKitConfig.java
index 489b2ac..25fa6e8 100644
--- a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFmpegKitConfig.java
+++ b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFmpegKitConfig.java
@@ -611,7 +611,7 @@ public class FFmpegKitConfig {
ffmpegSession.complete(new ReturnCode(returnCode));
} catch (final Exception e) {
ffmpegSession.fail(e);
- android.util.Log.w(FFmpegKitConfig.TAG, String.format("FFmpeg execute failed: %s.%s", FFmpegKit.argumentsToString(ffmpegSession.getArguments()), Exceptions.getStackTraceString(e)));
+ android.util.Log.w(FFmpegKitConfig.TAG, String.format("FFmpeg execute failed: %s.%s", FFmpegKitConfig.argumentsToString(ffmpegSession.getArguments()), Exceptions.getStackTraceString(e)));
}
}
@@ -628,7 +628,7 @@ public class FFmpegKitConfig {
ffprobeSession.complete(new ReturnCode(returnCode));
} catch (final Exception e) {
ffprobeSession.fail(e);
- android.util.Log.w(FFmpegKitConfig.TAG, String.format("FFprobe execute failed: %s.%s", FFmpegKit.argumentsToString(ffprobeSession.getArguments()), Exceptions.getStackTraceString(e)));
+ android.util.Log.w(FFmpegKitConfig.TAG, String.format("FFprobe execute failed: %s.%s", FFmpegKitConfig.argumentsToString(ffprobeSession.getArguments()), Exceptions.getStackTraceString(e)));
}
}
@@ -651,7 +651,7 @@ public class FFmpegKitConfig {
}
} catch (final Exception e) {
mediaInformationSession.fail(e);
- android.util.Log.w(FFmpegKitConfig.TAG, String.format("Get media information execute failed: %s.%s", FFmpegKit.argumentsToString(mediaInformationSession.getArguments()), Exceptions.getStackTraceString(e)));
+ android.util.Log.w(FFmpegKitConfig.TAG, String.format("Get media information execute failed: %s.%s", FFmpegKitConfig.argumentsToString(mediaInformationSession.getArguments()), Exceptions.getStackTraceString(e)));
}
}
@@ -1096,6 +1096,86 @@ public class FFmpegKitConfig {
FFmpegKitConfig.globalLogRedirectionStrategy = logRedirectionStrategy;
}
+ /**
+ * Parses the given command into arguments. Uses space character to split the arguments.
+ * Supports single and double quote characters.
+ *
+ * @param command string command
+ * @return array of arguments
+ */
+ public static String[] parseArguments(final String command) {
+ final List Concatenates arguments into a string adding a space character between two arguments.
+ *
+ * @param arguments arguments
+ * @return concatenated string containing all arguments
+ */
+ public static String argumentsToString(final String[] arguments) {
+ if (arguments == null) {
+ return "null";
+ }
+
+ StringBuilder stringBuilder = new StringBuilder();
+ for (int i = 0; i < arguments.length; i++) {
+ if (i > 0) {
+ stringBuilder.append(" ");
+ }
+ stringBuilder.append(arguments[i]);
+ }
+
+ return stringBuilder.toString();
+ }
+
/**
* Enables redirection natively.
*/
diff --git a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFmpegSession.java b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFmpegSession.java
index 8bc0e8d..e092dec 100644
--- a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFmpegSession.java
+++ b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFmpegSession.java
@@ -199,7 +199,7 @@ public class FFmpegSession extends AbstractSession implements Session {
stringBuilder.append(", endTime=");
stringBuilder.append(endTime);
stringBuilder.append(", arguments=");
- stringBuilder.append(FFmpegKit.argumentsToString(arguments));
+ stringBuilder.append(FFmpegKitConfig.argumentsToString(arguments));
stringBuilder.append(", logs=");
stringBuilder.append(getLogsAsString());
stringBuilder.append(", state=");
diff --git a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFprobeKit.java b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFprobeKit.java
index 254f751..860a289 100644
--- a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFprobeKit.java
+++ b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFprobeKit.java
@@ -147,7 +147,7 @@ public class FFprobeKit {
* @return FFprobe session created for this execution
*/
public static FFprobeSession execute(final String command) {
- return execute(FFmpegKit.parseArguments(command));
+ return execute(FFmpegKitConfig.parseArguments(command));
}
/**
@@ -161,7 +161,7 @@ public class FFprobeKit {
*/
public static FFprobeSession executeAsync(final String command,
final ExecuteCallback executeCallback) {
- return executeAsync(FFmpegKit.parseArguments(command), executeCallback);
+ return executeAsync(FFmpegKitConfig.parseArguments(command), executeCallback);
}
/**
@@ -177,7 +177,7 @@ public class FFprobeKit {
public static FFprobeSession executeAsync(final String command,
final ExecuteCallback executeCallback,
final LogCallback logCallback) {
- return executeAsync(FFmpegKit.parseArguments(command), executeCallback, logCallback);
+ return executeAsync(FFmpegKitConfig.parseArguments(command), executeCallback, logCallback);
}
/**
@@ -193,7 +193,7 @@ public class FFprobeKit {
public static FFprobeSession executeAsync(final String command,
final ExecuteCallback executeCallback,
final ExecutorService executorService) {
- final FFprobeSession session = new FFprobeSession(FFmpegKit.parseArguments(command), executeCallback);
+ final FFprobeSession session = new FFprobeSession(FFmpegKitConfig.parseArguments(command), executeCallback);
FFmpegKitConfig.asyncFFprobeExecute(session, executorService);
@@ -215,7 +215,7 @@ public class FFprobeKit {
final ExecuteCallback executeCallback,
final LogCallback logCallback,
final ExecutorService executorService) {
- final FFprobeSession session = new FFprobeSession(FFmpegKit.parseArguments(command), executeCallback, logCallback);
+ final FFprobeSession session = new FFprobeSession(FFmpegKitConfig.parseArguments(command), executeCallback, logCallback);
FFmpegKitConfig.asyncFFprobeExecute(session, executorService);
@@ -335,7 +335,7 @@ public class FFprobeKit {
* @return media information session created for this execution
*/
public static MediaInformationSession getMediaInformationFromCommand(final String command) {
- final MediaInformationSession session = new MediaInformationSession(FFmpegKit.parseArguments(command));
+ final MediaInformationSession session = new MediaInformationSession(FFmpegKitConfig.parseArguments(command));
FFmpegKitConfig.asyncGetMediaInformationExecute(session, AbstractSession.DEFAULT_TIMEOUT_FOR_ASYNCHRONOUS_MESSAGES_IN_TRANSMIT);
@@ -355,7 +355,7 @@ public class FFprobeKit {
final ExecuteCallback executeCallback,
final LogCallback logCallback,
final int waitTimeout) {
- return getMediaInformationFromCommandArgumentsAsync(FFmpegKit.parseArguments(command), executeCallback, logCallback, waitTimeout);
+ return getMediaInformationFromCommandArgumentsAsync(FFmpegKitConfig.parseArguments(command), executeCallback, logCallback, waitTimeout);
}
/**
diff --git a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFprobeSession.java b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFprobeSession.java
index 50a16d9..43fe477 100644
--- a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFprobeSession.java
+++ b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFprobeSession.java
@@ -95,7 +95,7 @@ public class FFprobeSession extends AbstractSession implements Session {
stringBuilder.append(", endTime=");
stringBuilder.append(endTime);
stringBuilder.append(", arguments=");
- stringBuilder.append(FFmpegKit.argumentsToString(arguments));
+ stringBuilder.append(FFmpegKitConfig.argumentsToString(arguments));
stringBuilder.append(", logs=");
stringBuilder.append(getLogsAsString());
stringBuilder.append(", state=");
diff --git a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/MediaInformationSession.java b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/MediaInformationSession.java
index 6f3ace6..004e1dd 100644
--- a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/MediaInformationSession.java
+++ b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/MediaInformationSession.java
@@ -93,7 +93,7 @@ public class MediaInformationSession extends FFprobeSession implements Session {
stringBuilder.append(", endTime=");
stringBuilder.append(endTime);
stringBuilder.append(", arguments=");
- stringBuilder.append(FFmpegKit.argumentsToString(arguments));
+ stringBuilder.append(FFmpegKitConfig.argumentsToString(arguments));
stringBuilder.append(", logs=");
stringBuilder.append(getLogsAsString());
stringBuilder.append(", state=");
diff --git a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/NativeLoader.java b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/NativeLoader.java
index 43d33bb..401c0d8 100644
--- a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/NativeLoader.java
+++ b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/NativeLoader.java
@@ -199,11 +199,11 @@ public class NativeLoader {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
stringBuilder.append(", abis: ");
- stringBuilder.append(FFmpegKit.argumentsToString(Build.SUPPORTED_ABIS));
+ stringBuilder.append(FFmpegKitConfig.argumentsToString(Build.SUPPORTED_ABIS));
stringBuilder.append(", 32bit abis: ");
- stringBuilder.append(FFmpegKit.argumentsToString(Build.SUPPORTED_32_BIT_ABIS));
+ stringBuilder.append(FFmpegKitConfig.argumentsToString(Build.SUPPORTED_32_BIT_ABIS));
stringBuilder.append(", 64bit abis: ");
- stringBuilder.append(FFmpegKit.argumentsToString(Build.SUPPORTED_64_BIT_ABIS));
+ stringBuilder.append(FFmpegKitConfig.argumentsToString(Build.SUPPORTED_64_BIT_ABIS));
} else {
stringBuilder.append(", cpu abis: ");
stringBuilder.append(Build.CPU_ABI);
diff --git a/android/ffmpeg-kit-android-lib/src/test/java/com/arthenica/ffmpegkit/FFmpegKitTest.java b/android/ffmpeg-kit-android-lib/src/test/java/com/arthenica/ffmpegkit/FFmpegKitTest.java
index 37ab5f1..24cbba8 100644
--- a/android/ffmpeg-kit-android-lib/src/test/java/com/arthenica/ffmpegkit/FFmpegKitTest.java
+++ b/android/ffmpeg-kit-android-lib/src/test/java/com/arthenica/ffmpegkit/FFmpegKitTest.java
@@ -536,7 +536,7 @@ public class FFmpegKitTest {
@Test
public void parseSimpleCommand() {
- final String[] argumentArray = FFmpegKit.parseArguments("-hide_banner -loop 1 -i file.jpg -filter_complex [0:v]setpts=PTS-STARTPTS[video] -map [video] -vsync 2 -async 1 video.mp4");
+ final String[] argumentArray = FFmpegKitConfig.parseArguments("-hide_banner -loop 1 -i file.jpg -filter_complex [0:v]setpts=PTS-STARTPTS[video] -map [video] -vsync 2 -async 1 video.mp4");
Assert.assertNotNull(argumentArray);
Assert.assertEquals(14, argumentArray.length);
@@ -559,7 +559,7 @@ public class FFmpegKitTest {
@Test
public void parseSingleQuotesInCommand() {
- String[] argumentArray = FFmpegKit.parseArguments("-loop 1 'file one.jpg' -filter_complex '[0:v]setpts=PTS-STARTPTS[video]' -map [video] video.mp4 ");
+ String[] argumentArray = FFmpegKitConfig.parseArguments("-loop 1 'file one.jpg' -filter_complex '[0:v]setpts=PTS-STARTPTS[video]' -map [video] video.mp4 ");
Assert.assertNotNull(argumentArray);
Assert.assertEquals(8, argumentArray.length);
@@ -576,7 +576,7 @@ public class FFmpegKitTest {
@Test
public void parseDoubleQuotesInCommand() {
- String[] argumentArray = FFmpegKit.parseArguments("-loop 1 \"file one.jpg\" -filter_complex \"[0:v]setpts=PTS-STARTPTS[video]\" -map [video] video.mp4 ");
+ String[] argumentArray = FFmpegKitConfig.parseArguments("-loop 1 \"file one.jpg\" -filter_complex \"[0:v]setpts=PTS-STARTPTS[video]\" -map [video] video.mp4 ");
Assert.assertNotNull(argumentArray);
Assert.assertEquals(8, argumentArray.length);
@@ -590,7 +590,7 @@ public class FFmpegKitTest {
Assert.assertEquals("[video]", argumentArray[6]);
Assert.assertEquals("video.mp4", argumentArray[7]);
- argumentArray = FFmpegKit.parseArguments(" -i file:///tmp/input.mp4 -vcodec libx264 -vf \"scale=1024:1024,pad=width=1024:height=1024:x=0:y=0:color=black\" -acodec copy -q:v 0 -q:a 0 video.mp4");
+ argumentArray = FFmpegKitConfig.parseArguments(" -i file:///tmp/input.mp4 -vcodec libx264 -vf \"scale=1024:1024,pad=width=1024:height=1024:x=0:y=0:color=black\" -acodec copy -q:v 0 -q:a 0 video.mp4");
Assert.assertNotNull(argumentArray);
Assert.assertEquals(13, argumentArray.length);
@@ -612,7 +612,7 @@ public class FFmpegKitTest {
@Test
public void parseDoubleQuotesAndEscapesInCommand() {
- String[] argumentArray = FFmpegKit.parseArguments(" -i file:///tmp/input.mp4 -vf \"subtitles=file:///tmp/subtitles.srt:force_style=\'FontSize=16,PrimaryColour=&HFFFFFF&\'\" -vcodec libx264 -acodec copy -q:v 0 -q:a 0 video.mp4");
+ String[] argumentArray = FFmpegKitConfig.parseArguments(" -i file:///tmp/input.mp4 -vf \"subtitles=file:///tmp/subtitles.srt:force_style=\'FontSize=16,PrimaryColour=&HFFFFFF&\'\" -vcodec libx264 -acodec copy -q:v 0 -q:a 0 video.mp4");
Assert.assertNotNull(argumentArray);
Assert.assertEquals(13, argumentArray.length);
@@ -631,7 +631,7 @@ public class FFmpegKitTest {
Assert.assertEquals("0", argumentArray[11]);
Assert.assertEquals("video.mp4", argumentArray[12]);
- argumentArray = FFmpegKit.parseArguments(" -i file:///tmp/input.mp4 -vf \"subtitles=file:///tmp/subtitles.srt:force_style=\\\"FontSize=16,PrimaryColour=&HFFFFFF&\\\"\" -vcodec libx264 -acodec copy -q:v 0 -q:a 0 video.mp4");
+ argumentArray = FFmpegKitConfig.parseArguments(" -i file:///tmp/input.mp4 -vf \"subtitles=file:///tmp/subtitles.srt:force_style=\\\"FontSize=16,PrimaryColour=&HFFFFFF&\\\"\" -vcodec libx264 -acodec copy -q:v 0 -q:a 0 video.mp4");
Assert.assertNotNull(argumentArray);
Assert.assertEquals(13, argumentArray.length);
@@ -658,7 +658,7 @@ public class FFmpegKitTest {
}
public String argumentsToString(final String[] arguments) {
- return FFmpegKit.argumentsToString(arguments);
+ return FFmpegKitConfig.argumentsToString(arguments);
}
private void assertMediaInput(MediaInformation mediaInformation, String format, String filename) {
diff --git a/apple/src/AbstractSession.m b/apple/src/AbstractSession.m
index a15dc80..b60d813 100644
--- a/apple/src/AbstractSession.m
+++ b/apple/src/AbstractSession.m
@@ -113,7 +113,7 @@ extern void addSessionToSessionHistory(id Parses the given command into arguments. Uses space character to split the arguments.
- * Supports single and double quote characters.
- *
- * @param command string command
- * @return array of arguments
- */
-+ (NSArray*)parseArguments:(NSString*)command;
-
-/**
- * Concatenates arguments into a string adding a space character between two arguments.
- *
- * @param arguments arguments
- * @return concatenated string containing all arguments
- */
-+ (NSString*)argumentsToString:(NSArray*)arguments;
-
@end
#endif // FFMPEG_KIT_H
diff --git a/apple/src/FFmpegKit.m b/apple/src/FFmpegKit.m
index 46f25e0..9c082c8 100644
--- a/apple/src/FFmpegKit.m
+++ b/apple/src/FFmpegKit.m
@@ -65,31 +65,31 @@
}
+ (FFmpegSession*)execute:(NSString*)command {
- FFmpegSession* session = [[FFmpegSession alloc] init:[FFmpegKit parseArguments:command]];
+ FFmpegSession* session = [[FFmpegSession alloc] init:[FFmpegKitConfig parseArguments:command]];
[FFmpegKitConfig ffmpegExecute:session];
return session;
}
+ (FFmpegSession*)executeAsync:(NSString*)command withExecuteCallback:(ExecuteCallback)executeCallback {
- FFmpegSession* session = [[FFmpegSession alloc] init:[FFmpegKit parseArguments:command] withExecuteCallback:executeCallback];
+ FFmpegSession* session = [[FFmpegSession alloc] init:[FFmpegKitConfig parseArguments:command] withExecuteCallback:executeCallback];
[FFmpegKitConfig asyncFFmpegExecute:session];
return session;
}
+ (FFmpegSession*)executeAsync:(NSString*)command withExecuteCallback:(ExecuteCallback)executeCallback withLogCallback:(LogCallback)logCallback withStatisticsCallback:(StatisticsCallback)statisticsCallback {
- FFmpegSession* session = [[FFmpegSession alloc] init:[FFmpegKit parseArguments:command] withExecuteCallback:executeCallback withLogCallback:logCallback withStatisticsCallback:statisticsCallback];
+ FFmpegSession* session = [[FFmpegSession alloc] init:[FFmpegKitConfig parseArguments:command] withExecuteCallback:executeCallback withLogCallback:logCallback withStatisticsCallback:statisticsCallback];
[FFmpegKitConfig asyncFFmpegExecute:session];
return session;
}
+ (FFmpegSession*)executeAsync:(NSString*)command withExecuteCallback:(ExecuteCallback)executeCallback onDispatchQueue:(dispatch_queue_t)queue {
- FFmpegSession* session = [[FFmpegSession alloc] init:[FFmpegKit parseArguments:command] withExecuteCallback:executeCallback];
+ FFmpegSession* session = [[FFmpegSession alloc] init:[FFmpegKitConfig parseArguments:command] withExecuteCallback:executeCallback];
[FFmpegKitConfig asyncFFmpegExecute:session onDispatchQueue:queue];
return session;
}
+ (FFmpegSession*)executeAsync:(NSString*)command withExecuteCallback:(ExecuteCallback)executeCallback withLogCallback:(LogCallback)logCallback withStatisticsCallback:(StatisticsCallback)statisticsCallback onDispatchQueue:(dispatch_queue_t)queue {
- FFmpegSession* session = [[FFmpegSession alloc] init:[FFmpegKit parseArguments:command] withExecuteCallback:executeCallback withLogCallback:logCallback withStatisticsCallback:statisticsCallback];
+ FFmpegSession* session = [[FFmpegSession alloc] init:[FFmpegKitConfig parseArguments:command] withExecuteCallback:executeCallback withLogCallback:logCallback withStatisticsCallback:statisticsCallback];
[FFmpegKitConfig asyncFFmpegExecute:session onDispatchQueue:queue];
return session;
}
@@ -111,72 +111,4 @@
return [FFmpegKitConfig getFFmpegSessions];
}
-+ (NSArray*)parseArguments:(NSString*)command {
- NSMutableArray *argumentArray = [[NSMutableArray alloc] init];
- NSMutableString *currentArgument = [[NSMutableString alloc] init];
-
- bool singleQuoteStarted = false;
- bool doubleQuoteStarted = false;
-
- for (int i = 0; i < command.length; i++) {
- unichar previousChar;
- if (i > 0) {
- previousChar = [command characterAtIndex:(i - 1)];
- } else {
- previousChar = 0;
- }
- unichar currentChar = [command characterAtIndex:i];
-
- if (currentChar == ' ') {
- if (singleQuoteStarted || doubleQuoteStarted) {
- [currentArgument appendFormat: @"%C", currentChar];
- } else if ([currentArgument length] > 0) {
- [argumentArray addObject: currentArgument];
- currentArgument = [[NSMutableString alloc] init];
- }
- } else if (currentChar == '\'' && (previousChar == 0 || previousChar != '\\')) {
- if (singleQuoteStarted) {
- singleQuoteStarted = false;
- } else if (doubleQuoteStarted) {
- [currentArgument appendFormat: @"%C", currentChar];
- } else {
- singleQuoteStarted = true;
- }
- } else if (currentChar == '\"' && (previousChar == 0 || previousChar != '\\')) {
- if (doubleQuoteStarted) {
- doubleQuoteStarted = false;
- } else if (singleQuoteStarted) {
- [currentArgument appendFormat: @"%C", currentChar];
- } else {
- doubleQuoteStarted = true;
- }
- } else {
- [currentArgument appendFormat: @"%C", currentChar];
- }
- }
-
- if ([currentArgument length] > 0) {
- [argumentArray addObject: currentArgument];
- }
-
- return argumentArray;
-}
-
-+ (NSString*)argumentsToString:(NSArray*)arguments {
- if (arguments == nil) {
- return @"nil";
- }
-
- NSMutableString *string = [NSMutableString stringWithString:@""];
- for (int i=0; i < [arguments count]; i++) {
- NSString *argument = [arguments objectAtIndex:i];
- if (i > 0) {
- [string appendString:@" "];
- }
- [string appendString:argument];
- }
-
- return string;
-}
-
@end
diff --git a/apple/src/FFmpegKitConfig.h b/apple/src/FFmpegKitConfig.h
index c4da16a..ebe1a72 100644
--- a/apple/src/FFmpegKitConfig.h
+++ b/apple/src/FFmpegKitConfig.h
@@ -381,6 +381,23 @@ typedef NS_ENUM(NSUInteger, Signal) {
*/
+ (NSString*)sessionStateToString:(SessionState)state;
+/**
+ * Parses the given command into arguments. Uses space character to split the arguments.
+ * Supports single and double quote characters.
+ *
+ * @param command string command
+ * @return array of arguments
+ */
++ (NSArray*)parseArguments:(NSString*)command;
+
+/**
+ * Concatenates arguments into a string adding a space character between two arguments.
+ *
+ * @param arguments arguments
+ * @return concatenated string containing all arguments
+ */
++ (NSString*)argumentsToString:(NSArray*)arguments;
+
@end
#endif // FFMPEG_KIT_CONFIG_H
diff --git a/apple/src/FFmpegKitConfig.m b/apple/src/FFmpegKitConfig.m
index 35a7e0b..f808225 100644
--- a/apple/src/FFmpegKitConfig.m
+++ b/apple/src/FFmpegKitConfig.m
@@ -878,7 +878,7 @@ int executeFFprobe(long sessionId, NSArray* arguments) {
[ffmpegSession complete:[[ReturnCode alloc] init:returnCode]];
} @catch (NSException *exception) {
[ffmpegSession fail:exception];
- NSLog(@"FFmpeg execute failed: %@.%@", [FFmpegKit argumentsToString:[ffmpegSession getArguments]], [NSString stringWithFormat:@"%@", [exception callStackSymbols]]);
+ NSLog(@"FFmpeg execute failed: %@.%@", [FFmpegKitConfig argumentsToString:[ffmpegSession getArguments]], [NSString stringWithFormat:@"%@", [exception callStackSymbols]]);
}
}
@@ -890,7 +890,7 @@ int executeFFprobe(long sessionId, NSArray* arguments) {
[ffprobeSession complete:[[ReturnCode alloc] init:returnCode]];
} @catch (NSException *exception) {
[ffprobeSession fail:exception];
- NSLog(@"FFprobe execute failed: %@.%@", [FFmpegKit argumentsToString:[ffprobeSession getArguments]], [NSString stringWithFormat:@"%@", [exception callStackSymbols]]);
+ NSLog(@"FFprobe execute failed: %@.%@", [FFmpegKitConfig argumentsToString:[ffprobeSession getArguments]], [NSString stringWithFormat:@"%@", [exception callStackSymbols]]);
}
}
@@ -907,7 +907,7 @@ int executeFFprobe(long sessionId, NSArray* arguments) {
}
} @catch (NSException *exception) {
[mediaInformationSession fail:exception];
- NSLog(@"Get media information execute failed: %@.%@", [FFmpegKit argumentsToString:[mediaInformationSession getArguments]], [NSString stringWithFormat:@"%@", [exception callStackSymbols]]);
+ NSLog(@"Get media information execute failed: %@.%@", [FFmpegKitConfig argumentsToString:[mediaInformationSession getArguments]], [NSString stringWithFormat:@"%@", [exception callStackSymbols]]);
}
}
@@ -1145,4 +1145,72 @@ int executeFFprobe(long sessionId, NSArray* arguments) {
}
}
++ (NSArray*)parseArguments:(NSString*)command {
+ NSMutableArray *argumentArray = [[NSMutableArray alloc] init];
+ NSMutableString *currentArgument = [[NSMutableString alloc] init];
+
+ bool singleQuoteStarted = false;
+ bool doubleQuoteStarted = false;
+
+ for (int i = 0; i < command.length; i++) {
+ unichar previousChar;
+ if (i > 0) {
+ previousChar = [command characterAtIndex:(i - 1)];
+ } else {
+ previousChar = 0;
+ }
+ unichar currentChar = [command characterAtIndex:i];
+
+ if (currentChar == ' ') {
+ if (singleQuoteStarted || doubleQuoteStarted) {
+ [currentArgument appendFormat: @"%C", currentChar];
+ } else if ([currentArgument length] > 0) {
+ [argumentArray addObject: currentArgument];
+ currentArgument = [[NSMutableString alloc] init];
+ }
+ } else if (currentChar == '\'' && (previousChar == 0 || previousChar != '\\')) {
+ if (singleQuoteStarted) {
+ singleQuoteStarted = false;
+ } else if (doubleQuoteStarted) {
+ [currentArgument appendFormat: @"%C", currentChar];
+ } else {
+ singleQuoteStarted = true;
+ }
+ } else if (currentChar == '\"' && (previousChar == 0 || previousChar != '\\')) {
+ if (doubleQuoteStarted) {
+ doubleQuoteStarted = false;
+ } else if (singleQuoteStarted) {
+ [currentArgument appendFormat: @"%C", currentChar];
+ } else {
+ doubleQuoteStarted = true;
+ }
+ } else {
+ [currentArgument appendFormat: @"%C", currentChar];
+ }
+ }
+
+ if ([currentArgument length] > 0) {
+ [argumentArray addObject: currentArgument];
+ }
+
+ return argumentArray;
+}
+
++ (NSString*)argumentsToString:(NSArray*)arguments {
+ if (arguments == nil) {
+ return @"nil";
+ }
+
+ NSMutableString *string = [NSMutableString stringWithString:@""];
+ for (int i=0; i < [arguments count]; i++) {
+ NSString *argument = [arguments objectAtIndex:i];
+ if (i > 0) {
+ [string appendString:@" "];
+ }
+ [string appendString:argument];
+ }
+
+ return string;
+}
+
@end
diff --git a/apple/src/FFprobeKit.m b/apple/src/FFprobeKit.m
index b859d8d..71b6628 100644
--- a/apple/src/FFprobeKit.m
+++ b/apple/src/FFprobeKit.m
@@ -59,31 +59,31 @@
}
+ (FFprobeSession*)execute:(NSString*)command {
- FFprobeSession* session = [[FFprobeSession alloc] init:[FFmpegKit parseArguments:command]];
+ FFprobeSession* session = [[FFprobeSession alloc] init:[FFmpegKitConfig parseArguments:command]];
[FFmpegKitConfig ffprobeExecute:session];
return session;
}
+ (FFprobeSession*)executeAsync:(NSString*)command withExecuteCallback:(ExecuteCallback)executeCallback {
- FFprobeSession* session = [[FFprobeSession alloc] init:[FFmpegKit parseArguments:command] withExecuteCallback:executeCallback];
+ FFprobeSession* session = [[FFprobeSession alloc] init:[FFmpegKitConfig parseArguments:command] withExecuteCallback:executeCallback];
[FFmpegKitConfig asyncFFprobeExecute:session];
return session;
}
+ (FFprobeSession*)executeAsync:(NSString*)command withExecuteCallback:(ExecuteCallback)executeCallback withLogCallback:(LogCallback)logCallback {
- FFprobeSession* session = [[FFprobeSession alloc] init:[FFmpegKit parseArguments:command] withExecuteCallback:executeCallback withLogCallback:logCallback];
+ FFprobeSession* session = [[FFprobeSession alloc] init:[FFmpegKitConfig parseArguments:command] withExecuteCallback:executeCallback withLogCallback:logCallback];
[FFmpegKitConfig asyncFFprobeExecute:session];
return session;
}
+ (FFprobeSession*)executeAsync:(NSString*)command withExecuteCallback:(ExecuteCallback)executeCallback onDispatchQueue:(dispatch_queue_t)queue {
- FFprobeSession* session = [[FFprobeSession alloc] init:[FFmpegKit parseArguments:command] withExecuteCallback:executeCallback];
+ FFprobeSession* session = [[FFprobeSession alloc] init:[FFmpegKitConfig parseArguments:command] withExecuteCallback:executeCallback];
[FFmpegKitConfig asyncFFprobeExecute:session onDispatchQueue:queue];
return session;
}
+ (FFprobeSession*)executeAsync:(NSString*)command withExecuteCallback:(ExecuteCallback)executeCallback withLogCallback:(LogCallback)logCallback onDispatchQueue:(dispatch_queue_t)queue {
- FFprobeSession* session = [[FFprobeSession alloc] init:[FFmpegKit parseArguments:command] withExecuteCallback:executeCallback withLogCallback:logCallback];
+ FFprobeSession* session = [[FFprobeSession alloc] init:[FFmpegKitConfig parseArguments:command] withExecuteCallback:executeCallback withLogCallback:logCallback];
[FFmpegKitConfig asyncFFprobeExecute:session onDispatchQueue:queue];
return session;
}
@@ -131,7 +131,7 @@
}
+ (MediaInformationSession*)getMediaInformationFromCommand:(NSString*)command {
- MediaInformationSession* session = [[MediaInformationSession alloc] init:[FFmpegKit parseArguments:command]];
+ MediaInformationSession* session = [[MediaInformationSession alloc] init:[FFmpegKitConfig parseArguments:command]];
[FFmpegKitConfig getMediaInformationExecute:session withTimeout:AbstractSessionDefaultTimeoutForAsynchronousMessagesInTransmit];
return session;
}