Compare commits

...

50 Commits

Author SHA1 Message Date
Taner Sener c293dd421b Using released versions in test-apps. 2018-11-09 15:49:11 +03:00
Taner Sener d46a5e1e66 ios release scripts updated. also fixes #41 for android vorbis builds. 2018-11-09 13:38:10 +03:00
Taner Sener a32f0067d4 ffmpeg patched for https://trac.ffmpeg.org/ticket/7433 2018-11-09 00:53:43 +03:00
Taner Sener aead62b215 new minor release: v2.2 2018-11-08 23:32:23 +03:00
Taner Sener b20376a785 Build file versions updated 2018-11-08 23:16:48 +03:00
Taner Sener e0b4aacf92 new version: libaom v1.0.0-898-g716f2896c 2018-11-08 23:11:46 +03:00
Taner Sener c461ea76d3 new version: x264-snapshot-20181107 2018-11-08 23:08:28 +03:00
Taner Sener ff1b1c4935 new version: ffmpeg v4.0.3 2018-11-03 22:16:09 +03:00
Taner Sener 28e52ed774 new version: opus v1.3 2018-11-03 22:16:08 +03:00
Taner Sener b68ffc3053 updated: android release package information 2018-10-15 23:07:39 +03:00
Taner Sener 1336eab42f updated: ios release package information 2018-10-14 12:18:44 +03:00
Taner Sener e01989639d fixed: ios x265 v2.9 build errors 2018-10-14 11:41:09 +03:00
Taner Sener 1b041324b4 fixed; android x265 v2.9 linking errors 2018-10-14 10:10:08 +03:00
Taner Sener df3faba968 using x265 v2.9 2018-10-13 23:15:33 +03:00
Taner Sener 1b3b2c3c2f android native version bump 2018-09-29 18:17:13 +03:00
Taner Sener d9d31985df android test-app version bump 2018-09-29 18:09:12 +03:00
Taner Sener 322877b3c3 versions in fontconfig build scripts updated. 2018-09-29 18:08:49 +03:00
Taner Sener 9d414b9790 Reverted "using ffmpeg n4.1-dev-1349-g179ed2d2e0 version"
This reverts commit 318efe8a5d.
2018-09-29 18:02:18 +03:00
Taner Sener 270fc3f1ad ignored files updated for fontconfig 2018-09-29 14:09:29 +03:00
Taner Sener d2ef2da94b fontconfig patch applied for https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/109 2018-09-29 13:28:41 +03:00
Taner Sener f92c5288b9 fontconfig v2.13.1 2018-09-29 12:17:28 +03:00
Taner Sener 248a6cba7a update release version 2018-09-29 12:17:27 +03:00
Taner Sener 318efe8a5d using ffmpeg n4.1-dev-1349-g179ed2d2e0 version 2018-09-29 11:18:26 +03:00
Taner Sener ea9abafaa7 preparing next minor release 2018-09-29 10:41:21 +03:00
Taner Sener 9ede8768f5 README, misleading Xcode support information corrected 2018-09-29 09:44:05 +03:00
Taner Sener 1fcf112ed0 Minor changes for Xcode 7.3.1 compatibility, fixes #28 2018-09-29 09:31:30 +03:00
Taner Sener ace472d20c Using custom Xcode for building. 2018-09-27 12:34:39 +03:00
Taner Sener 36fa6b0028 New keys added in IOS framework Info.plist file 2018-09-26 13:41:18 +03:00
Taner Sener 29ca9e37e7 Fixed IOS dynamic framework generation, issue #27 2018-09-25 13:55:19 +03:00
Taner Sener f0a65465e9 README updated. 2018-09-22 23:08:42 +03:00
Taner Sener 4808e4c686 ios static universal libraries fixed. 2018-09-22 22:17:34 +03:00
Taner Sener 41f55f415e Updated README. 2018-09-20 19:48:00 +03:00
Taner Sener 3716c4623b Removed MinimumOSVersion from ios Info.plist 2018-09-19 15:35:45 +03:00
Taner Sener 7ccf16f130 libvpx minimum ios version set to 7.0 in order to build library on IOS 12. 2018-09-19 14:45:32 +03:00
Taner Sener 2cc3a9b0db Building static ios libraries enabled. 2018-09-19 13:48:44 +03:00
Taner Sener 21c071bebe API documentation update. 2018-09-16 20:27:52 +03:00
Taner Sener caa4ac1f9b Using latest released versions. 2018-09-16 20:21:04 +03:00
Taner Sener 09caf1e997 Android test application uses the latest published version. 2018-09-16 19:32:50 +03:00
Taner Sener b3109cf276 Preparing v2.1.1 patch for android. 2018-09-16 17:22:23 +03:00
Taner Sener 4bd20725a8 Fixed armeabi-v7a-neon ABI for issue #24 2018-09-16 15:57:31 +03:00
Taner Sener 0a127d4370 armeabi-v7a ABI load log fixed. 2018-09-16 13:59:11 +03:00
Taner Sener ba7afe784d Redirection documentation updated. 2018-09-11 12:12:02 +03:00
Taner Sener e73224d560 Updated setFontDirectory usage example 2018-09-11 07:35:12 +03:00
Taner Sener 4d544fa7ca @rpath paths fixed for frameworks in ios.sh. 2018-09-07 22:23:14 +03:00
Taner Sener d500463706 Universal binary creation fixed. 2018-09-07 20:51:53 +03:00
Taner Sener a3b95188fb Updating version to v2.2 2018-09-07 16:05:51 +03:00
Taner Sener 7d27ab7be5 Merging documentation updates from master. 2018-09-07 15:42:24 +03:00
Taner Sener 7681389a9c Updated IOS test-app to v2.1.1. 2018-09-07 14:05:49 +03:00
Taner Sener e85b08e7c2 preparing IOS v2.1.1 patch, fixes #22. 2018-09-07 12:56:37 +03:00
Taner Sener d298c9ac3b burning subtitles for ios arm architectures fixed. 2018-09-07 09:52:47 +03:00
1651 changed files with 53268 additions and 23703 deletions
+19 -14
View File
@@ -1,11 +1,11 @@
# 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) ](https://bintray.com/tanersener/maven/mobile-ffmpeg-full/_latestVersion)
# 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) ![GitHub release](https://img.shields.io/badge/release-v2.2-blue.svg) ![Bintray](https://img.shields.io/badge/bintray-v2.2-blue.svg) ![CocoaPods](https://img.shields.io/badge/pod-v2.2-blue.svg)
FFmpeg for Android and IOS
<img src="https://github.com/tanersener/mobile-ffmpeg/blob/dev-v2.x/docs/mobile-ffmpeg-logo-v4.png" width="240">
<img src="https://github.com/tanersener/mobile-ffmpeg/blob/dev-v2.x/docs/assets/mobile-ffmpeg-logo-v4.png" width="240">
### 1. Features
- Use prebuilt binaries available under `Github`/`JCenter`/`CocoaPods` or build your own version with external libraries you need
- Use binaries available at `Github`/`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
@@ -17,7 +17,7 @@ FFmpeg for Android and IOS
`vid.stab`, `x264`, `x265`, `xvidcore`
- Exposes FFmpeg capabilities both directly from FFmpeg libraries and through MobileFFmpeg wrapper library
- Exposes FFmpeg capabilities both from FFmpeg libraries and through MobileFFmpeg wrapper library
- Creates shared libraries (.so for Android, .dylib for IOS)
- Includes cross-compile instructions for 38 open-source libraries
@@ -31,18 +31,19 @@ FFmpeg for Android and IOS
- Supports `armv7`, `armv7s`, `arm64`, `i386` and `x86_64` architectures
- `ARC` enabled library
- Built with `-fembed-bitcode` flag
- Creates IOS dynamic universal (fat) library
- Creates IOS shared/dynamic universal (fat) library
- Creates IOS static universal (fat) library
- Creates IOS dynamic framework for IOS 8 or later
- Supports Xcode 7.3.1 or later
### 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)
Prebuilt libraries are available at [Github](https://github.com/tanersener/mobile-ffmpeg/releases), [JCenter](https://bintray.com/bintray/jcenter) and [CocoaPods](https://cocoapods.org). Refer to [Using IOS Universal Binaries](https://github.com/tanersener/mobile-ffmpeg/wiki/Using-IOS-Universal-Binaries) guide to import IOS universal binaries released at [Github](https://github.com/tanersener/mobile-ffmpeg/releases).
There are eight different prebuilt packages. Below you can see which external libraries are enabled in each of them.
| min | min-gpl | https | https-gpl | audio | video | full | full-gpl |
| :----: | :----: | :----: | :----: | :----: | :----: | :----: | :----: |
| - | vid.stab<sup>3</sup> <br/> x264<sup>1</sup> <br/> x265<sup>3</sup> <br/> xvidcore<sup>1</sup> | gnutls | gnutls <br/> vid.stab<sup>3</sup> <br/> x264<sup>1</sup> <br/> x265<sup>3</sup> <br/> xvidcore<sup>1</sup> | chromaprint<sup>3</sup> <br/> lame <br/> libilbc<sup>1</sup> <br/> libvorbis <br/> opencore-amr <br/> opus<sup>1</sup> <br/> shine <br/> soxr<sup>2</sup> <br/> speex <br/> wavpack | fontconfig <br/> freetype <br/> fribidi <br/> kvazaar <br/> libaom<sup>2</sup> <br/> libass <br/> libiconv <br/> libtheora <br/> libvpx <br/> snappy<sup>1</sup> | chromaprint<sup>3</sup> <br/> fontconfig <br/> freetype <br/> fribidi <br/> gmp <br/> gnutls <br/> kvazaar <br/> lame <br/> libaom<sup>2</sup> <br/> libass <br/> libiconv <br/> libilbc<sup>1</sup> <br/> libtheora <br/> libvorbis <br/> libvpx <br/> libwebp <br/> libxml2 <br/> opencore-amr <br/> opus<sup>1</sup> <br/> shine <br/> snappy<sup>1</sup> <br/> soxr<sup>2</sup> <br/> speex <br/> wavpack | chromaprint<sup>3</sup> <br/> fontconfig <br/> freetype <br/> fribidi <br/> gmp <br/> gnutls <br/> kvazaar <br/> lame <br/> libaom<sup>2</sup> <br/> libass <br/> libiconv <br/> libilbc<sup>1</sup> <br/> libtheora <br/> libvorbis <br/> libvpx <br/> libwebp <br/> libxml2 <br/> opencore-amr <br/> opus<sup>1</sup> <br/> shine <br/> snappy<sup>1</sup> <br/> soxr<sup>2</sup> <br/> speex <br/> vid.stab<sup>3</sup> <br/> wavpack <br/> x264<sup>1</sup> <br/> x265<sup>3</sup> <br/> xvidcore<sup>1</sup> |
| [ ![Download](https://api.bintray.com/packages/tanersener/maven/mobile-ffmpeg-min/images/download.svg) ](https://bintray.com/tanersener/maven/mobile-ffmpeg-min/_latestVersion) | [ ![Download](https://api.bintray.com/packages/tanersener/maven/mobile-ffmpeg-min-gpl/images/download.svg) ](https://bintray.com/tanersener/maven/mobile-ffmpeg-min-gpl/_latestVersion) | [ ![Download](https://api.bintray.com/packages/tanersener/maven/mobile-ffmpeg-https/images/download.svg) ](https://bintray.com/tanersener/maven/mobile-ffmpeg-https/_latestVersion) | [ ![Download](https://api.bintray.com/packages/tanersener/maven/mobile-ffmpeg-https-gpl/images/download.svg) ](https://bintray.com/tanersener/maven/mobile-ffmpeg-https-gpl/_latestVersion) | [ ![Download](https://api.bintray.com/packages/tanersener/maven/mobile-ffmpeg-audio/images/download.svg) ](https://bintray.com/tanersener/maven/mobile-ffmpeg-audio/_latestVersion) | [ ![Download](https://api.bintray.com/packages/tanersener/maven/mobile-ffmpeg-video/images/download.svg) ](https://bintray.com/tanersener/maven/mobile-ffmpeg-video/_latestVersion) | [ ![Download](https://api.bintray.com/packages/tanersener/maven/mobile-ffmpeg-full/images/download.svg) ](https://bintray.com/tanersener/maven/mobile-ffmpeg-full/_latestVersion) | [ ![Download](https://api.bintray.com/packages/tanersener/maven/mobile-ffmpeg-full-gpl/images/download.svg) ](https://bintray.com/tanersener/maven/mobile-ffmpeg-full-gpl/_latestVersion) |
<sup>1</sup> - Supported since `v1.1`
@@ -54,7 +55,7 @@ There are eight different prebuilt packages. Below you can see which external li
1. Add MobileFFmpeg dependency from `jcenter()`
```
dependencies {`
implementation 'com.arthenica:mobile-ffmpeg-full:2.1'
implementation 'com.arthenica:mobile-ffmpeg-full:2.2'
}
```
@@ -103,13 +104,13 @@ There are eight different prebuilt packages. Below you can see which external li
7. Register custom fonts directory.
```
Config.setFontDirectory(this, "fonts", Collections.EMPTY_MAP);
Config.setFontDirectory(this, "<folder with fonts>", Collections.EMPTY_MAP);
```
#### 2.2 IOS
1. Add MobileFFmpeg pod to your `Podfile`
```
pod 'mobile-ffmpeg-full', '~> 2.1'
pod 'mobile-ffmpeg-full', '~> 2.2'
```
2. Create and execute commands.
@@ -161,18 +162,22 @@ There are eight different prebuilt packages. Below you can see which external li
7. Register custom fonts directory.
```
[MobileFFmpegConfig setFontDirectory:@"fonts" with:nil];
[MobileFFmpegConfig setFontDirectory:@"<folder with fonts>" with:nil];
```
#### 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. Both applications are identical and supports command execution, video encoding, accessing https, encoding audio, burning subtitles and video stabilization.
There is an Android test application under the `android/test-app` folder and an IOS test application, which requires
`Xcode 9.x` or later, under the `ios/test-app` folder. Both applications are identical and supports command
execution, video encoding, accessing https, encoding audio, burning subtitles and video stabilization.
<img src="https://github.com/tanersener/mobile-ffmpeg/blob/master/docs/assets/ios_test_app.gif" width="240">
### 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`
- `MobileFFmpeg v2.x` is the current stable, includes `FFmpeg v4.0.3`
### 4. Building
#### 4.1 Prerequisites
@@ -192,7 +197,7 @@ Please visit [Android Prerequisites](https://github.com/tanersener/mobile-ffmpeg
3. IOS builds need these extra packages and tools.
- **IOS SDK 7.0.x** or later
- **Xcode 8.x** or later
- **Xcode 7.3.1** or later
- **Command Line Tools**
#### 4.2 Build Scripts
+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 = 2.1
PROJECT_NUMBER = 2.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 21
versionName "2.1"
versionCode 22
versionName "2.2"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
project.archivesBaseName = "mobile-ffmpeg"
}
+543 -23
View File
@@ -17,24 +17,441 @@
* along with MobileFFmpeg. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* CHANGES 09.2018
* --------------------------------------------------------
* - Merged with mobileffmpeg_config
*
* CHANGES 08.2018
* --------------------------------------------------------
* - Copied methods with avutil_log_ prefix from libavutil/log.c
*/
#include <pthread.h>
#include "libavutil/bprint.h"
#include "mobileffmpeg.h"
#include "fftools_ffmpeg.h"
#include "mobileffmpeg.h"
/** Callback data structure */
struct CallbackData {
int type; // 1 (log callback) or 2 (statistics callback)
int logLevel; // log level
char *logData; // log data
int statisticsFrameNumber; // statistics frame number
float statisticsFps; // statistics fps
float statisticsQuality; // statistics quality
int64_t statisticsSize; // statistics size
int statisticsTime; // statistics time
double statisticsBitrate; // statistics bitrate
double statisticsSpeed; // statistics speed
struct CallbackData *next;
};
/** Redirection control variables */
pthread_mutex_t lockMutex;
pthread_mutex_t monitorMutex;
pthread_cond_t monitorCondition;
pthread_t callbackThread;
int redirectionEnabled;
struct CallbackData *callbackDataHead;
struct CallbackData *callbackDataTail;
/** Global reference to the virtual machine running */
static JavaVM *globalVm;
/** Global reference of Config class in Java */
static jclass configClass;
/** Global reference of log redirection method in Java */
static jmethodID logMethod;
/** Global reference of statistics redirection method in Java */
static jmethodID statisticsMethod;
/** Full name of the Config class */
const char *configClassName = "com/arthenica/mobileffmpeg/Config";
/** Prototypes of native functions defined by Config class. */
JNINativeMethod configMethods[] = {
{"enableNativeRedirection", "()V", (void*) Java_com_arthenica_mobileffmpeg_Config_enableNativeRedirection},
{"disableNativeRedirection", "()V", (void*) Java_com_arthenica_mobileffmpeg_Config_disableNativeRedirection},
{"setNativeLogLevel", "(I)V", (void*) Java_com_arthenica_mobileffmpeg_Config_setNativeLogLevel},
{"getNativeLogLevel", "()I", (void*) Java_com_arthenica_mobileffmpeg_Config_getNativeLogLevel}
};
/** Prototypes of native functions defined by FFmpeg class. */
JNINativeMethod ffmpegMethods[] = {
{"getNativeFFmpegVersion", "()Ljava/lang/String;", (void*) Java_com_arthenica_mobileffmpeg_Config_getNativeFFmpegVersion},
{"getNativeVersion", "()Ljava/lang/String;", (void*) Java_com_arthenica_mobileffmpeg_Config_getNativeVersion},
{"nativeExecute", "([Ljava/lang/String;)I", (void*) Java_com_arthenica_mobileffmpeg_Config_nativeExecute},
{"nativeCancel", "()V", (void*) Java_com_arthenica_mobileffmpeg_Config_nativeCancel}
};
/** Forward declaration for function defined in fftools_ffmpeg.c */
int execute(int argc, char **argv);
/** Full name of the FFmpeg class */
const char *ffmpegClassName = "com/arthenica/mobileffmpeg/FFmpeg";
/** DEFINES LINE SIZE USED FOR LOGGING */
#define LOG_LINE_SIZE 1024
/** Prototypes of native functions defined by FFmpeg class. */
JNINativeMethod ffmpegMethods[] = {
{"getFFmpegVersion", "()Ljava/lang/String;", (void*) Java_com_arthenica_mobileffmpeg_FFmpeg_getFFmpegVersion},
{"getVersion", "()Ljava/lang/String;", (void*) Java_com_arthenica_mobileffmpeg_FFmpeg_getVersion},
{"execute", "([Ljava/lang/String;)I", (void*) Java_com_arthenica_mobileffmpeg_FFmpeg_execute}
};
static const char *avutil_log_get_level_str(int level) {
switch (level) {
case AV_LOG_QUIET:
return "quiet";
case AV_LOG_DEBUG:
return "debug";
case AV_LOG_VERBOSE:
return "verbose";
case AV_LOG_INFO:
return "info";
case AV_LOG_WARNING:
return "warning";
case AV_LOG_ERROR:
return "error";
case AV_LOG_FATAL:
return "fatal";
case AV_LOG_PANIC:
return "panic";
default:
return "";
}
}
static void avutil_log_format_line(void *avcl, int level, const char *fmt, va_list vl, AVBPrint part[4], int *print_prefix) {
int flags = av_log_get_flags();
AVClass* avc = avcl ? *(AVClass **) avcl : NULL;
av_bprint_init(part+0, 0, 1);
av_bprint_init(part+1, 0, 1);
av_bprint_init(part+2, 0, 1);
av_bprint_init(part+3, 0, 65536);
if (*print_prefix && avc) {
if (avc->parent_log_context_offset) {
AVClass** parent = *(AVClass ***) (((uint8_t *) avcl) +
avc->parent_log_context_offset);
if (parent && *parent) {
av_bprintf(part+0, "[%s @ %p] ",
(*parent)->item_name(parent), parent);
}
}
av_bprintf(part+1, "[%s @ %p] ",
avc->item_name(avcl), avcl);
}
if (*print_prefix && (level > AV_LOG_QUIET) && (flags & AV_LOG_PRINT_LEVEL))
av_bprintf(part+2, "[%s] ", avutil_log_get_level_str(level));
av_vbprintf(part+3, fmt, vl);
if(*part[0].str || *part[1].str || *part[2].str || *part[3].str) {
char lastc = part[3].len && part[3].len <= part[3].size ? part[3].str[part[3].len - 1] : 0;
*print_prefix = lastc == '\n' || lastc == '\r';
}
}
static void avutil_log_sanitize(uint8_t *line) {
while(*line){
if(*line < 0x08 || (*line > 0x0D && *line < 0x20))
*line='?';
line++;
}
}
void mutexInit() {
pthread_mutexattr_t attributes;
pthread_mutexattr_init(&attributes);
pthread_mutexattr_settype(&attributes, PTHREAD_MUTEX_RECURSIVE_NP);
pthread_mutex_init(&lockMutex, &attributes);
pthread_mutexattr_destroy(&attributes);
}
void monitorInit() {
pthread_mutexattr_t attributes;
pthread_mutexattr_init(&attributes);
pthread_mutexattr_settype(&attributes, PTHREAD_MUTEX_RECURSIVE_NP);
pthread_condattr_t cattributes;
pthread_condattr_init(&cattributes);
pthread_condattr_setpshared(&cattributes, PTHREAD_PROCESS_PRIVATE);
pthread_mutex_init(&monitorMutex, &attributes);
pthread_mutexattr_destroy(&attributes);
pthread_cond_init(&monitorCondition, &cattributes);
pthread_condattr_destroy(&cattributes);
}
void mutexUnInit() {
pthread_mutex_destroy(&lockMutex);
}
void monitorUnInit() {
pthread_mutex_destroy(&monitorMutex);
pthread_cond_destroy(&monitorCondition);
}
void mutexLock() {
pthread_mutex_lock(&lockMutex);
}
void mutexUnlock() {
pthread_mutex_unlock(&lockMutex);
}
void monitorWait(int milliSeconds) {
struct timeval tp;
struct timespec ts;
int rc;
rc = gettimeofday(&tp, NULL);
if (rc) {
return;
}
ts.tv_sec = tp.tv_sec;
ts.tv_nsec = tp.tv_usec * 1000;
ts.tv_sec += milliSeconds / 1000;
ts.tv_nsec += (milliSeconds % 1000)*1000000;
pthread_mutex_lock(&monitorMutex);
pthread_cond_timedwait(&monitorCondition, &monitorMutex, &ts);
pthread_mutex_unlock(&monitorMutex);
}
void monitorNotify() {
pthread_mutex_lock(&monitorMutex);
pthread_cond_signal(&monitorCondition);
pthread_mutex_unlock(&monitorMutex);
}
/**
* Adds log data to the end of callback data list.
*/
void logCallbackDataAdd(int level, const char *data) {
// CREATE DATA STRUCT FIRST
struct CallbackData *newData = (struct CallbackData*)malloc(sizeof(struct CallbackData));
newData->type = 1;
newData->logLevel = level;
size_t dataSize = strlen(data) + 1;
newData->logData = (char*)malloc(dataSize);
memcpy(newData->logData, data, dataSize);
newData->next = NULL;
mutexLock();
// INSERT IT TO THE END OF QUEUE
if (callbackDataTail == NULL) {
callbackDataTail = newData;
if (callbackDataHead != NULL) {
LOGE("Dangling callback data head detected. This can cause memory leak.");
} else {
callbackDataHead = newData;
}
} else {
struct CallbackData *oldTail = callbackDataTail;
oldTail->next = newData;
callbackDataTail = newData;
}
mutexUnlock();
monitorNotify();
}
/**
* Adds statistics data to the end of callback data list.
*/
void statisticsCallbackDataAdd(int frameNumber, float fps, float quality, int64_t size, int time, double bitrate, double speed) {
// CREATE DATA STRUCT FIRST
struct CallbackData *newData = (struct CallbackData*)malloc(sizeof(struct CallbackData));
newData->type = 2;
newData->statisticsFrameNumber = frameNumber;
newData->statisticsFps = fps;
newData->statisticsQuality = quality;
newData->statisticsSize = size;
newData->statisticsTime = time;
newData->statisticsBitrate = bitrate;
newData->statisticsSpeed = speed;
newData->next = NULL;
mutexLock();
// INSERT IT TO THE END OF QUEUE
if (callbackDataTail == NULL) {
callbackDataTail = newData;
if (callbackDataHead != NULL) {
LOGE("Dangling callback data head detected. This can cause memory leak.");
} else {
callbackDataHead = newData;
}
} else {
struct CallbackData *oldTail = callbackDataTail;
oldTail->next = newData;
callbackDataTail = newData;
}
mutexUnlock();
monitorNotify();
}
/**
* Removes head of callback data list.
*/
struct CallbackData *callbackDataRemove() {
struct CallbackData *currentData;
mutexLock();
if (callbackDataHead == NULL) {
currentData = NULL;
} else {
currentData = callbackDataHead;
struct CallbackData *nextHead = currentData->next;
if (nextHead == NULL) {
if (callbackDataHead != callbackDataTail) {
LOGE("Head and tail callback data pointers do not match for single callback data element. This can cause memory leak.");
} else {
callbackDataTail = NULL;
}
callbackDataHead = NULL;
} else {
callbackDataHead = nextHead;
}
}
mutexUnlock();
return currentData;
}
/**
* Callback function for FFmpeg logs.
*
* \param pointer to AVClass struct
* \param level
* \param format
* \param arguments
*/
void mobileffmpeg_log_callback_function(void *ptr, int level, const char* format, va_list vargs) {
char line[LOG_LINE_SIZE];
AVBPrint part[4];
int print_prefix = 1;
if (level >= 0) {
level &= 0xff;
}
avutil_log_format_line(ptr, level, format, vargs, part, &print_prefix);
snprintf(line, sizeof(line), "%s%s%s%s", part[0].str, part[1].str, part[2].str, part[3].str);
avutil_log_sanitize(part[0].str);
logCallbackDataAdd(level, part[0].str);
avutil_log_sanitize(part[1].str);
logCallbackDataAdd(level, part[1].str);
avutil_log_sanitize(part[2].str);
logCallbackDataAdd(level, part[2].str);
avutil_log_sanitize(part[3].str);
logCallbackDataAdd(level, part[3].str);
av_bprint_finalize(part+3, NULL);
}
/**
* Callback function for FFmpeg statistics.
*
* \param frameNumber last processed frame number
* \param fps frames processed per second
* \param quality quality of the output stream (video only)
* \param size size in bytes
* \param time processed output duration
* \param bitrate output bit rate in kbits/s
* \param speed processing speed = processed duration / operation duration
*/
void mobileffmpeg_statistics_callback_function(int frameNumber, float fps, float quality, int64_t size, int time, double bitrate, double speed) {
statisticsCallbackDataAdd(frameNumber, fps, quality, size, time, bitrate, speed);
}
/**
* Forwards callback messages to Java classes.
*/
void *callbackThreadFunction() {
JNIEnv *env;
jint getEnvRc = (*globalVm)->GetEnv(globalVm, (void**) &env, JNI_VERSION_1_6);
if (getEnvRc != JNI_OK) {
if (getEnvRc != JNI_EDETACHED) {
LOGE("Callback thread failed to GetEnv for class %s with rc %d.\n", configClassName, getEnvRc);
return NULL;
}
if ((*globalVm)->AttachCurrentThread(globalVm, &env, NULL) != 0) {
LOGE("Callback thread failed to AttachCurrentThread for class %s.\n", configClassName);
return NULL;
}
}
LOGD("Callback thread started.\n");
while(redirectionEnabled) {
struct CallbackData *callbackData = callbackDataRemove();
if (callbackData != NULL) {
if (callbackData->type == 1) {
// LOG CALLBACK
size_t size = strlen(callbackData->logData);
jbyteArray byteArray = (jbyteArray) (*env)->NewByteArray(env, size);
(*env)->SetByteArrayRegion(env, byteArray, 0, size, (jbyte *)callbackData->logData);
(*env)->CallStaticVoidMethod(env, configClass, logMethod, callbackData->logLevel, byteArray);
(*env)->DeleteLocalRef(env, byteArray);
// CLEAN LOG DATA
free(callbackData->logData);
} else {
// STATISTICS CALLBACK
(*env)->CallStaticVoidMethod(env, configClass, statisticsMethod,
callbackData->statisticsFrameNumber, callbackData->statisticsFps,
callbackData->statisticsQuality, callbackData->statisticsSize,
callbackData->statisticsTime, callbackData->statisticsBitrate,
callbackData->statisticsSpeed);
}
// CLEAN STRUCT
callbackData->next = NULL;
free(callbackData);
} else {
monitorWait(100);
}
}
(*globalVm)->DetachCurrentThread(globalVm);
LOGD("Callback thread stopped.\n");
return NULL;
}
/**
* Called when 'mobileffmpeg' native library is loaded.
@@ -46,55 +463,158 @@ JNINativeMethod ffmpegMethods[] = {
jint JNI_OnLoad(JavaVM *vm, void *reserved) {
JNIEnv *env;
if ((*vm)->GetEnv(vm, (void**)(&env), JNI_VERSION_1_6) != JNI_OK) {
LOGE("OnLoad failed to GetEnv for class %s.\n", ffmpegClassName);
LOGE("OnLoad failed to GetEnv for class %s.\n", configClassName);
return JNI_FALSE;
}
jclass ffmpegClass = (*env)->FindClass(env, ffmpegClassName);
if (ffmpegClass == NULL) {
LOGE("OnLoad failed to FindClass %s.\n", ffmpegClassName);
jclass localConfigClass = (*env)->FindClass(env, configClassName);
if (localConfigClass == NULL) {
LOGE("OnLoad failed to FindClass %s.\n", configClassName);
return JNI_FALSE;
}
if ((*env)->RegisterNatives(env, ffmpegClass, ffmpegMethods, 3) < 0) {
LOGE("OnLoad failed to RegisterNatives for class %s.\n", ffmpegClassName);
if ((*env)->RegisterNatives(env, localConfigClass, ffmpegMethods, 4) < 0) {
LOGE("OnLoad failed to RegisterNatives for class %s.\n", configClassName);
return JNI_FALSE;
}
if ((*env)->RegisterNatives(env, localConfigClass, configMethods, 4) < 0) {
LOGE("OnLoad failed to RegisterNatives for class %s.\n", configClassName);
return JNI_FALSE;
}
(*env)->GetJavaVM(env, &globalVm);
logMethod = (*env)->GetStaticMethodID(env, localConfigClass, "log", "(I[B)V");
if (logMethod == NULL) {
LOGE("OnLoad thread failed to GetMethodID for %s.\n", "log");
(*globalVm)->DetachCurrentThread(globalVm);
return JNI_FALSE;
}
statisticsMethod = (*env)->GetStaticMethodID(env, localConfigClass, "statistics", "(IFFJIDD)V");
if (logMethod == NULL) {
LOGE("OnLoad thread failed to GetMethodID for %s.\n", "statistics");
(*globalVm)->DetachCurrentThread(globalVm);
return JNI_FALSE;
}
configClass = (jclass) ((*env)->NewGlobalRef(env, localConfigClass));
redirectionEnabled = 0;
callbackDataHead = NULL;
callbackDataTail = NULL;
mutexInit();
monitorInit();
return JNI_VERSION_1_6;
}
/**
* Returns FFmpeg version bundled within the library.
* Sets log level.
*
* \param env pointer to native method interface
* \param reference to the class on which this method is invoked
* \param log level
*/
JNIEXPORT void JNICALL Java_com_arthenica_mobileffmpeg_Config_setNativeLogLevel(JNIEnv *env, jclass object, jint level) {
av_log_set_level(level);
}
/**
* Returns current log level.
*
* \param env pointer to native method interface
* \param reference to the class on which this method is invoked
*/
JNIEXPORT jint JNICALL Java_com_arthenica_mobileffmpeg_Config_getNativeLogLevel(JNIEnv *env, jclass object) {
return av_log_get_level();
}
/**
* Enables log and statistics redirection.
*
* \param env pointer to native method interface
* \param reference to the class on which this method is invoked
*/
JNIEXPORT void JNICALL Java_com_arthenica_mobileffmpeg_Config_enableNativeRedirection(JNIEnv *env, jclass object) {
mutexLock();
if (redirectionEnabled != 0) {
mutexUnlock();
return;
}
redirectionEnabled = 1;
mutexUnlock();
int rc = pthread_create(&callbackThread, 0, callbackThreadFunction, 0);
if (rc != 0) {
LOGE("Failed to create callback thread (rc=%d).\n", rc);
return;
}
av_log_set_callback(mobileffmpeg_log_callback_function);
set_report_callback(mobileffmpeg_statistics_callback_function);
}
/**
* Disables log and statistics redirection.
*
* \param env pointer to native method interface
* \param reference to the class on which this method is invoked
*/
JNIEXPORT void JNICALL Java_com_arthenica_mobileffmpeg_Config_disableNativeRedirection(JNIEnv *env, jclass object) {
mutexLock();
if (redirectionEnabled != 1) {
mutexUnlock();
return;
}
redirectionEnabled = 0;
mutexUnlock();
av_log_set_callback(av_log_default_callback);
set_report_callback(NULL);
monitorNotify();
}
/**
* Returns FFmpeg version bundled within the library natively.
*
* \param env pointer to native method interface
* \param object reference to the class on which this method is invoked
* \return FFmpeg version string
*/
JNIEXPORT jstring JNICALL Java_com_arthenica_mobileffmpeg_FFmpeg_getFFmpegVersion(JNIEnv *env, jclass object) {
JNIEXPORT jstring JNICALL Java_com_arthenica_mobileffmpeg_Config_getNativeFFmpegVersion(JNIEnv *env, jclass object) {
return (*env)->NewStringUTF(env, FFMPEG_VERSION);
}
/**
* Returns MobileFFmpeg library version.
* Returns MobileFFmpeg library version natively.
*
* \param env pointer to native method interface
* \param object reference to the class on which this method is invoked
* \return MobileFFmpeg version string
*/
JNIEXPORT jstring JNICALL Java_com_arthenica_mobileffmpeg_FFmpeg_getVersion(JNIEnv *env, jclass object) {
JNIEXPORT jstring JNICALL Java_com_arthenica_mobileffmpeg_Config_getNativeVersion(JNIEnv *env, jclass object) {
return (*env)->NewStringUTF(env, MOBILE_FFMPEG_VERSION);
}
/**
* Synchronously executes FFmpeg command with arguments provided.
* Synchronously executes FFmpeg command natively with arguments provided.
*
* \param env pointer to native method interface
* \param object reference to the class on which this method is invoked
* \param stringArray reference to the object holding FFmpeg command arguments
* \return zero on successful execution, non-zero on error
*/
JNIEXPORT jint JNICALL Java_com_arthenica_mobileffmpeg_FFmpeg_execute(JNIEnv *env, jclass object, jobjectArray stringArray) {
JNIEXPORT jint JNICALL Java_com_arthenica_mobileffmpeg_Config_nativeExecute(JNIEnv *env, jclass object, jobjectArray stringArray) {
jstring *tempArray = NULL;
int argumentCount = 1;
char **argv = NULL;
@@ -142,11 +662,11 @@ JNIEXPORT jint JNICALL Java_com_arthenica_mobileffmpeg_FFmpeg_execute(JNIEnv *en
}
/**
* Cancels an ongoing operation.
* Cancels an ongoing operation natively.
*
* \param env pointer to native method interface
* \param object reference to the class on which this method is invoked
*/
JNIEXPORT void JNICALL Java_com_arthenica_mobileffmpeg_FFmpeg_cancel(JNIEnv *env, jclass object) {
JNIEXPORT void JNICALL Java_com_arthenica_mobileffmpeg_Config_nativeCancel(JNIEnv *env, jclass object) {
cancel_operation();
}
+74 -27
View File
@@ -21,39 +21,86 @@
#define MOBILE_FFMPEG_H
#include <jni.h>
#include <android/log.h>
#include "libavutil/log.h"
#include "libavutil/ffversion.h"
#include "mobileffmpeg_config.h"
/** Library version string */
#define MOBILE_FFMPEG_VERSION "2.1"
#define MOBILE_FFMPEG_VERSION "2.2"
/** Defines tag used for Android logging. */
#define LIB_NAME "mobile-ffmpeg"
/** Verbose Android logging macro. */
#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, LIB_NAME, __VA_ARGS__)
/** Debug Android logging macro. */
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LIB_NAME, __VA_ARGS__)
/** Info Android logging macro. */
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LIB_NAME, __VA_ARGS__)
/** Warn Android logging macro. */
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN, LIB_NAME, __VA_ARGS__)
/** Error Android logging macro. */
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LIB_NAME, __VA_ARGS__)
/*
* Class: com_arthenica_mobileffmpeg_FFmpeg
* Method: getFFmpegVersion
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_arthenica_mobileffmpeg_FFmpeg_getFFmpegVersion(JNIEnv *, jclass);
/*
* Class: com_arthenica_mobileffmpeg_FFmpeg
* Method: getVersion
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_arthenica_mobileffmpeg_FFmpeg_getVersion(JNIEnv *, jclass);
/*
* Class: com_arthenica_mobileffmpeg_FFmpeg
* Method: execute
* Signature: ([Ljava/lang/String;)I
*/
JNIEXPORT jint JNICALL Java_com_arthenica_mobileffmpeg_FFmpeg_execute(JNIEnv *, jclass, jobjectArray);
/*
* Class: com_arthenica_mobileffmpeg_FFmpeg
* Method: cancel
* Class: com_arthenica_mobileffmpeg_Config
* Method: enableNativeRedirection
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_arthenica_mobileffmpeg_FFmpeg_cancel(JNIEnv *, jclass);
JNIEXPORT void JNICALL Java_com_arthenica_mobileffmpeg_Config_enableNativeRedirection(JNIEnv *, jclass);
#endif /* MOBILE_FFMPEG_H */
/*
* Class: com_arthenica_mobileffmpeg_Config
* Method: disableNativeRedirection
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_arthenica_mobileffmpeg_Config_disableNativeRedirection(JNIEnv *, jclass);
/*
* Class: com_arthenica_mobileffmpeg_Config
* Method: setNativeLogLevel
* Signature: (I)V
*/
JNIEXPORT void JNICALL Java_com_arthenica_mobileffmpeg_Config_setNativeLogLevel(JNIEnv *, jclass, jint);
/*
* Class: com_arthenica_mobileffmpeg_Config
* Method: getNativeLogLevel
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_com_arthenica_mobileffmpeg_Config_getNativeLogLevel(JNIEnv *, jclass);
/*
* Class: com_arthenica_mobileffmpeg_Config
* Method: getNativeFFmpegVersion
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_arthenica_mobileffmpeg_Config_getNativeFFmpegVersion(JNIEnv *, jclass);
/*
* Class: com_arthenica_mobileffmpeg_Config
* Method: getNativeVersion
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_arthenica_mobileffmpeg_Config_getNativeVersion(JNIEnv *, jclass);
/*
* Class: com_arthenica_mobileffmpeg_Config
* Method: nativeExecute
* Signature: ([Ljava/lang/String;)I
*/
JNIEXPORT jint JNICALL Java_com_arthenica_mobileffmpeg_Config_nativeExecute(JNIEnv *, jclass, jobjectArray);
/*
* Class: com_arthenica_mobileffmpeg_Config
* Method: nativeCancel
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_arthenica_mobileffmpeg_Config_nativeCancel(JNIEnv *, jclass);
#endif /* MOBILE_FFMPEG_H */
@@ -1,565 +0,0 @@
/*
* Copyright (c) 2018 Taner Sener
*
* This file is part of MobileFFmpeg.
*
* MobileFFmpeg is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* MobileFFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with MobileFFmpeg. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* CHANGES 08.2018
* --------------------------------------------------------
* - Copied methods with avutil_log_ prefix from libavutil/log.c
*/
#include <pthread.h>
#include "fftools_ffmpeg.h"
#include "mobileffmpeg_config.h"
#include "libavutil/bprint.h"
/** Callback data structure */
struct CallbackData {
int type; // 1 (log callback) or 2 (statistics callback)
int logLevel; // log level
char *logData; // log data
int statisticsFrameNumber; // statistics frame number
float statisticsFps; // statistics fps
float statisticsQuality; // statistics quality
int64_t statisticsSize; // statistics size
int statisticsTime; // statistics time
double statisticsBitrate; // statistics bitrate
double statisticsSpeed; // statistics speed
struct CallbackData *next;
};
/** Redirection control variables */
pthread_mutex_t lockMutex;
pthread_mutex_t monitorMutex;
pthread_cond_t monitorCondition;
pthread_t callbackThread;
int redirectionEnabled;
struct CallbackData *callbackDataHead;
struct CallbackData *callbackDataTail;
/** Global reference to the virtual machine running */
static JavaVM *globalVm;
/** Global reference of Config class in Java */
static jclass configClass;
/** Global reference of log redirection method in Java */
static jmethodID logMethod;
/** Global reference of statistics redirection method in Java */
static jmethodID statisticsMethod;
/** Full name of the Config class */
const char *configClassName = "com/arthenica/mobileffmpeg/Config";
/** Prototypes of native functions defined by Config class. */
JNINativeMethod configMethods[] = {
{"enableNativeRedirection", "()V", (void*) Java_com_arthenica_mobileffmpeg_Config_enableNativeRedirection},
{"disableNativeRedirection", "()V", (void*) Java_com_arthenica_mobileffmpeg_Config_disableNativeRedirection},
{"setNativeLogLevel", "(I)V", (void*) Java_com_arthenica_mobileffmpeg_Config_setNativeLogLevel},
{"getNativeLogLevel", "()I", (void*) Java_com_arthenica_mobileffmpeg_Config_getNativeLogLevel}
};
/** DEFINES LINE SIZE USED FOR LOGGING */
#define LOG_LINE_SIZE 1024
static const char *avutil_log_get_level_str(int level) {
switch (level) {
case AV_LOG_QUIET:
return "quiet";
case AV_LOG_DEBUG:
return "debug";
case AV_LOG_VERBOSE:
return "verbose";
case AV_LOG_INFO:
return "info";
case AV_LOG_WARNING:
return "warning";
case AV_LOG_ERROR:
return "error";
case AV_LOG_FATAL:
return "fatal";
case AV_LOG_PANIC:
return "panic";
default:
return "";
}
}
static void avutil_log_format_line(void *avcl, int level, const char *fmt, va_list vl, AVBPrint part[4], int *print_prefix) {
int flags = av_log_get_flags();
AVClass* avc = avcl ? *(AVClass **) avcl : NULL;
av_bprint_init(part+0, 0, 1);
av_bprint_init(part+1, 0, 1);
av_bprint_init(part+2, 0, 1);
av_bprint_init(part+3, 0, 65536);
if (*print_prefix && avc) {
if (avc->parent_log_context_offset) {
AVClass** parent = *(AVClass ***) (((uint8_t *) avcl) +
avc->parent_log_context_offset);
if (parent && *parent) {
av_bprintf(part+0, "[%s @ %p] ",
(*parent)->item_name(parent), parent);
}
}
av_bprintf(part+1, "[%s @ %p] ",
avc->item_name(avcl), avcl);
}
if (*print_prefix && (level > AV_LOG_QUIET) && (flags & AV_LOG_PRINT_LEVEL))
av_bprintf(part+2, "[%s] ", avutil_log_get_level_str(level));
av_vbprintf(part+3, fmt, vl);
if(*part[0].str || *part[1].str || *part[2].str || *part[3].str) {
char lastc = part[3].len && part[3].len <= part[3].size ? part[3].str[part[3].len - 1] : 0;
*print_prefix = lastc == '\n' || lastc == '\r';
}
}
static void avutil_log_sanitize(uint8_t *line) {
while(*line){
if(*line < 0x08 || (*line > 0x0D && *line < 0x20))
*line='?';
line++;
}
}
void mutexInit() {
pthread_mutexattr_t attributes;
pthread_mutexattr_init(&attributes);
pthread_mutexattr_settype(&attributes, PTHREAD_MUTEX_RECURSIVE_NP);
pthread_mutex_init(&lockMutex, &attributes);
pthread_mutexattr_destroy(&attributes);
}
void monitorInit() {
pthread_mutexattr_t attributes;
pthread_mutexattr_init(&attributes);
pthread_mutexattr_settype(&attributes, PTHREAD_MUTEX_RECURSIVE_NP);
pthread_condattr_t cattributes;
pthread_condattr_init(&cattributes);
pthread_condattr_setpshared(&cattributes, PTHREAD_PROCESS_PRIVATE);
pthread_mutex_init(&monitorMutex, &attributes);
pthread_mutexattr_destroy(&attributes);
pthread_cond_init(&monitorCondition, &cattributes);
pthread_condattr_destroy(&cattributes);
}
void mutexUnInit() {
pthread_mutex_destroy(&lockMutex);
}
void monitorUnInit() {
pthread_mutex_destroy(&monitorMutex);
pthread_cond_destroy(&monitorCondition);
}
void mutexLock() {
pthread_mutex_lock(&lockMutex);
}
void mutexUnlock() {
pthread_mutex_unlock(&lockMutex);
}
void monitorWait(int milliSeconds) {
struct timeval tp;
struct timespec ts;
int rc;
rc = gettimeofday(&tp, NULL);
if (rc) {
return;
}
ts.tv_sec = tp.tv_sec;
ts.tv_nsec = tp.tv_usec * 1000;
ts.tv_sec += milliSeconds / 1000;
ts.tv_nsec += (milliSeconds % 1000)*1000000;
pthread_mutex_lock(&monitorMutex);
pthread_cond_timedwait(&monitorCondition, &monitorMutex, &ts);
pthread_mutex_unlock(&monitorMutex);
}
void monitorNotify() {
pthread_mutex_lock(&monitorMutex);
pthread_cond_signal(&monitorCondition);
pthread_mutex_unlock(&monitorMutex);
}
/**
* Adds log data to the end of callback data list.
*/
void logCallbackDataAdd(int level, const char *data) {
// CREATE DATA STRUCT FIRST
struct CallbackData *newData = (struct CallbackData*)malloc(sizeof(struct CallbackData));
newData->type = 1;
newData->logLevel = level;
size_t dataSize = strlen(data) + 1;
newData->logData = (char*)malloc(dataSize);
memcpy(newData->logData, data, dataSize);
newData->next = NULL;
mutexLock();
// INSERT IT TO THE END OF QUEUE
if (callbackDataTail == NULL) {
callbackDataTail = newData;
if (callbackDataHead != NULL) {
LOGE("Dangling callback data head detected. This can cause memory leak.");
} else {
callbackDataHead = newData;
}
} else {
struct CallbackData *oldTail = callbackDataTail;
oldTail->next = newData;
callbackDataTail = newData;
}
mutexUnlock();
monitorNotify();
}
/**
* Adds statistics data to the end of callback data list.
*/
void statisticsCallbackDataAdd(int frameNumber, float fps, float quality, int64_t size, int time, double bitrate, double speed) {
// CREATE DATA STRUCT FIRST
struct CallbackData *newData = (struct CallbackData*)malloc(sizeof(struct CallbackData));
newData->type = 2;
newData->statisticsFrameNumber = frameNumber;
newData->statisticsFps = fps;
newData->statisticsQuality = quality;
newData->statisticsSize = size;
newData->statisticsTime = time;
newData->statisticsBitrate = bitrate;
newData->statisticsSpeed = speed;
newData->next = NULL;
mutexLock();
// INSERT IT TO THE END OF QUEUE
if (callbackDataTail == NULL) {
callbackDataTail = newData;
if (callbackDataHead != NULL) {
LOGE("Dangling callback data head detected. This can cause memory leak.");
} else {
callbackDataHead = newData;
}
} else {
struct CallbackData *oldTail = callbackDataTail;
oldTail->next = newData;
callbackDataTail = newData;
}
mutexUnlock();
monitorNotify();
}
/**
* Removes head of callback data list.
*/
struct CallbackData *callbackDataRemove() {
struct CallbackData *currentData;
mutexLock();
if (callbackDataHead == NULL) {
currentData = NULL;
} else {
currentData = callbackDataHead;
struct CallbackData *nextHead = currentData->next;
if (nextHead == NULL) {
if (callbackDataHead != callbackDataTail) {
LOGE("Head and tail callback data pointers do not match for single callback data element. This can cause memory leak.");
} else {
callbackDataTail = NULL;
}
callbackDataHead = NULL;
} else {
callbackDataHead = nextHead;
}
}
mutexUnlock();
return currentData;
}
/**
* Callback function for FFmpeg logs.
*
* \param pointer to AVClass struct
* \param level
* \param format
* \param arguments
*/
void mobileffmpeg_log_callback_function(void *ptr, int level, const char* format, va_list vargs) {
char line[LOG_LINE_SIZE];
AVBPrint part[4];
int print_prefix = 1;
if (level >= 0) {
level &= 0xff;
}
avutil_log_format_line(ptr, level, format, vargs, part, &print_prefix);
snprintf(line, sizeof(line), "%s%s%s%s", part[0].str, part[1].str, part[2].str, part[3].str);
avutil_log_sanitize(part[0].str);
logCallbackDataAdd(level, part[0].str);
avutil_log_sanitize(part[1].str);
logCallbackDataAdd(level, part[1].str);
avutil_log_sanitize(part[2].str);
logCallbackDataAdd(level, part[2].str);
avutil_log_sanitize(part[3].str);
logCallbackDataAdd(level, part[3].str);
av_bprint_finalize(part+3, NULL);
}
/**
* Callback function for FFmpeg statistics.
*
* \param frameNumber last processed frame number
* \param fps frames processed per second
* \param quality quality of the output stream (video only)
* \param size size in bytes
* \param time processed output duration
* \param bitrate output bit rate in kbits/s
* \param speed processing speed = processed duration / operation duration
*/
void mobileffmpeg_statistics_callback_function(int frameNumber, float fps, float quality, int64_t size, int time, double bitrate, double speed) {
statisticsCallbackDataAdd(frameNumber, fps, quality, size, time, bitrate, speed);
}
/**
* Forwards callback messages to Java classes.
*/
void *callbackThreadFunction() {
JNIEnv *env;
jint getEnvRc = (*globalVm)->GetEnv(globalVm, (void**) &env, JNI_VERSION_1_6);
if (getEnvRc != JNI_OK) {
if (getEnvRc != JNI_EDETACHED) {
LOGE("Callback thread failed to GetEnv for class %s with rc %d.\n", configClassName, getEnvRc);
return NULL;
}
if ((*globalVm)->AttachCurrentThread(globalVm, &env, NULL) != 0) {
LOGE("Callback thread failed to AttachCurrentThread for class %s.\n", configClassName);
return NULL;
}
}
LOGD("Callback thread started.\n");
while(redirectionEnabled) {
struct CallbackData *callbackData = callbackDataRemove();
if (callbackData != NULL) {
if (callbackData->type == 1) {
// LOG CALLBACK
size_t size = strlen(callbackData->logData);
jbyteArray byteArray = (jbyteArray) (*env)->NewByteArray(env, size);
(*env)->SetByteArrayRegion(env, byteArray, 0, size, (jbyte *)callbackData->logData);
(*env)->CallStaticVoidMethod(env, configClass, logMethod, callbackData->logLevel, byteArray);
(*env)->DeleteLocalRef(env, byteArray);
// CLEAN LOG DATA
free(callbackData->logData);
} else {
// STATISTICS CALLBACK
(*env)->CallStaticVoidMethod(env, configClass, statisticsMethod,
callbackData->statisticsFrameNumber, callbackData->statisticsFps,
callbackData->statisticsQuality, callbackData->statisticsSize,
callbackData->statisticsTime, callbackData->statisticsBitrate,
callbackData->statisticsSpeed);
}
// CLEAN STRUCT
callbackData->next = NULL;
free(callbackData);
} else {
monitorWait(100);
}
}
(*globalVm)->DetachCurrentThread(globalVm);
LOGD("Callback thread stopped.\n");
return NULL;
}
/**
* Called when 'mobileffmpeg-config' native library is loaded.
*
* \param vm pointer to the running virtual machine
* \param reserved reserved
* \return JNI version needed by 'mobileffmpeg' library
*/
jint JNI_OnLoad(JavaVM *vm, void *reserved) {
JNIEnv *env;
if ((*vm)->GetEnv(vm, (void**)(&env), JNI_VERSION_1_6) != JNI_OK) {
LOGE("OnLoad failed to GetEnv for class %s.\n", configClassName);
return JNI_FALSE;
}
jclass localConfigClass = (*env)->FindClass(env, configClassName);
if (localConfigClass == NULL) {
LOGE("OnLoad failed to FindClass %s.\n", configClassName);
return JNI_FALSE;
}
if ((*env)->RegisterNatives(env, localConfigClass, configMethods, 4) < 0) {
LOGE("OnLoad failed to RegisterNatives for class %s.\n", configClassName);
return JNI_FALSE;
}
(*env)->GetJavaVM(env, &globalVm);
logMethod = (*env)->GetStaticMethodID(env, localConfigClass, "log", "(I[B)V");
if (logMethod == NULL) {
LOGE("OnLoad thread failed to GetMethodID for %s.\n", "log");
(*globalVm)->DetachCurrentThread(globalVm);
return JNI_FALSE;
}
statisticsMethod = (*env)->GetStaticMethodID(env, localConfigClass, "statistics", "(IFFJIDD)V");
if (logMethod == NULL) {
LOGE("OnLoad thread failed to GetMethodID for %s.\n", "statistics");
(*globalVm)->DetachCurrentThread(globalVm);
return JNI_FALSE;
}
configClass = (jclass) ((*env)->NewGlobalRef(env, localConfigClass));
redirectionEnabled = 0;
callbackDataHead = NULL;
callbackDataTail = NULL;
mutexInit();
monitorInit();
return JNI_VERSION_1_6;
}
/**
* Sets log level.
*
* \param env pointer to native method interface
* \param reference to the class on which this method is invoked
* \param log level
*/
JNIEXPORT void JNICALL Java_com_arthenica_mobileffmpeg_Config_setNativeLogLevel(JNIEnv *env, jclass object, jint level) {
av_log_set_level(level);
}
/**
* Returns current log level.
*
* \param env pointer to native method interface
* \param reference to the class on which this method is invoked
*/
JNIEXPORT jint JNICALL Java_com_arthenica_mobileffmpeg_Config_getNativeLogLevel(JNIEnv *env, jclass object) {
return av_log_get_level();
}
/**
* Enables log and statistics redirection.
*
* \param env pointer to native method interface
* \param reference to the class on which this method is invoked
*/
JNIEXPORT void JNICALL Java_com_arthenica_mobileffmpeg_Config_enableNativeRedirection(JNIEnv *env, jclass object) {
mutexLock();
if (redirectionEnabled != 0) {
mutexUnlock();
return;
}
redirectionEnabled = 1;
mutexUnlock();
int rc = pthread_create(&callbackThread, 0, callbackThreadFunction, 0);
if (rc != 0) {
LOGE("Failed to create callback thread (rc=%d).\n", rc);
return;
}
av_log_set_callback(mobileffmpeg_log_callback_function);
set_report_callback(mobileffmpeg_statistics_callback_function);
}
/**
* Disables log and statistics redirection.
*
* \param env pointer to native method interface
* \param reference to the class on which this method is invoked
*/
JNIEXPORT void JNICALL Java_com_arthenica_mobileffmpeg_Config_disableNativeRedirection(JNIEnv *env, jclass object) {
mutexLock();
if (redirectionEnabled != 1) {
mutexUnlock();
return;
}
redirectionEnabled = 0;
mutexUnlock();
av_log_set_callback(av_log_default_callback);
set_report_callback(NULL);
monitorNotify();
}
@@ -1,76 +0,0 @@
/*
* Copyright (c) 2018 Taner Sener
*
* This file is part of MobileFFmpeg.
*
* MobileFFmpeg is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* MobileFFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with MobileFFmpeg. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef MOBILE_FFMPEG_CONFIG_H
#define MOBILE_FFMPEG_CONFIG_H
#include <jni.h>
#include <android/log.h>
#include "libavutil/log.h"
#include "libavutil/ffversion.h"
#include "mobileffmpeg.h"
/** Defines tag used for Android logging. */
#define LIB_NAME "mobile-ffmpeg"
/** Verbose Android logging macro. */
#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, LIB_NAME, __VA_ARGS__)
/** Debug Android logging macro. */
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LIB_NAME, __VA_ARGS__)
/** Info Android logging macro. */
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LIB_NAME, __VA_ARGS__)
/** Warn Android logging macro. */
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN, LIB_NAME, __VA_ARGS__)
/** Error Android logging macro. */
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LIB_NAME, __VA_ARGS__)
/*
* Class: com_arthenica_mobileffmpeg_Config
* Method: enableNativeRedirection
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_arthenica_mobileffmpeg_Config_enableNativeRedirection(JNIEnv *, jclass);
/*
* Class: com_arthenica_mobileffmpeg_Config
* Method: disableNativeRedirection
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_arthenica_mobileffmpeg_Config_disableNativeRedirection(JNIEnv *, jclass);
/*
* Class: com_arthenica_mobileffmpeg_Config
* Method: setNativeLogLevel
* Signature: (I)V
*/
JNIEXPORT void JNICALL Java_com_arthenica_mobileffmpeg_Config_setNativeLogLevel(JNIEnv *, jclass, jint);
/*
* Class: com_arthenica_mobileffmpeg_Config
* Method: getNativeLogLevel
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_com_arthenica_mobileffmpeg_Config_getNativeLogLevel(JNIEnv *, jclass);
#endif /* MOBILE_FFMPEG_CONFIG_H */
@@ -30,6 +30,8 @@ import java.io.IOException;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
import static com.arthenica.mobileffmpeg.FFmpeg.getVersion;
/**
* <p>This class is used to configure MobileFFmpeg library utilities/tools.
*
@@ -71,6 +73,8 @@ public class Config {
static {
Log.i(Config.TAG, "Loading mobile-ffmpeg.");
/* ALL LIBRARIES LOADED AT STARTUP */
String abiName = AbiDetect.getAbi();
Abi abi = Abi.from(abiName);
@@ -82,17 +86,20 @@ public class Config {
boolean nativeLibraryLoaded = false;
if (abi == Abi.ABI_ARMV7A_NEON) {
try {
System.loadLibrary("mobileffmpeg-config-armv7a-neon");
System.loadLibrary("mobileffmpeg-armv7a-neon");
nativeLibraryLoaded = true;
} catch (UnsatisfiedLinkError e) {
} catch (final UnsatisfiedLinkError e) {
Log.i(Config.TAG, "NEON supported armeabi-v7a library not found. Loading default armeabi-v7a library.", e);
abi = Abi.ABI_ARMV7A;
}
}
if (!nativeLibraryLoaded) {
System.loadLibrary("mobileffmpeg-config");
System.loadLibrary("mobileffmpeg");
}
Log.i(Config.TAG, String.format("Loaded mobile-ffmpeg-%s-%s.", abi.getName(), getVersion()));
/* NATIVE LOG LEVEL IS RECEIVED ONLY ON STARTUP */
activeLogLevel = Level.from(getNativeLogLevel());
@@ -109,6 +116,14 @@ public class Config {
/**
* <p>Enables log and statistics redirection.
* <p>When redirection is not enabled FFmpeg logs are printed to stderr. By enabling redirection, they are routed
* to Logcat and can be routed further to a callback function.
* <p>Statistics redirection behaviour is similar. Statistics are not printed at all if redirection is not enabled.
* If it is enabled then it is possible to define a statistics callback function but if you don't, they are not
* printed anywhere and only saved as <code>lastReceivedStatistics</code> data which can be polled with
* {@link #getLastReceivedStatistics()}.
* <p>Note that redirection is enabled by default. If you do not want to use its functionality please use
* {@link #disableRedirection()} to disable it.
*/
public static void enableRedirection() {
enableNativeRedirection();
@@ -145,7 +160,7 @@ public class Config {
/**
* <p>Sets a callback function to redirect FFmpeg logs.
*
* @param newLogCallback new log callback function
* @param newLogCallback new log callback function or NULL to disable a previously defined callback
*/
public static void enableLogCallback(final LogCallback newLogCallback) {
logCallbackFunction = newLogCallback;
@@ -154,7 +169,7 @@ public class Config {
/**
* <p>Sets a callback function to redirect FFmpeg statistics.
*
* @param statisticsCallback new statistics callback function
* @param statisticsCallback new statistics callback function or NULL to disable a previously defined callback
*/
public static void enableStatisticsCallback(final StatisticsCallback statisticsCallback) {
statisticsCallbackFunction = statisticsCallback;
@@ -246,7 +261,7 @@ public class Config {
}
/**
* <p>Resets last received statistics.
* <p>Resets last received statistics. It is recommended to call it before starting a new execution.
*/
public static void resetStatistics() {
lastReceivedStatistics = new Statistics();
@@ -263,7 +278,7 @@ public class Config {
}
/**
* <p>Registers fonts inside the given path, so they are available in FFmpeg filters.
* <p>Registers fonts inside the given path, so they are available to use in FFmpeg filters.
*
* <p>Note that you need to build <code>MobileFFmpeg</code> with <code>fontconfig</code>
* enabled or use a prebuilt package with <code>fontconfig</code> inside to use this feature.
@@ -370,4 +385,33 @@ public class Config {
*/
private static native int getNativeLogLevel();
/**
* <p>Returns FFmpeg version bundled within the library natively.
*
* @return FFmpeg version
*/
native static String getNativeFFmpegVersion();
/**
* <p>Returns MobileFFmpeg library version natively.
*
* @return MobileFFmpeg version
*/
native static String getNativeVersion();
/**
* <p>Synchronously executes FFmpeg natively with arguments provided.
*
* @param arguments FFmpeg command options/arguments as string array
* @return zero on successful execution, 255 on user cancel and non-zero on error
*/
native static int nativeExecute(final String[] arguments);
/**
* <p>Cancels an ongoing operation natively.
*
* <p>This function does not wait for termination to complete and returns immediately.
*/
native static void nativeCancel();
}
@@ -19,8 +19,6 @@
package com.arthenica.mobileffmpeg;
import android.util.Log;
/**
* <p>Main class for FFmpeg operations. Provides {@link #execute(String...)} method to execute
* FFmpeg commands.
@@ -39,14 +37,8 @@ public class FFmpeg {
public static final int RETURN_CODE_CANCEL = 255;
static {
Log.i(Config.TAG, "Loading mobile-ffmpeg.");
System.loadLibrary("mobileffmpeg");
AbiDetect.class.getName();
Config.class.getName();
Log.i(Config.TAG, String.format("Loaded mobile-ffmpeg-%s-%s.", AbiDetect.getAbi(), getVersion()));
}
/**
@@ -60,14 +52,18 @@ public class FFmpeg {
*
* @return FFmpeg version
*/
public native static String getFFmpegVersion();
public static String getFFmpegVersion() {
return Config.getNativeFFmpegVersion();
}
/**
* <p>Returns MobileFFmpeg library version.
*
* @return MobileFFmpeg version
*/
public native static String getVersion();
public static String getVersion() {
return Config.getNativeVersion();
}
/**
* <p>Synchronously executes FFmpeg with arguments provided.
@@ -75,7 +71,9 @@ public class FFmpeg {
* @param arguments FFmpeg command options/arguments as string array
* @return zero on successful execution, 255 on user cancel and non-zero on error
*/
public native static int execute(final String[] arguments);
public static int execute(final String[] arguments) {
return Config.nativeExecute(arguments);
}
/**
* <p>Synchronously executes FFmpeg with arguments provided.
@@ -92,6 +90,8 @@ public class FFmpeg {
*
* <p>This function does not wait for termination to complete and returns immediately.
*/
public native static void cancel();
public static void cancel() {
Config.nativeCancel();
}
}
+5 -14
View File
@@ -25,19 +25,10 @@ include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_ARM_MODE := $(MY_ARM_MODE)
LOCAL_MODULE := mobileffmpeg
LOCAL_SRC_FILES := $(MY_PATH)/mobileffmpeg.c
LOCAL_SRC_FILES := $(MY_PATH)/mobileffmpeg.c $(MY_PATH)/fftools_cmdutils.c $(MY_PATH)/fftools_ffmpeg.c $(MY_PATH)/fftools_ffmpeg_opt.c $(MY_PATH)/fftools_ffmpeg_hw.c $(MY_PATH)/fftools_ffmpeg_filter.c
LOCAL_CFLAGS := -Wall -Werror -Wno-unused-parameter -Wno-switch -Wno-sign-compare -I${LOCAL_PATH}/../../prebuilt/android-$(TARGET_ARCH)/ffmpeg/include
LOCAL_LDLIBS := -llog -lz -landroid
LOCAL_SHARED_LIBRARIES := c++_shared mobileffmpeg-config
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_ARM_MODE := $(MY_ARM_MODE)
LOCAL_MODULE := mobileffmpeg-config
LOCAL_SRC_FILES := $(MY_PATH)/mobileffmpeg_config.c $(MY_PATH)/fftools_cmdutils.c $(MY_PATH)/fftools_ffmpeg.c $(MY_PATH)/fftools_ffmpeg_opt.c $(MY_PATH)/fftools_ffmpeg_hw.c $(MY_PATH)/fftools_ffmpeg_filter.c
LOCAL_CFLAGS := -Wall -Werror -Wno-unused-parameter -Wno-switch -Wno-sign-compare -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)
@@ -45,11 +36,11 @@ ifeq ($(TARGET_ARCH_ABI), armeabi-v7a)
include $(CLEAR_VARS)
LOCAL_ARM_MODE := $(MY_ARM_MODE)
LOCAL_MODULE := mobileffmpeg-config-armv7a-neon
LOCAL_SRC_FILES := $(MY_PATH)/mobileffmpeg_config.c $(MY_PATH)/fftools_cmdutils.c $(MY_PATH)/fftools_ffmpeg.c $(MY_PATH)/fftools_ffmpeg_opt.c $(MY_PATH)/fftools_ffmpeg_hw.c $(MY_PATH)/fftools_ffmpeg_filter.c
LOCAL_MODULE := mobileffmpeg-armv7a-neon
LOCAL_SRC_FILES := $(MY_PATH)/mobileffmpeg.c $(MY_PATH)/fftools_cmdutils.c $(MY_PATH)/fftools_ffmpeg.c $(MY_PATH)/fftools_ffmpeg_opt.c $(MY_PATH)/fftools_ffmpeg_hw.c $(MY_PATH)/fftools_ffmpeg_filter.c
LOCAL_CFLAGS := -Wall -Werror -Wno-unused-parameter -Wno-switch -Wno-sign-compare -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)
+3 -3
View File
@@ -6,8 +6,8 @@ android {
applicationId "com.arthenica.mobileffmpeg.test"
minSdkVersion 21
targetSdkVersion 27
versionCode 21
versionName "2.1"
versionCode 22
versionName "2.2"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
@@ -20,7 +20,7 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.arthenica:mobile-ffmpeg-full:2.1'
implementation 'com.arthenica:mobile-ffmpeg-full:2.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'
+6 -6
View File
@@ -780,15 +780,15 @@ download_gpl_library_source() {
GPL_LIB_DEST_DIR="libvidstab"
;;
x264)
GPL_LIB_URL="ftp://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20180829-2245-stable.tar.bz2"
GPL_LIB_FILE="x264-snapshot-20180829-2245-stable.tar.bz2"
GPL_LIB_ORIG_DIR="x264-snapshot-20180829-2245-stable"
GPL_LIB_URL="ftp://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20181107-2245-stable.tar.bz2"
GPL_LIB_FILE="x264-snapshot-20181107-2245-stable.tar.bz2"
GPL_LIB_ORIG_DIR="x264-snapshot-20181107-2245-stable"
GPL_LIB_DEST_DIR="x264"
;;
x265)
GPL_LIB_URL="https://download.videolan.org/pub/videolan/x265/x265_2.8.tar.gz"
GPL_LIB_FILE="x265-2.8.tar.gz"
GPL_LIB_ORIG_DIR="x265_2.8"
GPL_LIB_URL="https://download.videolan.org/pub/videolan/x265/x265_2.9.tar.gz"
GPL_LIB_FILE="x265-2.9.tar.gz"
GPL_LIB_ORIG_DIR="x265_2.9"
GPL_LIB_DEST_DIR="x265"
;;
xvidcore)
+1 -1
View File
@@ -60,6 +60,6 @@ fi
make ${MOBILE_FFMPEG_DEBUG} -j$(get_cpu_count) || exit 1
# CREATE PACKAGE CONFIG MANUALLY
create_fontconfig_package_config "2.13.0"
create_fontconfig_package_config "2.13.1"
make install || exit 1
+1 -1
View File
@@ -42,7 +42,7 @@ if [[ ${RECONF_libvorbis} -eq 1 ]]; then
autoreconf_library ${LIB_NAME}
fi
./configure \
PKG_CONFIG= ./configure \
--prefix=${BASEDIR}/prebuilt/android-$(get_target_build)/${LIB_NAME} \
--with-pic \
--with-sysroot=${ANDROID_NDK_ROOT}/toolchains/mobile-ffmpeg-${TOOLCHAIN}/sysroot \
+11 -14
View File
@@ -43,20 +43,18 @@ fi
cd ${BASEDIR}/src/${LIB_NAME} || exit 1
ASM_OPTIONS=""
X265_SYSTEM_PROCESSOR="${ARCH}"
case ${ARCH} in
arm-v7a | arm-v7a-neon)
ASM_OPTIONS="-DENABLE_ASSEMBLY=0 -DCROSS_COMPILE_ARM=1 -DSSE2_FOUND=0 -DSSE3_FOUND=0"
ASM_OPTIONS="-DENABLE_ASSEMBLY=0 -DCROSS_COMPILE_ARM=1"
;;
arm64-v8a)
ASM_OPTIONS="-DENABLE_ASSEMBLY=0 -DCROSS_COMPILE_ARM=1 -DSSE2_FOUND=0 -DSSE3_FOUND=0"
ASM_OPTIONS="-DENABLE_ASSEMBLY=0 -DCROSS_COMPILE_ARM=1"
;;
x86)
ASM_OPTIONS="-DENABLE_ASSEMBLY=0 -DCROSS_COMPILE_ARM=0 -DSSE2_FOUND=1 -DSSE3_FOUND=1"
ASM_OPTIONS="-DENABLE_ASSEMBLY=0 -DCROSS_COMPILE_ARM=0"
;;
x86-64)
ASM_OPTIONS="-DENABLE_ASSEMBLY=1 -DCROSS_COMPILE_ARM=0 -DSSE2_FOUND=1 -DSSE3_FOUND=1"
X265_SYSTEM_PROCESSOR="x86_64"
ASM_OPTIONS="-DENABLE_ASSEMBLY=0 -DCROSS_COMPILE_ARM=0"
;;
esac
@@ -67,12 +65,11 @@ fi
mkdir cmake-build || exit 1
cd cmake-build || exit 1
# fix x86 and x86_64 assembly
${SED_INLINE} 's/\-DPREFIX//g' ${BASEDIR}/src/x265/source/cmake/CMakeASM_NASMInformation.cmake
${SED_INLINE} 's/win/elf/g' ${BASEDIR}/src/x265/source/cmake/CMakeASM_NASMInformation.cmake
# fix pointer array assignments
${SED_INLINE} 's/parseCpuName(value, bError)/parseCpuName(value, bError, 0)/g' ${BASEDIR}/src/x265/source/common/param.cpp
# apply detect512 patch
rc=$(download "https://bitbucket.org/multicoreware/x265/issues/attachments/442/multicoreware/x265/1539002893.24/442/enable512.diff" "enable512.diff")
cd ${BASEDIR}/src/${LIB_NAME}/source/common
patch -p3 < ${MOBILE_FFMPEG_TMPDIR}/enable512.diff
cd ${BASEDIR}/src/${LIB_NAME}/cmake-build
cmake -Wno-dev \
-DCMAKE_VERBOSE_MAKEFILE=0 \
@@ -93,12 +90,12 @@ cmake -Wno-dev \
-DENABLE_PIC=1 \
-DENABLE_CLI=0 \
${ASM_OPTIONS} \
-DCMAKE_SYSTEM_PROCESSOR="${X265_SYSTEM_PROCESSOR}" \
-DCMAKE_SYSTEM_PROCESSOR="${ARCH}" \
-DENABLE_SHARED=0 ../source || exit 1
make ${MOBILE_FFMPEG_DEBUG} -j$(get_cpu_count) || exit 1
# CREATE PACKAGE CONFIG MANUALLY
create_x265_package_config "2.8"
create_x265_package_config "2.9"
make install || exit 1
+41 -14
View File
@@ -61,6 +61,23 @@ get_library_name() {
esac
}
get_static_archive_name() {
case $1 in
5) echo "libmp3lame.a" ;;
6) echo "libass.a" ;;
10) echo "libvpx.a" ;;
12) echo "libxml2.a" ;;
21) echo "libvidstab.a" ;;
22) echo "libilbc.a" ;;
26) echo "libaom.a" ;;
28) echo "libgif.a" ;;
30) echo "libogg.a" ;;
31) echo "libpng.a" ;;
32) echo "libuuid.a" ;;
*) echo lib$(get_library_name $1).a
esac
}
get_arch_name() {
case $1 in
0) echo "armv7" ;;
@@ -188,24 +205,34 @@ get_app_specific_cflags() {
APP_FLAGS=""
case $1 in
libwebp | xvidcore)
APP_FLAGS="-fno-common -DPIC"
;;
shine)
APP_FLAGS="-Wno-unused-function"
fontconfig)
case ${ARCH} in
armv7 | armv7s | arm64)
APP_FLAGS="-std=c99 -Wno-unused-function -D__IPHONE_OS_MIN_REQUIRED -D__IPHONE_VERSION_MIN_REQUIRED=30000"
;;
*)
APP_FLAGS="-std=c99 -Wno-unused-function"
;;
esac
;;
ffmpeg)
APP_FLAGS="-Wno-unused-function -DPIC"
;;
soxr | snappy)
APP_FLAGS="-std=gnu99 -Wno-unused-function -DPIC"
;;
kvazaar)
APP_FLAGS="-std=gnu99 -Wno-unused-function"
;;
libwebp | xvidcore)
APP_FLAGS="-fno-common -DPIC"
;;
mobile-ffmpeg)
APP_FLAGS="-std=c99 -Wno-unused-function -Wall -Wno-deprecated-declarations -Wno-pointer-sign -Wno-switch -Wno-unused-result -Wno-unused-variable -DPIC -fobjc-arc"
;;
shine)
APP_FLAGS="-Wno-unused-function"
;;
soxr | snappy)
APP_FLAGS="-std=gnu99 -Wno-unused-function -DPIC"
;;
x265)
APP_FLAGS="-Wno-unused-function"
;;
@@ -723,15 +750,15 @@ download_gpl_library_source() {
GPL_LIB_DEST_DIR="libvidstab"
;;
x264)
GPL_LIB_URL="ftp://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20180829-2245-stable.tar.bz2"
GPL_LIB_FILE="x264-snapshot-20180829-2245-stable.tar.bz2"
GPL_LIB_ORIG_DIR="x264-snapshot-20180829-2245-stable"
GPL_LIB_URL="ftp://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20181107-2245-stable.tar.bz2"
GPL_LIB_FILE="x264-snapshot-20181107-2245-stable.tar.bz2"
GPL_LIB_ORIG_DIR="x264-snapshot-20181107-2245-stable"
GPL_LIB_DEST_DIR="x264"
;;
x265)
GPL_LIB_URL="https://download.videolan.org/pub/videolan/x265/x265_2.8.tar.gz"
GPL_LIB_FILE="x265-2.8.tar.gz"
GPL_LIB_ORIG_DIR="x265_2.8"
GPL_LIB_URL="https://download.videolan.org/pub/videolan/x265/x265_2.9.tar.gz"
GPL_LIB_FILE="x265-2.9.tar.gz"
GPL_LIB_ORIG_DIR="x265_2.9"
GPL_LIB_DEST_DIR="x265"
;;
xvidcore)
+8 -3
View File
@@ -295,6 +295,13 @@ do
fi
done
# BUILD SHARED (DEFAULT) OR STATIC LIBRARIES
if [[ -z ${MOBILE_FFMPEG_STATIC} ]]; then
BUILD_LIBRARY_OPTIONS="--enable-shared --disable-static";
else
BUILD_LIBRARY_OPTIONS="--enable-static --disable-shared";
fi
# CFLAGS PARTS
ARCH_CFLAGS=$(get_arch_specific_cflags);
APP_CFLAGS=$(get_app_specific_cflags ${LIB_NAME});
@@ -343,7 +350,7 @@ make distclean 2>/dev/null 1>/dev/null
--enable-optimizations \
--enable-small \
--enable-swscale \
--enable-shared \
${BUILD_LIBRARY_OPTIONS} \
--disable-openssl \
--disable-xmm-clobber-test \
--disable-debug \
@@ -355,7 +362,6 @@ make distclean 2>/dev/null 1>/dev/null
--disable-manpages \
--disable-podpages \
--disable-txtpages \
--disable-static \
--disable-sndio \
--disable-schannel \
--disable-sdl2 \
@@ -420,7 +426,6 @@ cp -f ${BASEDIR}/src/ffmpeg/libavutil/arm/timer.h ${BASEDIR}/prebuilt/ios-$(get_
cp -f ${BASEDIR}/src/ffmpeg/libavutil/aarch64/timer.h ${BASEDIR}/prebuilt/ios-$(get_target_host)/ffmpeg/include/libavutil/aarch64
cp -f ${BASEDIR}/src/ffmpeg/libavutil/x86/emms.h ${BASEDIR}/prebuilt/ios-$(get_target_host)/ffmpeg/include/libavutil/x86
if [ $? -eq 0 ]; then
echo "ok"
else
+1 -1
View File
@@ -65,6 +65,6 @@ fi
make ${MOBILE_FFMPEG_DEBUG} -j$(get_cpu_count) || exit 1
# CREATE PACKAGE CONFIG MANUALLY
create_fontconfig_package_config "2.13.0"
create_fontconfig_package_config "2.13.1"
make install || exit 1
+1
View File
@@ -35,6 +35,7 @@ set_toolchain_clang_paths ${LIB_NAME}
# PREPARING FLAGS
TARGET_HOST=$(get_target_host)
export CFLAGS=$(get_cflags ${LIB_NAME})
export CPPFLAGS=$(get_cflags ${LIB_NAME})
export CXXFLAGS=$(get_cxxflags ${LIB_NAME})
export LDFLAGS=$(get_ldflags ${LIB_NAME})
+1 -1
View File
@@ -48,7 +48,7 @@ if [[ ${RECONF_libvorbis} -eq 1 ]]; then
autoreconf_library ${LIB_NAME}
fi
./configure \
PKG_CONFIG= ./configure \
--prefix=${BASEDIR}/prebuilt/ios-$(get_target_host)/${LIB_NAME} \
--with-pic \
--with-sysroot=${SDK_PATH} \
+2 -2
View File
@@ -58,11 +58,11 @@ case ${ARCH} in
;;
i386)
TARGET="x86-iphonesimulator-gcc"
ASM_FLAGS="--enable-runtime-cpu-detect"
ASM_FLAGS="--enable-runtime-cpu-detect --disable-avx512"
;;
x86-64)
TARGET="x86_64-iphonesimulator-gcc"
ASM_FLAGS="--enable-runtime-cpu-detect"
ASM_FLAGS="--enable-runtime-cpu-detect --disable-avx512"
;;
esac
+8 -2
View File
@@ -42,6 +42,13 @@ export CXXFLAGS=$(get_cxxflags ${LIB_NAME})
export LDFLAGS="${COMMON_LDFLAGS} -L${BASEDIR}/prebuilt/ios-$(get_target_host)/ffmpeg/lib -framework Foundation -lavdevice"
export PKG_CONFIG_LIBDIR="${INSTALL_PKG_CONFIG_DIR}"
# BUILD SHARED (DEFAULT) OR STATIC LIBRARIES
if [[ -z ${MOBILE_FFMPEG_STATIC} ]]; then
BUILD_LIBRARY_OPTIONS="--enable-shared --disable-static";
else
BUILD_LIBRARY_OPTIONS="--enable-static --disable-shared";
fi
cd ${BASEDIR}/ios || exit 1
echo -n -e "\n${LIB_NAME}: "
@@ -63,8 +70,7 @@ ${SED_INLINE} 's/${wl}suppress//g' configure
--prefix=${BASEDIR}/prebuilt/ios-$(get_target_host)/${LIB_NAME} \
--with-pic \
--with-sysroot=${SDK_PATH} \
--enable-shared \
--disable-static \
${BUILD_LIBRARY_OPTIONS} \
--disable-fast-install \
--disable-maintainer-mode \
--host=${TARGET_HOST} 1>>${BASEDIR}/build.log 2>&1
+9 -4
View File
@@ -50,13 +50,13 @@ cd ${BASEDIR}/src/${LIB_NAME} || exit 1
ASM_OPTIONS=""
case ${ARCH} in
armv7 | armv7s)
ASM_OPTIONS="-DENABLE_ASSEMBLY=1 -DCROSS_COMPILE_ARM=1 -DSSE2_FOUND=0 -DSSE3_FOUND=0"
ASM_OPTIONS="-DENABLE_ASSEMBLY=1 -DCROSS_COMPILE_ARM=1"
;;
arm64)
ASM_OPTIONS="-DENABLE_ASSEMBLY=0 -DCROSS_COMPILE_ARM=1 -DSSE2_FOUND=0 -DSSE3_FOUND=0"
ASM_OPTIONS="-DENABLE_ASSEMBLY=0 -DCROSS_COMPILE_ARM=1"
;;
*)
ASM_OPTIONS="-DENABLE_ASSEMBLY=1 -DCROSS_COMPILE_ARM=0 -DSSE2_FOUND=1 -DSSE3_FOUND=1"
ASM_OPTIONS="-DENABLE_ASSEMBLY=1 -DCROSS_COMPILE_ARM=0"
;;
esac
@@ -67,12 +67,17 @@ fi
mkdir cmake-build || exit 1
cd cmake-build || exit 1
# apply detect512 patch
rc=$(download "https://bitbucket.org/multicoreware/x265/issues/attachments/442/multicoreware/x265/1539002893.24/442/enable512.diff" "enable512.diff")
cd ${BASEDIR}/src/${LIB_NAME}/source/common
patch -p3 < ${MOBILE_FFMPEG_TMPDIR}/enable512.diff
cd ${BASEDIR}/src/${LIB_NAME}/cmake-build
# fix x86 and x86_64 assembly
${SED_INLINE} 's/win64/macho64 -DPREFIX/g' ${BASEDIR}/src/x265/source/cmake/CMakeASM_NASMInformation.cmake
${SED_INLINE} 's/win/macho/g' ${BASEDIR}/src/x265/source/cmake/CMakeASM_NASMInformation.cmake
# fix pointer array assignments
${SED_INLINE} 's/parseCpuName(value, bError)/parseCpuName(value, bError, 0)/g' ${BASEDIR}/src/x265/source/common/param.cpp
${SED_INLINE} '/addAvg/s/ p.pu/ *p.pu/g' ${BASEDIR}/src/x265/source/common/arm/asm-primitives.cpp
${SED_INLINE} '/convert_p2s/s/ p.pu/ *p.pu/g' ${BASEDIR}/src/x265/source/common/arm/asm-primitives.cpp
${SED_INLINE} '/pixelavg_pp/s/ p.pu/ *p.pu/g' ${BASEDIR}/src/x265/source/common/arm/asm-primitives.cpp
+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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -94,7 +94,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -90,7 +90,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -352,7 +352,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -483,7 +483,7 @@ Variables</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:07 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -103,7 +103,7 @@ $(function() {
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:07 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -260,7 +260,7 @@ Variables</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"><span class="keyword">static</span> <span class="keywordtype">char</span> *choose_ ## suffix (<a class="code" href="../../d0/d0f/struct_output_filter.html">OutputFilter</a> *ofilter) \</div><div class="line">{ \</div><div class="line"> if (ofilter-&gt;var != none) { \</div><div class="line"> get_name(ofilter-&gt;var); \</div><div class="line"> return av_strdup(name); \</div><div class="line"> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ofilter-&gt;supported_list) { \</div><div class="line"> const <a class="code" href="../../d2/dc3/struct_callback_data.html#a24877dd94bec8b5bad7a0ed6893f7c28">type</a> *p; \</div><div class="line"> AVIOContext *s = NULL; \</div><div class="line"> uint8_t *ret; \</div><div class="line"> int len; \</div><div class="line"> \</div><div class="line"> if (avio_open_dyn_buf(&amp;s) &lt; 0) \</div><div class="line"> exit_program(1); \</div><div class="line"> \</div><div class="line"> for (p = ofilter-&gt;supported_list; *p != none; p++) { \</div><div class="line"> get_name(*p); \</div><div class="line"> avio_printf(s, <span class="stringliteral">&quot;%s|&quot;</span>, name); \</div><div class="line"> } \</div><div class="line"> len = avio_close_dyn_buf(s, &amp;ret); \</div><div class="line"> ret[len - 1] = 0; \</div><div class="line"> return ret; \</div><div class="line"> } else \</div><div class="line"> return NULL; \</div><div class="line">}</div><div class="ttc" id="struct_callback_data_html_a24877dd94bec8b5bad7a0ed6893f7c28"><div class="ttname"><a href="../../d2/dc3/struct_callback_data.html#a24877dd94bec8b5bad7a0ed6893f7c28">CallbackData::type</a></div><div class="ttdeci">int type</div><div class="ttdef"><b>Definition:</b> <a href="../../d9/dae/mobileffmpeg__config_8c_source.html#l00034">mobileffmpeg_config.c:34</a></div></div>
<b>Value:</b><div class="fragment"><div class="line"><span class="keyword">static</span> <span class="keywordtype">char</span> *choose_ ## suffix (<a class="code" href="../../d0/d0f/struct_output_filter.html">OutputFilter</a> *ofilter) \</div><div class="line">{ \</div><div class="line"> if (ofilter-&gt;var != none) { \</div><div class="line"> get_name(ofilter-&gt;var); \</div><div class="line"> return av_strdup(name); \</div><div class="line"> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ofilter-&gt;supported_list) { \</div><div class="line"> const <a class="code" href="../../d2/dc3/struct_callback_data.html#a24877dd94bec8b5bad7a0ed6893f7c28">type</a> *p; \</div><div class="line"> AVIOContext *s = NULL; \</div><div class="line"> uint8_t *ret; \</div><div class="line"> int len; \</div><div class="line"> \</div><div class="line"> if (avio_open_dyn_buf(&amp;s) &lt; 0) \</div><div class="line"> exit_program(1); \</div><div class="line"> \</div><div class="line"> for (p = ofilter-&gt;supported_list; *p != none; p++) { \</div><div class="line"> get_name(*p); \</div><div class="line"> avio_printf(s, <span class="stringliteral">&quot;%s|&quot;</span>, name); \</div><div class="line"> } \</div><div class="line"> len = avio_close_dyn_buf(s, &amp;ret); \</div><div class="line"> ret[len - 1] = 0; \</div><div class="line"> return ret; \</div><div class="line"> } else \</div><div class="line"> return NULL; \</div><div class="line">}</div><div class="ttc" id="struct_callback_data_html_a24877dd94bec8b5bad7a0ed6893f7c28"><div class="ttname"><a href="../../d2/dc3/struct_callback_data.html#a24877dd94bec8b5bad7a0ed6893f7c28">CallbackData::type</a></div><div class="ttdeci">int type</div><div class="ttdef"><b>Definition:</b> <a href="../../dd/d16/mobileffmpeg_8c_source.html#l00038">mobileffmpeg.c:38</a></div></div>
<div class="ttc" id="struct_output_filter_html"><div class="ttname"><a href="../../d0/d0f/struct_output_filter.html">OutputFilter</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00271">fftools_ffmpeg.h:271</a></div></div>
</div><!-- fragment -->
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00166">166</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
@@ -1214,7 +1214,7 @@ Variables</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:07 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -207,7 +207,7 @@ $(function() {
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:07 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.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 Wed Sep 5 2018 00:38:07 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.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 Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.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 Wed Sep 5 2018 00:38:07 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -97,7 +97,7 @@ Data Fields</h2></td></tr>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Callback data structure </p>
<p class="definition">Definition at line <a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html#l00033">33</a> of file <a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html">mobileffmpeg_config.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html#l00037">37</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
</div><h2 class="groupheader">Field Documentation</h2>
<a id="a4b19ae27c39f882eae94d6dcbfd36d01"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4b19ae27c39f882eae94d6dcbfd36d01">&#9670;&nbsp;</a></span>logData</h2>
@@ -111,7 +111,7 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html#l00037">37</a> of file <a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html">mobileffmpeg_config.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html#l00041">41</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
</div>
</div>
@@ -127,7 +127,7 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html#l00036">36</a> of file <a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html">mobileffmpeg_config.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html#l00040">40</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
</div>
</div>
@@ -143,7 +143,7 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html#l00047">47</a> of file <a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html">mobileffmpeg_config.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html#l00051">51</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
</div>
</div>
@@ -159,7 +159,7 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html#l00044">44</a> of file <a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html">mobileffmpeg_config.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html#l00048">48</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
</div>
</div>
@@ -175,7 +175,7 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html#l00040">40</a> of file <a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html">mobileffmpeg_config.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html#l00044">44</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
</div>
</div>
@@ -191,7 +191,7 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html#l00039">39</a> of file <a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html">mobileffmpeg_config.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html#l00043">43</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
</div>
</div>
@@ -207,7 +207,7 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html#l00041">41</a> of file <a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html">mobileffmpeg_config.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html#l00045">45</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
</div>
</div>
@@ -223,7 +223,7 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html#l00042">42</a> of file <a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html">mobileffmpeg_config.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html#l00046">46</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
</div>
</div>
@@ -239,7 +239,7 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html#l00045">45</a> of file <a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html">mobileffmpeg_config.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html#l00049">49</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
</div>
</div>
@@ -255,7 +255,7 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html#l00043">43</a> of file <a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html">mobileffmpeg_config.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html#l00047">47</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
</div>
</div>
@@ -271,17 +271,17 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html#l00034">34</a> of file <a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html">mobileffmpeg_config.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html#l00038">38</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
</div>
</div>
<hr/>The documentation for this struct was generated from the following file:<ul>
<li><a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html">mobileffmpeg_config.c</a></li>
<li><a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -137,7 +137,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -1066,7 +1066,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.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 Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.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 Wed Sep 5 2018 00:38:07 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -197,7 +197,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -172,7 +172,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -244,7 +244,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -352,7 +352,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -3871,7 +3871,7 @@ Variables</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:07 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -438,7 +438,7 @@ $(function() {
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:07 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -137,7 +137,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -2207,7 +2207,7 @@ Variables</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:07 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -521,7 +521,7 @@ $(function() {
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:07 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -389,7 +389,7 @@ Variables</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">if</span> (codec-&gt;field) { \</div><div class="line"> const <a class="code" href="../../d2/dc3/struct_callback_data.html#a24877dd94bec8b5bad7a0ed6893f7c28">type</a> *p = codec-&gt;field; \</div><div class="line"> \</div><div class="line"> printf(<span class="stringliteral">&quot; Supported &quot;</span> list_name <span class="stringliteral">&quot;:&quot;</span>); \</div><div class="line"> while (*p != term) { \</div><div class="line"> get_name(*p); \</div><div class="line"> printf(<span class="stringliteral">&quot; %s&quot;</span>, name); \</div><div class="line"> p++; \</div><div class="line"> } \</div><div class="line"> printf(<span class="stringliteral">&quot;\n&quot;</span>); \</div><div class="line"> } \</div><div class="ttc" id="struct_callback_data_html_a24877dd94bec8b5bad7a0ed6893f7c28"><div class="ttname"><a href="../../d2/dc3/struct_callback_data.html#a24877dd94bec8b5bad7a0ed6893f7c28">CallbackData::type</a></div><div class="ttdeci">int type</div><div class="ttdef"><b>Definition:</b> <a href="../../d9/dae/mobileffmpeg__config_8c_source.html#l00034">mobileffmpeg_config.c:34</a></div></div>
<b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">if</span> (codec-&gt;field) { \</div><div class="line"> const <a class="code" href="../../d2/dc3/struct_callback_data.html#a24877dd94bec8b5bad7a0ed6893f7c28">type</a> *p = codec-&gt;field; \</div><div class="line"> \</div><div class="line"> printf(<span class="stringliteral">&quot; Supported &quot;</span> list_name <span class="stringliteral">&quot;:&quot;</span>); \</div><div class="line"> while (*p != term) { \</div><div class="line"> get_name(*p); \</div><div class="line"> printf(<span class="stringliteral">&quot; %s&quot;</span>, name); \</div><div class="line"> p++; \</div><div class="line"> } \</div><div class="line"> printf(<span class="stringliteral">&quot;\n&quot;</span>); \</div><div class="line"> } \</div><div class="ttc" id="struct_callback_data_html_a24877dd94bec8b5bad7a0ed6893f7c28"><div class="ttname"><a href="../../d2/dc3/struct_callback_data.html#a24877dd94bec8b5bad7a0ed6893f7c28">CallbackData::type</a></div><div class="ttdeci">int type</div><div class="ttdef"><b>Definition:</b> <a href="../../dd/d16/mobileffmpeg_8c_source.html#l00038">mobileffmpeg.c:38</a></div></div>
</div><!-- fragment -->
<p class="definition">Definition at line <a class="el" href="../../d7/dcc/fftools__cmdutils_8c_source.html#l01378">1378</a> of file <a class="el" href="../../d7/dcc/fftools__cmdutils_8c_source.html">fftools_cmdutils.c</a>.</p>
@@ -1412,7 +1412,7 @@ Variables</h2></td></tr>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html#l00336">336</a> of file <a class="el" href="../../d9/dae/mobileffmpeg__config_8c_source.html">mobileffmpeg_config.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html#l00351">351</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
</div>
</div>
@@ -3678,7 +3678,7 @@ Variables</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:07 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -78,7 +78,7 @@ $(function() {
<div class="ttc" id="fftools__cmdutils_8h_html_ac6310b4c2290bc63f127bcd3faa117e6"><div class="ttname"><a href="../../d8/d4e/fftools__cmdutils_8h.html#ac6310b4c2290bc63f127bcd3faa117e6">OPT_EXIT</a></div><div class="ttdeci">#define OPT_EXIT</div><div class="ttdef"><b>Definition:</b> <a href="../../d8/d4e/fftools__cmdutils_8h_source.html#l00182">fftools_cmdutils.h:182</a></div></div>
<div class="ttc" id="fftools__cmdutils_8c_html_a4c35b5b42d01e850824bc0af1016e71f"><div class="ttname"><a href="../../d7/dcc/fftools__cmdutils_8c.html#a4c35b5b42d01e850824bc0af1016e71f">show_muxers</a></div><div class="ttdeci">int show_muxers(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/dcc/fftools__cmdutils_8c_source.html#l01363">fftools_cmdutils.c:1363</a></div></div>
<div class="ttc" id="fftools__cmdutils_8c_html_a6dbb327ec24eebea72ba8769c68024b3"><div class="ttname"><a href="../../d7/dcc/fftools__cmdutils_8c.html#a6dbb327ec24eebea72ba8769c68024b3">PRINT_LIB_INFO</a></div><div class="ttdeci">#define PRINT_LIB_INFO(libname, LIBNAME, flags, level)</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/dcc/fftools__cmdutils_8c_source.html#l01106">fftools_cmdutils.c:1106</a></div></div>
<div class="ttc" id="fftools__cmdutils_8c_html_a2a0b0c8c4f0496cd0ed87e183a0a493d"><div class="ttname"><a href="../../d7/dcc/fftools__cmdutils_8c.html#a2a0b0c8c4f0496cd0ed87e183a0a493d">mobileffmpeg_log_callback_function</a></div><div class="ttdeci">void mobileffmpeg_log_callback_function(void *ptr, int level, const char *format, va_list vargs)</div><div class="ttdef"><b>Definition:</b> <a href="../../d9/dae/mobileffmpeg__config_8c_source.html#l00336">mobileffmpeg_config.c:336</a></div></div>
<div class="ttc" id="fftools__cmdutils_8c_html_a2a0b0c8c4f0496cd0ed87e183a0a493d"><div class="ttname"><a href="../../d7/dcc/fftools__cmdutils_8c.html#a2a0b0c8c4f0496cd0ed87e183a0a493d">mobileffmpeg_log_callback_function</a></div><div class="ttdeci">void mobileffmpeg_log_callback_function(void *ptr, int level, const char *format, va_list vargs)</div><div class="ttdef"><b>Definition:</b> <a href="../../dd/d16/mobileffmpeg_8c_source.html#l00351">mobileffmpeg.c:351</a></div></div>
<div class="ttc" id="fftools__cmdutils_8c_html_a77359635accb87859b14d66b53002138"><div class="ttname"><a href="../../d7/dcc/fftools__cmdutils_8c.html#a77359635accb87859b14d66b53002138">GET_ARG</a></div><div class="ttdeci">#define GET_ARG(arg)</div></div>
<div class="ttc" id="fftools__cmdutils_8c_html_a32ce6570506a3665692064967411b000"><div class="ttname"><a href="../../d7/dcc/fftools__cmdutils_8c.html#a32ce6570506a3665692064967411b000">next_codec_for_id</a></div><div class="ttdeci">static const AVCodec * next_codec_for_id(enum AVCodecID id, const AVCodec *prev, int encoder)</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/dcc/fftools__cmdutils_8c_source.html#l01481">fftools_cmdutils.c:1481</a></div></div>
<div class="ttc" id="fftools__cmdutils_8h_html"><div class="ttname"><a href="../../d8/d4e/fftools__cmdutils_8h.html">fftools_cmdutils.h</a></div></div>
@@ -238,7 +238,7 @@ $(function() {
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:07 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -74,8 +74,6 @@ $(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/d0c/mobileffmpeg__config_8h.html#ab40bb25ef4ec0f35c70e84dbad36cfc2">MOBILE_FFMPEG_VERSION</a>&#160;&#160;&#160;&quot;2.1&quot;</td></tr>
<tr class="separator:ab40bb25ef4ec0f35c70e84dbad36cfc2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6e43beaa714b1bf01ce2271440786e38"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/d0c/mobileffmpeg__config_8h.html#a6e43beaa714b1bf01ce2271440786e38">LIB_NAME</a>&#160;&#160;&#160;&quot;mobile-ffmpeg&quot;</td></tr>
<tr class="separator:a6e43beaa714b1bf01ce2271440786e38"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab78bd305488c62caf8515ee765b1ed49"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/d0c/mobileffmpeg__config_8h.html#ab78bd305488c62caf8515ee765b1ed49">LOGV</a>(...)&#160;&#160;&#160;__android_log_print(ANDROID_LOG_VERBOSE, <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h.html#a6e43beaa714b1bf01ce2271440786e38">LIB_NAME</a>, __VA_ARGS__)</td></tr>
@@ -114,7 +112,7 @@ Functions</h2></td></tr>
</div><div class="memdoc">
<p>Defines tag used for Android logging. </p>
<p class="definition">Definition at line <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h_source.html#l00033">33</a> of file <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h_source.html">mobileffmpeg_config.h</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h_source.html#l00031">31</a> of file <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h_source.html">mobileffmpeg_config.h</a>.</p>
</div>
</div>
@@ -135,7 +133,7 @@ Functions</h2></td></tr>
</div><div class="memdoc">
<p>Debug Android logging macro. </p>
<p class="definition">Definition at line <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h_source.html#l00039">39</a> of file <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h_source.html">mobileffmpeg_config.h</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h_source.html#l00037">37</a> of file <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h_source.html">mobileffmpeg_config.h</a>.</p>
</div>
</div>
@@ -156,7 +154,7 @@ Functions</h2></td></tr>
</div><div class="memdoc">
<p>Error Android logging macro. </p>
<p class="definition">Definition at line <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h_source.html#l00048">48</a> of file <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h_source.html">mobileffmpeg_config.h</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h_source.html#l00046">46</a> of file <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h_source.html">mobileffmpeg_config.h</a>.</p>
</div>
</div>
@@ -177,7 +175,7 @@ Functions</h2></td></tr>
</div><div class="memdoc">
<p>Info Android logging macro. </p>
<p class="definition">Definition at line <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h_source.html#l00042">42</a> of file <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h_source.html">mobileffmpeg_config.h</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h_source.html#l00040">40</a> of file <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h_source.html">mobileffmpeg_config.h</a>.</p>
</div>
</div>
@@ -198,7 +196,7 @@ Functions</h2></td></tr>
</div><div class="memdoc">
<p>Verbose Android logging macro. </p>
<p class="definition">Definition at line <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h_source.html#l00036">36</a> of file <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h_source.html">mobileffmpeg_config.h</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h_source.html#l00034">34</a> of file <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h_source.html">mobileffmpeg_config.h</a>.</p>
</div>
</div>
@@ -219,24 +217,7 @@ Functions</h2></td></tr>
</div><div class="memdoc">
<p>Warn Android logging macro. </p>
<p class="definition">Definition at line <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h_source.html#l00045">45</a> of file <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h_source.html">mobileffmpeg_config.h</a>.</p>
</div>
</div>
<a id="ab40bb25ef4ec0f35c70e84dbad36cfc2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab40bb25ef4ec0f35c70e84dbad36cfc2">&#9670;&nbsp;</a></span>MOBILE_FFMPEG_VERSION</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define MOBILE_FFMPEG_VERSION&#160;&#160;&#160;&quot;2.1&quot;</td>
</tr>
</table>
</div><div class="memdoc">
<p>Library version string </p>
<p class="definition">Definition at line <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h_source.html#l00030">30</a> of file <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h_source.html">mobileffmpeg_config.h</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h_source.html#l00043">43</a> of file <a class="el" href="../../d8/d0c/mobileffmpeg__config_8h_source.html">mobileffmpeg_config.h</a>.</p>
</div>
</div>
@@ -403,7 +384,7 @@ Functions</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Tue Sep 11 2018 12:10:36 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -3031,7 +3031,7 @@ Variables</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:07 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -185,7 +185,7 @@ $(function() {
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:07 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -388,7 +388,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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>
+389 -64
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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -63,6 +63,7 @@ $(function() {
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#define-members">Macros</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">mobileffmpeg.h File Reference</div> </div>
@@ -71,26 +72,191 @@ $(function() {
<p><a href="../../d8/da5/mobileffmpeg_8h_source.html">Go to the source code of this file.</a></p>
<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;2.2&quot;</td></tr>
<tr class="separator:ab40bb25ef4ec0f35c70e84dbad36cfc2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6e43beaa714b1bf01ce2271440786e38"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/da5/mobileffmpeg_8h.html#a6e43beaa714b1bf01ce2271440786e38">LIB_NAME</a>&#160;&#160;&#160;&quot;mobile-ffmpeg&quot;</td></tr>
<tr class="separator:a6e43beaa714b1bf01ce2271440786e38"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab78bd305488c62caf8515ee765b1ed49"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/da5/mobileffmpeg_8h.html#ab78bd305488c62caf8515ee765b1ed49">LOGV</a>(...)&#160;&#160;&#160;__android_log_print(ANDROID_LOG_VERBOSE, <a class="el" href="../../d8/da5/mobileffmpeg_8h.html#a6e43beaa714b1bf01ce2271440786e38">LIB_NAME</a>, __VA_ARGS__)</td></tr>
<tr class="separator:ab78bd305488c62caf8515ee765b1ed49"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa839997a58e14061861cd634fdb7664d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/da5/mobileffmpeg_8h.html#aa839997a58e14061861cd634fdb7664d">LOGD</a>(...)&#160;&#160;&#160;__android_log_print(ANDROID_LOG_DEBUG, <a class="el" href="../../d8/da5/mobileffmpeg_8h.html#a6e43beaa714b1bf01ce2271440786e38">LIB_NAME</a>, __VA_ARGS__)</td></tr>
<tr class="separator:aa839997a58e14061861cd634fdb7664d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5512e59d578a380a441a70256af997d0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/da5/mobileffmpeg_8h.html#a5512e59d578a380a441a70256af997d0">LOGI</a>(...)&#160;&#160;&#160;__android_log_print(ANDROID_LOG_INFO, <a class="el" href="../../d8/da5/mobileffmpeg_8h.html#a6e43beaa714b1bf01ce2271440786e38">LIB_NAME</a>, __VA_ARGS__)</td></tr>
<tr class="separator:a5512e59d578a380a441a70256af997d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a07f1b0d507acedeb7550353eba4f6e66"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/da5/mobileffmpeg_8h.html#a07f1b0d507acedeb7550353eba4f6e66">LOGW</a>(...)&#160;&#160;&#160;__android_log_print(ANDROID_LOG_WARN, <a class="el" href="../../d8/da5/mobileffmpeg_8h.html#a6e43beaa714b1bf01ce2271440786e38">LIB_NAME</a>, __VA_ARGS__)</td></tr>
<tr class="separator:a07f1b0d507acedeb7550353eba4f6e66"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae02538a80ad5fc009caec73487d11a8d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/da5/mobileffmpeg_8h.html#ae02538a80ad5fc009caec73487d11a8d">LOGE</a>(...)&#160;&#160;&#160;__android_log_print(ANDROID_LOG_ERROR, <a class="el" href="../../d8/da5/mobileffmpeg_8h.html#a6e43beaa714b1bf01ce2271440786e38">LIB_NAME</a>, __VA_ARGS__)</td></tr>
<tr class="separator:ae02538a80ad5fc009caec73487d11a8d"><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>
Functions</h2></td></tr>
<tr class="memitem:a59646e68c5d2e14938e2165ab3c6b151"><td class="memItemLeft" align="right" valign="top">JNIEXPORT jstring JNICALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/da5/mobileffmpeg_8h.html#a59646e68c5d2e14938e2165ab3c6b151">Java_com_arthenica_mobileffmpeg_FFmpeg_getFFmpegVersion</a> (JNIEnv *, jclass)</td></tr>
<tr class="separator:a59646e68c5d2e14938e2165ab3c6b151"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab25e0b810545b8ec5219ed72a72c9db3"><td class="memItemLeft" align="right" valign="top">JNIEXPORT jstring JNICALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/da5/mobileffmpeg_8h.html#ab25e0b810545b8ec5219ed72a72c9db3">Java_com_arthenica_mobileffmpeg_FFmpeg_getVersion</a> (JNIEnv *, jclass)</td></tr>
<tr class="separator:ab25e0b810545b8ec5219ed72a72c9db3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aac3b08be4d7283e7386378f981dc127c"><td class="memItemLeft" align="right" valign="top">JNIEXPORT jint JNICALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/da5/mobileffmpeg_8h.html#aac3b08be4d7283e7386378f981dc127c">Java_com_arthenica_mobileffmpeg_FFmpeg_execute</a> (JNIEnv *, jclass, jobjectArray)</td></tr>
<tr class="separator:aac3b08be4d7283e7386378f981dc127c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a68cdbe727bd7de847995a93f0c47ddda"><td class="memItemLeft" align="right" valign="top">JNIEXPORT void JNICALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/da5/mobileffmpeg_8h.html#a68cdbe727bd7de847995a93f0c47ddda">Java_com_arthenica_mobileffmpeg_FFmpeg_cancel</a> (JNIEnv *, jclass)</td></tr>
<tr class="separator:a68cdbe727bd7de847995a93f0c47ddda"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae50207e607b00d2da3284bfb3073b81d"><td class="memItemLeft" align="right" valign="top">JNIEXPORT void JNICALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/da5/mobileffmpeg_8h.html#ae50207e607b00d2da3284bfb3073b81d">Java_com_arthenica_mobileffmpeg_Config_enableNativeRedirection</a> (JNIEnv *, jclass)</td></tr>
<tr class="separator:ae50207e607b00d2da3284bfb3073b81d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab10bd6b77ae73fe22daa7596a5fd0265"><td class="memItemLeft" align="right" valign="top">JNIEXPORT void JNICALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/da5/mobileffmpeg_8h.html#ab10bd6b77ae73fe22daa7596a5fd0265">Java_com_arthenica_mobileffmpeg_Config_disableNativeRedirection</a> (JNIEnv *, jclass)</td></tr>
<tr class="separator:ab10bd6b77ae73fe22daa7596a5fd0265"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a231daf6b3157f2c276a158c7e4b53d3e"><td class="memItemLeft" align="right" valign="top">JNIEXPORT void JNICALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/da5/mobileffmpeg_8h.html#a231daf6b3157f2c276a158c7e4b53d3e">Java_com_arthenica_mobileffmpeg_Config_setNativeLogLevel</a> (JNIEnv *, jclass, jint)</td></tr>
<tr class="separator:a231daf6b3157f2c276a158c7e4b53d3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a54e490bc15eb2ad76f6439c2b793ddf0"><td class="memItemLeft" align="right" valign="top">JNIEXPORT jint JNICALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/da5/mobileffmpeg_8h.html#a54e490bc15eb2ad76f6439c2b793ddf0">Java_com_arthenica_mobileffmpeg_Config_getNativeLogLevel</a> (JNIEnv *, jclass)</td></tr>
<tr class="separator:a54e490bc15eb2ad76f6439c2b793ddf0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0250425604569423e8b3398dec588c87"><td class="memItemLeft" align="right" valign="top">JNIEXPORT jstring JNICALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/da5/mobileffmpeg_8h.html#a0250425604569423e8b3398dec588c87">Java_com_arthenica_mobileffmpeg_Config_getNativeFFmpegVersion</a> (JNIEnv *, jclass)</td></tr>
<tr class="separator:a0250425604569423e8b3398dec588c87"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6bd5582bfd016c6af95c2cfe8a9f1cec"><td class="memItemLeft" align="right" valign="top">JNIEXPORT jstring JNICALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/da5/mobileffmpeg_8h.html#a6bd5582bfd016c6af95c2cfe8a9f1cec">Java_com_arthenica_mobileffmpeg_Config_getNativeVersion</a> (JNIEnv *, jclass)</td></tr>
<tr class="separator:a6bd5582bfd016c6af95c2cfe8a9f1cec"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a44b5cc5aca302ad683b6a88974157d1f"><td class="memItemLeft" align="right" valign="top">JNIEXPORT jint JNICALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/da5/mobileffmpeg_8h.html#a44b5cc5aca302ad683b6a88974157d1f">Java_com_arthenica_mobileffmpeg_Config_nativeExecute</a> (JNIEnv *, jclass, jobjectArray)</td></tr>
<tr class="separator:a44b5cc5aca302ad683b6a88974157d1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9be298ab41d2b4192bd2caee9e5c7b4f"><td class="memItemLeft" align="right" valign="top">JNIEXPORT void JNICALL&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/da5/mobileffmpeg_8h.html#a9be298ab41d2b4192bd2caee9e5c7b4f">Java_com_arthenica_mobileffmpeg_Config_nativeCancel</a> (JNIEnv *, jclass)</td></tr>
<tr class="separator:a9be298ab41d2b4192bd2caee9e5c7b4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Function Documentation</h2>
<a id="a68cdbe727bd7de847995a93f0c47ddda"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a68cdbe727bd7de847995a93f0c47ddda">&#9670;&nbsp;</a></span>Java_com_arthenica_mobileffmpeg_FFmpeg_cancel()</h2>
<h2 class="groupheader">Macro Definition Documentation</h2>
<a id="a6e43beaa714b1bf01ce2271440786e38"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6e43beaa714b1bf01ce2271440786e38">&#9670;&nbsp;</a></span>LIB_NAME</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">JNIEXPORT void JNICALL Java_com_arthenica_mobileffmpeg_FFmpeg_cancel </td>
<td class="memname">#define LIB_NAME&#160;&#160;&#160;&quot;mobile-ffmpeg&quot;</td>
</tr>
</table>
</div><div class="memdoc">
<p>Defines tag used for Android logging. </p>
<p class="definition">Definition at line <a class="el" href="../../d8/da5/mobileffmpeg_8h_source.html#l00033">33</a> of file <a class="el" href="../../d8/da5/mobileffmpeg_8h_source.html">mobileffmpeg.h</a>.</p>
</div>
</div>
<a id="aa839997a58e14061861cd634fdb7664d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa839997a58e14061861cd634fdb7664d">&#9670;&nbsp;</a></span>LOGD</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LOGD</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>...</em></td><td>)</td>
<td>&#160;&#160;&#160;__android_log_print(ANDROID_LOG_DEBUG, <a class="el" href="../../d8/da5/mobileffmpeg_8h.html#a6e43beaa714b1bf01ce2271440786e38">LIB_NAME</a>, __VA_ARGS__)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Debug Android logging macro. </p>
<p class="definition">Definition at line <a class="el" href="../../d8/da5/mobileffmpeg_8h_source.html#l00039">39</a> of file <a class="el" href="../../d8/da5/mobileffmpeg_8h_source.html">mobileffmpeg.h</a>.</p>
</div>
</div>
<a id="ae02538a80ad5fc009caec73487d11a8d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae02538a80ad5fc009caec73487d11a8d">&#9670;&nbsp;</a></span>LOGE</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LOGE</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>...</em></td><td>)</td>
<td>&#160;&#160;&#160;__android_log_print(ANDROID_LOG_ERROR, <a class="el" href="../../d8/da5/mobileffmpeg_8h.html#a6e43beaa714b1bf01ce2271440786e38">LIB_NAME</a>, __VA_ARGS__)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Error Android logging macro. </p>
<p class="definition">Definition at line <a class="el" href="../../d8/da5/mobileffmpeg_8h_source.html#l00048">48</a> of file <a class="el" href="../../d8/da5/mobileffmpeg_8h_source.html">mobileffmpeg.h</a>.</p>
</div>
</div>
<a id="a5512e59d578a380a441a70256af997d0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5512e59d578a380a441a70256af997d0">&#9670;&nbsp;</a></span>LOGI</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LOGI</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>...</em></td><td>)</td>
<td>&#160;&#160;&#160;__android_log_print(ANDROID_LOG_INFO, <a class="el" href="../../d8/da5/mobileffmpeg_8h.html#a6e43beaa714b1bf01ce2271440786e38">LIB_NAME</a>, __VA_ARGS__)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Info Android logging macro. </p>
<p class="definition">Definition at line <a class="el" href="../../d8/da5/mobileffmpeg_8h_source.html#l00042">42</a> of file <a class="el" href="../../d8/da5/mobileffmpeg_8h_source.html">mobileffmpeg.h</a>.</p>
</div>
</div>
<a id="ab78bd305488c62caf8515ee765b1ed49"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab78bd305488c62caf8515ee765b1ed49">&#9670;&nbsp;</a></span>LOGV</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LOGV</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>...</em></td><td>)</td>
<td>&#160;&#160;&#160;__android_log_print(ANDROID_LOG_VERBOSE, <a class="el" href="../../d8/da5/mobileffmpeg_8h.html#a6e43beaa714b1bf01ce2271440786e38">LIB_NAME</a>, __VA_ARGS__)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Verbose Android logging macro. </p>
<p class="definition">Definition at line <a class="el" href="../../d8/da5/mobileffmpeg_8h_source.html#l00036">36</a> of file <a class="el" href="../../d8/da5/mobileffmpeg_8h_source.html">mobileffmpeg.h</a>.</p>
</div>
</div>
<a id="a07f1b0d507acedeb7550353eba4f6e66"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a07f1b0d507acedeb7550353eba4f6e66">&#9670;&nbsp;</a></span>LOGW</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LOGW</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>...</em></td><td>)</td>
<td>&#160;&#160;&#160;__android_log_print(ANDROID_LOG_WARN, <a class="el" href="../../d8/da5/mobileffmpeg_8h.html#a6e43beaa714b1bf01ce2271440786e38">LIB_NAME</a>, __VA_ARGS__)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Warn Android logging macro. </p>
<p class="definition">Definition at line <a class="el" href="../../d8/da5/mobileffmpeg_8h_source.html#l00045">45</a> of file <a class="el" href="../../d8/da5/mobileffmpeg_8h_source.html">mobileffmpeg.h</a>.</p>
</div>
</div>
<a id="ab40bb25ef4ec0f35c70e84dbad36cfc2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab40bb25ef4ec0f35c70e84dbad36cfc2">&#9670;&nbsp;</a></span>MOBILE_FFMPEG_VERSION</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define MOBILE_FFMPEG_VERSION&#160;&#160;&#160;&quot;2.2&quot;</td>
</tr>
</table>
</div><div class="memdoc">
<p>Library version string </p>
<p class="definition">Definition at line <a class="el" href="../../d8/da5/mobileffmpeg_8h_source.html#l00030">30</a> of file <a class="el" href="../../d8/da5/mobileffmpeg_8h_source.html">mobileffmpeg.h</a>.</p>
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="ab10bd6b77ae73fe22daa7596a5fd0265"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab10bd6b77ae73fe22daa7596a5fd0265">&#9670;&nbsp;</a></span>Java_com_arthenica_mobileffmpeg_Config_disableNativeRedirection()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">JNIEXPORT void JNICALL Java_com_arthenica_mobileffmpeg_Config_disableNativeRedirection </td>
<td>(</td>
<td class="paramtype">JNIEnv *&#160;</td>
<td class="paramname"><em>env</em>, </td>
@@ -108,7 +274,199 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p>Cancels an ongoing operation.</p>
<p>Disables log and statistics redirection.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">env</td><td>pointer to native method interface </td></tr>
<tr><td class="paramname">reference</td><td>to the class on which this method is invoked </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html#l00569">569</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
</div>
</div>
<a id="ae50207e607b00d2da3284bfb3073b81d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae50207e607b00d2da3284bfb3073b81d">&#9670;&nbsp;</a></span>Java_com_arthenica_mobileffmpeg_Config_enableNativeRedirection()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">JNIEXPORT void JNICALL Java_com_arthenica_mobileffmpeg_Config_enableNativeRedirection </td>
<td>(</td>
<td class="paramtype">JNIEnv *&#160;</td>
<td class="paramname"><em>env</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">jclass&#160;</td>
<td class="paramname"><em>object</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Enables log and statistics redirection.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">env</td><td>pointer to native method interface </td></tr>
<tr><td class="paramname">reference</td><td>to the class on which this method is invoked </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html#l00542">542</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
</div>
</div>
<a id="a0250425604569423e8b3398dec588c87"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0250425604569423e8b3398dec588c87">&#9670;&nbsp;</a></span>Java_com_arthenica_mobileffmpeg_Config_getNativeFFmpegVersion()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">JNIEXPORT jstring JNICALL Java_com_arthenica_mobileffmpeg_Config_getNativeFFmpegVersion </td>
<td>(</td>
<td class="paramtype">JNIEnv *&#160;</td>
<td class="paramname"><em>env</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">jclass&#160;</td>
<td class="paramname"><em>object</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns FFmpeg version bundled within the library natively.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">env</td><td>pointer to native method interface </td></tr>
<tr><td class="paramname">object</td><td>reference to the class on which this method is invoked </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>FFmpeg version string </dd></dl>
<p class="definition">Definition at line <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html#l00594">594</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
</div>
</div>
<a id="a54e490bc15eb2ad76f6439c2b793ddf0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a54e490bc15eb2ad76f6439c2b793ddf0">&#9670;&nbsp;</a></span>Java_com_arthenica_mobileffmpeg_Config_getNativeLogLevel()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">JNIEXPORT jint JNICALL Java_com_arthenica_mobileffmpeg_Config_getNativeLogLevel </td>
<td>(</td>
<td class="paramtype">JNIEnv *&#160;</td>
<td class="paramname"><em>env</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">jclass&#160;</td>
<td class="paramname"><em>object</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns current log level.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">env</td><td>pointer to native method interface </td></tr>
<tr><td class="paramname">reference</td><td>to the class on which this method is invoked </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html#l00532">532</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
</div>
</div>
<a id="a6bd5582bfd016c6af95c2cfe8a9f1cec"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6bd5582bfd016c6af95c2cfe8a9f1cec">&#9670;&nbsp;</a></span>Java_com_arthenica_mobileffmpeg_Config_getNativeVersion()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">JNIEXPORT jstring JNICALL Java_com_arthenica_mobileffmpeg_Config_getNativeVersion </td>
<td>(</td>
<td class="paramtype">JNIEnv *&#160;</td>
<td class="paramname"><em>env</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">jclass&#160;</td>
<td class="paramname"><em>object</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns MobileFFmpeg library version natively.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">env</td><td>pointer to native method interface </td></tr>
<tr><td class="paramname">object</td><td>reference to the class on which this method is invoked </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>MobileFFmpeg version string </dd></dl>
<p class="definition">Definition at line <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html#l00605">605</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
</div>
</div>
<a id="a9be298ab41d2b4192bd2caee9e5c7b4f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9be298ab41d2b4192bd2caee9e5c7b4f">&#9670;&nbsp;</a></span>Java_com_arthenica_mobileffmpeg_Config_nativeCancel()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">JNIEXPORT void JNICALL Java_com_arthenica_mobileffmpeg_Config_nativeCancel </td>
<td>(</td>
<td class="paramtype">JNIEnv *&#160;</td>
<td class="paramname"><em>env</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">jclass&#160;</td>
<td class="paramname"><em>object</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Cancels an ongoing operation natively.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">env</td><td>pointer to native method interface </td></tr>
@@ -117,18 +475,18 @@ Functions</h2></td></tr>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html#l00150">150</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html#l00670">670</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
</div>
</div>
<a id="aac3b08be4d7283e7386378f981dc127c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aac3b08be4d7283e7386378f981dc127c">&#9670;&nbsp;</a></span>Java_com_arthenica_mobileffmpeg_FFmpeg_execute()</h2>
<a id="a44b5cc5aca302ad683b6a88974157d1f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a44b5cc5aca302ad683b6a88974157d1f">&#9670;&nbsp;</a></span>Java_com_arthenica_mobileffmpeg_Config_nativeExecute()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">JNIEXPORT jint JNICALL Java_com_arthenica_mobileffmpeg_FFmpeg_execute </td>
<td class="memname">JNIEXPORT jint JNICALL Java_com_arthenica_mobileffmpeg_Config_nativeExecute </td>
<td>(</td>
<td class="paramtype">JNIEnv *&#160;</td>
<td class="paramname"><em>env</em>, </td>
@@ -152,7 +510,7 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p>Synchronously executes FFmpeg command with arguments provided.</p>
<p>Synchronously executes FFmpeg command natively with arguments provided.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">env</td><td>pointer to native method interface </td></tr>
@@ -163,18 +521,18 @@ Functions</h2></td></tr>
</dl>
<dl class="section return"><dt>Returns</dt><dd>zero on successful execution, non-zero on error </dd></dl>
<p class="definition">Definition at line <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html#l00097">97</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html#l00617">617</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
</div>
</div>
<a id="a59646e68c5d2e14938e2165ab3c6b151"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a59646e68c5d2e14938e2165ab3c6b151">&#9670;&nbsp;</a></span>Java_com_arthenica_mobileffmpeg_FFmpeg_getFFmpegVersion()</h2>
<a id="a231daf6b3157f2c276a158c7e4b53d3e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a231daf6b3157f2c276a158c7e4b53d3e">&#9670;&nbsp;</a></span>Java_com_arthenica_mobileffmpeg_Config_setNativeLogLevel()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">JNIEXPORT jstring JNICALL Java_com_arthenica_mobileffmpeg_FFmpeg_getFFmpegVersion </td>
<td class="memname">JNIEXPORT void JNICALL Java_com_arthenica_mobileffmpeg_Config_setNativeLogLevel </td>
<td>(</td>
<td class="paramtype">JNIEnv *&#160;</td>
<td class="paramname"><em>env</em>, </td>
@@ -183,46 +541,13 @@ Functions</h2></td></tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">jclass&#160;</td>
<td class="paramname"><em>object</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns FFmpeg version bundled within the library.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">env</td><td>pointer to native method interface </td></tr>
<tr><td class="paramname">object</td><td>reference to the class on which this method is invoked </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>FFmpeg version string </dd></dl>
<p class="definition">Definition at line <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html#l00074">74</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
</div>
</div>
<a id="ab25e0b810545b8ec5219ed72a72c9db3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab25e0b810545b8ec5219ed72a72c9db3">&#9670;&nbsp;</a></span>Java_com_arthenica_mobileffmpeg_FFmpeg_getVersion()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">JNIEXPORT jstring JNICALL Java_com_arthenica_mobileffmpeg_FFmpeg_getVersion </td>
<td>(</td>
<td class="paramtype">JNIEnv *&#160;</td>
<td class="paramname"><em>env</em>, </td>
<td class="paramname"><em>object</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">jclass&#160;</td>
<td class="paramname"><em>object</em>&#160;</td>
<td class="paramtype">jint&#160;</td>
<td class="paramname"><em>level</em>&#160;</td>
</tr>
<tr>
<td></td>
@@ -231,24 +556,24 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p>Returns MobileFFmpeg library version.</p>
<p>Sets log level.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">env</td><td>pointer to native method interface </td></tr>
<tr><td class="paramname">object</td><td>reference to the class on which this method is invoked </td></tr>
<tr><td class="paramname">reference</td><td>to the class on which this method is invoked </td></tr>
<tr><td class="paramname">log</td><td>level </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>MobileFFmpeg version string </dd></dl>
<p class="definition">Definition at line <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html#l00085">85</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html#l00522">522</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:07 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -1160,7 +1160,7 @@ Variables</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Tue Sep 11 2018 12:10:36 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -226,7 +226,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -513,7 +513,7 @@ Variables</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">switch</span> (<a class="code" href="../../d2/dc3/struct_callback_data.html#a24877dd94bec8b5bad7a0ed6893f7c28">type</a>) {\</div><div class="line"> case <span class="charliteral">&#39;g&#39;</span>:\</div><div class="line"> meta = &amp;context-&gt;metadata;\</div><div class="line"> break;\</div><div class="line"> case <span class="charliteral">&#39;c&#39;</span>:\</div><div class="line"> METADATA_CHECK_INDEX(index, context-&gt;nb_chapters, <span class="stringliteral">&quot;chapter&quot;</span>)\</div><div class="line"> meta = &amp;context-&gt;chapters[index]-&gt;metadata;\</div><div class="line"> break;\</div><div class="line"> case <span class="charliteral">&#39;p&#39;</span>:\</div><div class="line"> METADATA_CHECK_INDEX(index, context-&gt;nb_programs, <span class="stringliteral">&quot;program&quot;</span>)\</div><div class="line"> meta = &amp;context-&gt;programs[index]-&gt;metadata;\</div><div class="line"> break;\</div><div class="line"> case <span class="charliteral">&#39;s&#39;</span>:\</div><div class="line"> break; <span class="comment">/* handled separately below */</span> \</div><div class="line"> default: av_assert0(0);\</div><div class="line"> }\</div><div class="ttc" id="struct_callback_data_html_a24877dd94bec8b5bad7a0ed6893f7c28"><div class="ttname"><a href="../../d2/dc3/struct_callback_data.html#a24877dd94bec8b5bad7a0ed6893f7c28">CallbackData::type</a></div><div class="ttdeci">int type</div><div class="ttdef"><b>Definition:</b> <a href="../../d9/dae/mobileffmpeg__config_8c_source.html#l00034">mobileffmpeg_config.c:34</a></div></div>
<b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">switch</span> (<a class="code" href="../../d2/dc3/struct_callback_data.html#a24877dd94bec8b5bad7a0ed6893f7c28">type</a>) {\</div><div class="line"> case <span class="charliteral">&#39;g&#39;</span>:\</div><div class="line"> meta = &amp;context-&gt;metadata;\</div><div class="line"> break;\</div><div class="line"> case <span class="charliteral">&#39;c&#39;</span>:\</div><div class="line"> METADATA_CHECK_INDEX(index, context-&gt;nb_chapters, <span class="stringliteral">&quot;chapter&quot;</span>)\</div><div class="line"> meta = &amp;context-&gt;chapters[index]-&gt;metadata;\</div><div class="line"> break;\</div><div class="line"> case <span class="charliteral">&#39;p&#39;</span>:\</div><div class="line"> METADATA_CHECK_INDEX(index, context-&gt;nb_programs, <span class="stringliteral">&quot;program&quot;</span>)\</div><div class="line"> meta = &amp;context-&gt;programs[index]-&gt;metadata;\</div><div class="line"> break;\</div><div class="line"> case <span class="charliteral">&#39;s&#39;</span>:\</div><div class="line"> break; <span class="comment">/* handled separately below */</span> \</div><div class="line"> default: av_assert0(0);\</div><div class="line"> }\</div><div class="ttc" id="struct_callback_data_html_a24877dd94bec8b5bad7a0ed6893f7c28"><div class="ttname"><a href="../../d2/dc3/struct_callback_data.html#a24877dd94bec8b5bad7a0ed6893f7c28">CallbackData::type</a></div><div class="ttdeci">int type</div><div class="ttdef"><b>Definition:</b> <a href="../../dd/d16/mobileffmpeg_8c_source.html#l00038">mobileffmpeg.c:38</a></div></div>
</div><!-- fragment -->
</div>
</div>
@@ -4086,7 +4086,7 @@ Variables</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:07 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -473,7 +473,7 @@ $(function() {
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:07 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -190,7 +190,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -154,7 +154,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -139,7 +139,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -1312,7 +1312,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -226,7 +226,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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 it is too large Load Diff
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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -226,7 +226,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -136,7 +136,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -232,7 +232,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -154,7 +154,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -2296,7 +2296,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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>
+3 -5
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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -79,15 +79,13 @@ $(function() {
<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="d8/da5/mobileffmpeg_8h_source.html"><span class="icondoc"></span></a><a class="el" href="d8/da5/mobileffmpeg_8h.html" target="_self">mobileffmpeg.h</a></td><td class="desc"></td></tr>
<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="d2/d3f/mobileffmpeg__abidetect_8c_source.html"><span class="icondoc"></span></a><a class="el" href="d2/d3f/mobileffmpeg__abidetect_8c.html" target="_self">mobileffmpeg_abidetect.c</a></td><td class="desc"></td></tr>
<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="d3/db9/mobileffmpeg__abidetect_8h_source.html"><span class="icondoc"></span></a><a class="el" href="d3/db9/mobileffmpeg__abidetect_8h.html" target="_self">mobileffmpeg_abidetect.h</a></td><td class="desc"></td></tr>
<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="d9/dae/mobileffmpeg__config_8c_source.html"><span class="icondoc"></span></a><a class="el" href="d9/dae/mobileffmpeg__config_8c.html" target="_self">mobileffmpeg_config.c</a></td><td class="desc"></td></tr>
<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="d8/d0c/mobileffmpeg__config_8h_source.html"><span class="icondoc"></span></a><a class="el" href="d8/d0c/mobileffmpeg__config_8h.html" target="_self">mobileffmpeg_config.h</a></td><td class="desc"></td></tr>
<tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="d2/d70/mobileffmpeg__exception_8h_source.html"><span class="icondoc"></span></a><a class="el" href="d2/d70/mobileffmpeg__exception_8h.html" target="_self">mobileffmpeg_exception.h</a></td><td class="desc"></td></tr>
<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="d2/d70/mobileffmpeg__exception_8h_source.html"><span class="icondoc"></span></a><a class="el" href="d2/d70/mobileffmpeg__exception_8h.html" target="_self">mobileffmpeg_exception.h</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -114,7 +114,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -78,7 +78,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -118,7 +118,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -126,7 +126,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -102,7 +102,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -195,7 +195,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -98,7 +98,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -126,7 +126,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -113,7 +113,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -75,7 +75,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -110,7 +110,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -110,7 +110,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -263,7 +263,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -97,7 +97,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -96,7 +96,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -75,7 +75,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -104,7 +104,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -197,7 +197,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -96,7 +96,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -82,7 +82,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -75,7 +75,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -114,7 +114,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -78,7 +78,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -118,7 +118,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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">2.1</span>
&#160;<span id="projectnumber">2.2</span>
</div>
</td>
</tr>
@@ -126,7 +126,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Sep 5 2018 00:38:08 for MobileFFmpeg Android API by &#160;<a href="http://www.doxygen.org/index.html">
Generated on Thu Nov 8 2018 23:19:14 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>

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