Compare commits
56 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 46b538107b | |||
| fd11dd5004 | |||
| 9da84b3edb | |||
| 639dbb3ccb | |||
| d8b1754272 | |||
| 73e2cc557f | |||
| b70229b9e7 | |||
| 47a9b728d7 | |||
| 32f25905cb | |||
| 35c26b390c | |||
| b9549a04e7 | |||
| c6840985e6 | |||
| 8e671be23d | |||
| 807051ce3c | |||
| c38ebd52b6 | |||
| 37ba9a95c1 | |||
| 99ae2531a4 | |||
| 60accc6233 | |||
| 35fd709066 | |||
| 57ebc9a177 | |||
| dcb1935b57 | |||
| 815b122cef | |||
| f3a279348d | |||
| 920aa583b9 | |||
| 1e7a4bb3f2 | |||
| e92ba21784 | |||
| 0d47a43829 | |||
| 77d4f80ba6 | |||
| ab0ecc624d | |||
| 7d9747789b | |||
| dfdadf656b | |||
| ef03a31d23 | |||
| 8041678c13 | |||
| 283ebe29a4 | |||
| bdbabb5a18 | |||
| 4e078bb9e8 | |||
| 240def7581 | |||
| cc1a5bd4b2 | |||
| 6ae6627d97 | |||
| b151e6ab81 | |||
| e3c0e4d2e7 | |||
| 9dec4e0353 | |||
| 062ca46069 | |||
| 267e8236f5 | |||
| 4f3380c7fe | |||
| 7692c42c64 | |||
| 71a1289c32 | |||
| 911a8f5478 | |||
| 54fe0bd773 | |||
| 7c99fcdeac | |||
| 47c590c2b1 | |||
| 3e307bb4d6 | |||
| feece0ea50 | |||
| 540e180e53 | |||
| 38398cb128 | |||
| a416890244 |
@@ -1,20 +1,15 @@
|
||||
# MobileFFmpeg    [](https://travis-ci.org/tanersener/mobile-ffmpeg)
|
||||
# MobileFFmpeg [](https://opencollective.com/mobile-ffmpeg)    [](https://travis-ci.org/tanersener/mobile-ffmpeg)
|
||||
|
||||
FFmpeg for Android, iOS and tvOS
|
||||
|
||||
<img src="https://github.com/tanersener/mobile-ffmpeg/blob/master/docs/assets/mobile-ffmpeg-logo-v7.png" width="320">
|
||||
|
||||
### 0. Backers via Patreon
|
||||
|
||||
<a href="https://github.com/wjzhangcsu/" target="_blank">
|
||||
<img width="40px" src="https://avatars0.githubusercontent.com/u/11661685?s=460&v=4">
|
||||
</a>
|
||||
|
||||
### 1. Features
|
||||
- Includes both `FFmpeg` and `FFprobe`
|
||||
- Use binaries available at `Github`/`JCenter`/`CocoaPods` or build your own version with external libraries you need
|
||||
- Supports
|
||||
- Android, iOS and tvOS
|
||||
- FFmpeg `v3.4.x`, `v4.0.x`, `v4.1`, `v4.2-dev` and `v4.3-dev` releases
|
||||
- FFmpeg `v3.4.x`, `v4.0.x`, `v4.1`, `v4.2` and `v4.3-dev` releases
|
||||
- 28 external libraries
|
||||
|
||||
`chromaprint`, `fontconfig`, `freetype`, `fribidi`, `gmp`, `gnutls`, `kvazaar`, `lame`, `libaom`, `libass`, `libiconv`, `libilbc`, `libtheora`, `libvorbis`, `libvpx`, `libwebp`, `libxml2`, `opencore-amr`, `openh264`, `opus`, `sdl`, `shine`, `snappy`, `soxr`, `speex`, `tesseract`, `twolame`, `wavpack`
|
||||
@@ -23,6 +18,8 @@ FFmpeg for Android, iOS and tvOS
|
||||
|
||||
`vid.stab`, `x264`, `x265`, `xvidcore`
|
||||
|
||||
- Concurrent execution
|
||||
|
||||
- Exposes both FFmpeg library and MobileFFmpeg wrapper library capabilities
|
||||
- Includes cross-compile instructions for 44 open-source libraries
|
||||
|
||||
@@ -40,7 +37,7 @@ FFmpeg for Android, iOS and tvOS
|
||||
|
||||
#### 1.2 iOS
|
||||
- Builds `armv7`, `armv7s`, `arm64`, `arm64e`, `i386` and `x86_64` architectures
|
||||
- Supports `bzip2`, `zlib` system libraries and `AudioToolbox`, `CoreImage`, `VideoToolbox`, `AVFoundation` system frameworks
|
||||
- Supports `bzip2`, `zlib`, `iconv` system libraries and `AudioToolbox`, `CoreImage`, `VideoToolbox`, `AVFoundation` system frameworks
|
||||
- Objective-C API
|
||||
- Camera access
|
||||
- `ARC` enabled library
|
||||
@@ -50,7 +47,7 @@ FFmpeg for Android, iOS and tvOS
|
||||
|
||||
#### 1.3 tvOS
|
||||
- Builds `arm64` and `x86_64` architectures
|
||||
- Supports `bzip2`, `zlib` system libraries and `AudioToolbox`, `CoreImage`, `VideoToolbox` system frameworks
|
||||
- Supports `bzip2`, `zlib`, `iconv` system libraries and `AudioToolbox`, `CoreImage`, `VideoToolbox` system frameworks
|
||||
- Objective-C API
|
||||
- `ARC` enabled library
|
||||
- Built with `-fembed-bitcode` flag
|
||||
@@ -96,11 +93,11 @@ Please remember that some parts of `FFmpeg` are licensed under the `GPL` and onl
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><sup>ios system libraries</sup></td>
|
||||
<td align="center" colspan=8><sup>zlib</sup><br><sup>AudioToolbox</sup><br><sup>AVFoundation</sup><br><sup>CoreImage</sup><br><sup>VideoToolbox</sup><br><sup>bzip2</sup></td>
|
||||
<td align="center" colspan=8><sup>zlib</sup><br><sup>AudioToolbox</sup><br><sup>AVFoundation</sup><br><sup>CoreImage</sup><br><sup>iconv</sup><br><sup>VideoToolbox</sup><br><sup>bzip2</sup></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><sup>tvos system libraries</sup></td>
|
||||
<td align="center" colspan=8><sup>zlib</sup><br><sup>AudioToolbox</sup><br><sup>CoreImage</sup><br><sup>VideoToolbox</sup><br><sup>bzip2</sup></td>
|
||||
<td align="center" colspan=8><sup>zlib</sup><br><sup>AudioToolbox</sup><br><sup>CoreImage</sup><br><sup>iconv</sup><br><sup>VideoToolbox</sup><br><sup>bzip2</sup></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -116,25 +113,52 @@ Please remember that some parts of `FFmpeg` are licensed under the `GPL` and onl
|
||||
- Since `v4.2`, `chromaprint`, `sdl` and `tesseract` libraries are not included in binary releases. You can still build them and include in your releases
|
||||
|
||||
- `AVFoundation` is not available on `tvOS`, `VideoToolbox` is not available on `tvOS` LTS releases
|
||||
|
||||
- Since `v4.3.1`, `iOS` and `tvOS` releases started to use `iconv` system library instead of `iconv` external library
|
||||
|
||||
#### 2.1 Android
|
||||
1. Add MobileFFmpeg dependency to your `build.gradle` in `mobile-ffmpeg-<package name>` format
|
||||
```
|
||||
dependencies {
|
||||
implementation 'com.arthenica:mobile-ffmpeg-full:4.3'
|
||||
implementation 'com.arthenica:mobile-ffmpeg-full:4.3.1'
|
||||
}
|
||||
```
|
||||
|
||||
2. Execute commands.
|
||||
2. Execute FFmpeg commands.
|
||||
```
|
||||
import com.arthenica.mobileffmpeg.Config;
|
||||
import com.arthenica.mobileffmpeg.FFmpeg;
|
||||
|
||||
FFmpeg.execute("-i file1.mp4 -c:v mpeg4 file2.mp4");
|
||||
int rc = FFmpeg.execute("-i file1.mp4 -c:v mpeg4 file2.mp4");
|
||||
|
||||
if (rc == RETURN_CODE_SUCCESS) {
|
||||
Log.i(Config.TAG, "Command execution completed successfully.");
|
||||
} else if (rc == RETURN_CODE_CANCEL) {
|
||||
Log.i(Config.TAG, "Command execution cancelled by user.");
|
||||
} else {
|
||||
Log.i(Config.TAG, String.format("Command execution failed with rc=%d and the output below.", rc));
|
||||
Config.printLastCommandOutput(Log.INFO);
|
||||
}
|
||||
```
|
||||
|
||||
3. Check execution output.
|
||||
3. Execute FFprobe commands.
|
||||
```
|
||||
int rc = FFmpeg.getLastReturnCode();
|
||||
import com.arthenica.mobileffmpeg.Config;
|
||||
import com.arthenica.mobileffmpeg.FFprobe;
|
||||
|
||||
int rc = FFprobe.execute("-i file1.mp4");
|
||||
|
||||
if (rc == RETURN_CODE_SUCCESS) {
|
||||
Log.i(Config.TAG, "Command execution completed successfully.");
|
||||
} else {
|
||||
Log.i(Config.TAG, String.format("Command execution failed with rc=%d and the output below.", rc));
|
||||
Config.printLastCommandOutput(Log.INFO);
|
||||
}
|
||||
```
|
||||
|
||||
4. Check execution output later.
|
||||
```
|
||||
int rc = Config.getLastReturnCode();
|
||||
|
||||
if (rc == RETURN_CODE_SUCCESS) {
|
||||
Log.i(Config.TAG, "Command execution completed successfully.");
|
||||
@@ -142,31 +166,31 @@ Please remember that some parts of `FFmpeg` are licensed under the `GPL` and onl
|
||||
Log.i(Config.TAG, "Command execution cancelled by user.");
|
||||
} else {
|
||||
Log.i(Config.TAG, String.format("Command execution failed with rc=%d and the output below.", rc));
|
||||
FFmpeg.printLastCommandOutput(Log.INFO);
|
||||
Config.printLastCommandOutput(Log.INFO);
|
||||
}
|
||||
```
|
||||
|
||||
4. Stop an ongoing operation.
|
||||
5. Stop an ongoing FFmpeg operation.
|
||||
```
|
||||
FFmpeg.cancel();
|
||||
```
|
||||
|
||||
5. Get media information for a file.
|
||||
6. Get media information for a file.
|
||||
```
|
||||
MediaInformation info = FFmpeg.getMediaInformation("<file path or uri>");
|
||||
MediaInformation info = FFprobe.getMediaInformation("<file path or uri>");
|
||||
```
|
||||
|
||||
6. Record video using Android camera.
|
||||
7. Record video using Android camera.
|
||||
```
|
||||
FFmpeg.execute("-f android_camera -i 0:0 -r 30 -pixel_format bgr0 -t 00:00:05 <record file path>");
|
||||
```
|
||||
|
||||
7. List enabled external libraries.
|
||||
8. List enabled external libraries.
|
||||
```
|
||||
List<String> externalLibraries = Config.getExternalLibraries();
|
||||
```
|
||||
|
||||
8. Enable log callback.
|
||||
9. Enable log callback.
|
||||
```
|
||||
Config.enableLogCallback(new LogCallback() {
|
||||
public void apply(LogMessage message) {
|
||||
@@ -175,7 +199,7 @@ Please remember that some parts of `FFmpeg` are licensed under the `GPL` and onl
|
||||
});
|
||||
```
|
||||
|
||||
9. Enable statistics callback.
|
||||
10. Enable statistics callback.
|
||||
```
|
||||
Config.enableStatisticsCallback(new StatisticsCallback() {
|
||||
public void apply(Statistics newStatistics) {
|
||||
@@ -184,12 +208,12 @@ Please remember that some parts of `FFmpeg` are licensed under the `GPL` and onl
|
||||
});
|
||||
```
|
||||
|
||||
10. Set log level.
|
||||
11. Set log level.
|
||||
```
|
||||
Config.setLogLevel(Level.AV_LOG_FATAL);
|
||||
```
|
||||
|
||||
11. Register custom fonts directory.
|
||||
12. Register custom fonts directory.
|
||||
```
|
||||
Config.setFontDirectory(this, "<folder with fonts>", Collections.EMPTY_MAP);
|
||||
```
|
||||
@@ -199,25 +223,50 @@ Please remember that some parts of `FFmpeg` are licensed under the `GPL` and onl
|
||||
|
||||
- iOS
|
||||
```
|
||||
pod 'mobile-ffmpeg-full', '~> 4.3'
|
||||
pod 'mobile-ffmpeg-full', '~> 4.3.1'
|
||||
```
|
||||
|
||||
- tvOS
|
||||
```
|
||||
pod 'mobile-ffmpeg-tv-full', '~> 4.3'
|
||||
pod 'mobile-ffmpeg-tvos-full', '~> 4.3.1'
|
||||
```
|
||||
|
||||
2. Execute commands.
|
||||
2. Execute FFmpeg commands.
|
||||
```
|
||||
#import <mobileffmpeg/MobileFFmpegConfig.h>
|
||||
#import <mobileffmpeg/MobileFFmpeg.h>
|
||||
|
||||
[MobileFFmpeg execute: @"-i file1.mp4 -c:v mpeg4 file2.mp4"];
|
||||
int rc = [MobileFFmpeg execute: @"-i file1.mp4 -c:v mpeg4 file2.mp4"];
|
||||
|
||||
if (rc == RETURN_CODE_SUCCESS) {
|
||||
NSLog(@"Command execution completed successfully.\n");
|
||||
} else if (rc == RETURN_CODE_CANCEL) {
|
||||
NSLog(@"Command execution cancelled by user.\n");
|
||||
} else {
|
||||
NSLog(@"Command execution failed with rc=%d and output=%@.\n", rc, [MobileFFmpegConfig getLastCommandOutput]);
|
||||
}
|
||||
```
|
||||
|
||||
3. Check execution output.
|
||||
3. Execute FFprobe commands.
|
||||
```
|
||||
int rc = [MobileFFmpeg getLastReturnCode];
|
||||
NSString *output = [MobileFFmpeg getLastCommandOutput];
|
||||
#import <mobileffmpeg/MobileFFmpegConfig.h>
|
||||
#import <mobileffmpeg/MobileFFprobe.h>
|
||||
|
||||
int rc = [MobileFFprobe execute: @"-i file1.mp4"];
|
||||
|
||||
if (rc == RETURN_CODE_SUCCESS) {
|
||||
NSLog(@"Command execution completed successfully.\n");
|
||||
} else if (rc == RETURN_CODE_CANCEL) {
|
||||
NSLog(@"Command execution cancelled by user.\n");
|
||||
} else {
|
||||
NSLog(@"Command execution failed with rc=%d and output=%@.\n", rc, [MobileFFmpegConfig getLastCommandOutput]);
|
||||
}
|
||||
```
|
||||
|
||||
4. Check execution output later.
|
||||
```
|
||||
int rc = [MobileFFmpegConfig getLastReturnCode];
|
||||
NSString *output = [MobileFFmpegConfig getLastCommandOutput];
|
||||
|
||||
if (rc == RETURN_CODE_SUCCESS) {
|
||||
NSLog(@"Command execution completed successfully.\n");
|
||||
@@ -228,28 +277,28 @@ Please remember that some parts of `FFmpeg` are licensed under the `GPL` and onl
|
||||
}
|
||||
```
|
||||
|
||||
4. Stop an ongoing operation.
|
||||
5. Stop an ongoing FFmpeg operation.
|
||||
```
|
||||
[MobileFFmpeg cancel];
|
||||
```
|
||||
|
||||
5. Get media information for a file.
|
||||
6. Get media information for a file.
|
||||
```
|
||||
MediaInformation *mediaInformation = [MobileFFmpeg getMediaInformation:@"<file path or uri>"];
|
||||
MediaInformation *mediaInformation = [MobileFFprobe getMediaInformation:@"<file path or uri>"];
|
||||
```
|
||||
|
||||
6. Record video and audio using iOS camera. This operation is not supported on `tvOS` since `AVFoundation` is not available on `tvOS`.
|
||||
7. Record video and audio using iOS camera. This operation is not supported on `tvOS` since `AVFoundation` is not available on `tvOS`.
|
||||
|
||||
```
|
||||
[MobileFFmpeg execute: @"-f avfoundation -r 30 -video_size 1280x720 -pixel_format bgr0 -i 0:0 -vcodec h264_videotoolbox -vsync 2 -f h264 -t 00:00:05 %@", recordFilePath];
|
||||
```
|
||||
|
||||
7. List enabled external libraries.
|
||||
8. List enabled external libraries.
|
||||
```
|
||||
NSArray *externalLibraries = [MobileFFmpegConfig getExternalLibraries];
|
||||
```
|
||||
|
||||
8. Enable log callback.
|
||||
9. Enable log callback.
|
||||
```
|
||||
[MobileFFmpegConfig setLogDelegate:self];
|
||||
|
||||
@@ -260,7 +309,7 @@ Please remember that some parts of `FFmpeg` are licensed under the `GPL` and onl
|
||||
}
|
||||
```
|
||||
|
||||
9. Enable statistics callback.
|
||||
10. Enable statistics callback.
|
||||
```
|
||||
[MobileFFmpegConfig setStatisticsDelegate:self];
|
||||
|
||||
@@ -271,12 +320,12 @@ Please remember that some parts of `FFmpeg` are licensed under the `GPL` and onl
|
||||
}
|
||||
```
|
||||
|
||||
10. Set log level.
|
||||
11. Set log level.
|
||||
```
|
||||
[MobileFFmpegConfig setLogLevel:AV_LOG_FATAL];
|
||||
```
|
||||
|
||||
11. Register custom fonts directory.
|
||||
12. Register custom fonts directory.
|
||||
```
|
||||
[MobileFFmpegConfig setFontDirectory:@"<folder with fonts>" with:nil];
|
||||
```
|
||||
@@ -313,6 +362,8 @@ Exact version number is obtained using `git describe --tags`.
|
||||
|
||||
| MobileFFmpeg Version | FFmpeg Version | Release Date |
|
||||
| :----: | :----: |:----: |
|
||||
| [4.3.1](https://github.com/tanersener/mobile-ffmpeg/releases/tag/v4.3.1) | 4.3-dev-1944 | Jan 25, 2020 |
|
||||
| [4.3.1.LTS](https://github.com/tanersener/mobile-ffmpeg/releases/tag/v4.3.1.LTS) | 4.3-dev-1944 | Jan 25, 2020 |
|
||||
| [4.3](https://github.com/tanersener/mobile-ffmpeg/releases/tag/v4.3) | 4.3-dev-1181 | Oct 27, 2019 |
|
||||
| [4.2.2](https://github.com/tanersener/mobile-ffmpeg/releases/tag/v4.2.2) | 4.2-dev-1824 | July 3, 2019 |
|
||||
| [4.2.2.LTS](https://github.com/tanersener/mobile-ffmpeg/releases/tag/v4.2.2.LTS) | 4.2-dev-1824 | July 3, 2019 |
|
||||
@@ -448,7 +499,37 @@ CPU optimizations (`ASM`) are enabled for most of the external libraries. Detail
|
||||
|
||||
A more detailed documentation is available at [Wiki](https://github.com/tanersener/mobile-ffmpeg/wiki).
|
||||
|
||||
### 7. License
|
||||
### 7. Contributors
|
||||
|
||||
#### 7.1 Code Contributors
|
||||
|
||||
This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].
|
||||
<a href="https://github.com/tanersener/mobile-ffmpeg/graphs/contributors"><img src="https://opencollective.com/mobile-ffmpeg/contributors.svg?width=890&button=false" /></a>
|
||||
|
||||
#### 7.2 Financial Contributors
|
||||
|
||||
Become a financial contributor and help us sustain our community. [[Contribute](https://opencollective.com/mobile-ffmpeg/contribute)]
|
||||
|
||||
##### 7.2.1 Individuals
|
||||
|
||||
<a href="https://opencollective.com/mobile-ffmpeg"><img src="https://opencollective.com/mobile-ffmpeg/individuals.svg?width=890"></a>
|
||||
|
||||
##### 7.2.2 Organizations
|
||||
|
||||
Support this project with your organization. Your logo will show up here with a link to your website. [[Contribute](https://opencollective.com/mobile-ffmpeg/contribute)]
|
||||
|
||||
<a href="https://opencollective.com/mobile-ffmpeg/organization/0/website"><img src="https://opencollective.com/mobile-ffmpeg/organization/0/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/mobile-ffmpeg/organization/1/website"><img src="https://opencollective.com/mobile-ffmpeg/organization/1/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/mobile-ffmpeg/organization/2/website"><img src="https://opencollective.com/mobile-ffmpeg/organization/2/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/mobile-ffmpeg/organization/3/website"><img src="https://opencollective.com/mobile-ffmpeg/organization/3/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/mobile-ffmpeg/organization/4/website"><img src="https://opencollective.com/mobile-ffmpeg/organization/4/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/mobile-ffmpeg/organization/5/website"><img src="https://opencollective.com/mobile-ffmpeg/organization/5/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/mobile-ffmpeg/organization/6/website"><img src="https://opencollective.com/mobile-ffmpeg/organization/6/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/mobile-ffmpeg/organization/7/website"><img src="https://opencollective.com/mobile-ffmpeg/organization/7/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/mobile-ffmpeg/organization/8/website"><img src="https://opencollective.com/mobile-ffmpeg/organization/8/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/mobile-ffmpeg/organization/9/website"><img src="https://opencollective.com/mobile-ffmpeg/organization/9/avatar.svg"></a>
|
||||
|
||||
### 8. License
|
||||
|
||||
This project is licensed under the LGPL v3.0. However, if source code is built using optional `--enable-gpl` flag or
|
||||
prebuilt binaries with `-gpl` postfix are used then MobileFFmpeg is subject to the GPL v3.0 license.
|
||||
@@ -466,11 +547,11 @@ In test applications; embedded fonts are licensed under the [SIL Open Font Licen
|
||||
|
||||
Please visit [License](https://github.com/tanersener/mobile-ffmpeg/wiki/License) page for the details.
|
||||
|
||||
### 8. Contributing
|
||||
### 9. Contributing
|
||||
|
||||
If you have any recommendations or ideas to improve it, please feel free to submit issues or pull requests. Any help is appreciated.
|
||||
|
||||
### 9. See Also
|
||||
### 10. See Also
|
||||
|
||||
- [libav gas-preprocessor](https://github.com/libav/gas-preprocessor/raw/master/gas-preprocessor.pl)
|
||||
- [FFmpeg API Documentation](https://ffmpeg.org/doxygen/4.0/index.html)
|
||||
|
||||
+3
-3
@@ -82,7 +82,7 @@ without any external libraries enabled. Options can be used to disable ABIs and/
|
||||
Please note that GPL libraries (external libraries with GPL license) need --enable-gpl flag to be set explicitly. \
|
||||
When compilation ends an Android Archive (AAR) file is created with enabled platforms inside.\n"
|
||||
|
||||
echo -e "Usage: ./"$COMMAND" [OPTION]...\n"
|
||||
echo -e "Usage: ./"$COMMAND" [OPTION]...\n"
|
||||
|
||||
echo -e "Specify environment variables as VARIABLE=VALUE to override default build options.\n"
|
||||
|
||||
@@ -826,14 +826,14 @@ if [[ ! -z ${ANDROID_ARCHITECTURES} ]]; then
|
||||
|
||||
echo -e -n "\n\nCreating Android archive under prebuilt/android-aar: "
|
||||
|
||||
./gradlew clean build 1>>${BASEDIR}/build.log 2>&1
|
||||
./gradlew app:clean app:assembleRelease app:testReleaseUnitTest 1>>${BASEDIR}/build.log 2>&1
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "failed\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cp ${BASEDIR}/android/app/build/outputs/aar/mobile-ffmpeg.aar ${MOBILE_FFMPEG_AAR}/mobile-ffmpeg.aar 1>>${BASEDIR}/build.log 2>&1
|
||||
cp ${BASEDIR}/android/app/build/outputs/aar/mobile-ffmpeg-release.aar ${MOBILE_FFMPEG_AAR}/mobile-ffmpeg.aar 1>>${BASEDIR}/build.log 2>&1
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "failed\n"
|
||||
|
||||
+6
-8
@@ -1,12 +1,10 @@
|
||||
*.iml
|
||||
.gradle
|
||||
/local.properties
|
||||
/.idea/workspace.xml
|
||||
/.idea/libraries
|
||||
local.properties
|
||||
.DS_Store
|
||||
/build
|
||||
/captures
|
||||
build
|
||||
captures
|
||||
.externalNativeBuild
|
||||
/.idea/
|
||||
/obj/
|
||||
/libs/
|
||||
.idea
|
||||
obj
|
||||
libs
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
/build
|
||||
/local.properties
|
||||
@@ -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 = 4.3
|
||||
PROJECT_NUMBER = 4.3.1
|
||||
|
||||
# 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
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
apply plugin: 'com.android.library'
|
||||
|
||||
android {
|
||||
compileSdkVersion 28
|
||||
compileSdkVersion 29
|
||||
|
||||
defaultConfig {
|
||||
minSdkVersion 24
|
||||
targetSdkVersion 28
|
||||
versionCode 240430
|
||||
versionName "4.3"
|
||||
targetSdkVersion 29
|
||||
versionCode 240431
|
||||
versionName "4.3.1"
|
||||
project.archivesBaseName = "mobile-ffmpeg"
|
||||
consumerProguardFiles 'proguard-rules.pro'
|
||||
}
|
||||
@@ -38,7 +38,5 @@ task javadoc(type: Javadoc) {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||
implementation 'com.android.support:appcompat-v7:28.0.0'
|
||||
testImplementation 'junit:junit:4.12'
|
||||
testImplementation "androidx.test.ext:junit:1.1.1"
|
||||
}
|
||||
|
||||
-45
@@ -1,45 +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/>.
|
||||
*/
|
||||
|
||||
package com.arthenica.mobileffmpeg;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.test.InstrumentationRegistry;
|
||||
import android.support.test.runner.AndroidJUnit4;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* Instrumented test, which will execute on an Android device.
|
||||
*
|
||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class ExampleInstrumentedTest {
|
||||
@Test
|
||||
public void useAppContext() throws Exception {
|
||||
// Context of the app under test.
|
||||
Context appContext = InstrumentationRegistry.getTargetContext();
|
||||
|
||||
assertEquals("com.arthenica.mobileffmpeg", appContext.getPackageName());
|
||||
}
|
||||
}
|
||||
@@ -20,6 +20,14 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* CHANGES 01.2020
|
||||
* - ffprobe support changes
|
||||
* - (optindex < argc) validation in parse_options() method updated with (optindex >= argc) check
|
||||
*
|
||||
* CHANGES 12.2019
|
||||
* - Concurrent execution support
|
||||
* - log_callback_report method re-added to fix -report option issues
|
||||
*
|
||||
* CHANGES 08.2018
|
||||
* --------------------------------------------------------
|
||||
* - fftools_ prefix added to file name and parent header
|
||||
@@ -85,15 +93,19 @@
|
||||
|
||||
static int init_report(const char *env);
|
||||
extern void mobileffmpeg_log_callback_function(void *ptr, int level, const char* format, va_list vargs);
|
||||
extern void (*report_callback)(int, float, float, int64_t, int, double, double);
|
||||
|
||||
AVDictionary *sws_dict;
|
||||
AVDictionary *swr_opts;
|
||||
AVDictionary *format_opts, *codec_opts, *resample_opts;
|
||||
__thread char *program_name;
|
||||
__thread int program_birth_year;
|
||||
|
||||
static FILE *report_file;
|
||||
static int report_file_level = AV_LOG_DEBUG;
|
||||
int hide_banner = 0;
|
||||
int longjmp_value = 0;
|
||||
__thread AVDictionary *sws_dict;
|
||||
__thread AVDictionary *swr_opts;
|
||||
__thread AVDictionary *format_opts, *codec_opts, *resample_opts;
|
||||
|
||||
FILE *report_file;
|
||||
int report_file_level = AV_LOG_DEBUG;
|
||||
__thread int hide_banner = 0;
|
||||
__thread int longjmp_value = 0;
|
||||
|
||||
enum show_muxdemuxers {
|
||||
SHOW_DEFAULT,
|
||||
@@ -115,9 +127,29 @@ void uninit_opts(void)
|
||||
av_dict_free(&resample_opts);
|
||||
}
|
||||
|
||||
void log_callback_report(void *ptr, int level, const char *fmt, va_list vl)
|
||||
{
|
||||
va_list vl2;
|
||||
char line[1024];
|
||||
static int print_prefix = 1;
|
||||
|
||||
va_copy(vl2, vl);
|
||||
if (report_callback == NULL) {
|
||||
av_log_default_callback(ptr, level, fmt, vl);
|
||||
} else {
|
||||
mobileffmpeg_log_callback_function(ptr, level, fmt, vl);
|
||||
}
|
||||
av_log_format_line(ptr, level, fmt, vl2, line, sizeof(line), &print_prefix);
|
||||
va_end(vl2);
|
||||
if (report_file_level >= level) {
|
||||
fputs(line, report_file);
|
||||
fflush(report_file);
|
||||
}
|
||||
}
|
||||
|
||||
void init_dynload(void)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
#if HAVE_SETDLLDIRECTORY
|
||||
/* Calling SetDllDirectory with the empty string (but not NULL) removes the
|
||||
* current working directory from the DLL search path as a security pre-caution. */
|
||||
SetDllDirectory("");
|
||||
@@ -191,7 +223,7 @@ void show_help_options(const OptionDef *options, const char *msg, int req_flags,
|
||||
continue;
|
||||
|
||||
if (first) {
|
||||
av_log(NULL, AV_LOG_INFO, "%s\n", msg);
|
||||
av_log(NULL, AV_LOG_STDERR, "%s\n", msg);
|
||||
first = 0;
|
||||
}
|
||||
av_strlcpy(buf, po->name, sizeof(buf));
|
||||
@@ -199,9 +231,9 @@ void show_help_options(const OptionDef *options, const char *msg, int req_flags,
|
||||
av_strlcat(buf, " ", sizeof(buf));
|
||||
av_strlcat(buf, po->argname, sizeof(buf));
|
||||
}
|
||||
av_log(NULL, AV_LOG_INFO, "-%-17s %s\n", buf, po->help);
|
||||
av_log(NULL, AV_LOG_STDERR, "-%-17s %s\n", buf, po->help);
|
||||
}
|
||||
av_log(NULL, AV_LOG_INFO, "\n");
|
||||
av_log(NULL, AV_LOG_STDERR, "\n");
|
||||
}
|
||||
|
||||
void show_help_children(const AVClass *class, int flags)
|
||||
@@ -209,7 +241,7 @@ void show_help_children(const AVClass *class, int flags)
|
||||
const AVClass *child = NULL;
|
||||
if (class->option) {
|
||||
av_opt_show2(&class, NULL, flags, 0);
|
||||
av_log(NULL, AV_LOG_INFO, "\n");
|
||||
av_log(NULL, AV_LOG_STDERR, "\n");
|
||||
}
|
||||
|
||||
while ((child = av_opt_child_class_next(class, child)))
|
||||
@@ -401,12 +433,14 @@ void parse_options(void *optctx, int argc, char **argv, const OptionDef *options
|
||||
continue;
|
||||
}
|
||||
opt++;
|
||||
|
||||
if (optindex < argc) {
|
||||
if (optindex >= argc) {
|
||||
if ((ret = parse_option(optctx, opt, NULL, options)) < 0)
|
||||
exit_program(1);
|
||||
} else {
|
||||
if ((ret = parse_option(optctx, opt, argv[optindex], options)) < 0)
|
||||
exit_program(1);
|
||||
optindex += ret;
|
||||
}
|
||||
optindex += ret;
|
||||
} else {
|
||||
if (parse_arg_function)
|
||||
parse_arg_function(optctx, opt);
|
||||
@@ -473,7 +507,7 @@ int locate_option(int argc, char **argv, const OptionDef *options,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void dump_argument(const char *a)
|
||||
void dump_argument(const char *a)
|
||||
{
|
||||
const unsigned char *p;
|
||||
|
||||
@@ -812,7 +846,7 @@ do { \
|
||||
if (optindex < argc) {
|
||||
arg = argv[optindex++];
|
||||
} else {
|
||||
arg = "";
|
||||
arg = NULL;
|
||||
}
|
||||
} else if (po->flags & HAS_ARG) {
|
||||
GET_ARG(arg);
|
||||
@@ -856,8 +890,8 @@ do { \
|
||||
}
|
||||
|
||||
if (octx->cur_group.nb_opts || codec_opts || format_opts || resample_opts)
|
||||
av_log(NULL, AV_LOG_WARNING, "Trailing options were found on the "
|
||||
"commandline.\n");
|
||||
av_log(NULL, AV_LOG_WARNING, "Trailing option(s) found in the "
|
||||
"command: may be ignored.\n");
|
||||
|
||||
av_log(NULL, AV_LOG_DEBUG, "Finished splitting the commandline.\n");
|
||||
|
||||
@@ -983,11 +1017,12 @@ static void expand_filename_template(AVBPrint *bp, const char *template,
|
||||
}
|
||||
}
|
||||
|
||||
static int init_report(const char *env)
|
||||
int init_report(const char *env)
|
||||
{
|
||||
char *filename_template = NULL;
|
||||
char *key, *val;
|
||||
int ret, count = 0;
|
||||
int prog_loglevel, envlevel = 0;
|
||||
time_t now;
|
||||
struct tm *tm;
|
||||
AVBPrint filename;
|
||||
@@ -1019,6 +1054,7 @@ static int init_report(const char *env)
|
||||
av_log(NULL, AV_LOG_FATAL, "Invalid report file level\n");
|
||||
exit_program(1);
|
||||
}
|
||||
envlevel = 1;
|
||||
} else {
|
||||
av_log(NULL, AV_LOG_ERROR, "Unknown key '%s' in FFREPORT\n", key);
|
||||
}
|
||||
@@ -1035,6 +1071,10 @@ static int init_report(const char *env)
|
||||
return AVERROR(ENOMEM);
|
||||
}
|
||||
|
||||
prog_loglevel = av_log_get_level();
|
||||
if (!envlevel)
|
||||
report_file_level = FFMAX(report_file_level, prog_loglevel);
|
||||
|
||||
report_file = fopen(filename.str, "w");
|
||||
if (!report_file) {
|
||||
int ret = AVERROR(errno);
|
||||
@@ -1042,19 +1082,20 @@ static int init_report(const char *env)
|
||||
filename.str, strerror(errno));
|
||||
return ret;
|
||||
}
|
||||
av_log_set_callback(mobileffmpeg_log_callback_function);
|
||||
av_log_set_callback(log_callback_report);
|
||||
av_log(NULL, AV_LOG_INFO,
|
||||
"%s started on %04d-%02d-%02d at %02d:%02d:%02d\n"
|
||||
"Report written to \"%s\"\n",
|
||||
"Report written to \"%s\"\n"
|
||||
"Log level: %d\n",
|
||||
program_name,
|
||||
tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
|
||||
tm->tm_hour, tm->tm_min, tm->tm_sec,
|
||||
filename.str);
|
||||
filename.str, report_file_level);
|
||||
av_bprint_finalize(&filename, NULL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int opt_report(const char *opt)
|
||||
int opt_report(void *optctx, const char *opt, const char *arg)
|
||||
{
|
||||
return init_report(NULL);
|
||||
}
|
||||
@@ -1096,7 +1137,7 @@ void print_error(const char *filename, int err)
|
||||
av_log(NULL, AV_LOG_ERROR, "%s: %s\n", filename, errbuf_ptr);
|
||||
}
|
||||
|
||||
static int warned_cfg = 0;
|
||||
__thread int warned_cfg = 0;
|
||||
|
||||
#define INDENT 1
|
||||
#define SHOW_VERSION 2
|
||||
@@ -1196,7 +1237,6 @@ void show_banner(int argc, char **argv, const OptionDef *options)
|
||||
|
||||
int show_version(void *optctx, const char *opt, const char *arg)
|
||||
{
|
||||
av_log_set_callback(mobileffmpeg_log_callback_function);
|
||||
print_program_info (SHOW_COPYRIGHT, AV_LOG_INFO);
|
||||
print_all_libs_info(SHOW_VERSION, AV_LOG_INFO);
|
||||
|
||||
@@ -1205,7 +1245,6 @@ int show_version(void *optctx, const char *opt, const char *arg)
|
||||
|
||||
int show_buildconf(void *optctx, const char *opt, const char *arg)
|
||||
{
|
||||
av_log_set_callback(mobileffmpeg_log_callback_function);
|
||||
print_buildconf (INDENT|0, AV_LOG_INFO);
|
||||
|
||||
return 0;
|
||||
@@ -1214,12 +1253,12 @@ int show_buildconf(void *optctx, const char *opt, const char *arg)
|
||||
int show_license(void *optctx, const char *opt, const char *arg)
|
||||
{
|
||||
#if CONFIG_NONFREE
|
||||
av_log(NULL, AV_LOG_INFO,
|
||||
av_log(NULL, AV_LOG_STDERR,
|
||||
"This version of %s has nonfree parts compiled in.\n"
|
||||
"Therefore it is not legally redistributable.\n",
|
||||
program_name );
|
||||
#elif CONFIG_GPLV3
|
||||
av_log(NULL, AV_LOG_INFO,
|
||||
av_log(NULL, AV_LOG_STDERR,
|
||||
"%s is free software; you can redistribute it and/or modify\n"
|
||||
"it under the terms of the GNU General Public License as published by\n"
|
||||
"the Free Software Foundation; either version 3 of the License, or\n"
|
||||
@@ -1234,7 +1273,7 @@ int show_license(void *optctx, const char *opt, const char *arg)
|
||||
"along with %s. If not, see <http://www.gnu.org/licenses/>.\n",
|
||||
program_name, program_name, program_name );
|
||||
#elif CONFIG_GPL
|
||||
av_log(NULL, AV_LOG_INFO,
|
||||
av_log(NULL, AV_LOG_STDERR,
|
||||
"%s is free software; you can redistribute it and/or modify\n"
|
||||
"it under the terms of the GNU General Public License as published by\n"
|
||||
"the Free Software Foundation; either version 2 of the License, or\n"
|
||||
@@ -1250,7 +1289,7 @@ int show_license(void *optctx, const char *opt, const char *arg)
|
||||
"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n",
|
||||
program_name, program_name, program_name );
|
||||
#elif CONFIG_LGPLV3
|
||||
av_log(NULL, AV_LOG_INFO,
|
||||
av_log(NULL, AV_LOG_STDERR,
|
||||
"%s is free software; you can redistribute it and/or modify\n"
|
||||
"it under the terms of the GNU Lesser General Public License as published by\n"
|
||||
"the Free Software Foundation; either version 3 of the License, or\n"
|
||||
@@ -1265,7 +1304,7 @@ int show_license(void *optctx, const char *opt, const char *arg)
|
||||
"along with %s. If not, see <http://www.gnu.org/licenses/>.\n",
|
||||
program_name, program_name, program_name );
|
||||
#else
|
||||
av_log(NULL, AV_LOG_INFO,
|
||||
av_log(NULL, AV_LOG_STDERR,
|
||||
"%s is free software; you can redistribute it and/or\n"
|
||||
"modify it under the terms of the GNU Lesser General Public\n"
|
||||
"License as published by the Free Software Foundation; either\n"
|
||||
@@ -1301,7 +1340,7 @@ static int show_formats_devices(void *optctx, const char *opt, const char *arg,
|
||||
const char *last_name;
|
||||
int is_dev;
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, "%s\n"
|
||||
av_log(NULL, AV_LOG_STDERR, "%s\n"
|
||||
" D. = Demuxing supported\n"
|
||||
" .E = Muxing supported\n"
|
||||
" --\n", device_only ? "Devices:" : "File formats:");
|
||||
@@ -1346,7 +1385,7 @@ static int show_formats_devices(void *optctx, const char *opt, const char *arg,
|
||||
break;
|
||||
last_name = name;
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, " %s%s %-15s %s\n",
|
||||
av_log(NULL, AV_LOG_STDERR, " %s%s %-15s %s\n",
|
||||
decode ? "D" : " ",
|
||||
encode ? "E" : " ",
|
||||
name,
|
||||
@@ -1379,97 +1418,97 @@ int show_devices(void *optctx, const char *opt, const char *arg)
|
||||
if (codec->field) { \
|
||||
const type *p = codec->field; \
|
||||
\
|
||||
av_log(NULL, AV_LOG_INFO, " Supported " list_name ":"); \
|
||||
av_log(NULL, AV_LOG_STDERR, " Supported " list_name ":"); \
|
||||
while (*p != term) { \
|
||||
get_name(*p); \
|
||||
av_log(NULL, AV_LOG_INFO, " %s", name); \
|
||||
av_log(NULL, AV_LOG_STDERR, " %s", name); \
|
||||
p++; \
|
||||
} \
|
||||
av_log(NULL, AV_LOG_INFO, "\n"); \
|
||||
av_log(NULL, AV_LOG_STDERR, "\n"); \
|
||||
} \
|
||||
|
||||
static void print_codec(const AVCodec *c)
|
||||
{
|
||||
int encoder = av_codec_is_encoder(c);
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, "%s %s [%s]:\n", encoder ? "Encoder" : "Decoder", c->name,
|
||||
av_log(NULL, AV_LOG_STDERR, "%s %s [%s]:\n", encoder ? "Encoder" : "Decoder", c->name,
|
||||
c->long_name ? c->long_name : "");
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, " General capabilities: ");
|
||||
av_log(NULL, AV_LOG_STDERR, " General capabilities: ");
|
||||
if (c->capabilities & AV_CODEC_CAP_DRAW_HORIZ_BAND)
|
||||
av_log(NULL, AV_LOG_INFO, "horizband ");
|
||||
av_log(NULL, AV_LOG_STDERR, "horizband ");
|
||||
if (c->capabilities & AV_CODEC_CAP_DR1)
|
||||
av_log(NULL, AV_LOG_INFO, "dr1 ");
|
||||
av_log(NULL, AV_LOG_STDERR, "dr1 ");
|
||||
if (c->capabilities & AV_CODEC_CAP_TRUNCATED)
|
||||
av_log(NULL, AV_LOG_INFO, "trunc ");
|
||||
av_log(NULL, AV_LOG_STDERR, "trunc ");
|
||||
if (c->capabilities & AV_CODEC_CAP_DELAY)
|
||||
av_log(NULL, AV_LOG_INFO, "delay ");
|
||||
av_log(NULL, AV_LOG_STDERR, "delay ");
|
||||
if (c->capabilities & AV_CODEC_CAP_SMALL_LAST_FRAME)
|
||||
av_log(NULL, AV_LOG_INFO, "small ");
|
||||
av_log(NULL, AV_LOG_STDERR, "small ");
|
||||
if (c->capabilities & AV_CODEC_CAP_SUBFRAMES)
|
||||
av_log(NULL, AV_LOG_INFO, "subframes ");
|
||||
av_log(NULL, AV_LOG_STDERR, "subframes ");
|
||||
if (c->capabilities & AV_CODEC_CAP_EXPERIMENTAL)
|
||||
av_log(NULL, AV_LOG_INFO, "exp ");
|
||||
av_log(NULL, AV_LOG_STDERR, "exp ");
|
||||
if (c->capabilities & AV_CODEC_CAP_CHANNEL_CONF)
|
||||
av_log(NULL, AV_LOG_INFO, "chconf ");
|
||||
av_log(NULL, AV_LOG_STDERR, "chconf ");
|
||||
if (c->capabilities & AV_CODEC_CAP_PARAM_CHANGE)
|
||||
av_log(NULL, AV_LOG_INFO, "paramchange ");
|
||||
av_log(NULL, AV_LOG_STDERR, "paramchange ");
|
||||
if (c->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE)
|
||||
av_log(NULL, AV_LOG_INFO, "variable ");
|
||||
av_log(NULL, AV_LOG_STDERR, "variable ");
|
||||
if (c->capabilities & (AV_CODEC_CAP_FRAME_THREADS |
|
||||
AV_CODEC_CAP_SLICE_THREADS |
|
||||
AV_CODEC_CAP_AUTO_THREADS))
|
||||
av_log(NULL, AV_LOG_INFO, "threads ");
|
||||
av_log(NULL, AV_LOG_STDERR, "threads ");
|
||||
if (c->capabilities & AV_CODEC_CAP_AVOID_PROBING)
|
||||
av_log(NULL, AV_LOG_INFO, "avoidprobe ");
|
||||
av_log(NULL, AV_LOG_STDERR, "avoidprobe ");
|
||||
if (c->capabilities & AV_CODEC_CAP_INTRA_ONLY)
|
||||
av_log(NULL, AV_LOG_INFO, "intraonly ");
|
||||
av_log(NULL, AV_LOG_STDERR, "intraonly ");
|
||||
if (c->capabilities & AV_CODEC_CAP_LOSSLESS)
|
||||
av_log(NULL, AV_LOG_INFO, "lossless ");
|
||||
av_log(NULL, AV_LOG_STDERR, "lossless ");
|
||||
if (c->capabilities & AV_CODEC_CAP_HARDWARE)
|
||||
av_log(NULL, AV_LOG_INFO, "hardware ");
|
||||
av_log(NULL, AV_LOG_STDERR, "hardware ");
|
||||
if (c->capabilities & AV_CODEC_CAP_HYBRID)
|
||||
av_log(NULL, AV_LOG_INFO, "hybrid ");
|
||||
av_log(NULL, AV_LOG_STDERR, "hybrid ");
|
||||
if (!c->capabilities)
|
||||
av_log(NULL, AV_LOG_INFO, "none");
|
||||
av_log(NULL, AV_LOG_INFO, "\n");
|
||||
av_log(NULL, AV_LOG_STDERR, "none");
|
||||
av_log(NULL, AV_LOG_STDERR, "\n");
|
||||
|
||||
if (c->type == AVMEDIA_TYPE_VIDEO ||
|
||||
c->type == AVMEDIA_TYPE_AUDIO) {
|
||||
av_log(NULL, AV_LOG_INFO, " Threading capabilities: ");
|
||||
av_log(NULL, AV_LOG_STDERR, " Threading capabilities: ");
|
||||
switch (c->capabilities & (AV_CODEC_CAP_FRAME_THREADS |
|
||||
AV_CODEC_CAP_SLICE_THREADS |
|
||||
AV_CODEC_CAP_AUTO_THREADS)) {
|
||||
case AV_CODEC_CAP_FRAME_THREADS |
|
||||
AV_CODEC_CAP_SLICE_THREADS: av_log(NULL, AV_LOG_INFO, "frame and slice"); break;
|
||||
case AV_CODEC_CAP_FRAME_THREADS: av_log(NULL, AV_LOG_INFO, "frame"); break;
|
||||
case AV_CODEC_CAP_SLICE_THREADS: av_log(NULL, AV_LOG_INFO, "slice"); break;
|
||||
case AV_CODEC_CAP_AUTO_THREADS : av_log(NULL, AV_LOG_INFO, "auto"); break;
|
||||
default: av_log(NULL, AV_LOG_INFO, "none"); break;
|
||||
AV_CODEC_CAP_SLICE_THREADS: av_log(NULL, AV_LOG_STDERR, "frame and slice"); break;
|
||||
case AV_CODEC_CAP_FRAME_THREADS: av_log(NULL, AV_LOG_STDERR, "frame"); break;
|
||||
case AV_CODEC_CAP_SLICE_THREADS: av_log(NULL, AV_LOG_STDERR, "slice"); break;
|
||||
case AV_CODEC_CAP_AUTO_THREADS : av_log(NULL, AV_LOG_STDERR, "auto"); break;
|
||||
default: av_log(NULL, AV_LOG_STDERR, "none"); break;
|
||||
}
|
||||
av_log(NULL, AV_LOG_INFO, "\n");
|
||||
av_log(NULL, AV_LOG_STDERR, "\n");
|
||||
}
|
||||
|
||||
if (avcodec_get_hw_config(c, 0)) {
|
||||
av_log(NULL, AV_LOG_INFO, " Supported hardware devices: ");
|
||||
av_log(NULL, AV_LOG_STDERR, " Supported hardware devices: ");
|
||||
for (int i = 0;; i++) {
|
||||
const AVCodecHWConfig *config = avcodec_get_hw_config(c, i);
|
||||
if (!config)
|
||||
break;
|
||||
av_log(NULL, AV_LOG_INFO, "%s ", av_hwdevice_get_type_name(config->device_type));
|
||||
av_log(NULL, AV_LOG_STDERR, "%s ", av_hwdevice_get_type_name(config->device_type));
|
||||
}
|
||||
av_log(NULL, AV_LOG_INFO, "\n");
|
||||
av_log(NULL, AV_LOG_STDERR, "\n");
|
||||
}
|
||||
|
||||
if (c->supported_framerates) {
|
||||
const AVRational *fps = c->supported_framerates;
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, " Supported framerates:");
|
||||
av_log(NULL, AV_LOG_STDERR, " Supported framerates:");
|
||||
while (fps->num) {
|
||||
av_log(NULL, AV_LOG_INFO, " %d/%d", fps->num, fps->den);
|
||||
av_log(NULL, AV_LOG_STDERR, " %d/%d", fps->num, fps->den);
|
||||
fps++;
|
||||
}
|
||||
av_log(NULL, AV_LOG_INFO, "\n");
|
||||
av_log(NULL, AV_LOG_STDERR, "\n");
|
||||
}
|
||||
PRINT_CODEC_SUPPORTED(c, pix_fmts, enum AVPixelFormat, "pixel formats",
|
||||
AV_PIX_FMT_NONE, GET_PIX_FMT_NAME);
|
||||
@@ -1544,12 +1583,12 @@ static void print_codecs_for_id(enum AVCodecID id, int encoder)
|
||||
{
|
||||
const AVCodec *codec = NULL;
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, " (%s: ", encoder ? "encoders" : "decoders");
|
||||
av_log(NULL, AV_LOG_STDERR, " (%s: ", encoder ? "encoders" : "decoders");
|
||||
|
||||
while ((codec = next_codec_for_id(id, codec, encoder)))
|
||||
av_log(NULL, AV_LOG_INFO, "%s ", codec->name);
|
||||
av_log(NULL, AV_LOG_STDERR, "%s ", codec->name);
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, ")");
|
||||
av_log(NULL, AV_LOG_STDERR, ")");
|
||||
}
|
||||
|
||||
int show_codecs(void *optctx, const char *opt, const char *arg)
|
||||
@@ -1557,7 +1596,7 @@ int show_codecs(void *optctx, const char *opt, const char *arg)
|
||||
const AVCodecDescriptor **codecs;
|
||||
unsigned i, nb_codecs = get_codecs_sorted(&codecs);
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, "Codecs:\n"
|
||||
av_log(NULL, AV_LOG_STDERR, "Codecs:\n"
|
||||
" D..... = Decoding supported\n"
|
||||
" .E.... = Encoding supported\n"
|
||||
" ..V... = Video codec\n"
|
||||
@@ -1574,16 +1613,16 @@ int show_codecs(void *optctx, const char *opt, const char *arg)
|
||||
if (strstr(desc->name, "_deprecated"))
|
||||
continue;
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, " ");
|
||||
av_log(NULL, AV_LOG_INFO, avcodec_find_decoder(desc->id) ? "D" : ".");
|
||||
av_log(NULL, AV_LOG_INFO, avcodec_find_encoder(desc->id) ? "E" : ".");
|
||||
av_log(NULL, AV_LOG_STDERR, " ");
|
||||
av_log(NULL, AV_LOG_STDERR, avcodec_find_decoder(desc->id) ? "D" : ".");
|
||||
av_log(NULL, AV_LOG_STDERR, avcodec_find_encoder(desc->id) ? "E" : ".");
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, "%c", get_media_type_char(desc->type));
|
||||
av_log(NULL, AV_LOG_INFO, (desc->props & AV_CODEC_PROP_INTRA_ONLY) ? "I" : ".");
|
||||
av_log(NULL, AV_LOG_INFO, (desc->props & AV_CODEC_PROP_LOSSY) ? "L" : ".");
|
||||
av_log(NULL, AV_LOG_INFO, (desc->props & AV_CODEC_PROP_LOSSLESS) ? "S" : ".");
|
||||
av_log(NULL, AV_LOG_STDERR, "%c", get_media_type_char(desc->type));
|
||||
av_log(NULL, AV_LOG_STDERR, (desc->props & AV_CODEC_PROP_INTRA_ONLY) ? "I" : ".");
|
||||
av_log(NULL, AV_LOG_STDERR, (desc->props & AV_CODEC_PROP_LOSSY) ? "L" : ".");
|
||||
av_log(NULL, AV_LOG_STDERR, (desc->props & AV_CODEC_PROP_LOSSLESS) ? "S" : ".");
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, " %-20s %s", desc->name, desc->long_name ? desc->long_name : "");
|
||||
av_log(NULL, AV_LOG_STDERR, " %-20s %s", desc->name, desc->long_name ? desc->long_name : "");
|
||||
|
||||
/* print decoders/encoders when there's more than one or their
|
||||
* names are different from codec name */
|
||||
@@ -1601,7 +1640,7 @@ int show_codecs(void *optctx, const char *opt, const char *arg)
|
||||
}
|
||||
}
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, "\n");
|
||||
av_log(NULL, AV_LOG_STDERR, "\n");
|
||||
}
|
||||
av_free(codecs);
|
||||
return 0;
|
||||
@@ -1612,7 +1651,7 @@ static void print_codecs(int encoder)
|
||||
const AVCodecDescriptor **codecs;
|
||||
unsigned i, nb_codecs = get_codecs_sorted(&codecs);
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, "%s:\n"
|
||||
av_log(NULL, AV_LOG_STDERR, "%s:\n"
|
||||
" V..... = Video\n"
|
||||
" A..... = Audio\n"
|
||||
" S..... = Subtitle\n"
|
||||
@@ -1628,18 +1667,18 @@ static void print_codecs(int encoder)
|
||||
const AVCodec *codec = NULL;
|
||||
|
||||
while ((codec = next_codec_for_id(desc->id, codec, encoder))) {
|
||||
av_log(NULL, AV_LOG_INFO, " %c", get_media_type_char(desc->type));
|
||||
av_log(NULL, AV_LOG_INFO, (codec->capabilities & AV_CODEC_CAP_FRAME_THREADS) ? "F" : ".");
|
||||
av_log(NULL, AV_LOG_INFO, (codec->capabilities & AV_CODEC_CAP_SLICE_THREADS) ? "S" : ".");
|
||||
av_log(NULL, AV_LOG_INFO, (codec->capabilities & AV_CODEC_CAP_EXPERIMENTAL) ? "X" : ".");
|
||||
av_log(NULL, AV_LOG_INFO, (codec->capabilities & AV_CODEC_CAP_DRAW_HORIZ_BAND)?"B" : ".");
|
||||
av_log(NULL, AV_LOG_INFO, (codec->capabilities & AV_CODEC_CAP_DR1) ? "D" : ".");
|
||||
av_log(NULL, AV_LOG_STDERR, " %c", get_media_type_char(desc->type));
|
||||
av_log(NULL, AV_LOG_STDERR, (codec->capabilities & AV_CODEC_CAP_FRAME_THREADS) ? "F" : ".");
|
||||
av_log(NULL, AV_LOG_STDERR, (codec->capabilities & AV_CODEC_CAP_SLICE_THREADS) ? "S" : ".");
|
||||
av_log(NULL, AV_LOG_STDERR, (codec->capabilities & AV_CODEC_CAP_EXPERIMENTAL) ? "X" : ".");
|
||||
av_log(NULL, AV_LOG_STDERR, (codec->capabilities & AV_CODEC_CAP_DRAW_HORIZ_BAND)?"B" : ".");
|
||||
av_log(NULL, AV_LOG_STDERR, (codec->capabilities & AV_CODEC_CAP_DR1) ? "D" : ".");
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, " %-20s %s", codec->name, codec->long_name ? codec->long_name : "");
|
||||
av_log(NULL, AV_LOG_STDERR, " %-20s %s", codec->name, codec->long_name ? codec->long_name : "");
|
||||
if (strcmp(codec->name, desc->name))
|
||||
av_log(NULL, AV_LOG_INFO, " (codec %s)", desc->name);
|
||||
av_log(NULL, AV_LOG_STDERR, " (codec %s)", desc->name);
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, "\n");
|
||||
av_log(NULL, AV_LOG_STDERR, "\n");
|
||||
}
|
||||
}
|
||||
av_free(codecs);
|
||||
@@ -1662,10 +1701,10 @@ int show_bsfs(void *optctx, const char *opt, const char *arg)
|
||||
const AVBitStreamFilter *bsf = NULL;
|
||||
void *opaque = NULL;
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, "Bitstream filters:\n");
|
||||
av_log(NULL, AV_LOG_STDERR, "Bitstream filters:\n");
|
||||
while ((bsf = av_bsf_iterate(&opaque)))
|
||||
av_log(NULL, AV_LOG_INFO, "%s\n", bsf->name);
|
||||
av_log(NULL, AV_LOG_INFO, "\n");
|
||||
av_log(NULL, AV_LOG_STDERR, "%s\n", bsf->name);
|
||||
av_log(NULL, AV_LOG_STDERR, "\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1674,13 +1713,13 @@ int show_protocols(void *optctx, const char *opt, const char *arg)
|
||||
void *opaque = NULL;
|
||||
const char *name;
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, "Supported file protocols:\n"
|
||||
av_log(NULL, AV_LOG_STDERR, "Supported file protocols:\n"
|
||||
"Input:\n");
|
||||
while ((name = avio_enum_protocols(&opaque, 0)))
|
||||
av_log(NULL, AV_LOG_INFO, " %s\n", name);
|
||||
av_log(NULL, AV_LOG_INFO, "Output:\n");
|
||||
av_log(NULL, AV_LOG_STDERR, " %s\n", name);
|
||||
av_log(NULL, AV_LOG_STDERR, "Output:\n");
|
||||
while ((name = avio_enum_protocols(&opaque, 1)))
|
||||
av_log(NULL, AV_LOG_INFO, " %s\n", name);
|
||||
av_log(NULL, AV_LOG_STDERR, " %s\n", name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1693,7 +1732,7 @@ int show_filters(void *optctx, const char *opt, const char *arg)
|
||||
int i, j;
|
||||
const AVFilterPad *pad;
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, "Filters:\n"
|
||||
av_log(NULL, AV_LOG_STDERR, "Filters:\n"
|
||||
" T.. = Timeline support\n"
|
||||
" .S. = Slice threading\n"
|
||||
" ..C = Command support\n"
|
||||
@@ -1719,14 +1758,14 @@ int show_filters(void *optctx, const char *opt, const char *arg)
|
||||
( i && (filter->flags & AVFILTER_FLAG_DYNAMIC_OUTPUTS))) ? 'N' : '|';
|
||||
}
|
||||
*descr_cur = 0;
|
||||
av_log(NULL, AV_LOG_INFO, " %c%c%c %-17s %-10s %s\n",
|
||||
av_log(NULL, AV_LOG_STDERR, " %c%c%c %-17s %-10s %s\n",
|
||||
filter->flags & AVFILTER_FLAG_SUPPORT_TIMELINE ? 'T' : '.',
|
||||
filter->flags & AVFILTER_FLAG_SLICE_THREADS ? 'S' : '.',
|
||||
filter->process_command ? 'C' : '.',
|
||||
filter->name, descr, filter->description);
|
||||
}
|
||||
#else
|
||||
av_log(NULL, AV_LOG_INFO, "No filters available: libavfilter disabled\n");
|
||||
av_log(NULL, AV_LOG_STDERR, "No filters available: libavfilter disabled\n");
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
@@ -1737,10 +1776,10 @@ int show_colors(void *optctx, const char *opt, const char *arg)
|
||||
const uint8_t *rgb;
|
||||
int i;
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, "%-32s #RRGGBB\n", "name");
|
||||
av_log(NULL, AV_LOG_STDERR, "%-32s #RRGGBB\n", "name");
|
||||
|
||||
for (i = 0; (name = av_get_known_color_name(i, &rgb)); i++)
|
||||
av_log(NULL, AV_LOG_INFO, "%-32s #%02x%02x%02x\n", name, rgb[0], rgb[1], rgb[2]);
|
||||
av_log(NULL, AV_LOG_STDERR, "%-32s #%02x%02x%02x\n", name, rgb[0], rgb[1], rgb[2]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1749,7 +1788,7 @@ int show_pix_fmts(void *optctx, const char *opt, const char *arg)
|
||||
{
|
||||
const AVPixFmtDescriptor *pix_desc = NULL;
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, "Pixel formats:\n"
|
||||
av_log(NULL, AV_LOG_STDERR, "Pixel formats:\n"
|
||||
"I.... = Supported Input format for conversion\n"
|
||||
".O... = Supported Output format for conversion\n"
|
||||
"..H.. = Hardware accelerated format\n"
|
||||
@@ -1765,7 +1804,7 @@ int show_pix_fmts(void *optctx, const char *opt, const char *arg)
|
||||
|
||||
while ((pix_desc = av_pix_fmt_desc_next(pix_desc))) {
|
||||
enum AVPixelFormat av_unused pix_fmt = av_pix_fmt_desc_get_id(pix_desc);
|
||||
av_log(NULL, AV_LOG_INFO, "%c%c%c%c%c %-16s %d %2d\n",
|
||||
av_log(NULL, AV_LOG_STDERR, "%c%c%c%c%c %-16s %d %2d\n",
|
||||
sws_isSupportedInput (pix_fmt) ? 'I' : '.',
|
||||
sws_isSupportedOutput(pix_fmt) ? 'O' : '.',
|
||||
pix_desc->flags & AV_PIX_FMT_FLAG_HWACCEL ? 'H' : '.',
|
||||
@@ -1784,24 +1823,24 @@ int show_layouts(void *optctx, const char *opt, const char *arg)
|
||||
uint64_t layout, j;
|
||||
const char *name, *descr;
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, "Individual channels:\n"
|
||||
av_log(NULL, AV_LOG_STDERR, "Individual channels:\n"
|
||||
"NAME DESCRIPTION\n");
|
||||
for (i = 0; i < 63; i++) {
|
||||
name = av_get_channel_name((uint64_t)1 << i);
|
||||
if (!name)
|
||||
continue;
|
||||
descr = av_get_channel_description((uint64_t)1 << i);
|
||||
av_log(NULL, AV_LOG_INFO, "%-14s %s\n", name, descr);
|
||||
av_log(NULL, AV_LOG_STDERR, "%-14s %s\n", name, descr);
|
||||
}
|
||||
av_log(NULL, AV_LOG_INFO, "\nStandard channel layouts:\n"
|
||||
av_log(NULL, AV_LOG_STDERR, "\nStandard channel layouts:\n"
|
||||
"NAME DECOMPOSITION\n");
|
||||
for (i = 0; !av_get_standard_channel_layout(i, &layout, &name); i++) {
|
||||
if (name) {
|
||||
av_log(NULL, AV_LOG_INFO, "%-14s ", name);
|
||||
av_log(NULL, AV_LOG_STDERR, "%-14s ", name);
|
||||
for (j = 1; j; j <<= 1)
|
||||
if ((layout & j))
|
||||
av_log(NULL, AV_LOG_INFO, "%s%s", (layout & (j - 1)) ? "+" : "", av_get_channel_name(j));
|
||||
av_log(NULL, AV_LOG_INFO, "\n");
|
||||
av_log(NULL, AV_LOG_STDERR, "%s%s", (layout & (j - 1)) ? "+" : "", av_get_channel_name(j));
|
||||
av_log(NULL, AV_LOG_STDERR, "\n");
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
@@ -1812,7 +1851,7 @@ int show_sample_fmts(void *optctx, const char *opt, const char *arg)
|
||||
int i;
|
||||
char fmt_str[128];
|
||||
for (i = -1; i < AV_SAMPLE_FMT_NB; i++)
|
||||
av_log(NULL, AV_LOG_INFO, "%s\n", av_get_sample_fmt_string(fmt_str, sizeof(fmt_str), i));
|
||||
av_log(NULL, AV_LOG_STDERR, "%s\n", av_get_sample_fmt_string(fmt_str, sizeof(fmt_str), i));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1860,10 +1899,10 @@ static void show_help_demuxer(const char *name)
|
||||
return;
|
||||
}
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, "Demuxer %s [%s]:\n", fmt->name, fmt->long_name);
|
||||
av_log(NULL, AV_LOG_STDERR, "Demuxer %s [%s]:\n", fmt->name, fmt->long_name);
|
||||
|
||||
if (fmt->extensions)
|
||||
av_log(NULL, AV_LOG_INFO, " Common extensions: %s.\n", fmt->extensions);
|
||||
av_log(NULL, AV_LOG_STDERR, " Common extensions: %s.\n", fmt->extensions);
|
||||
|
||||
if (fmt->priv_class)
|
||||
show_help_children(fmt->priv_class, AV_OPT_FLAG_DECODING_PARAM);
|
||||
@@ -1879,23 +1918,23 @@ static void show_help_muxer(const char *name)
|
||||
return;
|
||||
}
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, "Muxer %s [%s]:\n", fmt->name, fmt->long_name);
|
||||
av_log(NULL, AV_LOG_STDERR, "Muxer %s [%s]:\n", fmt->name, fmt->long_name);
|
||||
|
||||
if (fmt->extensions)
|
||||
av_log(NULL, AV_LOG_INFO, " Common extensions: %s.\n", fmt->extensions);
|
||||
av_log(NULL, AV_LOG_STDERR, " Common extensions: %s.\n", fmt->extensions);
|
||||
if (fmt->mime_type)
|
||||
av_log(NULL, AV_LOG_INFO, " Mime type: %s.\n", fmt->mime_type);
|
||||
av_log(NULL, AV_LOG_STDERR, " Mime type: %s.\n", fmt->mime_type);
|
||||
if (fmt->video_codec != AV_CODEC_ID_NONE &&
|
||||
(desc = avcodec_descriptor_get(fmt->video_codec))) {
|
||||
av_log(NULL, AV_LOG_INFO, " Default video codec: %s.\n", desc->name);
|
||||
av_log(NULL, AV_LOG_STDERR, " Default video codec: %s.\n", desc->name);
|
||||
}
|
||||
if (fmt->audio_codec != AV_CODEC_ID_NONE &&
|
||||
(desc = avcodec_descriptor_get(fmt->audio_codec))) {
|
||||
av_log(NULL, AV_LOG_INFO, " Default audio codec: %s.\n", desc->name);
|
||||
av_log(NULL, AV_LOG_STDERR, " Default audio codec: %s.\n", desc->name);
|
||||
}
|
||||
if (fmt->subtitle_codec != AV_CODEC_ID_NONE &&
|
||||
(desc = avcodec_descriptor_get(fmt->subtitle_codec))) {
|
||||
av_log(NULL, AV_LOG_INFO, " Default subtitle codec: %s.\n", desc->name);
|
||||
av_log(NULL, AV_LOG_STDERR, " Default subtitle codec: %s.\n", desc->name);
|
||||
}
|
||||
|
||||
if (fmt->priv_class)
|
||||
@@ -1917,40 +1956,40 @@ static void show_help_filter(const char *name)
|
||||
return;
|
||||
}
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, "Filter %s\n", f->name);
|
||||
av_log(NULL, AV_LOG_STDERR, "Filter %s\n", f->name);
|
||||
if (f->description)
|
||||
av_log(NULL, AV_LOG_INFO, " %s\n", f->description);
|
||||
av_log(NULL, AV_LOG_STDERR, " %s\n", f->description);
|
||||
|
||||
if (f->flags & AVFILTER_FLAG_SLICE_THREADS)
|
||||
av_log(NULL, AV_LOG_INFO, " slice threading supported\n");
|
||||
av_log(NULL, AV_LOG_STDERR, " slice threading supported\n");
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, " Inputs:\n");
|
||||
av_log(NULL, AV_LOG_STDERR, " Inputs:\n");
|
||||
count = avfilter_pad_count(f->inputs);
|
||||
for (i = 0; i < count; i++) {
|
||||
av_log(NULL, AV_LOG_INFO, " #%d: %s (%s)\n", i, avfilter_pad_get_name(f->inputs, i),
|
||||
av_log(NULL, AV_LOG_STDERR, " #%d: %s (%s)\n", i, avfilter_pad_get_name(f->inputs, i),
|
||||
media_type_string(avfilter_pad_get_type(f->inputs, i)));
|
||||
}
|
||||
if (f->flags & AVFILTER_FLAG_DYNAMIC_INPUTS)
|
||||
av_log(NULL, AV_LOG_INFO, " dynamic (depending on the options)\n");
|
||||
av_log(NULL, AV_LOG_STDERR, " dynamic (depending on the options)\n");
|
||||
else if (!count)
|
||||
av_log(NULL, AV_LOG_INFO, " none (source filter)\n");
|
||||
av_log(NULL, AV_LOG_STDERR, " none (source filter)\n");
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, " Outputs:\n");
|
||||
av_log(NULL, AV_LOG_STDERR, " Outputs:\n");
|
||||
count = avfilter_pad_count(f->outputs);
|
||||
for (i = 0; i < count; i++) {
|
||||
av_log(NULL, AV_LOG_INFO, " #%d: %s (%s)\n", i, avfilter_pad_get_name(f->outputs, i),
|
||||
av_log(NULL, AV_LOG_STDERR, " #%d: %s (%s)\n", i, avfilter_pad_get_name(f->outputs, i),
|
||||
media_type_string(avfilter_pad_get_type(f->outputs, i)));
|
||||
}
|
||||
if (f->flags & AVFILTER_FLAG_DYNAMIC_OUTPUTS)
|
||||
av_log(NULL, AV_LOG_INFO, " dynamic (depending on the options)\n");
|
||||
av_log(NULL, AV_LOG_STDERR, " dynamic (depending on the options)\n");
|
||||
else if (!count)
|
||||
av_log(NULL, AV_LOG_INFO, " none (sink filter)\n");
|
||||
av_log(NULL, AV_LOG_STDERR, " none (sink filter)\n");
|
||||
|
||||
if (f->priv_class)
|
||||
show_help_children(f->priv_class, AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_FILTERING_PARAM |
|
||||
AV_OPT_FLAG_AUDIO_PARAM);
|
||||
if (f->flags & AVFILTER_FLAG_SUPPORT_TIMELINE)
|
||||
av_log(NULL, AV_LOG_INFO, "This filter has support for timeline through the 'enable' option.\n");
|
||||
av_log(NULL, AV_LOG_STDERR, "This filter has support for timeline through the 'enable' option.\n");
|
||||
#else
|
||||
av_log(NULL, AV_LOG_ERROR, "Build without libavfilter; "
|
||||
"can not to satisfy request\n");
|
||||
@@ -1970,7 +2009,7 @@ static void show_help_bsf(const char *name)
|
||||
return;
|
||||
}
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, "Bit stream filter %s\n", bsf->name);
|
||||
av_log(NULL, AV_LOG_STDERR, "Bit stream filter %s\n", bsf->name);
|
||||
PRINT_CODEC_SUPPORTED(bsf, codec_ids, enum AVCodecID, "codecs",
|
||||
AV_CODEC_ID_NONE, GET_CODEC_NAME);
|
||||
if (bsf->priv_class)
|
||||
@@ -1980,7 +2019,6 @@ static void show_help_bsf(const char *name)
|
||||
int show_help(void *optctx, const char *opt, const char *arg)
|
||||
{
|
||||
char *topic, *par;
|
||||
av_log_set_callback(mobileffmpeg_log_callback_function);
|
||||
|
||||
topic = av_strdup(arg ? arg : "");
|
||||
if (!topic)
|
||||
@@ -1990,7 +2028,11 @@ int show_help(void *optctx, const char *opt, const char *arg)
|
||||
*par++ = 0;
|
||||
|
||||
if (!*topic) {
|
||||
show_help_default(topic, par);
|
||||
if (program_name && !strcmp(program_name, "ffmpeg")) {
|
||||
show_help_default_ffmpeg(topic, par);
|
||||
} else {
|
||||
show_help_default_ffprobe(topic, par);
|
||||
}
|
||||
} else if (!strcmp(topic, "decoder")) {
|
||||
show_help_codec(par, 0);
|
||||
} else if (!strcmp(topic, "encoder")) {
|
||||
@@ -2006,7 +2048,11 @@ int show_help(void *optctx, const char *opt, const char *arg)
|
||||
} else if (!strcmp(topic, "bsf")) {
|
||||
show_help_bsf(par);
|
||||
} else {
|
||||
show_help_default(topic, par);
|
||||
if (program_name && !strcmp(program_name, "ffmpeg")) {
|
||||
show_help_default_ffmpeg(topic, par);
|
||||
} else {
|
||||
show_help_default_ffprobe(topic, par);
|
||||
}
|
||||
}
|
||||
|
||||
av_freep(&topic);
|
||||
@@ -2038,7 +2084,7 @@ FILE *get_preset_file(char *filename, size_t filename_size,
|
||||
av_strlcpy(filename, preset_name, filename_size);
|
||||
f = fopen(filename, "r");
|
||||
} else {
|
||||
#ifdef _WIN32
|
||||
#if HAVE_GETMODULEHANDLE
|
||||
char datadir[MAX_PATH], *ls;
|
||||
base[2] = NULL;
|
||||
|
||||
@@ -2206,20 +2252,20 @@ static int print_device_sources(AVInputFormat *fmt, AVDictionary *opts)
|
||||
if (!fmt || !fmt->priv_class || !AV_IS_INPUT_DEVICE(fmt->priv_class->category))
|
||||
return AVERROR(EINVAL);
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, "Auto-detected sources for %s:\n", fmt->name);
|
||||
av_log(NULL, AV_LOG_STDERR, "Auto-detected sources for %s:\n", fmt->name);
|
||||
if (!fmt->get_device_list) {
|
||||
ret = AVERROR(ENOSYS);
|
||||
av_log(NULL, AV_LOG_INFO, "Cannot list sources. Not implemented.\n");
|
||||
av_log(NULL, AV_LOG_STDERR, "Cannot list sources. Not implemented.\n");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if ((ret = avdevice_list_input_sources(fmt, NULL, opts, &device_list)) < 0) {
|
||||
av_log(NULL, AV_LOG_INFO, "Cannot list sources.\n");
|
||||
av_log(NULL, AV_LOG_STDERR, "Cannot list sources.\n");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
for (i = 0; i < device_list->nb_devices; i++) {
|
||||
av_log(NULL, AV_LOG_INFO, "%s %s [%s]\n", device_list->default_device == i ? "*" : " ",
|
||||
av_log(NULL, AV_LOG_STDERR, "%s %s [%s]\n", device_list->default_device == i ? "*" : " ",
|
||||
device_list->devices[i]->device_name, device_list->devices[i]->device_description);
|
||||
}
|
||||
|
||||
@@ -2236,20 +2282,20 @@ static int print_device_sinks(AVOutputFormat *fmt, AVDictionary *opts)
|
||||
if (!fmt || !fmt->priv_class || !AV_IS_OUTPUT_DEVICE(fmt->priv_class->category))
|
||||
return AVERROR(EINVAL);
|
||||
|
||||
av_log(NULL, AV_LOG_INFO, "Auto-detected sinks for %s:\n", fmt->name);
|
||||
av_log(NULL, AV_LOG_STDERR, "Auto-detected sinks for %s:\n", fmt->name);
|
||||
if (!fmt->get_device_list) {
|
||||
ret = AVERROR(ENOSYS);
|
||||
av_log(NULL, AV_LOG_INFO, "Cannot list sinks. Not implemented.\n");
|
||||
av_log(NULL, AV_LOG_STDERR, "Cannot list sinks. Not implemented.\n");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if ((ret = avdevice_list_output_sinks(fmt, NULL, opts, &device_list)) < 0) {
|
||||
av_log(NULL, AV_LOG_INFO, "Cannot list sinks.\n");
|
||||
av_log(NULL, AV_LOG_STDERR, "Cannot list sinks.\n");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
for (i = 0; i < device_list->nb_devices; i++) {
|
||||
av_log(NULL, AV_LOG_INFO, "%s %s [%s]\n", device_list->default_device == i ? "*" : " ",
|
||||
av_log(NULL, AV_LOG_STDERR, "%s %s [%s]\n", device_list->default_device == i ? "*" : " ",
|
||||
device_list->devices[i]->device_name, device_list->devices[i]->device_description);
|
||||
}
|
||||
|
||||
@@ -2275,7 +2321,7 @@ static int show_sinks_sources_parse_arg(const char *arg, char **dev, AVDictionar
|
||||
}
|
||||
}
|
||||
} else
|
||||
av_log(NULL, AV_LOG_INFO, "\nDevice name is not provided.\n"
|
||||
av_log(NULL, AV_LOG_STDERR, "\nDevice name is not provided.\n"
|
||||
"You can pass devicename[,opt1=val1[,opt2=val2...]] as an argument.\n\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -20,6 +20,13 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* CHANGES 01.2020
|
||||
* - ffprobe support changes
|
||||
* - AV_LOG_STDERR introduced
|
||||
*
|
||||
* CHANGES 12.2019
|
||||
* - Concurrent execution support
|
||||
*
|
||||
* CHANGES 03.2019
|
||||
* --------------------------------------------------------
|
||||
* - config.h include removed
|
||||
@@ -48,22 +55,28 @@
|
||||
#undef main /* We don't want SDL to override our main() */
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Defines logs printed to stderr by ffmpeg. They are not filtered and always redirected.
|
||||
*/
|
||||
#define AV_LOG_STDERR -16
|
||||
|
||||
/**
|
||||
* program name, defined by the program for show_version().
|
||||
*/
|
||||
extern const char program_name[];
|
||||
extern __thread char *program_name;
|
||||
|
||||
/**
|
||||
* program birth year, defined by the program for show_banner()
|
||||
*/
|
||||
extern const int program_birth_year;
|
||||
extern __thread int program_birth_year;
|
||||
|
||||
extern AVCodecContext *avcodec_opts[AVMEDIA_TYPE_NB];
|
||||
extern AVFormatContext *avformat_opts;
|
||||
extern AVDictionary *sws_dict;
|
||||
extern AVDictionary *swr_opts;
|
||||
extern AVDictionary *format_opts, *codec_opts, *resample_opts;
|
||||
extern int hide_banner;
|
||||
extern __thread AVCodecContext *avcodec_opts[AVMEDIA_TYPE_NB];
|
||||
extern __thread AVFormatContext *avformat_opts;
|
||||
extern __thread AVDictionary *sws_dict;
|
||||
extern __thread AVDictionary *swr_opts;
|
||||
extern __thread AVDictionary *format_opts, *codec_opts, *resample_opts;
|
||||
extern __thread int hide_banner;
|
||||
extern __thread int find_stream_info;
|
||||
|
||||
/**
|
||||
* Register a program-specific cleanup routine.
|
||||
@@ -113,7 +126,7 @@ int opt_default(void *optctx, const char *opt, const char *arg);
|
||||
*/
|
||||
int opt_loglevel(void *optctx, const char *opt, const char *arg);
|
||||
|
||||
int opt_report(const char *opt);
|
||||
int opt_report(void *optctx, const char *opt, const char *arg);
|
||||
|
||||
int opt_max_alloc(void *optctx, const char *opt, const char *arg);
|
||||
|
||||
@@ -215,47 +228,6 @@ typedef struct OptionDef {
|
||||
void show_help_options(const OptionDef *options, const char *msg, int req_flags,
|
||||
int rej_flags, int alt_flags);
|
||||
|
||||
#if CONFIG_AVDEVICE
|
||||
#define CMDUTILS_COMMON_OPTIONS_AVDEVICE \
|
||||
{ "sources" , OPT_EXIT | HAS_ARG, { .func_arg = show_sources }, \
|
||||
"list sources of the input device", "device" }, \
|
||||
{ "sinks" , OPT_EXIT | HAS_ARG, { .func_arg = show_sinks }, \
|
||||
"list sinks of the output device", "device" }, \
|
||||
|
||||
#else
|
||||
#define CMDUTILS_COMMON_OPTIONS_AVDEVICE
|
||||
#endif
|
||||
|
||||
#define CMDUTILS_COMMON_OPTIONS \
|
||||
{ "L", OPT_EXIT, { .func_arg = show_license }, "show license" }, \
|
||||
{ "h", OPT_EXIT, { .func_arg = show_help }, "show help", "topic" }, \
|
||||
{ "?", OPT_EXIT, { .func_arg = show_help }, "show help", "topic" }, \
|
||||
{ "help", OPT_EXIT, { .func_arg = show_help }, "show help", "topic" }, \
|
||||
{ "-help", OPT_EXIT, { .func_arg = show_help }, "show help", "topic" }, \
|
||||
{ "version", OPT_EXIT, { .func_arg = show_version }, "show version" }, \
|
||||
{ "buildconf", OPT_EXIT, { .func_arg = show_buildconf }, "show build configuration" }, \
|
||||
{ "formats", OPT_EXIT, { .func_arg = show_formats }, "show available formats" }, \
|
||||
{ "muxers", OPT_EXIT, { .func_arg = show_muxers }, "show available muxers" }, \
|
||||
{ "demuxers", OPT_EXIT, { .func_arg = show_demuxers }, "show available demuxers" }, \
|
||||
{ "devices", OPT_EXIT, { .func_arg = show_devices }, "show available devices" }, \
|
||||
{ "codecs", OPT_EXIT, { .func_arg = show_codecs }, "show available codecs" }, \
|
||||
{ "decoders", OPT_EXIT, { .func_arg = show_decoders }, "show available decoders" }, \
|
||||
{ "encoders", OPT_EXIT, { .func_arg = show_encoders }, "show available encoders" }, \
|
||||
{ "bsfs", OPT_EXIT, { .func_arg = show_bsfs }, "show available bit stream filters" }, \
|
||||
{ "protocols", OPT_EXIT, { .func_arg = show_protocols }, "show available protocols" }, \
|
||||
{ "filters", OPT_EXIT, { .func_arg = show_filters }, "show available filters" }, \
|
||||
{ "pix_fmts", OPT_EXIT, { .func_arg = show_pix_fmts }, "show available pixel formats" }, \
|
||||
{ "layouts", OPT_EXIT, { .func_arg = show_layouts }, "show standard channel layouts" }, \
|
||||
{ "sample_fmts", OPT_EXIT, { .func_arg = show_sample_fmts }, "show available audio sample formats" }, \
|
||||
{ "colors", OPT_EXIT, { .func_arg = show_colors }, "show available color names" }, \
|
||||
{ "loglevel", HAS_ARG, { .func_arg = opt_loglevel }, "set logging level", "loglevel" }, \
|
||||
{ "v", HAS_ARG, { .func_arg = opt_loglevel }, "set logging level", "loglevel" }, \
|
||||
{ "report", 0, { (void*)opt_report }, "generate a report" }, \
|
||||
{ "max_alloc", HAS_ARG, { .func_arg = opt_max_alloc }, "set maximum size of a single allocated block", "bytes" }, \
|
||||
{ "cpuflags", HAS_ARG | OPT_EXPERT, { .func_arg = opt_cpuflags }, "force specific cpu flags", "flags" }, \
|
||||
{ "hide_banner", OPT_BOOL | OPT_EXPERT, {&hide_banner}, "do not show program banner", "hide_banner" }, \
|
||||
CMDUTILS_COMMON_OPTIONS_AVDEVICE \
|
||||
|
||||
/**
|
||||
* Show help for all options with given flags in class and all its
|
||||
* children.
|
||||
@@ -263,10 +235,11 @@ void show_help_options(const OptionDef *options, const char *msg, int req_flags,
|
||||
void show_help_children(const AVClass *class, int flags);
|
||||
|
||||
/**
|
||||
* Per-fftool specific help handler. Implemented in each
|
||||
* Per-fftool specific help handlers. Implemented in each
|
||||
* fftool, called by show_help().
|
||||
*/
|
||||
void show_help_default(const char *opt, const char *arg);
|
||||
void show_help_default_ffmpeg(const char *opt, const char *arg);
|
||||
void show_help_default_ffprobe(const char *opt, const char *arg);
|
||||
|
||||
/**
|
||||
* Generic -h handler common to all fftools.
|
||||
@@ -361,7 +334,6 @@ typedef struct OptionParseContext {
|
||||
* Parse an options group and write results into optctx.
|
||||
*
|
||||
* @param optctx an app-specific options context. NULL for global options group
|
||||
* @param g option group
|
||||
*/
|
||||
int parse_optgroup(void *optctx, OptionGroup *g);
|
||||
|
||||
|
||||
@@ -24,6 +24,12 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* CHANGES 01.2020
|
||||
* - ffprobe support changes
|
||||
*
|
||||
* CHANGES 12.2019
|
||||
* - Concurrent execution support
|
||||
*
|
||||
* CHANGES 08.2018
|
||||
* --------------------------------------------------------
|
||||
* - fftools_ prefix added to file name and parent headers
|
||||
@@ -35,10 +41,10 @@
|
||||
*
|
||||
* CHANGES 07.2018
|
||||
* --------------------------------------------------------
|
||||
* - main() function renamed as execute()
|
||||
* - main() function renamed as ffmpeg_execute()
|
||||
* - exit_program() implemented with setjmp
|
||||
* - extern longjmp_value added to access exit code stored in exit_program()
|
||||
* - cleanup() method added
|
||||
* - ffmpeg_var_cleanup() method added
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
@@ -126,9 +132,6 @@
|
||||
|
||||
#include "libavutil/avassert.h"
|
||||
|
||||
const char program_name[] = "ffmpeg";
|
||||
const int program_birth_year = 2000;
|
||||
|
||||
static FILE *vstats_file;
|
||||
|
||||
const char *const forced_keyframes_const_names[] = {
|
||||
@@ -151,39 +154,85 @@ static BenchmarkTimeStamps get_benchmark_time_stamps(void);
|
||||
static int64_t getmaxrss(void);
|
||||
static int ifilter_has_all_input_formats(FilterGraph *fg);
|
||||
|
||||
static int run_as_daemon = 0;
|
||||
static int nb_frames_dup = 0;
|
||||
static unsigned dup_warning = 1000;
|
||||
static int nb_frames_drop = 0;
|
||||
static int64_t decode_error_stat[2];
|
||||
__thread int run_as_daemon = 0;
|
||||
__thread int nb_frames_dup = 0;
|
||||
__thread unsigned dup_warning = 1000;
|
||||
__thread int nb_frames_drop = 0;
|
||||
__thread int64_t decode_error_stat[2];
|
||||
|
||||
static int want_sdp = 1;
|
||||
__thread int want_sdp = 1;
|
||||
|
||||
static BenchmarkTimeStamps current_time;
|
||||
AVIOContext *progress_avio = NULL;
|
||||
__thread BenchmarkTimeStamps current_time;
|
||||
__thread AVIOContext *progress_avio = NULL;
|
||||
|
||||
static uint8_t *subtitle_out;
|
||||
__thread uint8_t *subtitle_out;
|
||||
|
||||
InputStream **input_streams = NULL;
|
||||
int nb_input_streams = 0;
|
||||
InputFile **input_files = NULL;
|
||||
int nb_input_files = 0;
|
||||
__thread InputStream **input_streams = NULL;
|
||||
__thread int nb_input_streams = 0;
|
||||
__thread InputFile **input_files = NULL;
|
||||
__thread int nb_input_files = 0;
|
||||
|
||||
OutputStream **output_streams = NULL;
|
||||
int nb_output_streams = 0;
|
||||
OutputFile **output_files = NULL;
|
||||
int nb_output_files = 0;
|
||||
__thread OutputStream **output_streams = NULL;
|
||||
__thread int nb_output_streams = 0;
|
||||
__thread OutputFile **output_files = NULL;
|
||||
__thread int nb_output_files = 0;
|
||||
|
||||
FilterGraph **filtergraphs;
|
||||
int nb_filtergraphs;
|
||||
__thread FilterGraph **filtergraphs;
|
||||
__thread int nb_filtergraphs;
|
||||
|
||||
static void (*report_callback)(int, float, float, int64_t, int, double, double) = NULL;
|
||||
void (*report_callback)(int, float, float, int64_t, int, double, double) = NULL;
|
||||
|
||||
extern __thread int file_overwrite;
|
||||
extern __thread int no_file_overwrite;
|
||||
extern __thread int ignore_unknown_streams;
|
||||
extern __thread int copy_unknown_streams;
|
||||
extern int opt_map(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_map_channel(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_recording_timestamp(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_data_frames(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_progress(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_target(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_vsync(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_abort_on(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_qscale(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_profile(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_filter_complex(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_filter_complex_script(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_attach(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_video_frames(void *optctx, const char *opt, const char *arg);
|
||||
extern __thread int intra_only;
|
||||
extern int opt_video_codec(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_sameq(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_timecode(void *optctx, const char *opt, const char *arg);
|
||||
extern __thread int do_psnr;
|
||||
extern int opt_vstats_file(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_vstats(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_video_frames(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_old2new(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_streamid(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_bitrate(void *optctx, const char *opt, const char *arg);
|
||||
extern int show_hwaccels(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_video_filters(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_audio_frames(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_audio_qscale(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_audio_codec(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_channel_layout(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_preset(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_audio_filters(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_subtitle_codec(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_video_channel(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_video_standard(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_sdp_file(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_data_codec(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_init_hw_device(void *optctx, const char *opt, const char *arg);
|
||||
extern int opt_filter_hw_device(void *optctx, const char *opt, const char *arg);
|
||||
extern __thread int input_sync;
|
||||
|
||||
#if HAVE_TERMIOS_H
|
||||
|
||||
/* init terminal so that we can grab keys */
|
||||
static struct termios oldtty;
|
||||
static int restore_tty;
|
||||
__thread struct termios oldtty;
|
||||
__thread int restore_tty;
|
||||
#endif
|
||||
|
||||
#if HAVE_THREADS
|
||||
@@ -353,12 +402,12 @@ void term_exit(void)
|
||||
term_exit_sigsafe();
|
||||
}
|
||||
|
||||
static volatile int received_sigterm = 0;
|
||||
static volatile int received_nb_signals = 0;
|
||||
static atomic_int transcode_init_done = ATOMIC_VAR_INIT(0);
|
||||
static volatile int ffmpeg_exited = 0;
|
||||
static int main_return_code = 0;
|
||||
extern int longjmp_value;
|
||||
volatile int received_sigterm = 0;
|
||||
volatile int received_nb_signals = 0;
|
||||
__thread atomic_int transcode_init_done = ATOMIC_VAR_INIT(0);
|
||||
__thread volatile int ffmpeg_exited = 0;
|
||||
__thread int main_ffmpeg_return_code = 0;
|
||||
extern __thread int longjmp_value;
|
||||
|
||||
static void
|
||||
sigterm_handler(int sig)
|
||||
@@ -496,12 +545,14 @@ static int read_key(void)
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int decode_interrupt_cb(void *ctx)
|
||||
int decode_interrupt_cb(void *ctx);
|
||||
|
||||
int decode_interrupt_cb(void *ctx)
|
||||
{
|
||||
return received_nb_signals > atomic_load(&transcode_init_done);
|
||||
}
|
||||
|
||||
const AVIOInterruptCB int_cb = { decode_interrupt_cb, NULL };
|
||||
__thread const AVIOInterruptCB int_cb = { decode_interrupt_cb, NULL };
|
||||
|
||||
static void ffmpeg_cleanup(int ret)
|
||||
{
|
||||
@@ -590,6 +641,7 @@ static void ffmpeg_cleanup(int ret)
|
||||
ost->audio_channels_mapped = 0;
|
||||
|
||||
av_dict_free(&ost->sws_dict);
|
||||
av_dict_free(&ost->swr_opts);
|
||||
|
||||
avcodec_free_context(&ost->enc_ctx);
|
||||
avcodec_parameters_free(&ost->ref_par);
|
||||
@@ -838,7 +890,7 @@ static void write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost, int u
|
||||
ret = av_interleaved_write_frame(s, pkt);
|
||||
if (ret < 0) {
|
||||
print_error("av_interleaved_write_frame()", ret);
|
||||
main_return_code = 1;
|
||||
main_ffmpeg_return_code = 1;
|
||||
close_all_output_streams(ost, MUXER_FINISHED | ENCODER_FINISHED, ENCODER_FINISHED);
|
||||
}
|
||||
av_packet_unref(pkt);
|
||||
@@ -2103,12 +2155,13 @@ static void do_streamcopy(InputStream *ist, OutputStream *ost, const AVPacket *p
|
||||
InputFile *f = input_files [ist->file_index];
|
||||
int64_t start_time = (of->start_time == AV_NOPTS_VALUE) ? 0 : of->start_time;
|
||||
int64_t ost_tb_start_time = av_rescale_q(start_time, AV_TIME_BASE_Q, ost->mux_timebase);
|
||||
AVPacket opkt = { 0 };
|
||||
|
||||
av_init_packet(&opkt);
|
||||
AVPacket opkt;
|
||||
|
||||
// EOF: flush output bitstream filters.
|
||||
if (!pkt) {
|
||||
av_init_packet(&opkt);
|
||||
opkt.data = NULL;
|
||||
opkt.size = 0;
|
||||
output_packet(of, &opkt, ost, 1);
|
||||
return;
|
||||
}
|
||||
@@ -2147,10 +2200,11 @@ static void do_streamcopy(InputStream *ist, OutputStream *ost, const AVPacket *p
|
||||
if (ost->enc_ctx->codec_type == AVMEDIA_TYPE_VIDEO)
|
||||
ost->sync_opts++;
|
||||
|
||||
if (av_packet_ref(&opkt, pkt) < 0)
|
||||
exit_program(1);
|
||||
|
||||
if (pkt->pts != AV_NOPTS_VALUE)
|
||||
opkt.pts = av_rescale_q(pkt->pts, ist->st->time_base, ost->mux_timebase) - ost_tb_start_time;
|
||||
else
|
||||
opkt.pts = AV_NOPTS_VALUE;
|
||||
|
||||
if (pkt->dts == AV_NOPTS_VALUE)
|
||||
opkt.dts = av_rescale_q(ist->dts, AV_TIME_BASE_Q, ost->mux_timebase);
|
||||
@@ -2169,18 +2223,6 @@ static void do_streamcopy(InputStream *ist, OutputStream *ost, const AVPacket *p
|
||||
|
||||
opkt.duration = av_rescale_q(pkt->duration, ist->st->time_base, ost->mux_timebase);
|
||||
|
||||
opkt.flags = pkt->flags;
|
||||
|
||||
if (pkt->buf) {
|
||||
opkt.buf = av_buffer_ref(pkt->buf);
|
||||
if (!opkt.buf)
|
||||
exit_program(1);
|
||||
}
|
||||
opkt.data = pkt->data;
|
||||
opkt.size = pkt->size;
|
||||
|
||||
av_copy_packet_side_data(&opkt, pkt);
|
||||
|
||||
output_packet(of, &opkt, ost, 0);
|
||||
}
|
||||
|
||||
@@ -2890,7 +2932,7 @@ static void print_sdp(void)
|
||||
av_sdp_create(avc, j, sdp, sizeof(sdp));
|
||||
|
||||
if (!sdp_filename) {
|
||||
av_log(NULL, AV_LOG_INFO, "SDP:\n%s\n", sdp);
|
||||
av_log(NULL, AV_LOG_STDERR, "SDP:\n%s\n", sdp);
|
||||
fflush(stdout);
|
||||
} else {
|
||||
if (avio_open2(&sdp_pb, sdp_filename, AVIO_FLAG_WRITE, &int_cb, NULL) < 0) {
|
||||
@@ -3987,7 +4029,9 @@ static OutputStream *choose_output(void)
|
||||
av_rescale_q(ost->st->cur_dts, ost->st->time_base,
|
||||
AV_TIME_BASE_Q);
|
||||
if (ost->st->cur_dts == AV_NOPTS_VALUE)
|
||||
av_log(NULL, AV_LOG_DEBUG, "cur_dts is invalid (this is harmless if it occurs once at the start per stream)\n");
|
||||
av_log(NULL, AV_LOG_DEBUG,
|
||||
"cur_dts is invalid st:%d (%d) [init:%d i_done:%d finish:%d] (this is harmless if it occurs once at the start per stream)\n",
|
||||
ost->st->index, ost->st->id, ost->initialized, ost->inputs_done, ost->finished);
|
||||
|
||||
if (!ost->initialized && !ost->inputs_done)
|
||||
return ost;
|
||||
@@ -4305,7 +4349,7 @@ static int seek_to_start(InputFile *ifile, AVFormatContext *is)
|
||||
int i, ret, has_audio = 0;
|
||||
int64_t duration = 0;
|
||||
|
||||
ret = av_seek_frame(is, -1, is->start_time, 0);
|
||||
ret = avformat_seek_file(is, -1, INT64_MIN, is->start_time, is->start_time, 0);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
@@ -4950,8 +4994,8 @@ static void log_callback_null(void *ptr, int level, const char *fmt, va_list vl)
|
||||
{
|
||||
}
|
||||
|
||||
void cleanup() {
|
||||
main_return_code = 0;
|
||||
void ffmpeg_var_cleanup() {
|
||||
main_ffmpeg_return_code = 0;
|
||||
longjmp_value = 0;
|
||||
received_sigterm = 0;
|
||||
received_nb_signals = 0;
|
||||
@@ -4990,15 +5034,449 @@ void cancel_operation()
|
||||
sigterm_handler(SIGINT);
|
||||
}
|
||||
|
||||
int execute(int argc, char **argv)
|
||||
__thread OptionDef *ffmpeg_options = NULL;
|
||||
|
||||
int ffmpeg_execute(int argc, char **argv)
|
||||
{
|
||||
char _program_name[] = "ffmpeg";
|
||||
program_name = (char*)&_program_name;
|
||||
program_birth_year = 2000;
|
||||
|
||||
#define OFFSET(x) offsetof(OptionsContext, x)
|
||||
OptionDef options[] = {
|
||||
|
||||
/* main options */
|
||||
{ "L", OPT_EXIT, { .func_arg = show_license }, "show license" },
|
||||
{ "h", OPT_EXIT, { .func_arg = show_help }, "show help", "topic" },
|
||||
{ "?", OPT_EXIT, { .func_arg = show_help }, "show help", "topic" },
|
||||
{ "help", OPT_EXIT, { .func_arg = show_help }, "show help", "topic" },
|
||||
{ "-help", OPT_EXIT, { .func_arg = show_help }, "show help", "topic" },
|
||||
{ "version", OPT_EXIT, { .func_arg = show_version }, "show version" },
|
||||
{ "buildconf", OPT_EXIT, { .func_arg = show_buildconf }, "show build configuration" },
|
||||
{ "formats", OPT_EXIT, { .func_arg = show_formats }, "show available formats" },
|
||||
{ "muxers", OPT_EXIT, { .func_arg = show_muxers }, "show available muxers" },
|
||||
{ "demuxers", OPT_EXIT, { .func_arg = show_demuxers }, "show available demuxers" },
|
||||
{ "devices", OPT_EXIT, { .func_arg = show_devices }, "show available devices" },
|
||||
{ "codecs", OPT_EXIT, { .func_arg = show_codecs }, "show available codecs" },
|
||||
{ "decoders", OPT_EXIT, { .func_arg = show_decoders }, "show available decoders" },
|
||||
{ "encoders", OPT_EXIT, { .func_arg = show_encoders }, "show available encoders" },
|
||||
{ "bsfs", OPT_EXIT, { .func_arg = show_bsfs }, "show available bit stream filters" },
|
||||
{ "protocols", OPT_EXIT, { .func_arg = show_protocols }, "show available protocols" },
|
||||
{ "filters", OPT_EXIT, { .func_arg = show_filters }, "show available filters" },
|
||||
{ "pix_fmts", OPT_EXIT, { .func_arg = show_pix_fmts }, "show available pixel formats" },
|
||||
{ "layouts", OPT_EXIT, { .func_arg = show_layouts }, "show standard channel layouts" },
|
||||
{ "sample_fmts", OPT_EXIT, { .func_arg = show_sample_fmts }, "show available audio sample formats" },
|
||||
{ "colors", OPT_EXIT, { .func_arg = show_colors }, "show available color names" },
|
||||
{ "loglevel", HAS_ARG, { .func_arg = opt_loglevel }, "set logging level", "loglevel" },
|
||||
{ "v", HAS_ARG, { .func_arg = opt_loglevel }, "set logging level", "loglevel" },
|
||||
{ "report", 0, { .func_arg = opt_report }, "generate a report" },
|
||||
{ "max_alloc", HAS_ARG, { .func_arg = opt_max_alloc }, "set maximum size of a single allocated block", "bytes" },
|
||||
{ "cpuflags", HAS_ARG | OPT_EXPERT, { .func_arg = opt_cpuflags }, "force specific cpu flags", "flags" },
|
||||
{ "hide_banner", OPT_BOOL | OPT_EXPERT, {&hide_banner}, "do not show program banner", "hide_banner" },
|
||||
|
||||
#if CONFIG_AVDEVICE
|
||||
{ "sources" , OPT_EXIT | HAS_ARG, { .func_arg = show_sources },
|
||||
"list sources of the input device", "device" },
|
||||
{ "sinks" , OPT_EXIT | HAS_ARG, { .func_arg = show_sinks },
|
||||
"list sinks of the output device", "device" },
|
||||
#endif
|
||||
|
||||
{ "f", HAS_ARG | OPT_STRING | OPT_OFFSET |
|
||||
OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(format) },
|
||||
"force format", "fmt" },
|
||||
{ "y", OPT_BOOL, { &file_overwrite },
|
||||
"overwrite output files" },
|
||||
{ "n", OPT_BOOL, { &no_file_overwrite },
|
||||
"never overwrite output files" },
|
||||
{ "ignore_unknown", OPT_BOOL, { &ignore_unknown_streams },
|
||||
"Ignore unknown stream types" },
|
||||
{ "copy_unknown", OPT_BOOL | OPT_EXPERT, { ©_unknown_streams },
|
||||
"Copy unknown stream types" },
|
||||
{ "c", HAS_ARG | OPT_STRING | OPT_SPEC |
|
||||
OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(codec_names) },
|
||||
"codec name", "codec" },
|
||||
{ "codec", HAS_ARG | OPT_STRING | OPT_SPEC |
|
||||
OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(codec_names) },
|
||||
"codec name", "codec" },
|
||||
{ "pre", HAS_ARG | OPT_STRING | OPT_SPEC |
|
||||
OPT_OUTPUT, { .off = OFFSET(presets) },
|
||||
"preset name", "preset" },
|
||||
{ "map", HAS_ARG | OPT_EXPERT | OPT_PERFILE |
|
||||
OPT_OUTPUT, { .func_arg = opt_map },
|
||||
"set input stream mapping",
|
||||
"[-]input_file_id[:stream_specifier][,sync_file_id[:stream_specifier]]" },
|
||||
{ "map_channel", HAS_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_map_channel },
|
||||
"map an audio channel from one stream to another", "file.stream.channel[:syncfile.syncstream]" },
|
||||
{ "map_metadata", HAS_ARG | OPT_STRING | OPT_SPEC |
|
||||
OPT_OUTPUT, { .off = OFFSET(metadata_map) },
|
||||
"set metadata information of outfile from infile",
|
||||
"outfile[,metadata]:infile[,metadata]" },
|
||||
{ "map_chapters", HAS_ARG | OPT_INT | OPT_EXPERT | OPT_OFFSET |
|
||||
OPT_OUTPUT, { .off = OFFSET(chapters_input_file) },
|
||||
"set chapters mapping", "input_file_index" },
|
||||
{ "t", HAS_ARG | OPT_TIME | OPT_OFFSET |
|
||||
OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(recording_time) },
|
||||
"record or transcode \"duration\" seconds of audio/video",
|
||||
"duration" },
|
||||
{ "to", HAS_ARG | OPT_TIME | OPT_OFFSET | OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(stop_time) },
|
||||
"record or transcode stop time", "time_stop" },
|
||||
{ "fs", HAS_ARG | OPT_INT64 | OPT_OFFSET | OPT_OUTPUT, { .off = OFFSET(limit_filesize) },
|
||||
"set the limit file size in bytes", "limit_size" },
|
||||
{ "ss", HAS_ARG | OPT_TIME | OPT_OFFSET |
|
||||
OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(start_time) },
|
||||
"set the start time offset", "time_off" },
|
||||
{ "sseof", HAS_ARG | OPT_TIME | OPT_OFFSET |
|
||||
OPT_INPUT, { .off = OFFSET(start_time_eof) },
|
||||
"set the start time offset relative to EOF", "time_off" },
|
||||
{ "seek_timestamp", HAS_ARG | OPT_INT | OPT_OFFSET |
|
||||
OPT_INPUT, { .off = OFFSET(seek_timestamp) },
|
||||
"enable/disable seeking by timestamp with -ss" },
|
||||
{ "accurate_seek", OPT_BOOL | OPT_OFFSET | OPT_EXPERT |
|
||||
OPT_INPUT, { .off = OFFSET(accurate_seek) },
|
||||
"enable/disable accurate seeking with -ss" },
|
||||
{ "itsoffset", HAS_ARG | OPT_TIME | OPT_OFFSET |
|
||||
OPT_EXPERT | OPT_INPUT, { .off = OFFSET(input_ts_offset) },
|
||||
"set the input ts offset", "time_off" },
|
||||
{ "itsscale", HAS_ARG | OPT_DOUBLE | OPT_SPEC |
|
||||
OPT_EXPERT | OPT_INPUT, { .off = OFFSET(ts_scale) },
|
||||
"set the input ts scale", "scale" },
|
||||
{ "timestamp", HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_recording_timestamp },
|
||||
"set the recording timestamp ('now' to set the current time)", "time" },
|
||||
{ "metadata", HAS_ARG | OPT_STRING | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(metadata) },
|
||||
"add metadata", "string=string" },
|
||||
{ "program", HAS_ARG | OPT_STRING | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(program) },
|
||||
"add program with specified streams", "title=string:st=number..." },
|
||||
{ "dframes", HAS_ARG | OPT_PERFILE | OPT_EXPERT |
|
||||
OPT_OUTPUT, { .func_arg = opt_data_frames },
|
||||
"set the number of data frames to output", "number" },
|
||||
{ "benchmark", OPT_BOOL | OPT_EXPERT, { &do_benchmark },
|
||||
"add timings for benchmarking" },
|
||||
{ "benchmark_all", OPT_BOOL | OPT_EXPERT, { &do_benchmark_all },
|
||||
"add timings for each task" },
|
||||
{ "progress", HAS_ARG | OPT_EXPERT, { .func_arg = opt_progress },
|
||||
"write program-readable progress information", "url" },
|
||||
{ "stdin", OPT_BOOL | OPT_EXPERT, { &stdin_interaction },
|
||||
"enable or disable interaction on standard input" },
|
||||
{ "timelimit", HAS_ARG | OPT_EXPERT, { .func_arg = opt_timelimit },
|
||||
"set max runtime in seconds in CPU user time", "limit" },
|
||||
{ "dump", OPT_BOOL | OPT_EXPERT, { &do_pkt_dump },
|
||||
"dump each input packet" },
|
||||
{ "hex", OPT_BOOL | OPT_EXPERT, { &do_hex_dump },
|
||||
"when dumping packets, also dump the payload" },
|
||||
{ "re", OPT_BOOL | OPT_EXPERT | OPT_OFFSET |
|
||||
OPT_INPUT, { .off = OFFSET(rate_emu) },
|
||||
"read input at native frame rate", "" },
|
||||
{ "target", HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_target },
|
||||
"specify target file type (\"vcd\", \"svcd\", \"dvd\", \"dv\" or \"dv50\" "
|
||||
"with optional prefixes \"pal-\", \"ntsc-\" or \"film-\")", "type" },
|
||||
{ "vsync", HAS_ARG | OPT_EXPERT, { .func_arg = opt_vsync },
|
||||
"video sync method", "" },
|
||||
{ "frame_drop_threshold", HAS_ARG | OPT_FLOAT | OPT_EXPERT, { &frame_drop_threshold },
|
||||
"frame drop threshold", "" },
|
||||
{ "async", HAS_ARG | OPT_INT | OPT_EXPERT, { &audio_sync_method },
|
||||
"audio sync method", "" },
|
||||
{ "adrift_threshold", HAS_ARG | OPT_FLOAT | OPT_EXPERT, { &audio_drift_threshold },
|
||||
"audio drift threshold", "threshold" },
|
||||
{ "copyts", OPT_BOOL | OPT_EXPERT, { ©_ts },
|
||||
"copy timestamps" },
|
||||
{ "start_at_zero", OPT_BOOL | OPT_EXPERT, { &start_at_zero },
|
||||
"shift input timestamps to start at 0 when using copyts" },
|
||||
{ "copytb", HAS_ARG | OPT_INT | OPT_EXPERT, { ©_tb },
|
||||
"copy input stream time base when stream copying", "mode" },
|
||||
{ "shortest", OPT_BOOL | OPT_EXPERT | OPT_OFFSET |
|
||||
OPT_OUTPUT, { .off = OFFSET(shortest) },
|
||||
"finish encoding within shortest input" },
|
||||
{ "bitexact", OPT_BOOL | OPT_EXPERT | OPT_OFFSET |
|
||||
OPT_OUTPUT | OPT_INPUT, { .off = OFFSET(bitexact) },
|
||||
"bitexact mode" },
|
||||
{ "apad", OPT_STRING | HAS_ARG | OPT_SPEC |
|
||||
OPT_OUTPUT, { .off = OFFSET(apad) },
|
||||
"audio pad", "" },
|
||||
{ "dts_delta_threshold", HAS_ARG | OPT_FLOAT | OPT_EXPERT, { &dts_delta_threshold },
|
||||
"timestamp discontinuity delta threshold", "threshold" },
|
||||
{ "dts_error_threshold", HAS_ARG | OPT_FLOAT | OPT_EXPERT, { &dts_error_threshold },
|
||||
"timestamp error delta threshold", "threshold" },
|
||||
{ "xerror", OPT_BOOL | OPT_EXPERT, { &exit_on_error },
|
||||
"exit on error", "error" },
|
||||
{ "abort_on", HAS_ARG | OPT_EXPERT, { .func_arg = opt_abort_on },
|
||||
"abort on the specified condition flags", "flags" },
|
||||
{ "copyinkf", OPT_BOOL | OPT_EXPERT | OPT_SPEC |
|
||||
OPT_OUTPUT, { .off = OFFSET(copy_initial_nonkeyframes) },
|
||||
"copy initial non-keyframes" },
|
||||
{ "copypriorss", OPT_INT | HAS_ARG | OPT_EXPERT | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(copy_prior_start) },
|
||||
"copy or discard frames before start time" },
|
||||
{ "frames", OPT_INT64 | HAS_ARG | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(max_frames) },
|
||||
"set the number of frames to output", "number" },
|
||||
{ "tag", OPT_STRING | HAS_ARG | OPT_SPEC |
|
||||
OPT_EXPERT | OPT_OUTPUT | OPT_INPUT, { .off = OFFSET(codec_tags) },
|
||||
"force codec tag/fourcc", "fourcc/tag" },
|
||||
{ "q", HAS_ARG | OPT_EXPERT | OPT_DOUBLE |
|
||||
OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(qscale) },
|
||||
"use fixed quality scale (VBR)", "q" },
|
||||
{ "qscale", HAS_ARG | OPT_EXPERT | OPT_PERFILE |
|
||||
OPT_OUTPUT, { .func_arg = opt_qscale },
|
||||
"use fixed quality scale (VBR)", "q" },
|
||||
{ "profile", HAS_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_profile },
|
||||
"set profile", "profile" },
|
||||
{ "filter", HAS_ARG | OPT_STRING | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(filters) },
|
||||
"set stream filtergraph", "filter_graph" },
|
||||
{ "filter_threads", HAS_ARG | OPT_INT, { &filter_nbthreads },
|
||||
"number of non-complex filter threads" },
|
||||
{ "filter_script", HAS_ARG | OPT_STRING | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(filter_scripts) },
|
||||
"read stream filtergraph description from a file", "filename" },
|
||||
{ "reinit_filter", HAS_ARG | OPT_INT | OPT_SPEC | OPT_INPUT, { .off = OFFSET(reinit_filters) },
|
||||
"reinit filtergraph on input parameter changes", "" },
|
||||
{ "filter_complex", HAS_ARG | OPT_EXPERT, { .func_arg = opt_filter_complex },
|
||||
"create a complex filtergraph", "graph_description" },
|
||||
{ "filter_complex_threads", HAS_ARG | OPT_INT, { &filter_complex_nbthreads },
|
||||
"number of threads for -filter_complex" },
|
||||
{ "lavfi", HAS_ARG | OPT_EXPERT, { .func_arg = opt_filter_complex },
|
||||
"create a complex filtergraph", "graph_description" },
|
||||
{ "filter_complex_script", HAS_ARG | OPT_EXPERT, { .func_arg = opt_filter_complex_script },
|
||||
"read complex filtergraph description from a file", "filename" },
|
||||
{ "stats", OPT_BOOL, { &print_stats },
|
||||
"print progress report during encoding", },
|
||||
{ "attach", HAS_ARG | OPT_PERFILE | OPT_EXPERT |
|
||||
OPT_OUTPUT, { .func_arg = opt_attach },
|
||||
"add an attachment to the output file", "filename" },
|
||||
{ "dump_attachment", HAS_ARG | OPT_STRING | OPT_SPEC |
|
||||
OPT_EXPERT | OPT_INPUT, { .off = OFFSET(dump_attachment) },
|
||||
"extract an attachment into a file", "filename" },
|
||||
{ "stream_loop", OPT_INT | HAS_ARG | OPT_EXPERT | OPT_INPUT |
|
||||
OPT_OFFSET, { .off = OFFSET(loop) }, "set number of times input stream shall be looped", "loop count" },
|
||||
{ "debug_ts", OPT_BOOL | OPT_EXPERT, { &debug_ts },
|
||||
"print timestamp debugging info" },
|
||||
{ "max_error_rate", HAS_ARG | OPT_FLOAT, { &max_error_rate },
|
||||
"ratio of errors (0.0: no errors, 1.0: 100% errors) above which ffmpeg returns an error instead of success.", "maximum error rate" },
|
||||
{ "discard", OPT_STRING | HAS_ARG | OPT_SPEC |
|
||||
OPT_INPUT, { .off = OFFSET(discard) },
|
||||
"discard", "" },
|
||||
{ "disposition", OPT_STRING | HAS_ARG | OPT_SPEC |
|
||||
OPT_OUTPUT, { .off = OFFSET(disposition) },
|
||||
"disposition", "" },
|
||||
{ "thread_queue_size", HAS_ARG | OPT_INT | OPT_OFFSET | OPT_EXPERT | OPT_INPUT,
|
||||
{ .off = OFFSET(thread_queue_size) },
|
||||
"set the maximum number of queued packets from the demuxer" },
|
||||
{ "find_stream_info", OPT_BOOL | OPT_PERFILE | OPT_INPUT | OPT_EXPERT, { &find_stream_info },
|
||||
"read and decode the streams to fill missing information with heuristics" },
|
||||
|
||||
/* video options */
|
||||
{ "vframes", OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_video_frames },
|
||||
"set the number of video frames to output", "number" },
|
||||
{ "r", OPT_VIDEO | HAS_ARG | OPT_STRING | OPT_SPEC |
|
||||
OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(frame_rates) },
|
||||
"set frame rate (Hz value, fraction or abbreviation)", "rate" },
|
||||
{ "s", OPT_VIDEO | HAS_ARG | OPT_SUBTITLE | OPT_STRING | OPT_SPEC |
|
||||
OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(frame_sizes) },
|
||||
"set frame size (WxH or abbreviation)", "size" },
|
||||
{ "aspect", OPT_VIDEO | HAS_ARG | OPT_STRING | OPT_SPEC |
|
||||
OPT_OUTPUT, { .off = OFFSET(frame_aspect_ratios) },
|
||||
"set aspect ratio (4:3, 16:9 or 1.3333, 1.7777)", "aspect" },
|
||||
{ "pix_fmt", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_STRING | OPT_SPEC |
|
||||
OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(frame_pix_fmts) },
|
||||
"set pixel format", "format" },
|
||||
{ "bits_per_raw_sample", OPT_VIDEO | OPT_INT | HAS_ARG, { &frame_bits_per_raw_sample },
|
||||
"set the number of bits per raw sample", "number" },
|
||||
{ "intra", OPT_VIDEO | OPT_BOOL | OPT_EXPERT, { &intra_only },
|
||||
"deprecated use -g 1" },
|
||||
{ "vn", OPT_VIDEO | OPT_BOOL | OPT_OFFSET | OPT_INPUT | OPT_OUTPUT,{ .off = OFFSET(video_disable) },
|
||||
"disable video" },
|
||||
{ "rc_override", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_STRING | OPT_SPEC |
|
||||
OPT_OUTPUT, { .off = OFFSET(rc_overrides) },
|
||||
"rate control override for specific intervals", "override" },
|
||||
{ "vcodec", OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_INPUT |
|
||||
OPT_OUTPUT, { .func_arg = opt_video_codec },
|
||||
"force video codec ('copy' to copy stream)", "codec" },
|
||||
{ "sameq", OPT_VIDEO | OPT_EXPERT , { .func_arg = opt_sameq },
|
||||
"Removed" },
|
||||
{ "same_quant", OPT_VIDEO | OPT_EXPERT , { .func_arg = opt_sameq },
|
||||
"Removed" },
|
||||
{ "timecode", OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_timecode },
|
||||
"set initial TimeCode value.", "hh:mm:ss[:;.]ff" },
|
||||
{ "pass", OPT_VIDEO | HAS_ARG | OPT_SPEC | OPT_INT | OPT_OUTPUT, { .off = OFFSET(pass) },
|
||||
"select the pass number (1 to 3)", "n" },
|
||||
{ "passlogfile", OPT_VIDEO | HAS_ARG | OPT_STRING | OPT_EXPERT | OPT_SPEC |
|
||||
OPT_OUTPUT, { .off = OFFSET(passlogfiles) },
|
||||
"select two pass log file name prefix", "prefix" },
|
||||
{ "deinterlace", OPT_VIDEO | OPT_BOOL | OPT_EXPERT, { &do_deinterlace },
|
||||
"this option is deprecated, use the yadif filter instead" },
|
||||
{ "psnr", OPT_VIDEO | OPT_BOOL | OPT_EXPERT, { &do_psnr },
|
||||
"calculate PSNR of compressed frames" },
|
||||
{ "vstats", OPT_VIDEO | OPT_EXPERT , { .func_arg = opt_vstats },
|
||||
"dump video coding statistics to file" },
|
||||
{ "vstats_file", OPT_VIDEO | HAS_ARG | OPT_EXPERT , { .func_arg = opt_vstats_file },
|
||||
"dump video coding statistics to file", "file" },
|
||||
{ "vstats_version", OPT_VIDEO | OPT_INT | HAS_ARG | OPT_EXPERT , { &vstats_version },
|
||||
"Version of the vstats format to use."},
|
||||
{ "vf", OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_video_filters },
|
||||
"set video filters", "filter_graph" },
|
||||
{ "intra_matrix", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_STRING | OPT_SPEC |
|
||||
OPT_OUTPUT, { .off = OFFSET(intra_matrices) },
|
||||
"specify intra matrix coeffs", "matrix" },
|
||||
{ "inter_matrix", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_STRING | OPT_SPEC |
|
||||
OPT_OUTPUT, { .off = OFFSET(inter_matrices) },
|
||||
"specify inter matrix coeffs", "matrix" },
|
||||
{ "chroma_intra_matrix", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_STRING | OPT_SPEC |
|
||||
OPT_OUTPUT, { .off = OFFSET(chroma_intra_matrices) },
|
||||
"specify intra matrix coeffs", "matrix" },
|
||||
{ "top", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_INT| OPT_SPEC |
|
||||
OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(top_field_first) },
|
||||
"top=1/bottom=0/auto=-1 field first", "" },
|
||||
{ "vtag", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_PERFILE |
|
||||
OPT_INPUT | OPT_OUTPUT, { .func_arg = opt_old2new },
|
||||
"force video tag/fourcc", "fourcc/tag" },
|
||||
{ "qphist", OPT_VIDEO | OPT_BOOL | OPT_EXPERT , { &qp_hist },
|
||||
"show QP histogram" },
|
||||
{ "force_fps", OPT_VIDEO | OPT_BOOL | OPT_EXPERT | OPT_SPEC |
|
||||
OPT_OUTPUT, { .off = OFFSET(force_fps) },
|
||||
"force the selected framerate, disable the best supported framerate selection" },
|
||||
{ "streamid", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_PERFILE |
|
||||
OPT_OUTPUT, { .func_arg = opt_streamid },
|
||||
"set the value of an outfile streamid", "streamIndex:value" },
|
||||
{ "force_key_frames", OPT_VIDEO | OPT_STRING | HAS_ARG | OPT_EXPERT |
|
||||
OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(forced_key_frames) },
|
||||
"force key frames at specified timestamps", "timestamps" },
|
||||
{ "ab", OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_bitrate },
|
||||
"audio bitrate (please use -b:a)", "bitrate" },
|
||||
{ "b", OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_bitrate },
|
||||
"video bitrate (please use -b:v)", "bitrate" },
|
||||
{ "hwaccel", OPT_VIDEO | OPT_STRING | HAS_ARG | OPT_EXPERT |
|
||||
OPT_SPEC | OPT_INPUT, { .off = OFFSET(hwaccels) },
|
||||
"use HW accelerated decoding", "hwaccel name" },
|
||||
{ "hwaccel_device", OPT_VIDEO | OPT_STRING | HAS_ARG | OPT_EXPERT |
|
||||
OPT_SPEC | OPT_INPUT, { .off = OFFSET(hwaccel_devices) },
|
||||
"select a device for HW acceleration", "devicename" },
|
||||
{ "hwaccel_output_format", OPT_VIDEO | OPT_STRING | HAS_ARG | OPT_EXPERT |
|
||||
OPT_SPEC | OPT_INPUT, { .off = OFFSET(hwaccel_output_formats) },
|
||||
"select output format used with HW accelerated decoding", "format" },
|
||||
#if CONFIG_VIDEOTOOLBOX
|
||||
{ "videotoolbox_pixfmt", HAS_ARG | OPT_STRING | OPT_EXPERT, { &videotoolbox_pixfmt}, "" },
|
||||
#endif
|
||||
{ "hwaccels", OPT_EXIT, { .func_arg = show_hwaccels },
|
||||
"show available HW acceleration methods" },
|
||||
{ "autorotate", HAS_ARG | OPT_BOOL | OPT_SPEC |
|
||||
OPT_EXPERT | OPT_INPUT, { .off = OFFSET(autorotate) },
|
||||
"automatically insert correct rotate filters" },
|
||||
|
||||
/* audio options */
|
||||
{ "aframes", OPT_AUDIO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_audio_frames },
|
||||
"set the number of audio frames to output", "number" },
|
||||
{ "aq", OPT_AUDIO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_audio_qscale },
|
||||
"set audio quality (codec-specific)", "quality", },
|
||||
{ "ar", OPT_AUDIO | HAS_ARG | OPT_INT | OPT_SPEC |
|
||||
OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(audio_sample_rate) },
|
||||
"set audio sampling rate (in Hz)", "rate" },
|
||||
{ "ac", OPT_AUDIO | HAS_ARG | OPT_INT | OPT_SPEC |
|
||||
OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(audio_channels) },
|
||||
"set number of audio channels", "channels" },
|
||||
{ "an", OPT_AUDIO | OPT_BOOL | OPT_OFFSET | OPT_INPUT | OPT_OUTPUT,{ .off = OFFSET(audio_disable) },
|
||||
"disable audio" },
|
||||
{ "acodec", OPT_AUDIO | HAS_ARG | OPT_PERFILE |
|
||||
OPT_INPUT | OPT_OUTPUT, { .func_arg = opt_audio_codec },
|
||||
"force audio codec ('copy' to copy stream)", "codec" },
|
||||
{ "atag", OPT_AUDIO | HAS_ARG | OPT_EXPERT | OPT_PERFILE |
|
||||
OPT_OUTPUT, { .func_arg = opt_old2new },
|
||||
"force audio tag/fourcc", "fourcc/tag" },
|
||||
{ "vol", OPT_AUDIO | HAS_ARG | OPT_INT, { &audio_volume },
|
||||
"change audio volume (256=normal)" , "volume" },
|
||||
{ "sample_fmt", OPT_AUDIO | HAS_ARG | OPT_EXPERT | OPT_SPEC |
|
||||
OPT_STRING | OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(sample_fmts) },
|
||||
"set sample format", "format" },
|
||||
{ "channel_layout", OPT_AUDIO | HAS_ARG | OPT_EXPERT | OPT_PERFILE |
|
||||
OPT_INPUT | OPT_OUTPUT, { .func_arg = opt_channel_layout },
|
||||
"set channel layout", "layout" },
|
||||
{ "af", OPT_AUDIO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_audio_filters },
|
||||
"set audio filters", "filter_graph" },
|
||||
{ "guess_layout_max", OPT_AUDIO | HAS_ARG | OPT_INT | OPT_SPEC | OPT_EXPERT | OPT_INPUT, { .off = OFFSET(guess_layout_max) },
|
||||
"set the maximum number of channels to try to guess the channel layout" },
|
||||
|
||||
/* subtitle options */
|
||||
{ "sn", OPT_SUBTITLE | OPT_BOOL | OPT_OFFSET | OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(subtitle_disable) },
|
||||
"disable subtitle" },
|
||||
{ "scodec", OPT_SUBTITLE | HAS_ARG | OPT_PERFILE | OPT_INPUT | OPT_OUTPUT, { .func_arg = opt_subtitle_codec },
|
||||
"force subtitle codec ('copy' to copy stream)", "codec" },
|
||||
{ "stag", OPT_SUBTITLE | HAS_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_old2new }
|
||||
, "force subtitle tag/fourcc", "fourcc/tag" },
|
||||
{ "fix_sub_duration", OPT_BOOL | OPT_EXPERT | OPT_SUBTITLE | OPT_SPEC | OPT_INPUT, { .off = OFFSET(fix_sub_duration) },
|
||||
"fix subtitles duration" },
|
||||
{ "canvas_size", OPT_SUBTITLE | HAS_ARG | OPT_STRING | OPT_SPEC | OPT_INPUT, { .off = OFFSET(canvas_sizes) },
|
||||
"set canvas size (WxH or abbreviation)", "size" },
|
||||
|
||||
/* grab options */
|
||||
{ "vc", HAS_ARG | OPT_EXPERT | OPT_VIDEO, { .func_arg = opt_video_channel },
|
||||
"deprecated, use -channel", "channel" },
|
||||
{ "tvstd", HAS_ARG | OPT_EXPERT | OPT_VIDEO, { .func_arg = opt_video_standard },
|
||||
"deprecated, use -standard", "standard" },
|
||||
{ "isync", OPT_BOOL | OPT_EXPERT, { &input_sync }, "this option is deprecated and does nothing", "" },
|
||||
|
||||
/* muxer options */
|
||||
{ "muxdelay", OPT_FLOAT | HAS_ARG | OPT_EXPERT | OPT_OFFSET | OPT_OUTPUT, { .off = OFFSET(mux_max_delay) },
|
||||
"set the maximum demux-decode delay", "seconds" },
|
||||
{ "muxpreload", OPT_FLOAT | HAS_ARG | OPT_EXPERT | OPT_OFFSET | OPT_OUTPUT, { .off = OFFSET(mux_preload) },
|
||||
"set the initial demux-decode delay", "seconds" },
|
||||
{ "sdp_file", HAS_ARG | OPT_EXPERT | OPT_OUTPUT, { .func_arg = opt_sdp_file },
|
||||
"specify a file in which to print sdp information", "file" },
|
||||
|
||||
{ "time_base", HAS_ARG | OPT_STRING | OPT_EXPERT | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(time_bases) },
|
||||
"set the desired time base hint for output stream (1:24, 1:48000 or 0.04166, 2.0833e-5)", "ratio" },
|
||||
{ "enc_time_base", HAS_ARG | OPT_STRING | OPT_EXPERT | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(enc_time_bases) },
|
||||
"set the desired time base for the encoder (1:24, 1:48000 or 0.04166, 2.0833e-5). "
|
||||
"two special values are defined - "
|
||||
"0 = use frame rate (video) or sample rate (audio),"
|
||||
"-1 = match source time base", "ratio" },
|
||||
|
||||
{ "bsf", HAS_ARG | OPT_STRING | OPT_SPEC | OPT_EXPERT | OPT_OUTPUT, { .off = OFFSET(bitstream_filters) },
|
||||
"A comma-separated list of bitstream filters", "bitstream_filters" },
|
||||
{ "absf", HAS_ARG | OPT_AUDIO | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_old2new },
|
||||
"deprecated", "audio bitstream_filters" },
|
||||
{ "vbsf", OPT_VIDEO | HAS_ARG | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_old2new },
|
||||
"deprecated", "video bitstream_filters" },
|
||||
|
||||
{ "apre", HAS_ARG | OPT_AUDIO | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_preset },
|
||||
"set the audio options to the indicated preset", "preset" },
|
||||
{ "vpre", OPT_VIDEO | HAS_ARG | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_preset },
|
||||
"set the video options to the indicated preset", "preset" },
|
||||
{ "spre", HAS_ARG | OPT_SUBTITLE | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_preset },
|
||||
"set the subtitle options to the indicated preset", "preset" },
|
||||
{ "fpre", HAS_ARG | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_preset },
|
||||
"set options from indicated preset file", "filename" },
|
||||
|
||||
{ "max_muxing_queue_size", HAS_ARG | OPT_INT | OPT_SPEC | OPT_EXPERT | OPT_OUTPUT, { .off = OFFSET(max_muxing_queue_size) },
|
||||
"maximum number of packets that can be buffered while waiting for all streams to initialize", "packets" },
|
||||
|
||||
/* data codec support */
|
||||
{ "dcodec", HAS_ARG | OPT_DATA | OPT_PERFILE | OPT_EXPERT | OPT_INPUT | OPT_OUTPUT, { .func_arg = opt_data_codec },
|
||||
"force data codec ('copy' to copy stream)", "codec" },
|
||||
{ "dn", OPT_BOOL | OPT_VIDEO | OPT_OFFSET | OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(data_disable) },
|
||||
"disable data" },
|
||||
|
||||
#if CONFIG_VAAPI
|
||||
{ "vaapi_device", HAS_ARG | OPT_EXPERT, { .func_arg = opt_vaapi_device },
|
||||
"set VAAPI hardware device (DRM path or X11 display name)", "device" },
|
||||
#endif
|
||||
|
||||
#if CONFIG_QSV
|
||||
{ "qsv_device", HAS_ARG | OPT_STRING | OPT_EXPERT, { &qsv_device },
|
||||
"set QSV hardware device (DirectX adapter index, DRM path or X11 display name)", "device"},
|
||||
#endif
|
||||
|
||||
{ "init_hw_device", HAS_ARG | OPT_EXPERT, { .func_arg = opt_init_hw_device },
|
||||
"initialise hardware device", "args" },
|
||||
{ "filter_hw_device", HAS_ARG | OPT_EXPERT, { .func_arg = opt_filter_hw_device },
|
||||
"set hardware device used when filtering", "device" },
|
||||
|
||||
{ NULL, },
|
||||
};
|
||||
|
||||
ffmpeg_options = options;
|
||||
|
||||
int i, ret;
|
||||
BenchmarkTimeStamps ti;
|
||||
|
||||
int savedCode = setjmp(ex_buf__);
|
||||
if (savedCode == 0) {
|
||||
|
||||
cleanup();
|
||||
ffmpeg_var_cleanup();
|
||||
|
||||
init_dynload();
|
||||
|
||||
@@ -5063,11 +5541,11 @@ int execute(int argc, char **argv)
|
||||
if ((decode_error_stat[0] + decode_error_stat[1]) * max_error_rate < decode_error_stat[1])
|
||||
exit_program(69);
|
||||
|
||||
exit_program(received_nb_signals ? 255 : main_return_code);
|
||||
exit_program(received_nb_signals ? 255 : main_ffmpeg_return_code);
|
||||
|
||||
} else {
|
||||
main_return_code = longjmp_value;
|
||||
main_ffmpeg_return_code = longjmp_value;
|
||||
}
|
||||
|
||||
return main_return_code;
|
||||
return main_ffmpeg_return_code;
|
||||
}
|
||||
|
||||
@@ -17,6 +17,12 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* CHANGES 01.2020
|
||||
* - ffprobe support changes
|
||||
*
|
||||
* CHANGES 12.2019
|
||||
* - Concurrent execution support
|
||||
*
|
||||
* CHANGES 03.2019
|
||||
* --------------------------------------------------------
|
||||
* - config.h include removed
|
||||
@@ -86,7 +92,7 @@ typedef struct HWAccel {
|
||||
} HWAccel;
|
||||
|
||||
typedef struct HWDevice {
|
||||
char *name;
|
||||
const char *name;
|
||||
enum AVHWDeviceType type;
|
||||
AVBufferRef *device_ref;
|
||||
} HWDevice;
|
||||
@@ -578,63 +584,61 @@ typedef struct OutputFile {
|
||||
int header_written;
|
||||
} OutputFile;
|
||||
|
||||
extern InputStream **input_streams;
|
||||
extern int nb_input_streams;
|
||||
extern InputFile **input_files;
|
||||
extern int nb_input_files;
|
||||
extern __thread InputStream **input_streams;
|
||||
extern __thread int nb_input_streams;
|
||||
extern __thread InputFile **input_files;
|
||||
extern __thread int nb_input_files;
|
||||
|
||||
extern OutputStream **output_streams;
|
||||
extern int nb_output_streams;
|
||||
extern OutputFile **output_files;
|
||||
extern int nb_output_files;
|
||||
extern __thread OutputStream **output_streams;
|
||||
extern __thread int nb_output_streams;
|
||||
extern __thread OutputFile **output_files;
|
||||
extern __thread int nb_output_files;
|
||||
|
||||
extern FilterGraph **filtergraphs;
|
||||
extern int nb_filtergraphs;
|
||||
extern __thread FilterGraph **filtergraphs;
|
||||
extern __thread int nb_filtergraphs;
|
||||
|
||||
extern char *vstats_filename;
|
||||
extern char *sdp_filename;
|
||||
extern __thread char *vstats_filename;
|
||||
extern __thread char *sdp_filename;
|
||||
|
||||
extern float audio_drift_threshold;
|
||||
extern float dts_delta_threshold;
|
||||
extern float dts_error_threshold;
|
||||
extern __thread float audio_drift_threshold;
|
||||
extern __thread float dts_delta_threshold;
|
||||
extern __thread float dts_error_threshold;
|
||||
|
||||
extern int audio_volume;
|
||||
extern int audio_sync_method;
|
||||
extern int video_sync_method;
|
||||
extern float frame_drop_threshold;
|
||||
extern int do_benchmark;
|
||||
extern int do_benchmark_all;
|
||||
extern int do_deinterlace;
|
||||
extern int do_hex_dump;
|
||||
extern int do_pkt_dump;
|
||||
extern int copy_ts;
|
||||
extern int start_at_zero;
|
||||
extern int copy_tb;
|
||||
extern int debug_ts;
|
||||
extern int exit_on_error;
|
||||
extern int abort_on_flags;
|
||||
extern int print_stats;
|
||||
extern int qp_hist;
|
||||
extern int stdin_interaction;
|
||||
extern int frame_bits_per_raw_sample;
|
||||
extern AVIOContext *progress_avio;
|
||||
extern float max_error_rate;
|
||||
extern char *videotoolbox_pixfmt;
|
||||
extern __thread int audio_volume;
|
||||
extern __thread int audio_sync_method;
|
||||
extern __thread int video_sync_method;
|
||||
extern __thread float frame_drop_threshold;
|
||||
extern __thread int do_benchmark;
|
||||
extern __thread int do_benchmark_all;
|
||||
extern __thread int do_deinterlace;
|
||||
extern __thread int do_hex_dump;
|
||||
extern __thread int do_pkt_dump;
|
||||
extern __thread int copy_ts;
|
||||
extern __thread int start_at_zero;
|
||||
extern __thread int copy_tb;
|
||||
extern __thread int debug_ts;
|
||||
extern __thread int exit_on_error;
|
||||
extern __thread int abort_on_flags;
|
||||
extern __thread int print_stats;
|
||||
extern __thread int qp_hist;
|
||||
extern __thread int stdin_interaction;
|
||||
extern __thread int frame_bits_per_raw_sample;
|
||||
extern __thread AVIOContext *progress_avio;
|
||||
extern __thread float max_error_rate;
|
||||
extern __thread char *videotoolbox_pixfmt;
|
||||
|
||||
extern int filter_nbthreads;
|
||||
extern int filter_complex_nbthreads;
|
||||
extern int vstats_version;
|
||||
extern __thread int filter_nbthreads;
|
||||
extern __thread int filter_complex_nbthreads;
|
||||
extern __thread int vstats_version;
|
||||
|
||||
extern const AVIOInterruptCB int_cb;
|
||||
extern __thread const AVIOInterruptCB int_cb;
|
||||
|
||||
extern const OptionDef options[];
|
||||
extern const HWAccel hwaccels[];
|
||||
extern AVBufferRef *hw_device_ctx;
|
||||
extern __thread AVBufferRef *hw_device_ctx;
|
||||
#if CONFIG_QSV
|
||||
extern char *qsv_device;
|
||||
extern __thread char *qsv_device;
|
||||
#endif
|
||||
extern HWDevice *filter_hw_device;
|
||||
|
||||
extern __thread HWDevice *filter_hw_device;
|
||||
|
||||
void term_init(void);
|
||||
void term_exit(void);
|
||||
@@ -683,4 +687,75 @@ void set_report_callback(void (*callback)(int, float, float, int64_t, int, doubl
|
||||
|
||||
void cancel_operation();
|
||||
|
||||
int opt_map(void *optctx, const char *opt, const char *arg);
|
||||
int opt_map_channel(void *optctx, const char *opt, const char *arg);
|
||||
int opt_recording_timestamp(void *optctx, const char *opt, const char *arg);
|
||||
int opt_data_frames(void *optctx, const char *opt, const char *arg);
|
||||
int opt_progress(void *optctx, const char *opt, const char *arg);
|
||||
int opt_target(void *optctx, const char *opt, const char *arg);
|
||||
int opt_vsync(void *optctx, const char *opt, const char *arg);
|
||||
int opt_abort_on(void *optctx, const char *opt, const char *arg);
|
||||
int opt_qscale(void *optctx, const char *opt, const char *arg);
|
||||
int opt_profile(void *optctx, const char *opt, const char *arg);
|
||||
int opt_filter_complex(void *optctx, const char *opt, const char *arg);
|
||||
int opt_filter_complex_script(void *optctx, const char *opt, const char *arg);
|
||||
int opt_attach(void *optctx, const char *opt, const char *arg);
|
||||
int opt_video_frames(void *optctx, const char *opt, const char *arg);
|
||||
int opt_video_codec(void *optctx, const char *opt, const char *arg);
|
||||
int opt_sameq(void *optctx, const char *opt, const char *arg);
|
||||
int opt_timecode(void *optctx, const char *opt, const char *arg);
|
||||
|
||||
int opt_vstats_file(void *optctx, const char *opt, const char *arg);
|
||||
int opt_vstats(void *optctx, const char *opt, const char *arg);
|
||||
int opt_video_frames(void *optctx, const char *opt, const char *arg);
|
||||
int opt_old2new(void *optctx, const char *opt, const char *arg);
|
||||
int opt_streamid(void *optctx, const char *opt, const char *arg);
|
||||
int opt_bitrate(void *optctx, const char *opt, const char *arg);
|
||||
int show_hwaccels(void *optctx, const char *opt, const char *arg);
|
||||
int opt_video_filters(void *optctx, const char *opt, const char *arg);
|
||||
int opt_audio_frames(void *optctx, const char *opt, const char *arg);
|
||||
int opt_audio_qscale(void *optctx, const char *opt, const char *arg);
|
||||
int opt_audio_codec(void *optctx, const char *opt, const char *arg);
|
||||
int opt_channel_layout(void *optctx, const char *opt, const char *arg);
|
||||
int opt_preset(void *optctx, const char *opt, const char *arg);
|
||||
int opt_audio_filters(void *optctx, const char *opt, const char *arg);
|
||||
int opt_subtitle_codec(void *optctx, const char *opt, const char *arg);
|
||||
int opt_video_channel(void *optctx, const char *opt, const char *arg);
|
||||
int opt_video_standard(void *optctx, const char *opt, const char *arg);
|
||||
int opt_sdp_file(void *optctx, const char *opt, const char *arg);
|
||||
int opt_data_codec(void *optctx, const char *opt, const char *arg);
|
||||
int opt_init_hw_device(void *optctx, const char *opt, const char *arg);
|
||||
int opt_filter_hw_device(void *optctx, const char *opt, const char *arg);
|
||||
void add_input_streams(OptionsContext *o, AVFormatContext *ic);
|
||||
void assert_file_overwrite(const char *filename);
|
||||
void dump_attachment(AVStream *st, const char *filename);
|
||||
uint8_t *get_line(AVIOContext *s);
|
||||
void uninit_options(OptionsContext *o);
|
||||
void init_options(OptionsContext *o);
|
||||
AVDictionary *strip_specifiers(AVDictionary *dict);
|
||||
void parse_meta_type(char *arg, char *type, int *index, const char **stream_spec);
|
||||
int fftools_copy_metadata(char *outspec, char *inspec, AVFormatContext *oc, AVFormatContext *ic, OptionsContext *o);
|
||||
AVCodec *find_codec_or_die(const char *name, enum AVMediaType type, int encoder);
|
||||
AVCodec *choose_decoder(OptionsContext *o, AVFormatContext *s, AVStream *st);
|
||||
int open_input_file(OptionsContext *o, const char *filename);
|
||||
int get_preset_file_2(const char *preset_name, const char *codec_name, AVIOContext **s);
|
||||
int choose_encoder(OptionsContext *o, AVFormatContext *s, OutputStream *ost);
|
||||
OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, enum AVMediaType type, int source_index);
|
||||
void parse_matrix_coeffs(uint16_t *dest, const char *str);
|
||||
uint8_t *fftools_read_file(const char *filename);
|
||||
char *get_ost_filters(OptionsContext *o, AVFormatContext *oc, OutputStream *ost);
|
||||
void check_streamcopy_filters(OptionsContext *o, AVFormatContext *oc, const OutputStream *ost, enum AVMediaType type);
|
||||
OutputStream *new_video_stream(OptionsContext *o, AVFormatContext *oc, int source_index);
|
||||
OutputStream *new_audio_stream(OptionsContext *o, AVFormatContext *oc, int source_index);
|
||||
OutputStream *new_data_stream(OptionsContext *o, AVFormatContext *oc, int source_index);
|
||||
OutputStream *new_unknown_stream(OptionsContext *o, AVFormatContext *oc, int source_index);
|
||||
OutputStream *new_attachment_stream(OptionsContext *o, AVFormatContext *oc, int source_index);
|
||||
OutputStream *new_subtitle_stream(OptionsContext *o, AVFormatContext *oc, int source_index);
|
||||
int copy_chapters(InputFile *ifile, OutputFile *ofile, int copy_metadata);
|
||||
void init_output_filter(OutputFilter *ofilter, OptionsContext *o, AVFormatContext *oc);
|
||||
int init_complex_filters(void);
|
||||
int open_output_file(OptionsContext *o, const char *filename);
|
||||
int opt_default_new(OptionsContext *o, const char *opt, const char *arg);
|
||||
int open_files(OptionGroupList *l, const char *inout, int (*open_file)(OptionsContext*, const char*));
|
||||
|
||||
#endif /* FFTOOLS_FFMPEG_H */
|
||||
|
||||
@@ -17,6 +17,9 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* CHANGES 12.2019
|
||||
* - Concurrent execution support
|
||||
*
|
||||
* CHANGES 08.2018
|
||||
* --------------------------------------------------------
|
||||
* - fftools_ prefix added to file name and parent header
|
||||
@@ -28,8 +31,8 @@
|
||||
|
||||
#include "fftools_ffmpeg.h"
|
||||
|
||||
static int nb_hw_devices;
|
||||
static HWDevice **hw_devices;
|
||||
__thread int nb_hw_devices;
|
||||
__thread HWDevice **hw_devices;
|
||||
|
||||
static HWDevice *hw_device_get_by_type(enum AVHWDeviceType type)
|
||||
{
|
||||
@@ -105,7 +108,7 @@ int hw_device_init_from_string(const char *arg, HWDevice **dev_out)
|
||||
// -> av_hwdevice_ctx_create_derived()
|
||||
|
||||
AVDictionary *options = NULL;
|
||||
char *type_name = NULL, *name = NULL, *device = NULL;
|
||||
const char *type_name = NULL, *name = NULL, *device = NULL;
|
||||
enum AVHWDeviceType type;
|
||||
HWDevice *dev, *src;
|
||||
AVBufferRef *device_ref = NULL;
|
||||
@@ -161,11 +164,13 @@ int hw_device_init_from_string(const char *arg, HWDevice **dev_out)
|
||||
++p;
|
||||
q = strchr(p, ',');
|
||||
if (q) {
|
||||
if (q - p > 0) {
|
||||
device = av_strndup(p, q - p);
|
||||
if (!device) {
|
||||
err = AVERROR(ENOMEM);
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
err = av_dict_parse_string(&options, q + 1, "=", ",", 0);
|
||||
if (err < 0) {
|
||||
errmsg = "failed to parse options";
|
||||
@@ -174,7 +179,8 @@ int hw_device_init_from_string(const char *arg, HWDevice **dev_out)
|
||||
}
|
||||
|
||||
err = av_hwdevice_ctx_create(&device_ref, type,
|
||||
device ? device : p, options, 0);
|
||||
q ? device : p[0] ? p : NULL,
|
||||
options, 0);
|
||||
if (err < 0)
|
||||
goto fail;
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -21,6 +21,7 @@
|
||||
* CHANGES 08.2019
|
||||
* --------------------------------------------------------
|
||||
* - lastCommandOutput methods introduced
|
||||
* - AV_LOG_STDERR introduced
|
||||
*
|
||||
* CHANGES 04.2019
|
||||
* --------------------------------------------------------
|
||||
@@ -53,6 +54,7 @@
|
||||
#include "libavutil/bprint.h"
|
||||
#include "fftools_ffmpeg.h"
|
||||
#include "mobileffmpeg.h"
|
||||
#include "mobileffprobe.h"
|
||||
|
||||
/** Callback data structure */
|
||||
struct CallbackData {
|
||||
@@ -119,21 +121,24 @@ JNINativeMethod configMethods[] = {
|
||||
{"getNativeLogLevel", "()I", (void*) Java_com_arthenica_mobileffmpeg_Config_getNativeLogLevel},
|
||||
{"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},
|
||||
{"nativeFFmpegExecute", "([Ljava/lang/String;)I", (void*) Java_com_arthenica_mobileffmpeg_Config_nativeFFmpegExecute},
|
||||
{"nativeFFmpegCancel", "()V", (void*) Java_com_arthenica_mobileffmpeg_Config_nativeFFmpegCancel},
|
||||
{"nativeFFprobeExecute", "([Ljava/lang/String;)I", (void*) Java_com_arthenica_mobileffmpeg_Config_nativeFFprobeExecute},
|
||||
{"registerNewNativeFFmpegPipe", "(Ljava/lang/String;)I", (void*) Java_com_arthenica_mobileffmpeg_Config_registerNewNativeFFmpegPipe},
|
||||
{"getNativeBuildDate", "()Ljava/lang/String;", (void*) Java_com_arthenica_mobileffmpeg_Config_getNativeBuildDate},
|
||||
{"setNativeEnvironmentVariable", "(Ljava/lang/String;Ljava/lang/String;)I", (void*) Java_com_arthenica_mobileffmpeg_Config_setNativeEnvironmentVariable}
|
||||
};
|
||||
|
||||
/** Forward declaration for function defined in fftools_ffmpeg.c */
|
||||
int execute(int argc, char **argv);
|
||||
int ffmpeg_execute(int argc, char **argv);
|
||||
|
||||
/** 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_STDERR:
|
||||
return "stderr";
|
||||
case AV_LOG_QUIET:
|
||||
return "quiet";
|
||||
case AV_LOG_DEBUG:
|
||||
@@ -462,7 +467,9 @@ void mobileffmpeg_log_callback_function(void *ptr, int level, const char* format
|
||||
level &= 0xff;
|
||||
}
|
||||
int activeLogLevel = av_log_get_level();
|
||||
if ((activeLogLevel == AV_LOG_QUIET) || (level > activeLogLevel)) {
|
||||
|
||||
// AV_LOG_STDERR logs are always redirected
|
||||
if ((activeLogLevel == AV_LOG_QUIET && level != AV_LOG_STDERR) || (level > activeLogLevel)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -584,7 +591,7 @@ jint JNI_OnLoad(JavaVM *vm, void *reserved) {
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
if ((*env)->RegisterNatives(env, localConfigClass, configMethods, 11) < 0) {
|
||||
if ((*env)->RegisterNatives(env, localConfigClass, configMethods, 12) < 0) {
|
||||
LOGE("OnLoad failed to RegisterNatives for class %s.\n", configClassName);
|
||||
return JNI_FALSE;
|
||||
}
|
||||
@@ -730,14 +737,14 @@ JNIEXPORT jstring JNICALL Java_com_arthenica_mobileffmpeg_Config_getNativeVersio
|
||||
}
|
||||
|
||||
/**
|
||||
* Synchronously executes FFmpeg command natively with arguments provided.
|
||||
* Synchronously executes FFmpeg 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_Config_nativeExecute(JNIEnv *env, jclass object, jobjectArray stringArray) {
|
||||
JNIEXPORT jint JNICALL Java_com_arthenica_mobileffmpeg_Config_nativeFFmpegExecute(JNIEnv *env, jclass object, jobjectArray stringArray) {
|
||||
jstring *tempArray = NULL;
|
||||
int argumentCount = 1;
|
||||
char **argv = NULL;
|
||||
@@ -771,7 +778,7 @@ JNIEXPORT jint JNICALL Java_com_arthenica_mobileffmpeg_Config_nativeExecute(JNIE
|
||||
clearLastCommandOutput();
|
||||
|
||||
// RUN
|
||||
int retCode = execute(argumentCount, argv);
|
||||
int retCode = ffmpeg_execute(argumentCount, argv);
|
||||
|
||||
// CLEANUP
|
||||
if (tempArray != NULL) {
|
||||
@@ -788,12 +795,12 @@ JNIEXPORT jint JNICALL Java_com_arthenica_mobileffmpeg_Config_nativeExecute(JNIE
|
||||
}
|
||||
|
||||
/**
|
||||
* Cancels an ongoing operation natively.
|
||||
* Cancels an ongoing FFmpeg 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_Config_nativeCancel(JNIEnv *env, jclass object) {
|
||||
JNIEXPORT void JNICALL Java_com_arthenica_mobileffmpeg_Config_nativeFFmpegCancel(JNIEnv *env, jclass object) {
|
||||
cancel_operation();
|
||||
}
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
#include "libavutil/ffversion.h"
|
||||
|
||||
/** Library version string */
|
||||
#define MOBILE_FFMPEG_VERSION "4.3"
|
||||
#define MOBILE_FFMPEG_VERSION "4.3.1"
|
||||
|
||||
/** Defines tag used for Android logging. */
|
||||
#define LIB_NAME "mobile-ffmpeg"
|
||||
@@ -91,17 +91,17 @@ JNIEXPORT jstring JNICALL Java_com_arthenica_mobileffmpeg_Config_getNativeVersio
|
||||
|
||||
/*
|
||||
* Class: com_arthenica_mobileffmpeg_Config
|
||||
* Method: nativeExecute
|
||||
* Method: nativeFFmpegExecute
|
||||
* Signature: ([Ljava/lang/String;)I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_arthenica_mobileffmpeg_Config_nativeExecute(JNIEnv *, jclass, jobjectArray);
|
||||
JNIEXPORT jint JNICALL Java_com_arthenica_mobileffmpeg_Config_nativeFFmpegExecute(JNIEnv *, jclass, jobjectArray);
|
||||
|
||||
/*
|
||||
* Class: com_arthenica_mobileffmpeg_Config
|
||||
* Method: nativeCancel
|
||||
* Method: nativeFFmpegCancel
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_com_arthenica_mobileffmpeg_Config_nativeCancel(JNIEnv *, jclass);
|
||||
JNIEXPORT void JNICALL Java_com_arthenica_mobileffmpeg_Config_nativeFFmpegCancel(JNIEnv *, jclass);
|
||||
|
||||
/*
|
||||
* Class: com_arthenica_mobileffmpeg_Config
|
||||
|
||||
+6
-18
@@ -13,24 +13,12 @@
|
||||
* 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/>.
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with MobileFFmpeg. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.arthenica.mobileffmpeg.test;
|
||||
#include <stdio.h>
|
||||
#include <setjmp.h>
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* Example local unit test, which will execute on the development machine (host).
|
||||
*
|
||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
public class ExampleUnitTest {
|
||||
@Test
|
||||
public void addition_isCorrect() throws Exception {
|
||||
assertEquals(4, 2 + 2);
|
||||
}
|
||||
}
|
||||
/** Holds information to implement exception handling. */
|
||||
__thread jmp_buf ex_buf__;
|
||||
@@ -24,6 +24,6 @@
|
||||
#include <setjmp.h>
|
||||
|
||||
/** Holds information to implement exception handling. */
|
||||
jmp_buf ex_buf__;
|
||||
extern __thread jmp_buf ex_buf__;
|
||||
|
||||
#endif // MOBILE_FFMPEG_EXCEPTION_H
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* Copyright (c) 2020 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/>.
|
||||
*/
|
||||
|
||||
#include <pthread.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include "config.h"
|
||||
#include "libavcodec/jni.h"
|
||||
#include "libavutil/bprint.h"
|
||||
#include "mobileffmpeg.h"
|
||||
|
||||
/** Forward declaration for function defined in fftools_ffprobe.c */
|
||||
int ffprobe_execute(int argc, char **argv);
|
||||
|
||||
/** Forward declaration for function defined in mobileffmpeg.c */
|
||||
void clearLastCommandOutput();
|
||||
|
||||
/**
|
||||
* Synchronously executes FFprobe 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 FFprobe command arguments
|
||||
* @return zero on successful execution, non-zero on error
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_arthenica_mobileffmpeg_Config_nativeFFprobeExecute(JNIEnv *env, jclass object, jobjectArray stringArray) {
|
||||
jstring *tempArray = NULL;
|
||||
int argumentCount = 1;
|
||||
char **argv = NULL;
|
||||
|
||||
if (stringArray != NULL) {
|
||||
int programArgumentCount = (*env)->GetArrayLength(env, stringArray);
|
||||
argumentCount = programArgumentCount + 1;
|
||||
|
||||
tempArray = (jstring *) av_malloc(sizeof(jstring) * programArgumentCount);
|
||||
}
|
||||
|
||||
/* PRESERVE USAGE FORMAT
|
||||
*
|
||||
* ffprobe <arguments>
|
||||
*/
|
||||
argv = (char **)av_malloc(sizeof(char*) * (argumentCount));
|
||||
argv[0] = (char *)av_malloc(sizeof(char) * (strlen(LIB_NAME) + 1));
|
||||
strcpy(argv[0], LIB_NAME);
|
||||
|
||||
// PREPARE
|
||||
if (stringArray != NULL) {
|
||||
for (int i = 0; i < (argumentCount - 1); i++) {
|
||||
tempArray[i] = (jstring) (*env)->GetObjectArrayElement(env, stringArray, i);
|
||||
if (tempArray[i] != NULL) {
|
||||
argv[i + 1] = (char *) (*env)->GetStringUTFChars(env, tempArray[i], 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// LAST COMMAND OUTPUT SHOULD BE CLEARED BEFORE STARTING A NEW EXECUTION
|
||||
clearLastCommandOutput();
|
||||
|
||||
// RUN
|
||||
int retCode = ffprobe_execute(argumentCount, argv);
|
||||
|
||||
// CLEANUP
|
||||
if (tempArray != NULL) {
|
||||
for (int i = 0; i < (argumentCount - 1); i++) {
|
||||
(*env)->ReleaseStringUTFChars(env, tempArray[i], argv[i + 1]);
|
||||
}
|
||||
|
||||
av_free(tempArray);
|
||||
}
|
||||
av_free(argv[0]);
|
||||
av_free(argv);
|
||||
|
||||
return retCode;
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright (c) 2020 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_FFPROBE_H
|
||||
#define MOBILE_FFPROBE_H
|
||||
|
||||
#include <jni.h>
|
||||
|
||||
/*
|
||||
* Class: com_arthenica_mobileffmpeg_Config
|
||||
* Method: nativeFFprobeExecute
|
||||
* Signature: ([Ljava/lang/String;)I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_com_arthenica_mobileffmpeg_Config_nativeFFprobeExecute(JNIEnv *, jclass, jobjectArray);
|
||||
|
||||
#endif /* MOBILE_FFPROBE_H */
|
||||
@@ -31,35 +31,36 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
import static com.arthenica.mobileffmpeg.FFmpeg.getBuildDate;
|
||||
import static com.arthenica.mobileffmpeg.FFmpeg.getVersion;
|
||||
|
||||
/**
|
||||
* <p>This class is used to configure MobileFFmpeg library utilities/tools.
|
||||
*
|
||||
* <p>1. {@link LogCallback}: By default this class redirects FFmpeg output to Logcat. As another
|
||||
* option, it is possible not to print messages to Logcat and pass them to a {@link LogCallback}
|
||||
* function. This function can decide whether to print these logs, show them inside another
|
||||
* container or ignore them.
|
||||
* <p>1. {@link LogCallback}: This class redirects FFmpeg/FFprobe output to Logcat by default. As
|
||||
* an alternative, it is possible not to print messages to Logcat and pass them to a
|
||||
* {@link LogCallback} function. This function can decide whether to print these logs, show them
|
||||
* inside another container or ignore them.
|
||||
*
|
||||
* <p>2. {@link #setLogLevel(Level)}/{@link #getLogLevel()}: Use this methods to see/control FFmpeg
|
||||
* log severity.
|
||||
* <p>2. {@link #setLogLevel(Level)}/{@link #getLogLevel()}: Use this methods to set/get
|
||||
* FFmpeg/FFprobe log severity.
|
||||
*
|
||||
* <p>3. {@link StatisticsCallback}: It is possible to receive statistics about ongoing operation by
|
||||
* defining a {@link StatisticsCallback} function or by calling {@link #getLastReceivedStatistics()}
|
||||
* method.
|
||||
* <p>3. {@link StatisticsCallback}: It is possible to receive statistics about an ongoing
|
||||
* operation by defining a {@link StatisticsCallback} function or by calling
|
||||
* {@link #getLastReceivedStatistics()} method.
|
||||
*
|
||||
* <p>4. Font configuration: It is possible to register custom fonts with
|
||||
* {@link #setFontconfigConfigurationPath(String)} and
|
||||
* {@link #setFontDirectory(Context, String, Map)} methods.
|
||||
*
|
||||
* <p>PS: This class is introduced in v2.1 as an enhanced version of older <code>Log</code> class.
|
||||
*
|
||||
* @author Taner Sener
|
||||
* @since v2.1
|
||||
*/
|
||||
public class Config {
|
||||
|
||||
public static final int RETURN_CODE_SUCCESS = 0;
|
||||
|
||||
public static final int RETURN_CODE_CANCEL = 255;
|
||||
|
||||
private static int lastReturnCode = 0;
|
||||
|
||||
/**
|
||||
* Defines tag used for logging.
|
||||
*/
|
||||
@@ -75,10 +76,6 @@ public class Config {
|
||||
|
||||
private static Statistics lastReceivedStatistics;
|
||||
|
||||
private static final AtomicReference<StringBuffer> systemCommandOutputReference;
|
||||
|
||||
private static boolean runningSystemCommand;
|
||||
|
||||
private static int lastCreatedPipeIndex;
|
||||
|
||||
static {
|
||||
@@ -105,6 +102,7 @@ public class Config {
|
||||
/* ALL MOBILE-FFMPEG LIBRARIES LOADED AT STARTUP */
|
||||
Abi.class.getName();
|
||||
FFmpeg.class.getName();
|
||||
FFprobe.class.getName();
|
||||
|
||||
/*
|
||||
* NEON supported arm-v7a library has a different name
|
||||
@@ -140,12 +138,8 @@ public class Config {
|
||||
|
||||
lastReceivedStatistics = new Statistics();
|
||||
|
||||
Config.enableRedirection();
|
||||
enableRedirection();
|
||||
|
||||
systemCommandOutputReference = new AtomicReference<>();
|
||||
systemCommandOutputReference.set(new StringBuffer());
|
||||
|
||||
runningSystemCommand = false;
|
||||
lastCreatedPipeIndex = 0;
|
||||
}
|
||||
|
||||
@@ -157,14 +151,15 @@ 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
|
||||
* <p>When redirection is not enabled FFmpeg/FFprobe 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.
|
||||
* <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();
|
||||
@@ -199,7 +194,7 @@ public class Config {
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Sets a callback function to redirect FFmpeg logs.
|
||||
* <p>Sets a callback function to redirect FFmpeg/FFprobe logs.
|
||||
*
|
||||
* @param newLogCallback new log callback function or NULL to disable a previously defined callback
|
||||
*/
|
||||
@@ -226,16 +221,8 @@ public class Config {
|
||||
final Level level = Level.from(levelValue);
|
||||
final String text = new String(logMessage);
|
||||
|
||||
if (runningSystemCommand) {
|
||||
|
||||
// REDIRECT SYSTEM OUTPUT
|
||||
if (activeLogLevel != Level.AV_LOG_QUIET && levelValue <= activeLogLevel.getValue()) {
|
||||
systemCommandOutputReference.get().append(text);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (activeLogLevel == Level.AV_LOG_QUIET || levelValue > activeLogLevel.getValue()) {
|
||||
// AV_LOG_STDERR logs are always redirected
|
||||
if ((activeLogLevel == Level.AV_LOG_QUIET && levelValue != Level.AV_LOG_STDERR.getValue()) || levelValue > activeLogLevel.getValue()) {
|
||||
// LOG NEITHER PRINTED NOR FORWARDED
|
||||
return;
|
||||
}
|
||||
@@ -257,6 +244,7 @@ public class Config {
|
||||
android.util.Log.d(TAG, text);
|
||||
}
|
||||
break;
|
||||
case AV_LOG_STDERR:
|
||||
case AV_LOG_VERBOSE: {
|
||||
android.util.Log.v(TAG, text);
|
||||
}
|
||||
@@ -332,7 +320,7 @@ public class Config {
|
||||
* @return zero on success, non-zero on error
|
||||
*/
|
||||
public static int setFontconfigConfigurationPath(final String path) {
|
||||
return Config.setNativeEnvironmentVariable("FONTCONFIG_PATH", path);
|
||||
return setNativeEnvironmentVariable("FONTCONFIG_PATH", path);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -478,69 +466,6 @@ public class Config {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes system command. System command is not logged to output.
|
||||
*
|
||||
* @param arguments command arguments
|
||||
* @param commandOutputEndPatternList list of patterns which will indicate that operation has ended
|
||||
* @param successPattern success pattern
|
||||
* @param timeout execution timeout
|
||||
* @return return code
|
||||
*/
|
||||
static int systemExecute(final String[] arguments, final List<String> commandOutputEndPatternList, final String successPattern, final long timeout) {
|
||||
if (successPattern != null) {
|
||||
commandOutputEndPatternList.add(successPattern);
|
||||
}
|
||||
systemCommandOutputReference.set(new StringBuffer());
|
||||
runningSystemCommand = true;
|
||||
|
||||
int rc = Config.nativeExecute(arguments);
|
||||
|
||||
long totalWaitTime = 0;
|
||||
|
||||
try {
|
||||
while (!systemCommandOutputContainsPattern(commandOutputEndPatternList) && (totalWaitTime < timeout)) {
|
||||
synchronized (systemCommandOutputReference) {
|
||||
systemCommandOutputReference.wait(20);
|
||||
}
|
||||
totalWaitTime += 20;
|
||||
}
|
||||
} catch (final InterruptedException e) {
|
||||
Log.w(TAG, "systemExecute operation interrupted.", e);
|
||||
}
|
||||
|
||||
runningSystemCommand = false;
|
||||
|
||||
nativeCancel();
|
||||
|
||||
StringBuffer stringBuffer = systemCommandOutputReference.get();
|
||||
if ((successPattern != null) && (stringBuffer != null) && stringBuffer.toString().contains(successPattern)) {
|
||||
return 0;
|
||||
} else {
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean systemCommandOutputContainsPattern(final List<String> patternList) {
|
||||
String string = systemCommandOutputReference.get().toString();
|
||||
for (String pattern : patternList) {
|
||||
if (string.contains(pattern)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns output of last executed system command.
|
||||
*
|
||||
* @return output of last executed system command
|
||||
*/
|
||||
static String getSystemCommandOutput() {
|
||||
return systemCommandOutputReference.get().toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the list of camera ids supported.
|
||||
*
|
||||
@@ -557,6 +482,119 @@ public class Config {
|
||||
return detectedCameraIdList;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Returns FFmpeg version bundled within the library.
|
||||
*
|
||||
* @return FFmpeg version
|
||||
*/
|
||||
public static String getFFmpegVersion() {
|
||||
return getNativeFFmpegVersion();
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Returns MobileFFmpeg library version.
|
||||
*
|
||||
* @return MobileFFmpeg version
|
||||
*/
|
||||
public static String getVersion() {
|
||||
if (AbiDetect.isNativeLTSBuild()) {
|
||||
return String.format("%s-lts", getNativeVersion());
|
||||
} else {
|
||||
return getNativeVersion();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Returns whether MobileFFmpeg release is a long term release or not.
|
||||
*
|
||||
* @return YES or NO
|
||||
*/
|
||||
public static boolean isLTSBuild() {
|
||||
return AbiDetect.isNativeLTSBuild();
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Returns MobileFFmpeg library build date.
|
||||
*
|
||||
* @return MobileFFmpeg library build date
|
||||
*/
|
||||
public static String getBuildDate() {
|
||||
return getNativeBuildDate();
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Returns return code of last executed command.
|
||||
*
|
||||
* @return return code of last executed command
|
||||
* @since 3.0
|
||||
*/
|
||||
public static int getLastReturnCode() {
|
||||
return lastReturnCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Returns log output of last executed single FFmpeg/FFprobe command.
|
||||
*
|
||||
* <p>This method does not support executing multiple concurrent commands. If you execute
|
||||
* multiple commands at the same time, this method will return output from all executions.
|
||||
*
|
||||
* <p>Please note that disabling redirection using {@link Config#disableRedirection()} method
|
||||
* also disables this functionality.
|
||||
*
|
||||
* @return output of the last executed command
|
||||
* @since 3.0
|
||||
*/
|
||||
public static String getLastCommandOutput() {
|
||||
String nativeLastCommandOutput = getNativeLastCommandOutput();
|
||||
if (nativeLastCommandOutput != null) {
|
||||
|
||||
// REPLACING CH(13) WITH CH(10)
|
||||
nativeLastCommandOutput = nativeLastCommandOutput.replace('\r', '\n');
|
||||
}
|
||||
return nativeLastCommandOutput;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Prints the output of the last executed FFmpeg/FFprobe command to the Logcat at the
|
||||
* specified priority.
|
||||
*
|
||||
* <p>This method does not support executing multiple concurrent commands. If you execute
|
||||
* multiple commands at the same time, this method will print output from all executions.
|
||||
*
|
||||
* @param logPriority one of {@link Log#VERBOSE}, {@link Log#DEBUG}, {@link Log#INFO},
|
||||
* {@link Log#WARN}, {@link Log#ERROR}, {@link Log#ASSERT}
|
||||
* @since 4.3
|
||||
*/
|
||||
public static void printLastCommandOutput(int logPriority) {
|
||||
final int LOGGER_ENTRY_MAX_LEN = 4 * 1000;
|
||||
|
||||
String buffer = getLastCommandOutput();
|
||||
do {
|
||||
if (buffer.length() <= LOGGER_ENTRY_MAX_LEN) {
|
||||
Log.println(logPriority, Config.TAG, buffer);
|
||||
buffer = "";
|
||||
} else {
|
||||
final int index = buffer.substring(0, LOGGER_ENTRY_MAX_LEN).lastIndexOf('\n');
|
||||
if (index < 0) {
|
||||
Log.println(logPriority, Config.TAG, buffer.substring(0, LOGGER_ENTRY_MAX_LEN));
|
||||
buffer = buffer.substring(LOGGER_ENTRY_MAX_LEN);
|
||||
} else {
|
||||
Log.println(logPriority, Config.TAG, buffer.substring(0, index));
|
||||
buffer = buffer.substring(index);
|
||||
}
|
||||
}
|
||||
} while (buffer.length() > 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates return code value for the last executed command.
|
||||
*
|
||||
* @param newLastReturnCode new last return code value
|
||||
*/
|
||||
static void setLastReturnCode(int newLastReturnCode) {
|
||||
lastReturnCode = newLastReturnCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Enables native redirection. Necessary for log and statistics callback functions.
|
||||
*/
|
||||
@@ -601,13 +639,21 @@ public class Config {
|
||||
* @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);
|
||||
native static int nativeFFmpegExecute(final String[] arguments);
|
||||
|
||||
/**
|
||||
* <p>Cancels an ongoing operation natively. This function does not wait for termination to
|
||||
* complete and returns immediately.
|
||||
* <p>Cancels an ongoing FFmpeg operation natively. This function does not wait for termination
|
||||
* to complete and returns immediately.
|
||||
*/
|
||||
native static void nativeCancel();
|
||||
native static void nativeFFmpegCancel();
|
||||
|
||||
/**
|
||||
* <p>Synchronously executes FFprobe natively with arguments provided.
|
||||
*
|
||||
* @param arguments FFprobe command options/arguments as string array
|
||||
* @return zero on successful execution, 255 on user cancel and non-zero on error
|
||||
*/
|
||||
native static int nativeFFprobeExecute(final String[] arguments);
|
||||
|
||||
/**
|
||||
* <p>Creates natively a new named pipe to use in <code>FFmpeg</code> operations.
|
||||
@@ -633,12 +679,12 @@ public class Config {
|
||||
* @param variableValue environment variable value
|
||||
* @return zero on success, non-zero on error
|
||||
*/
|
||||
native static int setNativeEnvironmentVariable(final String variableName, final String variableValue);
|
||||
public native static int setNativeEnvironmentVariable(final String variableName, final String variableValue);
|
||||
|
||||
/**
|
||||
* <p>Returns log output of the last executed command natively.
|
||||
* <p>Returns log output of the last executed single command natively.
|
||||
*
|
||||
* @return output of the last executed command
|
||||
* @return output of the last executed single command
|
||||
*/
|
||||
native static String getNativeLastCommandOutput();
|
||||
|
||||
|
||||
@@ -19,18 +19,14 @@
|
||||
|
||||
package com.arthenica.mobileffmpeg;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
/**
|
||||
* <p>Main class for FFmpeg operations. Provides {@link #execute(String...)} method to execute
|
||||
* FFmpeg commands.
|
||||
* <pre>
|
||||
* int rc = FFmpeg.execute("-i", "file1.mp4", "-c:v", "libxvid", "file1.avi");
|
||||
* int rc = FFmpeg.execute("-i file1.mp4 -c:v libxvid file1.avi");
|
||||
* Log.i(Config.TAG, String.format("Command execution %s.", (rc == 0?"completed successfully":"failed with rc=" + rc));
|
||||
* </pre>
|
||||
*
|
||||
@@ -39,16 +35,6 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||
*/
|
||||
public class FFmpeg {
|
||||
|
||||
public static final int RETURN_CODE_SUCCESS = 0;
|
||||
|
||||
public static final int RETURN_CODE_CANCEL = 255;
|
||||
|
||||
public static final int RETURN_CODE_MULTIPLE_EXECUTIONS_NOT_ALLOWED = 300;
|
||||
|
||||
private static int lastReturnCode = 0;
|
||||
|
||||
private static final AtomicBoolean started = new AtomicBoolean(false);
|
||||
|
||||
static {
|
||||
AbiDetect.class.getName();
|
||||
Config.class.getName();
|
||||
@@ -60,28 +46,6 @@ public class FFmpeg {
|
||||
private FFmpeg() {
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Returns FFmpeg version bundled within the library.
|
||||
*
|
||||
* @return FFmpeg version
|
||||
*/
|
||||
public static String getFFmpegVersion() {
|
||||
return Config.getNativeFFmpegVersion();
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Returns MobileFFmpeg library version.
|
||||
*
|
||||
* @return MobileFFmpeg version
|
||||
*/
|
||||
public static String getVersion() {
|
||||
if (AbiDetect.isNativeLTSBuild()) {
|
||||
return String.format("%s-lts", Config.getNativeVersion());
|
||||
} else {
|
||||
return Config.getNativeVersion();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Synchronously executes FFmpeg with arguments provided.
|
||||
*
|
||||
@@ -89,13 +53,9 @@ public class FFmpeg {
|
||||
* @return zero on successful execution, 255 on user cancel and non-zero on error
|
||||
*/
|
||||
public static int execute(final String[] arguments) {
|
||||
if (started.compareAndSet(false, true)) {
|
||||
lastReturnCode = Config.nativeExecute(arguments);
|
||||
started.compareAndSet(true, false);
|
||||
} else {
|
||||
Log.e(Config.TAG, "execute cancelled. Multiple executions not supported.");
|
||||
lastReturnCode = RETURN_CODE_MULTIPLE_EXECUTIONS_NOT_ALLOWED;
|
||||
}
|
||||
final int lastReturnCode = Config.nativeFFmpegExecute(arguments);
|
||||
|
||||
Config.setLastReturnCode(lastReturnCode);
|
||||
|
||||
return lastReturnCode;
|
||||
}
|
||||
@@ -118,7 +78,8 @@ public class FFmpeg {
|
||||
|
||||
/**
|
||||
* <p>Synchronously executes FFmpeg command provided. Space character is used to split command
|
||||
* into arguments.
|
||||
* into arguments. You can use single and double quote characters to specify arguments inside
|
||||
* your command.
|
||||
*
|
||||
* @param command FFmpeg command
|
||||
* @return zero on successful execution, 255 on user cancel and non-zero on error
|
||||
@@ -132,89 +93,7 @@ public class FFmpeg {
|
||||
* returns immediately.
|
||||
*/
|
||||
public static void cancel() {
|
||||
Config.nativeCancel();
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Returns return code of last executed command.
|
||||
*
|
||||
* @return return code of last executed command
|
||||
* @since 3.0
|
||||
*/
|
||||
public static int getLastReturnCode() {
|
||||
return lastReturnCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Returns log output of the last executed command. Please note that disabling redirection
|
||||
* using {@link Config#disableRedirection()} method also disables this functionality.
|
||||
*
|
||||
* @return output of the last executed command
|
||||
* @since 3.0
|
||||
*/
|
||||
public static String getLastCommandOutput() {
|
||||
String nativeLastCommandOutput = Config.getNativeLastCommandOutput();
|
||||
if (nativeLastCommandOutput != null) {
|
||||
|
||||
// REPLACING CH(13) WITH CH(10)
|
||||
nativeLastCommandOutput = nativeLastCommandOutput.replace('\r', '\n');
|
||||
}
|
||||
return nativeLastCommandOutput;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Returns media information for given file.
|
||||
*
|
||||
* @param path path or uri of media file
|
||||
* @return media information
|
||||
* @since 3.0
|
||||
*/
|
||||
public static MediaInformation getMediaInformation(final String path) {
|
||||
return getMediaInformation(path, 10000L);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Returns media information for given file.
|
||||
*
|
||||
* @param path path or uri of media file
|
||||
* @param timeout complete timeout
|
||||
* @return media information
|
||||
* @since 3.0
|
||||
*/
|
||||
public static MediaInformation getMediaInformation(final String path, final Long timeout) {
|
||||
final int rc;
|
||||
if (started.compareAndSet(false, true)) {
|
||||
rc = Config.systemExecute(new String[]{"-v", "info", "-hide_banner", "-i", path}, new ArrayList<>(Arrays.asList("Press [q] to stop, [?] for help", "No such file or directory", "Input/output error", "Conversion failed", "HTTP error")), "At least one output file must be specified", timeout);
|
||||
started.compareAndSet(true, false);
|
||||
} else {
|
||||
Log.e(Config.TAG, "getMediaInformation cancelled. Multiple executions not supported.");
|
||||
rc = RETURN_CODE_MULTIPLE_EXECUTIONS_NOT_ALLOWED;
|
||||
}
|
||||
|
||||
if (rc == 0) {
|
||||
return MediaInformationParser.from(Config.getSystemCommandOutput());
|
||||
} else {
|
||||
Log.i(Config.TAG, Config.getSystemCommandOutput());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Returns whether MobileFFmpeg release is a long term release or not.
|
||||
*
|
||||
* @return YES or NO
|
||||
*/
|
||||
public static boolean isLTSBuild() {
|
||||
return AbiDetect.isNativeLTSBuild();
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Returns MobileFFmpeg library build date.
|
||||
*
|
||||
* @return MobileFFmpeg library build date
|
||||
*/
|
||||
public static String getBuildDate() {
|
||||
return Config.getNativeBuildDate();
|
||||
Config.nativeFFmpegCancel();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -274,32 +153,4 @@ public class FFmpeg {
|
||||
return argumentList.toArray(new String[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Prints the output of the last executed command to the logcat at the specified priority.
|
||||
*
|
||||
* @param logPriority one of {@link Log#VERBOSE}, {@link Log#DEBUG}, {@link Log#INFO},
|
||||
* {@link Log#WARN}, {@link Log#ERROR}, {@link Log#ASSERT}
|
||||
* @since 4.3
|
||||
*/
|
||||
public static void printLastCommandOutput(int logPriority) {
|
||||
final int LOGGER_ENTRY_MAX_LEN = 4 * 1000;
|
||||
|
||||
String buffer = FFmpeg.getLastCommandOutput();
|
||||
do {
|
||||
if (buffer.length() <= LOGGER_ENTRY_MAX_LEN) {
|
||||
Log.println(logPriority, Config.TAG, buffer);
|
||||
buffer = "";
|
||||
} else {
|
||||
final int index = buffer.substring(0, LOGGER_ENTRY_MAX_LEN).lastIndexOf('\n');
|
||||
if (index < 0) {
|
||||
Log.println(logPriority, Config.TAG, buffer.substring(0, LOGGER_ENTRY_MAX_LEN));
|
||||
buffer = buffer.substring(LOGGER_ENTRY_MAX_LEN);
|
||||
} else {
|
||||
Log.println(logPriority, Config.TAG, buffer.substring(0, index));
|
||||
buffer = buffer.substring(index);
|
||||
}
|
||||
}
|
||||
} while (buffer.length() > 0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,114 @@
|
||||
/*
|
||||
* Copyright (c) 2020 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/>.
|
||||
*/
|
||||
|
||||
package com.arthenica.mobileffmpeg;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
/**
|
||||
* <p>Main class for FFprobe operations. Provides {@link #execute(String...)} method to execute
|
||||
* FFprobe commands.
|
||||
* <pre>
|
||||
* int rc = FFprobe.execute("-hide_banner -v error -show_entries format=size -of default=noprint_wrappers=1 file1.mp4");
|
||||
* Log.i(Config.TAG, String.format("Command execution %s.", (rc == 0?"completed successfully":"failed with rc=" + rc));
|
||||
* </pre>
|
||||
*
|
||||
* @author Taner Sener
|
||||
* @since v4.3.1
|
||||
*/
|
||||
public class FFprobe {
|
||||
|
||||
static {
|
||||
AbiDetect.class.getName();
|
||||
Config.class.getName();
|
||||
}
|
||||
|
||||
/**
|
||||
* Default constructor hidden.
|
||||
*/
|
||||
private FFprobe() {
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Synchronously executes FFprobe with arguments provided.
|
||||
*
|
||||
* @param arguments FFprobe command options/arguments as string array
|
||||
* @return zero on successful execution, 255 on user cancel and non-zero on error
|
||||
*/
|
||||
public static int execute(final String[] arguments) {
|
||||
final int lastReturnCode = Config.nativeFFprobeExecute(arguments);
|
||||
|
||||
Config.setLastReturnCode(lastReturnCode);
|
||||
|
||||
return lastReturnCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Synchronously executes FFprobe command provided. Space character is used to split command
|
||||
* into arguments. You can use single and double quote characters to specify arguments inside
|
||||
* your command.
|
||||
*
|
||||
* @param command FFprobe command
|
||||
* @return zero on successful execution, 255 on user cancel and non-zero on error
|
||||
*/
|
||||
public static int execute(final String command) {
|
||||
return execute(FFmpeg.parseArguments(command));
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Returns media information for given file.
|
||||
*
|
||||
* <p>This method does not support executing multiple concurrent operations. If you execute
|
||||
* multiple operations (execute or getMediaInformation) at the same time, the response of this
|
||||
* method is not predictable.
|
||||
*
|
||||
* @param path path or uri of media file
|
||||
* @return media information
|
||||
* @since 3.0
|
||||
*/
|
||||
public static MediaInformation getMediaInformation(final String path) {
|
||||
final int rc = execute(new String[]{"-v", "info", "-hide_banner", "-i", path});
|
||||
|
||||
if (rc == 0) {
|
||||
return MediaInformationParser.from(Config.getLastCommandOutput());
|
||||
} else {
|
||||
Log.i(Config.TAG, Config.getLastCommandOutput());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Returns media information for given file.
|
||||
*
|
||||
* <p>This method does not support executing multiple concurrent operations. If you execute
|
||||
* multiple operations (execute or getMediaInformation) at the same time, the response of this
|
||||
* method is not predictable.
|
||||
*
|
||||
* @param path path or uri of media file
|
||||
* @param timeout complete timeout
|
||||
* @return media information
|
||||
* @since 3.0
|
||||
* @deprecated this method is deprecated since v4.3.1. You can still use this method but
|
||||
* <code>timeout</code> parameter is not effective anymore.
|
||||
*/
|
||||
public static MediaInformation getMediaInformation(final String path, final Long timeout) {
|
||||
return getMediaInformation(path);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -27,6 +27,14 @@ package com.arthenica.mobileffmpeg;
|
||||
*/
|
||||
public enum Level {
|
||||
|
||||
/**
|
||||
* This log level is defined by MobileFFmpeg. It is used to specify logs printed to stderr by
|
||||
* ffmpeg. Logs that has this level are not filtered and always redirected.
|
||||
*
|
||||
* @since 4.3.1
|
||||
*/
|
||||
AV_LOG_STDERR(-16),
|
||||
|
||||
/**
|
||||
* Print no output.
|
||||
*/
|
||||
@@ -85,7 +93,9 @@ public enum Level {
|
||||
* @return enumeration defined by value
|
||||
*/
|
||||
public static Level from(final int value) {
|
||||
if (value == AV_LOG_QUIET.getValue()) {
|
||||
if (value == AV_LOG_STDERR.getValue()) {
|
||||
return AV_LOG_STDERR;
|
||||
} else if (value == AV_LOG_QUIET.getValue()) {
|
||||
return AV_LOG_QUIET;
|
||||
} else if (value == AV_LOG_PANIC.getValue()) {
|
||||
return AV_LOG_PANIC;
|
||||
|
||||
+10
-8
@@ -21,25 +21,27 @@ package com.arthenica.mobileffmpeg.util;
|
||||
|
||||
import android.os.AsyncTask;
|
||||
|
||||
import com.arthenica.mobileffmpeg.Config;
|
||||
import com.arthenica.mobileffmpeg.FFmpeg;
|
||||
|
||||
public class AsyncExecuteTask extends AsyncTask<String, Integer, Integer> {
|
||||
public class AsyncSingleFFmpegExecuteTask extends AsyncTask<String, Integer, Integer> {
|
||||
private final String command;
|
||||
private final SingleExecuteCallback singleExecuteCallback;
|
||||
|
||||
private final ExecuteCallback executeCallback;
|
||||
|
||||
public AsyncExecuteTask(final ExecuteCallback executeCallback) {
|
||||
this.executeCallback = executeCallback;
|
||||
public AsyncSingleFFmpegExecuteTask(final String command, final SingleExecuteCallback singleExecuteCallback) {
|
||||
this.command = command;
|
||||
this.singleExecuteCallback = singleExecuteCallback;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer doInBackground(final String... arguments) {
|
||||
return FFmpeg.execute(arguments[0]);
|
||||
return FFmpeg.execute(command);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(final Integer rc) {
|
||||
if (executeCallback != null) {
|
||||
executeCallback.apply(rc, FFmpeg.getLastCommandOutput());
|
||||
if (singleExecuteCallback != null) {
|
||||
singleExecuteCallback.apply(rc, Config.getLastCommandOutput());
|
||||
}
|
||||
}
|
||||
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright (c) 2018-2019 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/>.
|
||||
*/
|
||||
|
||||
package com.arthenica.mobileffmpeg.util;
|
||||
|
||||
import android.os.AsyncTask;
|
||||
|
||||
import com.arthenica.mobileffmpeg.Config;
|
||||
import com.arthenica.mobileffmpeg.FFprobe;
|
||||
|
||||
public class AsyncSingleFFprobeExecuteTask extends AsyncTask<String, Integer, Integer> {
|
||||
private final String command;
|
||||
private final SingleExecuteCallback singleExecuteCallback;
|
||||
|
||||
public AsyncSingleFFprobeExecuteTask(final String command, final SingleExecuteCallback singleExecuteCallback) {
|
||||
this.command = command;
|
||||
this.singleExecuteCallback = singleExecuteCallback;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer doInBackground(final String... arguments) {
|
||||
return FFprobe.execute(command);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(final Integer rc) {
|
||||
if (singleExecuteCallback != null) {
|
||||
singleExecuteCallback.apply(rc, Config.getLastCommandOutput());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+10
-9
@@ -21,26 +21,27 @@ package com.arthenica.mobileffmpeg.util;
|
||||
|
||||
import android.os.AsyncTask;
|
||||
|
||||
import com.arthenica.mobileffmpeg.FFmpeg;
|
||||
import com.arthenica.mobileffmpeg.FFprobe;
|
||||
import com.arthenica.mobileffmpeg.MediaInformation;
|
||||
|
||||
public class AsyncGetMediaInformationTask extends AsyncTask<String, MediaInformation, MediaInformation> {
|
||||
public class AsyncSingleGetMediaInformationTask extends AsyncTask<String, MediaInformation, MediaInformation> {
|
||||
private final String path;
|
||||
private final SingleGetMediaInformationCallback singleGetMediaInformationCallback;
|
||||
|
||||
private final GetMediaInformationCallback getMediaInformationCallback;
|
||||
|
||||
public AsyncGetMediaInformationTask(final GetMediaInformationCallback getMediaInformationCallback) {
|
||||
this.getMediaInformationCallback = getMediaInformationCallback;
|
||||
public AsyncSingleGetMediaInformationTask(final String path, final SingleGetMediaInformationCallback singleGetMediaInformationCallback) {
|
||||
this.path = path;
|
||||
this.singleGetMediaInformationCallback = singleGetMediaInformationCallback;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected MediaInformation doInBackground(final String... arguments) {
|
||||
return FFmpeg.getMediaInformation(arguments[0]);
|
||||
return FFprobe.getMediaInformation(path);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(final MediaInformation mediaInformation) {
|
||||
if (getMediaInformationCallback != null) {
|
||||
getMediaInformationCallback.apply(mediaInformation);
|
||||
if (singleGetMediaInformationCallback != null) {
|
||||
singleGetMediaInformationCallback.apply(mediaInformation);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -20,13 +20,13 @@
|
||||
package com.arthenica.mobileffmpeg.util;
|
||||
|
||||
/**
|
||||
* <p>Represents a callback function to receive execution result.
|
||||
* <p>Represents a callback function to receive a single execution result.
|
||||
*
|
||||
* @author Taner Sener
|
||||
* @since v2.1
|
||||
*/
|
||||
@FunctionalInterface
|
||||
public interface ExecuteCallback {
|
||||
public interface SingleExecuteCallback {
|
||||
|
||||
void apply(int returnCode, String executeOutput);
|
||||
|
||||
+2
-2
@@ -22,12 +22,12 @@ package com.arthenica.mobileffmpeg.util;
|
||||
import com.arthenica.mobileffmpeg.MediaInformation;
|
||||
|
||||
/**
|
||||
* <p>Represents a callback function to receive getMediaInformation result.
|
||||
* <p>Represents a callback function to receive a single getMediaInformation result.
|
||||
*
|
||||
* @author Taner Sener
|
||||
*/
|
||||
@FunctionalInterface
|
||||
public interface GetMediaInformationCallback {
|
||||
public interface SingleGetMediaInformationCallback {
|
||||
|
||||
void apply(MediaInformation mediaInformation);
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="colorPrimary">#3F51B5</color>
|
||||
<color name="colorPrimaryDark">#303F9F</color>
|
||||
<color name="colorAccent">#FF4081</color>
|
||||
</resources>
|
||||
@@ -1,11 +0,0 @@
|
||||
<resources>
|
||||
|
||||
<!-- Base application theme. -->
|
||||
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
|
||||
<!-- Customize your theme here. -->
|
||||
<item name="colorPrimary">@color/colorPrimary</item>
|
||||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||
<item name="colorAccent">@color/colorAccent</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
||||
@@ -19,8 +19,7 @@
|
||||
|
||||
package com.arthenica.mobileffmpeg;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -138,7 +137,7 @@ public class ConfigTest {
|
||||
Collections.sort(enabledList);
|
||||
|
||||
Assert.assertNotNull(enabledList);
|
||||
Assert.assertTrue(enabledList.size() == 1);
|
||||
Assert.assertEquals(1, enabledList.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -22,8 +22,7 @@ package com.arthenica.mobileffmpeg;
|
||||
import com.arthenica.mobileffmpeg.util.Pair;
|
||||
import com.arthenica.mobileffmpeg.util.Trio;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class MediaInformationTest {
|
||||
@@ -82,16 +81,16 @@ public class MediaInformationTest {
|
||||
|
||||
@Test
|
||||
public void parseVideoStreamDisplayAspectRatio() {
|
||||
Assert.assertEquals(null, MediaInformationParser.parseVideoStreamDisplayAspectRatio(""));
|
||||
Assert.assertEquals(null, MediaInformationParser.parseVideoStreamDisplayAspectRatio("544x184"));
|
||||
Assert.assertNull(MediaInformationParser.parseVideoStreamDisplayAspectRatio(""));
|
||||
Assert.assertNull(MediaInformationParser.parseVideoStreamDisplayAspectRatio("544x184"));
|
||||
Assert.assertEquals("640:427", MediaInformationParser.parseVideoStreamDisplayAspectRatio("2560x1708 [SAR 1:1 DAR 640:427]"));
|
||||
Assert.assertEquals("8:9", MediaInformationParser.parseVideoStreamDisplayAspectRatio("3840x4320 [SAR 1:1 DAR 8:9]"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void parseVideoStreamSampleAspectRatio() {
|
||||
Assert.assertEquals(null, MediaInformationParser.parseVideoStreamSampleAspectRatio(""));
|
||||
Assert.assertEquals(null, MediaInformationParser.parseVideoStreamSampleAspectRatio("544x184"));
|
||||
Assert.assertNull(MediaInformationParser.parseVideoStreamSampleAspectRatio(""));
|
||||
Assert.assertNull(MediaInformationParser.parseVideoStreamSampleAspectRatio("544x184"));
|
||||
Assert.assertEquals("1:1", MediaInformationParser.parseVideoStreamSampleAspectRatio("2560x1708 [SAR 1:1 DAR 640:427]"));
|
||||
Assert.assertEquals("1:1", MediaInformationParser.parseVideoStreamSampleAspectRatio("3840x4320 [SAR 1:1 DAR 8:9]"));
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ buildscript {
|
||||
jcenter()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.3.2'
|
||||
classpath 'com.android.tools.build:gradle:3.5.3'
|
||||
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
// in the individual module build.gradle files
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
|
||||
# Specifies the JVM arguments used for the daemon process.
|
||||
# The setting is particularly useful for tweaking memory settings.
|
||||
android.enableJetifier=true
|
||||
android.useAndroidX=true
|
||||
org.gradle.jvmargs=-Xmx1536m
|
||||
|
||||
# When configured, Gradle will run in incubating parallel mode.
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-bin.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
||||
@@ -44,7 +44,13 @@ include $(BUILD_SHARED_LIBRARY)
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_ARM_MODE := $(MY_ARM_MODE)
|
||||
LOCAL_MODULE := mobileffmpeg
|
||||
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
|
||||
ifeq ($(TARGET_PLATFORM),android-16)
|
||||
LOCAL_SRC_FILES := $(MY_PATH)/mobileffmpeg.c $(MY_PATH)/mobileffprobe.c $(MY_PATH)/android_lts_support.c $(MY_PATH)/mobileffmpeg_exception.c $(MY_PATH)/fftools_cmdutils.c $(MY_PATH)/fftools_ffmpeg.c $(MY_PATH)/fftools_ffprobe.c $(MY_PATH)/fftools_ffmpeg_opt.c $(MY_PATH)/fftools_ffmpeg_hw.c $(MY_PATH)/fftools_ffmpeg_filter.c
|
||||
else ifeq ($(TARGET_PLATFORM),android-17)
|
||||
LOCAL_SRC_FILES := $(MY_PATH)/mobileffmpeg.c $(MY_PATH)/mobileffprobe.c $(MY_PATH)/android_lts_support.c $(MY_PATH)/mobileffmpeg_exception.c $(MY_PATH)/fftools_cmdutils.c $(MY_PATH)/fftools_ffmpeg.c $(MY_PATH)/fftools_ffprobe.c $(MY_PATH)/fftools_ffmpeg_opt.c $(MY_PATH)/fftools_ffmpeg_hw.c $(MY_PATH)/fftools_ffmpeg_filter.c
|
||||
else
|
||||
LOCAL_SRC_FILES := $(MY_PATH)/mobileffmpeg.c $(MY_PATH)/mobileffprobe.c $(MY_PATH)/mobileffmpeg_exception.c $(MY_PATH)/fftools_cmdutils.c $(MY_PATH)/fftools_ffmpeg.c $(MY_PATH)/fftools_ffprobe.c $(MY_PATH)/fftools_ffmpeg_opt.c $(MY_PATH)/fftools_ffmpeg_hw.c $(MY_PATH)/fftools_ffmpeg_filter.c
|
||||
endif
|
||||
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 libavfilter libavformat libavcodec libavutil libswresample libavdevice libswscale
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
/build
|
||||
/.idea/
|
||||
/local.properties
|
||||
@@ -9,13 +9,13 @@ android {
|
||||
keyPassword 'android'
|
||||
}
|
||||
}
|
||||
compileSdkVersion 28
|
||||
compileSdkVersion 29
|
||||
defaultConfig {
|
||||
applicationId "com.arthenica.mobileffmpeg.test"
|
||||
minSdkVersion 24
|
||||
targetSdkVersion 28
|
||||
versionCode 240430
|
||||
versionName "4.3"
|
||||
targetSdkVersion 29
|
||||
versionCode 240431
|
||||
versionName "4.3.1"
|
||||
}
|
||||
buildTypes {
|
||||
debug {
|
||||
@@ -51,12 +51,8 @@ android.applicationVariants.all { variant ->
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
||||
implementation 'com.arthenica:mobile-ffmpeg-full:4.3'
|
||||
// implementation project(':app')
|
||||
testImplementation 'junit:junit:4.12'
|
||||
implementation 'com.android.support:support-v4:28.0.0'
|
||||
implementation 'com.android.support:design:28.0.0'
|
||||
implementation 'com.android.support:appcompat-v7:28.0.0'
|
||||
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
|
||||
implementation 'com.arthenica:mobile-ffmpeg-full:4.3.1'
|
||||
implementation 'androidx.appcompat:appcompat:1.1.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
|
||||
}
|
||||
|
||||
Binary file not shown.
@@ -1,5 +0,0 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-bin.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
-45
@@ -1,45 +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/>.
|
||||
*/
|
||||
|
||||
package com.arthenica.mobileffmpeg.test;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.test.InstrumentationRegistry;
|
||||
import android.support.test.runner.AndroidJUnit4;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* Instrumented test, which will execute on an Android device.
|
||||
*
|
||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class ExampleInstrumentedTest {
|
||||
@Test
|
||||
public void useAppContext() throws Exception {
|
||||
// Context of the app under test.
|
||||
Context appContext = InstrumentationRegistry.getTargetContext();
|
||||
|
||||
assertEquals("com.arthenica.mobileffmpeg.test", appContext.getPackageName());
|
||||
}
|
||||
}
|
||||
@@ -20,8 +20,7 @@
|
||||
android:largeHeap="true"
|
||||
android:theme="@style/AppTheme"
|
||||
tools:ignore="GoogleAppIndexingWarning">
|
||||
<activity android:name="com.arthenica.mobileffmpeg.test.MainActivity"
|
||||
android:theme="@style/AppTheme">
|
||||
<activity android:name="com.arthenica.mobileffmpeg.test.MainActivity">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
|
||||
+39
-51
@@ -21,93 +21,81 @@ package com.arthenica.mobileffmpeg.test;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.text.method.ScrollingMovementMethod;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Button;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.arthenica.mobileffmpeg.Config;
|
||||
import com.arthenica.mobileffmpeg.FFmpeg;
|
||||
import com.arthenica.mobileffmpeg.LogCallback;
|
||||
import com.arthenica.mobileffmpeg.LogMessage;
|
||||
import com.arthenica.mobileffmpeg.util.ExecuteCallback;
|
||||
import com.arthenica.mobileffmpeg.util.DialogUtil;
|
||||
import com.arthenica.mobileffmpeg.util.SingleExecuteCallback;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import static com.arthenica.mobileffmpeg.FFmpeg.RETURN_CODE_SUCCESS;
|
||||
import static com.arthenica.mobileffmpeg.Config.RETURN_CODE_SUCCESS;
|
||||
import static com.arthenica.mobileffmpeg.test.MainActivity.TAG;
|
||||
|
||||
public class AudioTabFragment extends Fragment implements AdapterView.OnItemSelectedListener {
|
||||
|
||||
private MainActivity mainActivity;
|
||||
private AlertDialog progressDialog;
|
||||
private Button encodeButton;
|
||||
private TextView outputText;
|
||||
private String selectedCodec;
|
||||
|
||||
@Override
|
||||
public View onCreateView(@NonNull final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.fragment_audio_tab, container, false);
|
||||
public AudioTabFragment() {
|
||||
super(R.layout.fragment_audio_tab);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
||||
if (getView() != null) {
|
||||
Spinner audioCodecSpinner = getView().findViewById(R.id.audioCodecSpinner);
|
||||
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(mainActivity,
|
||||
R.array.audio_codec, R.layout.spinner_item);
|
||||
adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
|
||||
audioCodecSpinner.setAdapter(adapter);
|
||||
audioCodecSpinner.setOnItemSelectedListener(this);
|
||||
Spinner audioCodecSpinner = view.findViewById(R.id.audioCodecSpinner);
|
||||
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(requireContext(),
|
||||
R.array.audio_codec, R.layout.spinner_item);
|
||||
adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
|
||||
audioCodecSpinner.setAdapter(adapter);
|
||||
audioCodecSpinner.setOnItemSelectedListener(this);
|
||||
|
||||
encodeButton = getView().findViewById(R.id.encodeButton);
|
||||
encodeButton.setOnClickListener(new View.OnClickListener() {
|
||||
encodeButton = view.findViewById(R.id.encodeButton);
|
||||
encodeButton.setOnClickListener(new View.OnClickListener() {
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
encodeAudio();
|
||||
// encodeChromaprint();
|
||||
}
|
||||
});
|
||||
encodeButton.setEnabled(false);
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
encodeAudio();
|
||||
// encodeChromaprint();
|
||||
}
|
||||
});
|
||||
encodeButton.setEnabled(false);
|
||||
|
||||
outputText = getView().findViewById(R.id.outputText);
|
||||
outputText.setMovementMethod(new ScrollingMovementMethod());
|
||||
}
|
||||
outputText = view.findViewById(R.id.outputText);
|
||||
outputText.setMovementMethod(new ScrollingMovementMethod());
|
||||
|
||||
progressDialog = mainActivity.createProgressDialog("Encoding audio");
|
||||
progressDialog = DialogUtil.createProgressDialog(requireContext(), "Encoding audio");
|
||||
|
||||
selectedCodec = getResources().getStringArray(R.array.audio_codec)[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUserVisibleHint(boolean isVisibleToUser) {
|
||||
super.setUserVisibleHint(isVisibleToUser);
|
||||
if (isVisibleToUser) {
|
||||
setActive();
|
||||
}
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
setActive();
|
||||
}
|
||||
|
||||
public void setMainActivity(MainActivity mainActivity) {
|
||||
this.mainActivity = mainActivity;
|
||||
}
|
||||
|
||||
public static AudioTabFragment newInstance(final MainActivity mainActivity) {
|
||||
final AudioTabFragment fragment = new AudioTabFragment();
|
||||
fragment.setMainActivity(mainActivity);
|
||||
return fragment;
|
||||
public static AudioTabFragment newInstance() {
|
||||
return new AudioTabFragment();
|
||||
}
|
||||
|
||||
public void enableLogCallback() {
|
||||
@@ -159,7 +147,7 @@ public class AudioTabFragment extends Fragment implements AdapterView.OnItemSele
|
||||
|
||||
android.util.Log.d(TAG, String.format("FFmpeg process started with arguments\n'%s'", ffmpegCommand));
|
||||
|
||||
MainActivity.executeAsync(new ExecuteCallback() {
|
||||
MainActivity.executeAsync(new SingleExecuteCallback() {
|
||||
|
||||
@Override
|
||||
public void apply(final int returnCode, final String commandOutput) {
|
||||
@@ -172,10 +160,10 @@ public class AudioTabFragment extends Fragment implements AdapterView.OnItemSele
|
||||
@Override
|
||||
public Object call() {
|
||||
if (returnCode == RETURN_CODE_SUCCESS) {
|
||||
Popup.show(mainActivity, "Encode completed successfully.");
|
||||
Popup.show(requireContext(), "Encode completed successfully.");
|
||||
android.util.Log.d(TAG, "Encode completed successfully.");
|
||||
} else {
|
||||
Popup.show(mainActivity, "Encode failed. Please check log for the details.");
|
||||
Popup.show(requireContext(), "Encode failed. Please check log for the details.");
|
||||
android.util.Log.d(TAG, String.format("Encode failed with rc=%d", returnCode));
|
||||
}
|
||||
|
||||
@@ -218,7 +206,7 @@ public class AudioTabFragment extends Fragment implements AdapterView.OnItemSele
|
||||
android.util.Log.d(TAG, "AUDIO sample created");
|
||||
} else {
|
||||
android.util.Log.d(TAG, String.format("Creating AUDIO sample failed with rc=%d", result));
|
||||
Popup.show(mainActivity, "Creating AUDIO sample failed. Please check log for the details.");
|
||||
Popup.show(requireContext(), "Creating AUDIO sample failed. Please check log for the details.");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -260,11 +248,11 @@ public class AudioTabFragment extends Fragment implements AdapterView.OnItemSele
|
||||
}
|
||||
|
||||
final String audio = "audio." + extension;
|
||||
return new File(mainActivity.getFilesDir(), audio);
|
||||
return new File(requireContext().getFilesDir(), audio);
|
||||
}
|
||||
|
||||
public File getAudioSampleFile() {
|
||||
return new File(mainActivity.getFilesDir(), "audio-sample.wav");
|
||||
return new File(requireContext().getFilesDir(), "audio-sample.wav");
|
||||
}
|
||||
|
||||
public void setActive() {
|
||||
@@ -272,7 +260,7 @@ public class AudioTabFragment extends Fragment implements AdapterView.OnItemSele
|
||||
disableLogCallback();
|
||||
createAudioSample();
|
||||
enableLogCallback();
|
||||
Popup.show(mainActivity, Tooltip.AUDIO_TEST_TOOLTIP_TEXT);
|
||||
Popup.show(requireContext(), Tooltip.AUDIO_TEST_TOOLTIP_TEXT);
|
||||
}
|
||||
|
||||
public void appendLog(final String logMessage) {
|
||||
|
||||
+46
-70
@@ -20,84 +20,72 @@
|
||||
package com.arthenica.mobileffmpeg.test;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.text.method.ScrollingMovementMethod;
|
||||
import android.util.AndroidRuntimeException;
|
||||
import android.view.LayoutInflater;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.EditText;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.arthenica.mobileffmpeg.Config;
|
||||
import com.arthenica.mobileffmpeg.FFmpeg;
|
||||
import com.arthenica.mobileffmpeg.FFprobe;
|
||||
import com.arthenica.mobileffmpeg.LogCallback;
|
||||
import com.arthenica.mobileffmpeg.LogMessage;
|
||||
import com.arthenica.mobileffmpeg.util.ExecuteCallback;
|
||||
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
public class CommandTabFragment extends Fragment {
|
||||
|
||||
private MainActivity mainActivity;
|
||||
private EditText commandText;
|
||||
private TextView outputText;
|
||||
|
||||
@Override
|
||||
public View onCreateView(@NonNull final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.fragment_command_tab, container, false);
|
||||
public CommandTabFragment() {
|
||||
super(R.layout.fragment_command_tab);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
||||
if (getView() != null) {
|
||||
commandText = getView().findViewById(R.id.commandText);
|
||||
commandText = view.findViewById(R.id.commandText);
|
||||
|
||||
View runButton = getView().findViewById(R.id.runButton);
|
||||
runButton.setOnClickListener(new View.OnClickListener() {
|
||||
View runFFmpegButton = view.findViewById(R.id.runFFmpegButton);
|
||||
runFFmpegButton.setOnClickListener(new View.OnClickListener() {
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
runFFmpeg();
|
||||
}
|
||||
});
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
runFFmpeg();
|
||||
}
|
||||
});
|
||||
|
||||
View runAsyncButton = getView().findViewById(R.id.runAsyncButton);
|
||||
runAsyncButton.setOnClickListener(new View.OnClickListener() {
|
||||
View runFFprobeButton = view.findViewById(R.id.runFFprobeButton);
|
||||
runFFprobeButton.setOnClickListener(new View.OnClickListener() {
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
runFFmpegAsync();
|
||||
}
|
||||
});
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
runFFprobe();
|
||||
}
|
||||
});
|
||||
|
||||
outputText = getView().findViewById(R.id.outputText);
|
||||
outputText.setMovementMethod(new ScrollingMovementMethod());
|
||||
}
|
||||
outputText = view.findViewById(R.id.outputText);
|
||||
outputText.setMovementMethod(new ScrollingMovementMethod());
|
||||
|
||||
android.util.Log.d(MainActivity.TAG, "Last command output was: " + FFmpeg.getLastCommandOutput());
|
||||
Log.d(MainActivity.TAG, "Last command output was: " + Config.getLastCommandOutput());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUserVisibleHint(boolean isVisibleToUser) {
|
||||
super.setUserVisibleHint(isVisibleToUser);
|
||||
if (isVisibleToUser) {
|
||||
setActive();
|
||||
}
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
setActive();
|
||||
}
|
||||
|
||||
public void setMainActivity(MainActivity mainActivity) {
|
||||
this.mainActivity = mainActivity;
|
||||
}
|
||||
|
||||
public static CommandTabFragment newInstance(final MainActivity mainActivity) {
|
||||
final CommandTabFragment fragment = new CommandTabFragment();
|
||||
fragment.setMainActivity(mainActivity);
|
||||
return fragment;
|
||||
public static CommandTabFragment newInstance() {
|
||||
return new CommandTabFragment();
|
||||
}
|
||||
|
||||
public void enableLogCallback() {
|
||||
@@ -122,9 +110,9 @@ public class CommandTabFragment extends Fragment {
|
||||
public void runFFmpeg() {
|
||||
clearLog();
|
||||
|
||||
final String ffmpegCommand = String.format("-hide_banner %s", commandText.getText().toString());
|
||||
final String ffmpegCommand = String.format("%s", commandText.getText().toString());
|
||||
|
||||
android.util.Log.d(MainActivity.TAG, "Testing COMMAND synchronously.");
|
||||
android.util.Log.d(MainActivity.TAG, "Testing FFmpeg COMMAND synchronously.");
|
||||
|
||||
android.util.Log.d(MainActivity.TAG, String.format("FFmpeg process started with arguments\n\'%s\'", ffmpegCommand));
|
||||
|
||||
@@ -133,44 +121,32 @@ public class CommandTabFragment extends Fragment {
|
||||
android.util.Log.d(MainActivity.TAG, String.format("FFmpeg process exited with rc %d", result));
|
||||
|
||||
if (result != 0) {
|
||||
Popup.show(mainActivity, "Command failed. Please check output for the details.");
|
||||
Popup.show(requireContext(), "Command failed. Please check output for the details.");
|
||||
}
|
||||
}
|
||||
|
||||
public void runFFmpegAsync() {
|
||||
public void runFFprobe() {
|
||||
clearLog();
|
||||
|
||||
final String ffmpegCommand = String.format("-hide_banner %s", commandText.getText().toString());
|
||||
final String ffprobeCommand = String.format("%s", commandText.getText().toString());
|
||||
|
||||
android.util.Log.d(MainActivity.TAG, "Testing COMMAND asynchronously.");
|
||||
android.util.Log.d(MainActivity.TAG, "Testing FFprobe COMMAND synchronously.");
|
||||
|
||||
android.util.Log.d(MainActivity.TAG, String.format("FFmpeg process started with arguments\n\'%s\'", ffmpegCommand));
|
||||
android.util.Log.d(MainActivity.TAG, String.format("FFprobe process started with arguments\n\'%s\'", ffprobeCommand));
|
||||
|
||||
MainActivity.executeAsync(new ExecuteCallback() {
|
||||
int result = FFprobe.execute(ffprobeCommand);
|
||||
|
||||
@Override
|
||||
public void apply(int result, final String commandOutput) {
|
||||
android.util.Log.d(MainActivity.TAG, String.format("FFprobe process exited with rc %d", result));
|
||||
|
||||
android.util.Log.d(MainActivity.TAG, String.format("FFmpeg process exited with rc %d", result));
|
||||
|
||||
if (result != 0) {
|
||||
MainActivity.addUIAction(new Callable() {
|
||||
@Override
|
||||
public Object call() {
|
||||
Popup.show(mainActivity, "Command failed. Please check output for the details.");
|
||||
return null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
}, ffmpegCommand);
|
||||
if (result != 0) {
|
||||
Popup.show(requireContext(), "Command failed. Please check output for the details.");
|
||||
}
|
||||
}
|
||||
|
||||
public void setActive() {
|
||||
android.util.Log.i(MainActivity.TAG, "Command Tab Activated");
|
||||
private void setActive() {
|
||||
Log.i(MainActivity.TAG, "Command Tab Activated");
|
||||
enableLogCallback();
|
||||
Popup.show(mainActivity, Tooltip.COMMAND_TEST_TOOLTIP_TEXT);
|
||||
Popup.show(requireContext(), Tooltip.COMMAND_TEST_TOOLTIP_TEXT);
|
||||
}
|
||||
|
||||
public void appendLog(final String logMessage) {
|
||||
|
||||
+26
-38
@@ -20,18 +20,18 @@
|
||||
package com.arthenica.mobileffmpeg.test;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.text.method.ScrollingMovementMethod;
|
||||
import android.view.LayoutInflater;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.EditText;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.arthenica.mobileffmpeg.Config;
|
||||
import com.arthenica.mobileffmpeg.FFmpeg;
|
||||
import com.arthenica.mobileffmpeg.FFprobe;
|
||||
import com.arthenica.mobileffmpeg.LogCallback;
|
||||
import com.arthenica.mobileffmpeg.LogMessage;
|
||||
import com.arthenica.mobileffmpeg.MediaInformation;
|
||||
@@ -45,52 +45,40 @@ public class HttpsTabFragment extends Fragment {
|
||||
|
||||
public static final String HTTPS_TEST_DEFAULT_URL = "https://download.blender.org/peach/trailer/trailer_1080p.ogg";
|
||||
|
||||
private MainActivity mainActivity;
|
||||
private EditText urlText;
|
||||
private TextView outputText;
|
||||
|
||||
@Override
|
||||
public View onCreateView(@NonNull final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.fragment_https_tab, container, false);
|
||||
public HttpsTabFragment() {
|
||||
super(R.layout.fragment_https_tab);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
||||
if (getView() != null) {
|
||||
urlText = getView().findViewById(R.id.urlText);
|
||||
urlText = view.findViewById(R.id.urlText);
|
||||
|
||||
View getInfoButton = getView().findViewById(R.id.getInfoButton);
|
||||
getInfoButton.setOnClickListener(new View.OnClickListener() {
|
||||
View getInfoButton = view.findViewById(R.id.getInfoButton);
|
||||
getInfoButton.setOnClickListener(new View.OnClickListener() {
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
getInfo();
|
||||
}
|
||||
});
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
getInfo();
|
||||
}
|
||||
});
|
||||
|
||||
outputText = getView().findViewById(R.id.outputText);
|
||||
outputText.setMovementMethod(new ScrollingMovementMethod());
|
||||
}
|
||||
outputText = view.findViewById(R.id.outputText);
|
||||
outputText.setMovementMethod(new ScrollingMovementMethod());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUserVisibleHint(boolean isVisibleToUser) {
|
||||
super.setUserVisibleHint(isVisibleToUser);
|
||||
if (isVisibleToUser) {
|
||||
setActive();
|
||||
}
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
setActive();
|
||||
}
|
||||
|
||||
public void setMainActivity(MainActivity mainActivity) {
|
||||
this.mainActivity = mainActivity;
|
||||
}
|
||||
|
||||
public static HttpsTabFragment newInstance(final MainActivity mainActivity) {
|
||||
final HttpsTabFragment fragment = new HttpsTabFragment();
|
||||
fragment.setMainActivity(mainActivity);
|
||||
return fragment;
|
||||
public static HttpsTabFragment newInstance() {
|
||||
return new HttpsTabFragment();
|
||||
}
|
||||
|
||||
public void enableLogCallback() {
|
||||
@@ -123,7 +111,7 @@ public class HttpsTabFragment extends Fragment {
|
||||
}
|
||||
|
||||
// HTTPS COMMAND ARGUMENTS
|
||||
MediaInformation information = FFmpeg.getMediaInformation(testUrl);
|
||||
MediaInformation information = FFprobe.getMediaInformation(testUrl);
|
||||
if (information == null) {
|
||||
appendLog("Get media information failed\n");
|
||||
} else {
|
||||
@@ -220,9 +208,9 @@ public class HttpsTabFragment extends Fragment {
|
||||
}
|
||||
|
||||
public void setActive() {
|
||||
android.util.Log.i(MainActivity.TAG, "Https Tab Activated");
|
||||
Log.i(MainActivity.TAG, "Https Tab Activated");
|
||||
enableLogCallback();
|
||||
Popup.show(mainActivity, Tooltip.HTTPS_TEST_TOOLTIP_TEXT);
|
||||
Popup.show(requireContext(), Tooltip.HTTPS_TEST_TOOLTIP_TEXT);
|
||||
}
|
||||
|
||||
public void appendLog(final String logMessage) {
|
||||
|
||||
@@ -20,34 +20,25 @@
|
||||
package com.arthenica.mobileffmpeg.test;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.ActionBar;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Color;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.support.v4.app.ActivityCompat;
|
||||
import android.support.v4.view.PagerTabStrip;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.viewpager.widget.PagerTabStrip;
|
||||
import androidx.viewpager.widget.ViewPager;
|
||||
|
||||
import com.arthenica.mobileffmpeg.Config;
|
||||
import com.arthenica.mobileffmpeg.util.AsyncExecuteTask;
|
||||
import com.arthenica.mobileffmpeg.util.ExecuteCallback;
|
||||
import com.arthenica.mobileffmpeg.util.AsyncSingleFFmpegExecuteTask;
|
||||
import com.arthenica.mobileffmpeg.util.ResourcesUtil;
|
||||
import com.arthenica.mobileffmpeg.util.SingleExecuteCallback;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Queue;
|
||||
@@ -96,12 +87,6 @@ public class MainActivity extends AppCompatActivity {
|
||||
|
||||
setContentView(R.layout.activity_main);
|
||||
|
||||
android.support.v7.app.ActionBar supportActionBar = getSupportActionBar();
|
||||
if (supportActionBar != null) {
|
||||
supportActionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
|
||||
supportActionBar.setCustomView(R.layout.action_bar);
|
||||
}
|
||||
|
||||
PagerTabStrip pagerTabStrip = findViewById(R.id.pagerTabStrip);
|
||||
if (pagerTabStrip != null) {
|
||||
pagerTabStrip.setDrawFullUnderline(false);
|
||||
@@ -110,7 +95,7 @@ public class MainActivity extends AppCompatActivity {
|
||||
}
|
||||
|
||||
final ViewPager viewPager = findViewById(R.id.pager);
|
||||
viewPager.setAdapter(new PagerAdapter(getSupportFragmentManager(), this, 7));
|
||||
viewPager.setAdapter(new PagerAdapter(getSupportFragmentManager(), this));
|
||||
|
||||
waitForUIAction();
|
||||
|
||||
@@ -153,14 +138,14 @@ public class MainActivity extends AppCompatActivity {
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Starts a new asynchronous FFmpeg operation with arguments provided.
|
||||
* <p>Starts a new asynchronous FFmpeg operation with command provided.
|
||||
*
|
||||
* @param executeCallback callback function to receive result of this execution
|
||||
* @param arguments FFmpeg command options/arguments
|
||||
* @param singleExecuteCallback callback function to receive result of this execution
|
||||
* @param command FFmpeg command
|
||||
*/
|
||||
public static void executeAsync(final ExecuteCallback executeCallback, final String arguments) {
|
||||
final AsyncExecuteTask asyncCommandTask = new AsyncExecuteTask(executeCallback);
|
||||
asyncCommandTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, arguments);
|
||||
public static void executeAsync(final SingleExecuteCallback singleExecuteCallback, final String command) {
|
||||
final AsyncSingleFFmpegExecuteTask asyncCommandTask = new AsyncSingleFFmpegExecuteTask(command, singleExecuteCallback);
|
||||
asyncCommandTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
}
|
||||
|
||||
public static void waitForUIAction() {
|
||||
@@ -171,84 +156,12 @@ public class MainActivity extends AppCompatActivity {
|
||||
actionQueue.add(callable);
|
||||
}
|
||||
|
||||
public AlertDialog createProgressDialog(final String text) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
if (inflater != null) {
|
||||
View dialogView = inflater.inflate(R.layout.progress_dialog_layout, null);
|
||||
builder.setView(dialogView);
|
||||
|
||||
TextView textView = dialogView.findViewById(R.id.progressDialogText);
|
||||
if (textView != null) {
|
||||
textView.setText(text);
|
||||
}
|
||||
}
|
||||
builder.setCancelable(false);
|
||||
return builder.create();
|
||||
}
|
||||
|
||||
public AlertDialog createCancellableProgressDialog(final String text, final View.OnClickListener onClickListener) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
if (inflater != null) {
|
||||
View dialogView = inflater.inflate(R.layout.cancellable_progress_dialog_layout, null);
|
||||
builder.setView(dialogView);
|
||||
|
||||
TextView textView = dialogView.findViewById(R.id.progressDialogText);
|
||||
if (textView != null) {
|
||||
textView.setText(text);
|
||||
}
|
||||
Button cancelButton = dialogView.findViewById(R.id.cancelButton);
|
||||
if (cancelButton != null) {
|
||||
cancelButton.setOnClickListener(onClickListener);
|
||||
}
|
||||
}
|
||||
builder.setCancelable(false);
|
||||
return builder.create();
|
||||
}
|
||||
|
||||
protected void resourceToFile(final int resourceId, final File file) throws IOException {
|
||||
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId);
|
||||
|
||||
if (file.exists()) {
|
||||
file.delete();
|
||||
}
|
||||
|
||||
FileOutputStream outputStream = new FileOutputStream(file);
|
||||
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
|
||||
outputStream.flush();
|
||||
outputStream.close();
|
||||
}
|
||||
|
||||
protected void rawResourceToFile(final int resourceId, final File file) throws IOException {
|
||||
final InputStream inputStream = getResources().openRawResource(resourceId);
|
||||
if (file.exists()) {
|
||||
file.delete();
|
||||
}
|
||||
final FileOutputStream outputStream = new FileOutputStream(file);
|
||||
|
||||
try {
|
||||
final byte[] buffer = new byte[1024];
|
||||
int readSize;
|
||||
|
||||
while ((readSize = inputStream.read(buffer)) > 0) {
|
||||
outputStream.write(buffer, 0, readSize);
|
||||
}
|
||||
} catch (final IOException e) {
|
||||
Log.e(TAG, "Saving raw resource failed.", e);
|
||||
} finally {
|
||||
inputStream.close();
|
||||
outputStream.flush();
|
||||
outputStream.close();
|
||||
}
|
||||
}
|
||||
|
||||
protected void registerAppFont() throws IOException {
|
||||
final File cacheDirectory = getCacheDir();
|
||||
|
||||
// SAVE FONTS
|
||||
rawResourceToFile(R.raw.doppioone_regular, new File(cacheDirectory, "doppioone_regular.ttf"));
|
||||
rawResourceToFile(R.raw.truenorg, new File(cacheDirectory, "truenorg.otf"));
|
||||
ResourcesUtil.rawResourceToFile(getResources(), R.raw.doppioone_regular, new File(cacheDirectory, "doppioone_regular.ttf"));
|
||||
ResourcesUtil.rawResourceToFile(getResources(), R.raw.truenorg, new File(cacheDirectory, "truenorg.otf"));
|
||||
|
||||
final HashMap<String, String> fontNameMapping = new HashMap<>();
|
||||
fontNameMapping.put("MyFontName", "Doppio One");
|
||||
|
||||
@@ -19,44 +19,45 @@
|
||||
|
||||
package com.arthenica.mobileffmpeg.test;
|
||||
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.app.FragmentPagerAdapter;
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.fragment.app.FragmentPagerAdapter;
|
||||
|
||||
public class PagerAdapter extends FragmentPagerAdapter {
|
||||
private final MainActivity mainActivity;
|
||||
private int numberOfTabs;
|
||||
private static final int NUMBER_OF_TABS = 7;
|
||||
|
||||
PagerAdapter(final FragmentManager fragmentManager, final MainActivity mainActivity, final int numberOfTabs) {
|
||||
super(fragmentManager);
|
||||
private final Context context;
|
||||
|
||||
this.mainActivity = mainActivity;
|
||||
this.numberOfTabs = numberOfTabs;
|
||||
PagerAdapter(FragmentManager fragmentManager, Context context) {
|
||||
super(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Fragment getItem(final int position) {
|
||||
switch (position) {
|
||||
case 0: {
|
||||
return CommandTabFragment.newInstance(mainActivity);
|
||||
return CommandTabFragment.newInstance();
|
||||
}
|
||||
case 1: {
|
||||
return VideoTabFragment.newInstance(mainActivity);
|
||||
return VideoTabFragment.newInstance();
|
||||
}
|
||||
case 2: {
|
||||
return HttpsTabFragment.newInstance(mainActivity);
|
||||
return HttpsTabFragment.newInstance();
|
||||
}
|
||||
case 3: {
|
||||
return AudioTabFragment.newInstance(mainActivity);
|
||||
return AudioTabFragment.newInstance();
|
||||
}
|
||||
case 4: {
|
||||
return SubtitleTabFragment.newInstance(mainActivity);
|
||||
return SubtitleTabFragment.newInstance();
|
||||
}
|
||||
case 5: {
|
||||
return VidStabTabFragment.newInstance(mainActivity);
|
||||
return VidStabTabFragment.newInstance();
|
||||
}
|
||||
case 6: {
|
||||
return PipeTabFragment.newInstance(mainActivity);
|
||||
return PipeTabFragment.newInstance();
|
||||
}
|
||||
default: {
|
||||
return null;
|
||||
@@ -66,32 +67,32 @@ public class PagerAdapter extends FragmentPagerAdapter {
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return numberOfTabs;
|
||||
return NUMBER_OF_TABS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CharSequence getPageTitle(final int position) {
|
||||
switch (position) {
|
||||
case 0: {
|
||||
return mainActivity.getString(R.string.command_tab);
|
||||
return context.getString(R.string.command_tab);
|
||||
}
|
||||
case 1: {
|
||||
return mainActivity.getString(R.string.video_tab);
|
||||
return context.getString(R.string.video_tab);
|
||||
}
|
||||
case 2: {
|
||||
return mainActivity.getString(R.string.https_tab);
|
||||
return context.getString(R.string.https_tab);
|
||||
}
|
||||
case 3: {
|
||||
return mainActivity.getString(R.string.audio_tab);
|
||||
return context.getString(R.string.audio_tab);
|
||||
}
|
||||
case 4: {
|
||||
return mainActivity.getString(R.string.subtitle_tab);
|
||||
return context.getString(R.string.subtitle_tab);
|
||||
}
|
||||
case 5: {
|
||||
return mainActivity.getString(R.string.vidstab_tab);
|
||||
return context.getString(R.string.vidstab_tab);
|
||||
}
|
||||
case 6: {
|
||||
return mainActivity.getString(R.string.pipe_tab);
|
||||
return context.getString(R.string.pipe_tab);
|
||||
}
|
||||
default: {
|
||||
return null;
|
||||
|
||||
+42
-53
@@ -24,83 +24,72 @@ import android.media.MediaPlayer;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.MediaController;
|
||||
import android.widget.TextView;
|
||||
import android.widget.VideoView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.arthenica.mobileffmpeg.Config;
|
||||
import com.arthenica.mobileffmpeg.LogCallback;
|
||||
import com.arthenica.mobileffmpeg.LogMessage;
|
||||
import com.arthenica.mobileffmpeg.Statistics;
|
||||
import com.arthenica.mobileffmpeg.StatisticsCallback;
|
||||
import com.arthenica.mobileffmpeg.util.AsyncCatImageTask;
|
||||
import com.arthenica.mobileffmpeg.util.ExecuteCallback;
|
||||
import com.arthenica.mobileffmpeg.util.DialogUtil;
|
||||
import com.arthenica.mobileffmpeg.util.ResourcesUtil;
|
||||
import com.arthenica.mobileffmpeg.util.SingleExecuteCallback;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import static com.arthenica.mobileffmpeg.FFmpeg.RETURN_CODE_SUCCESS;
|
||||
import static com.arthenica.mobileffmpeg.Config.RETURN_CODE_SUCCESS;
|
||||
import static com.arthenica.mobileffmpeg.test.MainActivity.TAG;
|
||||
|
||||
public class PipeTabFragment extends Fragment {
|
||||
|
||||
private MainActivity mainActivity;
|
||||
private VideoView videoView;
|
||||
private AlertDialog progressDialog;
|
||||
private Statistics statistics;
|
||||
|
||||
@Override
|
||||
public View onCreateView(@NonNull final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.fragment_pipe_tab, container, false);
|
||||
public PipeTabFragment() {
|
||||
super(R.layout.fragment_pipe_tab);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
||||
if (getView() != null) {
|
||||
View createButton = getView().findViewById(R.id.createButton);
|
||||
if (createButton != null) {
|
||||
createButton.setOnClickListener(new View.OnClickListener() {
|
||||
View createButton = view.findViewById(R.id.createButton);
|
||||
if (createButton != null) {
|
||||
createButton.setOnClickListener(new View.OnClickListener() {
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
createVideo();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
videoView = getView().findViewById(R.id.videoPlayerFrame);
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
createVideo();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
progressDialog = mainActivity.createProgressDialog("Creating video");
|
||||
videoView = view.findViewById(R.id.videoPlayerFrame);
|
||||
|
||||
progressDialog = DialogUtil.createProgressDialog(requireContext(), "Creating video");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUserVisibleHint(boolean isVisibleToUser) {
|
||||
super.setUserVisibleHint(isVisibleToUser);
|
||||
if (isVisibleToUser) {
|
||||
setActive();
|
||||
}
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
setActive();
|
||||
}
|
||||
|
||||
public void setMainActivity(MainActivity mainActivity) {
|
||||
this.mainActivity = mainActivity;
|
||||
}
|
||||
|
||||
public static PipeTabFragment newInstance(final MainActivity mainActivity) {
|
||||
final PipeTabFragment fragment = new PipeTabFragment();
|
||||
fragment.setMainActivity(mainActivity);
|
||||
return fragment;
|
||||
public static PipeTabFragment newInstance() {
|
||||
return new PipeTabFragment();
|
||||
}
|
||||
|
||||
public void enableLogCallback() {
|
||||
@@ -137,14 +126,14 @@ public class PipeTabFragment extends Fragment {
|
||||
}
|
||||
|
||||
public void createVideo() {
|
||||
final File image1File = new File(mainActivity.getCacheDir(), "colosseum.jpg");
|
||||
final File image2File = new File(mainActivity.getCacheDir(), "pyramid.jpg");
|
||||
final File image3File = new File(mainActivity.getCacheDir(), "tajmahal.jpg");
|
||||
final File image1File = new File(requireContext().getCacheDir(), "colosseum.jpg");
|
||||
final File image2File = new File(requireContext().getCacheDir(), "pyramid.jpg");
|
||||
final File image3File = new File(requireContext().getCacheDir(), "tajmahal.jpg");
|
||||
final File videoFile = getVideoFile();
|
||||
|
||||
String pipe1 = Config.registerNewFFmpegPipe(mainActivity);
|
||||
String pipe2 = Config.registerNewFFmpegPipe(mainActivity);
|
||||
String pipe3 = Config.registerNewFFmpegPipe(mainActivity);
|
||||
String pipe1 = Config.registerNewFFmpegPipe(requireContext());
|
||||
String pipe2 = Config.registerNewFFmpegPipe(requireContext());
|
||||
String pipe3 = Config.registerNewFFmpegPipe(requireContext());
|
||||
|
||||
try {
|
||||
|
||||
@@ -159,15 +148,15 @@ public class PipeTabFragment extends Fragment {
|
||||
|
||||
showProgressDialog();
|
||||
|
||||
mainActivity.resourceToFile(R.drawable.colosseum, image1File);
|
||||
mainActivity.resourceToFile(R.drawable.pyramid, image2File);
|
||||
mainActivity.resourceToFile(R.drawable.tajmahal, image3File);
|
||||
ResourcesUtil.resourceToFile(getResources(), R.drawable.colosseum, image1File);
|
||||
ResourcesUtil.resourceToFile(getResources(), R.drawable.pyramid, image2File);
|
||||
ResourcesUtil.resourceToFile(getResources(), R.drawable.tajmahal, image3File);
|
||||
|
||||
final String ffmpegCommand = Video.generateCreateVideoWithPipesScript(pipe1, pipe2, pipe3, videoFile.getAbsolutePath());
|
||||
|
||||
Log.d(TAG, String.format("FFmpeg process started with arguments\n'%s'", ffmpegCommand));
|
||||
|
||||
MainActivity.executeAsync(new ExecuteCallback() {
|
||||
MainActivity.executeAsync(new SingleExecuteCallback() {
|
||||
|
||||
@Override
|
||||
public void apply(final int returnCode, final String commandOutput) {
|
||||
@@ -183,7 +172,7 @@ public class PipeTabFragment extends Fragment {
|
||||
Log.d(TAG, "Create completed successfully; playing video.");
|
||||
playVideo();
|
||||
} else {
|
||||
Popup.show(mainActivity, "Create failed. Please check log for the details.");
|
||||
Popup.show(requireContext(), "Create failed. Please check log for the details.");
|
||||
Log.d(TAG, String.format("Create failed with rc=%d", returnCode));
|
||||
}
|
||||
|
||||
@@ -200,12 +189,12 @@ public class PipeTabFragment extends Fragment {
|
||||
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "Create video failed", e);
|
||||
Popup.show(mainActivity, "Create video failed");
|
||||
Popup.show(requireContext(), "Create video failed");
|
||||
}
|
||||
}
|
||||
|
||||
protected void playVideo() {
|
||||
MediaController mediaController = new MediaController(mainActivity);
|
||||
MediaController mediaController = new MediaController(requireContext());
|
||||
mediaController.setAnchorView(videoView);
|
||||
videoView.setVideoURI(Uri.parse("file://" + getVideoFile().getAbsolutePath()));
|
||||
videoView.setMediaController(mediaController);
|
||||
@@ -229,14 +218,14 @@ public class PipeTabFragment extends Fragment {
|
||||
}
|
||||
|
||||
protected File getVideoFile() {
|
||||
return new File(mainActivity.getFilesDir(), "video.mp4");
|
||||
return new File(requireContext().getFilesDir(), "video.mp4");
|
||||
}
|
||||
|
||||
public void setActive() {
|
||||
Log.i(MainActivity.TAG, "Pipe Tab Activated");
|
||||
enableLogCallback();
|
||||
enableStatisticsCallback();
|
||||
Popup.show(mainActivity, Tooltip.PIPE_TEST_TOOLTIP_TEXT);
|
||||
Popup.show(requireContext(), Tooltip.PIPE_TEST_TOOLTIP_TEXT);
|
||||
}
|
||||
|
||||
protected void showProgressDialog() {
|
||||
@@ -273,7 +262,7 @@ public class PipeTabFragment extends Fragment {
|
||||
|
||||
@Override
|
||||
public Object call() {
|
||||
PipeTabFragment.this.progressDialog = mainActivity.createProgressDialog("Creating video");
|
||||
PipeTabFragment.this.progressDialog = DialogUtil.createProgressDialog(requireContext(), "Creating video");
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
+46
-72
@@ -23,33 +23,33 @@ import android.app.AlertDialog;
|
||||
import android.media.MediaPlayer;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.MediaController;
|
||||
import android.widget.TextView;
|
||||
import android.widget.VideoView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.arthenica.mobileffmpeg.Config;
|
||||
import com.arthenica.mobileffmpeg.FFmpeg;
|
||||
import com.arthenica.mobileffmpeg.LogCallback;
|
||||
import com.arthenica.mobileffmpeg.LogMessage;
|
||||
import com.arthenica.mobileffmpeg.Statistics;
|
||||
import com.arthenica.mobileffmpeg.StatisticsCallback;
|
||||
import com.arthenica.mobileffmpeg.util.ExecuteCallback;
|
||||
import com.arthenica.mobileffmpeg.util.DialogUtil;
|
||||
import com.arthenica.mobileffmpeg.util.ResourcesUtil;
|
||||
import com.arthenica.mobileffmpeg.util.SingleExecuteCallback;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import static com.arthenica.mobileffmpeg.FFmpeg.RETURN_CODE_CANCEL;
|
||||
import static com.arthenica.mobileffmpeg.FFmpeg.RETURN_CODE_MULTIPLE_EXECUTIONS_NOT_ALLOWED;
|
||||
import static com.arthenica.mobileffmpeg.FFmpeg.RETURN_CODE_SUCCESS;
|
||||
import static com.arthenica.mobileffmpeg.Config.RETURN_CODE_CANCEL;
|
||||
import static com.arthenica.mobileffmpeg.Config.RETURN_CODE_SUCCESS;
|
||||
import static com.arthenica.mobileffmpeg.test.MainActivity.TAG;
|
||||
|
||||
public class SubtitleTabFragment extends Fragment {
|
||||
@@ -60,54 +60,42 @@ public class SubtitleTabFragment extends Fragment {
|
||||
BURNING
|
||||
}
|
||||
|
||||
private MainActivity mainActivity;
|
||||
private VideoView videoView;
|
||||
private AlertDialog createProgressDialog;
|
||||
private AlertDialog burnProgressDialog;
|
||||
private Statistics statistics;
|
||||
private State state;
|
||||
|
||||
@Override
|
||||
public View onCreateView(@NonNull final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.fragment_subtitle_tab, container, false);
|
||||
public SubtitleTabFragment() {
|
||||
super(R.layout.fragment_subtitle_tab);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
||||
if (getView() != null) {
|
||||
View burnSubtitlesButton = getView().findViewById(R.id.burnSubtitlesButton);
|
||||
burnSubtitlesButton.setOnClickListener(new View.OnClickListener() {
|
||||
View burnSubtitlesButton = view.findViewById(R.id.burnSubtitlesButton);
|
||||
burnSubtitlesButton.setOnClickListener(new View.OnClickListener() {
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
burnSubtitles();
|
||||
}
|
||||
});
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
burnSubtitles();
|
||||
}
|
||||
});
|
||||
|
||||
videoView = getView().findViewById(R.id.videoPlayerFrame);
|
||||
}
|
||||
videoView = view.findViewById(R.id.videoPlayerFrame);
|
||||
|
||||
state = State.IDLE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUserVisibleHint(boolean isVisibleToUser) {
|
||||
super.setUserVisibleHint(isVisibleToUser);
|
||||
if (isVisibleToUser) {
|
||||
setActive();
|
||||
}
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
setActive();
|
||||
}
|
||||
|
||||
public void setMainActivity(MainActivity mainActivity) {
|
||||
this.mainActivity = mainActivity;
|
||||
}
|
||||
|
||||
public static SubtitleTabFragment newInstance(final MainActivity mainActivity) {
|
||||
final SubtitleTabFragment fragment = new SubtitleTabFragment();
|
||||
fragment.setMainActivity(mainActivity);
|
||||
return fragment;
|
||||
public static SubtitleTabFragment newInstance() {
|
||||
return new SubtitleTabFragment();
|
||||
}
|
||||
|
||||
public void enableLogCallback() {
|
||||
@@ -139,9 +127,9 @@ public class SubtitleTabFragment extends Fragment {
|
||||
}
|
||||
|
||||
public void burnSubtitles() {
|
||||
final File image1File = new File(mainActivity.getCacheDir(), "colosseum.jpg");
|
||||
final File image2File = new File(mainActivity.getCacheDir(), "pyramid.jpg");
|
||||
final File image3File = new File(mainActivity.getCacheDir(), "tajmahal.jpg");
|
||||
final File image1File = new File(requireContext().getCacheDir(), "colosseum.jpg");
|
||||
final File image2File = new File(requireContext().getCacheDir(), "pyramid.jpg");
|
||||
final File image3File = new File(requireContext().getCacheDir(), "tajmahal.jpg");
|
||||
final File videoFile = getVideoFile();
|
||||
final File videoWithSubtitlesFile = getVideoWithSubtitlesFile();
|
||||
|
||||
@@ -162,10 +150,10 @@ public class SubtitleTabFragment extends Fragment {
|
||||
|
||||
showCreateProgressDialog();
|
||||
|
||||
mainActivity.resourceToFile(R.drawable.colosseum, image1File);
|
||||
mainActivity.resourceToFile(R.drawable.pyramid, image2File);
|
||||
mainActivity.resourceToFile(R.drawable.tajmahal, image3File);
|
||||
mainActivity.rawResourceToFile(R.raw.subtitle, getSubtitleFile());
|
||||
ResourcesUtil.resourceToFile(getResources(), R.drawable.colosseum, image1File);
|
||||
ResourcesUtil.resourceToFile(getResources(), R.drawable.pyramid, image2File);
|
||||
ResourcesUtil.resourceToFile(getResources(), R.drawable.tajmahal, image3File);
|
||||
ResourcesUtil.rawResourceToFile(getResources(), R.raw.subtitle, getSubtitleFile());
|
||||
|
||||
final String ffmpegCommand = Video.generateEncodeVideoScript(image1File.getAbsolutePath(), image2File.getAbsolutePath(), image3File.getAbsolutePath(), videoFile.getAbsolutePath(), "mpeg4", "");
|
||||
|
||||
@@ -173,16 +161,12 @@ public class SubtitleTabFragment extends Fragment {
|
||||
|
||||
state = State.CREATING;
|
||||
|
||||
MainActivity.executeAsync(new ExecuteCallback() {
|
||||
MainActivity.executeAsync(new SingleExecuteCallback() {
|
||||
|
||||
@Override
|
||||
public void apply(final int returnCode, final String commandOutput) {
|
||||
Log.d(TAG, String.format("FFmpeg process exited with rc %d", returnCode));
|
||||
|
||||
if (returnCode != RETURN_CODE_MULTIPLE_EXECUTIONS_NOT_ALLOWED) {
|
||||
state = State.IDLE;
|
||||
}
|
||||
|
||||
hideCreateProgressDialog();
|
||||
|
||||
MainActivity.addUIAction(new Callable() {
|
||||
@@ -201,16 +185,12 @@ public class SubtitleTabFragment extends Fragment {
|
||||
|
||||
state = State.BURNING;
|
||||
|
||||
MainActivity.executeAsync(new ExecuteCallback() {
|
||||
MainActivity.executeAsync(new SingleExecuteCallback() {
|
||||
|
||||
@Override
|
||||
public void apply(final int returnCode, final String commandOutput) {
|
||||
Log.d(TAG, String.format("FFmpeg process exited with rc %d", returnCode));
|
||||
|
||||
if (returnCode != RETURN_CODE_MULTIPLE_EXECUTIONS_NOT_ALLOWED) {
|
||||
state = State.IDLE;
|
||||
}
|
||||
|
||||
hideBurnProgressDialog();
|
||||
|
||||
MainActivity.addUIAction(new Callable() {
|
||||
@@ -221,13 +201,10 @@ public class SubtitleTabFragment extends Fragment {
|
||||
Log.d(TAG, "Burn subtitles completed successfully; playing video.");
|
||||
playVideo();
|
||||
} else if (returnCode == RETURN_CODE_CANCEL) {
|
||||
Popup.show(mainActivity, "Burn subtitles operation cancelled.");
|
||||
Popup.show(requireContext(), "Burn subtitles operation cancelled.");
|
||||
Log.e(TAG, "Burn subtitles operation cancelled");
|
||||
} else if (returnCode == RETURN_CODE_MULTIPLE_EXECUTIONS_NOT_ALLOWED) {
|
||||
Popup.show(mainActivity, "Multiple burn subtitles operations not allowed.");
|
||||
Log.e(TAG, "Multiple burn subtitles operations not allowed");
|
||||
} else {
|
||||
Popup.show(mainActivity, "Burn subtitles failed. Please check log for the details.");
|
||||
Popup.show(requireContext(), "Burn subtitles failed. Please check log for the details.");
|
||||
Log.e(TAG, String.format("Burn subtitles failed with rc=%d", returnCode));
|
||||
}
|
||||
|
||||
@@ -238,13 +215,10 @@ public class SubtitleTabFragment extends Fragment {
|
||||
}, burnSubtitlesCommand);
|
||||
|
||||
} else if (returnCode == RETURN_CODE_CANCEL) {
|
||||
Popup.show(mainActivity, "Create operation cancelled.");
|
||||
Popup.show(requireContext(), "Create operation cancelled.");
|
||||
Log.e(TAG, "Create operation cancelled");
|
||||
} else if (returnCode == RETURN_CODE_MULTIPLE_EXECUTIONS_NOT_ALLOWED) {
|
||||
Popup.show(mainActivity, "Multiple create operations not allowed.");
|
||||
Log.e(TAG, "Multiple create operations not allowed");
|
||||
} else {
|
||||
Popup.show(mainActivity, "Create video failed. Please check log for the details.");
|
||||
Popup.show(requireContext(), "Create video failed. Please check log for the details.");
|
||||
Log.e(TAG, String.format("Create failed with rc=%d", returnCode));
|
||||
}
|
||||
|
||||
@@ -256,12 +230,12 @@ public class SubtitleTabFragment extends Fragment {
|
||||
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "Burn subtitles failed", e);
|
||||
Popup.show(mainActivity, "Burn subtitles failed");
|
||||
Popup.show(requireContext(), "Burn subtitles failed");
|
||||
}
|
||||
}
|
||||
|
||||
protected void playVideo() {
|
||||
MediaController mediaController = new MediaController(mainActivity);
|
||||
MediaController mediaController = new MediaController(requireContext());
|
||||
mediaController.setAnchorView(videoView);
|
||||
videoView.setVideoURI(Uri.parse("file://" + getVideoWithSubtitlesFile().getAbsolutePath()));
|
||||
videoView.setMediaController(mediaController);
|
||||
@@ -285,22 +259,22 @@ public class SubtitleTabFragment extends Fragment {
|
||||
}
|
||||
|
||||
public File getSubtitleFile() {
|
||||
return new File(mainActivity.getCacheDir(), "subtitle.srt");
|
||||
return new File(requireContext().getCacheDir(), "subtitle.srt");
|
||||
}
|
||||
|
||||
public File getVideoFile() {
|
||||
return new File(mainActivity.getFilesDir(), "video.mp4");
|
||||
return new File(requireContext().getFilesDir(), "video.mp4");
|
||||
}
|
||||
|
||||
public File getVideoWithSubtitlesFile() {
|
||||
return new File(mainActivity.getFilesDir(), "video-with-subtitles.mp4");
|
||||
return new File(requireContext().getFilesDir(), "video-with-subtitles.mp4");
|
||||
}
|
||||
|
||||
public void setActive() {
|
||||
android.util.Log.i(MainActivity.TAG, "Subtitle Tab Activated");
|
||||
Log.i(MainActivity.TAG, "Subtitle Tab Activated");
|
||||
enableLogCallback();
|
||||
enableStatisticsCallback();
|
||||
Popup.show(mainActivity, Tooltip.SUBTITLE_TEST_TOOLTIP_TEXT);
|
||||
Popup.show(requireContext(), Tooltip.SUBTITLE_TEST_TOOLTIP_TEXT);
|
||||
}
|
||||
|
||||
protected void showCreateProgressDialog() {
|
||||
@@ -309,7 +283,7 @@ public class SubtitleTabFragment extends Fragment {
|
||||
statistics = null;
|
||||
Config.resetStatistics();
|
||||
|
||||
createProgressDialog = mainActivity.createCancellableProgressDialog("Creating video", new View.OnClickListener() {
|
||||
createProgressDialog = DialogUtil.createCancellableProgressDialog(requireContext(), "Creating video", new View.OnClickListener() {
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
@@ -353,7 +327,7 @@ public class SubtitleTabFragment extends Fragment {
|
||||
statistics = null;
|
||||
Config.resetStatistics();
|
||||
|
||||
burnProgressDialog = mainActivity.createCancellableProgressDialog("Burning subtitles", new View.OnClickListener() {
|
||||
burnProgressDialog = DialogUtil.createCancellableProgressDialog(requireContext(), "Burning subtitles", new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
FFmpeg.cancel();
|
||||
|
||||
+47
-57
@@ -23,78 +23,68 @@ import android.app.AlertDialog;
|
||||
import android.media.MediaPlayer;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.view.LayoutInflater;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.MediaController;
|
||||
import android.widget.VideoView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.arthenica.mobileffmpeg.Config;
|
||||
import com.arthenica.mobileffmpeg.LogCallback;
|
||||
import com.arthenica.mobileffmpeg.LogMessage;
|
||||
import com.arthenica.mobileffmpeg.util.ExecuteCallback;
|
||||
import com.arthenica.mobileffmpeg.util.DialogUtil;
|
||||
import com.arthenica.mobileffmpeg.util.ResourcesUtil;
|
||||
import com.arthenica.mobileffmpeg.util.SingleExecuteCallback;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import static com.arthenica.mobileffmpeg.FFmpeg.RETURN_CODE_SUCCESS;
|
||||
import static com.arthenica.mobileffmpeg.Config.RETURN_CODE_SUCCESS;
|
||||
import static com.arthenica.mobileffmpeg.test.MainActivity.TAG;
|
||||
|
||||
public class VidStabTabFragment extends Fragment {
|
||||
|
||||
private MainActivity mainActivity;
|
||||
private VideoView videoView;
|
||||
private VideoView stabilizedVideoView;
|
||||
private AlertDialog createProgressDialog;
|
||||
private AlertDialog stabilizeProgressDialog;
|
||||
|
||||
@Override
|
||||
public View onCreateView(@NonNull final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.fragment_vidstab_tab, container, false);
|
||||
public VidStabTabFragment() {
|
||||
super(R.layout.fragment_vidstab_tab);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
||||
if (getView() != null) {
|
||||
View stabilizeVideoButton = getView().findViewById(R.id.stabilizeVideoButton);
|
||||
stabilizeVideoButton.setOnClickListener(new View.OnClickListener() {
|
||||
View stabilizeVideoButton = view.findViewById(R.id.stabilizeVideoButton);
|
||||
stabilizeVideoButton.setOnClickListener(new View.OnClickListener() {
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
stabilizeVideo();
|
||||
}
|
||||
});
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
stabilizeVideo();
|
||||
}
|
||||
});
|
||||
|
||||
videoView = getView().findViewById(R.id.videoPlayerFrame);
|
||||
stabilizedVideoView = getView().findViewById(R.id.stabilizedVideoPlayerFrame);
|
||||
}
|
||||
videoView = view.findViewById(R.id.videoPlayerFrame);
|
||||
stabilizedVideoView = view.findViewById(R.id.stabilizedVideoPlayerFrame);
|
||||
|
||||
createProgressDialog = mainActivity.createProgressDialog("Creating video");
|
||||
stabilizeProgressDialog = mainActivity.createProgressDialog("Stabilizing video");
|
||||
createProgressDialog = DialogUtil.createProgressDialog(requireContext(), "Creating video");
|
||||
stabilizeProgressDialog = DialogUtil.createProgressDialog(requireContext(), "Stabilizing video");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUserVisibleHint(boolean isVisibleToUser) {
|
||||
super.setUserVisibleHint(isVisibleToUser);
|
||||
if (isVisibleToUser) {
|
||||
setActive();
|
||||
}
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
setActive();
|
||||
}
|
||||
|
||||
public void setMainActivity(MainActivity mainActivity) {
|
||||
this.mainActivity = mainActivity;
|
||||
}
|
||||
|
||||
public static VidStabTabFragment newInstance(final MainActivity mainActivity) {
|
||||
final VidStabTabFragment fragment = new VidStabTabFragment();
|
||||
fragment.setMainActivity(mainActivity);
|
||||
return fragment;
|
||||
public static VidStabTabFragment newInstance() {
|
||||
return new VidStabTabFragment();
|
||||
}
|
||||
|
||||
public void enableLogCallback() {
|
||||
@@ -108,9 +98,9 @@ public class VidStabTabFragment extends Fragment {
|
||||
}
|
||||
|
||||
public void stabilizeVideo() {
|
||||
final File image1File = new File(mainActivity.getCacheDir(), "colosseum.jpg");
|
||||
final File image2File = new File(mainActivity.getCacheDir(), "pyramid.jpg");
|
||||
final File image3File = new File(mainActivity.getCacheDir(), "tajmahal.jpg");
|
||||
final File image1File = new File(requireContext().getCacheDir(), "colosseum.jpg");
|
||||
final File image2File = new File(requireContext().getCacheDir(), "pyramid.jpg");
|
||||
final File image3File = new File(requireContext().getCacheDir(), "tajmahal.jpg");
|
||||
final File shakeResultsFile = getShakeResultsFile();
|
||||
final File videoFile = getVideoFile();
|
||||
final File stabilizedVideoFile = getStabilizedVideoFile();
|
||||
@@ -135,15 +125,15 @@ public class VidStabTabFragment extends Fragment {
|
||||
|
||||
showCreateProgressDialog();
|
||||
|
||||
mainActivity.resourceToFile(R.drawable.colosseum, image1File);
|
||||
mainActivity.resourceToFile(R.drawable.pyramid, image2File);
|
||||
mainActivity.resourceToFile(R.drawable.tajmahal, image3File);
|
||||
ResourcesUtil.resourceToFile(getResources(), R.drawable.colosseum, image1File);
|
||||
ResourcesUtil.resourceToFile(getResources(), R.drawable.pyramid, image2File);
|
||||
ResourcesUtil.resourceToFile(getResources(), R.drawable.tajmahal, image3File);
|
||||
|
||||
final String ffmpegCommand = Video.generateShakingVideoScript(image1File.getAbsolutePath(), image2File.getAbsolutePath(), image3File.getAbsolutePath(), videoFile.getAbsolutePath());
|
||||
|
||||
android.util.Log.d(TAG, String.format("FFmpeg process started with arguments\n'%s'", ffmpegCommand));
|
||||
|
||||
MainActivity.executeAsync(new ExecuteCallback() {
|
||||
MainActivity.executeAsync(new SingleExecuteCallback() {
|
||||
|
||||
@Override
|
||||
public void apply(final int returnCode, final String commandOutput) {
|
||||
@@ -165,7 +155,7 @@ public class VidStabTabFragment extends Fragment {
|
||||
|
||||
android.util.Log.d(TAG, String.format("FFmpeg process started with arguments\n'%s'", analyzeVideoCommand));
|
||||
|
||||
MainActivity.executeAsync(new ExecuteCallback() {
|
||||
MainActivity.executeAsync(new SingleExecuteCallback() {
|
||||
|
||||
@Override
|
||||
public void apply(final int returnCode, final String commandOutput) {
|
||||
@@ -176,7 +166,7 @@ public class VidStabTabFragment extends Fragment {
|
||||
|
||||
android.util.Log.d(TAG, String.format("FFmpeg process started with arguments\n'%s'", stabilizeVideoCommand));
|
||||
|
||||
MainActivity.executeAsync(new ExecuteCallback() {
|
||||
MainActivity.executeAsync(new SingleExecuteCallback() {
|
||||
|
||||
@Override
|
||||
public void apply(final int returnCode, final String commandOutput) {
|
||||
@@ -193,7 +183,7 @@ public class VidStabTabFragment extends Fragment {
|
||||
playVideo();
|
||||
playStabilizedVideo();
|
||||
} else {
|
||||
Popup.show(mainActivity, "Stabilize video failed. Please check log for the details.");
|
||||
Popup.show(requireContext(), "Stabilize video failed. Please check log for the details.");
|
||||
android.util.Log.d(TAG, String.format("Stabilize video failed with rc=%d", returnCode));
|
||||
}
|
||||
|
||||
@@ -205,14 +195,14 @@ public class VidStabTabFragment extends Fragment {
|
||||
|
||||
} else {
|
||||
hideStabilizeProgressDialog();
|
||||
Popup.show(mainActivity, "Stabilize video failed. Please check log for the details.");
|
||||
Popup.show(requireContext(), "Stabilize video failed. Please check log for the details.");
|
||||
android.util.Log.d(TAG, String.format("Stabilize video failed with rc=%d", returnCode));
|
||||
}
|
||||
}
|
||||
}, analyzeVideoCommand);
|
||||
|
||||
} else {
|
||||
Popup.show(mainActivity, "Create video failed. Please check log for the details.");
|
||||
Popup.show(requireContext(), "Create video failed. Please check log for the details.");
|
||||
android.util.Log.d(TAG, String.format("Create failed with rc=%d", returnCode));
|
||||
}
|
||||
|
||||
@@ -224,12 +214,12 @@ public class VidStabTabFragment extends Fragment {
|
||||
|
||||
} catch (IOException e) {
|
||||
android.util.Log.e(TAG, "Stabilize video failed", e);
|
||||
Popup.show(mainActivity, "Stabilize video failed");
|
||||
Popup.show(requireContext(), "Stabilize video failed");
|
||||
}
|
||||
}
|
||||
|
||||
protected void playVideo() {
|
||||
MediaController mediaController = new MediaController(mainActivity);
|
||||
MediaController mediaController = new MediaController(requireContext());
|
||||
mediaController.setAnchorView(videoView);
|
||||
videoView.setVideoURI(Uri.parse("file://" + getVideoFile().getAbsolutePath()));
|
||||
videoView.setMediaController(mediaController);
|
||||
@@ -253,7 +243,7 @@ public class VidStabTabFragment extends Fragment {
|
||||
}
|
||||
|
||||
protected void playStabilizedVideo() {
|
||||
MediaController mediaController = new MediaController(mainActivity);
|
||||
MediaController mediaController = new MediaController(requireContext());
|
||||
mediaController.setAnchorView(stabilizedVideoView);
|
||||
stabilizedVideoView.setVideoURI(Uri.parse("file://" + getStabilizedVideoFile().getAbsolutePath()));
|
||||
stabilizedVideoView.setMediaController(mediaController);
|
||||
@@ -277,21 +267,21 @@ public class VidStabTabFragment extends Fragment {
|
||||
}
|
||||
|
||||
public File getShakeResultsFile() {
|
||||
return new File(mainActivity.getCacheDir(), "transforms.trf");
|
||||
return new File(requireContext().getCacheDir(), "transforms.trf");
|
||||
}
|
||||
|
||||
public File getVideoFile() {
|
||||
return new File(mainActivity.getFilesDir(), "video.mp4");
|
||||
return new File(requireContext().getFilesDir(), "video.mp4");
|
||||
}
|
||||
|
||||
public File getStabilizedVideoFile() {
|
||||
return new File(mainActivity.getFilesDir(), "video-stabilized.mp4");
|
||||
return new File(requireContext().getFilesDir(), "video-stabilized.mp4");
|
||||
}
|
||||
|
||||
public void setActive() {
|
||||
android.util.Log.i(MainActivity.TAG, "VidStab Tab Activated");
|
||||
Log.i(MainActivity.TAG, "VidStab Tab Activated");
|
||||
enableLogCallback();
|
||||
Popup.show(mainActivity, Tooltip.VIDSTAB_TEST_TOOLTIP_TEXT);
|
||||
Popup.show(requireContext(), Tooltip.VIDSTAB_TEST_TOOLTIP_TEXT);
|
||||
}
|
||||
|
||||
protected void showCreateProgressDialog() {
|
||||
|
||||
+52
-63
@@ -23,14 +23,9 @@ import android.app.AlertDialog;
|
||||
import android.media.MediaPlayer;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.util.AndroidRuntimeException;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.MediaController;
|
||||
@@ -38,83 +33,77 @@ import android.widget.Spinner;
|
||||
import android.widget.TextView;
|
||||
import android.widget.VideoView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.arthenica.mobileffmpeg.Config;
|
||||
import com.arthenica.mobileffmpeg.FFmpeg;
|
||||
import com.arthenica.mobileffmpeg.LogCallback;
|
||||
import com.arthenica.mobileffmpeg.LogMessage;
|
||||
import com.arthenica.mobileffmpeg.Statistics;
|
||||
import com.arthenica.mobileffmpeg.StatisticsCallback;
|
||||
import com.arthenica.mobileffmpeg.util.ExecuteCallback;
|
||||
import com.arthenica.mobileffmpeg.util.DialogUtil;
|
||||
import com.arthenica.mobileffmpeg.util.ResourcesUtil;
|
||||
import com.arthenica.mobileffmpeg.util.SingleExecuteCallback;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import static com.arthenica.mobileffmpeg.FFmpeg.RETURN_CODE_SUCCESS;
|
||||
import static com.arthenica.mobileffmpeg.Config.RETURN_CODE_SUCCESS;
|
||||
import static com.arthenica.mobileffmpeg.test.MainActivity.TAG;
|
||||
|
||||
public class VideoTabFragment extends Fragment implements AdapterView.OnItemSelectedListener {
|
||||
|
||||
private MainActivity mainActivity;
|
||||
private VideoView videoView;
|
||||
private AlertDialog progressDialog;
|
||||
private String selectedCodec;
|
||||
private Statistics statistics;
|
||||
|
||||
@Override
|
||||
public View onCreateView(@NonNull final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.fragment_video_tab, container, false);
|
||||
public VideoTabFragment() {
|
||||
super(R.layout.fragment_video_tab);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
||||
if (getView() != null) {
|
||||
Spinner videoCodecSpinner = getView().findViewById(R.id.videoCodecSpinner);
|
||||
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(mainActivity,
|
||||
R.array.video_codec, R.layout.spinner_item);
|
||||
adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
|
||||
videoCodecSpinner.setAdapter(adapter);
|
||||
videoCodecSpinner.setOnItemSelectedListener(this);
|
||||
Spinner videoCodecSpinner = view.findViewById(R.id.videoCodecSpinner);
|
||||
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(requireContext(),
|
||||
R.array.video_codec, R.layout.spinner_item);
|
||||
adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
|
||||
videoCodecSpinner.setAdapter(adapter);
|
||||
videoCodecSpinner.setOnItemSelectedListener(this);
|
||||
|
||||
View encodeButton = getView().findViewById(R.id.encodeButton);
|
||||
if (encodeButton != null) {
|
||||
encodeButton.setOnClickListener(new View.OnClickListener() {
|
||||
View encodeButton = view.findViewById(R.id.encodeButton);
|
||||
if (encodeButton != null) {
|
||||
encodeButton.setOnClickListener(new View.OnClickListener() {
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
encodeVideo();
|
||||
// encodeWebp();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
videoView = getView().findViewById(R.id.videoPlayerFrame);
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
encodeVideo();
|
||||
// encodeWebp();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
progressDialog = mainActivity.createProgressDialog("Encoding video");
|
||||
videoView = view.findViewById(R.id.videoPlayerFrame);
|
||||
|
||||
progressDialog = DialogUtil.createProgressDialog(requireContext(), "Encoding video");
|
||||
|
||||
selectedCodec = getResources().getStringArray(R.array.video_codec)[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUserVisibleHint(boolean isVisibleToUser) {
|
||||
super.setUserVisibleHint(isVisibleToUser);
|
||||
if (isVisibleToUser) {
|
||||
setActive();
|
||||
}
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
setActive();
|
||||
}
|
||||
|
||||
public void setMainActivity(MainActivity mainActivity) {
|
||||
this.mainActivity = mainActivity;
|
||||
}
|
||||
|
||||
public static VideoTabFragment newInstance(final MainActivity mainActivity) {
|
||||
final VideoTabFragment fragment = new VideoTabFragment();
|
||||
fragment.setMainActivity(mainActivity);
|
||||
return fragment;
|
||||
public static VideoTabFragment newInstance() {
|
||||
return new VideoTabFragment();
|
||||
}
|
||||
|
||||
public void enableLogCallback() {
|
||||
@@ -158,9 +147,9 @@ public class VideoTabFragment extends Fragment implements AdapterView.OnItemSele
|
||||
}
|
||||
|
||||
public void encodeVideo() {
|
||||
final File image1File = new File(mainActivity.getCacheDir(), "colosseum.jpg");
|
||||
final File image2File = new File(mainActivity.getCacheDir(), "pyramid.jpg");
|
||||
final File image3File = new File(mainActivity.getCacheDir(), "tajmahal.jpg");
|
||||
final File image1File = new File(requireContext().getCacheDir(), "colosseum.jpg");
|
||||
final File image2File = new File(requireContext().getCacheDir(), "pyramid.jpg");
|
||||
final File image3File = new File(requireContext().getCacheDir(), "tajmahal.jpg");
|
||||
final File videoFile = getVideoFile();
|
||||
|
||||
try {
|
||||
@@ -178,15 +167,15 @@ public class VideoTabFragment extends Fragment implements AdapterView.OnItemSele
|
||||
|
||||
showProgressDialog();
|
||||
|
||||
mainActivity.resourceToFile(R.drawable.colosseum, image1File);
|
||||
mainActivity.resourceToFile(R.drawable.pyramid, image2File);
|
||||
mainActivity.resourceToFile(R.drawable.tajmahal, image3File);
|
||||
ResourcesUtil.resourceToFile(getResources(), R.drawable.colosseum, image1File);
|
||||
ResourcesUtil.resourceToFile(getResources(), R.drawable.pyramid, image2File);
|
||||
ResourcesUtil.resourceToFile(getResources(), R.drawable.tajmahal, image3File);
|
||||
|
||||
final String ffmpegCommand = Video.generateEncodeVideoScript(image1File.getAbsolutePath(), image2File.getAbsolutePath(), image3File.getAbsolutePath(), videoFile.getAbsolutePath(), getSelectedVideoCodec(), getCustomOptions());
|
||||
|
||||
Log.d(TAG, String.format("FFmpeg process started with arguments\n'%s'", ffmpegCommand));
|
||||
|
||||
MainActivity.executeAsync(new ExecuteCallback() {
|
||||
MainActivity.executeAsync(new SingleExecuteCallback() {
|
||||
|
||||
@Override
|
||||
public void apply(final int returnCode, final String commandOutput) {
|
||||
@@ -194,7 +183,7 @@ public class VideoTabFragment extends Fragment implements AdapterView.OnItemSele
|
||||
|
||||
Log.d(TAG, "FFmpeg process output:");
|
||||
|
||||
FFmpeg.printLastCommandOutput(Log.INFO);
|
||||
Config.printLastCommandOutput(Log.INFO);
|
||||
|
||||
hideProgressDialog();
|
||||
|
||||
@@ -206,7 +195,7 @@ public class VideoTabFragment extends Fragment implements AdapterView.OnItemSele
|
||||
Log.d(TAG, "Encode completed successfully; playing video.");
|
||||
playVideo();
|
||||
} else {
|
||||
Popup.show(mainActivity, "Encode failed. Please check log for the details.");
|
||||
Popup.show(requireContext(), "Encode failed. Please check log for the details.");
|
||||
Log.d(TAG, String.format("Encode failed with rc=%d", returnCode));
|
||||
}
|
||||
|
||||
@@ -218,16 +207,16 @@ public class VideoTabFragment extends Fragment implements AdapterView.OnItemSele
|
||||
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "Encode video failed", e);
|
||||
Popup.show(mainActivity, "Encode video failed");
|
||||
Popup.show(requireContext(), "Encode video failed");
|
||||
}
|
||||
}
|
||||
|
||||
protected void encodeWebp() {
|
||||
final File imageFile = new File(mainActivity.getCacheDir(), "colosseum.jpg");
|
||||
final File outputFile = new File(mainActivity.getFilesDir(), "video.webp");
|
||||
final File imageFile = new File(requireContext().getCacheDir(), "colosseum.jpg");
|
||||
final File outputFile = new File(requireContext().getFilesDir(), "video.webp");
|
||||
|
||||
try {
|
||||
mainActivity.resourceToFile(R.drawable.colosseum, imageFile);
|
||||
ResourcesUtil.resourceToFile(getResources(), R.drawable.colosseum, imageFile);
|
||||
|
||||
Log.d(TAG, "Testing VIDEO encoding with 'webp' codec");
|
||||
|
||||
@@ -240,12 +229,12 @@ public class VideoTabFragment extends Fragment implements AdapterView.OnItemSele
|
||||
Log.d(TAG, String.format("FFmpeg process exited with rc %d", returnCode));
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "Encode webp failed", e);
|
||||
Popup.show(mainActivity, "Encode webp failed");
|
||||
Popup.show(requireContext(), "Encode webp failed");
|
||||
}
|
||||
}
|
||||
|
||||
protected void playVideo() {
|
||||
MediaController mediaController = new MediaController(mainActivity);
|
||||
MediaController mediaController = new MediaController(requireContext());
|
||||
mediaController.setAnchorView(videoView);
|
||||
videoView.setVideoURI(Uri.parse("file://" + getVideoFile().getAbsolutePath()));
|
||||
videoView.setMediaController(mediaController);
|
||||
@@ -331,7 +320,7 @@ public class VideoTabFragment extends Fragment implements AdapterView.OnItemSele
|
||||
}
|
||||
|
||||
final String video = "video." + extension;
|
||||
return new File(mainActivity.getFilesDir(), video);
|
||||
return new File(requireContext().getFilesDir(), video);
|
||||
}
|
||||
|
||||
public String getCustomOptions() {
|
||||
@@ -358,10 +347,10 @@ public class VideoTabFragment extends Fragment implements AdapterView.OnItemSele
|
||||
}
|
||||
|
||||
public void setActive() {
|
||||
android.util.Log.i(MainActivity.TAG, "Video Tab Activated");
|
||||
Log.i(MainActivity.TAG, "Video Tab Activated");
|
||||
enableLogCallback();
|
||||
enableStatisticsCallback();
|
||||
Popup.show(mainActivity, Tooltip.VIDEO_TEST_TOOLTIP_TEXT);
|
||||
Popup.show(requireContext(), Tooltip.VIDEO_TEST_TOOLTIP_TEXT);
|
||||
}
|
||||
|
||||
protected void showProgressDialog() {
|
||||
@@ -398,7 +387,7 @@ public class VideoTabFragment extends Fragment implements AdapterView.OnItemSele
|
||||
|
||||
@Override
|
||||
public Object call() {
|
||||
VideoTabFragment.this.progressDialog = mainActivity.createProgressDialog("Encoding video");
|
||||
VideoTabFragment.this.progressDialog = DialogUtil.createProgressDialog(requireContext(), "Encoding video");
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* Copyright (c) 2019 Alexander Berezhnoi
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
package com.arthenica.mobileffmpeg.util;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.content.Context;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.arthenica.mobileffmpeg.test.R;
|
||||
|
||||
public class DialogUtil {
|
||||
|
||||
public static AlertDialog createProgressDialog(Context context, final String text) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(context);
|
||||
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
if (inflater != null) {
|
||||
View dialogView = inflater.inflate(R.layout.progress_dialog_layout, null);
|
||||
builder.setView(dialogView);
|
||||
|
||||
TextView textView = dialogView.findViewById(R.id.progressDialogText);
|
||||
if (textView != null) {
|
||||
textView.setText(text);
|
||||
}
|
||||
}
|
||||
builder.setCancelable(false);
|
||||
return builder.create();
|
||||
}
|
||||
|
||||
public static AlertDialog createCancellableProgressDialog(Context context, final String text, final View.OnClickListener onClickListener) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(context);
|
||||
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
if (inflater != null) {
|
||||
View dialogView = inflater.inflate(R.layout.cancellable_progress_dialog_layout, null);
|
||||
builder.setView(dialogView);
|
||||
|
||||
TextView textView = dialogView.findViewById(R.id.progressDialogText);
|
||||
if (textView != null) {
|
||||
textView.setText(text);
|
||||
}
|
||||
Button cancelButton = dialogView.findViewById(R.id.cancelButton);
|
||||
if (cancelButton != null) {
|
||||
cancelButton.setOnClickListener(onClickListener);
|
||||
}
|
||||
}
|
||||
builder.setCancelable(false);
|
||||
return builder.create();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
* Copyright (c) 2019 Alexander Berezhnoi
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
package com.arthenica.mobileffmpeg.util;
|
||||
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.util.Log;
|
||||
|
||||
import com.arthenica.mobileffmpeg.test.MainActivity;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
public class ResourcesUtil {
|
||||
public static void resourceToFile(Resources resources, final int resourceId, final File file) throws IOException {
|
||||
Bitmap bitmap = BitmapFactory.decodeResource(resources, resourceId);
|
||||
|
||||
if (file.exists()) {
|
||||
file.delete();
|
||||
}
|
||||
|
||||
FileOutputStream outputStream = new FileOutputStream(file);
|
||||
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
|
||||
outputStream.flush();
|
||||
outputStream.close();
|
||||
}
|
||||
|
||||
public static void rawResourceToFile(Resources resources, final int resourceId, final File file) throws IOException {
|
||||
final InputStream inputStream = resources.openRawResource(resourceId);
|
||||
if (file.exists()) {
|
||||
file.delete();
|
||||
}
|
||||
final FileOutputStream outputStream = new FileOutputStream(file);
|
||||
|
||||
try {
|
||||
final byte[] buffer = new byte[1024];
|
||||
int readSize;
|
||||
|
||||
while ((readSize = inputStream.read(buffer)) > 0) {
|
||||
outputStream.write(buffer, 0, readSize);
|
||||
}
|
||||
} catch (final IOException e) {
|
||||
Log.e(MainActivity.TAG, "Saving raw resource failed.", e);
|
||||
} finally {
|
||||
inputStream.close();
|
||||
outputStream.flush();
|
||||
outputStream.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="top"
|
||||
android:orientation="vertical">
|
||||
|
||||
<android.support.v7.widget.AppCompatTextView
|
||||
android:id="@+id/header"
|
||||
style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="40dp"
|
||||
android:layout_gravity="center"
|
||||
android:gravity="center"
|
||||
android:text="@string/app_name"
|
||||
android:textAlignment="center"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat"
|
||||
android:textColor="@android:color/white"
|
||||
android:textStyle="bold"
|
||||
app:fontFamily="sans-serif" />
|
||||
|
||||
</LinearLayout>
|
||||
@@ -1,33 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
<androidx.viewpager.widget.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/pager"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:minHeight="207dp"
|
||||
tools:context="com.arthenica.mobileffmpeg.test.MainActivity"
|
||||
tools:layout_editor_absoluteY="81dp">
|
||||
tools:context="com.arthenica.mobileffmpeg.test.MainActivity">
|
||||
|
||||
<android.support.v4.view.ViewPager
|
||||
android:id="@+id/pager"
|
||||
android:layout_width="0dp"
|
||||
<androidx.viewpager.widget.PagerTabStrip
|
||||
android:id="@+id/pagerTabStrip"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginStart="8dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent">
|
||||
android:layout_gravity="top"/>
|
||||
|
||||
<android.support.v4.view.PagerTabStrip
|
||||
android:id="@+id/pagerTabStrip"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:layout_gravity="top"
|
||||
android:layout_marginBottom="30dp"
|
||||
android:layout_marginTop="0dp"
|
||||
android:padding="0dp" />
|
||||
|
||||
</android.support.v4.view.ViewPager>
|
||||
|
||||
</android.support.constraint.ConstraintLayout>
|
||||
</androidx.viewpager.widget.ViewPager>
|
||||
@@ -22,15 +22,15 @@
|
||||
tools:targetApi="cupcake" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/runButton"
|
||||
android:layout_width="80dp"
|
||||
android:id="@+id/runFFmpegButton"
|
||||
android:layout_width="140dp"
|
||||
android:layout_height="36dp"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:background="@drawable/rounded_button"
|
||||
android:fontFamily="sans-serif"
|
||||
android:gravity="center"
|
||||
android:text="@string/command_run_button_text"
|
||||
android:text="@string/command_run_ffmpeg_button_text"
|
||||
android:textAlignment="center"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="16sp"
|
||||
@@ -38,15 +38,15 @@
|
||||
tools:targetApi="jelly_bean" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/runAsyncButton"
|
||||
android:id="@+id/runFFprobeButton"
|
||||
android:layout_width="140dp"
|
||||
android:layout_height="36dp"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:background="@drawable/rounded_button"
|
||||
android:fontFamily="sans-serif"
|
||||
android:gravity="center"
|
||||
android:text="@string/command_run_async_button_text"
|
||||
android:text="@string/command_run_ffprobe_button_text"
|
||||
android:textAlignment="center"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="16sp"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="headerColor">#e74c3c</color>
|
||||
<color name="headerColorDark">#DD4232</color>
|
||||
<color name="editColor">#3498db</color>
|
||||
<color name="navigationColor">#e67e22</color>
|
||||
</resources>
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
<string name="vidstab_tab">VID.STAB</string>
|
||||
<string name="pipe_tab">PIPE</string>
|
||||
<string name="command_text_input_placeholder">Enter command</string>
|
||||
<string name="command_run_async_button_text">RUN ASYNC</string>
|
||||
<string name="command_run_button_text">RUN</string>
|
||||
<string name="command_run_ffmpeg_button_text">RUN FFMPEG</string>
|
||||
<string name="command_run_ffprobe_button_text">RUN FFPROBE</string>
|
||||
<string name="video_encode_button_text">ENCODE</string>
|
||||
<string name="video_create_button_text">CREATE</string>
|
||||
<string name="https_get_info_button_text">GET INFO</string>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<!-- Base application theme. -->
|
||||
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
|
||||
<item name="colorPrimary">@color/headerColor</item>
|
||||
<item name="colorPrimaryDark">@color/headerColor</item>
|
||||
<item name="colorPrimaryDark">@color/headerColorDark</item>
|
||||
<item name="colorAccent">@color/editColor</item>
|
||||
</style>
|
||||
|
||||
|
||||
@@ -913,20 +913,20 @@ download_gpl_library_source() {
|
||||
GPL_LIB_DEST_DIR="libvidstab"
|
||||
;;
|
||||
x264)
|
||||
GPL_LIB_URL="ftp://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20191024-2245-stable.tar.bz2"
|
||||
GPL_LIB_FILE="x264-snapshot-20191024-2245-stable.tar.bz2"
|
||||
GPL_LIB_ORIG_DIR="x264-snapshot-20191024-2245-stable"
|
||||
GPL_LIB_URL="https://code.videolan.org/videolan/x264/-/archive/1771b556ee45207f8711744ccbd5d42a3949b14c/x264-1771b556ee45207f8711744ccbd5d42a3949b14c.tar.bz2"
|
||||
GPL_LIB_FILE="x264-1771b556ee45207f8711744ccbd5d42a3949b14c.tar.bz2"
|
||||
GPL_LIB_ORIG_DIR="x264-1771b556ee45207f8711744ccbd5d42a3949b14c"
|
||||
GPL_LIB_DEST_DIR="x264"
|
||||
;;
|
||||
x265)
|
||||
GPL_LIB_URL="https://bitbucket.org/multicoreware/x265/downloads/x265_3.2.tar.gz"
|
||||
GPL_LIB_FILE="x265-3.2.tar.gz"
|
||||
GPL_LIB_ORIG_DIR="x265_3.2"
|
||||
GPL_LIB_URL="https://bitbucket.org/multicoreware/x265/downloads/x265_3.2.1.tar.gz"
|
||||
GPL_LIB_FILE="x265-3.2.1.tar.gz"
|
||||
GPL_LIB_ORIG_DIR="x265_3.2.1"
|
||||
GPL_LIB_DEST_DIR="x265"
|
||||
;;
|
||||
xvidcore)
|
||||
GPL_LIB_URL="https://downloads.xvid.com/downloads/xvidcore-1.3.5.tar.gz"
|
||||
GPL_LIB_FILE="xvidcore-1.3.5.tar.gz"
|
||||
GPL_LIB_URL="https://downloads.xvid.com/downloads/xvidcore-1.3.7.tar.gz"
|
||||
GPL_LIB_FILE="xvidcore-1.3.7.tar.gz"
|
||||
GPL_LIB_ORIG_DIR="xvidcore"
|
||||
GPL_LIB_DEST_DIR="xvidcore"
|
||||
;;
|
||||
|
||||
@@ -336,6 +336,10 @@ export LDFLAGS="${LDFLAGS}"
|
||||
# USE HIGHER LIMITS FOR FFMPEG LINKING
|
||||
ulimit -n 2048 1>>${BASEDIR}/build.log 2>&1
|
||||
|
||||
# Workaround for issue #328
|
||||
rm -f ${BASEDIR}/src/${LIB_NAME}/libswscale/aarch64/hscale.S 1>>${BASEDIR}/build.log 2>&1
|
||||
cp ${BASEDIR}/tools/make/ffmpeg/libswscale/aarch64/hscale.S ${BASEDIR}/src/${LIB_NAME}/libswscale/aarch64/hscale.S 1>>${BASEDIR}/build.log 2>&1
|
||||
|
||||
./configure \
|
||||
--cross-prefix="${TARGET_HOST}-" \
|
||||
--sysroot="${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${TOOLCHAIN}/sysroot" \
|
||||
|
||||
@@ -88,6 +88,6 @@ fi
|
||||
make -j$(get_cpu_count) || exit 1
|
||||
|
||||
# CREATE PACKAGE CONFIG MANUALLY
|
||||
create_gnutls_package_config "3.6.10"
|
||||
create_gnutls_package_config "3.6.11.1"
|
||||
|
||||
make install || exit 1
|
||||
|
||||
@@ -43,7 +43,7 @@ ${SED_INLINE} 's/\-mno-ieee-fp//g' ${BASEDIR}/src/${LIB_NAME}/configure.ac
|
||||
# ALWAYS RECONFIGURE
|
||||
autoreconf_library ${LIB_NAME}
|
||||
|
||||
./configure \
|
||||
PKG_CONFIG= ./configure \
|
||||
--prefix=${BASEDIR}/prebuilt/android-$(get_target_build)/${LIB_NAME} \
|
||||
--with-pic \
|
||||
--with-sysroot=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${TOOLCHAIN}/sysroot \
|
||||
|
||||
@@ -32,6 +32,10 @@ export CFLAGS="$(get_cflags ${LIB_NAME}) -I${ANDROID_NDK_ROOT}/sources/android/c
|
||||
export CXXFLAGS=$(get_cxxflags ${LIB_NAME})
|
||||
export LDFLAGS="$(get_ldflags ${LIB_NAME}) -L${ANDROID_NDK_ROOT}/sources/android/cpufeatures -lcpufeatures"
|
||||
|
||||
# RECOVER configure.sh
|
||||
rm -f ${BASEDIR}/src/${LIB_NAME}/build/make/configure.sh
|
||||
cp ${BASEDIR}/tools/make/configure.libvpx.android.sh ${BASEDIR}/src/${LIB_NAME}/build/make/configure.sh
|
||||
|
||||
TARGET_CPU=""
|
||||
DISABLE_NEON_FLAG=""
|
||||
case ${ARCH} in
|
||||
|
||||
@@ -102,6 +102,6 @@ cmake -Wno-dev \
|
||||
make -j$(get_cpu_count) || exit 1
|
||||
|
||||
# CREATE PACKAGE CONFIG MANUALLY
|
||||
create_libwebp_package_config "1.0.3"
|
||||
create_libwebp_package_config "1.1.0"
|
||||
|
||||
make install || exit 1
|
||||
|
||||
@@ -65,6 +65,6 @@ autoreconf_library ${LIB_NAME}
|
||||
make -j$(get_cpu_count) || exit 1
|
||||
|
||||
# CREATE PACKAGE CONFIG MANUALLY
|
||||
create_libxml2_package_config "2.9.9"
|
||||
create_libxml2_package_config "2.9.10"
|
||||
|
||||
make install || exit 1
|
||||
|
||||
@@ -65,6 +65,9 @@ fi
|
||||
mkdir cmake-build || exit 1
|
||||
cd cmake-build || exit 1
|
||||
|
||||
# FIX static_assert ERRORS
|
||||
${SED_INLINE} 's/gnu++98/c++11/g' ${BASEDIR}/src/${LIB_NAME}/source/CMakeLists.txt
|
||||
|
||||
cmake -Wno-dev \
|
||||
-DCMAKE_VERBOSE_MAKEFILE=0 \
|
||||
-DCMAKE_C_FLAGS="${CFLAGS}" \
|
||||
@@ -91,6 +94,6 @@ cmake -Wno-dev \
|
||||
make -j$(get_cpu_count) || exit 1
|
||||
|
||||
# CREATE PACKAGE CONFIG MANUALLY
|
||||
create_x265_package_config "3.2"
|
||||
create_x265_package_config "3.2.1"
|
||||
|
||||
make install || exit 1
|
||||
|
||||
@@ -60,7 +60,7 @@ esac
|
||||
make -j$(get_cpu_count) || exit 1
|
||||
|
||||
# CREATE PACKAGE CONFIG MANUALLY
|
||||
create_xvidcore_package_config "1.3.5"
|
||||
create_xvidcore_package_config "1.3.6"
|
||||
|
||||
make install || exit 1
|
||||
|
||||
|
||||
+84
-79
@@ -25,47 +25,47 @@ get_library_name() {
|
||||
4) echo "gnutls" ;;
|
||||
5) echo "lame" ;;
|
||||
6) echo "libass" ;;
|
||||
7) echo "libiconv" ;;
|
||||
8) echo "libtheora" ;;
|
||||
9) echo "libvorbis" ;;
|
||||
10) echo "libvpx" ;;
|
||||
11) echo "libwebp" ;;
|
||||
12) echo "libxml2" ;;
|
||||
13) echo "opencore-amr" ;;
|
||||
14) echo "shine" ;;
|
||||
15) echo "speex" ;;
|
||||
16) echo "wavpack" ;;
|
||||
17) echo "kvazaar" ;;
|
||||
18) echo "x264" ;;
|
||||
19) echo "xvidcore" ;;
|
||||
20) echo "x265" ;;
|
||||
21) echo "libvidstab" ;;
|
||||
22) echo "libilbc" ;;
|
||||
23) echo "opus" ;;
|
||||
24) echo "snappy" ;;
|
||||
25) echo "soxr" ;;
|
||||
26) echo "libaom" ;;
|
||||
27) echo "chromaprint" ;;
|
||||
28) echo "twolame" ;;
|
||||
29) echo "sdl" ;;
|
||||
30) echo "tesseract" ;;
|
||||
31) echo "openh264" ;;
|
||||
32) echo "giflib" ;;
|
||||
33) echo "jpeg" ;;
|
||||
34) echo "libogg" ;;
|
||||
35) echo "libpng" ;;
|
||||
36) echo "libuuid" ;;
|
||||
37) echo "nettle" ;;
|
||||
38) echo "tiff" ;;
|
||||
39) echo "expat" ;;
|
||||
40) echo "libsndfile" ;;
|
||||
41) echo "leptonica" ;;
|
||||
42) echo "ios-zlib" ;;
|
||||
43) echo "ios-audiotoolbox" ;;
|
||||
44) echo "ios-coreimage" ;;
|
||||
45) echo "ios-bzip2" ;;
|
||||
46) echo "ios-videotoolbox" ;;
|
||||
47) echo "ios-avfoundation" ;;
|
||||
7) echo "libtheora" ;;
|
||||
8) echo "libvorbis" ;;
|
||||
9) echo "libvpx" ;;
|
||||
10) echo "libwebp" ;;
|
||||
11) echo "libxml2" ;;
|
||||
12) echo "opencore-amr" ;;
|
||||
13) echo "shine" ;;
|
||||
14) echo "speex" ;;
|
||||
15) echo "wavpack" ;;
|
||||
16) echo "kvazaar" ;;
|
||||
17) echo "x264" ;;
|
||||
18) echo "xvidcore" ;;
|
||||
19) echo "x265" ;;
|
||||
20) echo "libvidstab" ;;
|
||||
21) echo "libilbc" ;;
|
||||
22) echo "opus" ;;
|
||||
23) echo "snappy" ;;
|
||||
24) echo "soxr" ;;
|
||||
25) echo "libaom" ;;
|
||||
26) echo "chromaprint" ;;
|
||||
27) echo "twolame" ;;
|
||||
28) echo "sdl" ;;
|
||||
29) echo "tesseract" ;;
|
||||
30) echo "openh264" ;;
|
||||
31) echo "giflib" ;;
|
||||
32) echo "jpeg" ;;
|
||||
33) echo "libogg" ;;
|
||||
34) echo "libpng" ;;
|
||||
35) echo "libuuid" ;;
|
||||
36) echo "nettle" ;;
|
||||
37) echo "tiff" ;;
|
||||
38) echo "expat" ;;
|
||||
39) echo "libsndfile" ;;
|
||||
40) echo "leptonica" ;;
|
||||
41) echo "ios-zlib" ;;
|
||||
42) echo "ios-audiotoolbox" ;;
|
||||
43) echo "ios-coreimage" ;;
|
||||
44) echo "ios-bzip2" ;;
|
||||
45) echo "ios-videotoolbox" ;;
|
||||
46) echo "ios-avfoundation" ;;
|
||||
47) echo "ios-libiconv" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
@@ -73,21 +73,21 @@ get_package_config_file_name() {
|
||||
case $1 in
|
||||
1) echo "freetype2" ;;
|
||||
5) echo "libmp3lame" ;;
|
||||
8) echo "theora" ;;
|
||||
9) echo "vorbis" ;;
|
||||
10) echo "vpx" ;;
|
||||
12) echo "libxml-2.0" ;;
|
||||
13) echo "opencore-amrnb" ;;
|
||||
21) echo "vidstab" ;;
|
||||
26) echo "aom" ;;
|
||||
27) echo "libchromaprint" ;;
|
||||
29) echo "sdl2" ;;
|
||||
33) echo "libjpeg" ;;
|
||||
34) echo "ogg" ;;
|
||||
36) echo "uuid" ;;
|
||||
38) echo "libtiff-4" ;;
|
||||
40) echo "sndfile" ;;
|
||||
41) echo "lept" ;;
|
||||
7) echo "theora" ;;
|
||||
8) echo "vorbis" ;;
|
||||
9) echo "vpx" ;;
|
||||
11) echo "libxml-2.0" ;;
|
||||
12) echo "opencore-amrnb" ;;
|
||||
20) echo "vidstab" ;;
|
||||
25) echo "aom" ;;
|
||||
26) echo "libchromaprint" ;;
|
||||
28) echo "sdl2" ;;
|
||||
32) echo "libjpeg" ;;
|
||||
33) echo "ogg" ;;
|
||||
35) echo "uuid" ;;
|
||||
37) echo "libtiff-4" ;;
|
||||
39) echo "sndfile" ;;
|
||||
40) echo "lept" ;;
|
||||
*) echo $(get_library_name $1)
|
||||
esac
|
||||
}
|
||||
@@ -100,20 +100,20 @@ 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 "libtwolame.a" ;;
|
||||
29) echo "libSDL2.a" ;;
|
||||
30) echo "libtesseract.a" ;;
|
||||
32) echo "libgif.a" ;;
|
||||
34) echo "libogg.a" ;;
|
||||
35) echo "libpng.a" ;;
|
||||
36) echo "libuuid.a" ;;
|
||||
40) echo "libsndfile.a" ;;
|
||||
41) echo "liblept.a" ;;
|
||||
9) echo "libvpx.a" ;;
|
||||
11) echo "libxml2.a" ;;
|
||||
20) echo "libvidstab.a" ;;
|
||||
21) echo "libilbc.a" ;;
|
||||
25) echo "libaom.a" ;;
|
||||
27) echo "libtwolame.a" ;;
|
||||
28) echo "libSDL2.a" ;;
|
||||
29) echo "libtesseract.a" ;;
|
||||
31) echo "libgif.a" ;;
|
||||
33) echo "libogg.a" ;;
|
||||
34) echo "libpng.a" ;;
|
||||
35) echo "libuuid.a" ;;
|
||||
39) echo "libsndfile.a" ;;
|
||||
40) echo "liblept.a" ;;
|
||||
*) echo lib$(get_library_name $1).a
|
||||
esac
|
||||
}
|
||||
@@ -615,10 +615,10 @@ EOF
|
||||
}
|
||||
|
||||
create_libiconv_package_config() {
|
||||
local LIB_ICONV_VERSION="$1"
|
||||
local LIB_ICONV_VERSION=$(grep '_LIBICONV_VERSION' ${SDK_PATH}/usr/include/iconv.h | grep -Eo '0x.*' | grep -Eo '.* ')
|
||||
|
||||
cat > "${INSTALL_PKG_CONFIG_DIR}/libiconv.pc" << EOF
|
||||
prefix=${BASEDIR}/prebuilt/$(get_target_build_directory)/libiconv
|
||||
prefix=${SDK_PATH}/usr
|
||||
exec_prefix=\${prefix}
|
||||
libdir=\${exec_prefix}/lib
|
||||
includedir=\${prefix}/include
|
||||
@@ -923,20 +923,20 @@ download_gpl_library_source() {
|
||||
GPL_LIB_DEST_DIR="libvidstab"
|
||||
;;
|
||||
x264)
|
||||
GPL_LIB_URL="ftp://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20191024-2245-stable.tar.bz2"
|
||||
GPL_LIB_FILE="x264-snapshot-20191024-2245-stable.tar.bz2"
|
||||
GPL_LIB_ORIG_DIR="x264-snapshot-20191024-2245-stable"
|
||||
GPL_LIB_URL="https://code.videolan.org/videolan/x264/-/archive/1771b556ee45207f8711744ccbd5d42a3949b14c/x264-1771b556ee45207f8711744ccbd5d42a3949b14c.tar.bz2"
|
||||
GPL_LIB_FILE="x264-1771b556ee45207f8711744ccbd5d42a3949b14c.tar.bz2"
|
||||
GPL_LIB_ORIG_DIR="x264-1771b556ee45207f8711744ccbd5d42a3949b14c"
|
||||
GPL_LIB_DEST_DIR="x264"
|
||||
;;
|
||||
x265)
|
||||
GPL_LIB_URL="https://bitbucket.org/multicoreware/x265/downloads/x265_3.2.tar.gz"
|
||||
GPL_LIB_URL="https://bitbucket.org/multicoreware/x265/downloads/x265_3.2.1.tar.gz"
|
||||
GPL_LIB_FILE="x265-3.2.tar.gz"
|
||||
GPL_LIB_ORIG_DIR="x265_3.2"
|
||||
GPL_LIB_ORIG_DIR="x265_3.2.1"
|
||||
GPL_LIB_DEST_DIR="x265"
|
||||
;;
|
||||
xvidcore)
|
||||
GPL_LIB_URL="https://downloads.xvid.com/downloads/xvidcore-1.3.5.tar.gz"
|
||||
GPL_LIB_FILE="xvidcore-1.3.5.tar.gz"
|
||||
GPL_LIB_URL="https://downloads.xvid.com/downloads/xvidcore-1.3.7.tar.gz"
|
||||
GPL_LIB_FILE="xvidcore-1.3.7.tar.gz"
|
||||
GPL_LIB_ORIG_DIR="xvidcore"
|
||||
GPL_LIB_DEST_DIR="xvidcore"
|
||||
;;
|
||||
@@ -1067,6 +1067,7 @@ set_toolchain_clang_paths() {
|
||||
export INSTALL_PKG_CONFIG_DIR="${BASEDIR}/prebuilt/$(get_target_build_directory)/pkgconfig"
|
||||
export ZLIB_PACKAGE_CONFIG_PATH="${INSTALL_PKG_CONFIG_DIR}/zlib.pc"
|
||||
export BZIP2_PACKAGE_CONFIG_PATH="${INSTALL_PKG_CONFIG_DIR}/bzip2.pc"
|
||||
export LIB_ICONV_PACKAGE_CONFIG_PATH="${INSTALL_PKG_CONFIG_DIR}/libiconv.pc"
|
||||
|
||||
if [ ! -d ${INSTALL_PKG_CONFIG_DIR} ]; then
|
||||
mkdir -p ${INSTALL_PKG_CONFIG_DIR}
|
||||
@@ -1076,6 +1077,10 @@ set_toolchain_clang_paths() {
|
||||
create_zlib_package_config
|
||||
fi
|
||||
|
||||
if [ ! -f ${LIB_ICONV_PACKAGE_CONFIG_PATH} ]; then
|
||||
create_libiconv_package_config
|
||||
fi
|
||||
|
||||
if [ ! -f ${BZIP2_PACKAGE_CONFIG_PATH} ]; then
|
||||
create_bzip2_package_config
|
||||
fi
|
||||
|
||||
+17
-15
@@ -152,11 +152,6 @@ do
|
||||
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static libass)"
|
||||
CONFIGURE_POSTFIX+=" --enable-libass"
|
||||
;;
|
||||
libiconv)
|
||||
FFMPEG_CFLAGS+=" $(pkg-config --cflags libiconv)"
|
||||
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static libiconv)"
|
||||
CONFIGURE_POSTFIX+=" --enable-iconv"
|
||||
;;
|
||||
libilbc)
|
||||
FFMPEG_CFLAGS+=" $(pkg-config --cflags libilbc)"
|
||||
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static libilbc)"
|
||||
@@ -315,28 +310,31 @@ do
|
||||
*-zlib)
|
||||
CONFIGURE_POSTFIX+=" --enable-zlib"
|
||||
;;
|
||||
*-libiconv)
|
||||
CONFIGURE_POSTFIX+=" --enable-iconv"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
else
|
||||
|
||||
# THE FOLLOWING LIBRARIES SHOULD BE EXPLICITLY DISABLED TO PREVENT AUTODETECT
|
||||
if [[ ${library} -eq 8 ]]; then
|
||||
CONFIGURE_POSTFIX+=" --disable-iconv"
|
||||
elif [[ ${library} -eq 30 ]]; then
|
||||
if [[ ${library} -eq 29 ]]; then
|
||||
CONFIGURE_POSTFIX+=" --disable-sdl2"
|
||||
elif [[ ${library} -eq 43 ]]; then
|
||||
elif [[ ${library} -eq 42 ]]; then
|
||||
CONFIGURE_POSTFIX+=" --disable-zlib"
|
||||
elif [[ ${library} -eq 44 ]]; then
|
||||
elif [[ ${library} -eq 43 ]]; then
|
||||
CONFIGURE_POSTFIX+=" --disable-audiotoolbox"
|
||||
elif [[ ${library} -eq 45 ]]; then
|
||||
elif [[ ${library} -eq 44 ]]; then
|
||||
CONFIGURE_POSTFIX+=" --disable-coreimage"
|
||||
elif [[ ${library} -eq 46 ]]; then
|
||||
elif [[ ${library} -eq 45 ]]; then
|
||||
CONFIGURE_POSTFIX+=" --disable-bzlib"
|
||||
elif [[ ${library} -eq 47 ]]; then
|
||||
elif [[ ${library} -eq 46 ]]; then
|
||||
CONFIGURE_POSTFIX+=" --disable-videotoolbox"
|
||||
elif [[ ${library} -eq 48 ]]; then
|
||||
elif [[ ${library} -eq 47 ]]; then
|
||||
CONFIGURE_POSTFIX+=" --disable-avfoundation"
|
||||
elif [[ ${library} -eq 48 ]]; then
|
||||
CONFIGURE_POSTFIX+=" --disable-iconv"
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -396,7 +394,11 @@ if [[ -z ${NO_WORKSPACE_CLEANUP_ffmpeg} ]]; then
|
||||
make distclean 2>/dev/null 1>/dev/null
|
||||
fi
|
||||
|
||||
${SED_INLINE} 's/check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic;/check_cflags -mdynamic-no-pic;/g' ./configure
|
||||
${SED_INLINE} 's/check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic;/check_cflags -mdynamic-no-pic;/g' ./configure 1>>${BASEDIR}/build.log 2>&1
|
||||
|
||||
# Workaround for issue #328
|
||||
rm -f ${BASEDIR}/src/${LIB_NAME}/libswscale/aarch64/hscale.S 1>>${BASEDIR}/build.log 2>&1
|
||||
cp ${BASEDIR}/tools/make/ffmpeg/libswscale/aarch64/hscale.S ${BASEDIR}/src/${LIB_NAME}/libswscale/aarch64/hscale.S 1>>${BASEDIR}/build.log 2>&1
|
||||
|
||||
./configure \
|
||||
--sysroot=${SDK_PATH} \
|
||||
|
||||
@@ -50,7 +50,7 @@ fi
|
||||
./configure \
|
||||
--prefix=${BASEDIR}/prebuilt/$(get_target_build_directory)/${LIB_NAME} \
|
||||
--with-pic \
|
||||
--with-libiconv-prefix=${BASEDIR}/prebuilt/$(get_target_build_directory)/libiconv \
|
||||
--with-libiconv-prefix=${SDK_PATH}/usr \
|
||||
--with-expat=${BASEDIR}/prebuilt/$(get_target_build_directory)/expat \
|
||||
--without-libintl-prefix \
|
||||
--enable-static \
|
||||
|
||||
+3
-3
@@ -37,9 +37,9 @@ COMMON_CFLAGS=$(get_cflags ${LIB_NAME})
|
||||
COMMON_CXXFLAGS=$(get_cxxflags ${LIB_NAME})
|
||||
COMMON_LDFLAGS=$(get_ldflags ${LIB_NAME})
|
||||
|
||||
export CFLAGS="${COMMON_CFLAGS} -I${BASEDIR}/prebuilt/$(get_target_build_directory)/libiconv/include"
|
||||
export CFLAGS="${COMMON_CFLAGS} -I${SDK_PATH}/usr/include"
|
||||
export CXXFLAGS="${COMMON_CXXFLAGS}"
|
||||
export LDFLAGS="${COMMON_LDFLAGS} -L${BASEDIR}/prebuilt/$(get_target_build_directory)/libiconv/lib"
|
||||
export LDFLAGS="${COMMON_LDFLAGS} -L${SDK_PATH}/usr/lib"
|
||||
|
||||
export NETTLE_CFLAGS="-I${BASEDIR}/prebuilt/$(get_target_build_directory)/nettle/include"
|
||||
export NETTLE_LIBS="-L${BASEDIR}/prebuilt/$(get_target_build_directory)/nettle/lib -lnettle -L${BASEDIR}/prebuilt/$(get_target_build_directory)/gmp/lib -lgmp"
|
||||
@@ -101,6 +101,6 @@ fi
|
||||
make -j$(get_cpu_count) || exit 1
|
||||
|
||||
# CREATE PACKAGE CONFIG MANUALLY
|
||||
create_gnutls_package_config "3.6.10"
|
||||
create_gnutls_package_config "3.6.11.1"
|
||||
|
||||
make install || exit 1
|
||||
|
||||
+1
-1
@@ -51,7 +51,7 @@ fi
|
||||
--prefix=${BASEDIR}/prebuilt/$(get_target_build_directory)/${LIB_NAME} \
|
||||
--with-pic \
|
||||
--with-sysroot=${SDK_PATH} \
|
||||
--with-libiconv-prefix=${BASEDIR}/prebuilt/$(get_target_build_directory)/libiconv \
|
||||
--with-libiconv-prefix=${SDK_PATH}/usr \
|
||||
--enable-static \
|
||||
--disable-shared \
|
||||
--disable-fast-install \
|
||||
|
||||
@@ -1,64 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [[ -z ${ARCH} ]]; then
|
||||
echo -e "(*) ARCH not defined\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z ${TARGET_SDK} ]]; then
|
||||
echo -e "(*) TARGET_SDK not defined\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z ${SDK_PATH} ]]; then
|
||||
echo -e "(*) SDK_PATH not defined\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z ${BASEDIR} ]]; then
|
||||
echo -e "(*) BASEDIR not defined\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ENABLE COMMON FUNCTIONS
|
||||
if [[ ${APPLE_TVOS_BUILD} -eq 1 ]]; then
|
||||
. ${BASEDIR}/build/tvos-common.sh
|
||||
else
|
||||
. ${BASEDIR}/build/ios-common.sh
|
||||
fi
|
||||
|
||||
# PREPARING PATHS & DEFINING ${INSTALL_PKG_CONFIG_DIR}
|
||||
LIB_NAME="libiconv"
|
||||
set_toolchain_clang_paths ${LIB_NAME}
|
||||
|
||||
# PREPARING FLAGS
|
||||
TARGET_HOST=$(get_target_host)
|
||||
export CFLAGS=$(get_cflags ${LIB_NAME})
|
||||
export CXXFLAGS=$(get_cxxflags ${LIB_NAME})
|
||||
export LDFLAGS=$(get_ldflags ${LIB_NAME})
|
||||
|
||||
cd ${BASEDIR}/src/${LIB_NAME} || exit 1
|
||||
|
||||
make distclean 2>/dev/null 1>/dev/null
|
||||
|
||||
# RECONFIGURING IF REQUESTED
|
||||
if [[ ${RECONF_libiconv} -eq 1 ]]; then
|
||||
autoreconf_library ${LIB_NAME}
|
||||
fi
|
||||
|
||||
./configure \
|
||||
--prefix=${BASEDIR}/prebuilt/$(get_target_build_directory)/${LIB_NAME} \
|
||||
--with-pic \
|
||||
--with-sysroot=${SDK_PATH} \
|
||||
--enable-static \
|
||||
--disable-shared \
|
||||
--disable-fast-install \
|
||||
--disable-rpath \
|
||||
--host=${TARGET_HOST} || exit 1
|
||||
|
||||
make -j$(get_cpu_count) || exit 1
|
||||
|
||||
# CREATE PACKAGE CONFIG MANUALLY
|
||||
create_libiconv_package_config "1.16"
|
||||
|
||||
make install || exit 1
|
||||
@@ -51,8 +51,10 @@ fi
|
||||
# ld: -force_cpusubtype_ALL and -bitcode_bundle (Xcode setting ENABLE_BITCODE=YES) cannot be used together
|
||||
${SED_INLINE} 's/-force_cpusubtype_ALL//g' ${BASEDIR}/src/${LIB_NAME}/configure
|
||||
|
||||
./configure \
|
||||
PKG_CONFIG= ./configure \
|
||||
--prefix=${BASEDIR}/prebuilt/$(get_target_build_directory)/${LIB_NAME} \
|
||||
--with-ogg-includes=${BASEDIR}/prebuilt/$(get_target_build_directory)/libogg/include \
|
||||
--with-ogg-libraries=${BASEDIR}/prebuilt/$(get_target_build_directory)/libogg/lib \
|
||||
--with-pic \
|
||||
--with-sysroot=${SDK_PATH} \
|
||||
--enable-static \
|
||||
|
||||
@@ -97,6 +97,6 @@ cmake -Wno-dev \
|
||||
make -j$(get_cpu_count) || exit 1
|
||||
|
||||
# CREATE PACKAGE CONFIG MANUALLY
|
||||
create_libwebp_package_config "1.0.3"
|
||||
create_libwebp_package_config "1.1.0"
|
||||
|
||||
make install || exit 1
|
||||
|
||||
@@ -50,7 +50,7 @@ autoreconf_library ${LIB_NAME}
|
||||
--with-pic \
|
||||
--with-sysroot=${SDK_PATH} \
|
||||
--with-zlib \
|
||||
--with-iconv=${BASEDIR}/prebuilt/$(get_target_build_directory)/libiconv \
|
||||
--with-iconv=${SDK_PATH}/usr \
|
||||
--with-sax1 \
|
||||
--without-python \
|
||||
--without-debug \
|
||||
@@ -63,6 +63,6 @@ autoreconf_library ${LIB_NAME}
|
||||
make -j$(get_cpu_count) || exit 1
|
||||
|
||||
# CREATE PACKAGE CONFIG MANUALLY
|
||||
create_libxml2_package_config "2.9.9"
|
||||
create_libxml2_package_config "2.9.10"
|
||||
|
||||
make install || exit 1
|
||||
|
||||
@@ -58,7 +58,7 @@ if [[ ${RECONF_mobile_ffmpeg} -eq 1 ]]; then
|
||||
fi
|
||||
|
||||
VIDEOTOOLBOX_SUPPORT_FLAG=""
|
||||
if [[ ${47} -eq 1 ]]; then
|
||||
if [[ ${46} -eq 1 ]]; then
|
||||
VIDEOTOOLBOX_SUPPORT_FLAG="--enable-videotoolbox"
|
||||
fi
|
||||
|
||||
|
||||
@@ -46,11 +46,22 @@ if [[ ${RECONF_wavpack} -eq 1 ]]; then
|
||||
autoreconf_library ${LIB_NAME}
|
||||
fi
|
||||
|
||||
ASM_FLAGS=""
|
||||
case ${ARCH} in
|
||||
armv7 | armv7s | arm64 | arm64e)
|
||||
ASM_FLAGS="--disable-asm"
|
||||
;;
|
||||
*)
|
||||
ASM_FLAGS="--enable-asm"
|
||||
;;
|
||||
esac
|
||||
|
||||
./configure \
|
||||
--prefix=${BASEDIR}/prebuilt/$(get_target_build_directory)/${LIB_NAME} \
|
||||
--with-pic \
|
||||
--with-sysroot=${SDK_PATH} \
|
||||
--without-iconv \
|
||||
${ASM_FLAGS} \
|
||||
--enable-static \
|
||||
--disable-shared \
|
||||
--disable-apps \
|
||||
|
||||
+1
-1
@@ -49,7 +49,7 @@ make distclean 2>/dev/null 1>/dev/null
|
||||
ASM_FLAGS=""
|
||||
case ${ARCH} in
|
||||
i386 |x86-64)
|
||||
ASM_FLAGS="--disable-assembly"
|
||||
ASM_FLAGS="--disable-asm"
|
||||
|
||||
if ! [ -x "$(command -v nasm)" ]; then
|
||||
echo -e "(*) nasm command not found\n"
|
||||
|
||||
@@ -73,7 +73,7 @@ esac
|
||||
make -j$(get_cpu_count) || exit 1
|
||||
|
||||
# CREATE PACKAGE CONFIG MANUALLY
|
||||
create_xvidcore_package_config "1.3.5"
|
||||
create_xvidcore_package_config "1.3.6"
|
||||
|
||||
make install || exit 1
|
||||
|
||||
|
||||
+4
-21
@@ -59,13 +59,6 @@ check_if_dependency_rebuilt() {
|
||||
leptonica)
|
||||
set_dependency_rebuilt_flag "tesseract"
|
||||
;;
|
||||
libiconv)
|
||||
set_dependency_rebuilt_flag "fontconfig"
|
||||
set_dependency_rebuilt_flag "gnutls"
|
||||
set_dependency_rebuilt_flag "lame"
|
||||
set_dependency_rebuilt_flag "libass"
|
||||
set_dependency_rebuilt_flag "libxml2"
|
||||
;;
|
||||
libogg)
|
||||
set_dependency_rebuilt_flag "libvorbis"
|
||||
set_dependency_rebuilt_flag "libtheora"
|
||||
@@ -123,7 +116,7 @@ fi
|
||||
# FILTERING WHICH EXTERNAL LIBRARIES WILL BE BUILT
|
||||
# NOTE THAT BUILT-IN LIBRARIES ARE FORWARDED TO FFMPEG SCRIPT WITHOUT ANY PROCESSING
|
||||
enabled_library_list=()
|
||||
for library in {1..42}
|
||||
for library in {1..41}
|
||||
do
|
||||
if [[ ${!library} -eq 1 ]]; then
|
||||
ENABLED_LIBRARY=$(get_library_name $((library - 1)))
|
||||
@@ -140,7 +133,7 @@ while [ ${#enabled_library_list[@]} -gt $completed ]; do
|
||||
let run=0
|
||||
case $library in
|
||||
fontconfig)
|
||||
if [[ ! -z $OK_libuuid ]] && [[ ! -z $OK_expat ]] && [[ ! -z $OK_libiconv ]] && [[ ! -z $OK_freetype ]]; then
|
||||
if [[ ! -z $OK_libuuid ]] && [[ ! -z $OK_expat ]] && [[ ! -z $OK_freetype ]]; then
|
||||
run=1
|
||||
fi
|
||||
;;
|
||||
@@ -150,12 +143,7 @@ while [ ${#enabled_library_list[@]} -gt $completed ]; do
|
||||
fi
|
||||
;;
|
||||
gnutls)
|
||||
if [[ ! -z $OK_nettle ]] && [[ ! -z $OK_gmp ]] && [[ ! -z $OK_libiconv ]]; then
|
||||
run=1
|
||||
fi
|
||||
;;
|
||||
lame)
|
||||
if [[ ! -z $OK_libiconv ]]; then
|
||||
if [[ ! -z $OK_nettle ]] && [[ ! -z $OK_gmp ]]; then
|
||||
run=1
|
||||
fi
|
||||
;;
|
||||
@@ -165,7 +153,7 @@ while [ ${#enabled_library_list[@]} -gt $completed ]; do
|
||||
fi
|
||||
;;
|
||||
libass)
|
||||
if [[ ! -z $OK_libuuid ]] && [[ ! -z $OK_expat ]] && [[ ! -z $OK_libiconv ]] && [[ ! -z $OK_freetype ]] && [[ ! -z $OK_fribidi ]] && [[ ! -z $OK_fontconfig ]] && [[ ! -z $OK_libpng ]]; then
|
||||
if [[ ! -z $OK_libuuid ]] && [[ ! -z $OK_expat ]] && [[ ! -z $OK_freetype ]] && [[ ! -z $OK_fribidi ]] && [[ ! -z $OK_fontconfig ]] && [[ ! -z $OK_libpng ]]; then
|
||||
run=1
|
||||
fi
|
||||
;;
|
||||
@@ -184,11 +172,6 @@ while [ ${#enabled_library_list[@]} -gt $completed ]; do
|
||||
run=1
|
||||
fi
|
||||
;;
|
||||
libxml2)
|
||||
if [[ ! -z $OK_libiconv ]]; then
|
||||
run=1
|
||||
fi
|
||||
;;
|
||||
nettle)
|
||||
if [[ ! -z $OK_gmp ]]; then
|
||||
run=1
|
||||
|
||||
+4
-21
@@ -59,13 +59,6 @@ check_if_dependency_rebuilt() {
|
||||
leptonica)
|
||||
set_dependency_rebuilt_flag "tesseract"
|
||||
;;
|
||||
libiconv)
|
||||
set_dependency_rebuilt_flag "fontconfig"
|
||||
set_dependency_rebuilt_flag "gnutls"
|
||||
set_dependency_rebuilt_flag "lame"
|
||||
set_dependency_rebuilt_flag "libass"
|
||||
set_dependency_rebuilt_flag "libxml2"
|
||||
;;
|
||||
libogg)
|
||||
set_dependency_rebuilt_flag "libvorbis"
|
||||
set_dependency_rebuilt_flag "libtheora"
|
||||
@@ -123,7 +116,7 @@ fi
|
||||
# FILTERING WHICH EXTERNAL LIBRARIES WILL BE BUILT
|
||||
# NOTE THAT BUILT-IN LIBRARIES ARE FORWARDED TO FFMPEG SCRIPT WITHOUT ANY PROCESSING
|
||||
enabled_library_list=()
|
||||
for library in {1..42}
|
||||
for library in {1..41}
|
||||
do
|
||||
if [[ ${!library} -eq 1 ]]; then
|
||||
ENABLED_LIBRARY=$(get_library_name $((library - 1)))
|
||||
@@ -140,7 +133,7 @@ while [ ${#enabled_library_list[@]} -gt $completed ]; do
|
||||
let run=0
|
||||
case $library in
|
||||
fontconfig)
|
||||
if [[ ! -z $OK_libuuid ]] && [[ ! -z $OK_expat ]] && [[ ! -z $OK_libiconv ]] && [[ ! -z $OK_freetype ]]; then
|
||||
if [[ ! -z $OK_libuuid ]] && [[ ! -z $OK_expat ]] && [[ ! -z $OK_freetype ]]; then
|
||||
run=1
|
||||
fi
|
||||
;;
|
||||
@@ -150,12 +143,7 @@ while [ ${#enabled_library_list[@]} -gt $completed ]; do
|
||||
fi
|
||||
;;
|
||||
gnutls)
|
||||
if [[ ! -z $OK_nettle ]] && [[ ! -z $OK_gmp ]] && [[ ! -z $OK_libiconv ]]; then
|
||||
run=1
|
||||
fi
|
||||
;;
|
||||
lame)
|
||||
if [[ ! -z $OK_libiconv ]]; then
|
||||
if [[ ! -z $OK_nettle ]] && [[ ! -z $OK_gmp ]]; then
|
||||
run=1
|
||||
fi
|
||||
;;
|
||||
@@ -165,7 +153,7 @@ while [ ${#enabled_library_list[@]} -gt $completed ]; do
|
||||
fi
|
||||
;;
|
||||
libass)
|
||||
if [[ ! -z $OK_libuuid ]] && [[ ! -z $OK_expat ]] && [[ ! -z $OK_libiconv ]] && [[ ! -z $OK_freetype ]] && [[ ! -z $OK_fribidi ]] && [[ ! -z $OK_fontconfig ]] && [[ ! -z $OK_libpng ]]; then
|
||||
if [[ ! -z $OK_libuuid ]] && [[ ! -z $OK_expat ]] && [[ ! -z $OK_freetype ]] && [[ ! -z $OK_fribidi ]] && [[ ! -z $OK_fontconfig ]] && [[ ! -z $OK_libpng ]]; then
|
||||
run=1
|
||||
fi
|
||||
;;
|
||||
@@ -184,11 +172,6 @@ while [ ${#enabled_library_list[@]} -gt $completed ]; do
|
||||
run=1
|
||||
fi
|
||||
;;
|
||||
libxml2)
|
||||
if [[ ! -z $OK_libiconv ]]; then
|
||||
run=1
|
||||
fi
|
||||
;;
|
||||
nettle)
|
||||
if [[ ! -z $OK_gmp ]]; then
|
||||
run=1
|
||||
|
||||
+84
-79
@@ -25,46 +25,46 @@ get_library_name() {
|
||||
4) echo "gnutls" ;;
|
||||
5) echo "lame" ;;
|
||||
6) echo "libass" ;;
|
||||
7) echo "libiconv" ;;
|
||||
8) echo "libtheora" ;;
|
||||
9) echo "libvorbis" ;;
|
||||
10) echo "libvpx" ;;
|
||||
11) echo "libwebp" ;;
|
||||
12) echo "libxml2" ;;
|
||||
13) echo "opencore-amr" ;;
|
||||
14) echo "shine" ;;
|
||||
15) echo "speex" ;;
|
||||
16) echo "wavpack" ;;
|
||||
17) echo "kvazaar" ;;
|
||||
18) echo "x264" ;;
|
||||
19) echo "xvidcore" ;;
|
||||
20) echo "x265" ;;
|
||||
21) echo "libvidstab" ;;
|
||||
22) echo "libilbc" ;;
|
||||
23) echo "opus" ;;
|
||||
24) echo "snappy" ;;
|
||||
25) echo "soxr" ;;
|
||||
26) echo "libaom" ;;
|
||||
27) echo "chromaprint" ;;
|
||||
28) echo "twolame" ;;
|
||||
29) echo "sdl" ;;
|
||||
30) echo "tesseract" ;;
|
||||
31) echo "openh264" ;;
|
||||
32) echo "giflib" ;;
|
||||
33) echo "jpeg" ;;
|
||||
34) echo "libogg" ;;
|
||||
35) echo "libpng" ;;
|
||||
36) echo "libuuid" ;;
|
||||
37) echo "nettle" ;;
|
||||
38) echo "tiff" ;;
|
||||
39) echo "expat" ;;
|
||||
40) echo "libsndfile" ;;
|
||||
41) echo "leptonica" ;;
|
||||
42) echo "tvos-zlib" ;;
|
||||
43) echo "tvos-audiotoolbox" ;;
|
||||
44) echo "tvos-coreimage" ;;
|
||||
45) echo "tvos-bzip2" ;;
|
||||
46) echo "tvos-videotoolbox" ;;
|
||||
7) echo "libtheora" ;;
|
||||
8) echo "libvorbis" ;;
|
||||
9) echo "libvpx" ;;
|
||||
10) echo "libwebp" ;;
|
||||
11) echo "libxml2" ;;
|
||||
12) echo "opencore-amr" ;;
|
||||
13) echo "shine" ;;
|
||||
14) echo "speex" ;;
|
||||
15) echo "wavpack" ;;
|
||||
16) echo "kvazaar" ;;
|
||||
17) echo "x264" ;;
|
||||
18) echo "xvidcore" ;;
|
||||
19) echo "x265" ;;
|
||||
20) echo "libvidstab" ;;
|
||||
21) echo "libilbc" ;;
|
||||
22) echo "opus" ;;
|
||||
23) echo "snappy" ;;
|
||||
24) echo "soxr" ;;
|
||||
25) echo "libaom" ;;
|
||||
26) echo "chromaprint" ;;
|
||||
27) echo "twolame" ;;
|
||||
28) echo "sdl" ;;
|
||||
29) echo "tesseract" ;;
|
||||
30) echo "openh264" ;;
|
||||
31) echo "giflib" ;;
|
||||
32) echo "jpeg" ;;
|
||||
33) echo "libogg" ;;
|
||||
34) echo "libpng" ;;
|
||||
35) echo "libuuid" ;;
|
||||
36) echo "nettle" ;;
|
||||
37) echo "tiff" ;;
|
||||
38) echo "expat" ;;
|
||||
39) echo "libsndfile" ;;
|
||||
40) echo "leptonica" ;;
|
||||
41) echo "tvos-zlib" ;;
|
||||
42) echo "tvos-audiotoolbox" ;;
|
||||
43) echo "tvos-coreimage" ;;
|
||||
44) echo "tvos-bzip2" ;;
|
||||
45) echo "tvos-videotoolbox" ;;
|
||||
46) echo "tvos-libiconv" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
@@ -72,21 +72,21 @@ get_package_config_file_name() {
|
||||
case $1 in
|
||||
1) echo "freetype2" ;;
|
||||
5) echo "libmp3lame" ;;
|
||||
8) echo "theora" ;;
|
||||
9) echo "vorbis" ;;
|
||||
10) echo "vpx" ;;
|
||||
12) echo "libxml-2.0" ;;
|
||||
13) echo "opencore-amrnb" ;;
|
||||
21) echo "vidstab" ;;
|
||||
26) echo "aom" ;;
|
||||
27) echo "libchromaprint" ;;
|
||||
29) echo "sdl2" ;;
|
||||
33) echo "libjpeg" ;;
|
||||
34) echo "ogg" ;;
|
||||
36) echo "uuid" ;;
|
||||
38) echo "libtiff-4" ;;
|
||||
40) echo "sndfile" ;;
|
||||
41) echo "lept" ;;
|
||||
7) echo "theora" ;;
|
||||
8) echo "vorbis" ;;
|
||||
9) echo "vpx" ;;
|
||||
11) echo "libxml-2.0" ;;
|
||||
12) echo "opencore-amrnb" ;;
|
||||
20) echo "vidstab" ;;
|
||||
25) echo "aom" ;;
|
||||
26) echo "libchromaprint" ;;
|
||||
28) echo "sdl2" ;;
|
||||
32) echo "libjpeg" ;;
|
||||
33) echo "ogg" ;;
|
||||
35) echo "uuid" ;;
|
||||
37) echo "libtiff-4" ;;
|
||||
39) echo "sndfile" ;;
|
||||
40) echo "lept" ;;
|
||||
*) echo $(get_library_name $1)
|
||||
esac
|
||||
}
|
||||
@@ -99,20 +99,20 @@ 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 "libtwolame.a" ;;
|
||||
29) echo "libSDL2.a" ;;
|
||||
30) echo "libtesseract.a" ;;
|
||||
32) echo "libgif.a" ;;
|
||||
34) echo "libogg.a" ;;
|
||||
35) echo "libpng.a" ;;
|
||||
36) echo "libuuid.a" ;;
|
||||
40) echo "libsndfile.a" ;;
|
||||
41) echo "liblept.a" ;;
|
||||
9) echo "libvpx.a" ;;
|
||||
11) echo "libxml2.a" ;;
|
||||
20) echo "libvidstab.a" ;;
|
||||
21) echo "libilbc.a" ;;
|
||||
25) echo "libaom.a" ;;
|
||||
27) echo "libtwolame.a" ;;
|
||||
28) echo "libSDL2.a" ;;
|
||||
29) echo "libtesseract.a" ;;
|
||||
31) echo "libgif.a" ;;
|
||||
33) echo "libogg.a" ;;
|
||||
34) echo "libpng.a" ;;
|
||||
35) echo "libuuid.a" ;;
|
||||
39) echo "libsndfile.a" ;;
|
||||
40) echo "liblept.a" ;;
|
||||
*) echo lib$(get_library_name $1).a
|
||||
esac
|
||||
}
|
||||
@@ -586,10 +586,10 @@ EOF
|
||||
}
|
||||
|
||||
create_libiconv_package_config() {
|
||||
local LIB_ICONV_VERSION="$1"
|
||||
local LIB_ICONV_VERSION=$(grep '_LIBICONV_VERSION' ${SDK_PATH}/usr/include/iconv.h | grep -Eo '0x.*' | grep -Eo '.* ')
|
||||
|
||||
cat > "${INSTALL_PKG_CONFIG_DIR}/libiconv.pc" << EOF
|
||||
prefix=${BASEDIR}/prebuilt/$(get_target_build_directory)/libiconv
|
||||
prefix=${SDK_PATH}/usr
|
||||
exec_prefix=\${prefix}
|
||||
libdir=\${exec_prefix}/lib
|
||||
includedir=\${prefix}/include
|
||||
@@ -894,20 +894,20 @@ download_gpl_library_source() {
|
||||
GPL_LIB_DEST_DIR="libvidstab"
|
||||
;;
|
||||
x264)
|
||||
GPL_LIB_URL="ftp://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20191024-2245-stable.tar.bz2"
|
||||
GPL_LIB_FILE="x264-snapshot-20191024-2245-stable.tar.bz2"
|
||||
GPL_LIB_ORIG_DIR="x264-snapshot-20191024-2245-stable"
|
||||
GPL_LIB_URL="https://code.videolan.org/videolan/x264/-/archive/1771b556ee45207f8711744ccbd5d42a3949b14c/x264-1771b556ee45207f8711744ccbd5d42a3949b14c.tar.bz2"
|
||||
GPL_LIB_FILE="x264-1771b556ee45207f8711744ccbd5d42a3949b14c.tar.bz2"
|
||||
GPL_LIB_ORIG_DIR="x264-1771b556ee45207f8711744ccbd5d42a3949b14c"
|
||||
GPL_LIB_DEST_DIR="x264"
|
||||
;;
|
||||
x265)
|
||||
GPL_LIB_URL="https://bitbucket.org/multicoreware/x265/downloads/x265_3.2.tar.gz"
|
||||
GPL_LIB_URL="https://bitbucket.org/multicoreware/x265/downloads/x265_3.2.1.tar.gz"
|
||||
GPL_LIB_FILE="x265-3.2.tar.gz"
|
||||
GPL_LIB_ORIG_DIR="x265_3.2"
|
||||
GPL_LIB_ORIG_DIR="x265_3.2.1"
|
||||
GPL_LIB_DEST_DIR="x265"
|
||||
;;
|
||||
xvidcore)
|
||||
GPL_LIB_URL="https://downloads.xvid.com/downloads/xvidcore-1.3.5.tar.gz"
|
||||
GPL_LIB_FILE="xvidcore-1.3.5.tar.gz"
|
||||
GPL_LIB_URL="https://downloads.xvid.com/downloads/xvidcore-1.3.7.tar.gz"
|
||||
GPL_LIB_FILE="xvidcore-1.3.7.tar.gz"
|
||||
GPL_LIB_ORIG_DIR="xvidcore"
|
||||
GPL_LIB_DEST_DIR="xvidcore"
|
||||
;;
|
||||
@@ -1029,6 +1029,7 @@ set_toolchain_clang_paths() {
|
||||
export INSTALL_PKG_CONFIG_DIR="${BASEDIR}/prebuilt/$(get_target_build_directory)/pkgconfig"
|
||||
export ZLIB_PACKAGE_CONFIG_PATH="${INSTALL_PKG_CONFIG_DIR}/zlib.pc"
|
||||
export BZIP2_PACKAGE_CONFIG_PATH="${INSTALL_PKG_CONFIG_DIR}/bzip2.pc"
|
||||
export LIB_ICONV_PACKAGE_CONFIG_PATH="${INSTALL_PKG_CONFIG_DIR}/libiconv.pc"
|
||||
|
||||
if [ ! -d ${INSTALL_PKG_CONFIG_DIR} ]; then
|
||||
mkdir -p ${INSTALL_PKG_CONFIG_DIR}
|
||||
@@ -1038,6 +1039,10 @@ set_toolchain_clang_paths() {
|
||||
create_zlib_package_config
|
||||
fi
|
||||
|
||||
if [ ! -f ${LIB_ICONV_PACKAGE_CONFIG_PATH} ]; then
|
||||
create_libiconv_package_config
|
||||
fi
|
||||
|
||||
if [ ! -f ${BZIP2_PACKAGE_CONFIG_PATH} ]; then
|
||||
create_bzip2_package_config
|
||||
fi
|
||||
@@ -1149,4 +1154,4 @@ library_is_installed() {
|
||||
echo -e "INFO: ${LIB_NAME} library is already built and installed\n" 1>>${BASEDIR}/build.log 2>&1
|
||||
|
||||
echo 0
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.16"/>
|
||||
<meta name="generator" content="Doxygen 1.8.17"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>MobileFFmpeg Android API: Data Structures</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
@@ -22,7 +22,7 @@
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">MobileFFmpeg Android API
|
||||
 <span id="projectnumber">4.3</span>
|
||||
 <span id="projectnumber">4.3.1</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -30,7 +30,7 @@
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.16 -->
|
||||
<!-- Generated by Doxygen 1.8.17 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
@@ -71,33 +71,45 @@ $(function() {
|
||||
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d6/d2c/struct_audio_channel_map.html" target="_self">AudioChannelMap</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d5/d8e/struct_benchmark_time_stamps.html" target="_self">BenchmarkTimeStamps</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d2/dc3/struct_callback_data.html" target="_self">CallbackData</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d9/de7/struct_filter_graph.html" target="_self">FilterGraph</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="df/d37/struct_h_w_accel.html" target="_self">HWAccel</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="de/dc7/struct_h_w_device.html" target="_self">HWDevice</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d8/d99/struct_input_file.html" target="_self">InputFile</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d7/d0c/struct_input_filter.html" target="_self">InputFilter</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_8_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_8_" class="arrow" onclick="toggleFolder('8_')">▼</span><span class="icona"><span class="icon">C</span></span><a class="el" href="d3/d6e/struct_input_stream.html" target="_self">InputStream</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_8_0_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d4/dfd/struct_input_stream_1_1sub2video.html" target="_self">sub2video</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_9_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d3/d1d/struct_option.html" target="_self">Option</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_10_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="dc/d1e/struct_option_def.html" target="_self">OptionDef</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_11_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d6/d69/struct_option_group.html" target="_self">OptionGroup</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_12_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="db/dd7/struct_option_group_def.html" target="_self">OptionGroupDef</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_13_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d7/d4f/struct_option_group_list.html" target="_self">OptionGroupList</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_14_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="db/db5/struct_option_parse_context.html" target="_self">OptionParseContext</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_15_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="df/d77/struct_options_context.html" target="_self">OptionsContext</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_16_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="de/df2/struct_output_file.html" target="_self">OutputFile</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_17_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d0/d0f/struct_output_filter.html" target="_self">OutputFilter</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_18_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="db/dde/struct_output_stream.html" target="_self">OutputStream</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_19_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="dd/da5/struct_specifier_opt.html" target="_self">SpecifierOpt</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_20_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="db/d60/struct_stream_map.html" target="_self">StreamMap</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d2/ddd/struct_compact_context.html" target="_self">CompactContext</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d4/da0/struct_default_context.html" target="_self">DefaultContext</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d9/de7/struct_filter_graph.html" target="_self">FilterGraph</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d3/db7/struct_flat_context.html" target="_self">FlatContext</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="df/d37/struct_h_w_accel.html" target="_self">HWAccel</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="de/dc7/struct_h_w_device.html" target="_self">HWDevice</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="da/d4f/struct_i_n_i_context.html" target="_self">INIContext</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d8/d99/struct_input_file.html" target="_self">InputFile</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d7/d0c/struct_input_filter.html" target="_self">InputFilter</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_12_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_12_" class="arrow" onclick="toggleFolder('12_')">▼</span><span class="icona"><span class="icon">C</span></span><a class="el" href="d3/d6e/struct_input_stream.html" target="_self">InputStream</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_12_0_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d4/dfd/struct_input_stream_1_1sub2video.html" target="_self">sub2video</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_13_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d6/d53/struct_j_s_o_n_context.html" target="_self">JSONContext</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_14_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="dd/d15/struct_log_buffer.html" target="_self">LogBuffer</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_15_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d3/d1d/struct_option.html" target="_self">Option</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_16_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="dc/d1e/struct_option_def.html" target="_self">OptionDef</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_17_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d6/d69/struct_option_group.html" target="_self">OptionGroup</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_18_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="db/dd7/struct_option_group_def.html" target="_self">OptionGroupDef</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_19_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d7/d4f/struct_option_group_list.html" target="_self">OptionGroupList</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_20_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="db/db5/struct_option_parse_context.html" target="_self">OptionParseContext</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_21_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="df/d77/struct_options_context.html" target="_self">OptionsContext</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_22_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="de/df2/struct_output_file.html" target="_self">OutputFile</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_23_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d0/d0f/struct_output_filter.html" target="_self">OutputFilter</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_24_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="db/dde/struct_output_stream.html" target="_self">OutputStream</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_25_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d8/dee/struct_read_interval.html" target="_self">ReadInterval</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_26_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d9/d11/structsection.html" target="_self">section</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_27_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="dd/da5/struct_specifier_opt.html" target="_self">SpecifierOpt</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_28_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="db/d60/struct_stream_map.html" target="_self">StreamMap</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_29_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d9/d6d/structunit__value.html" target="_self">unit_value</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_30_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d6/dff/struct_writer.html" target="_self">Writer</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_31_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d1/da2/struct_writer_context.html" target="_self">WriterContext</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_32_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="d7/db2/struct_x_m_l_context.html" target="_self">XMLContext</a></td><td class="desc"></td></tr>
|
||||
</table>
|
||||
</div><!-- directory -->
|
||||
</div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated on Sat Oct 26 2019 14:39:09 for MobileFFmpeg Android API by  <a href="http://www.doxygen.org/index.html">
|
||||
Generated on Sun Jan 12 2020 21:33:06 for MobileFFmpeg Android API by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.16
|
||||
</a> 1.8.17
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.16"/>
|
||||
<meta name="generator" content="Doxygen 1.8.17"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>MobileFFmpeg Android API: Data Structure Index</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
@@ -22,7 +22,7 @@
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">MobileFFmpeg Android API
|
||||
 <span id="projectnumber">4.3</span>
|
||||
 <span id="projectnumber">4.3.1</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -30,7 +30,7 @@
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.16 -->
|
||||
<!-- Generated by Doxygen 1.8.17 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
@@ -66,65 +66,94 @@ $(function() {
|
||||
<div class="title">Data Structure Index</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="qindex"><a class="qindex" href="#letter_a">a</a> | <a class="qindex" href="#letter_b">b</a> | <a class="qindex" href="#letter_c">c</a> | <a class="qindex" href="#letter_f">f</a> | <a class="qindex" href="#letter_h">h</a> | <a class="qindex" href="#letter_i">i</a> | <a class="qindex" href="#letter_o">o</a> | <a class="qindex" href="#letter_s">s</a></div>
|
||||
<div class="qindex"><a class="qindex" href="#letter_a">a</a> | <a class="qindex" href="#letter_b">b</a> | <a class="qindex" href="#letter_c">c</a> | <a class="qindex" href="#letter_d">d</a> | <a class="qindex" href="#letter_f">f</a> | <a class="qindex" href="#letter_h">h</a> | <a class="qindex" href="#letter_i">i</a> | <a class="qindex" href="#letter_j">j</a> | <a class="qindex" href="#letter_l">l</a> | <a class="qindex" href="#letter_o">o</a> | <a class="qindex" href="#letter_r">r</a> | <a class="qindex" href="#letter_s">s</a> | <a class="qindex" href="#letter_u">u</a> | <a class="qindex" href="#letter_w">w</a> | <a class="qindex" href="#letter_x">x</a></div>
|
||||
<table class="classindex">
|
||||
<tr><td rowspan="2" valign="bottom"><a name="letter_a"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  a  </div></td></tr></table>
|
||||
</td>
|
||||
<td rowspan="2" valign="bottom"><a name="letter_f"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  f  </div></td></tr></table>
|
||||
</td>
|
||||
<td valign="top"><a class="el" href="d7/d0c/struct_input_filter.html">InputFilter</a>   </td>
|
||||
<td valign="top"><a class="el" href="d3/d6e/struct_input_stream.html">InputStream</a>   </td>
|
||||
<td valign="top"><a class="el" href="d7/d4f/struct_option_group_list.html">OptionGroupList</a>   </td>
|
||||
<td valign="top"><a class="el" href="db/d60/struct_stream_map.html">StreamMap</a>   </td>
|
||||
</tr>
|
||||
<tr><td valign="top"><a class="el" href="d3/d6e/struct_input_stream.html">InputStream</a>   </td>
|
||||
<tr><td rowspan="2" valign="bottom"><a name="letter_j"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  j  </div></td></tr></table>
|
||||
</td>
|
||||
<td valign="top"><a class="el" href="db/db5/struct_option_parse_context.html">OptionParseContext</a>   </td>
|
||||
<td valign="top"><a class="el" href="d4/dfd/struct_input_stream_1_1sub2video.html">InputStream::sub2video</a>   </td>
|
||||
</tr>
|
||||
<tr><td valign="top"><a class="el" href="d6/d2c/struct_audio_channel_map.html">AudioChannelMap</a>   </td>
|
||||
<td valign="top"><a class="el" href="d9/de7/struct_filter_graph.html">FilterGraph</a>   </td>
|
||||
<td rowspan="2" valign="bottom"><a name="letter_o"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  o  </div></td></tr></table>
|
||||
</td>
|
||||
<td valign="top"><a class="el" href="df/d77/struct_options_context.html">OptionsContext</a>   </td>
|
||||
<td></td></tr>
|
||||
<td rowspan="2" valign="bottom"><a name="letter_u"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  u  </div></td></tr></table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td rowspan="2" valign="bottom"><a name="letter_b"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  b  </div></td></tr></table>
|
||||
</td>
|
||||
<td rowspan="2" valign="bottom"><a name="letter_h"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  h  </div></td></tr></table>
|
||||
</td>
|
||||
<td valign="top"><a class="el" href="d3/db7/struct_flat_context.html">FlatContext</a>   </td>
|
||||
<td valign="top"><a class="el" href="d6/d53/struct_j_s_o_n_context.html">JSONContext</a>   </td>
|
||||
<td valign="top"><a class="el" href="de/df2/struct_output_file.html">OutputFile</a>   </td>
|
||||
<td></td></tr>
|
||||
<tr><td valign="top"><a class="el" href="d3/d1d/struct_option.html">Option</a>   </td>
|
||||
</tr>
|
||||
<tr><td rowspan="2" valign="bottom"><a name="letter_h"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  h  </div></td></tr></table>
|
||||
</td>
|
||||
<td rowspan="2" valign="bottom"><a name="letter_l"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  l  </div></td></tr></table>
|
||||
</td>
|
||||
<td valign="top"><a class="el" href="d0/d0f/struct_output_filter.html">OutputFilter</a>   </td>
|
||||
<td></td></tr>
|
||||
<td valign="top"><a class="el" href="d9/d6d/structunit__value.html">unit_value</a>   </td>
|
||||
</tr>
|
||||
<tr><td valign="top"><a class="el" href="d5/d8e/struct_benchmark_time_stamps.html">BenchmarkTimeStamps</a>   </td>
|
||||
<td valign="top"><a class="el" href="df/d37/struct_h_w_accel.html">HWAccel</a>   </td>
|
||||
<td valign="top"><a class="el" href="dc/d1e/struct_option_def.html">OptionDef</a>   </td>
|
||||
<td valign="top"><a class="el" href="db/dde/struct_output_stream.html">OutputStream</a>   </td>
|
||||
<td></td></tr>
|
||||
<td rowspan="2" valign="bottom"><a name="letter_w"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  w  </div></td></tr></table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td rowspan="2" valign="bottom"><a name="letter_c"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  c  </div></td></tr></table>
|
||||
</td>
|
||||
<td valign="top"><a class="el" href="de/dc7/struct_h_w_device.html">HWDevice</a>   </td>
|
||||
<td valign="top"><a class="el" href="d6/d69/struct_option_group.html">OptionGroup</a>   </td>
|
||||
<td valign="top"><a class="el" href="df/d37/struct_h_w_accel.html">HWAccel</a>   </td>
|
||||
<td valign="top"><a class="el" href="dd/d15/struct_log_buffer.html">LogBuffer</a>   </td>
|
||||
<td rowspan="2" valign="bottom"><a name="letter_r"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  r  </div></td></tr></table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td valign="top"><a class="el" href="de/dc7/struct_h_w_device.html">HWDevice</a>   </td>
|
||||
<td rowspan="2" valign="bottom"><a name="letter_o"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  o  </div></td></tr></table>
|
||||
</td>
|
||||
<td valign="top"><a class="el" href="d6/dff/struct_writer.html">Writer</a>   </td>
|
||||
</tr>
|
||||
<tr><td valign="top"><a class="el" href="d2/dc3/struct_callback_data.html">CallbackData</a>   </td>
|
||||
<td rowspan="2" valign="bottom"><a name="letter_i"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  i  </div></td></tr></table>
|
||||
</td>
|
||||
<td valign="top"><a class="el" href="d8/dee/struct_read_interval.html">ReadInterval</a>   </td>
|
||||
<td valign="top"><a class="el" href="d1/da2/struct_writer_context.html">WriterContext</a>   </td>
|
||||
</tr>
|
||||
<tr><td valign="top"><a class="el" href="d2/ddd/struct_compact_context.html">CompactContext</a>   </td>
|
||||
<td valign="top"><a class="el" href="d3/d1d/struct_option.html">Option</a>   </td>
|
||||
<td rowspan="2" valign="bottom"><a name="letter_s"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  s  </div></td></tr></table>
|
||||
</td>
|
||||
<td></td></tr>
|
||||
<tr><td rowspan="2" valign="bottom"><a name="letter_i"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  i  </div></td></tr></table>
|
||||
<td rowspan="2" valign="bottom"><a name="letter_x"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  x  </div></td></tr></table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td rowspan="2" valign="bottom"><a name="letter_d"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  d  </div></td></tr></table>
|
||||
</td>
|
||||
<td valign="top"><a class="el" href="da/d4f/struct_i_n_i_context.html">INIContext</a>   </td>
|
||||
<td valign="top"><a class="el" href="dc/d1e/struct_option_def.html">OptionDef</a>   </td>
|
||||
</tr>
|
||||
<tr><td valign="top"><a class="el" href="d8/d99/struct_input_file.html">InputFile</a>   </td>
|
||||
<td valign="top"><a class="el" href="d6/d69/struct_option_group.html">OptionGroup</a>   </td>
|
||||
<td valign="top"><a class="el" href="d9/d11/structsection.html">section</a>   </td>
|
||||
<td valign="top"><a class="el" href="d7/db2/struct_x_m_l_context.html">XMLContext</a>   </td>
|
||||
</tr>
|
||||
<tr><td valign="top"><a class="el" href="d4/da0/struct_default_context.html">DefaultContext</a>   </td>
|
||||
<td valign="top"><a class="el" href="d7/d0c/struct_input_filter.html">InputFilter</a>   </td>
|
||||
<td valign="top"><a class="el" href="db/dd7/struct_option_group_def.html">OptionGroupDef</a>   </td>
|
||||
<td valign="top"><a class="el" href="dd/da5/struct_specifier_opt.html">SpecifierOpt</a>   </td>
|
||||
<td></td></tr>
|
||||
<tr><td valign="top"><a class="el" href="d2/dc3/struct_callback_data.html">CallbackData</a>   </td>
|
||||
<td></td><td valign="top"><a class="el" href="dd/da5/struct_specifier_opt.html">SpecifierOpt</a>   </td>
|
||||
<td></td></tr>
|
||||
<tr><td></td><td valign="top"><a class="el" href="d8/d99/struct_input_file.html">InputFile</a>   </td>
|
||||
<td></td><td></td><td></td></tr>
|
||||
<tr><td></td><td></td><td></td><td></td><td></td></tr>
|
||||
</table>
|
||||
<div class="qindex"><a class="qindex" href="#letter_a">a</a> | <a class="qindex" href="#letter_b">b</a> | <a class="qindex" href="#letter_c">c</a> | <a class="qindex" href="#letter_f">f</a> | <a class="qindex" href="#letter_h">h</a> | <a class="qindex" href="#letter_i">i</a> | <a class="qindex" href="#letter_o">o</a> | <a class="qindex" href="#letter_s">s</a></div>
|
||||
<div class="qindex"><a class="qindex" href="#letter_a">a</a> | <a class="qindex" href="#letter_b">b</a> | <a class="qindex" href="#letter_c">c</a> | <a class="qindex" href="#letter_d">d</a> | <a class="qindex" href="#letter_f">f</a> | <a class="qindex" href="#letter_h">h</a> | <a class="qindex" href="#letter_i">i</a> | <a class="qindex" href="#letter_j">j</a> | <a class="qindex" href="#letter_l">l</a> | <a class="qindex" href="#letter_o">o</a> | <a class="qindex" href="#letter_r">r</a> | <a class="qindex" href="#letter_s">s</a> | <a class="qindex" href="#letter_u">u</a> | <a class="qindex" href="#letter_w">w</a> | <a class="qindex" href="#letter_x">x</a></div>
|
||||
</div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated on Sat Oct 26 2019 14:39:09 for MobileFFmpeg Android API by  <a href="http://www.doxygen.org/index.html">
|
||||
Generated on Sun Jan 12 2020 21:33:06 for MobileFFmpeg Android API by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.16
|
||||
</a> 1.8.17
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.16"/>
|
||||
<meta name="generator" content="Doxygen 1.8.17"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>MobileFFmpeg Android API: OutputFilter Struct Reference</title>
|
||||
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
|
||||
@@ -22,7 +22,7 @@
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">MobileFFmpeg Android API
|
||||
 <span id="projectnumber">4.3</span>
|
||||
 <span id="projectnumber">4.3.1</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -30,7 +30,7 @@
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.16 -->
|
||||
<!-- Generated by Doxygen 1.8.17 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
|
||||
@@ -104,7 +104,7 @@ Data Fields</h2></td></tr>
|
||||
</table>
|
||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||
<div class="textblock">
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00273">273</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00279">279</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
</div><h2 class="groupheader">Field Documentation</h2>
|
||||
<a id="ae591539feb7f41d19236244a0dcf3896"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#ae591539feb7f41d19236244a0dcf3896">◆ </a></span>channel_layout</h2>
|
||||
@@ -118,7 +118,7 @@ Data Fields</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00288">288</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00294">294</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -134,7 +134,7 @@ Data Fields</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00292">292</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00298">298</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -150,7 +150,7 @@ Data Fields</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00274">274</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00280">280</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -166,7 +166,7 @@ Data Fields</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00286">286</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00292">292</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -182,7 +182,7 @@ Data Fields</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00291">291</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00297">297</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -198,7 +198,7 @@ Data Fields</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00285">285</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00291">291</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -214,7 +214,7 @@ Data Fields</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00276">276</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00282">282</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -230,7 +230,7 @@ Data Fields</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00284">284</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00290">290</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -246,7 +246,7 @@ Data Fields</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00277">277</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00283">283</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -262,7 +262,7 @@ Data Fields</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00275">275</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00281">281</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -278,7 +278,7 @@ Data Fields</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00280">280</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00286">286</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -294,7 +294,7 @@ Data Fields</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00287">287</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00293">293</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -310,7 +310,7 @@ Data Fields</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00293">293</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00299">299</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -326,7 +326,7 @@ Data Fields</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00281">281</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00287">287</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -342,7 +342,7 @@ Data Fields</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00284">284</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00290">290</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -352,9 +352,9 @@ Data Fields</h2></td></tr>
|
||||
</div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated on Sat Oct 26 2019 14:39:09 for MobileFFmpeg Android API by  <a href="http://www.doxygen.org/index.html">
|
||||
Generated on Sun Jan 12 2020 21:33:06 for MobileFFmpeg Android API by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.16
|
||||
</a> 1.8.17
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -0,0 +1,411 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.17"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>MobileFFmpeg Android API: WriterContext Struct Reference</title>
|
||||
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="../../jquery.js"></script>
|
||||
<script type="text/javascript" src="../../dynsections.js"></script>
|
||||
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="../../search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="../../search/search.js"></script>
|
||||
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">MobileFFmpeg Android API
|
||||
 <span id="projectnumber">4.3.1</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.17 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="../../menudata.js"></script>
|
||||
<script type="text/javascript" src="../../menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('../../',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
</div><!-- top -->
|
||||
<div class="header">
|
||||
<div class="summary">
|
||||
<a href="#pub-attribs">Data Fields</a> </div>
|
||||
<div class="headertitle">
|
||||
<div class="title">WriterContext Struct Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
|
||||
Data Fields</h2></td></tr>
|
||||
<tr class="memitem:a9a134275e24f0ed7ceb2108e144b031d"><td class="memItemLeft" align="right" valign="top">const AVClass * </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/da2/struct_writer_context.html#a9a134275e24f0ed7ceb2108e144b031d">class</a></td></tr>
|
||||
<tr class="memdesc:a9a134275e24f0ed7ceb2108e144b031d"><td class="mdescLeft"> </td><td class="mdescRight">class of the writer <a href="../../d1/da2/struct_writer_context.html#a9a134275e24f0ed7ceb2108e144b031d">More...</a><br /></td></tr>
|
||||
<tr class="separator:a9a134275e24f0ed7ceb2108e144b031d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ae5665d3128f57b9024da5d5d029c83a4"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="../../d6/dff/struct_writer.html">Writer</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/da2/struct_writer_context.html#ae5665d3128f57b9024da5d5d029c83a4">writer</a></td></tr>
|
||||
<tr class="memdesc:ae5665d3128f57b9024da5d5d029c83a4"><td class="mdescLeft"> </td><td class="mdescRight">the <a class="el" href="../../d6/dff/struct_writer.html">Writer</a> of which this is an instance <a href="../../d1/da2/struct_writer_context.html#ae5665d3128f57b9024da5d5d029c83a4">More...</a><br /></td></tr>
|
||||
<tr class="separator:ae5665d3128f57b9024da5d5d029c83a4"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a366a8bd11cf898f02beca2f14478ed97"><td class="memItemLeft" align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/da2/struct_writer_context.html#a366a8bd11cf898f02beca2f14478ed97">name</a></td></tr>
|
||||
<tr class="memdesc:a366a8bd11cf898f02beca2f14478ed97"><td class="mdescLeft"> </td><td class="mdescRight">name of this writer instance <a href="../../d1/da2/struct_writer_context.html#a366a8bd11cf898f02beca2f14478ed97">More...</a><br /></td></tr>
|
||||
<tr class="separator:a366a8bd11cf898f02beca2f14478ed97"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a5b071322a7adc4478ba1c381bdc68202"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/da2/struct_writer_context.html#a5b071322a7adc4478ba1c381bdc68202">priv</a></td></tr>
|
||||
<tr class="memdesc:a5b071322a7adc4478ba1c381bdc68202"><td class="mdescLeft"> </td><td class="mdescRight">private data for use by the filter <a href="../../d1/da2/struct_writer_context.html#a5b071322a7adc4478ba1c381bdc68202">More...</a><br /></td></tr>
|
||||
<tr class="separator:a5b071322a7adc4478ba1c381bdc68202"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:aa7cd84605a2d2d861d6540e07fa8dd73"><td class="memItemLeft" align="right" valign="top">const struct <a class="el" href="../../d9/d11/structsection.html">section</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/da2/struct_writer_context.html#aa7cd84605a2d2d861d6540e07fa8dd73">sections</a></td></tr>
|
||||
<tr class="memdesc:aa7cd84605a2d2d861d6540e07fa8dd73"><td class="mdescLeft"> </td><td class="mdescRight">array containing all sections <a href="../../d1/da2/struct_writer_context.html#aa7cd84605a2d2d861d6540e07fa8dd73">More...</a><br /></td></tr>
|
||||
<tr class="separator:aa7cd84605a2d2d861d6540e07fa8dd73"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a802ea030a8d391905498183a514a7e0c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/da2/struct_writer_context.html#a802ea030a8d391905498183a514a7e0c">nb_sections</a></td></tr>
|
||||
<tr class="memdesc:a802ea030a8d391905498183a514a7e0c"><td class="mdescLeft"> </td><td class="mdescRight">number of sections <a href="../../d1/da2/struct_writer_context.html#a802ea030a8d391905498183a514a7e0c">More...</a><br /></td></tr>
|
||||
<tr class="separator:a802ea030a8d391905498183a514a7e0c"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a70f4367919173df339905042a73df0f4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/da2/struct_writer_context.html#a70f4367919173df339905042a73df0f4">level</a></td></tr>
|
||||
<tr class="memdesc:a70f4367919173df339905042a73df0f4"><td class="mdescLeft"> </td><td class="mdescRight">current level, starting from 0 <a href="../../d1/da2/struct_writer_context.html#a70f4367919173df339905042a73df0f4">More...</a><br /></td></tr>
|
||||
<tr class="separator:a70f4367919173df339905042a73df0f4"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a146664adf19a884f214fe3729343dc1a"><td class="memItemLeft" align="right" valign="top">unsigned <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/da2/struct_writer_context.html#a146664adf19a884f214fe3729343dc1a">nb_item</a> [<a class="el" href="../../d8/d78/fftools__ffprobe_8c.html#a2f442d8e70375b779fedabf97069dd93">SECTION_MAX_NB_LEVELS</a>]</td></tr>
|
||||
<tr class="separator:a146664adf19a884f214fe3729343dc1a"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a1a3764eca79f01c7935f6b00fb703ae9"><td class="memItemLeft" align="right" valign="top">const struct <a class="el" href="../../d9/d11/structsection.html">section</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/da2/struct_writer_context.html#a1a3764eca79f01c7935f6b00fb703ae9">section</a> [<a class="el" href="../../d8/d78/fftools__ffprobe_8c.html#a2f442d8e70375b779fedabf97069dd93">SECTION_MAX_NB_LEVELS</a>]</td></tr>
|
||||
<tr class="separator:a1a3764eca79f01c7935f6b00fb703ae9"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a5c4e2da0240ebfea6358065cfc923e4e"><td class="memItemLeft" align="right" valign="top">AVBPrint </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/da2/struct_writer_context.html#a5c4e2da0240ebfea6358065cfc923e4e">section_pbuf</a> [<a class="el" href="../../d8/d78/fftools__ffprobe_8c.html#a2f442d8e70375b779fedabf97069dd93">SECTION_MAX_NB_LEVELS</a>]</td></tr>
|
||||
<tr class="separator:a5c4e2da0240ebfea6358065cfc923e4e"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a735c05fb40aac83eeaa72ec9f3bd9c8d"><td class="memItemLeft" align="right" valign="top">unsigned <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/da2/struct_writer_context.html#a735c05fb40aac83eeaa72ec9f3bd9c8d">nb_section_packet</a></td></tr>
|
||||
<tr class="memdesc:a735c05fb40aac83eeaa72ec9f3bd9c8d"><td class="mdescLeft"> </td><td class="mdescRight">number of the packet section in case we are in "packets_and_frames" section <a href="../../d1/da2/struct_writer_context.html#a735c05fb40aac83eeaa72ec9f3bd9c8d">More...</a><br /></td></tr>
|
||||
<tr class="separator:a735c05fb40aac83eeaa72ec9f3bd9c8d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a0a6292cb0341b8c989f463d17c2b1c49"><td class="memItemLeft" align="right" valign="top">unsigned <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/da2/struct_writer_context.html#a0a6292cb0341b8c989f463d17c2b1c49">nb_section_frame</a></td></tr>
|
||||
<tr class="memdesc:a0a6292cb0341b8c989f463d17c2b1c49"><td class="mdescLeft"> </td><td class="mdescRight">number of the frame section in case we are in "packets_and_frames" section <a href="../../d1/da2/struct_writer_context.html#a0a6292cb0341b8c989f463d17c2b1c49">More...</a><br /></td></tr>
|
||||
<tr class="separator:a0a6292cb0341b8c989f463d17c2b1c49"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a70cdd0ee0389abba9865de653aac4de1"><td class="memItemLeft" align="right" valign="top">unsigned <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/da2/struct_writer_context.html#a70cdd0ee0389abba9865de653aac4de1">nb_section_packet_frame</a></td></tr>
|
||||
<tr class="memdesc:a70cdd0ee0389abba9865de653aac4de1"><td class="mdescLeft"> </td><td class="mdescRight">nb_section_packet or nb_section_frame according if is_packets_and_frames <a href="../../d1/da2/struct_writer_context.html#a70cdd0ee0389abba9865de653aac4de1">More...</a><br /></td></tr>
|
||||
<tr class="separator:a70cdd0ee0389abba9865de653aac4de1"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ae4d434ae00d70b9f03be447b7c8fc02b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/da2/struct_writer_context.html#ae4d434ae00d70b9f03be447b7c8fc02b">string_validation</a></td></tr>
|
||||
<tr class="separator:ae4d434ae00d70b9f03be447b7c8fc02b"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a347ccaf7bdb45104accb665cab1b093f"><td class="memItemLeft" align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/da2/struct_writer_context.html#a347ccaf7bdb45104accb665cab1b093f">string_validation_replacement</a></td></tr>
|
||||
<tr class="separator:a347ccaf7bdb45104accb665cab1b093f"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ac2b79828ee0384f432182d1a03bf0083"><td class="memItemLeft" align="right" valign="top">unsigned <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/da2/struct_writer_context.html#ac2b79828ee0384f432182d1a03bf0083">string_validation_utf8_flags</a></td></tr>
|
||||
<tr class="separator:ac2b79828ee0384f432182d1a03bf0083"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||
<div class="textblock">
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00456">456</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
</div><h2 class="groupheader">Field Documentation</h2>
|
||||
<a id="a9a134275e24f0ed7ceb2108e144b031d"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a9a134275e24f0ed7ceb2108e144b031d">◆ </a></span>class</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">const AVClass* WriterContext::class</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>class of the writer </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00457">457</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="a70f4367919173df339905042a73df0f4"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a70f4367919173df339905042a73df0f4">◆ </a></span>level</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> WriterContext::level</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>current level, starting from 0 </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00465">465</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="a366a8bd11cf898f02beca2f14478ed97"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a366a8bd11cf898f02beca2f14478ed97">◆ </a></span>name</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">char* WriterContext::name</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>name of this writer instance </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00459">459</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="a146664adf19a884f214fe3729343dc1a"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a146664adf19a884f214fe3729343dc1a">◆ </a></span>nb_item</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">unsigned <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> WriterContext::nb_item[<a class="el" href="../../d8/d78/fftools__ffprobe_8c.html#a2f442d8e70375b779fedabf97069dd93">SECTION_MAX_NB_LEVELS</a>]</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
<p>number of the item printed in the given section, starting from 0 </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00468">468</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="a0a6292cb0341b8c989f463d17c2b1c49"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a0a6292cb0341b8c989f463d17c2b1c49">◆ </a></span>nb_section_frame</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">unsigned <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> WriterContext::nb_section_frame</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>number of the frame section in case we are in "packets_and_frames" section </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00476">476</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="a735c05fb40aac83eeaa72ec9f3bd9c8d"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a735c05fb40aac83eeaa72ec9f3bd9c8d">◆ </a></span>nb_section_packet</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">unsigned <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> WriterContext::nb_section_packet</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>number of the packet section in case we are in "packets_and_frames" section </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00475">475</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="a70cdd0ee0389abba9865de653aac4de1"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a70cdd0ee0389abba9865de653aac4de1">◆ </a></span>nb_section_packet_frame</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">unsigned <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> WriterContext::nb_section_packet_frame</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>nb_section_packet or nb_section_frame according if is_packets_and_frames </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00477">477</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="a802ea030a8d391905498183a514a7e0c"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a802ea030a8d391905498183a514a7e0c">◆ </a></span>nb_sections</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> WriterContext::nb_sections</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>number of sections </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00463">463</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="a5b071322a7adc4478ba1c381bdc68202"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a5b071322a7adc4478ba1c381bdc68202">◆ </a></span>priv</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">void* WriterContext::priv</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>private data for use by the filter </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00460">460</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="a1a3764eca79f01c7935f6b00fb703ae9"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a1a3764eca79f01c7935f6b00fb703ae9">◆ </a></span>section</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">const struct <a class="el" href="../../d9/d11/structsection.html">section</a>* WriterContext::section[<a class="el" href="../../d8/d78/fftools__ffprobe_8c.html#a2f442d8e70375b779fedabf97069dd93">SECTION_MAX_NB_LEVELS</a>]</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
<p>section per each level </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00471">471</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="a5c4e2da0240ebfea6358065cfc923e4e"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a5c4e2da0240ebfea6358065cfc923e4e">◆ </a></span>section_pbuf</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">AVBPrint WriterContext::section_pbuf[<a class="el" href="../../d8/d78/fftools__ffprobe_8c.html#a2f442d8e70375b779fedabf97069dd93">SECTION_MAX_NB_LEVELS</a>]</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
<p>generic print buffer dedicated to each section, used by various writers </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00472">472</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="aa7cd84605a2d2d861d6540e07fa8dd73"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#aa7cd84605a2d2d861d6540e07fa8dd73">◆ </a></span>sections</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">const struct <a class="el" href="../../d9/d11/structsection.html">section</a>* WriterContext::sections</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>array containing all sections </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00462">462</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="ae4d434ae00d70b9f03be447b7c8fc02b"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#ae4d434ae00d70b9f03be447b7c8fc02b">◆ </a></span>string_validation</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> WriterContext::string_validation</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00479">479</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="a347ccaf7bdb45104accb665cab1b093f"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a347ccaf7bdb45104accb665cab1b093f">◆ </a></span>string_validation_replacement</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">char* WriterContext::string_validation_replacement</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00480">480</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="ac2b79828ee0384f432182d1a03bf0083"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#ac2b79828ee0384f432182d1a03bf0083">◆ </a></span>string_validation_utf8_flags</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">unsigned <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> WriterContext::string_validation_utf8_flags</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00481">481</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="ae5665d3128f57b9024da5d5d029c83a4"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#ae5665d3128f57b9024da5d5d029c83a4">◆ </a></span>writer</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">const <a class="el" href="../../d6/dff/struct_writer.html">Writer</a>* WriterContext::writer</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>the <a class="el" href="../../d6/dff/struct_writer.html">Writer</a> of which this is an instance </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00458">458</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<hr/>The documentation for this struct was generated from the following file:<ul>
|
||||
<li><a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a></li>
|
||||
</ul>
|
||||
</div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated on Sun Jan 12 2020 21:33:06 for MobileFFmpeg Android API by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.17
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
||||
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.16"/>
|
||||
<meta name="generator" content="Doxygen 1.8.17"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>MobileFFmpeg Android API: fftools_ffmpeg_hw.c File Reference</title>
|
||||
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
|
||||
@@ -22,7 +22,7 @@
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">MobileFFmpeg Android API
|
||||
 <span id="projectnumber">4.3</span>
|
||||
 <span id="projectnumber">4.3.1</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -30,7 +30,7 @@
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.16 -->
|
||||
<!-- Generated by Doxygen 1.8.17 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
|
||||
@@ -101,10 +101,10 @@ Functions</h2></td></tr>
|
||||
</table><table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
|
||||
Variables</h2></td></tr>
|
||||
<tr class="memitem:a117e16c087f1cbe998ac5f4681f3479c"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c.html#a117e16c087f1cbe998ac5f4681f3479c">nb_hw_devices</a></td></tr>
|
||||
<tr class="separator:a117e16c087f1cbe998ac5f4681f3479c"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a0234e653aac72d16f1cbd6c1088f1352"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="../../de/dc7/struct_h_w_device.html">HWDevice</a> ** </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c.html#a0234e653aac72d16f1cbd6c1088f1352">hw_devices</a></td></tr>
|
||||
<tr class="separator:a0234e653aac72d16f1cbd6c1088f1352"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:acea1bac2a399307791945b15467b1f75"><td class="memItemLeft" align="right" valign="top">__thread <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c.html#acea1bac2a399307791945b15467b1f75">nb_hw_devices</a></td></tr>
|
||||
<tr class="separator:acea1bac2a399307791945b15467b1f75"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ad66ab6371d9721a18af13707d8b2735c"><td class="memItemLeft" align="right" valign="top">__thread <a class="el" href="../../de/dc7/struct_h_w_device.html">HWDevice</a> ** </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c.html#ad66ab6371d9721a18af13707d8b2735c">hw_devices</a></td></tr>
|
||||
<tr class="separator:ad66ab6371d9721a18af13707d8b2735c"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
<h2 class="groupheader">Function Documentation</h2>
|
||||
<a id="a27d1714061bcef2cc6c6ef59c2b54bd3"></a>
|
||||
@@ -131,7 +131,7 @@ Variables</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00058">58</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00061">61</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -159,7 +159,7 @@ Variables</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00073">73</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00076">76</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -179,7 +179,7 @@ Variables</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00275">275</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00281">281</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -199,7 +199,7 @@ Variables</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00048">48</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00051">51</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -227,7 +227,7 @@ Variables</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00034">34</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00037">37</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -257,7 +257,7 @@ Variables</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00098">98</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00101">101</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -301,7 +301,7 @@ Variables</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00232">232</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00238">238</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -329,7 +329,7 @@ Variables</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00287">287</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00293">293</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -349,7 +349,7 @@ Variables</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00304">304</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00310">310</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -369,7 +369,7 @@ Variables</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00420">420</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00426">426</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -389,7 +389,7 @@ Variables</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00478">478</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00484">484</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -427,65 +427,49 @@ Variables</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00436">436</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00442">442</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<h2 class="groupheader">Variable Documentation</h2>
|
||||
<a id="a0234e653aac72d16f1cbd6c1088f1352"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a0234e653aac72d16f1cbd6c1088f1352">◆ </a></span>hw_devices</h2>
|
||||
<a id="ad66ab6371d9721a18af13707d8b2735c"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#ad66ab6371d9721a18af13707d8b2735c">◆ </a></span>hw_devices</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="mlabels">
|
||||
<tr>
|
||||
<td class="mlabels-left">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname"><a class="el" href="../../de/dc7/struct_h_w_device.html">HWDevice</a>** hw_devices</td>
|
||||
<td class="memname">__thread <a class="el" href="../../de/dc7/struct_h_w_device.html">HWDevice</a>** hw_devices</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td class="mlabels-right">
|
||||
<span class="mlabels"><span class="mlabel">static</span></span> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00032">32</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00035">35</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="a117e16c087f1cbe998ac5f4681f3479c"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a117e16c087f1cbe998ac5f4681f3479c">◆ </a></span>nb_hw_devices</h2>
|
||||
<a id="acea1bac2a399307791945b15467b1f75"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#acea1bac2a399307791945b15467b1f75">◆ </a></span>nb_hw_devices</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="mlabels">
|
||||
<tr>
|
||||
<td class="mlabels-left">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> nb_hw_devices</td>
|
||||
<td class="memname">__thread <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> nb_hw_devices</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td class="mlabels-right">
|
||||
<span class="mlabels"><span class="mlabel">static</span></span> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00031">31</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html#l00034">34</a> of file <a class="el" href="../../d1/dba/fftools__ffmpeg__hw_8c_source.html">fftools_ffmpeg_hw.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated on Sat Oct 26 2019 14:39:09 for MobileFFmpeg Android API by  <a href="http://www.doxygen.org/index.html">
|
||||
Generated on Sun Jan 12 2020 21:33:05 for MobileFFmpeg Android API by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.16
|
||||
</a> 1.8.17
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.16"/>
|
||||
<meta name="generator" content="Doxygen 1.8.17"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>MobileFFmpeg Android API: fftools_ffmpeg_filter.c File Reference</title>
|
||||
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
|
||||
@@ -22,7 +22,7 @@
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">MobileFFmpeg Android API
|
||||
 <span id="projectnumber">4.3</span>
|
||||
 <span id="projectnumber">4.3.1</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -30,7 +30,7 @@
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.16 -->
|
||||
<!-- Generated by Doxygen 1.8.17 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
|
||||
@@ -174,7 +174,7 @@ Variables</h2></td></tr>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
<b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">do</span> { \</div>
|
||||
<b>Value:</b><div class="fragment"><div class="line"> <span class="keywordflow">do</span> { \</div>
|
||||
<div class="line"> AVFilterContext *filt_ctx; \</div>
|
||||
<div class="line"> \</div>
|
||||
<div class="line"> av_log(NULL, AV_LOG_INFO, opt_name <span class="stringliteral">" is forwarded to lavfi "</span> \</div>
|
||||
@@ -227,7 +227,7 @@ Variables</h2></td></tr>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
<b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">do</span> { \</div>
|
||||
<b>Value:</b><div class="fragment"><div class="line"> <span class="keywordflow">do</span> { \</div>
|
||||
<div class="line"> AVFilterContext *filt_ctx; \</div>
|
||||
<div class="line"> \</div>
|
||||
<div class="line"> av_log(NULL, AV_LOG_INFO, opt_name <span class="stringliteral">" is forwarded to lavfi "</span> \</div>
|
||||
@@ -1273,13 +1273,13 @@ Variables</h2></td></tr>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- contents -->
|
||||
<div class="ttc" id="astruct_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#l00273">fftools_ffmpeg.h:273</a></div></div>
|
||||
<div class="ttc" id="astruct_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#l00059">mobileffmpeg.c:59</a></div></div>
|
||||
<div class="ttc" id="astruct_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#l00279">fftools_ffmpeg.h:279</a></div></div>
|
||||
<div class="ttc" id="astruct_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#l00061">mobileffmpeg.c:61</a></div></div>
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated on Sat Oct 26 2019 14:39:09 for MobileFFmpeg Android API by  <a href="http://www.doxygen.org/index.html">
|
||||
Generated on Sun Jan 12 2020 21:33:05 for MobileFFmpeg Android API by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.16
|
||||
</a> 1.8.17
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.16"/>
|
||||
<meta name="generator" content="Doxygen 1.8.17"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>MobileFFmpeg Android API: fftools_ffmpeg_filter.c Source File</title>
|
||||
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
|
||||
@@ -22,7 +22,7 @@
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">MobileFFmpeg Android API
|
||||
 <span id="projectnumber">4.3</span>
|
||||
 <span id="projectnumber">4.3.1</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -30,7 +30,7 @@
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.16 -->
|
||||
<!-- Generated by Doxygen 1.8.17 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
|
||||
@@ -276,7 +276,7 @@ $(function() {
|
||||
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  </div>
|
||||
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">if</span> (!fg)</div>
|
||||
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <a class="code" href="../../d7/dcc/fftools__cmdutils_8c.html#a00fcf983c7dd20dd65568b3ebc20ed44">exit_program</a>(1);</div>
|
||||
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#a3ec6739834ba482eacc125e05b59b246">index</a> = <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a25562f714212eb22a94a33c076126461">nb_filtergraphs</a>;</div>
|
||||
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#a3ec6739834ba482eacc125e05b59b246">index</a> = <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#ac69138c251f85a6e3233c9a70884be93">nb_filtergraphs</a>;</div>
|
||||
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  </div>
|
||||
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <a class="code" href="../../d8/d4e/fftools__cmdutils_8h.html#aa75501e4e249657d5f0df6d7e8645d4f">GROW_ARRAY</a>(fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#aa078de74cae0940747ba826567b74aef">outputs</a>, fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#a92c7f6faf7e95b259bce1c717d43b4ee">nb_outputs</a>);</div>
|
||||
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keywordflow">if</span> (!(fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#aa078de74cae0940747ba826567b74aef">outputs</a>[0] = av_mallocz(<span class="keyword">sizeof</span>(*fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#aa078de74cae0940747ba826567b74aef">outputs</a>[0]))))</div>
|
||||
@@ -301,8 +301,8 @@ $(function() {
|
||||
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <a class="code" href="../../d8/d4e/fftools__cmdutils_8h.html#aa75501e4e249657d5f0df6d7e8645d4f">GROW_ARRAY</a>(ist->filters, ist->nb_filters);</div>
|
||||
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  ist->filters[ist->nb_filters - 1] = fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#afb2dea711d92a8a8cb94eebecd9c1e13">inputs</a>[0];</div>
|
||||
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  </div>
|
||||
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <a class="code" href="../../d8/d4e/fftools__cmdutils_8h.html#aa75501e4e249657d5f0df6d7e8645d4f">GROW_ARRAY</a>(<a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a69604b80f08f69c2870b8b97da11c931">filtergraphs</a>, <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a25562f714212eb22a94a33c076126461">nb_filtergraphs</a>);</div>
|
||||
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a69604b80f08f69c2870b8b97da11c931">filtergraphs</a>[<a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a25562f714212eb22a94a33c076126461">nb_filtergraphs</a> - 1] = fg;</div>
|
||||
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <a class="code" href="../../d8/d4e/fftools__cmdutils_8h.html#aa75501e4e249657d5f0df6d7e8645d4f">GROW_ARRAY</a>(<a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a902ed0b2ffc617e274426bc05118f1c3">filtergraphs</a>, <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#ac69138c251f85a6e3233c9a70884be93">nb_filtergraphs</a>);</div>
|
||||
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a902ed0b2ffc617e274426bc05118f1c3">filtergraphs</a>[<a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#ac69138c251f85a6e3233c9a70884be93">nb_filtergraphs</a> - 1] = fg;</div>
|
||||
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  </div>
|
||||
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> }</div>
|
||||
@@ -345,12 +345,12 @@ $(function() {
|
||||
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="keywordtype">char</span> *p;</div>
|
||||
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordtype">int</span> file_idx = strtol(in->name, &p, 0);</div>
|
||||
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  </div>
|
||||
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordflow">if</span> (file_idx < 0 || file_idx >= <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a5f5fcdd4b6cea118793d38dfa2da4741">nb_input_files</a>) {</div>
|
||||
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordflow">if</span> (file_idx < 0 || file_idx >= <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a35146af7b101927e2e6aaaf49022f9b7">nb_input_files</a>) {</div>
|
||||
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  av_log(NULL, AV_LOG_FATAL, <span class="stringliteral">"Invalid file index %d in filtergraph description %s.\n"</span>,</div>
|
||||
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  file_idx, fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#ad45139bb5ec5c7766be0b216f9c8c2c4">graph_desc</a>);</div>
|
||||
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <a class="code" href="../../d7/dcc/fftools__cmdutils_8c.html#a00fcf983c7dd20dd65568b3ebc20ed44">exit_program</a>(1);</div>
|
||||
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  }</div>
|
||||
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  s = <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a30b4858540ac444ef7dab2ec3b7f5be0">input_files</a>[file_idx]-><a class="code" href="../../d8/d99/struct_input_file.html#a4062ac530db413964aa76090995b85cd">ctx</a>;</div>
|
||||
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  s = <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a8815f40afdcda266b01da4b3137a99a3">input_files</a>[file_idx]-><a class="code" href="../../d8/d99/struct_input_file.html#a4062ac530db413964aa76090995b85cd">ctx</a>;</div>
|
||||
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  </div>
|
||||
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordflow">for</span> (i = 0; i < s->nb_streams; i++) {</div>
|
||||
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keyword">enum</span> AVMediaType stream_type = s->streams[i]->codecpar->codec_type;</div>
|
||||
@@ -368,7 +368,7 @@ $(function() {
|
||||
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="stringliteral">"matches no streams.\n"</span>, p, fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#ad45139bb5ec5c7766be0b216f9c8c2c4">graph_desc</a>);</div>
|
||||
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <a class="code" href="../../d7/dcc/fftools__cmdutils_8c.html#a00fcf983c7dd20dd65568b3ebc20ed44">exit_program</a>(1);</div>
|
||||
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  }</div>
|
||||
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  ist = <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#aa80f29f39afa7345065ee7019c879980">input_streams</a>[<a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a30b4858540ac444ef7dab2ec3b7f5be0">input_files</a>[file_idx]-><a class="code" href="../../d8/d99/struct_input_file.html#ac2f5772aebd0118a4c464a268dbb4d9c">ist_index</a> + st->index];</div>
|
||||
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  ist = <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a117ba63aa23e378afe665cc6b7c7e043">input_streams</a>[<a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a8815f40afdcda266b01da4b3137a99a3">input_files</a>[file_idx]-><a class="code" href="../../d8/d99/struct_input_file.html#ac2f5772aebd0118a4c464a268dbb4d9c">ist_index</a> + st->index];</div>
|
||||
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keywordflow">if</span> (ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a86b730f87f0f8ebd088f94af51d91b96">user_set_discard</a> == AVDISCARD_ALL) {</div>
|
||||
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  av_log(NULL, AV_LOG_FATAL, <span class="stringliteral">"Stream specifier '%s' in filtergraph description %s "</span></div>
|
||||
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="stringliteral">"matches a disabled input stream.\n"</span>, p, fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#ad45139bb5ec5c7766be0b216f9c8c2c4">graph_desc</a>);</div>
|
||||
@@ -376,14 +376,14 @@ $(function() {
|
||||
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  }</div>
|
||||
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="comment">/* find the first unused stream of corresponding type */</span></div>
|
||||
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keywordflow">for</span> (i = 0; i < <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a4d798d73986e80662044e710a8fb4984">nb_input_streams</a>; i++) {</div>
|
||||
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  ist = <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#aa80f29f39afa7345065ee7019c879980">input_streams</a>[i];</div>
|
||||
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keywordflow">for</span> (i = 0; i < <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a19a9c5bb8abc454adeccecdce35135c2">nb_input_streams</a>; i++) {</div>
|
||||
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  ist = <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a117ba63aa23e378afe665cc6b7c7e043">input_streams</a>[i];</div>
|
||||
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="keywordflow">if</span> (ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a86b730f87f0f8ebd088f94af51d91b96">user_set_discard</a> == AVDISCARD_ALL)</div>
|
||||
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keywordflow">continue</span>;</div>
|
||||
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <span class="keywordflow">if</span> (ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a511370b3dc7929803575d5d5201e8db1">dec_ctx</a>->codec_type == type && ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#ac39249a26eeec2ed084fcc433ec9825e">discard</a>)</div>
|
||||
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <span class="keywordflow">if</span> (ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a550ceee60cb995b284b52962dcba6597">dec_ctx</a>->codec_type == type && ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#ac39249a26eeec2ed084fcc433ec9825e">discard</a>)</div>
|
||||
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <span class="keywordflow">break</span>;</div>
|
||||
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  }</div>
|
||||
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <span class="keywordflow">if</span> (i == <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a4d798d73986e80662044e710a8fb4984">nb_input_streams</a>) {</div>
|
||||
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <span class="keywordflow">if</span> (i == <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a19a9c5bb8abc454adeccecdce35135c2">nb_input_streams</a>) {</div>
|
||||
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  av_log(NULL, AV_LOG_FATAL, <span class="stringliteral">"Cannot find a matching stream for "</span></div>
|
||||
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="stringliteral">"unlabeled input pad %d on filter %s\n"</span>, in->pad_idx,</div>
|
||||
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  in->filter_ctx->name);</div>
|
||||
@@ -394,7 +394,7 @@ $(function() {
|
||||
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  </div>
|
||||
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#ac39249a26eeec2ed084fcc433ec9825e">discard</a> = 0;</div>
|
||||
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#ac9fc51324b931c1db5c5c1445fe70c3b">decoding_needed</a> |= <a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a69301b0986380d3c18feb65b0ac128c4">DECODING_FOR_FILTER</a>;</div>
|
||||
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a32038bb58a25b389a4d2c411a8d16269">st</a>->discard = AVDISCARD_NONE;</div>
|
||||
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#acf438e2a33238676cb3f68b39ae18049">st</a>->discard = AVDISCARD_NONE;</div>
|
||||
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  </div>
|
||||
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <a class="code" href="../../d8/d4e/fftools__cmdutils_8h.html#aa75501e4e249657d5f0df6d7e8645d4f">GROW_ARRAY</a>(fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#afb2dea711d92a8a8cb94eebecd9c1e13">inputs</a>, fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#aa88faf44822ec4e04597a6eef12a7760">nb_inputs</a>);</div>
|
||||
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordflow">if</span> (!(fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#afb2dea711d92a8a8cb94eebecd9c1e13">inputs</a>[fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#aa88faf44822ec4e04597a6eef12a7760">nb_inputs</a> - 1] = av_mallocz(<span class="keyword">sizeof</span>(*fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#afb2dea711d92a8a8cb94eebecd9c1e13">inputs</a>[0]))))</div>
|
||||
@@ -402,7 +402,7 @@ $(function() {
|
||||
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#afb2dea711d92a8a8cb94eebecd9c1e13">inputs</a>[fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#aa88faf44822ec4e04597a6eef12a7760">nb_inputs</a> - 1]-><a class="code" href="../../d7/d0c/struct_input_filter.html#a495a9bf2659a91ffa184a4cd9395469b">ist</a> = ist;</div>
|
||||
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#afb2dea711d92a8a8cb94eebecd9c1e13">inputs</a>[fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#aa88faf44822ec4e04597a6eef12a7760">nb_inputs</a> - 1]-><a class="code" href="../../d7/d0c/struct_input_filter.html#ab1730578ae74132f67d2e847df4cc624">graph</a> = fg;</div>
|
||||
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#afb2dea711d92a8a8cb94eebecd9c1e13">inputs</a>[fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#aa88faf44822ec4e04597a6eef12a7760">nb_inputs</a> - 1]-><a class="code" href="../../d7/d0c/struct_input_filter.html#ae704ff879704d2ab90dad159526785e2">format</a> = -1;</div>
|
||||
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#afb2dea711d92a8a8cb94eebecd9c1e13">inputs</a>[fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#aa88faf44822ec4e04597a6eef12a7760">nb_inputs</a> - 1]-><a class="code" href="../../d7/d0c/struct_input_filter.html#aa033b48aa4612dc26aa8e66e83f932bc">type</a> = ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a32038bb58a25b389a4d2c411a8d16269">st</a>->codecpar->codec_type;</div>
|
||||
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#afb2dea711d92a8a8cb94eebecd9c1e13">inputs</a>[fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#aa88faf44822ec4e04597a6eef12a7760">nb_inputs</a> - 1]-><a class="code" href="../../d7/d0c/struct_input_filter.html#aa033b48aa4612dc26aa8e66e83f932bc">type</a> = ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#acf438e2a33238676cb3f68b39ae18049">st</a>->codecpar->codec_type;</div>
|
||||
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#afb2dea711d92a8a8cb94eebecd9c1e13">inputs</a>[fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#aa88faf44822ec4e04597a6eef12a7760">nb_inputs</a> - 1]-><a class="code" href="../../d7/d0c/struct_input_filter.html#a09efa5b4f05e3ca7c08c7ac949466556">name</a> = <a class="code" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a899fd519426902067f15c45b628b601e">describe_filter_link</a>(fg, in, 1);</div>
|
||||
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  </div>
|
||||
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#afb2dea711d92a8a8cb94eebecd9c1e13">inputs</a>[fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#aa88faf44822ec4e04597a6eef12a7760">nb_inputs</a> - 1]-><a class="code" href="../../d7/d0c/struct_input_filter.html#aa3127396f27743175651a8d86e7d0770">frame_queue</a> = av_fifo_alloc(8 * <span class="keyword">sizeof</span>(AVFrame*));</div>
|
||||
@@ -531,7 +531,7 @@ $(function() {
|
||||
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> {</div>
|
||||
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="keywordtype">char</span> *pix_fmts;</div>
|
||||
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <a class="code" href="../../db/dde/struct_output_stream.html">OutputStream</a> *ost = ofilter-><a class="code" href="../../d0/d0f/struct_output_filter.html#a2d283eee3e140f822b5eb381890ba035">ost</a>;</div>
|
||||
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <a class="code" href="../../de/df2/struct_output_file.html">OutputFile</a> *of = <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#adc4bdebb5c8ece97d332af967e83e2e3">output_files</a>[ost-><a class="code" href="../../db/dde/struct_output_stream.html#af608105788daa4300771669d992ef890">file_index</a>];</div>
|
||||
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <a class="code" href="../../de/df2/struct_output_file.html">OutputFile</a> *of = <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a22c5e53407c3f14a8111e898dff42904">output_files</a>[ost-><a class="code" href="../../db/dde/struct_output_stream.html#af608105788daa4300771669d992ef890">file_index</a>];</div>
|
||||
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  AVFilterContext *last_filter = out->filter_ctx;</div>
|
||||
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="keywordtype">int</span> pad_idx = out->pad_idx;</div>
|
||||
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="keywordtype">int</span> ret;</div>
|
||||
@@ -624,7 +624,7 @@ $(function() {
|
||||
<div class="line"><a name="l00556"></a><span class="lineno"><a class="line" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a57f643dc94cbbbb752e2943a7457a668"> 556</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a57f643dc94cbbbb752e2943a7457a668">configure_output_audio_filter</a>(<a class="code" href="../../d9/de7/struct_filter_graph.html">FilterGraph</a> *fg, <a class="code" href="../../d0/d0f/struct_output_filter.html">OutputFilter</a> *ofilter, AVFilterInOut *out)</div>
|
||||
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> {</div>
|
||||
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <a class="code" href="../../db/dde/struct_output_stream.html">OutputStream</a> *ost = ofilter-><a class="code" href="../../d0/d0f/struct_output_filter.html#a2d283eee3e140f822b5eb381890ba035">ost</a>;</div>
|
||||
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  <a class="code" href="../../de/df2/struct_output_file.html">OutputFile</a> *of = <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#adc4bdebb5c8ece97d332af967e83e2e3">output_files</a>[ost-><a class="code" href="../../db/dde/struct_output_stream.html#af608105788daa4300771669d992ef890">file_index</a>];</div>
|
||||
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  <a class="code" href="../../de/df2/struct_output_file.html">OutputFile</a> *of = <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a22c5e53407c3f14a8111e898dff42904">output_files</a>[ost-><a class="code" href="../../db/dde/struct_output_stream.html#af608105788daa4300771669d992ef890">file_index</a>];</div>
|
||||
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  AVCodecContext *codec = ost-><a class="code" href="../../db/dde/struct_output_stream.html#ab7b674f9a0c60e3e02526d560a83f583">enc_ctx</a>;</div>
|
||||
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  AVFilterContext *last_filter = out->filter_ctx;</div>
|
||||
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  <span class="keywordtype">int</span> pad_idx = out->pad_idx;</div>
|
||||
@@ -715,10 +715,10 @@ $(function() {
|
||||
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  pad_idx = 0;</div>
|
||||
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  }</div>
|
||||
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  </div>
|
||||
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <span class="keywordflow">if</span> (<a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a13213d6339827ff18b6af3f0ec13db5e">audio_volume</a> != 256 && 0) {</div>
|
||||
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <span class="keywordflow">if</span> (<a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a363b436188dcb847ebce8ec575fdb395">audio_volume</a> != 256 && 0) {</div>
|
||||
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <span class="keywordtype">char</span> args[256];</div>
|
||||
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  </div>
|
||||
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  snprintf(args, <span class="keyword">sizeof</span>(args), <span class="stringliteral">"%f"</span>, <a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a13213d6339827ff18b6af3f0ec13db5e">audio_volume</a> / 256.);</div>
|
||||
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  snprintf(args, <span class="keyword">sizeof</span>(args), <span class="stringliteral">"%f"</span>, <a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a363b436188dcb847ebce8ec575fdb395">audio_volume</a> / 256.);</div>
|
||||
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <a class="code" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#aba8e85f08c2269c623074c81f0e428d6">AUTO_INSERT_FILTER</a>(<span class="stringliteral">"-vol"</span>, <span class="stringliteral">"volume"</span>, args);</div>
|
||||
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  }</div>
|
||||
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  </div>
|
||||
@@ -766,10 +766,10 @@ $(function() {
|
||||
<div class="line"><a name="l00698"></a><span class="lineno"><a class="line" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#ad7582860b219ad64ec003d5924747d20"> 698</a></span> <span class="keywordtype">void</span> <a class="code" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#ad7582860b219ad64ec003d5924747d20">check_filter_outputs</a>(<span class="keywordtype">void</span>)</div>
|
||||
<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> {</div>
|
||||
<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  <span class="keywordtype">int</span> i;</div>
|
||||
<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  <span class="keywordflow">for</span> (i = 0; i < <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a25562f714212eb22a94a33c076126461">nb_filtergraphs</a>; i++) {</div>
|
||||
<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  <span class="keywordflow">for</span> (i = 0; i < <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#ac69138c251f85a6e3233c9a70884be93">nb_filtergraphs</a>; i++) {</div>
|
||||
<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  <span class="keywordtype">int</span> n;</div>
|
||||
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  <span class="keywordflow">for</span> (n = 0; n < <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a69604b80f08f69c2870b8b97da11c931">filtergraphs</a>[i]-><a class="code" href="../../d9/de7/struct_filter_graph.html#a92c7f6faf7e95b259bce1c717d43b4ee">nb_outputs</a>; n++) {</div>
|
||||
<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <a class="code" href="../../d0/d0f/struct_output_filter.html">OutputFilter</a> *output = <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a69604b80f08f69c2870b8b97da11c931">filtergraphs</a>[i]-><a class="code" href="../../d9/de7/struct_filter_graph.html#aa078de74cae0940747ba826567b74aef">outputs</a>[n];</div>
|
||||
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  <span class="keywordflow">for</span> (n = 0; n < <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a902ed0b2ffc617e274426bc05118f1c3">filtergraphs</a>[i]-><a class="code" href="../../d9/de7/struct_filter_graph.html#a92c7f6faf7e95b259bce1c717d43b4ee">nb_outputs</a>; n++) {</div>
|
||||
<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <a class="code" href="../../d0/d0f/struct_output_filter.html">OutputFilter</a> *output = <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a902ed0b2ffc617e274426bc05118f1c3">filtergraphs</a>[i]-><a class="code" href="../../d9/de7/struct_filter_graph.html#aa078de74cae0940747ba826567b74aef">outputs</a>[n];</div>
|
||||
<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <span class="keywordflow">if</span> (!output-><a class="code" href="../../d0/d0f/struct_output_filter.html#a2d283eee3e140f822b5eb381890ba035">ost</a>) {</div>
|
||||
<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  av_log(NULL, AV_LOG_FATAL, <span class="stringliteral">"Filter %s has an unconnected output\n"</span>, output-><a class="code" href="../../d0/d0f/struct_output_filter.html#a7713667d07c3f7605e6dd24f0ca19940">name</a>);</div>
|
||||
<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  <a class="code" href="../../d7/dcc/fftools__cmdutils_8c.html#a00fcf983c7dd20dd65568b3ebc20ed44">exit_program</a>(1);</div>
|
||||
@@ -780,7 +780,7 @@ $(function() {
|
||||
<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  </div>
|
||||
<div class="line"><a name="l00713"></a><span class="lineno"><a class="line" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a175b3d698e81a2781fddebdbf7209d8f"> 713</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a175b3d698e81a2781fddebdbf7209d8f">sub2video_prepare</a>(<a class="code" href="../../d3/d6e/struct_input_stream.html">InputStream</a> *ist, <a class="code" href="../../d7/d0c/struct_input_filter.html">InputFilter</a> *ifilter)</div>
|
||||
<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> {</div>
|
||||
<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  AVFormatContext *avf = <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a30b4858540ac444ef7dab2ec3b7f5be0">input_files</a>[ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#ad47d834630eee2dca258aa449fb1df47">file_index</a>]-><a class="code" href="../../d8/d99/struct_input_file.html#a4062ac530db413964aa76090995b85cd">ctx</a>;</div>
|
||||
<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  AVFormatContext *avf = <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a8815f40afdcda266b01da4b3137a99a3">input_files</a>[ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#ad47d834630eee2dca258aa449fb1df47">file_index</a>]-><a class="code" href="../../d8/d99/struct_input_file.html#a4062ac530db413964aa76090995b85cd">ctx</a>;</div>
|
||||
<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  <span class="keywordtype">int</span> i, w, h;</div>
|
||||
<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  </div>
|
||||
<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  <span class="comment">/* Compute the size of the canvas for the subtitles stream.</span></div>
|
||||
@@ -801,21 +801,21 @@ $(function() {
|
||||
<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  }</div>
|
||||
<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  av_log(avf, AV_LOG_INFO, <span class="stringliteral">"sub2video: using %dx%d canvas\n"</span>, w, h);</div>
|
||||
<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  }</div>
|
||||
<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a7dc8219f262a8a6ad1c7d2aa48488d6c">sub2video</a>.<a class="code" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#a0bd83c4ad9f5301d63e49a9f94b8cf7d">w</a> = ifilter-><a class="code" href="../../d7/d0c/struct_input_filter.html#af86da4dd2e5092c08e8b171b52c6fa66">width</a> = w;</div>
|
||||
<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a7dc8219f262a8a6ad1c7d2aa48488d6c">sub2video</a>.<a class="code" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#aeecdbc3f86c3bcbf9c42ac7a867e91db">h</a> = ifilter-><a class="code" href="../../d7/d0c/struct_input_filter.html#a2ad802636d7a1f6b3be4eaaa21929c3f">height</a> = h;</div>
|
||||
<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#acc9fee6e45ff302a2c1a06a053cbaa22">sub2video</a>.<a class="code" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#a0bd83c4ad9f5301d63e49a9f94b8cf7d">w</a> = ifilter-><a class="code" href="../../d7/d0c/struct_input_filter.html#af86da4dd2e5092c08e8b171b52c6fa66">width</a> = w;</div>
|
||||
<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#acc9fee6e45ff302a2c1a06a053cbaa22">sub2video</a>.<a class="code" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#aeecdbc3f86c3bcbf9c42ac7a867e91db">h</a> = ifilter-><a class="code" href="../../d7/d0c/struct_input_filter.html#a2ad802636d7a1f6b3be4eaaa21929c3f">height</a> = h;</div>
|
||||
<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  </div>
|
||||
<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  ifilter-><a class="code" href="../../d7/d0c/struct_input_filter.html#af86da4dd2e5092c08e8b171b52c6fa66">width</a> = ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a511370b3dc7929803575d5d5201e8db1">dec_ctx</a>->width ? ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a511370b3dc7929803575d5d5201e8db1">dec_ctx</a>->width : ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a7dc8219f262a8a6ad1c7d2aa48488d6c">sub2video</a>.<a class="code" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#a0bd83c4ad9f5301d63e49a9f94b8cf7d">w</a>;</div>
|
||||
<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  ifilter-><a class="code" href="../../d7/d0c/struct_input_filter.html#a2ad802636d7a1f6b3be4eaaa21929c3f">height</a> = ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a511370b3dc7929803575d5d5201e8db1">dec_ctx</a>->height ? ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a511370b3dc7929803575d5d5201e8db1">dec_ctx</a>->height : ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a7dc8219f262a8a6ad1c7d2aa48488d6c">sub2video</a>.<a class="code" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#aeecdbc3f86c3bcbf9c42ac7a867e91db">h</a>;</div>
|
||||
<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  ifilter-><a class="code" href="../../d7/d0c/struct_input_filter.html#af86da4dd2e5092c08e8b171b52c6fa66">width</a> = ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a550ceee60cb995b284b52962dcba6597">dec_ctx</a>->width ? ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a550ceee60cb995b284b52962dcba6597">dec_ctx</a>->width : ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#acc9fee6e45ff302a2c1a06a053cbaa22">sub2video</a>.<a class="code" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#a0bd83c4ad9f5301d63e49a9f94b8cf7d">w</a>;</div>
|
||||
<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  ifilter-><a class="code" href="../../d7/d0c/struct_input_filter.html#a2ad802636d7a1f6b3be4eaaa21929c3f">height</a> = ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a550ceee60cb995b284b52962dcba6597">dec_ctx</a>->height ? ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a550ceee60cb995b284b52962dcba6597">dec_ctx</a>->height : ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#acc9fee6e45ff302a2c1a06a053cbaa22">sub2video</a>.<a class="code" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#aeecdbc3f86c3bcbf9c42ac7a867e91db">h</a>;</div>
|
||||
<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  </div>
|
||||
<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  <span class="comment">/* rectangles are AV_PIX_FMT_PAL8, but we have no guarantee that the</span></div>
|
||||
<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> <span class="comment"> palettes for all rectangles are identical or compatible */</span></div>
|
||||
<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  ifilter-><a class="code" href="../../d7/d0c/struct_input_filter.html#ae704ff879704d2ab90dad159526785e2">format</a> = AV_PIX_FMT_RGB32;</div>
|
||||
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  </div>
|
||||
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a7dc8219f262a8a6ad1c7d2aa48488d6c">sub2video</a>.<a class="code" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#a0e7ca3e0eebc5db360ae15f2dac3d622">frame</a> = av_frame_alloc();</div>
|
||||
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  <span class="keywordflow">if</span> (!ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a7dc8219f262a8a6ad1c7d2aa48488d6c">sub2video</a>.<a class="code" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#a0e7ca3e0eebc5db360ae15f2dac3d622">frame</a>)</div>
|
||||
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#acc9fee6e45ff302a2c1a06a053cbaa22">sub2video</a>.<a class="code" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#a0e7ca3e0eebc5db360ae15f2dac3d622">frame</a> = av_frame_alloc();</div>
|
||||
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  <span class="keywordflow">if</span> (!ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#acc9fee6e45ff302a2c1a06a053cbaa22">sub2video</a>.<a class="code" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#a0e7ca3e0eebc5db360ae15f2dac3d622">frame</a>)</div>
|
||||
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  <span class="keywordflow">return</span> AVERROR(ENOMEM);</div>
|
||||
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a7dc8219f262a8a6ad1c7d2aa48488d6c">sub2video</a>.<a class="code" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#a992c9fe5de3acf5dce388cffda4fdce8">last_pts</a> = INT64_MIN;</div>
|
||||
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a7dc8219f262a8a6ad1c7d2aa48488d6c">sub2video</a>.<a class="code" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#aaf500e3a36c6e6a6920a8e18c6478a8e">end_pts</a> = INT64_MIN;</div>
|
||||
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#acc9fee6e45ff302a2c1a06a053cbaa22">sub2video</a>.<a class="code" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#a992c9fe5de3acf5dce388cffda4fdce8">last_pts</a> = INT64_MIN;</div>
|
||||
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#acc9fee6e45ff302a2c1a06a053cbaa22">sub2video</a>.<a class="code" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#aaf500e3a36c6e6a6920a8e18c6478a8e">end_pts</a> = INT64_MIN;</div>
|
||||
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> }</div>
|
||||
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  </div>
|
||||
@@ -825,9 +825,9 @@ $(function() {
|
||||
<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  AVFilterContext *last_filter;</div>
|
||||
<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  <span class="keyword">const</span> AVFilter *buffer_filt = avfilter_get_by_name(<span class="stringliteral">"buffer"</span>);</div>
|
||||
<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  <a class="code" href="../../d3/d6e/struct_input_stream.html">InputStream</a> *ist = ifilter-><a class="code" href="../../d7/d0c/struct_input_filter.html#a495a9bf2659a91ffa184a4cd9395469b">ist</a>;</div>
|
||||
<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  <a class="code" href="../../d8/d99/struct_input_file.html">InputFile</a> *f = <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a30b4858540ac444ef7dab2ec3b7f5be0">input_files</a>[ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#ad47d834630eee2dca258aa449fb1df47">file_index</a>];</div>
|
||||
<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  <a class="code" href="../../d8/d99/struct_input_file.html">InputFile</a> *f = <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a8815f40afdcda266b01da4b3137a99a3">input_files</a>[ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#ad47d834630eee2dca258aa449fb1df47">file_index</a>];</div>
|
||||
<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  AVRational tb = ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#afbaeaac6e0b1fc3095bb90f17d58621d">framerate</a>.num ? av_inv_q(ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#afbaeaac6e0b1fc3095bb90f17d58621d">framerate</a>) :</div>
|
||||
<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a32038bb58a25b389a4d2c411a8d16269">st</a>->time_base;</div>
|
||||
<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#acf438e2a33238676cb3f68b39ae18049">st</a>->time_base;</div>
|
||||
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  AVRational fr = ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#afbaeaac6e0b1fc3095bb90f17d58621d">framerate</a>;</div>
|
||||
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  AVRational sar;</div>
|
||||
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  AVBPrint args;</div>
|
||||
@@ -841,16 +841,16 @@ $(function() {
|
||||
<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  memset(par, 0, <span class="keyword">sizeof</span>(*par));</div>
|
||||
<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  par->format = AV_PIX_FMT_NONE;</div>
|
||||
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  </div>
|
||||
<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  <span class="keywordflow">if</span> (ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a511370b3dc7929803575d5d5201e8db1">dec_ctx</a>->codec_type == AVMEDIA_TYPE_AUDIO) {</div>
|
||||
<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  <span class="keywordflow">if</span> (ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a550ceee60cb995b284b52962dcba6597">dec_ctx</a>->codec_type == AVMEDIA_TYPE_AUDIO) {</div>
|
||||
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  av_log(NULL, AV_LOG_ERROR, <span class="stringliteral">"Cannot connect video filter to audio input\n"</span>);</div>
|
||||
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  ret = AVERROR(EINVAL);</div>
|
||||
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  <span class="keywordflow">goto</span> fail;</div>
|
||||
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  }</div>
|
||||
<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  </div>
|
||||
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  <span class="keywordflow">if</span> (!fr.num)</div>
|
||||
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  fr = av_guess_frame_rate(<a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a30b4858540ac444ef7dab2ec3b7f5be0">input_files</a>[ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#ad47d834630eee2dca258aa449fb1df47">file_index</a>]-><a class="code" href="../../d8/d99/struct_input_file.html#a4062ac530db413964aa76090995b85cd">ctx</a>, ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a32038bb58a25b389a4d2c411a8d16269">st</a>, NULL);</div>
|
||||
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  fr = av_guess_frame_rate(<a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a8815f40afdcda266b01da4b3137a99a3">input_files</a>[ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#ad47d834630eee2dca258aa449fb1df47">file_index</a>]-><a class="code" href="../../d8/d99/struct_input_file.html#a4062ac530db413964aa76090995b85cd">ctx</a>, ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#acf438e2a33238676cb3f68b39ae18049">st</a>, NULL);</div>
|
||||
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  </div>
|
||||
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  <span class="keywordflow">if</span> (ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a511370b3dc7929803575d5d5201e8db1">dec_ctx</a>->codec_type == AVMEDIA_TYPE_SUBTITLE) {</div>
|
||||
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  <span class="keywordflow">if</span> (ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a550ceee60cb995b284b52962dcba6597">dec_ctx</a>->codec_type == AVMEDIA_TYPE_SUBTITLE) {</div>
|
||||
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  ret = <a class="code" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a175b3d698e81a2781fddebdbf7209d8f">sub2video_prepare</a>(ist, ifilter);</div>
|
||||
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  <span class="keywordflow">if</span> (ret < 0)</div>
|
||||
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  <span class="keywordflow">goto</span> fail;</div>
|
||||
@@ -865,11 +865,11 @@ $(function() {
|
||||
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  <span class="stringliteral">"pixel_aspect=%d/%d:sws_param=flags=%d"</span>,</div>
|
||||
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  ifilter-><a class="code" href="../../d7/d0c/struct_input_filter.html#af86da4dd2e5092c08e8b171b52c6fa66">width</a>, ifilter-><a class="code" href="../../d7/d0c/struct_input_filter.html#a2ad802636d7a1f6b3be4eaaa21929c3f">height</a>, ifilter-><a class="code" href="../../d7/d0c/struct_input_filter.html#ae704ff879704d2ab90dad159526785e2">format</a>,</div>
|
||||
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  tb.num, tb.den, sar.num, sar.den,</div>
|
||||
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  SWS_BILINEAR + ((ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a511370b3dc7929803575d5d5201e8db1">dec_ctx</a>->flags&AV_CODEC_FLAG_BITEXACT) ? SWS_BITEXACT:0));</div>
|
||||
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  SWS_BILINEAR + ((ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a550ceee60cb995b284b52962dcba6597">dec_ctx</a>->flags&AV_CODEC_FLAG_BITEXACT) ? SWS_BITEXACT:0));</div>
|
||||
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  <span class="keywordflow">if</span> (fr.num && fr.den)</div>
|
||||
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  av_bprintf(&args, <span class="stringliteral">":frame_rate=%d/%d"</span>, fr.num, fr.den);</div>
|
||||
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  snprintf(name, <span class="keyword">sizeof</span>(name), <span class="stringliteral">"graph %d input from stream %d:%d"</span>, fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#a3ec6739834ba482eacc125e05b59b246">index</a>,</div>
|
||||
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#ad47d834630eee2dca258aa449fb1df47">file_index</a>, ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a32038bb58a25b389a4d2c411a8d16269">st</a>->index);</div>
|
||||
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#ad47d834630eee2dca258aa449fb1df47">file_index</a>, ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#acf438e2a33238676cb3f68b39ae18049">st</a>->index);</div>
|
||||
<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  </div>
|
||||
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  </div>
|
||||
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <span class="keywordflow">if</span> ((ret = avfilter_graph_create_filter(&ifilter-><a class="code" href="../../d7/d0c/struct_input_filter.html#a572505eef6ba5714df813d454185019d">filter</a>, buffer_filt, name,</div>
|
||||
@@ -883,7 +883,7 @@ $(function() {
|
||||
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  last_filter = ifilter-><a class="code" href="../../d7/d0c/struct_input_filter.html#a572505eef6ba5714df813d454185019d">filter</a>;</div>
|
||||
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  </div>
|
||||
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  <span class="keywordflow">if</span> (ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#abcb8222561f1ee84a2f7a2157bed356c">autorotate</a>) {</div>
|
||||
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  <span class="keywordtype">double</span> theta = <a class="code" href="../../d7/dcc/fftools__cmdutils_8c.html#a907c42e3f98cc1183a8788033d0aaaf2">get_rotation</a>(ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a32038bb58a25b389a4d2c411a8d16269">st</a>);</div>
|
||||
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  <span class="keywordtype">double</span> theta = <a class="code" href="../../d7/dcc/fftools__cmdutils_8c.html#a907c42e3f98cc1183a8788033d0aaaf2">get_rotation</a>(ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#acf438e2a33238676cb3f68b39ae18049">st</a>);</div>
|
||||
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  </div>
|
||||
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  <span class="keywordflow">if</span> (fabs(theta - 90) < 1.0) {</div>
|
||||
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  ret = <a class="code" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#add10aa9fae87dc2259bc821b29dee0f8">insert_filter</a>(&last_filter, &pad_idx, <span class="stringliteral">"transpose"</span>, <span class="stringliteral">"clock"</span>);</div>
|
||||
@@ -903,11 +903,11 @@ $(function() {
|
||||
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  <span class="keywordflow">return</span> ret;</div>
|
||||
<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  }</div>
|
||||
<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  </div>
|
||||
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <span class="keywordflow">if</span> (<a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a89dec1d1af0e3d343795355d73aed5ae">do_deinterlace</a>) {</div>
|
||||
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <span class="keywordflow">if</span> (<a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a7713e7604e1b50d8f1ba5c3c445dde28">do_deinterlace</a>) {</div>
|
||||
<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  AVFilterContext *yadif;</div>
|
||||
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  </div>
|
||||
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  snprintf(name, <span class="keyword">sizeof</span>(name), <span class="stringliteral">"deinterlace_in_%d_%d"</span>,</div>
|
||||
<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#ad47d834630eee2dca258aa449fb1df47">file_index</a>, ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a32038bb58a25b389a4d2c411a8d16269">st</a>->index);</div>
|
||||
<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#ad47d834630eee2dca258aa449fb1df47">file_index</a>, ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#acf438e2a33238676cb3f68b39ae18049">st</a>->index);</div>
|
||||
<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  <span class="keywordflow">if</span> ((ret = avfilter_graph_create_filter(&yadif,</div>
|
||||
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  avfilter_get_by_name(<span class="stringliteral">"yadif"</span>),</div>
|
||||
<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  name, <span class="stringliteral">""</span>, NULL,</div>
|
||||
@@ -921,10 +921,10 @@ $(function() {
|
||||
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  }</div>
|
||||
<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  </div>
|
||||
<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  snprintf(name, <span class="keyword">sizeof</span>(name), <span class="stringliteral">"trim_in_%d_%d"</span>,</div>
|
||||
<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#ad47d834630eee2dca258aa449fb1df47">file_index</a>, ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a32038bb58a25b389a4d2c411a8d16269">st</a>->index);</div>
|
||||
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <span class="keywordflow">if</span> (<a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#ad4fabc73fffad91c2bfb9fa9954228a8">copy_ts</a>) {</div>
|
||||
<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#ad47d834630eee2dca258aa449fb1df47">file_index</a>, ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#acf438e2a33238676cb3f68b39ae18049">st</a>->index);</div>
|
||||
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <span class="keywordflow">if</span> (<a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a4840dc6953824a08972501cff95620e5">copy_ts</a>) {</div>
|
||||
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  tsoffset = f-><a class="code" href="../../d8/d99/struct_input_file.html#af29c0dd6f71cb1454c23abebca06f604">start_time</a> == AV_NOPTS_VALUE ? 0 : f-><a class="code" href="../../d8/d99/struct_input_file.html#af29c0dd6f71cb1454c23abebca06f604">start_time</a>;</div>
|
||||
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <span class="keywordflow">if</span> (!<a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a12bb391111a730d31c4cdec051769062">start_at_zero</a> && f-><a class="code" href="../../d8/d99/struct_input_file.html#a4062ac530db413964aa76090995b85cd">ctx</a>->start_time != AV_NOPTS_VALUE)</div>
|
||||
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <span class="keywordflow">if</span> (!<a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a9133815d152568ea1d45114b7866253a">start_at_zero</a> && f-><a class="code" href="../../d8/d99/struct_input_file.html#a4062ac530db413964aa76090995b85cd">ctx</a>->start_time != AV_NOPTS_VALUE)</div>
|
||||
<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  tsoffset += f-><a class="code" href="../../d8/d99/struct_input_file.html#a4062ac530db413964aa76090995b85cd">ctx</a>->start_time;</div>
|
||||
<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  }</div>
|
||||
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  ret = <a class="code" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a9464282dd90b2de622c38126485d1a80">insert_trim</a>(((f-><a class="code" href="../../d8/d99/struct_input_file.html#af29c0dd6f71cb1454c23abebca06f604">start_time</a> == AV_NOPTS_VALUE) || !f-><a class="code" href="../../d8/d99/struct_input_file.html#a0d2afa337cfd75b91096045ed941a494">accurate_seek</a>) ?</div>
|
||||
@@ -948,13 +948,13 @@ $(function() {
|
||||
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>  AVFilterContext *last_filter;</div>
|
||||
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  <span class="keyword">const</span> AVFilter *abuffer_filt = avfilter_get_by_name(<span class="stringliteral">"abuffer"</span>);</div>
|
||||
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  <a class="code" href="../../d3/d6e/struct_input_stream.html">InputStream</a> *ist = ifilter-><a class="code" href="../../d7/d0c/struct_input_filter.html#a495a9bf2659a91ffa184a4cd9395469b">ist</a>;</div>
|
||||
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  <a class="code" href="../../d8/d99/struct_input_file.html">InputFile</a> *f = <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a30b4858540ac444ef7dab2ec3b7f5be0">input_files</a>[ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#ad47d834630eee2dca258aa449fb1df47">file_index</a>];</div>
|
||||
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  <a class="code" href="../../d8/d99/struct_input_file.html">InputFile</a> *f = <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a8815f40afdcda266b01da4b3137a99a3">input_files</a>[ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#ad47d834630eee2dca258aa449fb1df47">file_index</a>];</div>
|
||||
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  AVBPrint args;</div>
|
||||
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  <span class="keywordtype">char</span> name[255];</div>
|
||||
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  <span class="keywordtype">int</span> ret, pad_idx = 0;</div>
|
||||
<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  int64_t tsoffset = 0;</div>
|
||||
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  </div>
|
||||
<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  <span class="keywordflow">if</span> (ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a511370b3dc7929803575d5d5201e8db1">dec_ctx</a>->codec_type != AVMEDIA_TYPE_AUDIO) {</div>
|
||||
<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  <span class="keywordflow">if</span> (ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a550ceee60cb995b284b52962dcba6597">dec_ctx</a>->codec_type != AVMEDIA_TYPE_AUDIO) {</div>
|
||||
<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  av_log(NULL, AV_LOG_ERROR, <span class="stringliteral">"Cannot connect audio filter to non audio input\n"</span>);</div>
|
||||
<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  <span class="keywordflow">return</span> AVERROR(EINVAL);</div>
|
||||
<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  }</div>
|
||||
@@ -970,7 +970,7 @@ $(function() {
|
||||
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  <span class="keywordflow">else</span></div>
|
||||
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  av_bprintf(&args, <span class="stringliteral">":channels=%d"</span>, ifilter-><a class="code" href="../../d7/d0c/struct_input_filter.html#ae65ce297679c894d4536e8eaaf623b84">channels</a>);</div>
|
||||
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  snprintf(name, <span class="keyword">sizeof</span>(name), <span class="stringliteral">"graph_%d_in_%d_%d"</span>, fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#a3ec6739834ba482eacc125e05b59b246">index</a>,</div>
|
||||
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#ad47d834630eee2dca258aa449fb1df47">file_index</a>, ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a32038bb58a25b389a4d2c411a8d16269">st</a>->index);</div>
|
||||
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#ad47d834630eee2dca258aa449fb1df47">file_index</a>, ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#acf438e2a33238676cb3f68b39ae18049">st</a>->index);</div>
|
||||
<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  </div>
|
||||
<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  <span class="keywordflow">if</span> ((ret = avfilter_graph_create_filter(&ifilter-><a class="code" href="../../d7/d0c/struct_input_filter.html#a572505eef6ba5714df813d454185019d">filter</a>, abuffer_filt,</div>
|
||||
<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  name, args.str, NULL,</div>
|
||||
@@ -999,12 +999,12 @@ $(function() {
|
||||
<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> <span class="preprocessor"> last_filter = filt_ctx; \</span></div>
|
||||
<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> <span class="preprocessor">} while (0)</span></div>
|
||||
<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>  </div>
|
||||
<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>  <span class="keywordflow">if</span> (<a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a8d030f80a6336997e85f819eba6e1b2c">audio_sync_method</a> > 0) {</div>
|
||||
<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>  <span class="keywordflow">if</span> (<a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a7ebbd72251d3d58fe5b316928a40bed3">audio_sync_method</a> > 0) {</div>
|
||||
<div class="line"><a name="l00935"></a><span class="lineno"> 935</span>  <span class="keywordtype">char</span> args[256] = {0};</div>
|
||||
<div class="line"><a name="l00936"></a><span class="lineno"> 936</span>  </div>
|
||||
<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  av_strlcatf(args, <span class="keyword">sizeof</span>(args), <span class="stringliteral">"async=%d"</span>, <a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a8d030f80a6336997e85f819eba6e1b2c">audio_sync_method</a>);</div>
|
||||
<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  <span class="keywordflow">if</span> (<a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#af2d0a18439b8ab367dbccd8e055e83b3">audio_drift_threshold</a> != 0.1)</div>
|
||||
<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  av_strlcatf(args, <span class="keyword">sizeof</span>(args), <span class="stringliteral">":min_hard_comp=%f"</span>, <a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#af2d0a18439b8ab367dbccd8e055e83b3">audio_drift_threshold</a>);</div>
|
||||
<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  av_strlcatf(args, <span class="keyword">sizeof</span>(args), <span class="stringliteral">"async=%d"</span>, <a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a7ebbd72251d3d58fe5b316928a40bed3">audio_sync_method</a>);</div>
|
||||
<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  <span class="keywordflow">if</span> (<a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a8454a6a2632a5ce0f2983c9499649ede">audio_drift_threshold</a> != 0.1)</div>
|
||||
<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  av_strlcatf(args, <span class="keyword">sizeof</span>(args), <span class="stringliteral">":min_hard_comp=%f"</span>, <a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a8454a6a2632a5ce0f2983c9499649ede">audio_drift_threshold</a>);</div>
|
||||
<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>  <span class="keywordflow">if</span> (!fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#a7bc2aac4115ac1a2fc951e5d0a403824">reconfiguration</a>)</div>
|
||||
<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>  av_strlcatf(args, <span class="keyword">sizeof</span>(args), <span class="stringliteral">":first_pts=0"</span>);</div>
|
||||
<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>  <a class="code" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a9cf53e21bfb4178eefcce6b7dd20eca2">AUTO_INSERT_FILTER_INPUT</a>(<span class="stringliteral">"-async"</span>, <span class="stringliteral">"aresample"</span>, args);</div>
|
||||
@@ -1023,21 +1023,21 @@ $(function() {
|
||||
<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> <span class="comment">// av_bprint_finalize(&pan_buf, NULL);</span></div>
|
||||
<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> <span class="comment">// }</span></div>
|
||||
<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>  </div>
|
||||
<div class="line"><a name="l00958"></a><span class="lineno"> 958</span>  <span class="keywordflow">if</span> (<a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a13213d6339827ff18b6af3f0ec13db5e">audio_volume</a> != 256) {</div>
|
||||
<div class="line"><a name="l00958"></a><span class="lineno"> 958</span>  <span class="keywordflow">if</span> (<a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a363b436188dcb847ebce8ec575fdb395">audio_volume</a> != 256) {</div>
|
||||
<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>  <span class="keywordtype">char</span> args[256];</div>
|
||||
<div class="line"><a name="l00960"></a><span class="lineno"> 960</span>  </div>
|
||||
<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>  av_log(NULL, AV_LOG_WARNING, <span class="stringliteral">"-vol has been deprecated. Use the volume "</span></div>
|
||||
<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>  <span class="stringliteral">"audio filter instead.\n"</span>);</div>
|
||||
<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>  </div>
|
||||
<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  snprintf(args, <span class="keyword">sizeof</span>(args), <span class="stringliteral">"%f"</span>, <a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a13213d6339827ff18b6af3f0ec13db5e">audio_volume</a> / 256.);</div>
|
||||
<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  snprintf(args, <span class="keyword">sizeof</span>(args), <span class="stringliteral">"%f"</span>, <a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a363b436188dcb847ebce8ec575fdb395">audio_volume</a> / 256.);</div>
|
||||
<div class="line"><a name="l00965"></a><span class="lineno"> 965</span>  <a class="code" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a9cf53e21bfb4178eefcce6b7dd20eca2">AUTO_INSERT_FILTER_INPUT</a>(<span class="stringliteral">"-vol"</span>, <span class="stringliteral">"volume"</span>, args);</div>
|
||||
<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>  }</div>
|
||||
<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>  </div>
|
||||
<div class="line"><a name="l00968"></a><span class="lineno"> 968</span>  snprintf(name, <span class="keyword">sizeof</span>(name), <span class="stringliteral">"trim for input stream %d:%d"</span>,</div>
|
||||
<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#ad47d834630eee2dca258aa449fb1df47">file_index</a>, ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a32038bb58a25b389a4d2c411a8d16269">st</a>->index);</div>
|
||||
<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  <span class="keywordflow">if</span> (<a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#ad4fabc73fffad91c2bfb9fa9954228a8">copy_ts</a>) {</div>
|
||||
<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#ad47d834630eee2dca258aa449fb1df47">file_index</a>, ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#acf438e2a33238676cb3f68b39ae18049">st</a>->index);</div>
|
||||
<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  <span class="keywordflow">if</span> (<a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a4840dc6953824a08972501cff95620e5">copy_ts</a>) {</div>
|
||||
<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  tsoffset = f-><a class="code" href="../../d8/d99/struct_input_file.html#af29c0dd6f71cb1454c23abebca06f604">start_time</a> == AV_NOPTS_VALUE ? 0 : f-><a class="code" href="../../d8/d99/struct_input_file.html#af29c0dd6f71cb1454c23abebca06f604">start_time</a>;</div>
|
||||
<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>  <span class="keywordflow">if</span> (!<a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a12bb391111a730d31c4cdec051769062">start_at_zero</a> && f-><a class="code" href="../../d8/d99/struct_input_file.html#a4062ac530db413964aa76090995b85cd">ctx</a>->start_time != AV_NOPTS_VALUE)</div>
|
||||
<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>  <span class="keywordflow">if</span> (!<a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a9133815d152568ea1d45114b7866253a">start_at_zero</a> && f-><a class="code" href="../../d8/d99/struct_input_file.html#a4062ac530db413964aa76090995b85cd">ctx</a>->start_time != AV_NOPTS_VALUE)</div>
|
||||
<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  tsoffset += f-><a class="code" href="../../d8/d99/struct_input_file.html#a4062ac530db413964aa76090995b85cd">ctx</a>->start_time;</div>
|
||||
<div class="line"><a name="l00974"></a><span class="lineno"> 974</span>  }</div>
|
||||
<div class="line"><a name="l00975"></a><span class="lineno"> 975</span>  ret = <a class="code" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a9464282dd90b2de622c38126485d1a80">insert_trim</a>(((f-><a class="code" href="../../d8/d99/struct_input_file.html#af29c0dd6f71cb1454c23abebca06f604">start_time</a> == AV_NOPTS_VALUE) || !f-><a class="code" href="../../d8/d99/struct_input_file.html#a0d2afa337cfd75b91096045ed941a494">accurate_seek</a>) ?</div>
|
||||
@@ -1058,7 +1058,7 @@ $(function() {
|
||||
<div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  <span class="keywordflow">if</span> (!ifilter-><a class="code" href="../../d7/d0c/struct_input_filter.html#a495a9bf2659a91ffa184a4cd9395469b">ist</a>-><a class="code" href="../../d3/d6e/struct_input_stream.html#a6147a2f3e7cfec58b3f790dfc318e4bc">dec</a>) {</div>
|
||||
<div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  av_log(NULL, AV_LOG_ERROR,</div>
|
||||
<div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  <span class="stringliteral">"No decoder for stream #%d:%d, filtering impossible\n"</span>,</div>
|
||||
<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  ifilter-><a class="code" href="../../d7/d0c/struct_input_filter.html#a495a9bf2659a91ffa184a4cd9395469b">ist</a>-><a class="code" href="../../d3/d6e/struct_input_stream.html#ad47d834630eee2dca258aa449fb1df47">file_index</a>, ifilter-><a class="code" href="../../d7/d0c/struct_input_filter.html#a495a9bf2659a91ffa184a4cd9395469b">ist</a>-><a class="code" href="../../d3/d6e/struct_input_stream.html#a32038bb58a25b389a4d2c411a8d16269">st</a>->index);</div>
|
||||
<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  ifilter-><a class="code" href="../../d7/d0c/struct_input_filter.html#a495a9bf2659a91ffa184a4cd9395469b">ist</a>-><a class="code" href="../../d3/d6e/struct_input_stream.html#ad47d834630eee2dca258aa449fb1df47">file_index</a>, ifilter-><a class="code" href="../../d7/d0c/struct_input_filter.html#a495a9bf2659a91ffa184a4cd9395469b">ist</a>-><a class="code" href="../../d3/d6e/struct_input_stream.html#acf438e2a33238676cb3f68b39ae18049">st</a>->index);</div>
|
||||
<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>  <span class="keywordflow">return</span> AVERROR_DECODER_NOT_FOUND;</div>
|
||||
<div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  }</div>
|
||||
<div class="line"><a name="l00996"></a><span class="lineno"> 996</span>  <span class="keywordflow">switch</span> (avfilter_pad_get_type(in->filter_ctx->input_pads, in->pad_idx)) {</div>
|
||||
@@ -1094,7 +1094,7 @@ $(function() {
|
||||
<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>  <span class="keywordtype">char</span> args[512];</div>
|
||||
<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>  AVDictionaryEntry *e = NULL;</div>
|
||||
<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>  </div>
|
||||
<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#ae222203d54c99d90f4308f5fd2285ee5">graph</a>->nb_threads = <a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#ab412882642c763a5bf2bf7658f3a3ae1">filter_nbthreads</a>;</div>
|
||||
<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#ae222203d54c99d90f4308f5fd2285ee5">graph</a>->nb_threads = <a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a5be020cdefd4b772020265e2bb1d256f">filter_nbthreads</a>;</div>
|
||||
<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>  </div>
|
||||
<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>  args[0] = 0;</div>
|
||||
<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>  <span class="keywordflow">while</span> ((e = av_dict_get(ost-><a class="code" href="../../db/dde/struct_output_stream.html#ad55eb675077dc7b468f15f02a03ded5a">sws_dict</a>, <span class="stringliteral">""</span>, e,</div>
|
||||
@@ -1126,15 +1126,15 @@ $(function() {
|
||||
<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>  <span class="keywordflow">if</span> (e)</div>
|
||||
<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  av_opt_set(fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#ae222203d54c99d90f4308f5fd2285ee5">graph</a>, <span class="stringliteral">"threads"</span>, e->value, 0);</div>
|
||||
<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>  } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>  fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#ae222203d54c99d90f4308f5fd2285ee5">graph</a>->nb_threads = <a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a563c8ad7c4f8ab8c9c3c146941148258">filter_complex_nbthreads</a>;</div>
|
||||
<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>  fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#ae222203d54c99d90f4308f5fd2285ee5">graph</a>->nb_threads = <a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a2f2388cbef2d4d1e46d2f5d768c1e916">filter_complex_nbthreads</a>;</div>
|
||||
<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>  }</div>
|
||||
<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>  </div>
|
||||
<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>  <span class="keywordflow">if</span> ((ret = avfilter_graph_parse2(fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#ae222203d54c99d90f4308f5fd2285ee5">graph</a>, graph_desc, &inputs, &outputs)) < 0)</div>
|
||||
<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>  <span class="keywordflow">goto</span> fail;</div>
|
||||
<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>  </div>
|
||||
<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>  <span class="keywordflow">if</span> (<a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a9809060d4be99d59e0749f54e351a9c8">filter_hw_device</a> || <a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a08d3cd3b71ea4209189c445198b095b8">hw_device_ctx</a>) {</div>
|
||||
<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  AVBufferRef *device = <a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a9809060d4be99d59e0749f54e351a9c8">filter_hw_device</a> ? <a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a9809060d4be99d59e0749f54e351a9c8">filter_hw_device</a>-><a class="code" href="../../de/dc7/struct_h_w_device.html#ac1615b160aa7dc0f2e314e04cea6aaf9">device_ref</a></div>
|
||||
<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  : <a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a08d3cd3b71ea4209189c445198b095b8">hw_device_ctx</a>;</div>
|
||||
<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>  <span class="keywordflow">if</span> (<a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#ab91a5aa23dd763d88ff7cfedeadca8a4">filter_hw_device</a> || <a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a67aead38b41b9368aa3d8eece879ee99">hw_device_ctx</a>) {</div>
|
||||
<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  AVBufferRef *device = <a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#ab91a5aa23dd763d88ff7cfedeadca8a4">filter_hw_device</a> ? <a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#ab91a5aa23dd763d88ff7cfedeadca8a4">filter_hw_device</a>-><a class="code" href="../../de/dc7/struct_h_w_device.html#ac1615b160aa7dc0f2e314e04cea6aaf9">device_ref</a></div>
|
||||
<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  : <a class="code" href="../../d7/db3/fftools__ffmpeg_8h.html#a67aead38b41b9368aa3d8eece879ee99">hw_device_ctx</a>;</div>
|
||||
<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>  <span class="keywordflow">for</span> (i = 0; i < fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#ae222203d54c99d90f4308f5fd2285ee5">graph</a>->nb_filters; i++) {</div>
|
||||
<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>  fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#ae222203d54c99d90f4308f5fd2285ee5">graph</a>->filters[i]->hw_device_ctx = av_buffer_ref(device);</div>
|
||||
<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>  <span class="keywordflow">if</span> (!fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#ae222203d54c99d90f4308f5fd2285ee5">graph</a>->filters[i]->hw_device_ctx) {</div>
|
||||
@@ -1241,10 +1241,10 @@ $(function() {
|
||||
<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>  <span class="comment">/* process queued up subtitle packets */</span></div>
|
||||
<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>  <span class="keywordflow">for</span> (i = 0; i < fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#aa88faf44822ec4e04597a6eef12a7760">nb_inputs</a>; i++) {</div>
|
||||
<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>  <a class="code" href="../../d3/d6e/struct_input_stream.html">InputStream</a> *ist = fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#afb2dea711d92a8a8cb94eebecd9c1e13">inputs</a>[i]-><a class="code" href="../../d7/d0c/struct_input_filter.html#a495a9bf2659a91ffa184a4cd9395469b">ist</a>;</div>
|
||||
<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>  <span class="keywordflow">if</span> (ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a7dc8219f262a8a6ad1c7d2aa48488d6c">sub2video</a>.<a class="code" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#ad2b2360342940822238e5ba6c1f48718">sub_queue</a> && ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a7dc8219f262a8a6ad1c7d2aa48488d6c">sub2video</a>.<a class="code" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#a0e7ca3e0eebc5db360ae15f2dac3d622">frame</a>) {</div>
|
||||
<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>  <span class="keywordflow">while</span> (av_fifo_size(ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a7dc8219f262a8a6ad1c7d2aa48488d6c">sub2video</a>.<a class="code" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#ad2b2360342940822238e5ba6c1f48718">sub_queue</a>)) {</div>
|
||||
<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>  <span class="keywordflow">if</span> (ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#acc9fee6e45ff302a2c1a06a053cbaa22">sub2video</a>.<a class="code" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#ad2b2360342940822238e5ba6c1f48718">sub_queue</a> && ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#acc9fee6e45ff302a2c1a06a053cbaa22">sub2video</a>.<a class="code" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#a0e7ca3e0eebc5db360ae15f2dac3d622">frame</a>) {</div>
|
||||
<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>  <span class="keywordflow">while</span> (av_fifo_size(ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#acc9fee6e45ff302a2c1a06a053cbaa22">sub2video</a>.<a class="code" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#ad2b2360342940822238e5ba6c1f48718">sub_queue</a>)) {</div>
|
||||
<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>  AVSubtitle tmp;</div>
|
||||
<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>  av_fifo_generic_read(ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#a7dc8219f262a8a6ad1c7d2aa48488d6c">sub2video</a>.<a class="code" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#ad2b2360342940822238e5ba6c1f48718">sub_queue</a>, &tmp, <span class="keyword">sizeof</span>(tmp), NULL);</div>
|
||||
<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>  av_fifo_generic_read(ist-><a class="code" href="../../d3/d6e/struct_input_stream.html#acc9fee6e45ff302a2c1a06a053cbaa22">sub2video</a>.<a class="code" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#ad2b2360342940822238e5ba6c1f48718">sub_queue</a>, &tmp, <span class="keyword">sizeof</span>(tmp), NULL);</div>
|
||||
<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>  <a class="code" href="../../d7/d48/fftools__ffmpeg_8c.html#a368a9d8542e6f6eba45dfba5f4b21afa">sub2video_update</a>(ist, &tmp);</div>
|
||||
<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>  avsubtitle_free(&tmp);</div>
|
||||
<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>  }</div>
|
||||
@@ -1295,151 +1295,151 @@ $(function() {
|
||||
<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>  <span class="keywordflow">return</span> !fg-><a class="code" href="../../d9/de7/struct_filter_graph.html#ad45139bb5ec5c7766be0b216f9c8c2c4">graph_desc</a>;</div>
|
||||
<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> }</div>
|
||||
</div><!-- fragment --></div><!-- contents -->
|
||||
<div class="ttc" id="afftools__cmdutils_8c_html_a632b71e4b56c5ee8556a407bbecbcef8"><div class="ttname"><a href="../../d7/dcc/fftools__cmdutils_8c.html#a632b71e4b56c5ee8556a407bbecbcef8">check_stream_specifier</a></div><div class="ttdeci">int check_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec)</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/dcc/fftools__cmdutils_8c_source.html#l02077">fftools_cmdutils.c:2077</a></div></div>
|
||||
<div class="ttc" id="afftools__cmdutils_8c_html_a632b71e4b56c5ee8556a407bbecbcef8"><div class="ttname"><a href="../../d7/dcc/fftools__cmdutils_8c.html#a632b71e4b56c5ee8556a407bbecbcef8">check_stream_specifier</a></div><div class="ttdeci">int check_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec)</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/dcc/fftools__cmdutils_8c_source.html#l02123">fftools_cmdutils.c:2123</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_aba8e85f08c2269c623074c81f0e428d6"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#aba8e85f08c2269c623074c81f0e428d6">AUTO_INSERT_FILTER</a></div><div class="ttdeci">#define AUTO_INSERT_FILTER(opt_name, filter_name, arg)</div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_ac35ecb04b8b6ca22d10180918de95be4"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#ac35ecb04b8b6ca22d10180918de95be4">OutputStream::avfilter</a></div><div class="ttdeci">char * avfilter</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00517">fftools_ffmpeg.h:517</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_ac35ecb04b8b6ca22d10180918de95be4"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#ac35ecb04b8b6ca22d10180918de95be4">OutputStream::avfilter</a></div><div class="ttdeci">char * avfilter</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00523">fftools_ffmpeg.h:523</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_a68aafc55c81956dab85081fbdc12dec6"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a68aafc55c81956dab85081fbdc12dec6">init_input_filter</a></div><div class="ttdeci">static void init_input_filter(FilterGraph *fg, AVFilterInOut *in)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00261">fftools_ffmpeg_filter.c:261</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_a0e8b6e753bb0f299b554d18f3589944a"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a0e8b6e753bb0f299b554d18f3589944a">ifilter_parameters_from_frame</a></div><div class="ttdeci">int ifilter_parameters_from_frame(InputFilter *ifilter, const AVFrame *frame)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l01193">fftools_ffmpeg_filter.c:1193</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_a09efa5b4f05e3ca7c08c7ac949466556"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#a09efa5b4f05e3ca7c08c7ac949466556">InputFilter::name</a></div><div class="ttdeci">uint8_t * name</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00253">fftools_ffmpeg.h:253</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_1_1sub2video_html_aeecdbc3f86c3bcbf9c42ac7a867e91db"><div class="ttname"><a href="../../d4/dfd/struct_input_stream_1_1sub2video.html#aeecdbc3f86c3bcbf9c42ac7a867e91db">InputStream::sub2video::h</a></div><div class="ttdeci">int h</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00365">fftools_ffmpeg.h:365</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_a09efa5b4f05e3ca7c08c7ac949466556"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#a09efa5b4f05e3ca7c08c7ac949466556">InputFilter::name</a></div><div class="ttdeci">uint8_t * name</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00259">fftools_ffmpeg.h:259</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_1_1sub2video_html_aeecdbc3f86c3bcbf9c42ac7a867e91db"><div class="ttname"><a href="../../d4/dfd/struct_input_stream_1_1sub2video.html#aeecdbc3f86c3bcbf9c42ac7a867e91db">InputStream::sub2video::h</a></div><div class="ttdeci">int h</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00371">fftools_ffmpeg.h:371</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_a9cf53e21bfb4178eefcce6b7dd20eca2"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a9cf53e21bfb4178eefcce6b7dd20eca2">AUTO_INSERT_FILTER_INPUT</a></div><div class="ttdeci">#define AUTO_INSERT_FILTER_INPUT(opt_name, filter_name, arg)</div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8h_html_ad4fabc73fffad91c2bfb9fa9954228a8"><div class="ttname"><a href="../../d7/db3/fftools__ffmpeg_8h.html#ad4fabc73fffad91c2bfb9fa9954228a8">copy_ts</a></div><div class="ttdeci">int copy_ts</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d66/fftools__ffmpeg__opt_8c_source.html#l00109">fftools_ffmpeg_opt.c:109</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_html_ac39249a26eeec2ed084fcc433ec9825e"><div class="ttname"><a href="../../d3/d6e/struct_input_stream.html#ac39249a26eeec2ed084fcc433ec9825e">InputStream::discard</a></div><div class="ttdeci">int discard</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00312">fftools_ffmpeg.h:312</a></div></div>
|
||||
<div class="ttc" id="astruct_output_file_html_a6bfbcb8e4d6564ae0c488d58c0fb0d5f"><div class="ttname"><a href="../../de/df2/struct_output_file.html#a6bfbcb8e4d6564ae0c488d58c0fb0d5f">OutputFile::ctx</a></div><div class="ttdeci">AVFormatContext * ctx</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00569">fftools_ffmpeg.h:569</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_html_ac39249a26eeec2ed084fcc433ec9825e"><div class="ttname"><a href="../../d3/d6e/struct_input_stream.html#ac39249a26eeec2ed084fcc433ec9825e">InputStream::discard</a></div><div class="ttdeci">int discard</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00318">fftools_ffmpeg.h:318</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8h_html_ab91a5aa23dd763d88ff7cfedeadca8a4"><div class="ttname"><a href="../../d7/db3/fftools__ffmpeg_8h.html#ab91a5aa23dd763d88ff7cfedeadca8a4">filter_hw_device</a></div><div class="ttdeci">__thread HWDevice * filter_hw_device</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d66/fftools__ffmpeg__opt_8c_source.html#l00097">fftools_ffmpeg_opt.c:97</a></div></div>
|
||||
<div class="ttc" id="astruct_output_file_html_a6bfbcb8e4d6564ae0c488d58c0fb0d5f"><div class="ttname"><a href="../../de/df2/struct_output_file.html#a6bfbcb8e4d6564ae0c488d58c0fb0d5f">OutputFile::ctx</a></div><div class="ttdeci">AVFormatContext * ctx</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00575">fftools_ffmpeg.h:575</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_a045cee5da7d7a2926a5351a4938ef056"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a045cee5da7d7a2926a5351a4938ef056">configure_output_filter</a></div><div class="ttdeci">int configure_output_filter(FilterGraph *fg, OutputFilter *ofilter, AVFilterInOut *out)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00684">fftools_ffmpeg_filter.c:684</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8h_html"><div class="ttname"><a href="../../d7/db3/fftools__ffmpeg_8h.html">fftools_ffmpeg.h</a></div></div>
|
||||
<div class="ttc" id="astruct_filter_graph_html_a3ec6739834ba482eacc125e05b59b246"><div class="ttname"><a href="../../d9/de7/struct_filter_graph.html#a3ec6739834ba482eacc125e05b59b246">FilterGraph::index</a></div><div class="ttdeci">int index</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00297">fftools_ffmpeg.h:297</a></div></div>
|
||||
<div class="ttc" id="afftools__cmdutils_8c_html_a00fcf983c7dd20dd65568b3ebc20ed44"><div class="ttname"><a href="../../d7/dcc/fftools__cmdutils_8c.html#a00fcf983c7dd20dd65568b3ebc20ed44">exit_program</a></div><div class="ttdeci">void exit_program(int ret)</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/dcc/fftools__cmdutils_8c_source.html#l00134">fftools_cmdutils.c:134</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_html_a7dc8219f262a8a6ad1c7d2aa48488d6c"><div class="ttname"><a href="../../d3/d6e/struct_input_stream.html#a7dc8219f262a8a6ad1c7d2aa48488d6c">InputStream::sub2video</a></div><div class="ttdeci">struct InputStream::sub2video sub2video</div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8h_html_a8d030f80a6336997e85f819eba6e1b2c"><div class="ttname"><a href="../../d7/db3/fftools__ffmpeg_8h.html#a8d030f80a6336997e85f819eba6e1b2c">audio_sync_method</a></div><div class="ttdeci">int audio_sync_method</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d66/fftools__ffmpeg__opt_8c_source.html#l00101">fftools_ffmpeg_opt.c:101</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_html"><div class="ttname"><a href="../../d3/d6e/struct_input_stream.html">InputStream</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00309">fftools_ffmpeg.h:309</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8h_html_a89dec1d1af0e3d343795355d73aed5ae"><div class="ttname"><a href="../../d7/db3/fftools__ffmpeg_8h.html#a89dec1d1af0e3d343795355d73aed5ae">do_deinterlace</a></div><div class="ttdeci">int do_deinterlace</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d66/fftools__ffmpeg__opt_8c_source.html#l00104">fftools_ffmpeg_opt.c:104</a></div></div>
|
||||
<div class="ttc" id="astruct_filter_graph_html_a3ec6739834ba482eacc125e05b59b246"><div class="ttname"><a href="../../d9/de7/struct_filter_graph.html#a3ec6739834ba482eacc125e05b59b246">FilterGraph::index</a></div><div class="ttdeci">int index</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00303">fftools_ffmpeg.h:303</a></div></div>
|
||||
<div class="ttc" id="afftools__cmdutils_8c_html_a00fcf983c7dd20dd65568b3ebc20ed44"><div class="ttname"><a href="../../d7/dcc/fftools__cmdutils_8c.html#a00fcf983c7dd20dd65568b3ebc20ed44">exit_program</a></div><div class="ttdeci">void exit_program(int ret)</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/dcc/fftools__cmdutils_8c_source.html#l00166">fftools_cmdutils.c:166</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8c_html_a22c5e53407c3f14a8111e898dff42904"><div class="ttname"><a href="../../d7/d48/fftools__ffmpeg_8c.html#a22c5e53407c3f14a8111e898dff42904">output_files</a></div><div class="ttdeci">__thread OutputFile ** output_files</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/d48/fftools__ffmpeg_8c_source.html#l00177">fftools_ffmpeg.c:177</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8c_html_a19a9c5bb8abc454adeccecdce35135c2"><div class="ttname"><a href="../../d7/d48/fftools__ffmpeg_8c.html#a19a9c5bb8abc454adeccecdce35135c2">nb_input_streams</a></div><div class="ttdeci">__thread int nb_input_streams</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/d48/fftools__ffmpeg_8c_source.html#l00171">fftools_ffmpeg.c:171</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_html"><div class="ttname"><a href="../../d3/d6e/struct_input_stream.html">InputStream</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00315">fftools_ffmpeg.h:315</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_a26b5d23cd500b86b7d92e6700ab469cf"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a26b5d23cd500b86b7d92e6700ab469cf">DEF_CHOOSE_FORMAT</a></div><div class="ttdeci">#define DEF_CHOOSE_FORMAT(suffix, type, var, supported_list, none, get_name)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00167">fftools_ffmpeg_filter.c:167</a></div></div>
|
||||
<div class="ttc" id="afftools__cmdutils_8h_html_ab04427a6bc0201f8f4a95db84104c8ad"><div class="ttname"><a href="../../d8/d4e/fftools__cmdutils_8h.html#ab04427a6bc0201f8f4a95db84104c8ad">GET_SAMPLE_FMT_NAME</a></div><div class="ttdeci">#define GET_SAMPLE_FMT_NAME(sample_fmt)</div><div class="ttdef"><b>Definition:</b> <a href="../../d8/d4e/fftools__cmdutils_8h_source.html#l00646">fftools_cmdutils.h:646</a></div></div>
|
||||
<div class="ttc" id="astruct_output_filter_html_ae591539feb7f41d19236244a0dcf3896"><div class="ttname"><a href="../../d0/d0f/struct_output_filter.html#ae591539feb7f41d19236244a0dcf3896">OutputFilter::channel_layout</a></div><div class="ttdeci">uint64_t channel_layout</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00288">fftools_ffmpeg.h:288</a></div></div>
|
||||
<div class="ttc" id="afftools__cmdutils_8h_html_ab04427a6bc0201f8f4a95db84104c8ad"><div class="ttname"><a href="../../d8/d4e/fftools__cmdutils_8h.html#ab04427a6bc0201f8f4a95db84104c8ad">GET_SAMPLE_FMT_NAME</a></div><div class="ttdeci">#define GET_SAMPLE_FMT_NAME(sample_fmt)</div><div class="ttdef"><b>Definition:</b> <a href="../../d8/d4e/fftools__cmdutils_8h_source.html#l00615">fftools_cmdutils.h:615</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8h_html_a8454a6a2632a5ce0f2983c9499649ede"><div class="ttname"><a href="../../d7/db3/fftools__ffmpeg_8h.html#a8454a6a2632a5ce0f2983c9499649ede">audio_drift_threshold</a></div><div class="ttdeci">__thread float audio_drift_threshold</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d66/fftools__ffmpeg__opt_8c_source.html#l00102">fftools_ffmpeg_opt.c:102</a></div></div>
|
||||
<div class="ttc" id="astruct_output_filter_html_ae591539feb7f41d19236244a0dcf3896"><div class="ttname"><a href="../../d0/d0f/struct_output_filter.html#ae591539feb7f41d19236244a0dcf3896">OutputFilter::channel_layout</a></div><div class="ttdeci">uint64_t channel_layout</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00294">fftools_ffmpeg.h:294</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_ad60a50ce02efbab762effbbdd7eda05e"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#ad60a50ce02efbab762effbbdd7eda05e">filtergraph_is_simple</a></div><div class="ttdeci">int filtergraph_is_simple(FilterGraph *fg)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l01225">fftools_ffmpeg_filter.c:1225</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_html_a511370b3dc7929803575d5d5201e8db1"><div class="ttname"><a href="../../d3/d6e/struct_input_stream.html#a511370b3dc7929803575d5d5201e8db1">InputStream::dec_ctx</a></div><div class="ttdeci">AVCodecContext * dec_ctx</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00318">fftools_ffmpeg.h:318</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_a50bc46d7c7636e2abbfe066872d0c1d0"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#a50bc46d7c7636e2abbfe066872d0c1d0">OutputStream::audio_channels_mapped</a></div><div class="ttdeci">int audio_channels_mapped</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00511">fftools_ffmpeg.h:511</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_af608105788daa4300771669d992ef890"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#af608105788daa4300771669d992ef890">OutputStream::file_index</a></div><div class="ttdeci">int file_index</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00457">fftools_ffmpeg.h:457</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html">InputFilter</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00249">fftools_ffmpeg.h:249</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_html_a7c2c9b58a4db2101414f2d106f4244b0"><div class="ttname"><a href="../../d3/d6e/struct_input_stream.html#a7c2c9b58a4db2101414f2d106f4244b0">InputStream::nb_filters</a></div><div class="ttdeci">int nb_filters</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00373">fftools_ffmpeg.h:373</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_1_1sub2video_html_aaf500e3a36c6e6a6920a8e18c6478a8e"><div class="ttname"><a href="../../d4/dfd/struct_input_stream_1_1sub2video.html#aaf500e3a36c6e6a6920a8e18c6478a8e">InputStream::sub2video::end_pts</a></div><div class="ttdeci">int64_t end_pts</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00362">fftools_ffmpeg.h:362</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8h_html_a13213d6339827ff18b6af3f0ec13db5e"><div class="ttname"><a href="../../d7/db3/fftools__ffmpeg_8h.html#a13213d6339827ff18b6af3f0ec13db5e">audio_volume</a></div><div class="ttdeci">int audio_volume</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d66/fftools__ffmpeg__opt_8c_source.html#l00100">fftools_ffmpeg_opt.c:100</a></div></div>
|
||||
<div class="ttc" id="astruct_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#l00273">fftools_ffmpeg.h:273</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_aaf4487a0c41b756199c9dde4ea8962b8"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#aaf4487a0c41b756199c9dde4ea8962b8">InputFilter::channel_layout</a></div><div class="ttdeci">uint64_t channel_layout</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00266">fftools_ffmpeg.h:266</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_ad55eb675077dc7b468f15f02a03ded5a"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#ad55eb675077dc7b468f15f02a03ded5a">OutputStream::sws_dict</a></div><div class="ttdeci">AVDictionary * sws_dict</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00522">fftools_ffmpeg.h:522</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_a50bc46d7c7636e2abbfe066872d0c1d0"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#a50bc46d7c7636e2abbfe066872d0c1d0">OutputStream::audio_channels_mapped</a></div><div class="ttdeci">int audio_channels_mapped</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00517">fftools_ffmpeg.h:517</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_af608105788daa4300771669d992ef890"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#af608105788daa4300771669d992ef890">OutputStream::file_index</a></div><div class="ttdeci">int file_index</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00463">fftools_ffmpeg.h:463</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html">InputFilter</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00255">fftools_ffmpeg.h:255</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8h_html_a7713e7604e1b50d8f1ba5c3c445dde28"><div class="ttname"><a href="../../d7/db3/fftools__ffmpeg_8h.html#a7713e7604e1b50d8f1ba5c3c445dde28">do_deinterlace</a></div><div class="ttdeci">__thread int do_deinterlace</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d66/fftools__ffmpeg__opt_8c_source.html#l00110">fftools_ffmpeg_opt.c:110</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_html_a7c2c9b58a4db2101414f2d106f4244b0"><div class="ttname"><a href="../../d3/d6e/struct_input_stream.html#a7c2c9b58a4db2101414f2d106f4244b0">InputStream::nb_filters</a></div><div class="ttdeci">int nb_filters</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00379">fftools_ffmpeg.h:379</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_1_1sub2video_html_aaf500e3a36c6e6a6920a8e18c6478a8e"><div class="ttname"><a href="../../d4/dfd/struct_input_stream_1_1sub2video.html#aaf500e3a36c6e6a6920a8e18c6478a8e">InputStream::sub2video::end_pts</a></div><div class="ttdeci">int64_t end_pts</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00368">fftools_ffmpeg.h:368</a></div></div>
|
||||
<div class="ttc" id="astruct_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#l00279">fftools_ffmpeg.h:279</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_aaf4487a0c41b756199c9dde4ea8962b8"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#aaf4487a0c41b756199c9dde4ea8962b8">InputFilter::channel_layout</a></div><div class="ttdeci">uint64_t channel_layout</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00272">fftools_ffmpeg.h:272</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_ad55eb675077dc7b468f15f02a03ded5a"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#ad55eb675077dc7b468f15f02a03ded5a">OutputStream::sws_dict</a></div><div class="ttdeci">AVDictionary * sws_dict</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00528">fftools_ffmpeg.h:528</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8h_html_a82f6df78dc4d5a93f9708b27f16de2b5"><div class="ttname"><a href="../../d7/db3/fftools__ffmpeg_8h.html#a82f6df78dc4d5a93f9708b27f16de2b5">init_simple_filtergraph</a></div><div class="ttdeci">int init_simple_filtergraph(InputStream *ist, OutputStream *ost)</div></div>
|
||||
<div class="ttc" id="astruct_input_stream_html_abcb8222561f1ee84a2f7a2157bed356c"><div class="ttname"><a href="../../d3/d6e/struct_input_stream.html#abcb8222561f1ee84a2f7a2157bed356c">InputStream::autorotate</a></div><div class="ttdeci">int autorotate</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00351">fftools_ffmpeg.h:351</a></div></div>
|
||||
<div class="ttc" id="astruct_output_filter_html_aa1e455271d4a952bc771b9951beded8e"><div class="ttname"><a href="../../d0/d0f/struct_output_filter.html#aa1e455271d4a952bc771b9951beded8e">OutputFilter::graph</a></div><div class="ttdeci">struct FilterGraph * graph</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00276">fftools_ffmpeg.h:276</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8h_html_ab412882642c763a5bf2bf7658f3a3ae1"><div class="ttname"><a href="../../d7/db3/fftools__ffmpeg_8h.html#ab412882642c763a5bf2bf7658f3a3ae1">filter_nbthreads</a></div><div class="ttdeci">int filter_nbthreads</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d66/fftools__ffmpeg__opt_8c_source.html#l00120">fftools_ffmpeg_opt.c:120</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_1_1sub2video_html_ad2b2360342940822238e5ba6c1f48718"><div class="ttname"><a href="../../d4/dfd/struct_input_stream_1_1sub2video.html#ad2b2360342940822238e5ba6c1f48718">InputStream::sub2video::sub_queue</a></div><div class="ttdeci">AVFifoBuffer * sub_queue</div><div class="ttdoc">queue of AVSubtitle* before filter init</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00363">fftools_ffmpeg.h:363</a></div></div>
|
||||
<div class="ttc" id="astruct_filter_graph_html_aa88faf44822ec4e04597a6eef12a7760"><div class="ttname"><a href="../../d9/de7/struct_filter_graph.html#aa88faf44822ec4e04597a6eef12a7760">FilterGraph::nb_inputs</a></div><div class="ttdeci">int nb_inputs</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00304">fftools_ffmpeg.h:304</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_a495a9bf2659a91ffa184a4cd9395469b"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#a495a9bf2659a91ffa184a4cd9395469b">InputFilter::ist</a></div><div class="ttdeci">struct InputStream * ist</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00251">fftools_ffmpeg.h:251</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_aa033b48aa4612dc26aa8e66e83f932bc"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#aa033b48aa4612dc26aa8e66e83f932bc">InputFilter::type</a></div><div class="ttdeci">enum AVMediaType type</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00254">fftools_ffmpeg.h:254</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_aa3127396f27743175651a8d86e7d0770"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#aa3127396f27743175651a8d86e7d0770">InputFilter::frame_queue</a></div><div class="ttdeci">AVFifoBuffer * frame_queue</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00256">fftools_ffmpeg.h:256</a></div></div>
|
||||
<div class="ttc" id="astruct_input_file_html"><div class="ttname"><a href="../../d8/d99/struct_input_file.html">InputFile</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00407">fftools_ffmpeg.h:407</a></div></div>
|
||||
<div class="ttc" id="astruct_output_filter_html_a7713667d07c3f7605e6dd24f0ca19940"><div class="ttname"><a href="../../d0/d0f/struct_output_filter.html#a7713667d07c3f7605e6dd24f0ca19940">OutputFilter::name</a></div><div class="ttdeci">uint8_t * name</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00277">fftools_ffmpeg.h:277</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_html_abcb8222561f1ee84a2f7a2157bed356c"><div class="ttname"><a href="../../d3/d6e/struct_input_stream.html#abcb8222561f1ee84a2f7a2157bed356c">InputStream::autorotate</a></div><div class="ttdeci">int autorotate</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00357">fftools_ffmpeg.h:357</a></div></div>
|
||||
<div class="ttc" id="astruct_output_filter_html_aa1e455271d4a952bc771b9951beded8e"><div class="ttname"><a href="../../d0/d0f/struct_output_filter.html#aa1e455271d4a952bc771b9951beded8e">OutputFilter::graph</a></div><div class="ttdeci">struct FilterGraph * graph</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00282">fftools_ffmpeg.h:282</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_1_1sub2video_html_ad2b2360342940822238e5ba6c1f48718"><div class="ttname"><a href="../../d4/dfd/struct_input_stream_1_1sub2video.html#ad2b2360342940822238e5ba6c1f48718">InputStream::sub2video::sub_queue</a></div><div class="ttdeci">AVFifoBuffer * sub_queue</div><div class="ttdoc">queue of AVSubtitle* before filter init</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00369">fftools_ffmpeg.h:369</a></div></div>
|
||||
<div class="ttc" id="astruct_filter_graph_html_aa88faf44822ec4e04597a6eef12a7760"><div class="ttname"><a href="../../d9/de7/struct_filter_graph.html#aa88faf44822ec4e04597a6eef12a7760">FilterGraph::nb_inputs</a></div><div class="ttdeci">int nb_inputs</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00310">fftools_ffmpeg.h:310</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_a495a9bf2659a91ffa184a4cd9395469b"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#a495a9bf2659a91ffa184a4cd9395469b">InputFilter::ist</a></div><div class="ttdeci">struct InputStream * ist</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00257">fftools_ffmpeg.h:257</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_aa033b48aa4612dc26aa8e66e83f932bc"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#aa033b48aa4612dc26aa8e66e83f932bc">InputFilter::type</a></div><div class="ttdeci">enum AVMediaType type</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00260">fftools_ffmpeg.h:260</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_aa3127396f27743175651a8d86e7d0770"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#aa3127396f27743175651a8d86e7d0770">InputFilter::frame_queue</a></div><div class="ttdeci">AVFifoBuffer * frame_queue</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00262">fftools_ffmpeg.h:262</a></div></div>
|
||||
<div class="ttc" id="astruct_input_file_html"><div class="ttname"><a href="../../d8/d99/struct_input_file.html">InputFile</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00413">fftools_ffmpeg.h:413</a></div></div>
|
||||
<div class="ttc" id="astruct_output_filter_html_a7713667d07c3f7605e6dd24f0ca19940"><div class="ttname"><a href="../../d0/d0f/struct_output_filter.html#a7713667d07c3f7605e6dd24f0ca19940">OutputFilter::name</a></div><div class="ttdeci">uint8_t * name</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00283">fftools_ffmpeg.h:283</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_afdeaca7898e15c0cb645228fd5bb9184"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#afdeaca7898e15c0cb645228fd5bb9184">init_complex_filtergraph</a></div><div class="ttdeci">int init_complex_filtergraph(FilterGraph *fg)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00348">fftools_ffmpeg_filter.c:348</a></div></div>
|
||||
<div class="ttc" id="astruct_input_file_html_a0d2afa337cfd75b91096045ed941a494"><div class="ttname"><a href="../../d8/d99/struct_input_file.html#a0d2afa337cfd75b91096045ed941a494">InputFile::accurate_seek</a></div><div class="ttdeci">int accurate_seek</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00427">fftools_ffmpeg.h:427</a></div></div>
|
||||
<div class="ttc" id="astruct_filter_graph_html_ad45139bb5ec5c7766be0b216f9c8c2c4"><div class="ttname"><a href="../../d9/de7/struct_filter_graph.html#ad45139bb5ec5c7766be0b216f9c8c2c4">FilterGraph::graph_desc</a></div><div class="ttdeci">const char * graph_desc</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00298">fftools_ffmpeg.h:298</a></div></div>
|
||||
<div class="ttc" id="astruct_input_file_html_a0d2afa337cfd75b91096045ed941a494"><div class="ttname"><a href="../../d8/d99/struct_input_file.html#a0d2afa337cfd75b91096045ed941a494">InputFile::accurate_seek</a></div><div class="ttdeci">int accurate_seek</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00433">fftools_ffmpeg.h:433</a></div></div>
|
||||
<div class="ttc" id="astruct_filter_graph_html_ad45139bb5ec5c7766be0b216f9c8c2c4"><div class="ttname"><a href="../../d9/de7/struct_filter_graph.html#ad45139bb5ec5c7766be0b216f9c8c2c4">FilterGraph::graph_desc</a></div><div class="ttdeci">const char * graph_desc</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00304">fftools_ffmpeg.h:304</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_add10aa9fae87dc2259bc821b29dee0f8"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#add10aa9fae87dc2259bc821b29dee0f8">insert_filter</a></div><div class="ttdeci">static int insert_filter(AVFilterContext **last_filter, int *pad_idx, const char *filter_name, const char *args)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00440">fftools_ffmpeg_filter.c:440</a></div></div>
|
||||
<div class="ttc" id="astruct_output_file_html_acfef99893985d28ae7f7f6a92e6d1bd7"><div class="ttname"><a href="../../de/df2/struct_output_file.html#acfef99893985d28ae7f7f6a92e6d1bd7">OutputFile::shortest</a></div><div class="ttdeci">int shortest</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00576">fftools_ffmpeg.h:576</a></div></div>
|
||||
<div class="ttc" id="astruct_output_file_html_ad160ce6520aad386bead7eb45f6f55a0"><div class="ttname"><a href="../../de/df2/struct_output_file.html#ad160ce6520aad386bead7eb45f6f55a0">OutputFile::recording_time</a></div><div class="ttdeci">int64_t recording_time</div><div class="ttdoc">desired length of the resulting file in microseconds == AV_TIME_BASE units</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00572">fftools_ffmpeg.h:572</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_1_1sub2video_html_a992c9fe5de3acf5dce388cffda4fdce8"><div class="ttname"><a href="../../d4/dfd/struct_input_stream_1_1sub2video.html#a992c9fe5de3acf5dce388cffda4fdce8">InputStream::sub2video::last_pts</a></div><div class="ttdeci">int64_t last_pts</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00361">fftools_ffmpeg.h:361</a></div></div>
|
||||
<div class="ttc" id="astruct_input_file_html_a4062ac530db413964aa76090995b85cd"><div class="ttname"><a href="../../d8/d99/struct_input_file.html#a4062ac530db413964aa76090995b85cd">InputFile::ctx</a></div><div class="ttdeci">AVFormatContext * ctx</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00408">fftools_ffmpeg.h:408</a></div></div>
|
||||
<div class="ttc" id="astruct_filter_graph_html_a92c7f6faf7e95b259bce1c717d43b4ee"><div class="ttname"><a href="../../d9/de7/struct_filter_graph.html#a92c7f6faf7e95b259bce1c717d43b4ee">FilterGraph::nb_outputs</a></div><div class="ttdeci">int nb_outputs</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00306">fftools_ffmpeg.h:306</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_abbd8721ddcadbfb453a4f5cdf6301c25"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#abbd8721ddcadbfb453a4f5cdf6301c25">InputFilter::sample_aspect_ratio</a></div><div class="ttdeci">AVRational sample_aspect_ratio</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00262">fftools_ffmpeg.h:262</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_ab1730578ae74132f67d2e847df4cc624"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#ab1730578ae74132f67d2e847df4cc624">InputFilter::graph</a></div><div class="ttdeci">struct FilterGraph * graph</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00252">fftools_ffmpeg.h:252</a></div></div>
|
||||
<div class="ttc" id="astruct_output_file_html_acfef99893985d28ae7f7f6a92e6d1bd7"><div class="ttname"><a href="../../de/df2/struct_output_file.html#acfef99893985d28ae7f7f6a92e6d1bd7">OutputFile::shortest</a></div><div class="ttdeci">int shortest</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00582">fftools_ffmpeg.h:582</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8c_html_a35146af7b101927e2e6aaaf49022f9b7"><div class="ttname"><a href="../../d7/d48/fftools__ffmpeg_8c.html#a35146af7b101927e2e6aaaf49022f9b7">nb_input_files</a></div><div class="ttdeci">__thread int nb_input_files</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/d48/fftools__ffmpeg_8c_source.html#l00173">fftools_ffmpeg.c:173</a></div></div>
|
||||
<div class="ttc" id="astruct_output_file_html_ad160ce6520aad386bead7eb45f6f55a0"><div class="ttname"><a href="../../de/df2/struct_output_file.html#ad160ce6520aad386bead7eb45f6f55a0">OutputFile::recording_time</a></div><div class="ttdeci">int64_t recording_time</div><div class="ttdoc">desired length of the resulting file in microseconds == AV_TIME_BASE units</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00578">fftools_ffmpeg.h:578</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8h_html_a5be020cdefd4b772020265e2bb1d256f"><div class="ttname"><a href="../../d7/db3/fftools__ffmpeg_8h.html#a5be020cdefd4b772020265e2bb1d256f">filter_nbthreads</a></div><div class="ttdeci">__thread int filter_nbthreads</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d66/fftools__ffmpeg__opt_8c_source.html#l00126">fftools_ffmpeg_opt.c:126</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_1_1sub2video_html_a992c9fe5de3acf5dce388cffda4fdce8"><div class="ttname"><a href="../../d4/dfd/struct_input_stream_1_1sub2video.html#a992c9fe5de3acf5dce388cffda4fdce8">InputStream::sub2video::last_pts</a></div><div class="ttdeci">int64_t last_pts</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00367">fftools_ffmpeg.h:367</a></div></div>
|
||||
<div class="ttc" id="astruct_input_file_html_a4062ac530db413964aa76090995b85cd"><div class="ttname"><a href="../../d8/d99/struct_input_file.html#a4062ac530db413964aa76090995b85cd">InputFile::ctx</a></div><div class="ttdeci">AVFormatContext * ctx</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00414">fftools_ffmpeg.h:414</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8h_html_a7ebbd72251d3d58fe5b316928a40bed3"><div class="ttname"><a href="../../d7/db3/fftools__ffmpeg_8h.html#a7ebbd72251d3d58fe5b316928a40bed3">audio_sync_method</a></div><div class="ttdeci">__thread int audio_sync_method</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d66/fftools__ffmpeg__opt_8c_source.html#l00107">fftools_ffmpeg_opt.c:107</a></div></div>
|
||||
<div class="ttc" id="astruct_filter_graph_html_a92c7f6faf7e95b259bce1c717d43b4ee"><div class="ttname"><a href="../../d9/de7/struct_filter_graph.html#a92c7f6faf7e95b259bce1c717d43b4ee">FilterGraph::nb_outputs</a></div><div class="ttdeci">int nb_outputs</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00312">fftools_ffmpeg.h:312</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_abbd8721ddcadbfb453a4f5cdf6301c25"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#abbd8721ddcadbfb453a4f5cdf6301c25">InputFilter::sample_aspect_ratio</a></div><div class="ttdeci">AVRational sample_aspect_ratio</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00268">fftools_ffmpeg.h:268</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_ab1730578ae74132f67d2e847df4cc624"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#ab1730578ae74132f67d2e847df4cc624">InputFilter::graph</a></div><div class="ttdeci">struct FilterGraph * graph</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00258">fftools_ffmpeg.h:258</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_a57f643dc94cbbbb752e2943a7457a668"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a57f643dc94cbbbb752e2943a7457a668">configure_output_audio_filter</a></div><div class="ttdeci">static int configure_output_audio_filter(FilterGraph *fg, OutputFilter *ofilter, AVFilterInOut *out)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00556">fftools_ffmpeg_filter.c:556</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_a84762af19c6801936fd49d53170a3682"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#a84762af19c6801936fd49d53170a3682">OutputStream::resample_opts</a></div><div class="ttdeci">AVDictionary * resample_opts</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00524">fftools_ffmpeg.h:524</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8c_html_a69604b80f08f69c2870b8b97da11c931"><div class="ttname"><a href="../../d7/d48/fftools__ffmpeg_8c.html#a69604b80f08f69c2870b8b97da11c931">filtergraphs</a></div><div class="ttdeci">FilterGraph ** filtergraphs</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/d48/fftools__ffmpeg_8c_source.html#l00177">fftools_ffmpeg.c:177</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_a2ad802636d7a1f6b3be4eaaa21929c3f"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#a2ad802636d7a1f6b3be4eaaa21929c3f">InputFilter::height</a></div><div class="ttdeci">int height</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00261">fftools_ffmpeg.h:261</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_ad8926e7de923b3eeabd66770caacfe1e"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#ad8926e7de923b3eeabd66770caacfe1e">OutputStream::filter</a></div><div class="ttdeci">OutputFilter * filter</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00516">fftools_ffmpeg.h:516</a></div></div>
|
||||
<div class="ttc" id="afftools__cmdutils_8h_html_aa75501e4e249657d5f0df6d7e8645d4f"><div class="ttname"><a href="../../d8/d4e/fftools__cmdutils_8h.html#aa75501e4e249657d5f0df6d7e8645d4f">GROW_ARRAY</a></div><div class="ttdeci">#define GROW_ARRAY(array, nb_elems)</div><div class="ttdef"><b>Definition:</b> <a href="../../d8/d4e/fftools__cmdutils_8h_source.html#l00637">fftools_cmdutils.h:637</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_1_1sub2video_html_a0bd83c4ad9f5301d63e49a9f94b8cf7d"><div class="ttname"><a href="../../d4/dfd/struct_input_stream_1_1sub2video.html#a0bd83c4ad9f5301d63e49a9f94b8cf7d">InputStream::sub2video::w</a></div><div class="ttdeci">int w</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00365">fftools_ffmpeg.h:365</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_a84762af19c6801936fd49d53170a3682"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#a84762af19c6801936fd49d53170a3682">OutputStream::resample_opts</a></div><div class="ttdeci">AVDictionary * resample_opts</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00530">fftools_ffmpeg.h:530</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_a2ad802636d7a1f6b3be4eaaa21929c3f"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#a2ad802636d7a1f6b3be4eaaa21929c3f">InputFilter::height</a></div><div class="ttdeci">int height</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00267">fftools_ffmpeg.h:267</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_ad8926e7de923b3eeabd66770caacfe1e"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#ad8926e7de923b3eeabd66770caacfe1e">OutputStream::filter</a></div><div class="ttdeci">OutputFilter * filter</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00522">fftools_ffmpeg.h:522</a></div></div>
|
||||
<div class="ttc" id="afftools__cmdutils_8h_html_aa75501e4e249657d5f0df6d7e8645d4f"><div class="ttname"><a href="../../d8/d4e/fftools__cmdutils_8h.html#aa75501e4e249657d5f0df6d7e8645d4f">GROW_ARRAY</a></div><div class="ttdeci">#define GROW_ARRAY(array, nb_elems)</div><div class="ttdef"><b>Definition:</b> <a href="../../d8/d4e/fftools__cmdutils_8h_source.html#l00606">fftools_cmdutils.h:606</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_1_1sub2video_html_a0bd83c4ad9f5301d63e49a9f94b8cf7d"><div class="ttname"><a href="../../d4/dfd/struct_input_stream_1_1sub2video.html#a0bd83c4ad9f5301d63e49a9f94b8cf7d">InputStream::sub2video::w</a></div><div class="ttdeci">int w</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00371">fftools_ffmpeg.h:371</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_a09f6b48ecee84b654849d9d35b476c0b"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a09f6b48ecee84b654849d9d35b476c0b">get_compliance_unofficial_pix_fmts</a></div><div class="ttdeci">static enum AVPixelFormat * get_compliance_unofficial_pix_fmts(enum AVCodecID codec_id, const enum AVPixelFormat default_formats[])</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00050">fftools_ffmpeg_filter.c:50</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_a9feef5270e0e54f103868362df0cd27a"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a9feef5270e0e54f103868362df0cd27a">sample_rate</a></div><div class="ttdeci">sample_rate</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00199">fftools_ffmpeg_filter.c:199</a></div></div>
|
||||
<div class="ttc" id="astruct_filter_graph_html_ae222203d54c99d90f4308f5fd2285ee5"><div class="ttname"><a href="../../d9/de7/struct_filter_graph.html#ae222203d54c99d90f4308f5fd2285ee5">FilterGraph::graph</a></div><div class="ttdeci">AVFilterGraph * graph</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00300">fftools_ffmpeg.h:300</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_html_a86b730f87f0f8ebd088f94af51d91b96"><div class="ttname"><a href="../../d3/d6e/struct_input_stream.html#a86b730f87f0f8ebd088f94af51d91b96">InputStream::user_set_discard</a></div><div class="ttdeci">int user_set_discard</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00313">fftools_ffmpeg.h:313</a></div></div>
|
||||
<div class="ttc" id="astruct_filter_graph_html_ae222203d54c99d90f4308f5fd2285ee5"><div class="ttname"><a href="../../d9/de7/struct_filter_graph.html#ae222203d54c99d90f4308f5fd2285ee5">FilterGraph::graph</a></div><div class="ttdeci">AVFilterGraph * graph</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00306">fftools_ffmpeg.h:306</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_html_a86b730f87f0f8ebd088f94af51d91b96"><div class="ttname"><a href="../../d3/d6e/struct_input_stream.html#a86b730f87f0f8ebd088f94af51d91b96">InputStream::user_set_discard</a></div><div class="ttdeci">int user_set_discard</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00319">fftools_ffmpeg.h:319</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_a899fd519426902067f15c45b628b601e"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a899fd519426902067f15c45b628b601e">describe_filter_link</a></div><div class="ttdeci">static char * describe_filter_link(FilterGraph *fg, AVFilterInOut *inout, int in)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00242">fftools_ffmpeg_filter.c:242</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_a572505eef6ba5714df813d454185019d"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#a572505eef6ba5714df813d454185019d">InputFilter::filter</a></div><div class="ttdeci">AVFilterContext * filter</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00250">fftools_ffmpeg.h:250</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_html_afbaeaac6e0b1fc3095bb90f17d58621d"><div class="ttname"><a href="../../d3/d6e/struct_input_stream.html#afbaeaac6e0b1fc3095bb90f17d58621d">InputStream::framerate</a></div><div class="ttdeci">AVRational framerate</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00347">fftools_ffmpeg.h:347</a></div></div>
|
||||
<div class="ttc" id="astruct_filter_graph_html_aa078de74cae0940747ba826567b74aef"><div class="ttname"><a href="../../d9/de7/struct_filter_graph.html#aa078de74cae0940747ba826567b74aef">FilterGraph::outputs</a></div><div class="ttdeci">OutputFilter ** outputs</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00305">fftools_ffmpeg.h:305</a></div></div>
|
||||
<div class="ttc" id="astruct_filter_graph_html_afb2dea711d92a8a8cb94eebecd9c1e13"><div class="ttname"><a href="../../d9/de7/struct_filter_graph.html#afb2dea711d92a8a8cb94eebecd9c1e13">FilterGraph::inputs</a></div><div class="ttdeci">InputFilter ** inputs</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00303">fftools_ffmpeg.h:303</a></div></div>
|
||||
<div class="ttc" id="astruct_output_filter_html_aeba350050d2035d755254154e6551c49"><div class="ttname"><a href="../../d0/d0f/struct_output_filter.html#aeba350050d2035d755254154e6551c49">OutputFilter::format</a></div><div class="ttdeci">int format</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00286">fftools_ffmpeg.h:286</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_ae22fe6ee1999d45be0d8722d04294a22"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#ae22fe6ee1999d45be0d8722d04294a22">OutputStream::index</a></div><div class="ttdeci">int index</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00458">fftools_ffmpeg.h:458</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8c_html_adc4bdebb5c8ece97d332af967e83e2e3"><div class="ttname"><a href="../../d7/d48/fftools__ffmpeg_8c.html#adc4bdebb5c8ece97d332af967e83e2e3">output_files</a></div><div class="ttdeci">OutputFile ** output_files</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/d48/fftools__ffmpeg_8c_source.html#l00174">fftools_ffmpeg.c:174</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_ad3e4e5041c3312bb70cc4d1f0bbd4726"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#ad3e4e5041c3312bb70cc4d1f0bbd4726">InputFilter::eof</a></div><div class="ttdeci">int eof</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00270">fftools_ffmpeg.h:270</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_af0ca53e6e06775f61dcc13af0a11ab82"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#af0ca53e6e06775f61dcc13af0a11ab82">OutputStream::keep_pix_fmt</a></div><div class="ttdeci">int keep_pix_fmt</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00542">fftools_ffmpeg.h:542</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8h_html_a9809060d4be99d59e0749f54e351a9c8"><div class="ttname"><a href="../../d7/db3/fftools__ffmpeg_8h.html#a9809060d4be99d59e0749f54e351a9c8">filter_hw_device</a></div><div class="ttdeci">HWDevice * filter_hw_device</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d66/fftools__ffmpeg__opt_8c_source.html#l00091">fftools_ffmpeg_opt.c:91</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_a572505eef6ba5714df813d454185019d"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#a572505eef6ba5714df813d454185019d">InputFilter::filter</a></div><div class="ttdeci">AVFilterContext * filter</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00256">fftools_ffmpeg.h:256</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_html_afbaeaac6e0b1fc3095bb90f17d58621d"><div class="ttname"><a href="../../d3/d6e/struct_input_stream.html#afbaeaac6e0b1fc3095bb90f17d58621d">InputStream::framerate</a></div><div class="ttdeci">AVRational framerate</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00353">fftools_ffmpeg.h:353</a></div></div>
|
||||
<div class="ttc" id="astruct_filter_graph_html_aa078de74cae0940747ba826567b74aef"><div class="ttname"><a href="../../d9/de7/struct_filter_graph.html#aa078de74cae0940747ba826567b74aef">FilterGraph::outputs</a></div><div class="ttdeci">OutputFilter ** outputs</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00311">fftools_ffmpeg.h:311</a></div></div>
|
||||
<div class="ttc" id="astruct_filter_graph_html_afb2dea711d92a8a8cb94eebecd9c1e13"><div class="ttname"><a href="../../d9/de7/struct_filter_graph.html#afb2dea711d92a8a8cb94eebecd9c1e13">FilterGraph::inputs</a></div><div class="ttdeci">InputFilter ** inputs</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00309">fftools_ffmpeg.h:309</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8h_html_a67aead38b41b9368aa3d8eece879ee99"><div class="ttname"><a href="../../d7/db3/fftools__ffmpeg_8h.html#a67aead38b41b9368aa3d8eece879ee99">hw_device_ctx</a></div><div class="ttdeci">__thread AVBufferRef * hw_device_ctx</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d66/fftools__ffmpeg__opt_8c_source.html#l00096">fftools_ffmpeg_opt.c:96</a></div></div>
|
||||
<div class="ttc" id="astruct_output_filter_html_aeba350050d2035d755254154e6551c49"><div class="ttname"><a href="../../d0/d0f/struct_output_filter.html#aeba350050d2035d755254154e6551c49">OutputFilter::format</a></div><div class="ttdeci">int format</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00292">fftools_ffmpeg.h:292</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_ae22fe6ee1999d45be0d8722d04294a22"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#ae22fe6ee1999d45be0d8722d04294a22">OutputStream::index</a></div><div class="ttdeci">int index</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00464">fftools_ffmpeg.h:464</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_html_acf438e2a33238676cb3f68b39ae18049"><div class="ttname"><a href="../../d3/d6e/struct_input_stream.html#acf438e2a33238676cb3f68b39ae18049">InputStream::st</a></div><div class="ttdeci">AVStream * st</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00317">fftools_ffmpeg.h:317</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_ad3e4e5041c3312bb70cc4d1f0bbd4726"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#ad3e4e5041c3312bb70cc4d1f0bbd4726">InputFilter::eof</a></div><div class="ttdeci">int eof</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00276">fftools_ffmpeg.h:276</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_af0ca53e6e06775f61dcc13af0a11ab82"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#af0ca53e6e06775f61dcc13af0a11ab82">OutputStream::keep_pix_fmt</a></div><div class="ttdeci">int keep_pix_fmt</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00548">fftools_ffmpeg.h:548</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_html_a550ceee60cb995b284b52962dcba6597"><div class="ttname"><a href="../../d3/d6e/struct_input_stream.html#a550ceee60cb995b284b52962dcba6597">InputStream::dec_ctx</a></div><div class="ttdeci">AVCodecContext * dec_ctx</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00324">fftools_ffmpeg.h:324</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_adfc4727f627c5abd0aa843206d046ec6"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#adfc4727f627c5abd0aa843206d046ec6">configure_filtergraph</a></div><div class="ttdeci">int configure_filtergraph(FilterGraph *fg)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l01013">fftools_ffmpeg_filter.c:1013</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8c_html_a30b4858540ac444ef7dab2ec3b7f5be0"><div class="ttname"><a href="../../d7/d48/fftools__ffmpeg_8c.html#a30b4858540ac444ef7dab2ec3b7f5be0">input_files</a></div><div class="ttdeci">InputFile ** input_files</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/d48/fftools__ffmpeg_8c_source.html#l00169">fftools_ffmpeg.c:169</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_a9f383c04c76d00cb7fbe0c561fc54aba"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a9f383c04c76d00cb7fbe0c561fc54aba">configure_input_video_filter</a></div><div class="ttdeci">static int configure_input_video_filter(FilterGraph *fg, InputFilter *ifilter, AVFilterInOut *in)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00754">fftools_ffmpeg_filter.c:754</a></div></div>
|
||||
<div class="ttc" id="astruct_input_file_html_ac2f5772aebd0118a4c464a268dbb4d9c"><div class="ttname"><a href="../../d8/d99/struct_input_file.html#ac2f5772aebd0118a4c464a268dbb4d9c">InputFile::ist_index</a></div><div class="ttdeci">int ist_index</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00411">fftools_ffmpeg.h:411</a></div></div>
|
||||
<div class="ttc" id="astruct_input_file_html_ac2f5772aebd0118a4c464a268dbb4d9c"><div class="ttname"><a href="../../d8/d99/struct_input_file.html#ac2f5772aebd0118a4c464a268dbb4d9c">InputFile::ist_index</a></div><div class="ttdeci">int ist_index</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00417">fftools_ffmpeg.h:417</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_a175b3d698e81a2781fddebdbf7209d8f"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a175b3d698e81a2781fddebdbf7209d8f">sub2video_prepare</a></div><div class="ttdeci">static int sub2video_prepare(InputStream *ist, InputFilter *ifilter)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00713">fftools_ffmpeg_filter.c:713</a></div></div>
|
||||
<div class="ttc" id="afftools__cmdutils_8h_html_a7b25c6a8e4f3e33fa53837200cbee607"><div class="ttname"><a href="../../d8/d4e/fftools__cmdutils_8h.html#a7b25c6a8e4f3e33fa53837200cbee607">GET_CH_LAYOUT_NAME</a></div><div class="ttdeci">#define GET_CH_LAYOUT_NAME(ch_layout)</div><div class="ttdef"><b>Definition:</b> <a href="../../d8/d4e/fftools__cmdutils_8h_source.html#l00653">fftools_cmdutils.h:653</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_html_ac9fc51324b931c1db5c5c1445fe70c3b"><div class="ttname"><a href="../../d3/d6e/struct_input_stream.html#ac9fc51324b931c1db5c5c1445fe70c3b">InputStream::decoding_needed</a></div><div class="ttdeci">int decoding_needed</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00314">fftools_ffmpeg.h:314</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_ae704ff879704d2ab90dad159526785e2"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#ae704ff879704d2ab90dad159526785e2">InputFilter::format</a></div><div class="ttdeci">int format</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00259">fftools_ffmpeg.h:259</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_ab13acc03a389653d882f221141f12ae3"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#ab13acc03a389653d882f221141f12ae3">OutputStream::frame_rate</a></div><div class="ttdeci">AVRational frame_rate</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00491">fftools_ffmpeg.h:491</a></div></div>
|
||||
<div class="ttc" id="astruct_output_filter_html_ab0be1ec413ca98912667f1bf76fd2588"><div class="ttname"><a href="../../d0/d0f/struct_output_filter.html#ab0be1ec413ca98912667f1bf76fd2588">OutputFilter::sample_rate</a></div><div class="ttdeci">int sample_rate</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00287">fftools_ffmpeg.h:287</a></div></div>
|
||||
<div class="ttc" id="astruct_output_filter_html_a0a621d752f3ab33e67f0a8f22bee4118"><div class="ttname"><a href="../../d0/d0f/struct_output_filter.html#a0a621d752f3ab33e67f0a8f22bee4118">OutputFilter::width</a></div><div class="ttdeci">int width</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00284">fftools_ffmpeg.h:284</a></div></div>
|
||||
<div class="ttc" id="afftools__cmdutils_8h_html_a7b25c6a8e4f3e33fa53837200cbee607"><div class="ttname"><a href="../../d8/d4e/fftools__cmdutils_8h.html#a7b25c6a8e4f3e33fa53837200cbee607">GET_CH_LAYOUT_NAME</a></div><div class="ttdeci">#define GET_CH_LAYOUT_NAME(ch_layout)</div><div class="ttdef"><b>Definition:</b> <a href="../../d8/d4e/fftools__cmdutils_8h_source.html#l00622">fftools_cmdutils.h:622</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_html_ac9fc51324b931c1db5c5c1445fe70c3b"><div class="ttname"><a href="../../d3/d6e/struct_input_stream.html#ac9fc51324b931c1db5c5c1445fe70c3b">InputStream::decoding_needed</a></div><div class="ttdeci">int decoding_needed</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00320">fftools_ffmpeg.h:320</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_ae704ff879704d2ab90dad159526785e2"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#ae704ff879704d2ab90dad159526785e2">InputFilter::format</a></div><div class="ttdeci">int format</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00265">fftools_ffmpeg.h:265</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_ab13acc03a389653d882f221141f12ae3"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#ab13acc03a389653d882f221141f12ae3">OutputStream::frame_rate</a></div><div class="ttdeci">AVRational frame_rate</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00497">fftools_ffmpeg.h:497</a></div></div>
|
||||
<div class="ttc" id="astruct_output_filter_html_ab0be1ec413ca98912667f1bf76fd2588"><div class="ttname"><a href="../../d0/d0f/struct_output_filter.html#ab0be1ec413ca98912667f1bf76fd2588">OutputFilter::sample_rate</a></div><div class="ttdeci">int sample_rate</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00293">fftools_ffmpeg.h:293</a></div></div>
|
||||
<div class="ttc" id="astruct_output_filter_html_a0a621d752f3ab33e67f0a8f22bee4118"><div class="ttname"><a href="../../d0/d0f/struct_output_filter.html#a0a621d752f3ab33e67f0a8f22bee4118">OutputFilter::width</a></div><div class="ttdeci">int width</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00290">fftools_ffmpeg.h:290</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8c_html_a8815f40afdcda266b01da4b3137a99a3"><div class="ttname"><a href="../../d7/d48/fftools__ffmpeg_8c.html#a8815f40afdcda266b01da4b3137a99a3">input_files</a></div><div class="ttdeci">__thread InputFile ** input_files</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/d48/fftools__ffmpeg_8c_source.html#l00172">fftools_ffmpeg.c:172</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_a9464282dd90b2de622c38126485d1a80"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a9464282dd90b2de622c38126485d1a80">insert_trim</a></div><div class="ttdeci">static int insert_trim(int64_t start_time, int64_t duration, AVFilterContext **last_filter, int *pad_idx, const char *filter_name)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00389">fftools_ffmpeg_filter.c:389</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_a1aff0805d8ea5d89a1dbf1fb1e460113"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a1aff0805d8ea5d89a1dbf1fb1e460113">configure_output_video_filter</a></div><div class="ttdeci">static int configure_output_video_filter(FilterGraph *fg, OutputFilter *ofilter, AVFilterInOut *out)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00462">fftools_ffmpeg_filter.c:462</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_a42a6b4647cc1c8326bb4db65d1b463e6"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a42a6b4647cc1c8326bb4db65d1b463e6">choose_pix_fmts</a></div><div class="ttdeci">static char * choose_pix_fmts(OutputFilter *ofilter)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00123">fftools_ffmpeg_filter.c:123</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_a1c8870375203b3594e67e632119bbc10"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#a1c8870375203b3594e67e632119bbc10">InputFilter::sample_rate</a></div><div class="ttdeci">int sample_rate</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00264">fftools_ffmpeg.h:264</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_a1c8870375203b3594e67e632119bbc10"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#a1c8870375203b3594e67e632119bbc10">InputFilter::sample_rate</a></div><div class="ttdeci">int sample_rate</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00270">fftools_ffmpeg.h:270</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8c_html_a902ed0b2ffc617e274426bc05118f1c3"><div class="ttname"><a href="../../d7/d48/fftools__ffmpeg_8c.html#a902ed0b2ffc617e274426bc05118f1c3">filtergraphs</a></div><div class="ttdeci">__thread FilterGraph ** filtergraphs</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/d48/fftools__ffmpeg_8c_source.html#l00180">fftools_ffmpeg.c:180</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_abd040cc1f24edd0ee72c1bdfaa5599c2"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#abd040cc1f24edd0ee72c1bdfaa5599c2">configure_input_audio_filter</a></div><div class="ttdeci">static int configure_input_audio_filter(FilterGraph *fg, InputFilter *ifilter, AVFilterInOut *in)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00877">fftools_ffmpeg_filter.c:877</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_a12ee30995b3ac94a573f01870d1289e8"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a12ee30995b3ac94a573f01870d1289e8">sample_rates</a></div><div class="ttdeci">sample_rates</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00199">fftools_ffmpeg_filter.c:199</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_html_a32038bb58a25b389a4d2c411a8d16269"><div class="ttname"><a href="../../d3/d6e/struct_input_stream.html#a32038bb58a25b389a4d2c411a8d16269">InputStream::st</a></div><div class="ttdeci">AVStream * st</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00311">fftools_ffmpeg.h:311</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8h_html_a69301b0986380d3c18feb65b0ac128c4"><div class="ttname"><a href="../../d7/db3/fftools__ffmpeg_8h.html#a69301b0986380d3c18feb65b0ac128c4">DECODING_FOR_FILTER</a></div><div class="ttdeci">#define DECODING_FOR_FILTER</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00316">fftools_ffmpeg.h:316</a></div></div>
|
||||
<div class="ttc" id="astruct_input_file_html_af29c0dd6f71cb1454c23abebca06f604"><div class="ttname"><a href="../../d8/d99/struct_input_file.html#af29c0dd6f71cb1454c23abebca06f604">InputFile::start_time</a></div><div class="ttdeci">int64_t start_time</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00420">fftools_ffmpeg.h:420</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_ad314a1a8fad54930d177f0951f574ef2"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#ad314a1a8fad54930d177f0951f574ef2">OutputStream::enc</a></div><div class="ttdeci">AVCodec * enc</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00481">fftools_ffmpeg.h:481</a></div></div>
|
||||
<div class="ttc" id="astruct_output_filter_html_a52b3bac2e051f48e5eabbff6a227881c"><div class="ttname"><a href="../../d0/d0f/struct_output_filter.html#a52b3bac2e051f48e5eabbff6a227881c">OutputFilter::filter</a></div><div class="ttdeci">AVFilterContext * filter</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00274">fftools_ffmpeg.h:274</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_ac11510a2eeed3e6a14f0fbc85db2e088"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#ac11510a2eeed3e6a14f0fbc85db2e088">OutputStream::st</a></div><div class="ttdeci">AVStream * st</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00460">fftools_ffmpeg.h:460</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8h_html_a69301b0986380d3c18feb65b0ac128c4"><div class="ttname"><a href="../../d7/db3/fftools__ffmpeg_8h.html#a69301b0986380d3c18feb65b0ac128c4">DECODING_FOR_FILTER</a></div><div class="ttdeci">#define DECODING_FOR_FILTER</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00322">fftools_ffmpeg.h:322</a></div></div>
|
||||
<div class="ttc" id="astruct_input_file_html_af29c0dd6f71cb1454c23abebca06f604"><div class="ttname"><a href="../../d8/d99/struct_input_file.html#af29c0dd6f71cb1454c23abebca06f604">InputFile::start_time</a></div><div class="ttdeci">int64_t start_time</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00426">fftools_ffmpeg.h:426</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_ad314a1a8fad54930d177f0951f574ef2"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#ad314a1a8fad54930d177f0951f574ef2">OutputStream::enc</a></div><div class="ttdeci">AVCodec * enc</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00487">fftools_ffmpeg.h:487</a></div></div>
|
||||
<div class="ttc" id="astruct_output_filter_html_a52b3bac2e051f48e5eabbff6a227881c"><div class="ttname"><a href="../../d0/d0f/struct_output_filter.html#a52b3bac2e051f48e5eabbff6a227881c">OutputFilter::filter</a></div><div class="ttdeci">AVFilterContext * filter</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00280">fftools_ffmpeg.h:280</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_ac11510a2eeed3e6a14f0fbc85db2e088"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#ac11510a2eeed3e6a14f0fbc85db2e088">OutputStream::st</a></div><div class="ttdeci">AVStream * st</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00466">fftools_ffmpeg.h:466</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_ad7582860b219ad64ec003d5924747d20"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#ad7582860b219ad64ec003d5924747d20">check_filter_outputs</a></div><div class="ttdeci">void check_filter_outputs(void)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00698">fftools_ffmpeg_filter.c:698</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8c_html_a4d798d73986e80662044e710a8fb4984"><div class="ttname"><a href="../../d7/d48/fftools__ffmpeg_8c.html#a4d798d73986e80662044e710a8fb4984">nb_input_streams</a></div><div class="ttdeci">int nb_input_streams</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/d48/fftools__ffmpeg_8c_source.html#l00168">fftools_ffmpeg.c:168</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_1_1sub2video_html_a0e7ca3e0eebc5db360ae15f2dac3d622"><div class="ttname"><a href="../../d4/dfd/struct_input_stream_1_1sub2video.html#a0e7ca3e0eebc5db360ae15f2dac3d622">InputStream::sub2video::frame</a></div><div class="ttdeci">AVFrame * frame</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00364">fftools_ffmpeg.h:364</a></div></div>
|
||||
<div class="ttc" id="astruct_output_file_html"><div class="ttname"><a href="../../de/df2/struct_output_file.html">OutputFile</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00568">fftools_ffmpeg.h:568</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8h_html_a563c8ad7c4f8ab8c9c3c146941148258"><div class="ttname"><a href="../../d7/db3/fftools__ffmpeg_8h.html#a563c8ad7c4f8ab8c9c3c146941148258">filter_complex_nbthreads</a></div><div class="ttdeci">int filter_complex_nbthreads</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d66/fftools__ffmpeg__opt_8c_source.html#l00121">fftools_ffmpeg_opt.c:121</a></div></div>
|
||||
<div class="ttc" id="astruct_filter_graph_html_a7bc2aac4115ac1a2fc951e5d0a403824"><div class="ttname"><a href="../../d9/de7/struct_filter_graph.html#a7bc2aac4115ac1a2fc951e5d0a403824">FilterGraph::reconfiguration</a></div><div class="ttdeci">int reconfiguration</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00301">fftools_ffmpeg.h:301</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_1_1sub2video_html_a0e7ca3e0eebc5db360ae15f2dac3d622"><div class="ttname"><a href="../../d4/dfd/struct_input_stream_1_1sub2video.html#a0e7ca3e0eebc5db360ae15f2dac3d622">InputStream::sub2video::frame</a></div><div class="ttdeci">AVFrame * frame</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00370">fftools_ffmpeg.h:370</a></div></div>
|
||||
<div class="ttc" id="astruct_output_file_html"><div class="ttname"><a href="../../de/df2/struct_output_file.html">OutputFile</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00574">fftools_ffmpeg.h:574</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8c_html_ac69138c251f85a6e3233c9a70884be93"><div class="ttname"><a href="../../d7/d48/fftools__ffmpeg_8c.html#ac69138c251f85a6e3233c9a70884be93">nb_filtergraphs</a></div><div class="ttdeci">__thread int nb_filtergraphs</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/d48/fftools__ffmpeg_8c_source.html#l00181">fftools_ffmpeg.c:181</a></div></div>
|
||||
<div class="ttc" id="astruct_filter_graph_html_a7bc2aac4115ac1a2fc951e5d0a403824"><div class="ttname"><a href="../../d9/de7/struct_filter_graph.html#a7bc2aac4115ac1a2fc951e5d0a403824">FilterGraph::reconfiguration</a></div><div class="ttdeci">int reconfiguration</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00307">fftools_ffmpeg.h:307</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_ab55d1d2bfd15f3817ce30f2f1144b6d1"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#ab55d1d2bfd15f3817ce30f2f1144b6d1">choose_pixel_fmt</a></div><div class="ttdeci">enum AVPixelFormat choose_pixel_fmt(AVStream *st, AVCodecContext *enc_ctx, AVCodec *codec, enum AVPixelFormat target)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00071">fftools_ffmpeg_filter.c:71</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_a76d4d92835e9dd3d0619e79e4fb762c6"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#a76d4d92835e9dd3d0619e79e4fb762c6">OutputStream::apad</a></div><div class="ttdeci">char * apad</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00525">fftools_ffmpeg.h:525</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_a76d4d92835e9dd3d0619e79e4fb762c6"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#a76d4d92835e9dd3d0619e79e4fb762c6">OutputStream::apad</a></div><div class="ttdeci">char * apad</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00531">fftools_ffmpeg.h:531</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_a907a40c8c03e3a392e13da4ac4d74453"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a907a40c8c03e3a392e13da4ac4d74453">ist_in_filtergraph</a></div><div class="ttdeci">int ist_in_filtergraph(FilterGraph *fg, InputStream *ist)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l01216">fftools_ffmpeg_filter.c:1216</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_a8866c5d369968e1f79743e44ad4b8169"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a8866c5d369968e1f79743e44ad4b8169">configure_input_filter</a></div><div class="ttdeci">static int configure_input_filter(FilterGraph *fg, InputFilter *ifilter, AVFilterInOut *in)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00987">fftools_ffmpeg_filter.c:987</a></div></div>
|
||||
<div class="ttc" id="afftools__cmdutils_8c_html_a907c42e3f98cc1183a8788033d0aaaf2"><div class="ttname"><a href="../../d7/dcc/fftools__cmdutils_8c.html#a907c42e3f98cc1183a8788033d0aaaf2">get_rotation</a></div><div class="ttdeci">double get_rotation(AVStream *st)</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/dcc/fftools__cmdutils_8c_source.html#l02181">fftools_cmdutils.c:2181</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_ae65ce297679c894d4536e8eaaf623b84"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#ae65ce297679c894d4536e8eaaf623b84">InputFilter::channels</a></div><div class="ttdeci">int channels</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00265">fftools_ffmpeg.h:265</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8h_html_af2d0a18439b8ab367dbccd8e055e83b3"><div class="ttname"><a href="../../d7/db3/fftools__ffmpeg_8h.html#af2d0a18439b8ab367dbccd8e055e83b3">audio_drift_threshold</a></div><div class="ttdeci">float audio_drift_threshold</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d66/fftools__ffmpeg__opt_8c_source.html#l00096">fftools_ffmpeg_opt.c:96</a></div></div>
|
||||
<div class="ttc" id="astruct_output_filter_html_aed4c46a5df26ff71f3f718a0056af294"><div class="ttname"><a href="../../d0/d0f/struct_output_filter.html#aed4c46a5df26ff71f3f718a0056af294">OutputFilter::type</a></div><div class="ttdeci">enum AVMediaType type</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00281">fftools_ffmpeg.h:281</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8c_html_a25562f714212eb22a94a33c076126461"><div class="ttname"><a href="../../d7/d48/fftools__ffmpeg_8c.html#a25562f714212eb22a94a33c076126461">nb_filtergraphs</a></div><div class="ttdeci">int nb_filtergraphs</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/d48/fftools__ffmpeg_8c_source.html#l00178">fftools_ffmpeg.c:178</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_html_a6147a2f3e7cfec58b3f790dfc318e4bc"><div class="ttname"><a href="../../d3/d6e/struct_input_stream.html#a6147a2f3e7cfec58b3f790dfc318e4bc">InputStream::dec</a></div><div class="ttdeci">AVCodec * dec</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00319">fftools_ffmpeg.h:319</a></div></div>
|
||||
<div class="ttc" id="astruct_output_filter_html_a1571021ae59382241c925f7ee613cd7d"><div class="ttname"><a href="../../d0/d0f/struct_output_filter.html#a1571021ae59382241c925f7ee613cd7d">OutputFilter::out_tmp</a></div><div class="ttdeci">AVFilterInOut * out_tmp</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00280">fftools_ffmpeg.h:280</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8h_html_a12bb391111a730d31c4cdec051769062"><div class="ttname"><a href="../../d7/db3/fftools__ffmpeg_8h.html#a12bb391111a730d31c4cdec051769062">start_at_zero</a></div><div class="ttdeci">int start_at_zero</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d66/fftools__ffmpeg__opt_8c_source.html#l00110">fftools_ffmpeg_opt.c:110</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_html_ad76700001c97c3ce465539f0c698e6bc"><div class="ttname"><a href="../../d3/d6e/struct_input_stream.html#ad76700001c97c3ce465539f0c698e6bc">InputStream::filters</a></div><div class="ttdeci">InputFilter ** filters</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00372">fftools_ffmpeg.h:372</a></div></div>
|
||||
<div class="ttc" id="afftools__cmdutils_8c_html_a907c42e3f98cc1183a8788033d0aaaf2"><div class="ttname"><a href="../../d7/dcc/fftools__cmdutils_8c.html#a907c42e3f98cc1183a8788033d0aaaf2">get_rotation</a></div><div class="ttdeci">double get_rotation(AVStream *st)</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/dcc/fftools__cmdutils_8c_source.html#l02227">fftools_cmdutils.c:2227</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_ae65ce297679c894d4536e8eaaf623b84"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#ae65ce297679c894d4536e8eaaf623b84">InputFilter::channels</a></div><div class="ttdeci">int channels</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 class="ttc" id="astruct_output_filter_html_aed4c46a5df26ff71f3f718a0056af294"><div class="ttname"><a href="../../d0/d0f/struct_output_filter.html#aed4c46a5df26ff71f3f718a0056af294">OutputFilter::type</a></div><div class="ttdeci">enum AVMediaType type</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00287">fftools_ffmpeg.h:287</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8c_html_a117ba63aa23e378afe665cc6b7c7e043"><div class="ttname"><a href="../../d7/d48/fftools__ffmpeg_8c.html#a117ba63aa23e378afe665cc6b7c7e043">input_streams</a></div><div class="ttdeci">__thread InputStream ** input_streams</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/d48/fftools__ffmpeg_8c_source.html#l00170">fftools_ffmpeg.c:170</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_html_a6147a2f3e7cfec58b3f790dfc318e4bc"><div class="ttname"><a href="../../d3/d6e/struct_input_stream.html#a6147a2f3e7cfec58b3f790dfc318e4bc">InputStream::dec</a></div><div class="ttdeci">AVCodec * dec</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00325">fftools_ffmpeg.h:325</a></div></div>
|
||||
<div class="ttc" id="astruct_output_filter_html_a1571021ae59382241c925f7ee613cd7d"><div class="ttname"><a href="../../d0/d0f/struct_output_filter.html#a1571021ae59382241c925f7ee613cd7d">OutputFilter::out_tmp</a></div><div class="ttdeci">AVFilterInOut * out_tmp</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00286">fftools_ffmpeg.h:286</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_html_ad76700001c97c3ce465539f0c698e6bc"><div class="ttname"><a href="../../d3/d6e/struct_input_stream.html#ad76700001c97c3ce465539f0c698e6bc">InputStream::filters</a></div><div class="ttdeci">InputFilter ** filters</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00378">fftools_ffmpeg.h:378</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8h_html_a363b436188dcb847ebce8ec575fdb395"><div class="ttname"><a href="../../d7/db3/fftools__ffmpeg_8h.html#a363b436188dcb847ebce8ec575fdb395">audio_volume</a></div><div class="ttdeci">__thread int audio_volume</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d66/fftools__ffmpeg__opt_8c_source.html#l00106">fftools_ffmpeg_opt.c:106</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_ade69a867279a2009d5e468f81b202c6c"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#ade69a867279a2009d5e468f81b202c6c">choose_sample_fmt</a></div><div class="ttdeci">void choose_sample_fmt(AVStream *st, AVCodec *codec)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00101">fftools_ffmpeg_filter.c:101</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_ab7b674f9a0c60e3e02526d560a83f583"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#ab7b674f9a0c60e3e02526d560a83f583">OutputStream::enc_ctx</a></div><div class="ttdeci">AVCodecContext * enc_ctx</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00479">fftools_ffmpeg.h:479</a></div></div>
|
||||
<div class="ttc" id="astruct_h_w_device_html_ac1615b160aa7dc0f2e314e04cea6aaf9"><div class="ttname"><a href="../../de/dc7/struct_h_w_device.html#ac1615b160aa7dc0f2e314e04cea6aaf9">HWDevice::device_ref</a></div><div class="ttdeci">AVBufferRef * device_ref</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00091">fftools_ffmpeg.h:91</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8c_html_aa80f29f39afa7345065ee7019c879980"><div class="ttname"><a href="../../d7/d48/fftools__ffmpeg_8c.html#aa80f29f39afa7345065ee7019c879980">input_streams</a></div><div class="ttdeci">InputStream ** input_streams</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/d48/fftools__ffmpeg_8c_source.html#l00167">fftools_ffmpeg.c:167</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_html_ad47d834630eee2dca258aa449fb1df47"><div class="ttname"><a href="../../d3/d6e/struct_input_stream.html#ad47d834630eee2dca258aa449fb1df47">InputStream::file_index</a></div><div class="ttdeci">int file_index</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00310">fftools_ffmpeg.h:310</a></div></div>
|
||||
<div class="ttc" id="astruct_output_file_html_aa4fee66db612c26276b5de30d834d5e0"><div class="ttname"><a href="../../de/df2/struct_output_file.html#aa4fee66db612c26276b5de30d834d5e0">OutputFile::start_time</a></div><div class="ttdeci">int64_t start_time</div><div class="ttdoc">start time in microseconds == AV_TIME_BASE units</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00573">fftools_ffmpeg.h:573</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_a343c63e0cf4f0aca4fb4727b2e6fa829"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#a343c63e0cf4f0aca4fb4727b2e6fa829">OutputStream::audio_channels_map</a></div><div class="ttdeci">int * audio_channels_map</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00510">fftools_ffmpeg.h:510</a></div></div>
|
||||
<div class="ttc" id="astruct_filter_graph_html"><div class="ttname"><a href="../../d9/de7/struct_filter_graph.html">FilterGraph</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00296">fftools_ffmpeg.h:296</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html"><div class="ttname"><a href="../../db/dde/struct_output_stream.html">OutputStream</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00456">fftools_ffmpeg.h:456</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_af86da4dd2e5092c08e8b171b52c6fa66"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#af86da4dd2e5092c08e8b171b52c6fa66">InputFilter::width</a></div><div class="ttdeci">int width</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00261">fftools_ffmpeg.h:261</a></div></div>
|
||||
<div class="ttc" id="astruct_output_filter_html_aaf9223843b6d814783f74c85b38de080"><div class="ttname"><a href="../../d0/d0f/struct_output_filter.html#aaf9223843b6d814783f74c85b38de080">OutputFilter::height</a></div><div class="ttdeci">int height</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00284">fftools_ffmpeg.h:284</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8h_html_a08d3cd3b71ea4209189c445198b095b8"><div class="ttname"><a href="../../d7/db3/fftools__ffmpeg_8h.html#a08d3cd3b71ea4209189c445198b095b8">hw_device_ctx</a></div><div class="ttdeci">AVBufferRef * hw_device_ctx</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d66/fftools__ffmpeg__opt_8c_source.html#l00090">fftools_ffmpeg_opt.c:90</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_a05a22838e8069f8fdabba7686809494c"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#a05a22838e8069f8fdabba7686809494c">InputFilter::hw_frames_ctx</a></div><div class="ttdeci">AVBufferRef * hw_frames_ctx</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00268">fftools_ffmpeg.h:268</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_ab7b674f9a0c60e3e02526d560a83f583"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#ab7b674f9a0c60e3e02526d560a83f583">OutputStream::enc_ctx</a></div><div class="ttdeci">AVCodecContext * enc_ctx</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00485">fftools_ffmpeg.h:485</a></div></div>
|
||||
<div class="ttc" id="astruct_h_w_device_html_ac1615b160aa7dc0f2e314e04cea6aaf9"><div class="ttname"><a href="../../de/dc7/struct_h_w_device.html#ac1615b160aa7dc0f2e314e04cea6aaf9">HWDevice::device_ref</a></div><div class="ttdeci">AVBufferRef * device_ref</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00097">fftools_ffmpeg.h:97</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_html_acc9fee6e45ff302a2c1a06a053cbaa22"><div class="ttname"><a href="../../d3/d6e/struct_input_stream.html#acc9fee6e45ff302a2c1a06a053cbaa22">InputStream::sub2video</a></div><div class="ttdeci">struct InputStream::sub2video sub2video</div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8h_html_a9133815d152568ea1d45114b7866253a"><div class="ttname"><a href="../../d7/db3/fftools__ffmpeg_8h.html#a9133815d152568ea1d45114b7866253a">start_at_zero</a></div><div class="ttdeci">__thread int start_at_zero</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d66/fftools__ffmpeg__opt_8c_source.html#l00116">fftools_ffmpeg_opt.c:116</a></div></div>
|
||||
<div class="ttc" id="astruct_input_stream_html_ad47d834630eee2dca258aa449fb1df47"><div class="ttname"><a href="../../d3/d6e/struct_input_stream.html#ad47d834630eee2dca258aa449fb1df47">InputStream::file_index</a></div><div class="ttdeci">int file_index</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00316">fftools_ffmpeg.h:316</a></div></div>
|
||||
<div class="ttc" id="astruct_output_file_html_aa4fee66db612c26276b5de30d834d5e0"><div class="ttname"><a href="../../de/df2/struct_output_file.html#aa4fee66db612c26276b5de30d834d5e0">OutputFile::start_time</a></div><div class="ttdeci">int64_t start_time</div><div class="ttdoc">start time in microseconds == AV_TIME_BASE units</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00579">fftools_ffmpeg.h:579</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_a343c63e0cf4f0aca4fb4727b2e6fa829"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#a343c63e0cf4f0aca4fb4727b2e6fa829">OutputStream::audio_channels_map</a></div><div class="ttdeci">int * audio_channels_map</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00516">fftools_ffmpeg.h:516</a></div></div>
|
||||
<div class="ttc" id="astruct_filter_graph_html"><div class="ttname"><a href="../../d9/de7/struct_filter_graph.html">FilterGraph</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00302">fftools_ffmpeg.h:302</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html"><div class="ttname"><a href="../../db/dde/struct_output_stream.html">OutputStream</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00462">fftools_ffmpeg.h:462</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_af86da4dd2e5092c08e8b171b52c6fa66"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#af86da4dd2e5092c08e8b171b52c6fa66">InputFilter::width</a></div><div class="ttdeci">int width</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00267">fftools_ffmpeg.h:267</a></div></div>
|
||||
<div class="ttc" id="astruct_output_filter_html_aaf9223843b6d814783f74c85b38de080"><div class="ttname"><a href="../../d0/d0f/struct_output_filter.html#aaf9223843b6d814783f74c85b38de080">OutputFilter::height</a></div><div class="ttdeci">int height</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00290">fftools_ffmpeg.h:290</a></div></div>
|
||||
<div class="ttc" id="astruct_input_filter_html_a05a22838e8069f8fdabba7686809494c"><div class="ttname"><a href="../../d7/d0c/struct_input_filter.html#a05a22838e8069f8fdabba7686809494c">InputFilter::hw_frames_ctx</a></div><div class="ttdeci">AVBufferRef * hw_frames_ctx</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00274">fftools_ffmpeg.h:274</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg__filter_8c_html_a027d310ab49f2b105fc3b980a6b6c340"><div class="ttname"><a href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a027d310ab49f2b105fc3b980a6b6c340">cleanup_filtergraph</a></div><div class="ttdeci">static void cleanup_filtergraph(FilterGraph *fg)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l01003">fftools_ffmpeg_filter.c:1003</a></div></div>
|
||||
<div class="ttc" id="afftools__cmdutils_8h_html_a0745a3311be303dc4d6d9da67756e1e9"><div class="ttname"><a href="../../d8/d4e/fftools__cmdutils_8h.html#a0745a3311be303dc4d6d9da67756e1e9">GET_SAMPLE_RATE_NAME</a></div><div class="ttdeci">#define GET_SAMPLE_RATE_NAME(rate)</div><div class="ttdef"><b>Definition:</b> <a href="../../d8/d4e/fftools__cmdutils_8h_source.html#l00649">fftools_cmdutils.h:649</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_abf222748d6af0fb0c72fa6b77fe2294e"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#abf222748d6af0fb0c72fa6b77fe2294e">OutputStream::encoder_opts</a></div><div class="ttdeci">AVDictionary * encoder_opts</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00521">fftools_ffmpeg.h:521</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_a0c7606649d3fd916e9eaf19e12fd92c7"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#a0c7606649d3fd916e9eaf19e12fd92c7">OutputStream::swr_opts</a></div><div class="ttdeci">AVDictionary * swr_opts</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00523">fftools_ffmpeg.h:523</a></div></div>
|
||||
<div class="ttc" id="astruct_output_filter_html_a2d283eee3e140f822b5eb381890ba035"><div class="ttname"><a href="../../d0/d0f/struct_output_filter.html#a2d283eee3e140f822b5eb381890ba035">OutputFilter::ost</a></div><div class="ttdeci">struct OutputStream * ost</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00275">fftools_ffmpeg.h:275</a></div></div>
|
||||
<div class="ttc" id="astruct_input_file_html_a66ab0bb6b0332c27bb6b51a0b67d1459"><div class="ttname"><a href="../../d8/d99/struct_input_file.html#a66ab0bb6b0332c27bb6b51a0b67d1459">InputFile::recording_time</a></div><div class="ttdeci">int64_t recording_time</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00422">fftools_ffmpeg.h:422</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8c_html_a368a9d8542e6f6eba45dfba5f4b21afa"><div class="ttname"><a href="../../d7/d48/fftools__ffmpeg_8c.html#a368a9d8542e6f6eba45dfba5f4b21afa">sub2video_update</a></div><div class="ttdeci">void sub2video_update(InputStream *ist, AVSubtitle *sub)</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/d48/fftools__ffmpeg_8c_source.html#l00262">fftools_ffmpeg.c:262</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8c_html_a5f5fcdd4b6cea118793d38dfa2da4741"><div class="ttname"><a href="../../d7/d48/fftools__ffmpeg_8c.html#a5f5fcdd4b6cea118793d38dfa2da4741">nb_input_files</a></div><div class="ttdeci">int nb_input_files</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/d48/fftools__ffmpeg_8c_source.html#l00170">fftools_ffmpeg.c:170</a></div></div>
|
||||
<div class="ttc" id="afftools__cmdutils_8h_html_a0745a3311be303dc4d6d9da67756e1e9"><div class="ttname"><a href="../../d8/d4e/fftools__cmdutils_8h.html#a0745a3311be303dc4d6d9da67756e1e9">GET_SAMPLE_RATE_NAME</a></div><div class="ttdeci">#define GET_SAMPLE_RATE_NAME(rate)</div><div class="ttdef"><b>Definition:</b> <a href="../../d8/d4e/fftools__cmdutils_8h_source.html#l00618">fftools_cmdutils.h:618</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8h_html_a2f2388cbef2d4d1e46d2f5d768c1e916"><div class="ttname"><a href="../../d7/db3/fftools__ffmpeg_8h.html#a2f2388cbef2d4d1e46d2f5d768c1e916">filter_complex_nbthreads</a></div><div class="ttdeci">__thread int filter_complex_nbthreads</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d66/fftools__ffmpeg__opt_8c_source.html#l00127">fftools_ffmpeg_opt.c:127</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_abf222748d6af0fb0c72fa6b77fe2294e"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#abf222748d6af0fb0c72fa6b77fe2294e">OutputStream::encoder_opts</a></div><div class="ttdeci">AVDictionary * encoder_opts</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00527">fftools_ffmpeg.h:527</a></div></div>
|
||||
<div class="ttc" id="astruct_output_stream_html_a0c7606649d3fd916e9eaf19e12fd92c7"><div class="ttname"><a href="../../db/dde/struct_output_stream.html#a0c7606649d3fd916e9eaf19e12fd92c7">OutputStream::swr_opts</a></div><div class="ttdeci">AVDictionary * swr_opts</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00529">fftools_ffmpeg.h:529</a></div></div>
|
||||
<div class="ttc" id="astruct_output_filter_html_a2d283eee3e140f822b5eb381890ba035"><div class="ttname"><a href="../../d0/d0f/struct_output_filter.html#a2d283eee3e140f822b5eb381890ba035">OutputFilter::ost</a></div><div class="ttdeci">struct OutputStream * ost</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00281">fftools_ffmpeg.h:281</a></div></div>
|
||||
<div class="ttc" id="astruct_input_file_html_a66ab0bb6b0332c27bb6b51a0b67d1459"><div class="ttname"><a href="../../d8/d99/struct_input_file.html#a66ab0bb6b0332c27bb6b51a0b67d1459">InputFile::recording_time</a></div><div class="ttdeci">int64_t recording_time</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00428">fftools_ffmpeg.h:428</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8c_html_a368a9d8542e6f6eba45dfba5f4b21afa"><div class="ttname"><a href="../../d7/d48/fftools__ffmpeg_8c.html#a368a9d8542e6f6eba45dfba5f4b21afa">sub2video_update</a></div><div class="ttdeci">void sub2video_update(InputStream *ist, AVSubtitle *sub)</div><div class="ttdef"><b>Definition:</b> <a href="../../d7/d48/fftools__ffmpeg_8c_source.html#l00311">fftools_ffmpeg.c:311</a></div></div>
|
||||
<div class="ttc" id="afftools__ffmpeg_8h_html_a4840dc6953824a08972501cff95620e5"><div class="ttname"><a href="../../d7/db3/fftools__ffmpeg_8h.html#a4840dc6953824a08972501cff95620e5">copy_ts</a></div><div class="ttdeci">__thread int copy_ts</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d66/fftools__ffmpeg__opt_8c_source.html#l00115">fftools_ffmpeg_opt.c:115</a></div></div>
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated on Sat Oct 26 2019 14:39:09 for MobileFFmpeg Android API by  <a href="http://www.doxygen.org/index.html">
|
||||
Generated on Sun Jan 12 2020 21:33:05 for MobileFFmpeg Android API by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.16
|
||||
</a> 1.8.17
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.16"/>
|
||||
<meta name="generator" content="Doxygen 1.8.17"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>MobileFFmpeg Android API: mobileffmpeg_abidetect.c File Reference</title>
|
||||
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
|
||||
@@ -22,7 +22,7 @@
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">MobileFFmpeg Android API
|
||||
 <span id="projectnumber">4.3</span>
|
||||
 <span id="projectnumber">4.3.1</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -30,7 +30,7 @@
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.16 -->
|
||||
<!-- Generated by Doxygen 1.8.17 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
|
||||
@@ -336,9 +336,9 @@ Variables</h2></td></tr>
|
||||
<div class="ttc" id="amobileffmpeg__abidetect_8c_html_a92cb6efea83ccef40a56dd25a647a9fc"><div class="ttname"><a href="../../d2/d3f/mobileffmpeg__abidetect_8c.html#a92cb6efea83ccef40a56dd25a647a9fc">Java_com_arthenica_mobileffmpeg_AbiDetect_isNativeLTSBuild</a></div><div class="ttdeci">JNIEXPORT jboolean JNICALL Java_com_arthenica_mobileffmpeg_AbiDetect_isNativeLTSBuild(JNIEnv *env, jclass object)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d3f/mobileffmpeg__abidetect_8c_source.html#l00127">mobileffmpeg_abidetect.c:127</a></div></div>
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated on Sat Oct 26 2019 14:39:09 for MobileFFmpeg Android API by  <a href="http://www.doxygen.org/index.html">
|
||||
Generated on Sun Jan 12 2020 21:33:05 for MobileFFmpeg Android API by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.16
|
||||
</a> 1.8.17
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.16"/>
|
||||
<meta name="generator" content="Doxygen 1.8.17"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>MobileFFmpeg Android API: mobileffmpeg_abidetect.c Source File</title>
|
||||
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
|
||||
@@ -22,7 +22,7 @@
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">MobileFFmpeg Android API
|
||||
 <span id="projectnumber">4.3</span>
|
||||
 <span id="projectnumber">4.3.1</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -30,7 +30,7 @@
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.16 -->
|
||||
<!-- Generated by Doxygen 1.8.17 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
|
||||
@@ -193,9 +193,9 @@ $(function() {
|
||||
<div class="ttc" id="amobileffmpeg__abidetect_8h_html_aa0528bb977fb058f35088a123f024040"><div class="ttname"><a href="../../d3/db9/mobileffmpeg__abidetect_8h.html#aa0528bb977fb058f35088a123f024040">ABI_ARMV7A_NEON</a></div><div class="ttdeci">#define ABI_ARMV7A_NEON</div><div class="ttdef"><b>Definition:</b> <a href="../../d3/db9/mobileffmpeg__abidetect_8h_source.html#l00027">mobileffmpeg_abidetect.h:27</a></div></div>
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated on Sat Oct 26 2019 14:39:09 for MobileFFmpeg Android API by  <a href="http://www.doxygen.org/index.html">
|
||||
Generated on Sun Jan 12 2020 21:33:05 for MobileFFmpeg Android API by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.16
|
||||
</a> 1.8.17
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.16"/>
|
||||
<meta name="generator" content="Doxygen 1.8.17"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>MobileFFmpeg Android API: mobileffmpeg_exception.h File Reference</title>
|
||||
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
|
||||
@@ -22,7 +22,7 @@
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">MobileFFmpeg Android API
|
||||
 <span id="projectnumber">4.3</span>
|
||||
 <span id="projectnumber">4.3.1</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -30,7 +30,7 @@
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.16 -->
|
||||
<!-- Generated by Doxygen 1.8.17 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
|
||||
@@ -73,33 +73,33 @@ $(function() {
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
|
||||
Variables</h2></td></tr>
|
||||
<tr class="memitem:a816026146f4aa11794d8cab3dc8ed08a"><td class="memItemLeft" align="right" valign="top">jmp_buf </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d70/mobileffmpeg__exception_8h.html#a816026146f4aa11794d8cab3dc8ed08a">ex_buf__</a></td></tr>
|
||||
<tr class="separator:a816026146f4aa11794d8cab3dc8ed08a"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a602bfc62417fcbda9f5e3e6604917b3c"><td class="memItemLeft" align="right" valign="top">__thread jmp_buf </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d70/mobileffmpeg__exception_8h.html#a602bfc62417fcbda9f5e3e6604917b3c">ex_buf__</a></td></tr>
|
||||
<tr class="separator:a602bfc62417fcbda9f5e3e6604917b3c"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
<h2 class="groupheader">Variable Documentation</h2>
|
||||
<a id="a816026146f4aa11794d8cab3dc8ed08a"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a816026146f4aa11794d8cab3dc8ed08a">◆ </a></span>ex_buf__</h2>
|
||||
<a id="a602bfc62417fcbda9f5e3e6604917b3c"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a602bfc62417fcbda9f5e3e6604917b3c">◆ </a></span>ex_buf__</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">jmp_buf ex_buf__</td>
|
||||
<td class="memname">__thread jmp_buf ex_buf__</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
<p>Holds information to implement exception handling. </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/d70/mobileffmpeg__exception_8h_source.html#l00027">27</a> of file <a class="el" href="../../d2/d70/mobileffmpeg__exception_8h_source.html">mobileffmpeg_exception.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dc/d11/mobileffmpeg__exception_8c_source.html#l00024">24</a> of file <a class="el" href="../../dc/d11/mobileffmpeg__exception_8c_source.html">mobileffmpeg_exception.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated on Sat Oct 26 2019 14:39:09 for MobileFFmpeg Android API by  <a href="http://www.doxygen.org/index.html">
|
||||
Generated on Sun Jan 12 2020 21:33:05 for MobileFFmpeg Android API by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.16
|
||||
</a> 1.8.17
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.16"/>
|
||||
<meta name="generator" content="Doxygen 1.8.17"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>MobileFFmpeg Android API: mobileffmpeg_exception.h Source File</title>
|
||||
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
|
||||
@@ -22,7 +22,7 @@
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">MobileFFmpeg Android API
|
||||
 <span id="projectnumber">4.3</span>
|
||||
 <span id="projectnumber">4.3.1</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -30,7 +30,7 @@
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.16 -->
|
||||
<!-- Generated by Doxygen 1.8.17 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
|
||||
@@ -91,16 +91,16 @@ $(function() {
|
||||
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <stdio.h></span></div>
|
||||
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <setjmp.h></span></div>
|
||||
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  </div>
|
||||
<div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="../../d2/d70/mobileffmpeg__exception_8h.html#a816026146f4aa11794d8cab3dc8ed08a"> 27</a></span> jmp_buf <a class="code" href="../../d2/d70/mobileffmpeg__exception_8h.html#a816026146f4aa11794d8cab3dc8ed08a">ex_buf__</a>;</div>
|
||||
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">extern</span> __thread jmp_buf <a class="code" href="../../d2/d70/mobileffmpeg__exception_8h.html#a602bfc62417fcbda9f5e3e6604917b3c">ex_buf__</a>;</div>
|
||||
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div>
|
||||
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#endif // MOBILE_FFMPEG_EXCEPTION_H</span></div>
|
||||
</div><!-- fragment --></div><!-- contents -->
|
||||
<div class="ttc" id="amobileffmpeg__exception_8h_html_a816026146f4aa11794d8cab3dc8ed08a"><div class="ttname"><a href="../../d2/d70/mobileffmpeg__exception_8h.html#a816026146f4aa11794d8cab3dc8ed08a">ex_buf__</a></div><div class="ttdeci">jmp_buf ex_buf__</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d70/mobileffmpeg__exception_8h_source.html#l00027">mobileffmpeg_exception.h:27</a></div></div>
|
||||
<div class="ttc" id="amobileffmpeg__exception_8h_html_a602bfc62417fcbda9f5e3e6604917b3c"><div class="ttname"><a href="../../d2/d70/mobileffmpeg__exception_8h.html#a602bfc62417fcbda9f5e3e6604917b3c">ex_buf__</a></div><div class="ttdeci">__thread jmp_buf ex_buf__</div><div class="ttdef"><b>Definition:</b> <a href="../../dc/d11/mobileffmpeg__exception_8c_source.html#l00024">mobileffmpeg_exception.c:24</a></div></div>
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated on Sat Oct 26 2019 14:39:09 for MobileFFmpeg Android API by  <a href="http://www.doxygen.org/index.html">
|
||||
Generated on Sun Jan 12 2020 21:33:05 for MobileFFmpeg Android API by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.16
|
||||
</a> 1.8.17
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.16"/>
|
||||
<meta name="generator" content="Doxygen 1.8.17"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>MobileFFmpeg Android API: CallbackData Struct Reference</title>
|
||||
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
|
||||
@@ -22,7 +22,7 @@
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">MobileFFmpeg Android API
|
||||
 <span id="projectnumber">4.3</span>
|
||||
 <span id="projectnumber">4.3.1</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -30,7 +30,7 @@
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.16 -->
|
||||
<!-- Generated by Doxygen 1.8.17 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
|
||||
@@ -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="../../dd/d16/mobileffmpeg_8c_source.html#l00058">58</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#l00060">60</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">◆ </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="../../dd/d16/mobileffmpeg_8c_source.html#l00062">62</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#l00064">64</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="../../dd/d16/mobileffmpeg_8c_source.html#l00061">61</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#l00063">63</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="../../dd/d16/mobileffmpeg_8c_source.html#l00072">72</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#l00074">74</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="../../dd/d16/mobileffmpeg_8c_source.html#l00069">69</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#l00071">71</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="../../dd/d16/mobileffmpeg_8c_source.html#l00065">65</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#l00067">67</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="../../dd/d16/mobileffmpeg_8c_source.html#l00064">64</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#l00066">66</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="../../dd/d16/mobileffmpeg_8c_source.html#l00066">66</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#l00068">68</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="../../dd/d16/mobileffmpeg_8c_source.html#l00067">67</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#l00069">69</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="../../dd/d16/mobileffmpeg_8c_source.html#l00070">70</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#l00072">72</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="../../dd/d16/mobileffmpeg_8c_source.html#l00068">68</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#l00070">70</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -271,7 +271,7 @@ Data Fields</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html#l00059">59</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#l00061">61</a> of file <a class="el" href="../../dd/d16/mobileffmpeg_8c_source.html">mobileffmpeg.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -281,9 +281,9 @@ Data Fields</h2></td></tr>
|
||||
</div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated on Sat Oct 26 2019 14:39:09 for MobileFFmpeg Android API by  <a href="http://www.doxygen.org/index.html">
|
||||
Generated on Sun Jan 12 2020 21:33:05 for MobileFFmpeg Android API by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.16
|
||||
</a> 1.8.17
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -0,0 +1,270 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.17"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>MobileFFmpeg Android API: CompactContext Struct Reference</title>
|
||||
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="../../jquery.js"></script>
|
||||
<script type="text/javascript" src="../../dynsections.js"></script>
|
||||
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="../../search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="../../search/search.js"></script>
|
||||
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">MobileFFmpeg Android API
|
||||
 <span id="projectnumber">4.3.1</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.17 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="../../menudata.js"></script>
|
||||
<script type="text/javascript" src="../../menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('../../',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
</div><!-- top -->
|
||||
<div class="header">
|
||||
<div class="summary">
|
||||
<a href="#pub-attribs">Data Fields</a> </div>
|
||||
<div class="headertitle">
|
||||
<div class="title">CompactContext Struct Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
|
||||
Data Fields</h2></td></tr>
|
||||
<tr class="memitem:a8e0108669bebe76f67bb8ae4869f4843"><td class="memItemLeft" align="right" valign="top">const AVClass * </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/ddd/struct_compact_context.html#a8e0108669bebe76f67bb8ae4869f4843">class</a></td></tr>
|
||||
<tr class="separator:a8e0108669bebe76f67bb8ae4869f4843"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ab69db67b807887e2e11247ff28f0482c"><td class="memItemLeft" align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/ddd/struct_compact_context.html#ab69db67b807887e2e11247ff28f0482c">item_sep_str</a></td></tr>
|
||||
<tr class="separator:ab69db67b807887e2e11247ff28f0482c"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a803eb26c6bc39957c885f8f58dfee861"><td class="memItemLeft" align="right" valign="top">char </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/ddd/struct_compact_context.html#a803eb26c6bc39957c885f8f58dfee861">item_sep</a></td></tr>
|
||||
<tr class="separator:a803eb26c6bc39957c885f8f58dfee861"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a4d211d2b2ba9c83a0613ec9c79af1f71"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/ddd/struct_compact_context.html#a4d211d2b2ba9c83a0613ec9c79af1f71">nokey</a></td></tr>
|
||||
<tr class="separator:a4d211d2b2ba9c83a0613ec9c79af1f71"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:af0b37847b18bd84f3d786c7e824356ee"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/ddd/struct_compact_context.html#af0b37847b18bd84f3d786c7e824356ee">print_section</a></td></tr>
|
||||
<tr class="separator:af0b37847b18bd84f3d786c7e824356ee"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ad9d56249a5965a5ec47f3a1241ce6b1e"><td class="memItemLeft" align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/ddd/struct_compact_context.html#ad9d56249a5965a5ec47f3a1241ce6b1e">escape_mode_str</a></td></tr>
|
||||
<tr class="separator:ad9d56249a5965a5ec47f3a1241ce6b1e"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:aca6e0530af4ddb5ed96f8198e57c7250"><td class="memItemLeft" align="right" valign="top">const char *(* </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/ddd/struct_compact_context.html#aca6e0530af4ddb5ed96f8198e57c7250">escape_str</a> )(AVBPrint *dst, const char *src, const char sep, void *log_ctx)</td></tr>
|
||||
<tr class="separator:aca6e0530af4ddb5ed96f8198e57c7250"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a2b8d470952d1051c0fd6b89b13a35e1e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/ddd/struct_compact_context.html#a2b8d470952d1051c0fd6b89b13a35e1e">nested_section</a> [<a class="el" href="../../d8/d78/fftools__ffprobe_8c.html#a2f442d8e70375b779fedabf97069dd93">SECTION_MAX_NB_LEVELS</a>]</td></tr>
|
||||
<tr class="separator:a2b8d470952d1051c0fd6b89b13a35e1e"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a2384aee850920cabfaece87e4c368931"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/ddd/struct_compact_context.html#a2384aee850920cabfaece87e4c368931">has_nested_elems</a> [<a class="el" href="../../d8/d78/fftools__ffprobe_8c.html#a2f442d8e70375b779fedabf97069dd93">SECTION_MAX_NB_LEVELS</a>]</td></tr>
|
||||
<tr class="separator:a2384aee850920cabfaece87e4c368931"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a14c571b1a684a9d550b5649fcbaa93f8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/ddd/struct_compact_context.html#a14c571b1a684a9d550b5649fcbaa93f8">terminate_line</a> [<a class="el" href="../../d8/d78/fftools__ffprobe_8c.html#a2f442d8e70375b779fedabf97069dd93">SECTION_MAX_NB_LEVELS</a>]</td></tr>
|
||||
<tr class="separator:a14c571b1a684a9d550b5649fcbaa93f8"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||
<div class="textblock">
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01075">1075</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
</div><h2 class="groupheader">Field Documentation</h2>
|
||||
<a id="a8e0108669bebe76f67bb8ae4869f4843"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a8e0108669bebe76f67bb8ae4869f4843">◆ </a></span>class</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">const AVClass* CompactContext::class</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01076">1076</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="ad9d56249a5965a5ec47f3a1241ce6b1e"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#ad9d56249a5965a5ec47f3a1241ce6b1e">◆ </a></span>escape_mode_str</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">char* CompactContext::escape_mode_str</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01081">1081</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="aca6e0530af4ddb5ed96f8198e57c7250"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#aca6e0530af4ddb5ed96f8198e57c7250">◆ </a></span>escape_str</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">const char*(* CompactContext::escape_str) (AVBPrint *dst, const char *src, const char sep, void *log_ctx)</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01082">1082</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="a2384aee850920cabfaece87e4c368931"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a2384aee850920cabfaece87e4c368931">◆ </a></span>has_nested_elems</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> CompactContext::has_nested_elems[<a class="el" href="../../d8/d78/fftools__ffprobe_8c.html#a2f442d8e70375b779fedabf97069dd93">SECTION_MAX_NB_LEVELS</a>]</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01084">1084</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="a803eb26c6bc39957c885f8f58dfee861"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a803eb26c6bc39957c885f8f58dfee861">◆ </a></span>item_sep</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">char CompactContext::item_sep</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01078">1078</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="ab69db67b807887e2e11247ff28f0482c"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#ab69db67b807887e2e11247ff28f0482c">◆ </a></span>item_sep_str</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">char* CompactContext::item_sep_str</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01077">1077</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="a2b8d470952d1051c0fd6b89b13a35e1e"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a2b8d470952d1051c0fd6b89b13a35e1e">◆ </a></span>nested_section</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> CompactContext::nested_section[<a class="el" href="../../d8/d78/fftools__ffprobe_8c.html#a2f442d8e70375b779fedabf97069dd93">SECTION_MAX_NB_LEVELS</a>]</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01083">1083</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="a4d211d2b2ba9c83a0613ec9c79af1f71"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a4d211d2b2ba9c83a0613ec9c79af1f71">◆ </a></span>nokey</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> CompactContext::nokey</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01079">1079</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="af0b37847b18bd84f3d786c7e824356ee"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#af0b37847b18bd84f3d786c7e824356ee">◆ </a></span>print_section</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> CompactContext::print_section</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01080">1080</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="a14c571b1a684a9d550b5649fcbaa93f8"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a14c571b1a684a9d550b5649fcbaa93f8">◆ </a></span>terminate_line</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> CompactContext::terminate_line[<a class="el" href="../../d8/d78/fftools__ffprobe_8c.html#a2f442d8e70375b779fedabf97069dd93">SECTION_MAX_NB_LEVELS</a>]</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01085">1085</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<hr/>The documentation for this struct was generated from the following file:<ul>
|
||||
<li><a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a></li>
|
||||
</ul>
|
||||
</div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated on Sun Jan 12 2020 21:33:05 for MobileFFmpeg Android API by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.17
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
||||
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.16"/>
|
||||
<meta name="generator" content="Doxygen 1.8.17"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>MobileFFmpeg Android API: Option Struct Reference</title>
|
||||
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
|
||||
@@ -22,7 +22,7 @@
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">MobileFFmpeg Android API
|
||||
 <span id="projectnumber">4.3</span>
|
||||
 <span id="projectnumber">4.3.1</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -30,7 +30,7 @@
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.16 -->
|
||||
<!-- Generated by Doxygen 1.8.17 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
|
||||
@@ -81,7 +81,7 @@ Data Fields</h2></td></tr>
|
||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||
<div class="textblock"><p>An option extracted from the commandline. Cannot use AVDictionary because of options like -map which can be used multiple times. </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d4e/fftools__cmdutils_8h_source.html#l00304">304</a> of file <a class="el" href="../../d8/d4e/fftools__cmdutils_8h_source.html">fftools_cmdutils.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d4e/fftools__cmdutils_8h_source.html#l00274">274</a> of file <a class="el" href="../../d8/d4e/fftools__cmdutils_8h_source.html">fftools_cmdutils.h</a>.</p>
|
||||
</div><h2 class="groupheader">Field Documentation</h2>
|
||||
<a id="a16d977bce49a6da603426937ff7b6617"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a16d977bce49a6da603426937ff7b6617">◆ </a></span>key</h2>
|
||||
@@ -95,7 +95,7 @@ Data Fields</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d4e/fftools__cmdutils_8h_source.html#l00306">306</a> of file <a class="el" href="../../d8/d4e/fftools__cmdutils_8h_source.html">fftools_cmdutils.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d4e/fftools__cmdutils_8h_source.html#l00276">276</a> of file <a class="el" href="../../d8/d4e/fftools__cmdutils_8h_source.html">fftools_cmdutils.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -111,7 +111,7 @@ Data Fields</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d4e/fftools__cmdutils_8h_source.html#l00305">305</a> of file <a class="el" href="../../d8/d4e/fftools__cmdutils_8h_source.html">fftools_cmdutils.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d4e/fftools__cmdutils_8h_source.html#l00275">275</a> of file <a class="el" href="../../d8/d4e/fftools__cmdutils_8h_source.html">fftools_cmdutils.h</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="../../d8/d4e/fftools__cmdutils_8h_source.html#l00307">307</a> of file <a class="el" href="../../d8/d4e/fftools__cmdutils_8h_source.html">fftools_cmdutils.h</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d8/d4e/fftools__cmdutils_8h_source.html#l00277">277</a> of file <a class="el" href="../../d8/d4e/fftools__cmdutils_8h_source.html">fftools_cmdutils.h</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -137,9 +137,9 @@ Data Fields</h2></td></tr>
|
||||
</div><!-- contents -->
|
||||
<!-- start footer part -->
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated on Sat Oct 26 2019 14:39:09 for MobileFFmpeg Android API by  <a href="http://www.doxygen.org/index.html">
|
||||
Generated on Sun Jan 12 2020 21:33:06 for MobileFFmpeg Android API by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.16
|
||||
</a> 1.8.17
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user