Compare commits

...

18 Commits

Author SHA1 Message Date
Taner Sener f226cd62ed Test application versions updated. 2018-08-30 15:47:47 +03:00
Taner Sener 0d02689774 Disabled assembly for gmp. 2018-08-30 10:36:32 +03:00
Taner Sener d1f8172641 Fixing Android linking errors for arm architectures. 2018-08-17 07:56:02 +03:00
Taner Sener 83cac57ef0 Version used in Android test application updated. 2018-08-16 16:13:28 +03:00
Taner Sener ecc897dde2 Releasing v1.2. 2018-08-16 12:09:45 +03:00
Taner Sener ab74b25864 new libpng version, v1.6.35. 2018-08-16 11:20:13 +03:00
Taner Sener 919d9c5a48 New fribidi version, v1.0.5. 2018-08-16 08:34:29 +03:00
Taner Sener c5a1e8e9a9 New freetype version, v2.9.1. 2018-08-16 08:31:19 +03:00
Taner Sener 2ae8e9ddda New expat version, v2.2.6. 2018-08-16 08:29:21 +03:00
Taner Sener 4fc6c19729 New x264 version, snapshot-20180815-2245-stable 2018-08-16 08:26:07 +03:00
Taner Sener 48014b7321 gnutls v3.5.19 2018-07-19 20:48:10 +03:00
Taner Sener f0634b1638 ffmpeg v3.4.4 2018-07-19 20:35:01 +03:00
Taner Sener a600c46d90 Versions updated in README. 2018-07-12 16:39:07 +03:00
Taner Sener 6539d50cba Fixed issue #8 2018-07-12 16:11:23 +03:00
Taner Sener 2492c5d9a6 bintray badges added. 2018-07-12 15:59:26 +03:00
Taner Sener ea7f062396 New ffmpeg version v3.4.3 2018-07-12 11:57:08 +03:00
Taner Sener 90f0c71a0e Updating to latest README 2018-07-12 11:46:11 +03:00
Taner Sener 77c7d67fc8 master merged. 2018-06-27 00:11:12 +03:00
968 changed files with 18745 additions and 62184 deletions
+92 -83
View File
@@ -1,77 +1,73 @@
# MobileFFmpeg
Source code and scripts to build FFmpeg for Android and IOS platform; prebuilt libraries for both platforms
# MobileFFmpeg [![Join the chat at https://gitter.im/mobile-ffmpeg/Lobby](https://badges.gitter.im/mobile-ffmpeg/Lobby.svg)](https://gitter.im/mobile-ffmpeg/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [ ![Download](https://api.bintray.com/packages/tanersener/maven/mobile-ffmpeg-full/images/download.svg?version=1.2) ](https://bintray.com/tanersener/maven/mobile-ffmpeg-full/1.2/link)
FFmpeg for Android and IOS
### 1. Features
- Builds both Android and IOS
- Supports 21 external libraries, 2 GPL libraries and 10 architectures in total
- Use prebuilt binaries available under `JCenter`/`CocoaPods` or build your own version with external libraries you need
- Supports
- Both Android and IOS
- FFmpeg `v3.4.x` and `v4.0.x` releases
- 23 external libraries.
`fontconfig`, `freetype`, `fribidi`, `gmp`, `gnutls`, `kvazaar`, `lame`, `libaom`, `libass`, `libiconv`, `libilbc`, `libtheora`, `libvorbis`, `libvpx`, `libwebp`, `libxml2`, `opencore-amr`, `opus`, `shine`, `snappy`, `soxr`, `speex`, `wavpack`
- 2 external libraries with GPL license
`x264`, `xvidcore`
- Exposes FFmpeg capabilities both directly from FFmpeg libraries and through MobileFFmpeg wrapper library
- Creates shared libraries (.so for Android, .dylib for IOS)
- Includes cross-compile instructions for 32 open-source libraries including FFmpeg
- Includes cross-compile instructions for 35 open-source libraries
`expat`, `ffmpeg`, `fontconfig`, `freetype`, `fribidi`, `giflib`, `gmp`, `gnutls`, `kvazaar`, `lame`, `libaom`, `libass`, `libiconv`, `libilbc`, `libjpeg`, `libjpeg-turbo`, `libogg`, `libpng`, `libtheora`, `libuuid`, `libvorbis`, `libvpx`, `libwebp`, `libxml2`, `nettle`, `opencore-amr`, `opus`, `shine`, `snappy`, `soxr`, `speex`, `tiff`, `wavpack`, `x264`, `xvidcore`
- Licensed under LGPL 3.0, can be customized to support GPL v3.0
#### 1.1 Android
- Supports `arm-v7a`, `arm-v7a-neon`, `arm64-v8a`, `x86` and `x86_64` architectures
- Creates Android archive with .aar extension
#### 1.2 IOS
- Supports `armv7`, `armv7s`, `arm64`, `i386` and `x86_64` architectures
- Built with `-fembed-bitcode` flag
- Creates IOS dynamic universal (fat) library
- Creates IOS dynamic framework for IOS 8 or later
### 2. Architectures
### 2. Using
Prebuilt libraries are available under [Github](https://github.com/tanersener/mobile-ffmpeg/releases), [JCenter](https://bintray.com/bintray/jcenter) and [CocoaPods](https://cocoapods.org)
There are six different prebuilt packages. Below you can see which external libraries are enabled in each of them.
| | min | min-gpl | https | https-gpl | full | full-gpl |
| :----: | :----: | :----: | :----: | :----: | :----: | :----: |
| external <br/> libraries <br/> enabled | - | x264* <br/> xvidcore* | gnutls | gnutls <br/> x264* <br/> xvidcore* | fontconfig <br/> freetype <br/> fribidi <br/> gmp <br/> gnutls <br/> kvazaar <br/> lame <br/> libaom** <br/> libass <br/> libiconv <br/> libilbc* <br/> libtheora <br/> libvorbis <br/> libvpx <br/> libwebp <br/> libxml2 <br/> opencore-amr <br/> opus* <br/> shine <br/> snappy* <br/> soxr** <br/> speex <br/> wavpack | fontconfig <br/> freetype <br/> fribidi <br/> gmp <br/> gnutls <br/> kvazaar <br/> lame <br/> libaom** <br/> libass <br/> libiconv <br/> libilbc* <br/> libtheora <br/> libvorbis <br/> libvpx <br/> libwebp <br/> libxml2 <br/> opencore-amr <br/> opus* <br/> shine <br/> snappy* <br/> soxr** <br/> speex <br/> wavpack <br/> x264* <br/> xvidcore* |
| | [ ![Download](https://api.bintray.com/packages/tanersener/maven/mobile-ffmpeg-min/images/download.svg?version=1.2) ](https://bintray.com/tanersener/maven/mobile-ffmpeg-min/1.2/link) | [ ![Download](https://api.bintray.com/packages/tanersener/maven/mobile-ffmpeg-min-gpl/images/download.svg?version=1.2) ](https://bintray.com/tanersener/maven/mobile-ffmpeg-min-gpl/1.2/link) | [ ![Download](https://api.bintray.com/packages/tanersener/maven/mobile-ffmpeg-https/images/download.svg?version=1.2) ](https://bintray.com/tanersener/maven/mobile-ffmpeg-https/1.2/link) | [ ![Download](https://api.bintray.com/packages/tanersener/maven/mobile-ffmpeg-https-gpl/images/download.svg?version=1.2) ](https://bintray.com/tanersener/maven/mobile-ffmpeg-https-gpl/1.2/link) | [ ![Download](https://api.bintray.com/packages/tanersener/maven/mobile-ffmpeg-full/images/download.svg?version=1.2) ](https://bintray.com/tanersener/maven/mobile-ffmpeg-full/1.2/link) | [ ![Download](https://api.bintray.com/packages/tanersener/maven/mobile-ffmpeg-full-gpl/images/download.svg?version=1.2) ](https://bintray.com/tanersener/maven/mobile-ffmpeg-full-gpl/1.2/link) |
\* - Supported since `v1.1`
\*\* - Supported since `v2.0`
#### 2.1 Android
- arm-v7a
- arm-v7a-neon
- arm64-v8a
- x86
- x86_64
#### 2.2 IOS
- armv7
- armv7s
- arm64
- i386
- x86_64
1. Add MobileFFmpeg dependency from `jcenter()`
```
dependencies {`
implementation 'com.arthenica:mobile-ffmpeg-full:1.2'
}
```
### 3. FFmpeg Support
This repository branch contains FFmpeg version 3.4.2 with support for the following external libraries.
Cross-compile instructions for all of them can be found under scripts inside `build` folder.
- fontconfig
- freetype
- fribidi
- gmp
- gnutls
- kvazaar
- lame
- libass
- libiconv
- libilbc
- libtheora
- libvorbis
- libvpx
- libwebp
- libxml2
- opencore-amr
- opus
- shine
- snappy
- speex
- wavpack
- x264
- xvidcore
External libraries and their dependencies are explained in the [External Libraries](https://github.com/tanersener/mobile-ffmpeg/wiki/External-Libraries) page.
### 4. Using
#### 4.1 Android
Import `mobile-ffmpeg-1.1.aar` into your project and use the following source code.
```
2. Use the following source code to execute commands.
```
import com.arthenica.mobileffmpeg.FFmpeg;
int rc = FFmpeg.execute("-i", "file1.mp4", "-c:v", "libxvid", "file1.avi");
Log.i(Log.TAG, String.format("Command execution %s.", (rc == 0?"completed successfully":"failed with rc=" + rc));
```
#### 4.2 IOS
Use MobileFFmpeg in your project by adding all IOS frameworks from `prebuilt/ios-framework` path or
by adding all `ffmpeg` and `mobile-ffmpeg` dylibs with headers from folders inside `prebuilt/ios-universal`.
```
#### 2.2 IOS
1. Add MobileFFmpeg pod to your `Podfile`
```
pod 'mobile-ffmpeg-full', '~> 1.2'
```
Then run the following Objective-C source code.
```
2. Create and execute commands using the following `Objective-C` example.
```
#import <mobileffmpeg/mobileffmpeg.h>
NSString* command = @"-i file1.mp4 -c:v libxvid file1.avi";
@@ -87,73 +83,86 @@ Then run the following Objective-C source code.
NSLog(@"Process exited with rc %d\n", result);
free(arguments);
```
#### 4.3 Test Application
You can see how MobileFFmpeg is used inside an application by running test applications in this repository.
```
#### 2.3 Test Application
You can see how MobileFFmpeg is used inside an application by running test applications provided.
There is an Android test application under the `android/test-app` folder and an IOS test application under the
`ios/test-app` folder.
`ios/test-app` folder. Both applications are identical and supports command execution and video encoding.
### 5. Building
#### 5.1 Prerequisites
### 3. Versions
- `MobileFFmpeg v1.x` is the previous stable, includes `FFmpeg v3.4.4`
- `MobileFFmpeg v2.x` is the current stable, includes `FFmpeg v4.0.2`
### 4. Building
#### 4.1 Prerequisites
1. Use your package manager (apt, yum, dnf, brew, etc.) to install the following packages.
```
autoconf automake libtool pkg-config curl cmake gcc gperf texinfo yasm nasm
```
```
autoconf automake libtool pkg-config curl cmake gcc gperf texinfo yasm nasm
```
Some of these packages are not mandatory for the default build.
Please visit [Android Prerequisites](https://github.com/tanersener/mobile-ffmpeg/wiki/Android-Prerequisites) and
[IOS Prerequisites](https://github.com/tanersener/mobile-ffmpeg/wiki/IOS-Prerequisites) for the details.
2. Android builds require these additional packages.
- **Android SDK 5.0 Lollipop (API Level 21)** or later
- **Android NDK r16b** or later with LLDB and CMake
- **gradle 4.4** or later
- **Android SDK 5.0 Lollipop (API Level 21)** or later
- **Android NDK r16b** or later with LLDB and CMake
- **gradle 4.4** or later
3. IOS builds need these extra packages and tools.
- **IOS SDK 7.0.x** or later
- **Xcode 8.x** or later
- **Command Line Tools**
- **lipo** utility
- **IOS SDK 7.0.x** or later
- **Xcode 8.x** or later
- **Command Line Tools**
- **lipo** utility
#### 5.2 Build Scripts
#### 4.2 Build Scripts
Use `android.sh` and `ios.sh` to build MobileFFmpeg for each platform.
After a successful build, compiled FFmpeg and MobileFFmpeg libraries can be found under `prebuilt` directory.
Both `android.sh` and `ios.sh` can be customized to override default settings,
[android.sh](https://github.com/tanersener/mobile-ffmpeg/wiki/android.sh) and
[ios.sh](https://github.com/tanersener/mobile-ffmpeg/wiki/ios.sh) wiki pages include all available build options.
##### 5.2.1 Android
##### 4.2.1 Android
```
export ANDROID_NDK_ROOT=<Android NDK Path>
./android.sh
```
##### 5.2.2 IOS
##### 4.2.2 IOS
```
./ios.sh
./ios.sh
```
#### 5.3 GPL Support
From `v1.1` onwards it is possible to enable to GPL libraries `x264` and `xvidcore` from top level build scripts.
#### 4.3 GPL Support
Since`v1.1`, it is possible to enable to GPL licensed libraries `x264` and `xvidcore` from the top level build scripts.
Their source code is not included in the repository and downloaded when enabled.
### 6. Documentation
#### 4.4 External Libraries
`build` directory includes build scripts for external libraries. There are two scripts for each library, one for Android and one for IOS. They include all options/flags used to cross-compile the libraries. `ASM` is enabled by most of them, exceptions are listed under the [ASM Support](https://github.com/tanersener/mobile-ffmpeg/wiki/ASM-Support) page.
### 5. Documentation
A more detailed documentation is available at [Wiki](https://github.com/tanersener/mobile-ffmpeg/wiki).
### 7. License
### 6. License
This project is licensed under the LGPL v3.0. However, if source code is built using optional `--enable-gpl` flag or
prebuilt binaries with `-gpl` postfix are used then MobileFFmpeg is subject to the GPL v3.0 license.
Source code of FFmpeg and external libraries is included in compliance with their individual licenses.
`strip-frameworks.sh` script included and distributed is published under the Apache License version 2.0.
Digital assets used in test applications are published in the public domain.
Please visit [License](https://github.com/tanersener/mobile-ffmpeg/wiki/License) page for the details.
### 8. Contributing
### 7. Contributing
This project is stable but far from complete. If you have any recommendations or ideas to improve it, please feel free to submit issues or pull requests. Any help is appreciated.
If you have any recommendations or ideas to improve it, please feel free to submit issues or pull requests. Any help is appreciated.
### 9. See Also
### 8. See Also
- [libav gas-preprocessor](https://github.com/libav/gas-preprocessor/raw/master/gas-preprocessor.pl)
- [FFmpeg API Documentation](https://ffmpeg.org/doxygen/3.4/index.html)
+2 -2
View File
@@ -491,6 +491,7 @@ do
export ARCH=$(get_arch_name $run_arch)
export TOOLCHAIN=$(get_toolchain)
export TOOLCHAIN_ARCH=$(get_toolchain_arch)
export ANDROID_ARCH=$(get_android_arch $run_arch)
create_toolchain || exit 1
@@ -534,7 +535,6 @@ if [[ ! -z ${ANDROID_ARCHITECTURES} ]]; then
MOBILE_FFMPEG_AAR=${BASEDIR}/prebuilt/android-aar/mobile-ffmpeg
# BUILDING ANDROID ARCHIVE LIBRARY
rm -rf ${BASEDIR}/prebuilt/android-aar
rm -rf ${BASEDIR}/android/libs
mkdir -p ${MOBILE_FFMPEG_AAR}
@@ -559,7 +559,7 @@ if [[ ! -z ${ANDROID_ARCHITECTURES} ]]; then
exit 1
fi
cp ${BASEDIR}/android/app/build/outputs/aar/mobile-ffmpeg-1.1.aar ${MOBILE_FFMPEG_AAR} || exit 1
cp ${BASEDIR}/android/app/build/outputs/aar/mobile-ffmpeg-*.aar ${MOBILE_FFMPEG_AAR}/mobile-ffmpeg.aar || exit 1
echo -e "Created mobile-ffmpeg Android archive successfully.\n" >> ${BASEDIR}/build.log
+1
View File
@@ -1 +1,2 @@
/build
/local.properties
+1 -1
View File
@@ -38,7 +38,7 @@ PROJECT_NAME = "MobileFFmpeg Android API"
# could be handy for archiving the generated documentation or if some version
# control system is used.
PROJECT_NUMBER = 1.1
PROJECT_NUMBER = 1.2
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
+2 -2
View File
@@ -5,8 +5,8 @@ android {
defaultConfig {
minSdkVersion 21
targetSdkVersion 27
versionCode 11
versionName "1.1"
versionCode 12
versionName "1.2"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
project.archivesBaseName = "mobile-ffmpeg"
}
+180
View File
@@ -0,0 +1,180 @@
apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.1'
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
}
}
android {
compileSdkVersion 27
defaultConfig {
minSdkVersion 21
targetSdkVersion 27
versionCode Integer.parseInt(releaseVersionCode)
versionName releaseVersionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
project.archivesBaseName = releaseProject
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main {
jniLibs.srcDirs = ["../libs"]
}
}
libraryVariants.all { variant ->
variant.outputs.all { output ->
if (outputFile != null && outputFileName.endsWith('.aar')) {
outputFileName = "${archivesBaseName}-${android.defaultConfig.versionName}.aar"
}
}
}
}
ext {
bintrayRepo = 'maven'
bintrayName = releaseProject
publishedGroupId = 'com.arthenica'
libraryName = releaseProject
artifact = releaseProject
libraryDescription = releaseProjectDescription
siteUrl = 'https://github.com/tanersener/mobile-ffmpeg'
gitUrl = 'https://github.com/tanersener/mobile-ffmpeg.git'
libraryVersion = releaseVersionName
developerId = 'tanersener'
developerName = 'Taner Sener'
developerEmail = 'tanersener@gmail.com'
if (Project.hasProperty('releaseGPL')) {
licenseName = 'GNU General Public License version 3'
licenseUrl = 'https://www.gnu.org/licenses/gpl-3.0.txt'
allLicenses = ["GPL-3.0"]
} else {
licenseName = 'GNU Lesser General Public License, Version 3'
licenseUrl = 'https://www.gnu.org/licenses/lgpl-3.0.txt'
allLicenses = ["LGPL-3.0"]
}
}
group = publishedGroupId
version = libraryVersion
install {
repositories.mavenInstaller {
pom.project {
packaging 'aar'
groupId publishedGroupId
artifactId artifact
name libraryName
description libraryDescription
url siteUrl
licenses {
license {
name licenseName
url licenseUrl
}
}
developers {
developer {
id developerId
name developerName
email developerEmail
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
}
}
}
}
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
user = properties.getProperty("bintray.user")
key = properties.getProperty("bintray.apikey")
configurations = ['archives']
pkg {
repo = bintrayRepo
name = bintrayName
desc = libraryDescription
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = allLicenses
dryRun = false
publish = false
override = false
publicDownloadNumbers = false
version {
desc = libraryDescription
}
}
}
task sourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.srcDirs
}
task javadoc(type: Javadoc) {
title = 'MobileFFmpeg'
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
artifacts {
archives javadocJar
archives sourcesJar
}
afterEvaluate {
javadoc.classpath += files(android.libraryVariants.collect { variant ->
variant.javaCompile.classpath.files
})
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
allprojects {
repositories {
google()
jcenter()
}
}
+1 -1
View File
@@ -28,7 +28,7 @@
#include "log.h"
/** Library version string */
#define MOBILE_FFMPEG_VERSION "1.1"
#define MOBILE_FFMPEG_VERSION "1.2"
/*
* Class: com_arthenica_mobileffmpeg_FFmpeg
+3 -3
View File
@@ -36,7 +36,7 @@ LOCAL_MODULE := mobileffmpeg
LOCAL_SRC_FILES := $(MY_PATH)/mobileffmpeg.c $(MY_PATH)/cmdutils.c $(MY_PATH)/ffmpeg.c $(MY_PATH)/ffmpeg_opt.c $(MY_PATH)/ffmpeg_hw.c $(MY_PATH)/ffmpeg_filter.c
LOCAL_CFLAGS := -I${LOCAL_PATH}/../../prebuilt/android-$(TARGET_ARCH)/ffmpeg/include
LOCAL_LDLIBS := -llog -lz -landroid
LOCAL_SHARED_LIBRARIES := libavfilter libavformat libavcodec libavutil libswresample libavdevice libswscale
LOCAL_SHARED_LIBRARIES := c++_shared libavfilter libavformat libavcodec libavutil libswresample libavdevice libswscale
include $(BUILD_SHARED_LIBRARY)
ifeq ($(TARGET_ARCH_ABI), armeabi-v7a)
@@ -48,7 +48,7 @@ ifeq ($(TARGET_ARCH_ABI), armeabi-v7a)
LOCAL_SRC_FILES := $(MY_PATH)/mobileffmpeg.c $(MY_PATH)/cmdutils.c $(MY_PATH)/ffmpeg.c $(MY_PATH)/ffmpeg_opt.c $(MY_PATH)/ffmpeg_hw.c $(MY_PATH)/ffmpeg_filter.c
LOCAL_CFLAGS := -I${LOCAL_PATH}/../../prebuilt/android-$(TARGET_ARCH)/ffmpeg/include
LOCAL_LDLIBS := -llog -lz -landroid
LOCAL_SHARED_LIBRARIES := libavcodec-neon libavfilter-neon libswscale-neon libavformat libavutil libswresample libavdevice
LOCAL_SHARED_LIBRARIES := c++_shared libavcodec-neon libavfilter-neon libswscale-neon libavformat libavutil libswresample libavdevice
LOCAL_ARM_NEON := true
include $(BUILD_SHARED_LIBRARY)
@@ -57,4 +57,4 @@ ifeq ($(TARGET_ARCH_ABI), armeabi-v7a)
endif
endif
$(call import-module, ffmpeg)
$(call import-module, ffmpeg)
+1
View File
@@ -1,3 +1,4 @@
/build
/.idea/
/gradle/
/local.properties
+1 -1
View File
@@ -19,12 +19,12 @@ android {
}
dependencies {
implementation project(':app')
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:support-v4:27.1.1'
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
implementation 'com.arthenica:mobile-ffmpeg-full:1.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
@@ -51,7 +51,9 @@ public class CommandTabFragment extends Fragment {
public CommandTabFragment() {
logQueue = new ConcurrentLinkedQueue<>();
}
public void enableLogRedirection() {
Log.enableCallbackFunction(new Function<byte[], Void>() {
@Override
@@ -62,6 +64,10 @@ public class CommandTabFragment extends Fragment {
});
}
public void disableLogRedirection() {
Log.enableCallbackFunction(null);
}
public static CommandTabFragment newInstance(final Context context) {
CommandTabFragment fragment = new CommandTabFragment();
fragment.setContext(context);
@@ -110,6 +116,7 @@ public class CommandTabFragment extends Fragment {
}
public void runFFmpeg() {
enableLogRedirection();
String command = commandText.getText().toString();
String[] split = command.split(" ");
@@ -121,9 +128,11 @@ public class CommandTabFragment extends Fragment {
android.util.Log.i(MainActivity.TAG, String.format("Process exited with rc %d.", returnCode));
Toast.makeText(context, "Run completed", Toast.LENGTH_SHORT).show();
logSync.countDown();
disableLogRedirection();
}
public void runFFmpegAsync() {
enableLogRedirection();
String command = commandText.getText().toString();
String[] arguments = command.split(" ");
@@ -137,6 +146,7 @@ public class CommandTabFragment extends Fragment {
public Void apply(Integer returnCode) {
android.util.Log.i(MainActivity.TAG, String.format("Async process exited with rc %d.", returnCode));
logSync.countDown();
disableLogRedirection();
return null;
}
}, arguments);
@@ -28,7 +28,7 @@ import java.io.File;
*/
public class Slideshow {
public static String generateScript(final File fileDirectory, final String image1, final String image2, final String image3, final String videoFile) {
public static String generateScript(final File fileDirectory, final String image1, final String image2, final String image3, final String videoFile, final String videoCodec) {
return
"-loop 1 -i " + fileDirectory + "/" + image1 + " " +
"-loop 1 -i " + fileDirectory + "/" + image2 + " " +
@@ -46,7 +46,7 @@ public class Slideshow {
"[stream2starting][stream1ending]blend=all_expr=\'if(gte(X,(W/2)*T/1)*lte(X,W-(W/2)*T/1),B,A)\':shortest=1[stream2blended];"+
"[stream3starting][stream2ending]blend=all_expr=\'if(gte(X,(W/2)*T/1)*lte(X,W-(W/2)*T/1),B,A)\':shortest=1[stream3blended];"+
"[stream1overlaid][stream2blended][stream2overlaid][stream3blended][stream3overlaid]concat=n=5:v=1:a=0,format=yuv420p[video]"+
" -map [video] -vsync 2 -async 1 -c:v mpeg4 -r 30 " + fileDirectory + "/" + videoFile;
" -map [video] -vsync 2 -async 1 -c:v " + videoCodec.toLowerCase() + " -r 30 " + fileDirectory + "/" + videoFile;
}
}
@@ -36,7 +36,9 @@ import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.MediaController;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.VideoView;
@@ -48,9 +50,12 @@ import static com.arthenica.mobileffmpeg.test.MainActivity.TAG;
public class SlideshowTabFragment extends Fragment {
public static final String DEFAULT_VIDEO_CODEC = "mpeg4";
private Context context;
private View playButton;
private String asyncResult;
private EditText videoCodecText;
public SlideshowTabFragment() {
}
@@ -89,6 +94,10 @@ public class SlideshowTabFragment extends Fragment {
final VideoView videoView = getView().findViewById(R.id.videoView);
videoView.setBackgroundColor(Color.LTGRAY);
videoCodecText = getView().findViewById(R.id.videoCodecText);
videoCodecText.setText(DEFAULT_VIDEO_CODEC);
videoCodecText.setSelection(DEFAULT_VIDEO_CODEC.length());
// PLAY BUTTON IS DISABLED AT STARTUP
playButton = getView().findViewById(R.id.slideshowPlayButton);
if (playButton != null) {
@@ -130,6 +139,12 @@ public class SlideshowTabFragment extends Fragment {
final ProgressDialog progressDialog = ProgressDialog.show(context, "", "Creating video slideshow");
try {
String videoCodec = videoCodecText.getText().toString();
if (videoCodec.trim().length() == 0) {
videoCodec = DEFAULT_VIDEO_CODEC;
}
Log.i(TAG, String.format("Creating slideshow using video codec: %s", videoCodec));
resourceToFile(R.drawable.colosseum, image1);
resourceToFile(R.drawable.pyramid, image2);
resourceToFile(R.drawable.tajmahal, image3);
@@ -164,7 +179,7 @@ public class SlideshowTabFragment extends Fragment {
};
handler.postDelayed(runnable, 1000);
String script = Slideshow.generateScript(context.getFilesDir(), image1, image2, image3, file.getName());
String script = Slideshow.generateScript(context.getFilesDir(), image1, image2, image3, file.getName(), videoCodec);
MainActivity.executeAsync(new Function<Integer, Void>() {
@Override
@@ -6,27 +6,65 @@
android:orientation="vertical"
tools:context=".SlideshowTabFragment">
<Button
android:id="@+id/slideshowCreateButton"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="30dp"
android:layout_marginStart="30dp"
android:layout_marginTop="30dp"
android:text="@string/button_create_slideshow_text" />
android:layout_height="100dp"
android:orientation="horizontal">
<Button
android:id="@+id/slideshowPlayButton"
<Button
android:id="@+id/slideshowCreateButton"
android:layout_width="140dp"
android:layout_height="wrap_content"
android:layout_marginBottom="15dp"
android:layout_marginEnd="15dp"
android:layout_marginStart="30dp"
android:layout_marginTop="30dp"
android:layout_weight="1"
android:text="@string/button_create_slideshow_text"
android:textAlignment="center" />
<Button
android:id="@+id/slideshowPlayButton"
android:layout_width="140dp"
android:layout_height="wrap_content"
android:layout_marginBottom="15dp"
android:layout_marginEnd="30dp"
android:layout_marginStart="15dp"
android:layout_marginTop="30dp"
android:layout_weight="1"
android:text="@string/button_play_slideshow_text"
android:textAlignment="center" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="30dp"
android:layout_marginStart="30dp"
android:layout_marginTop="30dp"
android:text="@string/button_play_slideshow_text" />
android:layout_weight="1"
android:orientation="horizontal">
<EditText
android:id="@+id/videoCodecText"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginBottom="30dp"
android:layout_marginEnd="50dp"
android:layout_marginStart="50dp"
android:layout_marginTop="10dp"
android:layout_weight="1"
android:ems="10"
android:hint="@string/video_text_hint"
android:inputType="text|textNoSuggestions"
android:selectAllOnFocus="false"
android:singleLine="true"
android:text="mpeg4"
android:textAlignment="center" />
</LinearLayout>
<VideoView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="30dp" />
android:layout_height="262dp"
android:layout_margin="30dp"
android:layout_weight="1" />
</LinearLayout>
@@ -7,4 +7,5 @@
<string name="button_play_slideshow_text">Play</string>
<string name="command_tab">Command</string>
<string name="slideshow_tab">Slideshow</string>
<string name="video_text_hint">Enter video codec</string>
</resources>
+8 -8
View File
@@ -246,13 +246,13 @@ get_cxxflags() {
get_common_linked_libraries() {
case $1 in
ffmpeg)
echo "-lc -lm -ldl -llog -L${ANDROID_NDK_ROOT}/toolchains/mobile-ffmpeg-${TOOLCHAIN}/sysroot/usr/lib -L${ANDROID_NDK_ROOT}/toolchains/mobile-ffmpeg-${TOOLCHAIN}/lib -L${ANDROID_NDK_ROOT}/sources/cxx-stl/llvm-libc++/lib"
echo "-lc -lm -ldl -llog -L${ANDROID_NDK_ROOT}/toolchains/mobile-ffmpeg-${TOOLCHAIN}/sysroot/usr/lib -L${ANDROID_NDK_ROOT}/toolchains/mobile-ffmpeg-${TOOLCHAIN}/lib -L${ANDROID_NDK_ROOT}/sources/cxx-stl/llvm-libc++/libs/${ANDROID_ARCH}"
;;
libvpx)
echo "-lc -lm -L${ANDROID_NDK_ROOT}/toolchains/mobile-ffmpeg-${TOOLCHAIN}/sysroot/usr/lib -L${ANDROID_NDK_ROOT}/toolchains/mobile-ffmpeg-${TOOLCHAIN}/lib -L${ANDROID_NDK_ROOT}/sources/cxx-stl/llvm-libc++/lib"
echo "-lc -lm -L${ANDROID_NDK_ROOT}/toolchains/mobile-ffmpeg-${TOOLCHAIN}/sysroot/usr/lib -L${ANDROID_NDK_ROOT}/toolchains/mobile-ffmpeg-${TOOLCHAIN}/lib -L${ANDROID_NDK_ROOT}/sources/cxx-stl/llvm-libc++/libs/${ANDROID_ARCH}"
;;
*)
echo "-lc -lm -ldl -llog -L${ANDROID_NDK_ROOT}/toolchains/mobile-ffmpeg-${TOOLCHAIN}/sysroot/usr/lib -L${ANDROID_NDK_ROOT}/toolchains/mobile-ffmpeg-${TOOLCHAIN}/lib -L${ANDROID_NDK_ROOT}/sources/cxx-stl/llvm-libc++/lib"
echo "-lc -lm -ldl -llog -L${ANDROID_NDK_ROOT}/toolchains/mobile-ffmpeg-${TOOLCHAIN}/sysroot/usr/lib -L${ANDROID_NDK_ROOT}/toolchains/mobile-ffmpeg-${TOOLCHAIN}/lib -L${ANDROID_NDK_ROOT}/sources/cxx-stl/llvm-libc++/libs/${ANDROID_ARCH}"
;;
esac
}
@@ -560,7 +560,7 @@ Description: a fast compressor/decompressor
Version: ${SNAPPY_VERSION}
Requires:
Libs: -L\${libdir} -lz -lstdc++
Libs: -L\${libdir} -lz -lc++_shared
Cflags: -I\${includedir}
EOF
}
@@ -660,9 +660,9 @@ download_gpl_library_source() {
case $1 in
x264)
GPL_LIB_URL="ftp://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20180606-2245-stable.tar.bz2"
GPL_LIB_FILE="x264-snapshot-20180606-2245-stable.tar.bz2"
GPL_LIB_ORIG_DIR="x264-snapshot-20180606-2245-stable"
GPL_LIB_URL="ftp://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20180815-2245-stable.tar.bz2"
GPL_LIB_FILE="x264-snapshot-20180815-2245-stable.tar.bz2"
GPL_LIB_ORIG_DIR="x264-snapshot-20180815-2245-stable"
GPL_LIB_DEST_DIR="x264"
;;
xvidcore)
@@ -930,4 +930,4 @@ library_is_installed() {
echo -e "INFO: ${LIB_NAME} library is already built and installed\n" >> ${BASEDIR}/build.log
echo 0
}
}
+1 -1
View File
@@ -63,6 +63,6 @@ export LIBPNG_LIBS="-L${BASEDIR}/prebuilt/android-$(get_target_build)/libpng/lib
make -j$(get_cpu_count) || exit 1
# CREATE PACKAGE CONFIG MANUALLY
create_freetype_package_config "22.0.16"
create_freetype_package_config "22.1.16"
make install || exit 1
+1 -1
View File
@@ -48,7 +48,7 @@ fi
--with-sysroot=${ANDROID_NDK_ROOT}/toolchains/mobile-ffmpeg-${TOOLCHAIN}/sysroot \
--enable-static \
--disable-shared \
--enable-assembly \
--disable-assembly \
--disable-fast-install \
--disable-maintainer-mode \
--host=${TARGET_HOST} || exit 1
+1 -1
View File
@@ -78,6 +78,6 @@ fi
make -j$(get_cpu_count) || exit 1
# CREATE PACKAGE CONFIG MANUALLY
create_gnutls_package_config "3.5.18"
create_gnutls_package_config "3.5.19"
make install || exit 1
+6 -6
View File
@@ -241,13 +241,13 @@ get_common_ldflags() {
get_arch_specific_ldflags() {
case ${ARCH} in
armv7)
echo "-arch armv7 -march=armv7 -mfpu=neon -mfloat-abi=softfp"
echo "-arch armv7 -march=armv7 -mfpu=neon -mfloat-abi=softfp -fembed-bitcode"
;;
armv7s)
echo "-arch armv7s -march=armv7s -mfpu=neon -mfloat-abi=softfp"
echo "-arch armv7s -march=armv7s -mfpu=neon -mfloat-abi=softfp -fembed-bitcode"
;;
arm64)
echo "-arch arm64 -march=armv8a"
echo "-arch arm64 -march=armv8a -fembed-bitcode"
;;
i386)
echo "-arch i386 -march=i386"
@@ -650,9 +650,9 @@ download_gpl_library_source() {
case $1 in
x264)
GPL_LIB_URL="ftp://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20180606-2245-stable.tar.bz2"
GPL_LIB_FILE="x264-snapshot-20180606-2245-stable.tar.bz2"
GPL_LIB_ORIG_DIR="x264-snapshot-20180606-2245-stable"
GPL_LIB_URL="ftp://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20180815-2245-stable.tar.bz2"
GPL_LIB_FILE="x264-snapshot-20180815-2245-stable.tar.bz2"
GPL_LIB_ORIG_DIR="x264-snapshot-20180815-2245-stable"
GPL_LIB_DEST_DIR="x264"
;;
xvidcore)
+1 -1
View File
@@ -68,6 +68,6 @@ export LIBPNG_LIBS="-L${BASEDIR}/prebuilt/ios-$(get_target_host)/libpng/lib"
make -j$(get_cpu_count) || exit 1
# CREATE PACKAGE CONFIG MANUALLY
create_freetype_package_config "22.0.16"
create_freetype_package_config "22.1.16"
make install || exit 1
+1 -11
View File
@@ -54,23 +54,13 @@ if [[ ${RECONF_gmp} -eq 1 ]]; then
autoreconf_library ${LIB_NAME}
fi
ASM_FLAGS=""
case ${ARCH} in
armv7 | armv7s | arm64)
ASM_FLAGS="--disable-assembly"
;;
i386 | x86-64)
ASM_FLAGS="--enable-assembly"
;;
esac
./configure \
--prefix=${BASEDIR}/prebuilt/ios-$(get_target_host)/${LIB_NAME} \
--with-pic \
--with-sysroot=${SDK_PATH} \
--enable-static \
--disable-shared \
${ASM_FLAGS} \
--disable-assembly \
--disable-fast-install \
--disable-maintainer-mode \
--host=${TARGET_HOST} || exit 1
+1 -1
View File
@@ -98,6 +98,6 @@ fi
make -j$(get_cpu_count) || exit 1
# CREATE PACKAGE CONFIG MANUALLY
create_gnutls_package_config "3.5.18"
create_gnutls_package_config "3.5.19"
make install || exit 1
+23
View File
@@ -47,8 +47,31 @@ if [[ ${RECONF_xvidcore} -eq 1 ]]; then
./bootstrap.sh
fi
ASM_FLAGS=""
case ${ARCH} in
armv7 | armv7s | arm64)
ASM_FLAGS=""
# REMOVING -flat_namespace OPTION FROM CONFIGURE TO FIX THE FOLLOWING ERROR
# ld: -flat_namespace and -bitcode_bundle (Xcode setting ENABLE_BITCODE=YES) cannot be used together
sed -i .tmp 's/ -flat_namespace//g' configure
# REMOVING -Wl,-read_only_relocs,suppress OPTION FROM CONFIGURE TO FIX THE FOLLOWING ERROR
# ld: -read_only_relocs and -bitcode_bundle (Xcode setting ENABLE_BITCODE=YES) cannot be used together
sed -i .tmp 's/-Wl,-read_only_relocs,suppress//g' configure
;;
i386)
ASM_FLAGS="--disable-assembly"
;;
x86-64)
ASM_FLAGS=""
;;
esac
./configure \
--prefix=${BASEDIR}/prebuilt/ios-$(get_target_host)/${LIB_NAME} \
${ASM_FLAGS} \
--host=${TARGET_HOST} || exit 1
make -j$(get_cpu_count) || exit 1
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg Android API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -257,7 +257,7 @@ Functions</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:52 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:38:43 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg Android API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -71,7 +71,7 @@ $(function() {
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:52 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:38:43 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
+2 -2
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg Android API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -299,7 +299,7 @@ Functions</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:52 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:38:43 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg Android API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -71,7 +71,7 @@ $(function() {
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:52 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:38:43 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
+2 -2
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg Android API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -438,7 +438,7 @@ Variables</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:52 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:38:43 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg Android API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -84,7 +84,7 @@ $(function() {
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:52 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:38:43 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg Android API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -74,7 +74,7 @@ $(function() {
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ab40bb25ef4ec0f35c70e84dbad36cfc2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/da5/mobileffmpeg_8h.html#ab40bb25ef4ec0f35c70e84dbad36cfc2">MOBILE_FFMPEG_VERSION</a>&#160;&#160;&#160;&quot;1.1&quot;</td></tr>
<tr class="memitem:ab40bb25ef4ec0f35c70e84dbad36cfc2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/da5/mobileffmpeg_8h.html#ab40bb25ef4ec0f35c70e84dbad36cfc2">MOBILE_FFMPEG_VERSION</a>&#160;&#160;&#160;&quot;1.2&quot;</td></tr>
<tr class="separator:ab40bb25ef4ec0f35c70e84dbad36cfc2"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
@@ -94,7 +94,7 @@ Functions</h2></td></tr>
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define MOBILE_FFMPEG_VERSION&#160;&#160;&#160;&quot;1.1&quot;</td>
<td class="memname">#define MOBILE_FFMPEG_VERSION&#160;&#160;&#160;&quot;1.2&quot;</td>
</tr>
</table>
</div><div class="memdoc">
@@ -232,7 +232,7 @@ Functions</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:52 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:38:43 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
File diff suppressed because one or more lines are too long
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg Android API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -204,7 +204,7 @@ Variables</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:52 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:38:43 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg Android API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -82,7 +82,7 @@ $(function() {
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:52 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:38:43 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg Android API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -326,7 +326,7 @@ Variables</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:52 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:38:43 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg Android API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -80,7 +80,7 @@ $(function() {
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:52 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:38:43 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg Android API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -97,7 +97,7 @@ Variables</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:52 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:38:43 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg Android API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -70,7 +70,7 @@ $(function() {
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:52 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:38:43 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
+2 -2
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg Android API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -80,7 +80,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:52 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:38:43 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
+2 -2
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg Android API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -213,7 +213,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:53 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:38:43 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
+2 -2
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg Android API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -109,7 +109,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:53 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:38:43 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
+2 -2
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg Android API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -102,7 +102,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:53 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:38:43 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
+2 -2
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg Android API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -106,7 +106,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:53 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:38:43 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
+2 -2
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg Android API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -69,7 +69,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:52 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:38:43 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
+2 -2
View File
@@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_162) on Sun Jun 03 20:26:24 EET 2018 -->
<!-- Generated by javadoc (1.8.0_172) on Thu Aug 16 11:39:04 EET 2018 -->
<title>All Classes (MobileFFmpeg)</title>
<meta name="date" content="2018-06-03">
<meta name="date" content="2018-08-16">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
+2 -2
View File
@@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_162) on Sun Jun 03 20:26:24 EET 2018 -->
<!-- Generated by javadoc (1.8.0_172) on Thu Aug 16 11:39:04 EET 2018 -->
<title>All Classes (MobileFFmpeg)</title>
<meta name="date" content="2018-06-03">
<meta name="date" content="2018-08-16">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
@@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_162) on Sun Jun 03 20:26:23 EET 2018 -->
<!-- Generated by javadoc (1.8.0_172) on Thu Aug 16 11:39:04 EET 2018 -->
<title>Abi (MobileFFmpeg)</title>
<meta name="date" content="2018-06-03">
<meta name="date" content="2018-08-16">
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../script.js"></script>
</head>
@@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_162) on Sun Jun 03 20:26:24 EET 2018 -->
<!-- Generated by javadoc (1.8.0_172) on Thu Aug 16 11:39:04 EET 2018 -->
<title>AbiDetect (MobileFFmpeg)</title>
<meta name="date" content="2018-06-03">
<meta name="date" content="2018-08-16">
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../script.js"></script>
</head>
@@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_162) on Sun Jun 03 20:26:24 EET 2018 -->
<!-- Generated by javadoc (1.8.0_172) on Thu Aug 16 11:39:04 EET 2018 -->
<title>FFmpeg (MobileFFmpeg)</title>
<meta name="date" content="2018-06-03">
<meta name="date" content="2018-08-16">
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../script.js"></script>
</head>
@@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_162) on Sun Jun 03 20:26:24 EET 2018 -->
<!-- Generated by javadoc (1.8.0_172) on Thu Aug 16 11:39:04 EET 2018 -->
<title>Log (MobileFFmpeg)</title>
<meta name="date" content="2018-06-03">
<meta name="date" content="2018-08-16">
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../script.js"></script>
</head>
@@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_162) on Sun Jun 03 20:26:24 EET 2018 -->
<!-- Generated by javadoc (1.8.0_172) on Thu Aug 16 11:39:04 EET 2018 -->
<title>com.arthenica.mobileffmpeg (MobileFFmpeg)</title>
<meta name="date" content="2018-06-03">
<meta name="date" content="2018-08-16">
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../script.js"></script>
</head>
@@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_162) on Sun Jun 03 20:26:24 EET 2018 -->
<!-- Generated by javadoc (1.8.0_172) on Thu Aug 16 11:39:04 EET 2018 -->
<title>com.arthenica.mobileffmpeg (MobileFFmpeg)</title>
<meta name="date" content="2018-06-03">
<meta name="date" content="2018-08-16">
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../script.js"></script>
</head>
@@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_162) on Sun Jun 03 20:26:24 EET 2018 -->
<!-- Generated by javadoc (1.8.0_172) on Thu Aug 16 11:39:04 EET 2018 -->
<title>com.arthenica.mobileffmpeg Class Hierarchy (MobileFFmpeg)</title>
<meta name="date" content="2018-06-03">
<meta name="date" content="2018-08-16">
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../script.js"></script>
</head>
+2 -2
View File
@@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_162) on Sun Jun 03 20:26:24 EET 2018 -->
<!-- Generated by javadoc (1.8.0_172) on Thu Aug 16 11:39:04 EET 2018 -->
<title>Constant Field Values (MobileFFmpeg)</title>
<meta name="date" content="2018-06-03">
<meta name="date" content="2018-08-16">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
+2 -2
View File
@@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_162) on Sun Jun 03 20:26:24 EET 2018 -->
<!-- Generated by javadoc (1.8.0_172) on Thu Aug 16 11:39:04 EET 2018 -->
<title>Deprecated List (MobileFFmpeg)</title>
<meta name="date" content="2018-06-03">
<meta name="date" content="2018-08-16">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
+2 -2
View File
@@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_162) on Sun Jun 03 20:26:24 EET 2018 -->
<!-- Generated by javadoc (1.8.0_172) on Thu Aug 16 11:39:04 EET 2018 -->
<title>API Help (MobileFFmpeg)</title>
<meta name="date" content="2018-06-03">
<meta name="date" content="2018-08-16">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
+2 -2
View File
@@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_162) on Sun Jun 03 20:26:24 EET 2018 -->
<!-- Generated by javadoc (1.8.0_172) on Thu Aug 16 11:39:04 EET 2018 -->
<title>Index (MobileFFmpeg)</title>
<meta name="date" content="2018-06-03">
<meta name="date" content="2018-08-16">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
+1 -1
View File
@@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_162) on Sun Jun 03 20:26:24 EET 2018 -->
<!-- Generated by javadoc (1.8.0_172) on Thu Aug 16 11:39:04 EET 2018 -->
<title>MobileFFmpeg</title>
<script type="text/javascript">
tmpTargetPage = "" + window.location.search;
+2 -2
View File
@@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_162) on Sun Jun 03 20:26:24 EET 2018 -->
<!-- Generated by javadoc (1.8.0_172) on Thu Aug 16 11:39:04 EET 2018 -->
<title>Class Hierarchy (MobileFFmpeg)</title>
<meta name="date" content="2018-06-03">
<meta name="date" content="2018-08-16">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
+57 -58
View File
@@ -6,65 +6,52 @@ MobileFFmpeg aims to provide FFmpeg on both mobile platforms with support for sh
- Includes build scripts and prebuilt libraries for both Android and IOS
- Supports 21 external libraries, 2 GPL libraries and 10 architectures in total
- Exposes FFmpeg capabilities both directly from FFmpeg libraries and through MobileFFmpeg wrapper library
- Includes cross-compile instructions for 32 open-source libraries including FFmpeg
- Includes cross-compile instructions for 32 open-source libraries
`expat`, `ffmpeg`, `fontconfig`, `freetype`, `fribidi`, `giflib`, `gmp`, `gnutls`, `kvazaar`, `lame`, `libass`, `libiconv`, `libilbc`, `libjpeg`, `libogg`, `libpng`, `libtheora`, `libuuid`, `libvorbis`, `libvpx`, `libwebp`, `libxml2`, `nettle`, `opencore-amr`, `opus`, `shine`, `snappy`, `speex`, `tiff`, `wavpack`, `x264`, `xvidcore`
- Prebuilt binaries under `JCenter` and `CocoaPods`
- Supports `arm-v7a`, `arm-v7a-neon`, `arm64-v8a`, `x86` and `x86_64` Android architectures
- Creates Android archive with .aar extension
- Supports `armv7`, `armv7s`, `arm64`, `i386` and `x86_64` IOS architectures
- Builds with `-fembed-bitcode` flag
- Creates IOS dynamic universal (fat) library
- Creates IOS dynamic framework for IOS 8 or later
- Licensed under LGPL 3.0, can be customized to support GPL v3.0
### 2. Architectures
- Android arm-v7a
- Android arm-v7a-neon
- Android arm64-v8a
- Android x86
- Android x86_64
- IOS armv7
- IOS armv7s
- IOS arm64
- IOS i386
- IOS x86_64
### 3. FFmpeg Support
Latest release (v1.1) of this project contains FFmpeg version 3.4.2 with support for the following external libraries.
- fontconfig
- freetype
- fribidi
- gmp
- gnutls
- kvazaar
- lame
- libass
- libiconv
- libilbc
- libtheora
- libvorbis
- libvpx
- libwebp
- libxml2
- opencore-amr
- opus
- shine
- snappy
- speex
- wavpack
- x264
- xvidcore
### 2. Using
Prebuilt libraries are available under [Github](https://github.com/tanersener/mobile-ffmpeg/releases), [JCenter](https://bintray.com/bintray/jcenter) and [CocoaPods](https://cocoapods.org)
### 4. Using
#### 4.1 Android
Import `mobile-ffmpeg-1.1.aar` into your project and use the following source code.
```
There are six different prebuilt packages. Below you can see which external libraries are enabled in each of them.
| | min | min-gpl | https | https-gpl | full | full-gpl |
| :----: | :----: | :----: | :----: | :----: | :----: | :----: |
| external <br/> libraries <br/> enabled | - | x264 <br/> xvidcore | gnutls | gnutls <br/> x264 <br/> xvidcore | fontconfig <br/> freetype <br/> fribidi <br/> gmp <br/> gnutls <br/> kvazaar <br/> lame <br/> libass <br/> libiconv <br/> libilbc <br/> libtheora <br/> libvorbis <br/> libvpx <br/> libwebp <br/> libxml2 <br/> opencore-amr <br/> opus <br/> shine <br/> snappy <br/> speex <br/> wavpack | fontconfig <br/> freetype <br/> fribidi <br/> gmp <br/> gnutls <br/> kvazaar <br/> lame <br/> libass <br/> libiconv <br/> libilbc <br/> libtheora <br/> libvorbis <br/> libvpx <br/> libwebp <br/> libxml2 <br/> opencore-amr <br/> opus <br/> shine <br/> snappy <br/> speex <br/> wavpack <br/> x264 <br/> xvidcore |
#### 2.1 Android
1. Add MobileFFmpeg dependency from `jcenter()`
```
dependencies {`
implementation 'com.arthenica:mobile-ffmpeg-full-gpl:1.1'
}
```
2. Use the following source code to execute commands.
```
import com.arthenica.mobileffmpeg.FFmpeg;
int rc = FFmpeg.execute("-i", "file1.mp4", "-c:v", "libxvid", "file1.avi");
Log.i(Log.TAG, String.format("Command execution %s.", (rc == 0?"completed successfully":"failed with rc=" + rc));
```
#### 4.2 IOS
Use MobileFFmpeg in your project by adding all IOS frameworks from `prebuilt/ios-framework` path or
by adding all `ffmpeg` and `mobile-ffmpeg` dylibs with headers from folders inside `prebuilt/ios-universal`.
```
#### 2.2 IOS
1. Add MobileFFmpeg pod to your `Podfile`
```
pod 'mobile-ffmpeg-full-gpl', '~> 1.1'
```
Then run the following Objective-C source code.
```
2. Create and execute commands using the following `Objective-C` example.
```
#import <mobileffmpeg/mobileffmpeg.h>
NSString* command = @"-i file1.mp4 -c:v libxvid file1.avi";
@@ -80,10 +67,15 @@ Then run the following Objective-C source code.
NSLog(@"Process exited with rc %d\n", result);
free(arguments);
```
```
### 3. Versions
### 5. Building
#### 5.1 Prerequisites
- `MobileFFmpeg v1.x` is the current stable, includes `FFmpeg v3.4.2`
- `MobileFFmpeg v2.x` is the next stable, includes `FFmpeg v4.0.1`
### 4. Building
#### 4.1 Prerequisites
1. Use your package manager (apt, yum, dnf, brew, etc.) to install the following packages.
```
@@ -101,39 +93,46 @@ Then run the following Objective-C source code.
- **Command Line Tools**
- **lipo** utility
#### 5.2 Build Scripts
#### 4.2 Build Scripts
Use `android.sh` and `ios.sh` to build MobileFFmpeg for each platform.
After a successful build, compiled FFmpeg and MobileFFmpeg libraries can be found under `prebuilt` directory.
##### 5.2.1 Android
##### 4.2.1 Android
```
export ANDROID_NDK_ROOT=<Android NDK Path>
./android.sh
```
##### 5.2.2 IOS
##### 4.2.2 IOS
```
./ios.sh
```
#### 5.3 GPL Support
From `v1.1` onwards it is possible to enable to GPL libraries `x264` and `xvidcore` from top level build scripts.
#### 4.3 GPL Support
Since`v1.1`, it is possible to enable to GPL licensed libraries `x264` and `xvidcore` from the top level build scripts.
Their source code is not included in the repository and downloaded when enabled.
### 6. Documentation
#### 4.4 External Libraries
`build` directory includes build scripts for external libraries. There are two scripts for each library, one for Android
and one for IOS. They include all options/flags used to cross-compile the libraries.
### 5. Documentation
A more detailed documentation is available at [Wiki](https://github.com/tanersener/mobile-ffmpeg/wiki).
### 7. License
### 6. License
This project is licensed under the LGPL v3.0. However, if source code is built using optional `--enable-gpl` flag or
prebuilt binaries with `-gpl` postfix are used then MobileFFmpeg is subject to the GPL v3.0 license.
Source code of FFmpeg and external libraries is included in compliance with their individual licenses.
`strip-frameworks.sh` script included and distributed is published under the Apache License version 2.0.
Digital assets used in test applications are published in the public domain.
Please visit [License](https://github.com/tanersener/mobile-ffmpeg/wiki/License) page for the details.
### 8. See Also
### 7. See Also
- [libav gas-preprocessor](https://github.com/libav/gas-preprocessor/raw/master/gas-preprocessor.pl)
- [FFmpeg API Documentation](https://ffmpeg.org/doxygen/3.4/index.html)
- [FFmpeg License and Legal Considerations](https://ffmpeg.org/legal.html)
+2 -2
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg IOS API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -102,7 +102,7 @@ Functions</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:51 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:39:32 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg IOS API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -71,7 +71,7 @@ $(function() {
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:51 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:39:32 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
+2 -2
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg IOS API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -273,7 +273,7 @@ Functions</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:51 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:39:32 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
+2 -2
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg IOS API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -75,7 +75,7 @@ $(function() {
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:51 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:39:32 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
+2 -2
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg IOS API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -97,7 +97,7 @@ Variables</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:51 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:39:32 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg IOS API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -71,7 +71,7 @@ $(function() {
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:51 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:39:32 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
+2 -2
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg IOS API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -221,7 +221,7 @@ Functions</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:51 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:39:32 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg IOS API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -71,7 +71,7 @@ $(function() {
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:51 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:39:32 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
+2 -2
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg IOS API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -287,7 +287,7 @@ Functions</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:51 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:39:32 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
+2 -2
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg IOS API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -74,7 +74,7 @@ $(function() {
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:51 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:39:32 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
+4 -4
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg IOS API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -74,7 +74,7 @@ $(function() {
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ab40bb25ef4ec0f35c70e84dbad36cfc2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/da5/mobileffmpeg_8h.html#ab40bb25ef4ec0f35c70e84dbad36cfc2">MOBILE_FFMPEG_VERSION</a>&#160;&#160;&#160;&quot;1.1&quot;</td></tr>
<tr class="memitem:ab40bb25ef4ec0f35c70e84dbad36cfc2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/da5/mobileffmpeg_8h.html#ab40bb25ef4ec0f35c70e84dbad36cfc2">MOBILE_FFMPEG_VERSION</a>&#160;&#160;&#160;&quot;1.2&quot;</td></tr>
<tr class="separator:ab40bb25ef4ec0f35c70e84dbad36cfc2"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
@@ -94,7 +94,7 @@ Functions</h2></td></tr>
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define MOBILE_FFMPEG_VERSION&#160;&#160;&#160;&quot;1.1&quot;</td>
<td class="memname">#define MOBILE_FFMPEG_VERSION&#160;&#160;&#160;&quot;1.2&quot;</td>
</tr>
</table>
</div><div class="memdoc">
@@ -191,7 +191,7 @@ Functions</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:51 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:39:32 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg IOS API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -198,7 +198,7 @@ Functions</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:51 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:39:32 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg IOS API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -76,7 +76,7 @@ $(function() {
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:51 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:39:32 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
+2 -2
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg IOS API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -97,7 +97,7 @@ Variables</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:51 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:39:32 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg IOS API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -70,7 +70,7 @@ $(function() {
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:51 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:39:32 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
+2 -2
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg IOS API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -81,7 +81,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:51 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:39:32 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
+2 -2
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg IOS API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -134,7 +134,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:51 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:39:32 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
+2 -2
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg IOS API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -91,7 +91,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:51 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:39:32 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
+2 -2
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg IOS API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -106,7 +106,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:51 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:39:32 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
+2 -2
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg IOS API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -71,7 +71,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:51 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:39:32 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
+2 -2
View File
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MobileFFmpeg IOS API
&#160;<span id="projectnumber">1.1</span>
&#160;<span id="projectnumber">1.2</span>
</div>
</td>
</tr>
@@ -69,7 +69,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Jun 15 2018 21:21:51 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Aug 16 2018 11:39:32 for MobileFFmpeg IOS API by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
+12
View File
@@ -597,16 +597,27 @@ if [[ ! -z ${TARGET_ARCH_LIST} ]]; then
cp -r ${MOBILE_FFMPEG_UNIVERSAL}/include/* ${FRAMEWORK_PATH}/Headers
cp ${FFMPEG_UNIVERSAL}/include/config.h ${FRAMEWORK_PATH}/Headers
cp ${MOBILE_FFMPEG_UNIVERSAL}/lib/libmobileffmpeg.dylib ${FRAMEWORK_PATH}/mobileffmpeg
cp ${BASEDIR}/tools/release/ios/strip-frameworks.sh ${FRAMEWORK_PATH}
# COPYING THE LICENSE
if [ ${GPL_ENABLED} == "yes" ]; then
# GPLv3.0
cp ${BASEDIR}/LICENSE.GPLv3 ${FRAMEWORK_PATH}/LICENSE >> ${BASEDIR}/build.log
# COPYING LICENSE
cp ${BASEDIR}/LICENSE.GPLv3 ${MOBILE_FFMPEG_UNIVERSAL}/LICENSE
cp ${BASEDIR}/LICENSE.GPLv3 ${FFMPEG_UNIVERSAL}/LICENSE
else
# LGPLv3.0
cp ${BASEDIR}/LICENSE.LGPLv3 ${FRAMEWORK_PATH}/LICENSE >> ${BASEDIR}/build.log
# COPYING LICENSE
cp ${BASEDIR}/LICENSE.LGPLv3 ${MOBILE_FFMPEG_UNIVERSAL}/LICENSE
cp ${BASEDIR}/LICENSE.LGPLv3 ${FFMPEG_UNIVERSAL}/LICENSE
fi
build_info_plist "${FRAMEWORK_PATH}/Info.plist" "mobileffmpeg" "com.arthenica.mobileffmpeg.MobileFFmpeg" "${MOBILE_FFMPEG_VERSION}" "${MOBILE_FFMPEG_VERSION}"
@@ -632,6 +643,7 @@ if [[ ! -z ${TARGET_ARCH_LIST} ]]; then
cp -r ${FFMPEG_UNIVERSAL}/include/${FFMPEG_LIB}/* ${FFMPEG_LIB_FRAMEWORK_PATH}/Headers
cp ${FFMPEG_UNIVERSAL}/lib/${FFMPEG_LIB}.dylib ${FFMPEG_LIB_FRAMEWORK_PATH}/${FFMPEG_LIB}
cp ${BASEDIR}/tools/release/ios/strip-frameworks.sh ${FFMPEG_LIB_FRAMEWORK_PATH}
# COPYING THE LICENSE
if [ ${GPL_ENABLED} == "yes" ]; then
+1 -1
View File
@@ -38,7 +38,7 @@ PROJECT_NAME = "MobileFFmpeg IOS API"
# could be handy for archiving the generated documentation or if some version
# control system is used.
PROJECT_NUMBER = 1.1
PROJECT_NUMBER = 1.2
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
+2 -2
View File
@@ -72,8 +72,8 @@ host_os=darwin
# The build system.
build_alias=
build=x86_64-apple-darwin17.6.0
build_os=darwin17.6.0
build=x86_64-apple-darwin17.7.0
build_os=darwin17.7.0
# A sed program that does not truncate output.
SED="/usr/bin/sed"
+1 -1
View File
@@ -27,7 +27,7 @@
#include "log.h"
/** Library version string */
#define MOBILE_FFMPEG_VERSION "1.1"
#define MOBILE_FFMPEG_VERSION "1.2"
const char *mobileffmpeg_get_ffmpeg_version(void);
+1
View File
@@ -0,0 +1 @@
/Pods/
@@ -7,22 +7,6 @@
objects = {
/* Begin PBXBuildFile section */
3479403220C5655D00A776FB /* libavdevice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3479402A20C5655100A776FB /* libavdevice.framework */; };
3479403320C5655D00A776FB /* libavformat.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3479402B20C5655300A776FB /* libavformat.framework */; };
3479403420C5655D00A776FB /* libavcodec.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3479402C20C5655500A776FB /* libavcodec.framework */; };
3479403520C5655D00A776FB /* libswscale.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3479402D20C5655700A776FB /* libswscale.framework */; };
3479403620C5655D00A776FB /* libavutil.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3479402E20C5655800A776FB /* libavutil.framework */; };
3479403720C5655D00A776FB /* libavfilter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3479402F20C5655A00A776FB /* libavfilter.framework */; };
3479403820C5655D00A776FB /* mobileffmpeg.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3479403020C5655B00A776FB /* mobileffmpeg.framework */; };
3479403920C5655D00A776FB /* libswresample.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3479403120C5655D00A776FB /* libswresample.framework */; };
3479403A20C565A800A776FB /* libavcodec.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3479402C20C5655500A776FB /* libavcodec.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
3479403B20C565A800A776FB /* libavdevice.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3479402A20C5655100A776FB /* libavdevice.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
3479403C20C565A800A776FB /* libavfilter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3479402F20C5655A00A776FB /* libavfilter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
3479403D20C565A800A776FB /* libavformat.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3479402B20C5655300A776FB /* libavformat.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
3479403E20C565A800A776FB /* libavutil.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3479402E20C5655800A776FB /* libavutil.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
3479403F20C565A800A776FB /* libswresample.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3479403120C5655D00A776FB /* libswresample.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
3479404020C565A800A776FB /* libswscale.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3479402D20C5655700A776FB /* libswscale.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
3479404120C565A800A776FB /* mobileffmpeg.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3479403020C5655B00A776FB /* mobileffmpeg.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
348439ED20B2EFAF001A3990 /* pyramid.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 348439EA20B2EFAF001A3990 /* pyramid.jpg */; };
348439EE20B2EFAF001A3990 /* tajmahal.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 348439EB20B2EFAF001A3990 /* tajmahal.jpg */; };
348439EF20B2EFAF001A3990 /* colosseum.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 348439EC20B2EFAF001A3990 /* colosseum.jpg */; };
@@ -33,6 +17,7 @@
34FAE220209F7DDE005CE2AE /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 34FAE21F209F7DDE005CE2AE /* Assets.xcassets */; };
34FAE223209F7DDE005CE2AE /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 34FAE221209F7DDE005CE2AE /* LaunchScreen.storyboard */; };
34FAE226209F7DDE005CE2AE /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 34FAE225209F7DDE005CE2AE /* main.m */; };
FA337C903C5EA110F9919AE2 /* Pods_MobileFFmpegTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 27AA9C6108BA4D26A0F4E3D4 /* Pods_MobileFFmpegTest.framework */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
@@ -42,14 +27,6 @@
dstPath = "";
dstSubfolderSpec = 10;
files = (
3479403A20C565A800A776FB /* libavcodec.framework in Embed Frameworks */,
3479403B20C565A800A776FB /* libavdevice.framework in Embed Frameworks */,
3479403C20C565A800A776FB /* libavfilter.framework in Embed Frameworks */,
3479403D20C565A800A776FB /* libavformat.framework in Embed Frameworks */,
3479403E20C565A800A776FB /* libavutil.framework in Embed Frameworks */,
3479403F20C565A800A776FB /* libswresample.framework in Embed Frameworks */,
3479404020C565A800A776FB /* libswscale.framework in Embed Frameworks */,
3479404120C565A800A776FB /* mobileffmpeg.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
@@ -57,14 +34,8 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
3479402A20C5655100A776FB /* libavdevice.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = libavdevice.framework; sourceTree = "<group>"; };
3479402B20C5655300A776FB /* libavformat.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = libavformat.framework; sourceTree = "<group>"; };
3479402C20C5655500A776FB /* libavcodec.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = libavcodec.framework; sourceTree = "<group>"; };
3479402D20C5655700A776FB /* libswscale.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = libswscale.framework; sourceTree = "<group>"; };
3479402E20C5655800A776FB /* libavutil.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = libavutil.framework; sourceTree = "<group>"; };
3479402F20C5655A00A776FB /* libavfilter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = libavfilter.framework; sourceTree = "<group>"; };
3479403020C5655B00A776FB /* mobileffmpeg.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = mobileffmpeg.framework; sourceTree = "<group>"; };
3479403120C5655D00A776FB /* libswresample.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = libswresample.framework; sourceTree = "<group>"; };
27AA9C6108BA4D26A0F4E3D4 /* Pods_MobileFFmpegTest.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MobileFFmpegTest.framework; sourceTree = BUILT_PRODUCTS_DIR; };
2BFE82E682D140E75F5869B7 /* Pods-MobileFFmpegTest.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MobileFFmpegTest.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MobileFFmpegTest/Pods-MobileFFmpegTest.debug.xcconfig"; sourceTree = "<group>"; };
348439EA20B2EFAF001A3990 /* pyramid.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = pyramid.jpg; sourceTree = "<group>"; };
348439EB20B2EFAF001A3990 /* tajmahal.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = tajmahal.jpg; sourceTree = "<group>"; };
348439EC20B2EFAF001A3990 /* colosseum.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = colosseum.jpg; sourceTree = "<group>"; };
@@ -80,6 +51,7 @@
34FAE222209F7DDE005CE2AE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
34FAE224209F7DDE005CE2AE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
34FAE225209F7DDE005CE2AE /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
BC33E3221F0CAEC74E55993E /* Pods-MobileFFmpegTest.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MobileFFmpegTest.release.xcconfig"; path = "Pods/Target Support Files/Pods-MobileFFmpegTest/Pods-MobileFFmpegTest.release.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -87,14 +59,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
3479403620C5655D00A776FB /* libavutil.framework in Frameworks */,
3479403820C5655D00A776FB /* mobileffmpeg.framework in Frameworks */,
3479403720C5655D00A776FB /* libavfilter.framework in Frameworks */,
3479403420C5655D00A776FB /* libavcodec.framework in Frameworks */,
3479403520C5655D00A776FB /* libswscale.framework in Frameworks */,
3479403920C5655D00A776FB /* libswresample.framework in Frameworks */,
3479403320C5655D00A776FB /* libavformat.framework in Frameworks */,
3479403220C5655D00A776FB /* libavdevice.framework in Frameworks */,
FA337C903C5EA110F9919AE2 /* Pods_MobileFFmpegTest.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -114,14 +79,7 @@
3498DC65209F7F1C005F5883 /* Frameworks */ = {
isa = PBXGroup;
children = (
3479402C20C5655500A776FB /* libavcodec.framework */,
3479402A20C5655100A776FB /* libavdevice.framework */,
3479402F20C5655A00A776FB /* libavfilter.framework */,
3479402B20C5655300A776FB /* libavformat.framework */,
3479402E20C5655800A776FB /* libavutil.framework */,
3479403120C5655D00A776FB /* libswresample.framework */,
3479402D20C5655700A776FB /* libswscale.framework */,
3479403020C5655B00A776FB /* mobileffmpeg.framework */,
27AA9C6108BA4D26A0F4E3D4 /* Pods_MobileFFmpegTest.framework */,
);
name = Frameworks;
sourceTree = "<group>";
@@ -133,6 +91,7 @@
34FAE212209F7DDD005CE2AE /* MobileFFmpegTest */,
34FAE211209F7DDD005CE2AE /* Products */,
3498DC65209F7F1C005F5883 /* Frameworks */,
429F8E77B10AE032C315C907 /* Pods */,
);
sourceTree = "<group>";
};
@@ -162,6 +121,15 @@
path = MobileFFmpegTest;
sourceTree = "<group>";
};
429F8E77B10AE032C315C907 /* Pods */ = {
isa = PBXGroup;
children = (
2BFE82E682D140E75F5869B7 /* Pods-MobileFFmpegTest.debug.xcconfig */,
BC33E3221F0CAEC74E55993E /* Pods-MobileFFmpegTest.release.xcconfig */,
);
name = Pods;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
@@ -179,11 +147,13 @@
isa = PBXNativeTarget;
buildConfigurationList = 34FAE229209F7DDE005CE2AE /* Build configuration list for PBXNativeTarget "MobileFFmpegTest" */;
buildPhases = (
F00AE8F7E2E5692C197ECA58 /* [CP] Check Pods Manifest.lock */,
34FAE20C209F7DDD005CE2AE /* Sources */,
34FAE20D209F7DDD005CE2AE /* Frameworks */,
34FAE20E209F7DDD005CE2AE /* Resources */,
34F9744020A1A200004A1F68 /* Headers */,
3452D8CF20A373640045E6B0 /* Embed Frameworks */,
F462F1992A3850771AAB84E6 /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
@@ -243,6 +213,59 @@
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
F00AE8F7E2E5692C197ECA58 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-MobileFFmpegTest-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
F462F1992A3850771AAB84E6 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-MobileFFmpegTest/Pods-MobileFFmpegTest-frameworks.sh",
"${PODS_ROOT}/mobile-ffmpeg-full/mobileffmpeg.framework",
"${PODS_ROOT}/mobile-ffmpeg-full/libavcodec.framework",
"${PODS_ROOT}/mobile-ffmpeg-full/libavdevice.framework",
"${PODS_ROOT}/mobile-ffmpeg-full/libavfilter.framework",
"${PODS_ROOT}/mobile-ffmpeg-full/libavformat.framework",
"${PODS_ROOT}/mobile-ffmpeg-full/libavutil.framework",
"${PODS_ROOT}/mobile-ffmpeg-full/libswresample.framework",
"${PODS_ROOT}/mobile-ffmpeg-full/libswscale.framework",
);
name = "[CP] Embed Pods Frameworks";
outputPaths = (
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/mobileffmpeg.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/libavcodec.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/libavdevice.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/libavfilter.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/libavformat.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/libavutil.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/libswresample.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/libswscale.framework",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MobileFFmpegTest/Pods-MobileFFmpegTest-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
34FAE20C209F7DDD005CE2AE /* Sources */ = {
isa = PBXSourcesBuildPhase;
@@ -395,6 +418,7 @@
};
34FAE22A209F7DDE005CE2AE /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 2BFE82E682D140E75F5869B7 /* Pods-MobileFFmpegTest.debug.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
@@ -410,7 +434,7 @@
LD_RUNPATH_SEARCH_PATHS = "@loader_path/Frameworks";
LIBRARY_SEARCH_PATHS = "$(inherited)";
OTHER_CODE_SIGN_FLAGS = "--deep";
OTHER_LDFLAGS = "";
OTHER_LDFLAGS = "$(inherited)";
PRODUCT_BUNDLE_IDENTIFIER = com.arthenica.mobileffmpeg.test.MobileFFmpegTest;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
@@ -420,6 +444,7 @@
};
34FAE22B209F7DDE005CE2AE /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = BC33E3221F0CAEC74E55993E /* Pods-MobileFFmpegTest.release.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
@@ -435,7 +460,7 @@
LD_RUNPATH_SEARCH_PATHS = "@loader_path/Frameworks";
LIBRARY_SEARCH_PATHS = "$(inherited)";
OTHER_CODE_SIGN_FLAGS = "--deep";
OTHER_LDFLAGS = "";
OTHER_LDFLAGS = "$(inherited)";
PRODUCT_BUNDLE_IDENTIFIER = com.arthenica.mobileffmpeg.test.MobileFFmpegTest;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0940"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "34FAE20F209F7DDD005CE2AE"
BuildableName = "MobileFFmpegTest.app"
BlueprintName = "MobileFFmpegTest"
ReferencedContainer = "container:MobileFFmpegTest.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "34FAE20F209F7DDD005CE2AE"
BuildableName = "MobileFFmpegTest.app"
BlueprintName = "MobileFFmpegTest"
ReferencedContainer = "container:MobileFFmpegTest.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "34FAE20F209F7DDD005CE2AE"
BuildableName = "MobileFFmpegTest.app"
BlueprintName = "MobileFFmpegTest"
ReferencedContainer = "container:MobileFFmpegTest.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "34FAE20F209F7DDD005CE2AE"
BuildableName = "MobileFFmpegTest.app"
BlueprintName = "MobileFFmpegTest"
ReferencedContainer = "container:MobileFFmpegTest.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
@@ -7,7 +7,15 @@
<key>MobileFFmpegTest.xcscheme</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
<integer>2</integer>
</dict>
</dict>
<key>SuppressBuildableAutocreation</key>
<dict>
<key>34FAE20F209F7DDD005CE2AE</key>
<dict>
<key>primary</key>
<true/>
</dict>
</dict>
</dict>
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:MobileFFmpegTest.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace>
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14109" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14113" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
@@ -18,15 +18,18 @@
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="MobileFFMpegTest" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aQQ-J3-9Lk">
<rect key="frame" x="66" y="302" width="243" height="63"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="MobileFFMpegTest" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aQQ-J3-9Lk">
<rect key="frame" x="72" y="318" width="231" height="31.5"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="26"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="aQQ-J3-9Lk" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="VDk-Q7-CIX"/>
<constraint firstItem="aQQ-J3-9Lk" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="a55-Us-sA1"/>
</constraints>
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
</view>
</viewController>
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14109" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="49e-Tb-3d3">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14113" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="49e-Tb-3d3">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
@@ -18,10 +18,13 @@
<rect key="frame" x="0.0" y="0.0" width="375" height="618"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="3Wr-qB-Pyg">
<rect key="frame" x="150" y="167" width="74" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="3Wr-qB-Pyg">
<rect key="frame" x="147.5" y="162" width="80" height="32"/>
<color key="backgroundColor" red="0.94117647058823528" green="0.94117647058823528" blue="0.95983767649706664" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstAttribute="height" constant="32" id="Vbs-En-ncY"/>
<constraint firstAttribute="width" constant="80" id="YcO-s3-cGD"/>
</constraints>
<state key="normal" title="RUN">
<color key="titleColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</state>
@@ -32,10 +35,13 @@
<action selector="runAction:" destination="9pv-A4-QxB" eventType="touchUpInside" id="cfm-2r-5CD"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0OP-Pr-kwN">
<rect key="frame" x="120" y="234" width="134" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0OP-Pr-kwN">
<rect key="frame" x="122.5" y="224" width="130" height="32"/>
<color key="backgroundColor" red="0.94117647058823528" green="0.94117647058823528" blue="0.96078431372549" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" constant="130" id="85g-G9-Rc6"/>
<constraint firstAttribute="height" constant="32" id="Qzz-p8-cYE"/>
</constraints>
<state key="normal" title="RUN ASYNC">
<color key="titleColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</state>
@@ -48,24 +54,27 @@
<action selector="runAsyncAction:" destination="9pv-A4-QxB" eventType="touchUpInside" id="Bg4-6K-Mnn"/>
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="MobileFFmpegTest" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4qP-Cg-LeP">
<rect key="frame" x="0.0" y="20" width="375" height="48"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="MobileFFmpegTest" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4qP-Cg-LeP">
<rect key="frame" x="0.0" y="20" width="375" height="50"/>
<color key="backgroundColor" red="0.95686274509803915" green="0.40784313725490196" blue="0.25882352941176467" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="e4q-j1-NcS"/>
</constraints>
<fontDescription key="fontDescription" type="boldSystem" pointSize="18"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
</label>
<textField opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Enter command" textAlignment="natural" minimumFontSize="17" clearButtonMode="always" translatesAutoresizingMaskIntoConstraints="NO" id="WEh-8G-EBV">
<rect key="frame" x="16" y="103" width="343" height="30"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Enter command" textAlignment="natural" minimumFontSize="17" clearButtonMode="always" translatesAutoresizingMaskIntoConstraints="NO" id="WEh-8G-EBV">
<rect key="frame" x="20" y="100" width="335" height="32"/>
<constraints>
<constraint firstAttribute="height" constant="32" id="0at-Ak-O3K"/>
</constraints>
<nil key="textColor"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits" autocorrectionType="no"/>
</textField>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" fixedFrame="YES" editable="NO" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="gqc-19-yb3">
<rect key="frame" x="16" y="311" width="343" height="206"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" editable="NO" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="gqc-19-yb3">
<rect key="frame" x="30" y="286" width="315" height="292"/>
<color key="backgroundColor" red="0.94117647058823528" green="0.94117647058823528" blue="0.96078431372549022" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<accessibility key="accessibilityConfiguration" hint="Run output"/>
<fontDescription key="fontDescription" type="system" pointSize="15"/>
@@ -73,6 +82,23 @@
</textView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="4qP-Cg-LeP" firstAttribute="leading" secondItem="PQr-Ze-W5v" secondAttribute="leading" id="7gl-9L-D3r"/>
<constraint firstItem="3Wr-qB-Pyg" firstAttribute="top" secondItem="WEh-8G-EBV" secondAttribute="bottom" constant="30" id="Bv6-sf-pUr"/>
<constraint firstItem="WEh-8G-EBV" firstAttribute="leading" secondItem="PQr-Ze-W5v" secondAttribute="leading" constant="20" id="E3u-aH-GtI"/>
<constraint firstItem="0OP-Pr-kwN" firstAttribute="top" secondItem="3Wr-qB-Pyg" secondAttribute="bottom" constant="30" id="GkN-Nr-WQa"/>
<constraint firstItem="PQr-Ze-W5v" firstAttribute="trailing" secondItem="gqc-19-yb3" secondAttribute="trailing" constant="30" id="Mys-Te-4uL"/>
<constraint firstItem="PQr-Ze-W5v" firstAttribute="trailing" secondItem="WEh-8G-EBV" secondAttribute="trailing" constant="20" id="PIj-KG-iAW"/>
<constraint firstItem="WEh-8G-EBV" firstAttribute="centerX" secondItem="tsR-hK-woN" secondAttribute="centerX" id="PRt-sv-OK2"/>
<constraint firstItem="PQr-Ze-W5v" firstAttribute="trailing" secondItem="4qP-Cg-LeP" secondAttribute="trailing" id="VHT-1r-TBX"/>
<constraint firstItem="WEh-8G-EBV" firstAttribute="top" secondItem="4qP-Cg-LeP" secondAttribute="bottom" constant="30" id="Zvk-1n-ESj"/>
<constraint firstItem="gqc-19-yb3" firstAttribute="top" secondItem="0OP-Pr-kwN" secondAttribute="bottom" constant="30" id="cDP-cF-D1P"/>
<constraint firstItem="0OP-Pr-kwN" firstAttribute="centerX" secondItem="tsR-hK-woN" secondAttribute="centerX" id="lmB-Bh-3Nn"/>
<constraint firstItem="3Wr-qB-Pyg" firstAttribute="centerX" secondItem="tsR-hK-woN" secondAttribute="centerX" id="m2k-Ls-BYK"/>
<constraint firstItem="4qP-Cg-LeP" firstAttribute="top" secondItem="PQr-Ze-W5v" secondAttribute="top" id="mZt-c4-Cxz"/>
<constraint firstItem="gqc-19-yb3" firstAttribute="leading" secondItem="PQr-Ze-W5v" secondAttribute="leading" constant="30" id="vS2-Q3-ZQt"/>
<constraint firstItem="PQr-Ze-W5v" firstAttribute="bottom" secondItem="gqc-19-yb3" secondAttribute="bottom" constant="40" id="z6D-kO-sGE"/>
</constraints>
<viewLayoutGuide key="safeArea" id="PQr-Ze-W5v"/>
</view>
<tabBarItem key="tabBarItem" title="COMMAND" id="acW-dT-cKf">
@@ -95,34 +121,23 @@
<rect key="frame" x="0.0" y="0.0" width="375" height="618"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="MobileFFmpegTest" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qjq-ds-G4r">
<rect key="frame" x="0.0" y="20" width="375" height="48"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="MobileFFmpegTest" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qjq-ds-G4r">
<rect key="frame" x="0.0" y="20" width="375" height="50"/>
<color key="backgroundColor" red="0.95686274510000002" green="0.40784313729999999" blue="0.25882352939999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="xbI-E1-tqj"/>
</constraints>
<fontDescription key="fontDescription" type="boldSystem" pointSize="18"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="z7Q-Af-rbI">
<rect key="frame" x="143" y="106" width="88" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.94117647058823528" green="0.94117647058823528" blue="0.96078431372549022" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<state key="normal" title="CREATE">
<color key="titleColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</state>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="5"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<action selector="createClicked:" destination="8rJ-Kc-sve" eventType="touchUpInside" id="j6x-48-z6z"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="V9L-Av-PAz">
<rect key="frame" x="148" y="180" width="78" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="V9L-Av-PAz">
<rect key="frame" x="152.5" y="162" width="70" height="32"/>
<color key="backgroundColor" red="0.94117647058823528" green="0.94117647058823528" blue="0.96078431372549022" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="32" id="QWb-N2-T0Y"/>
<constraint firstAttribute="width" constant="70" id="b3j-fF-W6Z"/>
</constraints>
<state key="normal" title="PLAY">
<color key="titleColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</state>
@@ -135,16 +150,59 @@
<action selector="playClicked:" destination="8rJ-Kc-sve" eventType="touchUpInside" id="p3A-ql-6av"/>
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="suo-Ve-dkM">
<rect key="frame" x="16" y="305" width="343" height="164"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="suo-Ve-dkM">
<rect key="frame" x="20" y="284" width="335" height="304"/>
<color key="backgroundColor" red="0.94117647058823528" green="0.94117647058823528" blue="0.96078431372549022" alpha="1" colorSpace="calibratedRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="z7Q-Af-rbI">
<rect key="frame" x="147.5" y="100" width="80" height="32"/>
<color key="backgroundColor" red="0.94117647058823528" green="0.94117647058823528" blue="0.96078431372549022" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" constant="80" id="6F7-uT-WDk"/>
<constraint firstAttribute="height" constant="32" id="NXC-JW-nHT"/>
</constraints>
<state key="normal" title="CREATE">
<color key="titleColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</state>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="5"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<action selector="createClicked:" destination="8rJ-Kc-sve" eventType="touchUpInside" id="j6x-48-z6z"/>
</connections>
</button>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Enter video codec" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="ddh-VM-R4H">
<rect key="frame" x="107.5" y="224" width="160" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="160" id="X9y-aG-itF"/>
<constraint firstAttribute="height" constant="30" id="ofm-IT-iAC"/>
</constraints>
<nil key="textColor"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
</textField>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="z7Q-Af-rbI" firstAttribute="top" secondItem="qjq-ds-G4r" secondAttribute="bottom" constant="30" id="7T7-6j-sV2"/>
<constraint firstItem="V9L-Av-PAz" firstAttribute="top" secondItem="z7Q-Af-rbI" secondAttribute="bottom" constant="30" id="AKe-ol-KwW"/>
<constraint firstItem="O1u-W8-tvY" firstAttribute="bottom" secondItem="suo-Ve-dkM" secondAttribute="bottom" constant="30" id="BIg-Tm-yph"/>
<constraint firstItem="ddh-VM-R4H" firstAttribute="top" secondItem="V9L-Av-PAz" secondAttribute="bottom" constant="30" id="EN5-Od-oG6"/>
<constraint firstItem="qjq-ds-G4r" firstAttribute="leading" secondItem="O1u-W8-tvY" secondAttribute="leading" id="Sny-N7-eZP"/>
<constraint firstItem="suo-Ve-dkM" firstAttribute="leading" secondItem="O1u-W8-tvY" secondAttribute="leading" constant="20" id="cng-gg-fht"/>
<constraint firstItem="ddh-VM-R4H" firstAttribute="centerX" secondItem="QS5-Rx-YEW" secondAttribute="centerX" id="f5w-1J-1gC"/>
<constraint firstItem="O1u-W8-tvY" firstAttribute="trailing" secondItem="suo-Ve-dkM" secondAttribute="trailing" constant="20" id="gXh-zm-iTa"/>
<constraint firstItem="qjq-ds-G4r" firstAttribute="trailing" secondItem="O1u-W8-tvY" secondAttribute="trailing" id="lSL-yl-ipy"/>
<constraint firstItem="V9L-Av-PAz" firstAttribute="centerX" secondItem="QS5-Rx-YEW" secondAttribute="centerX" id="mKc-7z-fCq"/>
<constraint firstItem="suo-Ve-dkM" firstAttribute="top" secondItem="ddh-VM-R4H" secondAttribute="bottom" constant="30" id="mzH-9U-qVa"/>
<constraint firstItem="z7Q-Af-rbI" firstAttribute="centerX" secondItem="QS5-Rx-YEW" secondAttribute="centerX" id="sTb-cb-Z80"/>
<constraint firstItem="qjq-ds-G4r" firstAttribute="top" secondItem="O1u-W8-tvY" secondAttribute="top" id="xBN-XP-eBu"/>
</constraints>
<viewLayoutGuide key="safeArea" id="O1u-W8-tvY"/>
</view>
<tabBarItem key="tabBarItem" title="SLIDESHOW" id="cPa-gy-q4n" userLabel="Slideshow">
@@ -152,12 +210,13 @@
</tabBarItem>
<connections>
<outlet property="playButton" destination="V9L-Av-PAz" id="1Yf-9P-e7v"/>
<outlet property="videoCodecText" destination="ddh-VM-R4H" id="5MA-AT-gYX"/>
<outlet property="videoPlayerBox" destination="suo-Ve-dkM" id="Cff-E9-QYS"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="4Nw-L8-lE0" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="749.60000000000002" y="371.96401799100454"/>
<point key="canvasLocation" x="749.27536231884062" y="371.73913043478262"/>
</scene>
<!--Tab Bar Controller-->
<scene sceneID="yl2-sM-qoP">
@@ -24,10 +24,13 @@
#import <AVKit/AVKit.h>
#import <mobileffmpeg/mobileffmpeg.h>
NSString * const DEFAULT_VIDEO_CODEC = @"mpeg4";
@interface SecondViewController ()
@property (strong, nonatomic) IBOutlet UILabel *videoPlayerBox;
@property (strong, nonatomic) IBOutlet UIButton *playButton;
@property (strong, nonatomic) IBOutlet UITextField *videoCodecText;
@end
@@ -39,6 +42,9 @@
- (void)viewDidLoad {
[super viewDidLoad];
// SET DEFAULT TEXT
[[self videoCodecText] setText: DEFAULT_VIDEO_CODEC];
// DISABLE PLAY BUTTON
[[self playButton] setEnabled:FALSE];
@@ -73,8 +79,14 @@
}
[[NSFileManager defaultManager] removeItemAtPath:videoFile error:NULL];
NSString *videoCodec = [[self videoCodecText] text];
if (videoCodec == nil || [videoCodec length] == 0) {
videoCodec = DEFAULT_VIDEO_CODEC;
}
NSString* slideshowCommand = [self generateSlideshowScript:image1:image2:image3:videoFile];
NSLog(@"Creating slideshow using video codec: %@\n", videoCodec);
NSString* slideshowCommand = [self generateSlideshowScript:image1:image2:image3:videoFile:videoCodec];
[self loadProgressDialog:@"Creating video slideshow\n\n"];
@@ -126,7 +138,7 @@
[player play];
}
- (NSString *) generateSlideshowScript:(NSString *)image1 :(NSString *)image2 :(NSString *)image3 :(NSString *)videoFile {
- (NSString *) generateSlideshowScript:(NSString *)image1 :(NSString *)image2 :(NSString *)image3 :(NSString *)videoFile :(NSString *)videoCodec {
return [NSString stringWithFormat:
@"-loop 1 -i %@ \
-loop 1 -i %@ \
@@ -144,7 +156,7 @@
[stream2starting][stream1ending]blend=all_expr=\'if(gte(X,(W/2)*T/1)*lte(X,W-(W/2)*T/1),B,A)\':shortest=1[stream2blended];\
[stream3starting][stream2ending]blend=all_expr=\'if(gte(X,(W/2)*T/1)*lte(X,W-(W/2)*T/1),B,A)\':shortest=1[stream3blended];\
[stream1overlaid][stream2blended][stream2overlaid][stream3blended][stream3overlaid]concat=n=5:v=1:a=0,format=yuv420p[video] \
-map [video] -vsync 2 -async 1 -c:v mpeg4 -r 30 %@", image1, image2, image3, videoFile];
-map [video] -vsync 2 -async 1 -c:v %@ -r 30 %@", image1, image2, image3, videoCodec, videoFile];
}
- (void)loadProgressDialog:(NSString*) dialogMessage {
+7
View File
@@ -0,0 +1,7 @@
platform :ios, '8.0'
use_frameworks!
target "MobileFFmpegTest" do
pod 'mobile-ffmpeg-full', '~> 1.2'
end
+16
View File
@@ -0,0 +1,16 @@
PODS:
- mobile-ffmpeg-full (1.2)
DEPENDENCIES:
- mobile-ffmpeg-full (~> 1.2)
SPEC REPOS:
https://github.com/cocoapods/specs.git:
- mobile-ffmpeg-full
SPEC CHECKSUMS:
mobile-ffmpeg-full: ec899dc6429f90601ccadf6dbe555a920807f231
PODFILE CHECKSUM: e71a0e0713180c5304f217b8a1ccf7dcf3c06e16
COCOAPODS: 1.6.0.beta.1
+6 -6
View File
@@ -3,25 +3,25 @@
The cmake based buildsystem for expat works on Windows (cygwin, mingw, Visual
Studio) and should work on all other platform cmake supports.
Assuming ~/expat-2.2.5 is the source directory of expat, add a subdirectory
Assuming ~/expat-2.2.6 is the source directory of expat, add a subdirectory
build and change into that directory:
~/expat-2.2.5$ mkdir build && cd build
~/expat-2.2.5/build$
~/expat-2.2.6$ mkdir build && cd build
~/expat-2.2.6/build$
From that directory, call cmake first, then call make, make test and
make install in the usual way:
~/expat-2.2.5/build$ cmake ..
~/expat-2.2.6/build$ cmake ..
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
....
-- Configuring done
-- Generating done
-- Build files have been written to: /home/patrick/expat-2.2.5/build
-- Build files have been written to: /home/patrick/expat-2.2.6/build
If you want to specify the install location for your files, append
-DCMAKE_INSTALL_PREFIX=/your/install/path to the cmake call.
~/expat-2.2.5/build$ make && make test && make install
~/expat-2.2.6/build$ make && make test && make install
Scanning dependencies of target expat
[ 5%] Building C object CMakeFiles/expat.dir/lib/xmlparse.c.o
[ 11%] Building C object CMakeFiles/expat.dir/lib/xmlrole.c.o

Some files were not shown because too many files have changed in this diff Show More