Merge branch 'development-flutter'

pull/792/head
Thibault Deckers 2 years ago
commit 7481e10925
  1. 2
      .github/pull_request_template.md
  2. 26
      .github/workflows/android-build-scripts.yml
  3. 4
      .github/workflows/linux-build-scripts.yml
  4. 16
      .github/workflows/periodic-builds-android.yml
  5. 12
      .github/workflows/periodic-builds-apple.yml
  6. 31
      README.md
  7. 6
      android/README.md
  8. 2
      android/build.gradle
  9. 2
      android/ffmpeg-kit-android-lib/Doxyfile
  10. 30
      android/ffmpeg-kit-android-lib/build.gradle
  11. 2
      android/ffmpeg-kit-android-lib/consumer-rules.pro
  12. 53
      android/ffmpeg-kit-android-lib/src/main/cpp/ffmpegkit.c
  13. 2
      android/ffmpeg-kit-android-lib/src/main/cpp/ffmpegkit.h
  14. 46
      android/ffmpeg-kit-android-lib/src/main/cpp/fftools_cmdutils.c
  15. 25
      android/ffmpeg-kit-android-lib/src/main/cpp/fftools_cmdutils.h
  16. 2783
      android/ffmpeg-kit-android-lib/src/main/cpp/fftools_ffmpeg.c
  17. 370
      android/ffmpeg-kit-android-lib/src/main/cpp/fftools_ffmpeg.h
  18. 1148
      android/ffmpeg-kit-android-lib/src/main/cpp/fftools_ffmpeg_demux.c
  19. 289
      android/ffmpeg-kit-android-lib/src/main/cpp/fftools_ffmpeg_filter.c
  20. 27
      android/ffmpeg-kit-android-lib/src/main/cpp/fftools_ffmpeg_hw.c
  21. 682
      android/ffmpeg-kit-android-lib/src/main/cpp/fftools_ffmpeg_mux.c
  22. 165
      android/ffmpeg-kit-android-lib/src/main/cpp/fftools_ffmpeg_mux.h
  23. 2414
      android/ffmpeg-kit-android-lib/src/main/cpp/fftools_ffmpeg_mux_init.c
  24. 2692
      android/ffmpeg-kit-android-lib/src/main/cpp/fftools_ffmpeg_opt.c
  25. 119
      android/ffmpeg-kit-android-lib/src/main/cpp/fftools_ffprobe.c
  26. 145
      android/ffmpeg-kit-android-lib/src/main/cpp/fftools_objpool.c
  27. 50
      android/ffmpeg-kit-android-lib/src/main/cpp/fftools_objpool.h
  28. 11
      android/ffmpeg-kit-android-lib/src/main/cpp/fftools_opt_common.c
  29. 2
      android/ffmpeg-kit-android-lib/src/main/cpp/fftools_opt_common.h
  30. 462
      android/ffmpeg-kit-android-lib/src/main/cpp/fftools_sync_queue.c
  31. 122
      android/ffmpeg-kit-android-lib/src/main/cpp/fftools_sync_queue.h
  32. 259
      android/ffmpeg-kit-android-lib/src/main/cpp/fftools_thread_queue.c
  33. 94
      android/ffmpeg-kit-android-lib/src/main/cpp/fftools_thread_queue.h
  34. 6
      android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFmpegKitConfig.java
  35. 2
      android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/NativeLoader.java
  36. 8
      android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/Statistics.java
  37. 2
      android/gradle/wrapper/gradle-wrapper.properties
  38. 2
      android/jni/Android.mk
  39. 2
      apple/Doxyfile
  40. 13
      apple/README.md
  41. 4
      apple/configure.ac
  42. 21
      apple/src/FFmpegKitConfig.m
  43. 13
      apple/src/Makefile.am
  44. 77
      apple/src/Makefile.in
  45. 4
      apple/src/Statistics.h
  46. 6
      apple/src/Statistics.m
  47. 46
      apple/src/fftools_cmdutils.c
  48. 25
      apple/src/fftools_cmdutils.h
  49. 2783
      apple/src/fftools_ffmpeg.c
  50. 370
      apple/src/fftools_ffmpeg.h
  51. 1148
      apple/src/fftools_ffmpeg_demux.c
  52. 289
      apple/src/fftools_ffmpeg_filter.c
  53. 27
      apple/src/fftools_ffmpeg_hw.c
  54. 679
      apple/src/fftools_ffmpeg_mux.c
  55. 165
      apple/src/fftools_ffmpeg_mux.h
  56. 2414
      apple/src/fftools_ffmpeg_mux_init.c
  57. 2692
      apple/src/fftools_ffmpeg_opt.c
  58. 119
      apple/src/fftools_ffprobe.c
  59. 145
      apple/src/fftools_objpool.c
  60. 50
      apple/src/fftools_objpool.h
  61. 11
      apple/src/fftools_opt_common.c
  62. 2
      apple/src/fftools_opt_common.h
  63. 462
      apple/src/fftools_sync_queue.c
  64. 122
      apple/src/fftools_sync_queue.h
  65. 259
      apple/src/fftools_thread_queue.c
  66. 94
      apple/src/fftools_thread_queue.h
  67. 101
      docs/android/doc/html/annotated.html
  68. BIN
      docs/android/doc/html/bc_sd.png
  69. 59
      docs/android/doc/html/classes.html
  70. 71
      docs/android/doc/html/d0/d07/ffmpegkit__abidetect_8h.html
  71. 33
      docs/android/doc/html/d0/d07/ffmpegkit__abidetect_8h_source.html
  72. 87
      docs/android/doc/html/d0/d0f/struct_output_filter.html
  73. 27
      docs/android/doc/html/d1/d9f/fftools__fopen__utf8_8h.html
  74. 27
      docs/android/doc/html/d1/d9f/fftools__fopen__utf8_8h_source.html
  75. 135
      docs/android/doc/html/d1/da2/struct_writer_context.html
  76. 85
      docs/android/doc/html/d1/dba/fftools__ffmpeg__hw_8c.html
  77. 1273
      docs/android/doc/html/d1/dba/fftools__ffmpeg__hw_8c_source.html
  78. 55
      docs/android/doc/html/d1/ddd/ffprobekit_8c.html
  79. 41
      docs/android/doc/html/d1/ddd/ffprobekit_8c_source.html
  80. 359
      docs/android/doc/html/d2/d36/fftools__ffmpeg__filter_8c.html
  81. 2794
      docs/android/doc/html/d2/d36/fftools__ffmpeg__filter_8c_source.html
  82. 169
      docs/android/doc/html/d2/d50/fftools__opt__common_8h.html
  83. 77
      docs/android/doc/html/d2/d50/fftools__opt__common_8h_source.html
  84. 221
      docs/android/doc/html/d2/d94/struct_sync_queue_stream.html
  85. 29
      docs/android/doc/html/d2/dbf/ffprobekit_8h.html
  86. 27
      docs/android/doc/html/d2/dbf/ffprobekit_8h_source.html
  87. 59
      docs/android/doc/html/d2/dc3/struct_callback_data.html
  88. 67
      docs/android/doc/html/d2/ddd/struct_compact_context.html
  89. 41
      docs/android/doc/html/d3/d1d/struct_option.html
  90. 345
      docs/android/doc/html/d3/d6e/struct_input_stream.html
  91. 241
      docs/android/doc/html/d3/da2/struct_keyframe_force_ctx.html
  92. 29
      docs/android/doc/html/d3/dad/ffmpegkit__exception_8h.html
  93. 27
      docs/android/doc/html/d3/dad/ffmpegkit__exception_8h_source.html
  94. 43
      docs/android/doc/html/d3/db7/struct_flat_context.html
  95. 185
      docs/android/doc/html/d4/d62/struct_obj_pool.html
  96. 43
      docs/android/doc/html/d4/da0/struct_default_context.html
  97. 59
      docs/android/doc/html/d4/dfd/struct_input_stream_1_1sub2video.html
  98. 39
      docs/android/doc/html/d5/d8e/struct_benchmark_time_stamps.html
  99. 700
      docs/android/doc/html/d5/d94/fftools__ffmpeg__mux_8c.html
  100. 1287
      docs/android/doc/html/d5/d94/fftools__ffmpeg__mux_8c_source.html
  101. Some files were not shown because too many files have changed in this diff Show More

@ -8,7 +8,7 @@ Please also include the context and motivation about the changes introduced.
- Documentation
## Checks
- [ ] Changes support all platforms (`Android`, `iOS`, `Linux`, macOS`, `tvOS`)
- [ ] Changes support all platforms (`Android`, `iOS`, `Linux`, `macOS`, `tvOS`)
- [ ] Breaks existing functionality
- [ ] Implementation is completed, not half-done
- [ ] Is there another PR already created for this feature/bug fix

@ -27,7 +27,7 @@ on:
jobs:
build-main-on-linux:
name: android main on linux
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
strategy:
matrix:
ndk-version: [ 'r22b-linux-x86_64', 'r23b-linux', 'r24-linux', 'r25b-linux' ]
@ -36,11 +36,11 @@ jobs:
shell: bash
steps:
- uses: actions/checkout@v2
- name: set up adopt jdk 11
- name: set up adopt jdk 17
uses: actions/setup-java@v3
with:
distribution: 'adopt'
java-version: '11'
java-version: '17'
- name: set up android ndk
run: |
curl -s "https://dl.google.com/android/repository/android-ndk-${{ matrix.ndk-version }}.zip" -o ndk.zip
@ -56,7 +56,7 @@ jobs:
run: '[[ -f ./src/ffmpeg/ffbuild/config.log ]] && tail -50 ./src/ffmpeg/ffbuild/config.log'
build-lts-on-linux:
name: android lts on linux
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
strategy:
matrix:
ndk-version: [ 'r22b-linux-x86_64', 'r23b-linux' ]
@ -65,11 +65,11 @@ jobs:
shell: bash
steps:
- uses: actions/checkout@v2
- name: set up adopt jdk 11
- name: set up adopt jdk 17
uses: actions/setup-java@v3
with:
distribution: 'adopt'
java-version: '11'
java-version: '17'
- name: set up android ndk
run: |
curl -s "https://dl.google.com/android/repository/android-ndk-${{ matrix.ndk-version }}.zip" -o ndk.zip
@ -94,11 +94,11 @@ jobs:
shell: bash
steps:
- uses: actions/checkout@v2
- name: set up adopt jdk 11
- name: set up adopt jdk 17
uses: actions/setup-java@v3
with:
distribution: 'adopt'
java-version: '11'
java-version: '17'
- name: set up android ndk
run: |
curl -s "https://dl.google.com/android/repository/android-ndk-${{ matrix.ndk-version }}.zip" -o ndk.zip
@ -123,11 +123,11 @@ jobs:
shell: bash
steps:
- uses: actions/checkout@v2
- name: set up adopt jdk 11
- name: set up adopt jdk 17
uses: actions/setup-java@v3
with:
distribution: 'adopt'
java-version: '11'
java-version: '17'
- name: set up android ndk
run: |
curl -s "https://dl.google.com/android/repository/android-ndk-${{ matrix.ndk-version }}.zip" -o ndk.zip
@ -143,7 +143,7 @@ jobs:
run: '[[ -f ./src/ffmpeg/ffbuild/config.log ]] && tail -50 ./src/ffmpeg/ffbuild/config.log'
build-main-without-ffmpeg-kit-protocols-on-linux:
name: build without ffmpeg-kit protocols
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
strategy:
matrix:
ndk-version: [ 'r22b-linux-x86_64' ]
@ -152,11 +152,11 @@ jobs:
shell: bash
steps:
- uses: actions/checkout@v2
- name: set up adopt jdk 11
- name: set up adopt jdk 17
uses: actions/setup-java@v3
with:
distribution: 'adopt'
java-version: '11'
java-version: '17'
- name: set up android ndk
run: |
curl -s "https://dl.google.com/android/repository/android-ndk-${{ matrix.ndk-version }}.zip" -o ndk.zip

@ -32,7 +32,7 @@ jobs:
steps:
- uses: actions/checkout@v2
- name: prerequisites
run: sudo apt-get install clang llvm lld libclang-11-dev libstdc++6 nasm autoconf automake libtool pkg-config curl git doxygen rapidjson-dev
run: sudo apt-get install clang llvm lld libclang-14-dev libstdc++6 nasm autoconf automake libtool pkg-config curl git doxygen rapidjson-dev
- name: run the build script
run: ./linux.sh -d
- name: print build logs
@ -50,7 +50,7 @@ jobs:
steps:
- uses: actions/checkout@v2
- name: prerequisites
run: sudo apt-get install clang llvm lld libclang-11-dev libstdc++6 nasm autoconf automake libtool pkg-config curl git doxygen rapidjson-dev
run: sudo apt-get install clang llvm lld libclang-14-dev libstdc++6 nasm autoconf automake libtool pkg-config curl git doxygen rapidjson-dev
- name: run the build script
run: ./linux.sh -d --lts
- name: print build logs

@ -7,7 +7,7 @@ on:
jobs:
build-android-main-on-linux:
name: android main on linux
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
strategy:
matrix:
ndk-version: [ 'r22b-linux-x86_64', 'r23b-linux', 'r24-linux', 'r25b-linux' ]
@ -19,13 +19,13 @@ jobs:
- uses: actions/checkout@v2
with:
ref: ${{ matrix.branches }}
- name: set up adopt jdk 11
- name: set up adopt jdk 17
uses: actions/setup-java@v3
with:
distribution: 'adopt'
java-version: '11'
java-version: '17'
- name: prerequisites
run: sudo apt-get install autoconf automake libtool pkg-config curl git cmake gcc gperf texinfo yasm nasm bison autogen wget autopoint meson ninja-build ragel
run: sudo apt-get install autoconf automake libtool pkg-config curl git doxygen nasm cmake gcc gperf texinfo yasm bison autogen wget autopoint meson ninja-build ragel groff gtk-doc-tools libtasn1-6
- name: upgrade meson
run: pip install meson --upgrade
- name: set up android ndk
@ -43,7 +43,7 @@ jobs:
run: '[[ -f ./src/ffmpeg/ffbuild/config.log ]] && tail -50 ./src/ffmpeg/ffbuild/config.log'
build-android-lts-on-linux:
name: android lts on linux
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
strategy:
matrix:
ndk-version: [ 'r22b-linux-x86_64', 'r23b-linux' ]
@ -55,13 +55,13 @@ jobs:
- uses: actions/checkout@v2
with:
ref: ${{ matrix.branches }}
- name: set up adopt jdk 11
- name: set up adopt jdk 17
uses: actions/setup-java@v3
with:
distribution: 'adopt'
java-version: '11'
java-version: '17'
- name: prerequisites
run: sudo apt-get install autoconf automake libtool pkg-config curl git cmake gcc gperf texinfo yasm nasm bison autogen wget autopoint meson ninja-build ragel
run: sudo apt-get install autoconf automake libtool pkg-config curl git doxygen nasm cmake gcc gperf texinfo yasm bison autogen wget autopoint meson ninja-build ragel groff gtk-doc-tools libtasn1-6
- name: upgrade meson
run: pip install meson --upgrade
- name: set up android ndk

@ -20,7 +20,7 @@ jobs:
with:
ref: ${{ matrix.branches }}
- name: prerequisites
run: brew install autoconf automake libtool pkg-config curl git cmake gcc gperf texinfo yasm nasm bison autogen wget meson ninja ragel --overwrite
run: brew install autoconf automake libtool pkg-config curl git doxygen nasm cmake gcc gperf texinfo yasm bison autogen wget gettext meson ninja ragel groff gtk-doc-tools libtasn1 --overwrite
- name: set up xcode
run: echo "export DEVELOPER_DIR=/Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer" > ~/.xcode.for.ffmpeg.kit.sh
- name: run the build script
@ -46,7 +46,7 @@ jobs:
with:
ref: ${{ matrix.branches }}
- name: prerequisites
run: brew install autoconf automake libtool pkg-config curl git cmake gcc gperf texinfo yasm nasm bison autogen wget meson ninja ragel --overwrite
run: brew install autoconf automake libtool pkg-config curl git doxygen nasm cmake gcc gperf texinfo yasm bison autogen wget gettext meson ninja ragel groff gtk-doc-tools libtasn1 --overwrite
- name: set up xcode
run: echo "export DEVELOPER_DIR=/Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer" > ~/.xcode.for.ffmpeg.kit.sh
- name: run the build script
@ -72,7 +72,7 @@ jobs:
with:
ref: ${{ matrix.branches }}
- name: prerequisites
run: brew install autoconf automake libtool pkg-config curl git cmake gcc gperf texinfo yasm nasm bison autogen wget meson ninja ragel --overwrite
run: brew install autoconf automake libtool pkg-config curl git doxygen nasm cmake gcc gperf texinfo yasm bison autogen wget gettext meson ninja ragel groff gtk-doc-tools libtasn1 --overwrite
- name: set up xcode
run: echo "export DEVELOPER_DIR=/Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer" > ~/.xcode.for.ffmpeg.kit.sh
- name: run the build script
@ -98,7 +98,7 @@ jobs:
with:
ref: ${{ matrix.branches }}
- name: prerequisites
run: brew install autoconf automake libtool pkg-config curl git cmake gcc gperf texinfo yasm nasm bison autogen wget meson ninja ragel --overwrite
run: brew install autoconf automake libtool pkg-config curl git doxygen nasm cmake gcc gperf texinfo yasm bison autogen wget gettext meson ninja ragel groff gtk-doc-tools libtasn1 --overwrite
- name: set up xcode
run: echo "export DEVELOPER_DIR=/Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer" > ~/.xcode.for.ffmpeg.kit.sh
- name: run the build script
@ -124,7 +124,7 @@ jobs:
with:
ref: ${{ matrix.branches }}
- name: prerequisites
run: brew install autoconf automake libtool pkg-config curl git cmake gcc gperf texinfo yasm nasm bison autogen wget meson ninja ragel --overwrite
run: brew install autoconf automake libtool pkg-config curl git doxygen nasm cmake gcc gperf texinfo yasm bison autogen wget gettext meson ninja ragel groff gtk-doc-tools libtasn1 --overwrite
- name: set up xcode
run: echo "export DEVELOPER_DIR=/Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer" > ~/.xcode.for.ffmpeg.kit.sh
- name: run the build script
@ -150,7 +150,7 @@ jobs:
with:
ref: ${{ matrix.branches }}
- name: prerequisites
run: brew install autoconf automake libtool pkg-config curl git cmake gcc gperf texinfo yasm nasm bison autogen wget meson ninja ragel --overwrite
run: brew install autoconf automake libtool pkg-config curl git doxygen nasm cmake gcc gperf texinfo yasm bison autogen wget gettext meson ninja ragel groff gtk-doc-tools libtasn1 --overwrite
- name: set up xcode
run: echo "export DEVELOPER_DIR=/Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer" > ~/.xcode.for.ffmpeg.kit.sh
- name: run the build script

@ -1,4 +1,4 @@
# FFmpegKit ![GitHub release](https://img.shields.io/badge/release-v5.1-blue.svg) ![Maven Central](https://img.shields.io/maven-central/v/com.arthenica/ffmpeg-kit-min) ![CocoaPods](https://img.shields.io/cocoapods/v/ffmpeg-kit-ios-min) ![pub](https://img.shields.io/pub/v/ffmpeg_kit_flutter.svg) ![npm](https://img.shields.io/npm/v/ffmpeg-kit-react-native.svg)
# FFmpegKit ![GitHub release](https://img.shields.io/badge/release-v6.0-blue.svg) ![Maven Central](https://img.shields.io/maven-central/v/com.arthenica/ffmpeg-kit-min) ![CocoaPods](https://img.shields.io/cocoapods/v/ffmpeg-kit-ios-min) ![pub](https://img.shields.io/pub/v/ffmpeg_kit_flutter.svg) ![npm](https://img.shields.io/npm/v/ffmpeg-kit-react-native.svg)
<img src="https://github.com/arthenica/ffmpeg-kit/blob/main/docs/assets/ffmpeg-kit-icon-v9.png" width="240">
@ -124,20 +124,21 @@ the same `FFmpeg` release branch.
`dev` part in the version string indicates that `FFmpeg` source code is cloned from the `FFmpeg` `master` branch and
the exact version number of `FFmpeg` is obtained using the `git describe --tags` command.
| Platforms | FFmpegKit Version | FFmpeg Version | Release Date |
|:----------------:|:----------------------------------------------------------------------------------:|:--------------:|:------------:|
| Flutter | [5.1.0](https://github.com/arthenica/ffmpeg-kit/releases/tag/flutter.v5.1.0) | 5.1.2 | Oct 02, 2022 |
| Android | [5.1](https://github.com/arthenica/ffmpeg-kit/releases/tag/v5.1) | 5.1.2 | Sep 29, 2022 |
| Apple | [5.1](https://github.com/arthenica/ffmpeg-kit/releases/tag/v5.1) | 5.1.2 | Sep 29, 2022 |
| React Native | [4.5.2](https://github.com/arthenica/ffmpeg-kit/releases/tag/react.native.v4.5.2) | 4.5-dev-3393 | May 25, 2022 |
| Flutter | [4.5.1](https://github.com/arthenica/ffmpeg-kit/releases/tag/flutter.v4.5.1) | 4.5-dev-3393 | Jan 02, 2022 |
| React Native | [4.5.1](https://github.com/arthenica/ffmpeg-kit/releases/tag/react.native.v4.5.1) | 4.5-dev-3393 | Jan 02, 2022 |
| Android | [4.5.1](https://github.com/arthenica/ffmpeg-kit/releases/tag/v4.5.1) | 4.5-dev-3393 | Jan 01, 2022 |
| Apple | [4.5.1](https://github.com/arthenica/ffmpeg-kit/releases/tag/v4.5.1) | 4.5-dev-3393 | Dec 30, 2021 |
| Flutter | [4.5.0](https://github.com/arthenica/ffmpeg-kit/releases/tag/flutter.v4.5.0) | 4.5-dev-2008 | Oct 05, 2021 |
| React Native | [4.5.0](https://github.com/arthenica/ffmpeg-kit/releases/tag/react.native.v4.5.0) | 4.5-dev-2008 | Oct 01, 2021 |
| Android<br>Apple | [4.5](https://github.com/arthenica/ffmpeg-kit/releases/tag/v4.5) | 4.5-dev-2008 | Sep 18, 2021 |
| Android<br>Apple | [4.4](https://github.com/arthenica/ffmpeg-kit/releases/tag/v4.4) | 4.4-dev-3015 | Mar 03, 2021 |
| Platforms | FFmpegKit Version | FFmpeg Version | Release Date |
|:----------------:|:-----------------------------------------------------------------------------------:|:--------------:|:------------:|
| Android<br>Apple | [6.0](https://github.com/arthenica/ffmpeg-kit/releases/tag/v6.0) | 6.0 | Aug 21, 2023 |
| React Native | [5.1.0](https://github.com/arthenica/ffmpeg-kit/releases/tag/react.native.v5.1.0) | 5.1.2 | Oct 02, 2022 |
| Flutter | [5.1.0](https://github.com/arthenica/ffmpeg-kit/releases/tag/flutter.v5.1.0) | 5.1.2 | Oct 02, 2022 |
| Android<br>Apple | [5.1](https://github.com/arthenica/ffmpeg-kit/releases/tag/v5.1) | 5.1.2 | Sep 29, 2022 |
| React Native | [4.5.2](https://github.com/arthenica/ffmpeg-kit/releases/tag/react.native.v4.5.2) | 4.5-dev-3393 | May 25, 2022 |
| Flutter | [4.5.1](https://github.com/arthenica/ffmpeg-kit/releases/tag/flutter.v4.5.1) | 4.5-dev-3393 | Jan 02, 2022 |
| React Native | [4.5.1](https://github.com/arthenica/ffmpeg-kit/releases/tag/react.native.v4.5.1) | 4.5-dev-3393 | Jan 02, 2022 |
| Android | [4.5.1](https://github.com/arthenica/ffmpeg-kit/releases/tag/v4.5.1) | 4.5-dev-3393 | Jan 01, 2022 |
| Apple | [4.5.1](https://github.com/arthenica/ffmpeg-kit/releases/tag/v4.5.1) | 4.5-dev-3393 | Dec 30, 2021 |
| Flutter | [4.5.0](https://github.com/arthenica/ffmpeg-kit/releases/tag/flutter.v4.5.0) | 4.5-dev-2008 | Oct 05, 2021 |
| React Native | [4.5.0](https://github.com/arthenica/ffmpeg-kit/releases/tag/react.native.v4.5.0) | 4.5-dev-2008 | Oct 01, 2021 |
| Android<br>Apple | [4.5](https://github.com/arthenica/ffmpeg-kit/releases/tag/v4.5) | 4.5-dev-2008 | Sep 18, 2021 |
| Android<br>Apple | [4.4](https://github.com/arthenica/ffmpeg-kit/releases/tag/v4.4) | 4.4-dev-3015 | Mar 03, 2021 |
### 11. LTS Releases

@ -22,14 +22,14 @@ external libraries enabled.
##### 2.1.1 Android Tools
- Android SDK Build Tools
- Android NDK r22b or later with LLDB and CMake (See [#292](https://github.com/arthenica/ffmpeg-kit/issues/292) if you want to use NDK r23b)
- Android NDK r22b or later with LLDB and CMake (See [#292](https://github.com/arthenica/ffmpeg-kit/issues/292) if you want to use NDK r23b or later)
##### 2.1.2 Packages
Use your package manager (apt, yum, dnf, brew, etc.) to install the following packages.
```
autoconf automake libtool pkg-config curl cmake gcc gperf texinfo yasm nasm bison autogen git wget autopoint meson ninja
autoconf automake libtool pkg-config curl git doxygen nasm cmake gcc gperf texinfo yasm bison autogen wget autopoint meson ninja ragel groff gtk-doc-tools libtasn1
```
##### 2.1.3 Environment Variables
@ -77,7 +77,7 @@ All libraries created by `android.sh` can be found under the `prebuilt` director
}
dependencies {
implementation 'com.arthenica:ffmpeg-kit-full:5.1'
implementation 'com.arthenica:ffmpeg-kit-full:6.0'
}
```

@ -4,7 +4,7 @@ buildscript {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.3.0'
classpath 'com.android.tools.build:gradle:8.1.0'
}
}

@ -38,7 +38,7 @@ PROJECT_NAME = "FFmpegKit Android API"
# could be handy for archiving the generated documentation or if some version
# control system is used.
PROJECT_NUMBER = 5.1
PROJECT_NUMBER = 6.0
# 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,15 +1,17 @@
apply plugin: 'com.android.library'
android {
namespace 'com.arthenica.ffmpegkit'
compileSdk 31
if (project.android.hasProperty("namespace")) {
namespace 'com.arthenica.ffmpegkit'
}
compileSdk 33
ndkVersion "22.1.7171670"
defaultConfig {
minSdk 24
targetSdk 31
versionCode 240510
versionName "5.1"
targetSdk 33
versionCode 240600
versionName "6.0"
project.archivesBaseName = "ffmpeg-kit"
consumerProguardFiles "consumer-rules.pro"
}
@ -38,19 +40,17 @@ android {
systemProperty 'enable.ffmpeg.kit.test.mode', 'true'
}
}
}
task javadoc(type: Javadoc) {
title = 'FFmpegKit'
destinationDir = file("${projectDir}/../../docs/android/javadoc")
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
source = android.sourceSets.main.java.srcDirs
configurations.implementation.setCanBeResolved(true)
classpath += configurations.implementation
publishing {
singleVariant('release') {
withJavadocJar()
withSourcesJar()
}
}
}
dependencies {
api 'com.arthenica:smart-exception-java:0.2.1'
testImplementation "androidx.test.ext:junit:1.1.3"
testImplementation 'org.json:json:20220320'
testImplementation "androidx.test.ext:junit:1.1.5"
testImplementation 'org.json:json:20230618'
}

@ -1,7 +1,7 @@
-keep class com.arthenica.ffmpegkit.FFmpegKitConfig {
native <methods>;
void log(long, int, byte[]);
void statistics(long, int, float, float, long , int, double, double);
void statistics(long, int, float, float, long , double, double, double);
int safOpen(int);
int safClose(int);
}

@ -45,7 +45,7 @@ struct CallbackData {
float statisticsFps; // statistics fps
float statisticsQuality; // statistics quality
int64_t statisticsSize; // statistics size
int statisticsTime; // statistics time
double statisticsTime; // statistics time
double statisticsBitrate; // statistics bitrate
double statisticsSpeed; // statistics speed
@ -312,7 +312,7 @@ void logCallbackDataAdd(int level, AVBPrint *data) {
/**
* Adds statistics data to the end of callback data list.
*/
void statisticsCallbackDataAdd(int frameNumber, float fps, float quality, int64_t size, int time, double bitrate, double speed) {
void statisticsCallbackDataAdd(int frameNumber, float fps, float quality, int64_t size, double time, double bitrate, double speed) {
// CREATE DATA STRUCT FIRST
struct CallbackData *newData = (struct CallbackData*)av_malloc(sizeof(struct CallbackData));
@ -491,7 +491,7 @@ void ffmpegkit_log_callback_function(void *ptr, int level, const char* format, v
* @param bitrate output bit rate in kbits/s
* @param speed processing speed = processed duration / operation duration
*/
void ffmpegkit_statistics_callback_function(int frameNumber, float fps, float quality, int64_t size, int time, double bitrate, double speed) {
void ffmpegkit_statistics_callback_function(int frameNumber, float fps, float quality, int64_t size, double time, double bitrate, double speed) {
statisticsCallbackDataAdd(frameNumber, fps, quality, size, time, bitrate, speed);
}
@ -581,6 +581,30 @@ int saf_close(int fd) {
return (*env)->CallStaticIntMethod(env, configClass, safCloseMethod, fd);
}
/**
* Used by JNI methods to enable redirection.
*/
static void enableNativeRedirection() {
mutexLock();
if (redirectionEnabled != 0) {
mutexUnlock();
return;
}
redirectionEnabled = 1;
mutexUnlock();
int rc = pthread_create(&callbackThread, 0, callbackThreadFunction, 0);
if (rc != 0) {
LOGE("Failed to create callback thread (rc=%d).\n", rc);
return;
}
av_log_set_callback(ffmpegkit_log_callback_function);
set_report_callback(ffmpegkit_statistics_callback_function);
}
/**
* Called when 'ffmpegkit' native library is loaded.
*
@ -620,7 +644,7 @@ jint JNI_OnLoad(JavaVM *vm, void *reserved) {
return JNI_FALSE;
}
statisticsMethod = (*env)->GetStaticMethodID(env, localConfigClass, "statistics", "(JIFFJIDD)V");
statisticsMethod = (*env)->GetStaticMethodID(env, localConfigClass, "statistics", "(JIFFJDDD)V");
if (statisticsMethod == NULL) {
LOGE("OnLoad thread failed to GetStaticMethodID for %s.\n", "statistics");
return JNI_FALSE;
@ -665,6 +689,8 @@ jint JNI_OnLoad(JavaVM *vm, void *reserved) {
av_set_saf_open(saf_open);
av_set_saf_close(saf_close);
enableNativeRedirection();
return JNI_VERSION_1_6;
}
@ -696,24 +722,7 @@ JNIEXPORT jint JNICALL Java_com_arthenica_ffmpegkit_FFmpegKitConfig_getNativeLog
* @param object reference to the class on which this method is invoked
*/
JNIEXPORT void JNICALL Java_com_arthenica_ffmpegkit_FFmpegKitConfig_enableNativeRedirection(JNIEnv *env, jclass object) {
mutexLock();
if (redirectionEnabled != 0) {
mutexUnlock();
return;
}
redirectionEnabled = 1;
mutexUnlock();
int rc = pthread_create(&callbackThread, 0, callbackThreadFunction, 0);
if (rc != 0) {
LOGE("Failed to create callback thread (rc=%d).\n", rc);
return;
}
av_log_set_callback(ffmpegkit_log_callback_function);
set_report_callback(ffmpegkit_statistics_callback_function);
enableNativeRedirection();
}
/**

@ -27,7 +27,7 @@
#include "libavutil/ffversion.h"
/** Library version string */
#define FFMPEG_KIT_VERSION "5.1"
#define FFMPEG_KIT_VERSION "6.0"
/** Defines tag used for Android logging. */
#define LIB_NAME "ffmpeg-kit"

@ -1,7 +1,8 @@
/*
* Various utilities for command line tools
* Copyright (c) 2000-2003 Fabrice Bellard
* copyright (c) 2018 Taner Sener ( tanersener gmail com )
* Copyright (c) 2018-2022 Taner Sener
* Copyright (c) 2023 ARTHENICA LTD
*
* This file is part of FFmpeg.
*
@ -25,6 +26,12 @@
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop mobile-ffmpeg and later ffmpeg-kit libraries.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
*
* mobile-ffmpeg / ffmpeg-kit changes by Taner Sener
*
* 09.2022
@ -129,11 +136,18 @@ void register_exit(void (*cb)(int ret))
program_exit = cb;
}
void report_and_exit(int ret)
{
av_log(NULL, AV_LOG_FATAL, "%s\n", av_err2str(ret));
exit_program(AVUNERROR(ret));
}
void exit_program(int ret)
{
if (program_exit)
program_exit(ret);
// FFmpegKit
// exit disabled and replaced with longjmp, exit value stored in longjmp_value
// exit(ret);
longjmp_value = ret;
@ -696,7 +710,7 @@ static void init_parse_context(OptionParseContext *octx,
octx->nb_groups = nb_groups;
octx->groups = av_calloc(octx->nb_groups, sizeof(*octx->groups));
if (!octx->groups)
exit_program(1);
report_and_exit(AVERROR(ENOMEM));
for (i = 0; i < octx->nb_groups; i++)
octx->groups[i].group_def = &groups[i];
@ -843,12 +857,7 @@ do { \
void print_error(const char *filename, int err)
{
char errbuf[128];
const char *errbuf_ptr = errbuf;
if (av_strerror(err, errbuf, sizeof(errbuf)) < 0)
errbuf_ptr = strerror(AVUNERROR(err));
av_log(NULL, AV_LOG_ERROR, "%s: %s\n", filename, errbuf_ptr);
av_log(NULL, AV_LOG_ERROR, "%s: %s\n", filename, av_err2str(err));
}
int read_yesno(void)
@ -971,7 +980,7 @@ AVDictionary *filter_codec_opts(AVDictionary *opts, enum AVCodecID codec_id,
break;
}
while ((t = av_dict_get(opts, "", t, AV_DICT_IGNORE_SUFFIX))) {
while ((t = av_dict_iterate(opts, t))) {
const AVClass *priv_class;
char *p = strchr(t->key, ':');
@ -1009,11 +1018,8 @@ AVDictionary **setup_find_stream_info_opts(AVFormatContext *s,
if (!s->nb_streams)
return NULL;
opts = av_calloc(s->nb_streams, sizeof(*opts));
if (!opts) {
av_log(NULL, AV_LOG_ERROR,
"Could not alloc memory for stream options.\n");
exit_program(1);
}
if (!opts)
report_and_exit(AVERROR(ENOMEM));
for (i = 0; i < s->nb_streams; i++)
opts[i] = filter_codec_opts(codec_opts, s->streams[i]->codecpar->codec_id,
s, s->streams[i], NULL);
@ -1028,10 +1034,8 @@ void *grow_array(void *array, int elem_size, int *size, int new_size)
}
if (*size < new_size) {
uint8_t *tmp = av_realloc_array(array, new_size, elem_size);
if (!tmp) {
av_log(NULL, AV_LOG_ERROR, "Could not alloc buffer.\n");
exit_program(1);
}
if (!tmp)
report_and_exit(AVERROR(ENOMEM));
memset(tmp + *size*elem_size, 0, (new_size-*size) * elem_size);
*size = new_size;
return tmp;
@ -1044,10 +1048,8 @@ void *allocate_array_elem(void *ptr, size_t elem_size, int *nb_elems)
void *new_elem;
if (!(new_elem = av_mallocz(elem_size)) ||
av_dynarray_add_nofree(ptr, nb_elems, new_elem) < 0) {
av_log(NULL, AV_LOG_ERROR, "Could not alloc buffer.\n");
exit_program(1);
}
av_dynarray_add_nofree(ptr, nb_elems, new_elem) < 0)
report_and_exit(AVERROR(ENOMEM));
return new_elem;
}

@ -1,7 +1,8 @@
/*
* Various utilities for command line tools
* copyright (c) 2003 Fabrice Bellard
* copyright (c) 2018 Taner Sener ( tanersener gmail com )
* copyright (c) 2018-2022 Taner Sener
* copyright (c) 2023 ARTHENICA LTD
*
* This file is part of FFmpeg.
*
@ -25,6 +26,12 @@
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop mobile-ffmpeg and later ffmpeg-kit libraries.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
*
* mobile-ffmpeg / ffmpeg-kit changes by Taner Sener
*
* 09.2022
@ -95,6 +102,17 @@ extern __thread int find_stream_info;
*/
void register_exit(void (*cb)(int ret));
/**
* Reports an error corresponding to the provided
* AVERROR code and calls exit_program() with the
* corresponding POSIX error code.
* @note ret must be an AVERROR-value of a POSIX error code
* (i.e. AVERROR(EFOO) and not AVERROR_FOO).
* library functions can return both, so call this only
* with AVERROR(EFOO) of your own.
*/
void report_and_exit(int ret) av_noreturn;
/**
* Wraps exit with a program-specific cleanup routine.
*/
@ -232,11 +250,6 @@ void show_help_children(const AVClass *clazz, int flags);
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.
*/
int show_help(void *optctx, const char *opt, const char *arg);
/**
* Parse the command line arguments.
*

File diff suppressed because it is too large Load Diff

@ -1,6 +1,7 @@
/*
* This file is part of FFmpeg.
* Copyright (c) 2018 Taner Sener ( tanersener gmail com )
* Copyright (c) 2018-2022 Taner Sener
* Copyright (c) 2023 ARTHENICA LTD
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -22,6 +23,16 @@
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop mobile-ffmpeg and later ffmpeg-kit libraries.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
* - WARN_MULTIPLE_OPT_USAGE, MATCH_PER_STREAM_OPT, MATCH_PER_TYPE_OPT, SPECIFIER_OPT_FMT declarations migrated to
* ffmpeg_mux.h
* - "class" member field renamed as clazz
* - time field in set_report_callback updated as double
*
* mobile-ffmpeg / ffmpeg-kit changes by Taner Sener
*
* 09.2022
@ -59,11 +70,13 @@
#include "config.h"
#include <stdatomic.h>
#include <stdint.h>
#include <stdio.h>
#include <signal.h>
#include "fftools_cmdutils.h"
#include "fftools_sync_queue.h"
#include "libavformat/avformat.h"
#include "libavformat/avio.h"
@ -85,6 +98,12 @@
#include "libswresample/swresample.h"
// deprecated features
#define FFMPEG_OPT_PSNR 1
#define FFMPEG_OPT_MAP_CHANNEL 1
#define FFMPEG_OPT_MAP_SYNC 1
#define FFMPEG_ROTATION_METADATA 1
enum VideoSyncMethod {
VSYNC_AUTO = -1,
VSYNC_PASSTHROUGH,
@ -113,15 +132,15 @@ typedef struct StreamMap {
int disabled; /* 1 is this mapping is disabled by a negative map */
int file_index;
int stream_index;
int sync_file_index;
int sync_stream_index;
char *linklabel; /* name of an output link, for mapping lavfi outputs */
} StreamMap;
#if FFMPEG_OPT_MAP_CHANNEL
typedef struct {
int file_idx, stream_idx, channel_idx; // input
int ofile_idx, ostream_idx; // output
} AudioChannelMap;
#endif
typedef struct OptionsContext {
OptionGroup *g;
@ -157,6 +176,7 @@ typedef struct OptionsContext {
int accurate_seek;
int thread_queue_size;
int input_sync_ref;
int find_stream_info;
SpecifierOpt *ts_scale;
int nb_ts_scale;
@ -174,11 +194,10 @@ typedef struct OptionsContext {
/* output options */
StreamMap *stream_maps;
int nb_stream_maps;
#if FFMPEG_OPT_MAP_CHANNEL
AudioChannelMap *audio_channel_maps; /* one info entry per -map_channel */
int nb_audio_channel_maps; /* number of (valid) -map_channel settings */
int metadata_global_manual;
int metadata_streams_manual;
int metadata_chapters_manual;
#endif
const char **attachments;
int nb_attachments;
@ -186,9 +205,10 @@ typedef struct OptionsContext {
int64_t recording_time;
int64_t stop_time;
uint64_t limit_filesize;
int64_t limit_filesize;
float mux_preload;
float mux_max_delay;
float shortest_buf_duration;
int shortest;
int bitexact;
@ -221,6 +241,12 @@ typedef struct OptionsContext {
int nb_force_fps;
SpecifierOpt *frame_aspect_ratios;
int nb_frame_aspect_ratios;
SpecifierOpt *display_rotations;
int nb_display_rotations;
SpecifierOpt *display_hflips;
int nb_display_hflips;
SpecifierOpt *display_vflips;
int nb_display_vflips;
SpecifierOpt *rc_overrides;
int nb_rc_overrides;
SpecifierOpt *intra_matrices;
@ -247,6 +273,8 @@ typedef struct OptionsContext {
int nb_reinit_filters;
SpecifierOpt *fix_sub_duration;
int nb_fix_sub_duration;
SpecifierOpt *fix_sub_duration_heartbeat;
int nb_fix_sub_duration_heartbeat;
SpecifierOpt *canvas_sizes;
int nb_canvas_sizes;
SpecifierOpt *pass;
@ -275,6 +303,18 @@ typedef struct OptionsContext {
int nb_autoscale;
SpecifierOpt *bits_per_raw_sample;
int nb_bits_per_raw_sample;
SpecifierOpt *enc_stats_pre;
int nb_enc_stats_pre;
SpecifierOpt *enc_stats_post;
int nb_enc_stats_post;
SpecifierOpt *mux_stats;
int nb_mux_stats;
SpecifierOpt *enc_stats_pre_fmt;
int nb_enc_stats_pre_fmt;
SpecifierOpt *enc_stats_post_fmt;
int nb_enc_stats_post_fmt;
SpecifierOpt *mux_stats_fmt;
int nb_mux_stats_fmt;
} OptionsContext;
typedef struct InputFilter {
@ -350,12 +390,22 @@ typedef struct InputStream {
#define DECODING_FOR_OST 1
#define DECODING_FOR_FILTER 2
int processing_needed; /* non zero if the packets must be processed */
// should attach FrameData as opaque_ref after decoding
int want_frame_data;
/**
* Codec parameters - to be used by the decoding/streamcopy code.
* st->codecpar should not be accessed, because it may be modified
* concurrently by the demuxing thread.
*/
AVCodecParameters *par;
AVCodecContext *dec_ctx;
const AVCodec *dec;
AVFrame *decoded_frame;
AVPacket *pkt;
AVRational framerate_guessed;
int64_t prev_pkt_pts;
int64_t start; /* time when read started */
/* predicted dts of the next packet read for this stream or (when there are
@ -368,6 +418,12 @@ typedef struct InputStream {
int64_t pts; ///< current pts of the decoded frame (in AV_TIME_BASE units)
int wrap_correction_done;
// the value of AVCodecParserContext.repeat_pict from the AVStream parser
// for the last packet returned from ifile_get_packet()
// -1 if unknown
// FIXME: this is a hack, the avstream parser should not be used
int last_pkt_repeat_pict;
int64_t filter_in_rescale_delta_last;
int64_t min_pts; /* pts with the smallest value in a current stream */
@ -417,12 +473,8 @@ typedef struct InputStream {
char *hwaccel_device;
enum AVPixelFormat hwaccel_output_format;
/* hwaccel context */
void *hwaccel_ctx;
void (*hwaccel_uninit)(AVCodecContext *s);
int (*hwaccel_retrieve_data)(AVCodecContext *s, AVFrame *frame);
enum AVPixelFormat hwaccel_pix_fmt;
enum AVPixelFormat hwaccel_retrieved_pix_fmt;
/* stats */
// combined size of all the packets read
@ -439,38 +491,46 @@ typedef struct InputStream {
int got_output;
} InputStream;
typedef struct LastFrameDuration {
int stream_idx;
int64_t duration;
} LastFrameDuration;
typedef struct InputFile {
int index;
AVFormatContext *ctx;
int eof_reached; /* true if eof reached */
int eagain; /* true if last read attempt returned EAGAIN */
int ist_index; /* index of first stream in input_streams */
int loop; /* set number of times input stream should be looped */
int64_t duration; /* actual duration of the longest stream in a file
at the moment when looping happens */
AVRational time_base; /* time base of the duration */
int64_t input_ts_offset;
int input_sync_ref;
/**
* Effective format start time based on enabled streams.
*/
int64_t start_time_effective;
int64_t ts_offset;
/**
* Extra timestamp offset added by discontinuity handling.
*/
int64_t ts_offset_discont;
int64_t last_ts;
int64_t start_time; /* user-specified start time in AV_TIME_BASE or AV_NOPTS_VALUE */
int64_t recording_time;
int nb_streams; /* number of stream that ffmpeg is aware of; may be different
from ctx.nb_streams if new streams appear during av_read_frame() */
int nb_streams_warn; /* number of streams that the user was warned of */
/* streams that ffmpeg is aware of;
* there may be extra streams in ctx that are not mapped to an InputStream
* if new streams appear dynamically during demuxing */
InputStream **streams;
int nb_streams;
int rate_emu;
float readrate;
int accurate_seek;
AVPacket *pkt;
#if HAVE_THREADS
AVThreadMessageQueue *in_thread_queue;
pthread_t thread; /* thread reading from this file */
int non_blocking; /* reading packets from the thread should not block */
int joined; /* the thread has been joined */
int thread_queue_size; /* maximum number of queued packets */
#endif
/* when looping the input file, this queue is used by decoders to report
* the last frame duration back to the demuxer thread */
AVThreadMessageQueue *audio_duration_queue;
int audio_duration_queue_size;
} InputFile;
enum forced_keyframes_const {
@ -485,6 +545,41 @@ enum forced_keyframes_const {
#define ABORT_ON_FLAG_EMPTY_OUTPUT (1 << 0)
#define ABORT_ON_FLAG_EMPTY_OUTPUT_STREAM (1 << 1)
enum EncStatsType {
ENC_STATS_LITERAL = 0,
ENC_STATS_FILE_IDX,
ENC_STATS_STREAM_IDX,
ENC_STATS_FRAME_NUM,
ENC_STATS_FRAME_NUM_IN,
ENC_STATS_TIMEBASE,
ENC_STATS_TIMEBASE_IN,
ENC_STATS_PTS,
ENC_STATS_PTS_TIME,
ENC_STATS_PTS_IN,
ENC_STATS_PTS_TIME_IN,
ENC_STATS_DTS,
ENC_STATS_DTS_TIME,
ENC_STATS_SAMPLE_NUM,
ENC_STATS_NB_SAMPLES,
ENC_STATS_PKT_SIZE,
ENC_STATS_BITRATE,
ENC_STATS_AVG_BITRATE,
};
typedef struct EncStatsComponent {
enum EncStatsType type;
uint8_t *str;
size_t str_len;
} EncStatsComponent;
typedef struct EncStats {
EncStatsComponent *components;
int nb_components;
AVIOContext *io;
} EncStats;
extern const char *const forced_keyframes_const_names[];
typedef enum {
@ -492,68 +587,92 @@ typedef enum {
MUXER_FINISHED = 2,
} OSTFinished ;
enum {
KF_FORCE_SOURCE = 1,
KF_FORCE_SOURCE_NO_DROP = 2,
};
typedef struct KeyframeForceCtx {
int type;
int64_t ref_pts;
// timestamps of the forced keyframes, in AV_TIME_BASE_Q
int64_t *pts;
int nb_pts;
int index;
AVExpr *pexpr;
double expr_const_values[FKF_NB];
int dropped_keyframe;
} KeyframeForceCtx;
typedef struct OutputStream {
const AVClass *clazz;
int file_index; /* file index */
int index; /* stream index in the output file */
int source_index; /* InputStream index */
/* input stream that is the source for this output stream;
* may be NULL for streams with no well-defined source, e.g.
* attachments or outputs from complex filtergraphs */
InputStream *ist;
AVStream *st; /* stream in the output file */
int encoding_needed; /* true if encoding needed for this stream */
int64_t frame_number;
/* input pts and corresponding output pts
for A/V sync */
struct InputStream *sync_ist; /* input stream to sync against */
int64_t sync_opts; /* output frame counter, could be changed to some true timestamp */ // FIXME look at frame_number
/* pts of the first frame encoded for this stream, used for limiting
* recording time */
int64_t first_pts;
/* dts of the last packet sent to the muxer */
/* number of frames emitted by the video-encoding sync code */
int64_t vsync_frame_number;
/* predicted pts of the next frame to be encoded
* audio/video encoding only */
int64_t next_pts;
/* dts of the last packet sent to the muxing queue, in AV_TIME_BASE_Q */
int64_t last_mux_dts;
/* pts of the last frame received from the filters, in AV_TIME_BASE_Q */
int64_t last_filter_pts;
// timestamp from which the streamcopied streams should start,
// in AV_TIME_BASE_Q;
// everything before it should be discarded
int64_t ts_copy_start;
// the timebase of the packets sent to the muxer
AVRational mux_timebase;
AVRational enc_timebase;
AVBSFContext *bsf_ctx;
AVCodecContext *enc_ctx;
AVCodecParameters *ref_par; /* associated input codec parameters with encoders options applied */
const AVCodec *enc;
int64_t max_frames;
AVFrame *filtered_frame;
AVFrame *last_frame;
AVFrame *sq_frame;
AVPacket *pkt;
int64_t last_dropped;
int64_t last_nb0_frames[3];
void *hwaccel_ctx;
/* video only */
AVRational frame_rate;
AVRational max_frame_rate;
enum VideoSyncMethod vsync_method;
int is_cfr;
const char *fps_mode;
int force_fps;
int top_field_first;
#if FFMPEG_ROTATION_METADATA
int rotate_overridden;
#endif
int autoscale;
int bitexact;
int bits_per_raw_sample;
#if FFMPEG_ROTATION_METADATA
double rotate_override_value;
#endif
AVRational frame_aspect_ratio;
/* forced key frames */
int64_t forced_kf_ref_pts;
int64_t *forced_kf_pts;
int forced_kf_count;
int forced_kf_index;
char *forced_keyframes;
AVExpr *forced_keyframes_pexpr;
double forced_keyframes_expr_const_values[FKF_NB];
int dropped_keyframe;
KeyframeForceCtx kf;
/* audio only */
#if FFMPEG_OPT_MAP_CHANNEL
int *audio_channels_map; /* list of the channels id to pick from the source stream */
int audio_channels_mapped; /* number of channels in audio_channels_map */
#endif
char *logfile_prefix;
FILE *logfile;
@ -569,7 +688,6 @@ typedef struct OutputStream {
char *apad;
OSTFinished finished; /* no more packets should be written for this stream */
int unavailable; /* true if the steram is unavailable (possibly temporarily) */
int stream_copy;
// init_output_stream() has been called for this stream
// The encoder and the bitstream filters have been initialized and the stream
@ -582,15 +700,16 @@ typedef struct OutputStream {
int streamcopy_started;
int copy_initial_nonkeyframes;
int copy_prior_start;
char *disposition;
int keep_pix_fmt;
/* stats */
// combined size of all the packets written
uint64_t data_size;
// combined size of all the packets sent to the muxer
uint64_t data_size_mux;
// combined size of all the packets received from the encoder
uint64_t data_size_enc;
// number of packets send to the muxer
uint64_t packets_written;
atomic_uint_least64_t packets_written;
// number of frames/samples sent to the encoder
uint64_t frames_encoded;
uint64_t samples_encoded;
@ -600,51 +719,48 @@ typedef struct OutputStream {
/* packet quality factor */
int quality;
int max_muxing_queue_size;
/* the packets are buffered here until the muxer is ready to be initialized */
AVFifo *muxing_queue;
/*
* The size of the AVPackets' buffers in queue.
* Updated when a packet is either pushed or pulled from the queue.
*/
size_t muxing_queue_data_size;
/* Threshold after which max_muxing_queue_size will be in effect */
size_t muxing_queue_data_threshold;
/* packet picture type */
int pict_type;
/* frame encode sum of squared error values */
int64_t error[4];
int sq_idx_encode;
int sq_idx_mux;
EncStats enc_stats_pre;
EncStats enc_stats_post;
/*
* bool on whether this stream should be utilized for splitting
* subtitles utilizing fix_sub_duration at random access points.
*/
unsigned int fix_sub_duration_heartbeat;
} OutputStream;
typedef struct OutputFile {
const AVClass *clazz;
int index;
const AVOutputFormat *format;
const char *url;
OutputStream **streams;
int nb_streams;
SyncQueue *sq_encode;
AVFormatContext *ctx;
AVDictionary *opts;
int ost_index; /* index of the first stream in output_streams */
int64_t recording_time; ///< desired length of the resulting file in microseconds == AV_TIME_BASE units
int64_t start_time; ///< start time in microseconds == AV_TIME_BASE units
uint64_t limit_filesize; /* filesize limit expressed in bytes */
int shortest;
int header_written;
int bitexact;
} OutputFile;
extern __thread InputStream **input_streams;
extern __thread int nb_input_streams;
extern __thread InputFile **input_files;
extern __thread int nb_input_files;
extern __thread OutputStream **output_streams;
extern __thread int nb_output_streams;
extern __thread OutputFile **output_files;
extern __thread int nb_output_files;
@ -658,13 +774,10 @@ extern __thread float audio_drift_threshold;
extern __thread float dts_delta_threshold;
extern __thread float dts_error_threshold;
extern __thread int audio_volume;
extern __thread int audio_sync_method;
extern __thread enum VideoSyncMethod 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;
@ -677,7 +790,6 @@ extern __thread int print_stats;
extern __thread int64_t stats_period;
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;
@ -688,15 +800,20 @@ extern __thread int auto_conversion_filters;
extern __thread const AVIOInterruptCB int_cb;
#if CONFIG_QSV
extern __thread char *qsv_device;
#endif
extern __thread HWDevice *filter_hw_device;
extern __thread int want_sdp;
extern __thread unsigned nb_output_dumped;
extern __thread int main_ffmpeg_return_code;
extern __thread int ignore_unknown_streams;
extern __thread int copy_unknown_streams;
extern __thread int recast_media;
#if FFMPEG_OPT_PSNR
extern __thread int do_psnr;
#endif
void term_init(void);
void term_exit(void);
@ -705,7 +822,12 @@ void show_usage(void);
void remove_avoptions(AVDictionary **a, AVDictionary *b);
void assert_avoptions(AVDictionary *m);
int guess_input_channel_layout(InputStream *ist);
void assert_file_overwrite(const char *filename);
char *file_read(const char *filename);
AVDictionary *strip_specifiers(const AVDictionary *dict);
const AVCodec *find_codec_or_die(void *logctx, const char *name,
enum AVMediaType type, int encoder);
int parse_and_set_vsync(const char *arg, int *vsync_var, int file_idx, int st_idx, int is_global);
int configure_filtergraph(FilterGraph *fg);
void check_filter_outputs(void);
@ -719,8 +841,9 @@ int ifilter_parameters_from_frame(InputFilter *ifilter, const AVFrame *frame);
int ffmpeg_parse_options(int argc, char **argv);
int videotoolbox_init(AVCodecContext *s);
int qsv_init(AVCodecContext *s);
void enc_stats_write(OutputStream *ost, EncStats *es,
const AVFrame *frame, const AVPacket *pkt,
uint64_t frame_num);
HWDevice *hw_device_get_by_name(const char *name);
int hw_device_init_from_string(const char *arg, HWDevice **dev);
@ -732,15 +855,58 @@ int hw_device_setup_for_filter(FilterGraph *fg);
int hwaccel_decode_init(AVCodecContext *avctx);
/* open the muxer when all the streams are initialized */
int of_check_init(OutputFile *of);
/*
* Initialize muxing state for the given stream, should be called
* after the codec/streamcopy setup has been done.
*
* Open the muxer once all the streams have been initialized.
*/
int of_stream_init(OutputFile *of, OutputStream *ost);
int of_write_trailer(OutputFile *of);
int of_open(const OptionsContext *o, const char *filename);
void of_close(OutputFile **pof);
void of_write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost,
int unqueue);
void of_enc_stats_close(void);
/*
* Send a single packet to the output, applying any bitstream filters
* associated with the output stream. This may result in any number
* of packets actually being written, depending on what bitstream
* filters are applied. The supplied packet is consumed and will be
* blank (as if newly-allocated) when this function returns.
*
* If eof is set, instead indicate EOF to all bitstream filters and
* therefore flush any delayed packets to the output. A blank packet
* must be supplied in this case.
*/
void of_output_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost, int eof);
int64_t of_filesize(OutputFile *of);
int ifile_open(const OptionsContext *o, const char *filename);
void ifile_close(InputFile **f);
/**
* Get next input packet from the demuxer.
*
* @param pkt the packet is written here when this function returns 0
* @return
* - 0 when a packet has been read successfully
* - 1 when stream end was reached, but the stream is looped;
* caller should flush decoders and read from this demuxer again
* - a negative error code on failure
*/
int ifile_get_packet(InputFile *f, AVPacket **pkt);
/* iterate over all input streams in all input files;
* pass NULL to start iteration */
InputStream *ist_iter(InputStream *prev);
extern const char * const opt_name_codec_names[];
extern const char * const opt_name_codec_tags[];
extern const char * const opt_name_frame_rates[];
extern const char * const opt_name_top_field_first[];
void set_report_callback(void (*callback)(int, float, float, int64_t, int, double, double));
void set_report_callback(void (*callback)(int, float, float, int64_t, double, double, double));
void cancel_operation(long id);
#endif /* FFTOOLS_FFMPEG_H */

@ -1,6 +1,7 @@
/*
* ffmpeg filter configuration
* copyright (c) 2018 Taner Sener ( tanersener gmail com )
* Copyright (c) 2018 Taner Sener
* Copyright (c) 2023 ARTHENICA LTD
*
* This file is part of FFmpeg.
*
@ -24,6 +25,12 @@
* We manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop mobile-ffmpeg and later ffmpeg-kit libraries.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
*
* mobile-ffmpeg / ffmpeg-kit changes by Taner Sener
*
* 08.2018
@ -69,8 +76,9 @@ static const enum AVPixelFormat *get_compliance_normal_pix_fmts(const AVCodec *c
}
}
enum AVPixelFormat choose_pixel_fmt(AVStream *st, AVCodecContext *enc_ctx,
const AVCodec *codec, enum AVPixelFormat target)
enum AVPixelFormat
choose_pixel_fmt(const AVCodec *codec, enum AVPixelFormat target,
int strict_std_compliance)
{
if (codec && codec->pix_fmts) {
const enum AVPixelFormat *p = codec->pix_fmts;
@ -79,7 +87,7 @@ enum AVPixelFormat choose_pixel_fmt(AVStream *st, AVCodecContext *enc_ctx,
int has_alpha = desc ? desc->nb_components % 2 == 0 : 0;
enum AVPixelFormat best= AV_PIX_FMT_NONE;
if (enc_ctx->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL) {
if (strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL) {
p = get_compliance_normal_pix_fmts(codec, p);
}
for (; *p != AV_PIX_FMT_NONE; p++) {
@ -106,6 +114,7 @@ enum AVPixelFormat choose_pixel_fmt(AVStream *st, AVCodecContext *enc_ctx,
static const char *choose_pix_fmts(OutputFilter *ofilter, AVBPrint *bprint)
{
OutputStream *ost = ofilter->ost;
AVCodecContext *enc = ost->enc_ctx;
const AVDictionaryEntry *strict_dict = av_dict_get(ost->encoder_opts, "strict", NULL, 0);
if (strict_dict)
// used by choose_pixel_fmt() and below
@ -119,13 +128,14 @@ static const char *choose_pix_fmts(OutputFilter *ofilter, AVBPrint *bprint)
return av_get_pix_fmt_name(ost->enc_ctx->pix_fmt);
}
if (ost->enc_ctx->pix_fmt != AV_PIX_FMT_NONE) {
return av_get_pix_fmt_name(choose_pixel_fmt(ost->st, ost->enc_ctx, ost->enc, ost->enc_ctx->pix_fmt));
} else if (ost->enc && ost->enc->pix_fmts) {
return av_get_pix_fmt_name(choose_pixel_fmt(enc->codec, enc->pix_fmt,
ost->enc_ctx->strict_std_compliance));
} else if (enc->codec->pix_fmts) {
const enum AVPixelFormat *p;
p = ost->enc->pix_fmts;
p = enc->codec->pix_fmts;
if (ost->enc_ctx->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL) {
p = get_compliance_normal_pix_fmts(ost->enc, p);
p = get_compliance_normal_pix_fmts(enc->codec, p);
}
for (; *p != AV_PIX_FMT_NONE; p++) {
@ -133,7 +143,7 @@ static const char *choose_pix_fmts(OutputFilter *ofilter, AVBPrint *bprint)
av_bprintf(bprint, "%s%c", name, p[1] == AV_PIX_FMT_NONE ? '\0' : '|');
}
if (!av_bprint_is_complete(bprint))
exit_program(1);
report_and_exit(AVERROR(ENOMEM));
return bprint->str;
} else
return NULL;
@ -197,7 +207,7 @@ int init_simple_filtergraph(InputStream *ist, OutputStream *ost)
InputFilter *ifilter;
if (!fg)
exit_program(1);
report_and_exit(AVERROR(ENOMEM));
fg->index = nb_filtergraphs;
ofilter = ALLOC_ARRAY_ELEM(fg->outputs, fg->nb_outputs);
@ -214,7 +224,7 @@ int init_simple_filtergraph(InputStream *ist, OutputStream *ost)
ifilter->frame_queue = av_fifo_alloc2(8, sizeof(AVFrame*), AV_FIFO_FLAG_AUTO_GROW);
if (!ifilter->frame_queue)
exit_program(1);
report_and_exit(AVERROR(ENOMEM));
GROW_ARRAY(ist->filters, ist->nb_filters);
ist->filters[ist->nb_filters - 1] = ifilter;
@ -238,7 +248,7 @@ static char *describe_filter_link(FilterGraph *fg, AVFilterInOut *inout, int in)
res = av_asprintf("%s:%s", ctx->filter->name,
avfilter_pad_get_name(pads, inout->pad_idx));
if (!res)
exit_program(1);
report_and_exit(AVERROR(ENOMEM));
return res;
}
@ -285,7 +295,7 @@ static void init_input_filter(FilterGraph *fg, AVFilterInOut *in)
"matches no streams.\n", p, fg->graph_desc);
exit_program(1);
}
ist = input_streams[input_files[file_idx]->ist_index + st->index];
ist = input_files[file_idx]->streams[st->index];
if (ist->user_set_discard == AVDISCARD_ALL) {
av_log(NULL, AV_LOG_FATAL, "Stream specifier '%s' in filtergraph description %s "
"matches a disabled input stream.\n", p, fg->graph_desc);
@ -293,14 +303,13 @@ static void init_input_filter(FilterGraph *fg, AVFilterInOut *in)
}
} else {
/* find the first unused stream of corresponding type */
for (i = 0; i < nb_input_streams; i++) {
ist = input_streams[i];
for (ist = ist_iter(NULL); ist; ist = ist_iter(ist)) {
if (ist->user_set_discard == AVDISCARD_ALL)
continue;
if (ist->dec_ctx->codec_type == type && ist->discard)
break;
}
if (i == nb_input_streams) {
if (!ist) {
av_log(NULL, AV_LOG_FATAL, "Cannot find a matching stream for "
"unlabeled input pad %d on filter %s\n", in->pad_idx,
in->filter_ctx->name);
@ -323,12 +332,162 @@ static void init_input_filter(FilterGraph *fg, AVFilterInOut *in)
ifilter->frame_queue = av_fifo_alloc2(8, sizeof(AVFrame*), AV_FIFO_FLAG_AUTO_GROW);
if (!ifilter->frame_queue)
exit_program(1);
report_and_exit(AVERROR(ENOMEM));
GROW_ARRAY(ist->filters, ist->nb_filters);
ist->filters[ist->nb_filters - 1] = ifilter;
}
static int read_binary(const char *path, uint8_t **data, int *len)
{
AVIOContext *io = NULL;
int64_t fsize;
int ret;
*data = NULL;
*len = 0;
ret = avio_open2(&io, path, AVIO_FLAG_READ, &int_cb, NULL);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open file '%s': %s\n",
path, av_err2str(ret));
return ret;
}
fsize = avio_size(io);
if (fsize < 0 || fsize > INT_MAX) {
av_log(NULL, AV_LOG_ERROR, "Cannot obtain size of file %s\n", path);
ret = AVERROR(EIO);
goto fail;
}
*data = av_malloc(fsize);
if (!*data) {
ret = AVERROR(ENOMEM);
goto fail;
}
ret = avio_read(io, *data, fsize);
if (ret != fsize) {
av_log(NULL, AV_LOG_ERROR, "Error reading file %s\n", path);
ret = ret < 0 ? ret : AVERROR(EIO);
goto fail;
}
*len = fsize;
return 0;
fail:
avio_close(io);
av_freep(data);
*len = 0;
return ret;
}
static int filter_opt_apply(AVFilterContext *f, const char *key, const char *val)
{
const AVOption *o = NULL;
int ret;
ret = av_opt_set(f, key, val, AV_OPT_SEARCH_CHILDREN);
if (ret >= 0)
return 0;
if (ret == AVERROR_OPTION_NOT_FOUND && key[0] == '/')
o = av_opt_find(f, key + 1, NULL, 0, AV_OPT_SEARCH_CHILDREN);
if (!o)
goto err_apply;
// key is a valid option name prefixed with '/'
// interpret value as a path from which to load the actual option value
key++;
if (o->type == AV_OPT_TYPE_BINARY) {
uint8_t *data;
int len;
ret = read_binary(val, &data, &len);
if (ret < 0)
goto err_load;
ret = av_opt_set_bin(f, key, data, len, AV_OPT_SEARCH_CHILDREN);
av_freep(&data);
} else {
char *data = file_read(val);
if (!data) {
ret = AVERROR(EIO);
goto err_load;
}
ret = av_opt_set(f, key, data, AV_OPT_SEARCH_CHILDREN);
av_freep(&data);
}
if (ret < 0)
goto err_apply;
return 0;
err_apply:
av_log(NULL, AV_LOG_ERROR,
"Error applying option '%s' to filter '%s': %s\n",
key, f->filter->name, av_err2str(ret));
return ret;
err_load:
av_log(NULL, AV_LOG_ERROR,
"Error loading value for option '%s' from file '%s'\n",
key, val);
return ret;
}
static int graph_opts_apply(AVFilterGraphSegment *seg)
{
for (size_t i = 0; i < seg->nb_chains; i++) {
AVFilterChain *ch = seg->chains[i];
for (size_t j = 0; j < ch->nb_filters; j++) {
AVFilterParams *p = ch->filters[j];
const AVDictionaryEntry *e = NULL;
av_assert0(p->filter);
while ((e = av_dict_iterate(p->opts, e))) {
int ret = filter_opt_apply(p->filter, e->key, e->value);
if (ret < 0)
return ret;
}
av_dict_free(&p->opts);
}
}
return 0;
}
static int graph_parse(AVFilterGraph *graph, const char *desc,
AVFilterInOut **inputs, AVFilterInOut **outputs)
{
AVFilterGraphSegment *seg;
int ret;
ret = avfilter_graph_segment_parse(graph, desc, 0, &seg);
if (ret < 0)
return ret;
ret = avfilter_graph_segment_create_filters(seg, 0);
if (ret < 0)
goto fail;
ret = graph_opts_apply(seg);
if (ret < 0)
goto fail;
ret = avfilter_graph_segment_apply(seg, 0, inputs, outputs);
fail:
avfilter_graph_segment_free(&seg);
return ret;
}
int init_complex_filtergraph(FilterGraph *fg)
{
AVFilterInOut *inputs, *outputs, *cur;
@ -342,7 +501,7 @@ int init_complex_filtergraph(FilterGraph *fg)
return AVERROR(ENOMEM);
graph->nb_threads = 1;
ret = avfilter_graph_parse2(graph, fg->graph_desc, &inputs, &outputs);
ret = graph_parse(graph, fg->graph_desc, &inputs, &outputs);
if (ret < 0)
goto fail;
@ -467,8 +626,7 @@ static int configure_output_video_filter(FilterGraph *fg, OutputFilter *ofilter,
snprintf(args, sizeof(args), "%d:%d",
ofilter->width, ofilter->height);
while ((e = av_dict_get(ost->sws_dict, "", e,
AV_DICT_IGNORE_SUFFIX))) {
while ((e = av_dict_iterate(ost->sws_dict, e))) {
av_strlcatf(args, sizeof(args), ":%s=%s", e->key, e->value);
}
@ -575,6 +733,7 @@ static int configure_output_audio_filter(FilterGraph *fg, OutputFilter *ofilter,
pad_idx = 0; \
} while (0)
av_bprint_init(&args, 0, AV_BPRINT_SIZE_UNLIMITED);
#if FFMPEG_OPT_MAP_CHANNEL
if (ost->audio_channels_mapped) {
AVChannelLayout mapped_layout = { 0 };
int i;
@ -587,6 +746,7 @@ static int configure_output_audio_filter(FilterGraph *fg, OutputFilter *ofilter,
AUTO_INSERT_FILTER("-map_channel", "pan", args.str);
av_bprint_clear(&args);
}
#endif
if (codec->ch_layout.order == AV_CHANNEL_ORDER_UNSPEC)
av_channel_layout_default(&codec->ch_layout, codec->ch_layout.nb_channels);
@ -620,11 +780,11 @@ static int configure_output_audio_filter(FilterGraph *fg, OutputFilter *ofilter,
if (ost->apad && of->shortest) {
int i;
for (i=0; i<of->ctx->nb_streams; i++)
if (of->ctx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)
for (i = 0; i < of->nb_streams; i++)
if (of->streams[i]->st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)
break;
if (i<of->ctx->nb_streams) {
if (i < of->nb_streams) {
AUTO_INSERT_FILTER("-apad", "apad", ost->apad);
}
}
@ -751,7 +911,7 @@ static int configure_input_video_filter(FilterGraph *fg, InputFilter *ifilter,
}
if (!fr.num)
fr = av_guess_frame_rate(input_files[ist->file_index]->ctx, ist->st, NULL);
fr = ist->framerate_guessed;
if (ist->dec_ctx->codec_type == AVMEDIA_TYPE_SUBTITLE) {
ret = sub2video_prepare(ist, ifilter);
@ -904,40 +1064,6 @@ static int configure_input_audio_filter(FilterGraph *fg, InputFilter *ifilter,
last_filter = filt_ctx; \
} while (0)
if (audio_sync_method > 0) {
char args[256] = {0};
av_strlcatf(args, sizeof(args), "async=%d", audio_sync_method);
if (audio_drift_threshold != 0.1)
av_strlcatf(args, sizeof(args), ":min_hard_comp=%f", audio_drift_threshold);
if (!fg->reconfiguration)
av_strlcatf(args, sizeof(args), ":first_pts=0");
AUTO_INSERT_FILTER_INPUT("-async", "aresample", args);
}
// if (ost->audio_channels_mapped) {
// int i;
// AVBPrint pan_buf;
// av_bprint_init(&pan_buf, 256, 8192);
// av_bprintf(&pan_buf, "0x%"PRIx64,
// av_get_default_channel_layout(ost->audio_channels_mapped));
// for (i = 0; i < ost->audio_channels_mapped; i++)
// if (ost->audio_channels_map[i] != -1)
// av_bprintf(&pan_buf, ":c%d=c%d", i, ost->audio_channels_map[i]);
// AUTO_INSERT_FILTER_INPUT("-map_channel", "pan", pan_buf.str);
// av_bprint_finalize(&pan_buf, NULL);
// }
if (audio_volume != 256) {
char args[256];
av_log(NULL, AV_LOG_WARNING, "-vol has been deprecated. Use the volume "
"audio filter instead.\n");
snprintf(args, sizeof(args), "%f", audio_volume / 256.);
AUTO_INSERT_FILTER_INPUT("-vol", "volume", args);
}
snprintf(name, sizeof(name), "trim for input stream %d:%d",
ist->file_index, ist->st->index);
if (copy_ts) {
@ -1020,44 +1146,39 @@ int configure_filtergraph(FilterGraph *fg)
if (simple) {
OutputStream *ost = fg->outputs[0]->ost;
char args[512];
const AVDictionaryEntry *e = NULL;
if (filter_nbthreads) {
ret = av_opt_set(fg->graph, "threads", filter_nbthreads, 0);
if (ret < 0)
goto fail;
} else {
const AVDictionaryEntry *e = NULL;
e = av_dict_get(ost->encoder_opts, "threads", NULL, 0);
if (e)
av_opt_set(fg->graph, "threads", e->value, 0);
}
args[0] = 0;
e = NULL;
while ((e = av_dict_get(ost->sws_dict, "", e,
AV_DICT_IGNORE_SUFFIX))) {
av_strlcatf(args, sizeof(args), "%s=%s:", e->key, e->value);
}
if (strlen(args)) {
args[strlen(args)-1] = 0;
fg->graph->scale_sws_opts = av_strdup(args);
if (av_dict_count(ost->sws_dict)) {
ret = av_dict_get_string(ost->sws_dict,
&fg->graph->scale_sws_opts,
'=', ':');
if (ret < 0)
goto fail;
}
args[0] = 0;
e = NULL;
while ((e = av_dict_get(ost->swr_opts, "", e,
AV_DICT_IGNORE_SUFFIX))) {
av_strlcatf(args, sizeof(args), "%s=%s:", e->key, e->value);
if (av_dict_count(ost->swr_opts)) {
char *args;
ret = av_dict_get_string(ost->swr_opts, &args, '=', ':');
if (ret < 0)
goto fail;
av_opt_set(fg->graph, "aresample_swr_opts", args, 0);
av_free(args);
}
if (strlen(args))
args[strlen(args)-1] = 0;
av_opt_set(fg->graph, "aresample_swr_opts", args, 0);
} else {
fg->graph->nb_threads = filter_complex_nbthreads;
}
if ((ret = avfilter_graph_parse2(fg->graph, graph_desc, &inputs, &outputs)) < 0)
if ((ret = graph_parse(fg->graph, graph_desc, &inputs, &outputs)) < 0)
goto fail;
ret = hw_device_setup_for_filter(fg);
@ -1131,16 +1252,8 @@ int configure_filtergraph(FilterGraph *fg)
for (i = 0; i < fg->nb_outputs; i++) {
OutputStream *ost = fg->outputs[i]->ost;
if (!ost->enc) {
/* identical to the same check in ffmpeg.c, needed because
complex filter graphs are initialized earlier */
av_log(NULL, AV_LOG_ERROR, "Encoder (codec %s) not found for output stream #%d:%d\n",
avcodec_get_name(ost->st->codecpar->codec_id), ost->file_index, ost->index);
ret = AVERROR(EINVAL);
goto fail;
}
if (ost->enc->type == AVMEDIA_TYPE_AUDIO &&
!(ost->enc->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE))
if (ost->enc_ctx->codec_type == AVMEDIA_TYPE_AUDIO &&
!(ost->enc_ctx->codec->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE))
av_buffersink_set_frame_size(ost->filter->filter,
ost->enc_ctx->frame_size);
}

@ -1,5 +1,6 @@
/*
* copyright (c) 2018 Taner Sener ( tanersener gmail com )
* Copyright (c) 2018-2019 Taner Sener
* Copyright (c) 2023 ARTHENICA LTD
*
* This file is part of FFmpeg.
*
@ -23,6 +24,12 @@
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop mobile-ffmpeg and later ffmpeg-kit libraries.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
*
* mobile-ffmpeg / ffmpeg-kit changes by Taner Sener
*
* 12.2019
@ -357,7 +364,7 @@ int hw_device_setup_for_decode(InputStream *ist)
if (ist->hwaccel_id == HWACCEL_AUTO) {
ist->hwaccel_device_type = dev->type;
} else if (ist->hwaccel_device_type != dev->type) {
av_log(ist->dec_ctx, AV_LOG_ERROR, "Invalid hwaccel device "
av_log(NULL, AV_LOG_ERROR, "Invalid hwaccel device "
"specified for decoder: device %s of type %s is not "
"usable with hwaccel %s.\n", dev->name,
av_hwdevice_get_type_name(dev->type),
@ -408,7 +415,7 @@ int hw_device_setup_for_decode(InputStream *ist)
type = config->device_type;
dev = hw_device_get_by_type(type);
if (dev) {
av_log(ist->dec_ctx, AV_LOG_INFO, "Using auto "
av_log(NULL, AV_LOG_INFO, "Using auto "
"hwaccel type %s with existing device %s.\n",
av_hwdevice_get_type_name(type), dev->name);
}
@ -426,12 +433,12 @@ int hw_device_setup_for_decode(InputStream *ist)
continue;
}
if (ist->hwaccel_device) {
av_log(ist->dec_ctx, AV_LOG_INFO, "Using auto "
av_log(NULL, AV_LOG_INFO, "Using auto "
"hwaccel type %s with new device created "
"from %s.\n", av_hwdevice_get_type_name(type),
ist->hwaccel_device);
} else {
av_log(ist->dec_ctx, AV_LOG_INFO, "Using auto "
av_log(NULL, AV_LOG_INFO, "Using auto "
"hwaccel type %s with new default device.\n",
av_hwdevice_get_type_name(type));
}
@ -439,7 +446,7 @@ int hw_device_setup_for_decode(InputStream *ist)
if (dev) {
ist->hwaccel_device_type = type;
} else {
av_log(ist->dec_ctx, AV_LOG_INFO, "Auto hwaccel "
av_log(NULL, AV_LOG_INFO, "Auto hwaccel "
"disabled: no device found.\n");
ist->hwaccel_id = HWACCEL_NONE;
return 0;
@ -447,7 +454,7 @@ int hw_device_setup_for_decode(InputStream *ist)
}
if (!dev) {
av_log(ist->dec_ctx, AV_LOG_ERROR, "No device available "
av_log(NULL, AV_LOG_ERROR, "No device available "
"for decoder: device type %s needed for codec %s.\n",
av_hwdevice_get_type_name(type), ist->dec->name);
return err;
@ -479,7 +486,7 @@ int hw_device_setup_for_encode(OutputStream *ost)
}
for (i = 0;; i++) {
config = avcodec_get_hw_config(ost->enc, i);
config = avcodec_get_hw_config(ost->enc_ctx->codec, i);
if (!config)
break;
@ -490,7 +497,7 @@ int hw_device_setup_for_encode(OutputStream *ost)
av_log(ost->enc_ctx, AV_LOG_VERBOSE, "Using input "
"frames context (format %s) with %s encoder.\n",
av_get_pix_fmt_name(ost->enc_ctx->pix_fmt),
ost->enc->name);
ost->enc_ctx->codec->name);
ost->enc_ctx->hw_frames_ctx = av_buffer_ref(frames_ref);
if (!ost->enc_ctx->hw_frames_ctx)
return AVERROR(ENOMEM);
@ -505,7 +512,7 @@ int hw_device_setup_for_encode(OutputStream *ost)
if (dev) {
av_log(ost->enc_ctx, AV_LOG_VERBOSE, "Using device %s "
"(type %s) with %s encoder.\n", dev->name,
av_hwdevice_get_type_name(dev->type), ost->enc->name);
av_hwdevice_get_type_name(dev->type), ost->enc_ctx->codec->name);
ost->enc_ctx->hw_device_ctx = av_buffer_ref(dev->device_ref);
if (!ost->enc_ctx->hw_device_ctx)
return AVERROR(ENOMEM);

@ -1,6 +1,7 @@
/*
* This file is part of FFmpeg.
* copyright (c) 2022 Taner Sener ( tanersener gmail com )
* Copyright (c) 2022 Taner Sener
* Copyright (c) 2023 ARTHENICA LTD
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -22,108 +23,101 @@
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop the ffmpeg-kit library.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
* - fftools header names updated
* - want_sdp marked as thread-local
* - ms_from_ost migrated from ffmpeg_mux.c and marked as non-static
*
* ffmpeg-kit changes by Taner Sener
*
* 09.2022
* --------------------------------------------------------
* - fftools_ prefix added to fftools headers
* - using main_ffmpeg_return_code instead of main_return_code
* - printf replaced with av_log statements
*/
#include <stdatomic.h>
#include <stdio.h>
#include <string.h>
#include "fftools_ffmpeg.h"
#include "fftools_ffmpeg_mux.h"
#include "fftools_objpool.h"
#include "fftools_sync_queue.h"
#include "fftools_thread_queue.h"
#include "libavutil/fifo.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/log.h"
#include "libavutil/mem.h"
#include "libavutil/timestamp.h"
#include "libavutil/thread.h"
#include "libavcodec/packet.h"
#include "libavformat/avformat.h"
#include "libavformat/avio.h"
static void close_all_output_streams(OutputStream *ost, OSTFinished this_stream, OSTFinished others)
__thread int want_sdp = 1;
MuxStream *ms_from_ost(OutputStream *ost)
{
int i;
for (i = 0; i < nb_output_streams; i++) {
OutputStream *ost2 = output_streams[i];
ost2->finished |= ost == ost2 ? this_stream : others;
return (MuxStream*)ost;
}
static Muxer *mux_from_of(OutputFile *of)
{
return (Muxer*)of;
}
static int64_t filesize(AVIOContext *pb)
{
int64_t ret = -1;
if (pb) {
ret = avio_size(pb);
if (ret <= 0) // FIXME improve avio_size() so it works with non seekable output too
ret = avio_tell(pb);
}
return ret;
}
void of_write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost,
int unqueue)
static int write_packet(Muxer *mux, OutputStream *ost, AVPacket *pkt)
{
AVFormatContext *s = of->ctx;
MuxStream *ms = ms_from_ost(ost);
AVFormatContext *s = mux->fc;
AVStream *st = ost->st;
int64_t fs;
uint64_t frame_num;
int ret;
/*
* Audio encoders may split the packets -- #frames in != #packets out.
* But there is no reordering, so we can limit the number of output packets
* by simply dropping them here.
* Counting encoded video frames needs to be done separately because of
* reordering, see do_video_out().
* Do not count the packet when unqueued because it has been counted when queued.
*/
if (!(st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && ost->encoding_needed) && !unqueue) {
if (ost->frame_number >= ost->max_frames) {
av_packet_unref(pkt);
return;
}
ost->frame_number++;
}
if (!of->header_written) {
AVPacket *tmp_pkt;
/* the muxer is not initialized yet, buffer the packet */
if (!av_fifo_can_write(ost->muxing_queue)) {
size_t cur_size = av_fifo_can_read(ost->muxing_queue);
unsigned int are_we_over_size =
(ost->muxing_queue_data_size + pkt->size) > ost->muxing_queue_data_threshold;
size_t limit = are_we_over_size ? ost->max_muxing_queue_size : SIZE_MAX;
size_t new_size = FFMIN(2 * cur_size, limit);
if (new_size <= cur_size) {
av_log(NULL, AV_LOG_ERROR,
"Too many packets buffered for output stream %d:%d.\n",
ost->file_index, ost->st->index);
exit_program(1);
}
ret = av_fifo_grow2(ost->muxing_queue, new_size - cur_size);
if (ret < 0)
exit_program(1);
}
ret = av_packet_make_refcounted(pkt);
if (ret < 0)
exit_program(1);
tmp_pkt = av_packet_alloc();
if (!tmp_pkt)
exit_program(1);
av_packet_move_ref(tmp_pkt, pkt);
ost->muxing_queue_data_size += tmp_pkt->size;
av_fifo_write(ost->muxing_queue, &tmp_pkt, 1);
return;
fs = filesize(s->pb);
atomic_store(&mux->last_filesize, fs);
if (fs >= mux->limit_filesize) {
ret = AVERROR_EOF;
goto fail;
}
if ((st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && ost->vsync_method == VSYNC_DROP) ||
(st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && audio_sync_method < 0))
if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && ost->vsync_method == VSYNC_DROP)
pkt->pts = pkt->dts = AV_NOPTS_VALUE;
if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
if (ost->frame_rate.num && ost->is_cfr) {
if (pkt->duration > 0)
av_log(NULL, AV_LOG_WARNING, "Overriding packet duration by frame rate, this should not happen\n");
av_log(ost, AV_LOG_WARNING, "Overriding packet duration by frame rate, this should not happen\n");
pkt->duration = av_rescale_q(1, av_inv_q(ost->frame_rate),
ost->mux_timebase);
pkt->time_base);
}
}
av_packet_rescale_ts(pkt, ost->mux_timebase, ost->st->time_base);
av_packet_rescale_ts(pkt, pkt->time_base, ost->st->time_base);
pkt->time_base = ost->st->time_base;
if (!(s->oformat->flags & AVFMT_NOTIMESTAMPS)) {
if (pkt->dts != AV_NOPTS_VALUE &&
@ -133,25 +127,26 @@ void of_write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost,
pkt->dts, pkt->pts,
ost->file_index, ost->st->index);
pkt->pts =
pkt->dts = pkt->pts + pkt->dts + ost->last_mux_dts + 1
- FFMIN3(pkt->pts, pkt->dts, ost->last_mux_dts + 1)
- FFMAX3(pkt->pts, pkt->dts, ost->last_mux_dts + 1);
pkt->dts = pkt->pts + pkt->dts + ms->last_mux_dts + 1
- FFMIN3(pkt->pts, pkt->dts, ms->last_mux_dts + 1)
- FFMAX3(pkt->pts, pkt->dts, ms->last_mux_dts + 1);
}
if ((st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO || st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO || st->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE) &&
pkt->dts != AV_NOPTS_VALUE &&
ost->last_mux_dts != AV_NOPTS_VALUE) {
int64_t max = ost->last_mux_dts + !(s->oformat->flags & AVFMT_TS_NONSTRICT);
ms->last_mux_dts != AV_NOPTS_VALUE) {
int64_t max = ms->last_mux_dts + !(s->oformat->flags & AVFMT_TS_NONSTRICT);
if (pkt->dts < max) {
int loglevel = max - pkt->dts > 2 || st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO ? AV_LOG_WARNING : AV_LOG_DEBUG;
if (exit_on_error)
loglevel = AV_LOG_ERROR;
av_log(s, loglevel, "Non-monotonous DTS in output stream "
"%d:%d; previous: %"PRId64", current: %"PRId64"; ",
ost->file_index, ost->st->index, ost->last_mux_dts, pkt->dts);
ost->file_index, ost->st->index, ms->last_mux_dts, pkt->dts);
if (exit_on_error) {
av_log(NULL, AV_LOG_FATAL, "aborting.\n");
exit_program(1);
ret = AVERROR(EINVAL);
goto fail;
}
av_log(s, loglevel, "changing to %"PRId64". This may result "
"in incorrect timestamps in the output file.\n",
max);
@ -161,17 +156,17 @@ void of_write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost,
}
}
}
ost->last_mux_dts = pkt->dts;
ms->last_mux_dts = pkt->dts;
ost->data_size += pkt->size;
ost->packets_written++;
ost->data_size_mux += pkt->size;
frame_num = atomic_fetch_add(&ost->packets_written, 1);
pkt->stream_index = ost->index;
if (debug_ts) {
av_log(NULL, AV_LOG_INFO, "muxer <- type:%s "
av_log(ost, AV_LOG_INFO, "muxer <- type:%s "
"pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s duration:%s duration_time:%s size:%d\n",
av_get_media_type_string(ost->enc_ctx->codec_type),
av_get_media_type_string(st->codecpar->codec_type),
av_ts2str(pkt->pts), av_ts2timestr(pkt->pts, &ost->st->time_base),
av_ts2str(pkt->dts), av_ts2timestr(pkt->dts, &ost->st->time_base),
av_ts2str(pkt->duration), av_ts2timestr(pkt->duration, &ost->st->time_base),
@ -179,12 +174,307 @@ void of_write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost,
);
}
if (ms->stats.io)
enc_stats_write(ost, &ms->stats, NULL, pkt, frame_num);
ret = av_interleaved_write_frame(s, pkt);
if (ret < 0) {
print_error("av_interleaved_write_frame()", ret);
main_ffmpeg_return_code = 1;
close_all_output_streams(ost, MUXER_FINISHED | ENCODER_FINISHED, ENCODER_FINISHED);
goto fail;
}
return 0;
fail:
av_packet_unref(pkt);
return ret;
}
static int sync_queue_process(Muxer *mux, OutputStream *ost, AVPacket *pkt, int *stream_eof)
{
OutputFile *of = &mux->of;
if (ost->sq_idx_mux >= 0) {
int ret = sq_send(mux->sq_mux, ost->sq_idx_mux, SQPKT(pkt));
if (ret < 0) {
if (ret == AVERROR_EOF)
*stream_eof = 1;
return ret;
}
while (1) {
ret = sq_receive(mux->sq_mux, -1, SQPKT(mux->sq_pkt));
if (ret < 0)
return (ret == AVERROR_EOF || ret == AVERROR(EAGAIN)) ? 0 : ret;
ret = write_packet(mux, of->streams[ret],
mux->sq_pkt);
if (ret < 0)
return ret;
}
} else if (pkt)
return write_packet(mux, ost, pkt);
return 0;
}
static void thread_set_name(OutputFile *of)
{
char name[16];
snprintf(name, sizeof(name), "mux%d:%s", of->index, of->format->name);
ff_thread_setname(name);
}
static void *muxer_thread(void *arg)
{
Muxer *mux = arg;
OutputFile *of = &mux->of;
AVPacket *pkt = NULL;
int ret = 0;
pkt = av_packet_alloc();
if (!pkt) {
ret = AVERROR(ENOMEM);
goto finish;
}
thread_set_name(of);
while (1) {
OutputStream *ost;
int stream_idx, stream_eof = 0;
ret = tq_receive(mux->tq, &stream_idx, pkt);
if (stream_idx < 0) {
av_log(mux, AV_LOG_VERBOSE, "All streams finished\n");
ret = 0;
break;
}
ost = of->streams[stream_idx];
ret = sync_queue_process(mux, ost, ret < 0 ? NULL : pkt, &stream_eof);
av_packet_unref(pkt);
if (ret == AVERROR_EOF && stream_eof)
tq_receive_finish(mux->tq, stream_idx);
else if (ret < 0) {
av_log(mux, AV_LOG_ERROR, "Error muxing a packet\n");
break;
}
}
finish:
av_packet_free(&pkt);
for (unsigned int i = 0; i < mux->fc->nb_streams; i++)
tq_receive_finish(mux->tq, i);
av_log(mux, AV_LOG_VERBOSE, "Terminating muxer thread\n");
return (void*)(intptr_t)ret;
}
static int thread_submit_packet(Muxer *mux, OutputStream *ost, AVPacket *pkt)
{
int ret = 0;
if (!pkt || ost->finished & MUXER_FINISHED)
goto finish;
ret = tq_send(mux->tq, ost->index, pkt);
if (ret < 0)
goto finish;
return 0;
finish:
if (pkt)
av_packet_unref(pkt);
ost->finished |= MUXER_FINISHED;
tq_send_finish(mux->tq, ost->index);
return ret == AVERROR_EOF ? 0 : ret;
}
static int queue_packet(Muxer *mux, OutputStream *ost, AVPacket *pkt)
{
MuxStream *ms = ms_from_ost(ost);
AVPacket *tmp_pkt = NULL;
int ret;
if (!av_fifo_can_write(ms->muxing_queue)) {
size_t cur_size = av_fifo_can_read(ms->muxing_queue);
size_t pkt_size = pkt ? pkt->size : 0;
unsigned int are_we_over_size =
(ms->muxing_queue_data_size + pkt_size) > ms->muxing_queue_data_threshold;
size_t limit = are_we_over_size ? ms->max_muxing_queue_size : SIZE_MAX;
size_t new_size = FFMIN(2 * cur_size, limit);
if (new_size <= cur_size) {
av_log(ost, AV_LOG_ERROR,
"Too many packets buffered for output stream %d:%d.\n",
ost->file_index, ost->st->index);
return AVERROR(ENOSPC);
}
ret = av_fifo_grow2(ms->muxing_queue, new_size - cur_size);
if (ret < 0)
return ret;
}
if (pkt) {
ret = av_packet_make_refcounted(pkt);
if (ret < 0)
return ret;
tmp_pkt = av_packet_alloc();
if (!tmp_pkt)
return AVERROR(ENOMEM);
av_packet_move_ref(tmp_pkt, pkt);
ms->muxing_queue_data_size += tmp_pkt->size;
}
av_fifo_write(ms->muxing_queue, &tmp_pkt, 1);
return 0;
}
static int submit_packet(Muxer *mux, AVPacket *pkt, OutputStream *ost)
{
int ret;
if (mux->tq) {
return thread_submit_packet(mux, ost, pkt);
} else {
/* the muxer is not initialized yet, buffer the packet */
ret = queue_packet(mux, ost, pkt);
if (ret < 0) {
if (pkt)
av_packet_unref(pkt);
return ret;
}
}
return 0;
}
void of_output_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost, int eof)
{
Muxer *mux = mux_from_of(of);
MuxStream *ms = ms_from_ost(ost);
const char *err_msg;
int ret = 0;
if (!eof && pkt->dts != AV_NOPTS_VALUE)
ost->last_mux_dts = av_rescale_q(pkt->dts, pkt->time_base, AV_TIME_BASE_Q);
/* apply the output bitstream filters */
if (ms->bsf_ctx) {
int bsf_eof = 0;
ret = av_bsf_send_packet(ms->bsf_ctx, eof ? NULL : pkt);
if (ret < 0) {
err_msg = "submitting a packet for bitstream filtering";
goto fail;
}
while (!bsf_eof) {
ret = av_bsf_receive_packet(ms->bsf_ctx, pkt);
if (ret == AVERROR(EAGAIN))
return;
else if (ret == AVERROR_EOF)
bsf_eof = 1;
else if (ret < 0) {
err_msg = "applying bitstream filters to a packet";
goto fail;
}
ret = submit_packet(mux, bsf_eof ? NULL : pkt, ost);
if (ret < 0)
goto mux_fail;
}
} else {
ret = submit_packet(mux, eof ? NULL : pkt, ost);
if (ret < 0)
goto mux_fail;
}
return;
mux_fail:
err_msg = "submitting a packet to the muxer";
fail:
av_log(ost, AV_LOG_ERROR, "Error %s\n", err_msg);
if (exit_on_error)
exit_program(1);
}
static int thread_stop(Muxer *mux)
{
void *ret;
if (!mux || !mux->tq)
return 0;
for (unsigned int i = 0; i < mux->fc->nb_streams; i++)
tq_send_finish(mux->tq, i);
pthread_join(mux->thread, &ret);
tq_free(&mux->tq);
return (int)(intptr_t)ret;
}
static void pkt_move(void *dst, void *src)
{
av_packet_move_ref(dst, src);
}
static int thread_start(Muxer *mux)
{
AVFormatContext *fc = mux->fc;
ObjPool *op;
int ret;
op = objpool_alloc_packets();
if (!op)
return AVERROR(ENOMEM);
mux->tq = tq_alloc(fc->nb_streams, mux->thread_queue_size, op, pkt_move);
if (!mux->tq) {
objpool_free(&op);
return AVERROR(ENOMEM);
}
ret = pthread_create(&mux->thread, NULL, muxer_thread, (void*)mux);
if (ret) {
tq_free(&mux->tq);
return AVERROR(ret);
}
/* flush the muxing queues */
for (int i = 0; i < fc->nb_streams; i++) {
OutputStream *ost = mux->of.streams[i];
MuxStream *ms = ms_from_ost(ost);
AVPacket *pkt;
/* try to improve muxing time_base (only possible if nothing has been written yet) */
if (!av_fifo_can_read(ms->muxing_queue))
ost->mux_timebase = ost->st->time_base;
while (av_fifo_read(ms->muxing_queue, &pkt, 1) >= 0) {
ret = thread_submit_packet(mux, ost, pkt);
if (pkt) {
ms->muxing_queue_data_size -= pkt->size;
av_packet_free(&pkt);
}
if (ret < 0)
return ret;
}
}
return 0;
}
static int print_sdp(void)
@ -196,16 +486,16 @@ static int print_sdp(void)
AVFormatContext **avc;
for (i = 0; i < nb_output_files; i++) {
if (!output_files[i]->header_written)
if (!mux_from_of(output_files[i])->header_written)
return 0;
}
avc = av_malloc_array(nb_output_files, sizeof(*avc));
if (!avc)
exit_program(1);
return AVERROR(ENOMEM);
for (i = 0, j = 0; i < nb_output_files; i++) {
if (!strcmp(output_files[i]->ctx->oformat->name, "rtp")) {
avc[j] = output_files[i]->ctx;
if (!strcmp(output_files[i]->format->name, "rtp")) {
avc[j] = mux_from_of(output_files[i])->fc;
j++;
}
}
@ -221,7 +511,7 @@ static int print_sdp(void)
goto fail;
if (!sdp_filename) {
printf("SDP:\n%s\n", sdp);
av_log(NULL, AV_LOG_ERROR, "SDP:\n%s\n", sdp);
fflush(stdout);
} else {
ret = avio_open2(&sdp_pb, sdp_filename, AVIO_FLAG_WRITE, &int_cb, NULL);
@ -235,34 +525,36 @@ static int print_sdp(void)
av_freep(&sdp_filename);
}
// SDP successfully written, allow muxer threads to start
ret = 1;
fail:
av_freep(&avc);
return ret;
}
/* open the muxer when all the streams are initialized */
int of_check_init(OutputFile *of)
int mux_check_init(Muxer *mux)
{
OutputFile *of = &mux->of;
AVFormatContext *fc = mux->fc;
int ret, i;
for (i = 0; i < of->ctx->nb_streams; i++) {
OutputStream *ost = output_streams[of->ost_index + i];
for (i = 0; i < fc->nb_streams; i++) {
OutputStream *ost = of->streams[i];
if (!ost->initialized)
return 0;
}
ret = avformat_write_header(of->ctx, &of->opts);
ret = avformat_write_header(fc, &mux->opts);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR,
"Could not write header for output file #%d "
"(incorrect codec parameters ?): %s\n",
of->index, av_err2str(ret));
av_log(mux, AV_LOG_ERROR, "Could not write header (incorrect codec "
"parameters ?): %s\n", av_err2str(ret));
return ret;
}
//assert_avoptions(of->opts);
of->header_written = 1;
mux->header_written = 1;
av_dump_format(of->ctx, of->index, of->ctx->url, 1);
av_dump_format(fc, of->index, fc->url, 1);
nb_output_dumped++;
if (sdp_filename || want_sdp) {
@ -270,62 +562,220 @@ int of_check_init(OutputFile *of)
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Error writing the SDP.\n");
return ret;
} else if (ret == 1) {
/* SDP is written only after all the muxers are ready, so now we
* start ALL the threads */
for (i = 0; i < nb_output_files; i++) {
ret = thread_start(mux_from_of(output_files[i]));
if (ret < 0)
return ret;
}
}
} else {
ret = thread_start(mux_from_of(of));
if (ret < 0)
return ret;
}
/* flush the muxing queues */
for (i = 0; i < of->ctx->nb_streams; i++) {
OutputStream *ost = output_streams[of->ost_index + i];
AVPacket *pkt;
return 0;
}
/* try to improve muxing time_base (only possible if nothing has been written yet) */
if (!av_fifo_can_read(ost->muxing_queue))
ost->mux_timebase = ost->st->time_base;
static int bsf_init(MuxStream *ms)
{
OutputStream *ost = &ms->ost;
AVBSFContext *ctx = ms->bsf_ctx;
int ret;
while (av_fifo_read(ost->muxing_queue, &pkt, 1) >= 0) {
ost->muxing_queue_data_size -= pkt->size;
of_write_packet(of, pkt, ost, 1);
av_packet_free(&pkt);
}
if (!ctx)
return 0;
ret = avcodec_parameters_copy(ctx->par_in, ost->st->codecpar);
if (ret < 0)
return ret;
ctx->time_base_in = ost->st->time_base;
ret = av_bsf_init(ctx);
if (ret < 0) {
av_log(ms, AV_LOG_ERROR, "Error initializing bitstream filter: %s\n",
ctx->filter->name);
return ret;
}
ret = avcodec_parameters_copy(ost->st->codecpar, ctx->par_out);
if (ret < 0)
return ret;
ost->st->time_base = ctx->time_base_out;
return 0;
}
int of_stream_init(OutputFile *of, OutputStream *ost)
{
Muxer *mux = mux_from_of(of);
MuxStream *ms = ms_from_ost(ost);
int ret;
if (ost->sq_idx_mux >= 0)
sq_set_tb(mux->sq_mux, ost->sq_idx_mux, ost->mux_timebase);
/* initialize bitstream filters for the output stream
* needs to be done here, because the codec id for streamcopy is not
* known until now */
ret = bsf_init(ms);
if (ret < 0)
return ret;
ost->initialized = 1;
return mux_check_init(mux);
}
int of_write_trailer(OutputFile *of)
{
Muxer *mux = mux_from_of(of);
AVFormatContext *fc = mux->fc;
int ret;
if (!of->header_written) {
av_log(NULL, AV_LOG_ERROR,
"Nothing was written into output file %d (%s), because "
"at least one of its streams received no packets.\n",
of->index, of->ctx->url);
if (!mux->tq) {
av_log(mux, AV_LOG_ERROR,
"Nothing was written into output file, because "
"at least one of its streams received no packets.\n");
return AVERROR(EINVAL);
}
ret = av_write_trailer(of->ctx);
ret = thread_stop(mux);
if (ret < 0)
main_ffmpeg_return_code = ret;
ret = av_write_trailer(fc);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Error writing trailer of %s: %s\n", of->ctx->url, av_err2str(ret));
av_log(mux, AV_LOG_ERROR, "Error writing trailer: %s\n", av_err2str(ret));
return ret;
}
mux->last_filesize = filesize(fc->pb);
if (!(of->format->flags & AVFMT_NOFILE)) {
ret = avio_closep(&fc->pb);
if (ret < 0) {
av_log(mux, AV_LOG_ERROR, "Error closing file: %s\n", av_err2str(ret));
return ret;
}
}
return 0;
}
static void ost_free(OutputStream **post)
{
OutputStream *ost = *post;
MuxStream *ms;
if (!ost)
return;
ms = ms_from_ost(ost);
if (ost->logfile) {
if (fclose(ost->logfile))
av_log(ms, AV_LOG_ERROR,
"Error closing logfile, loss of information possible: %s\n",
av_err2str(AVERROR(errno)));
ost->logfile = NULL;
}
if (ms->muxing_queue) {
AVPacket *pkt;
while (av_fifo_read(ms->muxing_queue, &pkt, 1) >= 0)
av_packet_free(&pkt);
av_fifo_freep2(&ms->muxing_queue);
}
av_bsf_free(&ms->bsf_ctx);
av_frame_free(&ost->filtered_frame);
av_frame_free(&ost->sq_frame);
av_frame_free(&ost->last_frame);
av_packet_free(&ost->pkt);
av_dict_free(&ost->encoder_opts);
av_freep(&ost->kf.pts);
av_expr_free(ost->kf.pexpr);
av_freep(&ost->avfilter);
av_freep(&ost->logfile_prefix);
av_freep(&ost->apad);
#if FFMPEG_OPT_MAP_CHANNEL
av_freep(&ost->audio_channels_map);
ost->audio_channels_mapped = 0;
#endif
av_dict_free(&ost->sws_dict);
av_dict_free(&ost->swr_opts);
if (ost->enc_ctx)
av_freep(&ost->enc_ctx->stats_in);
avcodec_free_context(&ost->enc_ctx);
for (int i = 0; i < ost->enc_stats_pre.nb_components; i++)
av_freep(&ost->enc_stats_pre.components[i].str);
av_freep(&ost->enc_stats_pre.components);
for (int i = 0; i < ost->enc_stats_post.nb_components; i++)
av_freep(&ost->enc_stats_post.components[i].str);
av_freep(&ost->enc_stats_post.components);
for (int i = 0; i < ms->stats.nb_components; i++)
av_freep(&ms->stats.components[i].str);
av_freep(&ms->stats.components);
av_freep(post);
}
static void fc_close(AVFormatContext **pfc)
{
AVFormatContext *fc = *pfc;
if (!fc)
return;
if (!(fc->oformat->flags & AVFMT_NOFILE))
avio_closep(&fc->pb);
avformat_free_context(fc);
*pfc = NULL;
}
void of_close(OutputFile **pof)
{
OutputFile *of = *pof;
AVFormatContext *s;
Muxer *mux;
if (!of)
return;
mux = mux_from_of(of);
thread_stop(mux);
s = of->ctx;
if (s && s->oformat && !(s->oformat->flags & AVFMT_NOFILE))
avio_closep(&s->pb);
avformat_free_context(s);
av_dict_free(&of->opts);
sq_free(&of->sq_encode);
sq_free(&mux->sq_mux);
for (int i = 0; i < of->nb_streams; i++)
ost_free(&of->streams[i]);
av_freep(&of->streams);
av_dict_free(&mux->opts);
av_packet_free(&mux->sq_pkt);
fc_close(&mux->fc);
av_freep(pof);
}
int64_t of_filesize(OutputFile *of)
{
Muxer *mux = mux_from_of(of);
return atomic_load(&mux->last_filesize);
}

@ -0,0 +1,165 @@
/*
* Muxer internal APIs - should not be included outside of ffmpeg_mux*
* Copyright (c) 2023 ARTHENICA LTD
*
* This file is part of FFmpeg.
*
* FFmpeg 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 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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 FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
* This file is the modified version of ffmpeg_mux.h file living in ffmpeg source code under the fftools folder. We
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop ffmpeg-kit library.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
* - fftools header names updated
* - want_sdp made thread-local
* - EncStatsFile declaration migrated from ffmpeg_mux_init.c
* - WARN_MULTIPLE_OPT_USAGE, MATCH_PER_STREAM_OPT, MATCH_PER_TYPE_OPT, SPECIFIER_OPT_FMT declarations migrated from
* ffmpeg.h
* - ms_from_ost migrated to ffmpeg_mux.c
*/
#ifndef FFTOOLS_FFMPEG_MUX_H
#define FFTOOLS_FFMPEG_MUX_H
#include <stdatomic.h>
#include <stdint.h>
#include "fftools_thread_queue.h"
#include "libavformat/avformat.h"
#include "libavcodec/packet.h"
#include "libavutil/dict.h"
#include "libavutil/fifo.h"
#include "libavutil/thread.h"
#define SPECIFIER_OPT_FMT_str "%s"
#define SPECIFIER_OPT_FMT_i "%i"
#define SPECIFIER_OPT_FMT_i64 "%"PRId64
#define SPECIFIER_OPT_FMT_ui64 "%"PRIu64
#define SPECIFIER_OPT_FMT_f "%f"
#define SPECIFIER_OPT_FMT_dbl "%lf"
#define WARN_MULTIPLE_OPT_USAGE(name, type, so, st)\
{\
char namestr[128] = "";\
const char *spec = so->specifier && so->specifier[0] ? so->specifier : "";\
for (int _i = 0; opt_name_##name[_i]; _i++)\
av_strlcatf(namestr, sizeof(namestr), "-%s%s", opt_name_##name[_i], opt_name_##name[_i+1] ? (opt_name_##name[_i+2] ? ", " : " or ") : "");\
av_log(NULL, AV_LOG_WARNING, "Multiple %s options specified for stream %d, only the last option '-%s%s%s "SPECIFIER_OPT_FMT_##type"' will be used.\n",\
namestr, st->index, opt_name_##name[0], spec[0] ? ":" : "", spec, so->u.type);\
}
#define MATCH_PER_STREAM_OPT(name, type, outvar, fmtctx, st)\
{\
int _ret, _matches = 0;\
SpecifierOpt *so;\
for (int _i = 0; _i < o->nb_ ## name; _i++) {\
char *spec = o->name[_i].specifier;\
if ((_ret = check_stream_specifier(fmtctx, st, spec)) > 0) {\
outvar = o->name[_i].u.type;\
so = &o->name[_i];\
_matches++;\
} else if (_ret < 0)\
exit_program(1);\
}\
if (_matches > 1)\
WARN_MULTIPLE_OPT_USAGE(name, type, so, st);\
}
#define MATCH_PER_TYPE_OPT(name, type, outvar, fmtctx, mediatype)\
{\
int i;\
for (i = 0; i < o->nb_ ## name; i++) {\
char *spec = o->name[i].specifier;\
if (!strcmp(spec, mediatype))\
outvar = o->name[i].u.type;\
}\
}
typedef struct MuxStream {
OutputStream ost;
// name used for logging
char log_name[32];
/* the packets are buffered here until the muxer is ready to be initialized */
AVFifo *muxing_queue;
AVBSFContext *bsf_ctx;
EncStats stats;
int64_t max_frames;
/*
* The size of the AVPackets' buffers in queue.
* Updated when a packet is either pushed or pulled from the queue.
*/
size_t muxing_queue_data_size;
int max_muxing_queue_size;
/* Threshold after which max_muxing_queue_size will be in effect */
size_t muxing_queue_data_threshold;
/* dts of the last packet sent to the muxer, in the stream timebase
* used for making up missing dts values */
int64_t last_mux_dts;
} MuxStream;
typedef struct Muxer {
OutputFile of;
// name used for logging
char log_name[32];
AVFormatContext *fc;
pthread_t thread;
ThreadQueue *tq;
AVDictionary *opts;
int thread_queue_size;
/* filesize limit expressed in bytes */
int64_t limit_filesize;
atomic_int_least64_t last_filesize;
int header_written;
SyncQueue *sq_mux;
AVPacket *sq_pkt;
} Muxer;
typedef struct EncStatsFile {
char *path;
AVIOContext *io;
} EncStatsFile;
/* whether we want to print an SDP, set in of_open() */
extern __thread int want_sdp;
int mux_check_init(Muxer *mux);
#endif /* FFTOOLS_FFMPEG_MUX_H */

@ -1,6 +1,7 @@
/*
* Copyright (c) 2007-2010 Stefano Sabatini
* Copyright (c) 2020 Taner Sener ( tanersener gmail com )
* Copyright (c) 2020-2022 Taner Sener
* Copyright (c) 2023 ARTHENICA LTD
*
* This file is part of FFmpeg.
*
@ -29,6 +30,13 @@
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop mobile-ffmpeg and later ffmpeg-kit libraries.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
* - fftools header names updated
*
* mobile-ffmpeg / ffmpeg-kit changes by Taner Sener
*
* 09.2022
@ -52,9 +60,11 @@
#include "libavutil/ffversion.h"
#include <string.h>
#include <math.h>
#include "libavformat/avformat.h"
#include "libavcodec/avcodec.h"
#include "libavutil/ambient_viewing_environment.h"
#include "libavutil/avassert.h"
#include "libavutil/avstring.h"
#include "libavutil/bprint.h"
@ -163,6 +173,8 @@ typedef struct ReadInterval {
__thread ReadInterval *read_intervals;
__thread int read_intervals_nb = 0;
__thread int find_stream_info = 1;
/* section structure definition */
#define SECTION_MAX_NB_CHILDREN 10
@ -626,6 +638,7 @@ static inline void writer_put_str_printf(WriterContext *wctx, const char *str)
static inline void writer_printf_printf(WriterContext *wctx, const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
av_vlog(NULL, AV_LOG_STDERR, fmt, ap);
va_end(ap);
@ -671,7 +684,7 @@ static int writer_open(WriterContext **wctx, const Writer *writer, const char *a
goto fail;
}
while ((opt = av_dict_get(opts, "", opt, AV_DICT_IGNORE_SUFFIX))) {
while ((opt = av_dict_iterate(opts, opt))) {
if ((ret = av_opt_set(*wctx, opt->key, opt->value, AV_OPT_SEARCH_CHILDREN)) < 0) {
av_log(*wctx, AV_LOG_ERROR, "Failed to set option '%s' with value '%s' provided to writer context\n",
opt->key, opt->value);
@ -1907,12 +1920,14 @@ static void writer_register_all(void)
writer_print_string(w, k, pbuf.str, 0); \
} while (0)
#define print_list_fmt(k, f, n, ...) do { \
#define print_list_fmt(k, f, n, m, ...) do { \
av_bprint_clear(&pbuf); \
for (int idx = 0; idx < n; idx++) { \
if (idx > 0) \
av_bprint_chars(&pbuf, ' ', 1); \
av_bprintf(&pbuf, f, __VA_ARGS__); \
for (int idx2 = 0; idx2 < m; idx2++) { \
if (idx > 0 || idx2 > 0) \
av_bprint_chars(&pbuf, ' ', 1); \
av_bprintf(&pbuf, f, __VA_ARGS__); \
} \
} \
writer_print_string(w, k, pbuf.str, 0); \
} while (0)
@ -1953,7 +1968,7 @@ static inline int show_tags(WriterContext *w, AVDictionary *tags, int section_id
return 0;
writer_print_section_header(w, section_id);
while ((tag = av_dict_get(tags, "", tag, AV_DICT_IGNORE_SUFFIX))) {
while ((tag = av_dict_iterate(tags, tag))) {
if ((ret = print_str_validate(tag->key, tag->value)) < 0)
break;
}
@ -2023,7 +2038,7 @@ static void print_dovi_metadata(WriterContext *w, const AVDOVIMetadata *dovi)
const AVDOVIReshapingCurve *curve = &mapping->curves[c];
writer_print_section_header(w, SECTION_ID_FRAME_SIDE_DATA_COMPONENT);
print_list_fmt("pivots", "%"PRIu16, curve->num_pivots, curve->pivots[idx]);
print_list_fmt("pivots", "%"PRIu16, curve->num_pivots, 1, curve->pivots[idx]);
writer_print_section_header(w, SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST);
for (int i = 0; i < curve->num_pivots - 1; i++) {
@ -2035,7 +2050,7 @@ static void print_dovi_metadata(WriterContext *w, const AVDOVIMetadata *dovi)
print_str("mapping_idc_name", "polynomial");
print_int("poly_order", curve->poly_order[i]);
print_list_fmt("poly_coef", "%"PRIi64,
curve->poly_order[i] + 1,
curve->poly_order[i] + 1, 1,
curve->poly_coef[i][idx]);
break;
case AV_DOVI_MAPPING_MMR:
@ -2043,8 +2058,8 @@ static void print_dovi_metadata(WriterContext *w, const AVDOVIMetadata *dovi)
print_int("mmr_order", curve->mmr_order[i]);
print_int("mmr_constant", curve->mmr_constant[i]);
print_list_fmt("mmr_coef", "%"PRIi64,
curve->mmr_order[i] * 7,
curve->mmr_coef[i][0][idx]);
curve->mmr_order[i], 7,
curve->mmr_coef[i][idx][idx2]);
break;
default:
print_str("mapping_idc_name", "unknown");
@ -2082,15 +2097,15 @@ static void print_dovi_metadata(WriterContext *w, const AVDOVIMetadata *dovi)
print_int("dm_metadata_id", color->dm_metadata_id);
print_int("scene_refresh_flag", color->scene_refresh_flag);
print_list_fmt("ycc_to_rgb_matrix", "%d/%d",
FF_ARRAY_ELEMS(color->ycc_to_rgb_matrix),
FF_ARRAY_ELEMS(color->ycc_to_rgb_matrix), 1,
color->ycc_to_rgb_matrix[idx].num,
color->ycc_to_rgb_matrix[idx].den);
print_list_fmt("ycc_to_rgb_offset", "%d/%d",
FF_ARRAY_ELEMS(color->ycc_to_rgb_offset),
FF_ARRAY_ELEMS(color->ycc_to_rgb_offset), 1,
color->ycc_to_rgb_offset[idx].num,
color->ycc_to_rgb_offset[idx].den);
print_list_fmt("rgb_to_lms_matrix", "%d/%d",
FF_ARRAY_ELEMS(color->rgb_to_lms_matrix),
FF_ARRAY_ELEMS(color->rgb_to_lms_matrix), 1,
color->rgb_to_lms_matrix[idx].num,
color->rgb_to_lms_matrix[idx].den);
print_int("signal_eotf", color->signal_eotf);
@ -2276,6 +2291,17 @@ static void print_dynamic_hdr_vivid(WriterContext *w, const AVDynamicHDRVivid *m
}
}
static void print_ambient_viewing_environment(WriterContext *w,
const AVAmbientViewingEnvironment *env)
{
if (!env)
return;
print_q("ambient_illuminance", env->ambient_illuminance, '/');
print_q("ambient_light_x", env->ambient_light_x, '/');
print_q("ambient_light_y", env->ambient_light_y, '/');
}
static void print_pkt_side_data(WriterContext *w,
AVCodecParameters *par,
const AVPacketSideData *side_data,
@ -2293,8 +2319,11 @@ static void print_pkt_side_data(WriterContext *w,
writer_print_section_header(w, id_data);
print_str("side_data_type", name ? name : "unknown");
if (sd->type == AV_PKT_DATA_DISPLAYMATRIX && sd->size >= 9*4) {
double rotation = av_display_rotation_get((int32_t *)sd->data);
if (isnan(rotation))
rotation = 0;
writer_print_integers(w, "displaymatrix", sd->data, 9, " %11d", 3, 4, 1);
print_int("rotation", av_display_rotation_get((int32_t *)sd->data));
print_int("rotation", rotation);
} else if (sd->type == AV_PKT_DATA_STEREO3D) {
const AVStereo3D *stereo = (AVStereo3D *)sd->data;
print_str("type", av_stereo3d_type_name(stereo->type));
@ -2506,8 +2535,12 @@ static void show_packet(WriterContext *w, InputFile *ifile, AVPacket *pkt, int p
print_val("size", pkt->size, unit_byte_str);
if (pkt->pos != -1) print_fmt ("pos", "%"PRId64, pkt->pos);
else print_str_opt("pos", "N/A");
print_fmt("flags", "%c%c", pkt->flags & AV_PKT_FLAG_KEY ? 'K' : '_',
pkt->flags & AV_PKT_FLAG_DISCARD ? 'D' : '_');
print_fmt("flags", "%c%c%c", pkt->flags & AV_PKT_FLAG_KEY ? 'K' : '_',
pkt->flags & AV_PKT_FLAG_DISCARD ? 'D' : '_',
pkt->flags & AV_PKT_FLAG_CORRUPT ? 'C' : '_');
if (do_show_data)
writer_print_data(w, "data", pkt->data, pkt->size);
writer_print_data_hash(w, "data_hash", pkt->data, pkt->size);
if (pkt->side_data_elems) {
size_t size;
@ -2526,9 +2559,6 @@ static void show_packet(WriterContext *w, InputFile *ifile, AVPacket *pkt, int p
SECTION_ID_PACKET_SIDE_DATA);
}
if (do_show_data)
writer_print_data(w, "data", pkt->data, pkt->size);
writer_print_data_hash(w, "data_hash", pkt->data, pkt->size);
writer_print_section_footer(w);
av_bprint_finalize(&pbuf, NULL);
@ -2581,8 +2611,14 @@ static void show_frame(WriterContext *w, AVFrame *frame, AVStream *stream,
print_time("pkt_dts_time", frame->pkt_dts, &stream->time_base);
print_ts ("best_effort_timestamp", frame->best_effort_timestamp);
print_time("best_effort_timestamp_time", frame->best_effort_timestamp, &stream->time_base);
#if LIBAVUTIL_VERSION_MAJOR < 59
AV_NOWARN_DEPRECATED(
print_duration_ts ("pkt_duration", frame->pkt_duration);
print_duration_time("pkt_duration_time", frame->pkt_duration, &stream->time_base);
)
#endif
print_duration_ts ("duration", frame->duration);
print_duration_time("duration_time", frame->duration, &stream->time_base);
if (frame->pkt_pos != -1) print_fmt ("pkt_pos", "%"PRId64, frame->pkt_pos);
else print_str_opt("pkt_pos", "N/A");
if (frame->pkt_size != -1) print_val ("pkt_size", frame->pkt_size, unit_byte_str);
@ -2604,8 +2640,12 @@ static void show_frame(WriterContext *w, AVFrame *frame, AVStream *stream,
print_str_opt("sample_aspect_ratio", "N/A");
}
print_fmt("pict_type", "%c", av_get_picture_type_char(frame->pict_type));
#if LIBAVUTIL_VERSION_MAJOR < 59
AV_NOWARN_DEPRECATED(
print_int("coded_picture_number", frame->coded_picture_number);
print_int("display_picture_number", frame->display_picture_number);
)
#endif
print_int("interlaced_frame", frame->interlaced_frame);
print_int("top_field_first", frame->top_field_first);
print_int("repeat_pict", frame->repeat_pict);
@ -2644,8 +2684,11 @@ static void show_frame(WriterContext *w, AVFrame *frame, AVStream *stream,
name = av_frame_side_data_name(sd->type);
print_str("side_data_type", name ? name : "unknown");
if (sd->type == AV_FRAME_DATA_DISPLAYMATRIX && sd->size >= 9*4) {
double rotation = av_display_rotation_get((int32_t *)sd->data);
if (isnan(rotation))
rotation = 0;
writer_print_integers(w, "displaymatrix", sd->data, 9, " %11d", 3, 4, 1);
print_int("rotation", av_display_rotation_get((int32_t *)sd->data));
print_int("rotation", rotation);
} else if (sd->type == AV_FRAME_DATA_AFD && sd->size > 0) {
print_int("active_format", *sd->data);
} else if (sd->type == AV_FRAME_DATA_GOP_TIMECODE && sd->size >= 8) {
@ -2700,6 +2743,9 @@ static void show_frame(WriterContext *w, AVFrame *frame, AVStream *stream,
} else if (sd->type == AV_FRAME_DATA_DYNAMIC_HDR_VIVID) {
AVDynamicHDRVivid *metadata = (AVDynamicHDRVivid *)sd->data;
print_dynamic_hdr_vivid(w, metadata);
} else if (sd->type == AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT) {
print_ambient_viewing_environment(
w, (const AVAmbientViewingEnvironment *)sd->data);
}
writer_print_section_footer(w);
}
@ -2714,7 +2760,7 @@ static void show_frame(WriterContext *w, AVFrame *frame, AVStream *stream,
static av_always_inline int process_frame(WriterContext *w,
InputFile *ifile,
AVFrame *frame, AVPacket *pkt,
AVFrame *frame, const AVPacket *pkt,
int *packet_new)
{
AVFormatContext *fmt_ctx = ifile->fmt_ctx;
@ -2858,9 +2904,10 @@ static int read_interval_packets(WriterContext *w, InputFile *ifile,
}
if (selected_streams[pkt->stream_index]) {
AVRational tb = ifile->streams[pkt->stream_index].st->time_base;
int64_t pts = pkt->pts != AV_NOPTS_VALUE ? pkt->pts : pkt->dts;
if (pkt->pts != AV_NOPTS_VALUE)
*cur_ts = av_rescale_q(pkt->pts, tb, AV_TIME_BASE_Q);
if (pts != AV_NOPTS_VALUE)
*cur_ts = av_rescale_q(pts, tb, AV_TIME_BASE_Q);
if (!has_start && *cur_ts != AV_NOPTS_VALUE) {
start = *cur_ts;
@ -2894,7 +2941,7 @@ static int read_interval_packets(WriterContext *w, InputFile *ifile,
}
av_packet_unref(pkt);
//Flush remaining frames that are cached in the decoder
for (i = 0; i < fmt_ctx->nb_streams; i++) {
for (i = 0; i < ifile->nb_streams; i++) {
pkt->stream_index = i;
if (do_read_frames) {
while (process_frame(w, ifile, frame, pkt, &(int){1}) > 0);
@ -3052,6 +3099,8 @@ static int show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_id
}
print_int("bits_per_sample", av_get_bits_per_sample(par->codec_id));
print_int("initial_padding", par->initial_padding);
break;
case AVMEDIA_TYPE_SUBTITLE:
@ -3278,15 +3327,9 @@ static int show_format(WriterContext *w, InputFile *ifile)
static void show_error(WriterContext *w, int err)
{
char errbuf[128];
const char *errbuf_ptr = errbuf;
if (av_strerror(err, errbuf, sizeof(errbuf)) < 0)
errbuf_ptr = strerror(AVUNERROR(err));
writer_print_section_header(w, SECTION_ID_ERROR);
print_int("code", err);
print_str("string", errbuf_ptr);
print_str("string", av_err2str(err));
writer_print_section_footer(w);
}
@ -3299,10 +3342,8 @@ static int open_input_file(InputFile *ifile, const char *filename,
int scan_all_pmts_set = 0;
fmt_ctx = avformat_alloc_context();
if (!fmt_ctx) {
print_error(filename, AVERROR(ENOMEM));
exit_program(1);
}
if (!fmt_ctx)
report_and_exit(AVERROR(ENOMEM));
if (!av_dict_get(format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE)) {
av_dict_set(&format_opts, "scan_all_pmts", "1", AV_DICT_DONT_OVERWRITE);
@ -3320,7 +3361,7 @@ static int open_input_file(InputFile *ifile, const char *filename,
ifile->fmt_ctx = fmt_ctx;
if (scan_all_pmts_set)
av_dict_set(&format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE);
while ((t = av_dict_get(format_opts, "", t, AV_DICT_IGNORE_SUFFIX)))
while ((t = av_dict_iterate(format_opts, t)))
av_log(NULL, AV_LOG_WARNING, "Option %s skipped - not known to demuxer.\n", t->key);
if (find_stream_info) {
@ -3718,7 +3759,7 @@ static void opt_input_file(void *optctx, const char *arg)
exit_program(1);
}
if (!strcmp(arg, "-"))
arg = "pipe:";
arg = "fd:";
input_filename = arg;
}
@ -3737,7 +3778,7 @@ static void opt_output_file(void *optctx, const char *arg)
exit_program(1);
}
if (!strcmp(arg, "-"))
arg = "pipe:";
arg = "fd:";
output_filename = arg;
}

@ -0,0 +1,145 @@
/*
* This file is part of FFmpeg.
* Copyright (c) 2023 ARTHENICA LTD
*
* FFmpeg 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 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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 FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
* This file is the modified version of objpool.c file living in ffmpeg source code under the fftools folder. We
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop ffmpeg-kit library.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
* - fftools header names updated
*/
#include <stdint.h>
#include "libavcodec/packet.h"
#include "libavutil/common.h"
#include "libavutil/error.h"
#include "libavutil/frame.h"
#include "libavutil/mem.h"
#include "fftools_objpool.h"
struct ObjPool {
void *pool[32];
unsigned int pool_count;
ObjPoolCBAlloc alloc;
ObjPoolCBReset reset;
ObjPoolCBFree free;
};
ObjPool *objpool_alloc(ObjPoolCBAlloc cb_alloc, ObjPoolCBReset cb_reset,
ObjPoolCBFree cb_free)
{
ObjPool *op = av_mallocz(sizeof(*op));
if (!op)
return NULL;
op->alloc = cb_alloc;
op->reset = cb_reset;
op->free = cb_free;
return op;
}
void objpool_free(ObjPool **pop)
{
ObjPool *op = *pop;
if (!op)
return;
for (unsigned int i = 0; i < op->pool_count; i++)
op->free(&op->pool[i]);
av_freep(pop);
}
int objpool_get(ObjPool *op, void **obj)
{
if (op->pool_count) {
*obj = op->pool[--op->pool_count];
op->pool[op->pool_count] = NULL;
} else
*obj = op->alloc();
return *obj ? 0 : AVERROR(ENOMEM);
}
void objpool_release(ObjPool *op, void **obj)
{
if (!*obj)
return;
op->reset(*obj);
if (op->pool_count < FF_ARRAY_ELEMS(op->pool))
op->pool[op->pool_count++] = *obj;
else
op->free(obj);
*obj = NULL;
}
static void *alloc_packet(void)
{
return av_packet_alloc();
}
static void *alloc_frame(void)
{
return av_frame_alloc();
}
static void reset_packet(void *obj)
{
av_packet_unref(obj);
}
static void reset_frame(void *obj)
{
av_frame_unref(obj);
}
static void free_packet(void **obj)
{
AVPacket *pkt = *obj;
av_packet_free(&pkt);
*obj = NULL;
}
static void free_frame(void **obj)
{
AVFrame *frame = *obj;
av_frame_free(&frame);
*obj = NULL;
}
ObjPool *objpool_alloc_packets(void)
{
return objpool_alloc(alloc_packet, reset_packet, free_packet);
}
ObjPool *objpool_alloc_frames(void)
{
return objpool_alloc(alloc_frame, reset_frame, free_frame);
}

@ -0,0 +1,50 @@
/*
* This file is part of FFmpeg.
* Copyright (c) 2023 ARTHENICA LTD
*
* FFmpeg 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 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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 FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
* This file is the modified version of objpool.h file living in ffmpeg source code under the fftools folder. We
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop ffmpeg-kit library.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
*/
#ifndef FFTOOLS_OBJPOOL_H
#define FFTOOLS_OBJPOOL_H
typedef struct ObjPool ObjPool;
typedef void* (*ObjPoolCBAlloc)(void);
typedef void (*ObjPoolCBReset)(void *);
typedef void (*ObjPoolCBFree)(void **);
void objpool_free(ObjPool **op);
ObjPool *objpool_alloc(ObjPoolCBAlloc cb_alloc, ObjPoolCBReset cb_reset,
ObjPoolCBFree cb_free);
ObjPool *objpool_alloc_packets(void);
ObjPool *objpool_alloc_frames(void);
int objpool_get(ObjPool *op, void **obj);
void objpool_release(ObjPool *op, void **obj);
#endif // FFTOOLS_OBJPOOL_H

@ -1,6 +1,7 @@
/*
* Option handlers shared between the tools.
* copyright (c) 2022 Taner Sener ( tanersener gmail com )
* Copyright (c) 2022 Taner Sener
* Copyright (c) 2023 ARTHENICA LTD
*
* This file is part of FFmpeg.
*
@ -24,6 +25,12 @@
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop the ffmpeg-kit library.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - time field in report_callback updated as double
*
* ffmpeg-kit changes by Taner Sener
*
* 09.2022
@ -88,7 +95,7 @@ static __thread FILE *report_file = NULL;
static __thread int report_file_level = AV_LOG_DEBUG;
extern void ffmpegkit_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);
extern void (*report_callback)(int, float, float, int64_t, double, double, double);
extern __thread char *program_name;
int show_license(void *optctx, const char *opt, const char *arg)

@ -1,6 +1,6 @@
/*
* Option handlers shared between the tools.
* copyright (c) 2022 Taner Sener ( tanersener gmail com )
* Copyright (c) 2022 Taner Sener
*
* This file is part of FFmpeg.
*

@ -0,0 +1,462 @@
/*
* This file is part of FFmpeg.
* Copyright (c) 2023 ARTHENICA LTD
*
* FFmpeg 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 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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 FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
* This file is the modified version of sync_queue.c file living in ffmpeg source code under the fftools folder. We
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop ffmpeg-kit library.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
* - fftools header names updated
*/
#include <stdint.h>
#include <string.h>
#include "libavutil/avassert.h"
#include "libavutil/error.h"
#include "libavutil/fifo.h"
#include "libavutil/mathematics.h"
#include "libavutil/mem.h"
#include "fftools_objpool.h"
#include "fftools_sync_queue.h"
typedef struct SyncQueueStream {
AVFifo *fifo;
AVRational tb;
/* stream head: largest timestamp seen */
int64_t head_ts;
int limiting;
/* no more frames will be sent for this stream */
int finished;
uint64_t frames_sent;
uint64_t frames_max;
} SyncQueueStream;
struct SyncQueue {
enum SyncQueueType type;
/* no more frames will be sent for any stream */
int finished;
/* sync head: the stream with the _smallest_ head timestamp
* this stream determines which frames can be output */
int head_stream;
/* the finished stream with the smallest finish timestamp or -1 */
int head_finished_stream;
// maximum buffering duration in microseconds
int64_t buf_size_us;
SyncQueueStream *streams;
unsigned int nb_streams;
// pool of preallocated frames to avoid constant allocations
ObjPool *pool;
};
static void frame_move(const SyncQueue *sq, SyncQueueFrame dst,
SyncQueueFrame src)
{
if (sq->type == SYNC_QUEUE_PACKETS)
av_packet_move_ref(dst.p, src.p);
else
av_frame_move_ref(dst.f, src.f);
}
static int64_t frame_ts(const SyncQueue *sq, SyncQueueFrame frame)
{
return (sq->type == SYNC_QUEUE_PACKETS) ?
frame.p->pts + frame.p->duration :
frame.f->pts + frame.f->duration;
}
static int frame_null(const SyncQueue *sq, SyncQueueFrame frame)
{
return (sq->type == SYNC_QUEUE_PACKETS) ? (frame.p == NULL) : (frame.f == NULL);
}
static void finish_stream(SyncQueue *sq, unsigned int stream_idx)
{
SyncQueueStream *st = &sq->streams[stream_idx];
st->finished = 1;
if (st->limiting && st->head_ts != AV_NOPTS_VALUE) {
/* check if this stream is the new finished head */
if (sq->head_finished_stream < 0 ||
av_compare_ts(st->head_ts, st->tb,
sq->streams[sq->head_finished_stream].head_ts,
sq->streams[sq->head_finished_stream].tb) < 0) {
sq->head_finished_stream = stream_idx;
}
/* mark as finished all streams that should no longer receive new frames,
* due to them being ahead of some finished stream */
st = &sq->streams[sq->head_finished_stream];
for (unsigned int i = 0; i < sq->nb_streams; i++) {
SyncQueueStream *st1 = &sq->streams[i];
if (st != st1 && st1->head_ts != AV_NOPTS_VALUE &&
av_compare_ts(st->head_ts, st->tb, st1->head_ts, st1->tb) <= 0)
st1->finished = 1;
}
}
/* mark the whole queue as finished if all streams are finished */
for (unsigned int i = 0; i < sq->nb_streams; i++) {
if (!sq->streams[i].finished)
return;
}
sq->finished = 1;
}
static void queue_head_update(SyncQueue *sq)
{
if (sq->head_stream < 0) {
/* wait for one timestamp in each stream before determining
* the queue head */
for (unsigned int i = 0; i < sq->nb_streams; i++) {
SyncQueueStream *st = &sq->streams[i];
if (st->limiting && st->head_ts == AV_NOPTS_VALUE)
return;
}
// placeholder value, correct one will be found below
sq->head_stream = 0;
}
for (unsigned int i = 0; i < sq->nb_streams; i++) {
SyncQueueStream *st_head = &sq->streams[sq->head_stream];
SyncQueueStream *st_other = &sq->streams[i];
if (st_other->limiting && st_other->head_ts != AV_NOPTS_VALUE &&
av_compare_ts(st_other->head_ts, st_other->tb,
st_head->head_ts, st_head->tb) < 0)
sq->head_stream = i;
}
}
/* update this stream's head timestamp */
static void stream_update_ts(SyncQueue *sq, unsigned int stream_idx, int64_t ts)
{
SyncQueueStream *st = &sq->streams[stream_idx];
if (ts == AV_NOPTS_VALUE ||
(st->head_ts != AV_NOPTS_VALUE && st->head_ts >= ts))
return;
st->head_ts = ts;
/* if this stream is now ahead of some finished stream, then
* this stream is also finished */
if (sq->head_finished_stream >= 0 &&
av_compare_ts(sq->streams[sq->head_finished_stream].head_ts,
sq->streams[sq->head_finished_stream].tb,
ts, st->tb) <= 0)
finish_stream(sq, stream_idx);
/* update the overall head timestamp if it could have changed */
if (st->limiting &&
(sq->head_stream < 0 || sq->head_stream == stream_idx))
queue_head_update(sq);
}
/* If the queue for the given stream (or all streams when stream_idx=-1)
* is overflowing, trigger a fake heartbeat on lagging streams.
*
* @return 1 if heartbeat triggered, 0 otherwise
*/
static int overflow_heartbeat(SyncQueue *sq, int stream_idx)
{
SyncQueueStream *st;
SyncQueueFrame frame;
int64_t tail_ts = AV_NOPTS_VALUE;
/* if no stream specified, pick the one that is most ahead */
if (stream_idx < 0) {
int64_t ts = AV_NOPTS_VALUE;
for (int i = 0; i < sq->nb_streams; i++) {
st = &sq->streams[i];
if (st->head_ts != AV_NOPTS_VALUE &&
(ts == AV_NOPTS_VALUE ||
av_compare_ts(ts, sq->streams[stream_idx].tb,
st->head_ts, st->tb) < 0)) {
ts = st->head_ts;
stream_idx = i;
}
}
/* no stream has a timestamp yet -> nothing to do */
if (stream_idx < 0)
return 0;
}
st = &sq->streams[stream_idx];
/* get the chosen stream's tail timestamp */
for (size_t i = 0; tail_ts == AV_NOPTS_VALUE &&
av_fifo_peek(st->fifo, &frame, 1, i) >= 0; i++)
tail_ts = frame_ts(sq, frame);
/* overflow triggers when the tail is over specified duration behind the head */
if (tail_ts == AV_NOPTS_VALUE || tail_ts >= st->head_ts ||
av_rescale_q(st->head_ts - tail_ts, st->tb, AV_TIME_BASE_Q) < sq->buf_size_us)
return 0;
/* signal a fake timestamp for all streams that prevent tail_ts from being output */
tail_ts++;
for (unsigned int i = 0; i < sq->nb_streams; i++) {
SyncQueueStream *st1 = &sq->streams[i];
int64_t ts;
if (st == st1 || st1->finished ||
(st1->head_ts != AV_NOPTS_VALUE &&
av_compare_ts(tail_ts, st->tb, st1->head_ts, st1->tb) <= 0))
continue;
ts = av_rescale_q(tail_ts, st->tb, st1->tb);
if (st1->head_ts != AV_NOPTS_VALUE)
ts = FFMAX(st1->head_ts + 1, ts);
stream_update_ts(sq, i, ts);
}
return 1;
}
int sq_send(SyncQueue *sq, unsigned int stream_idx, SyncQueueFrame frame)
{
SyncQueueStream *st;
SyncQueueFrame dst;
int64_t ts;
int ret;
av_assert0(stream_idx < sq->nb_streams);
st = &sq->streams[stream_idx];
av_assert0(st->tb.num > 0 && st->tb.den > 0);
if (frame_null(sq, frame)) {
finish_stream(sq, stream_idx);
return 0;
}
if (st->finished)
return AVERROR_EOF;
ret = objpool_get(sq->pool, (void**)&dst);
if (ret < 0)
return ret;
frame_move(sq, dst, frame);
ts = frame_ts(sq, dst);
ret = av_fifo_write(st->fifo, &dst, 1);
if (ret < 0) {
frame_move(sq, frame, dst);
objpool_release(sq->pool, (void**)&dst);
return ret;
}
stream_update_ts(sq, stream_idx, ts);
st->frames_sent++;
if (st->frames_sent >= st->frames_max)
finish_stream(sq, stream_idx);
return 0;
}
static int receive_for_stream(SyncQueue *sq, unsigned int stream_idx,
SyncQueueFrame frame)
{
SyncQueueStream *st_head = sq->head_stream >= 0 ?
&sq->streams[sq->head_stream] : NULL;
SyncQueueStream *st;
av_assert0(stream_idx < sq->nb_streams);
st = &sq->streams[stream_idx];
if (av_fifo_can_read(st->fifo)) {
SyncQueueFrame peek;
int64_t ts;
int cmp = 1;
av_fifo_peek(st->fifo, &peek, 1, 0);
ts = frame_ts(sq, peek);
/* check if this stream's tail timestamp does not overtake
* the overall queue head */
if (ts != AV_NOPTS_VALUE && st_head)
cmp = av_compare_ts(ts, st->tb, st_head->head_ts, st_head->tb);
/* We can release frames that do not end after the queue head.
* Frames with no timestamps are just passed through with no conditions.
*/
if (cmp <= 0 || ts == AV_NOPTS_VALUE) {
frame_move(sq, frame, peek);
objpool_release(sq->pool, (void**)&peek);
av_fifo_drain2(st->fifo, 1);
return 0;
}
}
return (sq->finished || (st->finished && !av_fifo_can_read(st->fifo))) ?
AVERROR_EOF : AVERROR(EAGAIN);
}
static int receive_internal(SyncQueue *sq, int stream_idx, SyncQueueFrame frame)
{
int nb_eof = 0;
int ret;
/* read a frame for a specific stream */
if (stream_idx >= 0) {
ret = receive_for_stream(sq, stream_idx, frame);
return (ret < 0) ? ret : stream_idx;
}
/* read a frame for any stream with available output */
for (unsigned int i = 0; i < sq->nb_streams; i++) {
ret = receive_for_stream(sq, i, frame);
if (ret == AVERROR_EOF || ret == AVERROR(EAGAIN)) {
nb_eof += (ret == AVERROR_EOF);
continue;
}
return (ret < 0) ? ret : i;
}
return (nb_eof == sq->nb_streams) ? AVERROR_EOF : AVERROR(EAGAIN);
}
int sq_receive(SyncQueue *sq, int stream_idx, SyncQueueFrame frame)
{
int ret = receive_internal(sq, stream_idx, frame);
/* try again if the queue overflowed and triggered a fake heartbeat
* for lagging streams */
if (ret == AVERROR(EAGAIN) && overflow_heartbeat(sq, stream_idx))
ret = receive_internal(sq, stream_idx, frame);
return ret;
}
int sq_add_stream(SyncQueue *sq, int limiting)
{
SyncQueueStream *tmp, *st;
tmp = av_realloc_array(sq->streams, sq->nb_streams + 1, sizeof(*sq->streams));
if (!tmp)
return AVERROR(ENOMEM);
sq->streams = tmp;
st = &sq->streams[sq->nb_streams];
memset(st, 0, sizeof(*st));
st->fifo = av_fifo_alloc2(1, sizeof(SyncQueueFrame), AV_FIFO_FLAG_AUTO_GROW);
if (!st->fifo)
return AVERROR(ENOMEM);
/* we set a valid default, so that a pathological stream that never
* receives even a real timebase (and no frames) won't stall all other
* streams forever; cf. overflow_heartbeat() */
st->tb = (AVRational){ 1, 1 };
st->head_ts = AV_NOPTS_VALUE;
st->frames_max = UINT64_MAX;
st->limiting = limiting;
return sq->nb_streams++;
}
void sq_set_tb(SyncQueue *sq, unsigned int stream_idx, AVRational tb)
{
SyncQueueStream *st;
av_assert0(stream_idx < sq->nb_streams);
st = &sq->streams[stream_idx];
av_assert0(!av_fifo_can_read(st->fifo));
if (st->head_ts != AV_NOPTS_VALUE)
st->head_ts = av_rescale_q(st->head_ts, st->tb, tb);
st->tb = tb;
}
void sq_limit_frames(SyncQueue *sq, unsigned int stream_idx, uint64_t frames)
{
SyncQueueStream *st;
av_assert0(stream_idx < sq->nb_streams);
st = &sq->streams[stream_idx];
st->frames_max = frames;
if (st->frames_sent >= st->frames_max)
finish_stream(sq, stream_idx);
}
SyncQueue *sq_alloc(enum SyncQueueType type, int64_t buf_size_us)
{
SyncQueue *sq = av_mallocz(sizeof(*sq));
if (!sq)
return NULL;
sq->type = type;
sq->buf_size_us = buf_size_us;
sq->head_stream = -1;
sq->head_finished_stream = -1;
sq->pool = (type == SYNC_QUEUE_PACKETS) ? objpool_alloc_packets() :
objpool_alloc_frames();
if (!sq->pool) {
av_freep(&sq);
return NULL;
}
return sq;
}
void sq_free(SyncQueue **psq)
{
SyncQueue *sq = *psq;
if (!sq)
return;
for (unsigned int i = 0; i < sq->nb_streams; i++) {
SyncQueueFrame frame;
while (av_fifo_read(sq->streams[i].fifo, &frame, 1) >= 0)
objpool_release(sq->pool, (void**)&frame);
av_fifo_freep2(&sq->streams[i].fifo);
}
av_freep(&sq->streams);
objpool_free(&sq->pool);
av_freep(psq);
}

@ -0,0 +1,122 @@
/*
* This file is part of FFmpeg.
* Copyright (c) 2023 ARTHENICA LTD
*
* FFmpeg 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 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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 FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
* This file is the modified version of sync_queue.h file living in ffmpeg source code under the fftools folder. We
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop ffmpeg-kit library.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
*/
#ifndef FFTOOLS_SYNC_QUEUE_H
#define FFTOOLS_SYNC_QUEUE_H
#include <stdint.h>
#include "libavcodec/packet.h"
#include "libavutil/frame.h"
enum SyncQueueType {
SYNC_QUEUE_PACKETS,
SYNC_QUEUE_FRAMES,
};
typedef union SyncQueueFrame {
AVFrame *f;
AVPacket *p;
} SyncQueueFrame;
#define SQFRAME(frame) ((SyncQueueFrame){ .f = (frame) })
#define SQPKT(pkt) ((SyncQueueFrame){ .p = (pkt) })
typedef struct SyncQueue SyncQueue;
/**
* Allocate a sync queue of the given type.
*
* @param buf_size_us maximum duration that will be buffered in microseconds
*/
SyncQueue *sq_alloc(enum SyncQueueType type, int64_t buf_size_us);
void sq_free(SyncQueue **sq);
/**
* Add a new stream to the sync queue.
*
* @param limiting whether the stream is limiting, i.e. no other stream can be
* longer than this one
* @return
* - a non-negative stream index on success
* - a negative error code on error
*/
int sq_add_stream(SyncQueue *sq, int limiting);
/**
* Set the timebase for the stream with index stream_idx. Should be called
* before sending any frames for this stream.
*/
void sq_set_tb(SyncQueue *sq, unsigned int stream_idx, AVRational tb);
/**
* Limit the number of output frames for stream with index stream_idx
* to max_frames.
*/
void sq_limit_frames(SyncQueue *sq, unsigned int stream_idx,
uint64_t max_frames);
/**
* Submit a frame for the stream with index stream_idx.
*
* On success, the sync queue takes ownership of the frame and will reset the
* contents of the supplied frame. On failure, the frame remains owned by the
* caller.
*
* Sending a frame with NULL contents marks the stream as finished.
*
* @return
* - 0 on success
* - AVERROR_EOF when no more frames should be submitted for this stream
* - another a negative error code on failure
*/
int sq_send(SyncQueue *sq, unsigned int stream_idx, SyncQueueFrame frame);
/**
* Read a frame from the queue.
*
* @param stream_idx index of the stream to read a frame for. May be -1, then
* try to read a frame from any stream that is ready for
* output.
* @param frame output frame will be written here on success. The frame is owned
* by the caller.
*
* @return
* - a non-negative index of the stream to which the returned frame belongs
* - AVERROR(EAGAIN) when more frames need to be submitted to the queue
* - AVERROR_EOF when no more frames will be available for this stream (for any
* stream if stream_idx is -1)
* - another negative error code on failure
*/
int sq_receive(SyncQueue *sq, int stream_idx, SyncQueueFrame frame);
#endif // FFTOOLS_SYNC_QUEUE_H

@ -0,0 +1,259 @@
/*
* This file is part of FFmpeg.
* Copyright (c) 2023 ARTHENICA LTD
*
* FFmpeg 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 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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 FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
* This file is the modified version of thread_queue.c file living in ffmpeg source code under the fftools folder. We
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop ffmpeg-kit library.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
* - fftools header names updated
*/
#include <stdint.h>
#include <string.h>
#include "libavutil/avassert.h"
#include "libavutil/error.h"
#include "libavutil/fifo.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/mem.h"
#include "libavutil/thread.h"
#include "fftools_objpool.h"
#include "fftools_thread_queue.h"
enum {
FINISHED_SEND = (1 << 0),
FINISHED_RECV = (1 << 1),
};
typedef struct FifoElem {
void *obj;
unsigned int stream_idx;
} FifoElem;
struct ThreadQueue {
int *finished;
unsigned int nb_streams;
AVFifo *fifo;
ObjPool *obj_pool;
void (*obj_move)(void *dst, void *src);
pthread_mutex_t lock;
pthread_cond_t cond;
};
void tq_free(ThreadQueue **ptq)
{
ThreadQueue *tq = *ptq;
if (!tq)
return;
if (tq->fifo) {
FifoElem elem;
while (av_fifo_read(tq->fifo, &elem, 1) >= 0)
objpool_release(tq->obj_pool, &elem.obj);
}
av_fifo_freep2(&tq->fifo);
objpool_free(&tq->obj_pool);
av_freep(&tq->finished);
pthread_cond_destroy(&tq->cond);
pthread_mutex_destroy(&tq->lock);
av_freep(ptq);
}
ThreadQueue *tq_alloc(unsigned int nb_streams, size_t queue_size,
ObjPool *obj_pool, void (*obj_move)(void *dst, void *src))
{
ThreadQueue *tq;
int ret;
tq = av_mallocz(sizeof(*tq));
if (!tq)
return NULL;
ret = pthread_cond_init(&tq->cond, NULL);
if (ret) {
av_freep(&tq);
return NULL;
}
ret = pthread_mutex_init(&tq->lock, NULL);
if (ret) {
pthread_cond_destroy(&tq->cond);
av_freep(&tq);
return NULL;
}
tq->finished = av_calloc(nb_streams, sizeof(*tq->finished));
if (!tq->finished)
goto fail;
tq->nb_streams = nb_streams;
tq->fifo = av_fifo_alloc2(queue_size, sizeof(FifoElem), 0);
if (!tq->fifo)
goto fail;
tq->obj_pool = obj_pool;
tq->obj_move = obj_move;
return tq;
fail:
tq_free(&tq);
return NULL;
}
int tq_send(ThreadQueue *tq, unsigned int stream_idx, void *data)
{
int *finished;
int ret;
av_assert0(stream_idx < tq->nb_streams);
finished = &tq->finished[stream_idx];
pthread_mutex_lock(&tq->lock);
if (*finished & FINISHED_SEND) {
ret = AVERROR(EINVAL);
goto finish;
}
while (!(*finished & FINISHED_RECV) && !av_fifo_can_write(tq->fifo))
pthread_cond_wait(&tq->cond, &tq->lock);
if (*finished & FINISHED_RECV) {
ret = AVERROR_EOF;
*finished |= FINISHED_SEND;
} else {
FifoElem elem = { .stream_idx = stream_idx };
ret = objpool_get(tq->obj_pool, &elem.obj);
if (ret < 0)
goto finish;
tq->obj_move(elem.obj, data);
ret = av_fifo_write(tq->fifo, &elem, 1);
av_assert0(ret >= 0);
pthread_cond_broadcast(&tq->cond);
}
finish:
pthread_mutex_unlock(&tq->lock);
return ret;
}
static int receive_locked(ThreadQueue *tq, int *stream_idx,
void *data)
{
FifoElem elem;
unsigned int nb_finished = 0;
if (av_fifo_read(tq->fifo, &elem, 1) >= 0) {
tq->obj_move(data, elem.obj);
objpool_release(tq->obj_pool, &elem.obj);
*stream_idx = elem.stream_idx;
return 0;
}
for (unsigned int i = 0; i < tq->nb_streams; i++) {
if (!(tq->finished[i] & FINISHED_SEND))
continue;
/* return EOF to the consumer at most once for each stream */
if (!(tq->finished[i] & FINISHED_RECV)) {
tq->finished[i] |= FINISHED_RECV;
*stream_idx = i;
return AVERROR_EOF;
}
nb_finished++;
}
return nb_finished == tq->nb_streams ? AVERROR_EOF : AVERROR(EAGAIN);
}
int tq_receive(ThreadQueue *tq, int *stream_idx, void *data)
{
int ret;
*stream_idx = -1;
pthread_mutex_lock(&tq->lock);
while (1) {
ret = receive_locked(tq, stream_idx, data);
if (ret == AVERROR(EAGAIN)) {
pthread_cond_wait(&tq->cond, &tq->lock);
continue;
}
break;
}
if (ret == 0)
pthread_cond_broadcast(&tq->cond);
pthread_mutex_unlock(&tq->lock);
return ret;
}
void tq_send_finish(ThreadQueue *tq, unsigned int stream_idx)
{
av_assert0(stream_idx < tq->nb_streams);
pthread_mutex_lock(&tq->lock);
/* mark the stream as send-finished;
* next time the consumer thread tries to read this stream it will get
* an EOF and recv-finished flag will be set */
tq->finished[stream_idx] |= FINISHED_SEND;
pthread_cond_broadcast(&tq->cond);
pthread_mutex_unlock(&tq->lock);
}
void tq_receive_finish(ThreadQueue *tq, unsigned int stream_idx)
{
av_assert0(stream_idx < tq->nb_streams);
pthread_mutex_lock(&tq->lock);
/* mark the stream as recv-finished;
* next time the producer thread tries to send for this stream, it will
* get an EOF and send-finished flag will be set */
tq->finished[stream_idx] |= FINISHED_RECV;
pthread_cond_broadcast(&tq->cond);
pthread_mutex_unlock(&tq->lock);
}

@ -0,0 +1,94 @@
/*
* This file is part of FFmpeg.
* Copyright (c) 2023 ARTHENICA LTD
*
* FFmpeg 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 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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 FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
* This file is the modified version of thread_queue.h file living in ffmpeg source code under the fftools folder. We
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop ffmpeg-kit library.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
*/
#ifndef FFTOOLS_THREAD_QUEUE_H
#define FFTOOLS_THREAD_QUEUE_H
#include <string.h>
#include "fftools_objpool.h"
typedef struct ThreadQueue ThreadQueue;
/**
* Allocate a queue for sending data between threads.
*
* @param nb_streams number of streams for which a distinct EOF state is
* maintained
* @param queue_size number of items that can be stored in the queue without
* blocking
* @param obj_pool object pool that will be used to allocate items stored in the
* queue; the pool becomes owned by the queue
* @param callback that moves the contents between two data pointers
*/
ThreadQueue *tq_alloc(unsigned int nb_streams, size_t queue_size,
ObjPool *obj_pool, void (*obj_move)(void *dst, void *src));
void tq_free(ThreadQueue **tq);
/**
* Send an item for the given stream to the queue.
*
* @param data the item to send, its contents will be moved using the callback
* provided to tq_alloc(); on failure the item will be left
* untouched
* @return
* - 0 the item was successfully sent
* - AVERROR(ENOMEM) could not allocate an item for writing to the FIFO
* - AVERROR(EINVAL) the sending side has previously been marked as finished
* - AVERROR_EOF the receiving side has marked the given stream as finished
*/
int tq_send(ThreadQueue *tq, unsigned int stream_idx, void *data);
/**
* Mark the given stream finished from the sending side.
*/
void tq_send_finish(ThreadQueue *tq, unsigned int stream_idx);
/**
* Read the next item from the queue.
*
* @param stream_idx the index of the stream that was processed or -1 will be
* written here
* @param data the data item will be written here on success using the
* callback provided to tq_alloc()
* @return
* - 0 a data item was successfully read; *stream_idx contains a non-negative
* stream index
* - AVERROR_EOF When *stream_idx is non-negative, this signals that the sending
* side has marked the given stream as finished. This will happen at most once
* for each stream. When *stream_idx is -1, all streams are done.
*/
int tq_receive(ThreadQueue *tq, int *stream_idx, void *data);
/**
* Mark the given stream finished from the receiving side.
*/
void tq_receive_finish(ThreadQueue *tq, unsigned int stream_idx);
#endif // FFTOOLS_THREAD_QUEUE_H

@ -144,8 +144,6 @@ public class FFmpegKitConfig {
NativeLoader.loadFFmpegKit(nativeFFmpegTriedAndFailed);
android.util.Log.i(FFmpegKitConfig.TAG, String.format("Loaded ffmpeg-kit-%s-%s-%s-%s.", NativeLoader.loadPackageName(), NativeLoader.loadAbi(), NativeLoader.loadVersion(), NativeLoader.loadBuildDate()));
uniqueIdGenerator = new AtomicInteger(1);
/* NATIVE LOG LEVEL IS RECEIVED ONLY ON STARTUP */
@ -175,7 +173,7 @@ public class FFmpegKitConfig {
safFileDescriptorMap = new SparseArray<>();
globalLogRedirectionStrategy = LogRedirectionStrategy.PRINT_LOGS_WHEN_NO_CALLBACKS_DEFINED;
NativeLoader.enableRedirection();
android.util.Log.i(FFmpegKitConfig.TAG, String.format("Loaded ffmpeg-kit-%s-%s-%s-%s.", NativeLoader.loadPackageName(), NativeLoader.loadAbi(), NativeLoader.loadVersion(), NativeLoader.loadBuildDate()));
}
/**
@ -336,7 +334,7 @@ public class FFmpegKitConfig {
*/
private static void statistics(final long sessionId, final int videoFrameNumber,
final float videoFps, final float videoQuality, final long size,
final int time, final double bitrate, final double speed) {
final double time, final double bitrate, final double speed) {
final Statistics statistics = new Statistics(sessionId, videoFrameNumber, videoFps, videoQuality, size, time, bitrate, speed);
final Session session = getSession(sessionId);

@ -85,7 +85,7 @@ public class NativeLoader {
}
static String loadVersion() {
final String version = "5.1";
final String version = "6.0";
if (isTestModeDisabled()) {
return FFmpegKitConfig.getVersion();

@ -28,11 +28,11 @@ public class Statistics {
private float videoFps;
private float videoQuality;
private long size;
private int time;
private double time;
private double bitrate;
private double speed;
public Statistics(final long sessionId, final int videoFrameNumber, final float videoFps, final float videoQuality, final long size, final int time, final double bitrate, final double speed) {
public Statistics(final long sessionId, final int videoFrameNumber, final float videoFps, final float videoQuality, final long size, final double time, final double bitrate, final double speed) {
this.sessionId = sessionId;
this.videoFrameNumber = videoFrameNumber;
this.videoFps = videoFps;
@ -83,11 +83,11 @@ public class Statistics {
this.size = size;
}
public int getTime() {
public double getTime() {
return time;
}
public void setTime(int time) {
public void setTime(double time) {
this.time = time;
}

@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

@ -69,7 +69,7 @@ include $(BUILD_SHARED_LIBRARY)
$(call import-module, cpu-features)
MY_SRC_FILES := ffmpegkit.c ffprobekit.c ffmpegkit_exception.c fftools_cmdutils.c fftools_ffmpeg.c fftools_ffprobe.c fftools_ffmpeg_mux.c fftools_ffmpeg_opt.c fftools_opt_common.c fftools_ffmpeg_hw.c fftools_ffmpeg_filter.c
MY_SRC_FILES := ffmpegkit.c ffprobekit.c ffmpegkit_exception.c fftools_cmdutils.c fftools_ffmpeg.c fftools_ffprobe.c fftools_ffmpeg_mux.c fftools_ffmpeg_mux_init.c fftools_ffmpeg_demux.c fftools_ffmpeg_opt.c fftools_opt_common.c fftools_ffmpeg_hw.c fftools_ffmpeg_filter.c fftools_objpool.c fftools_sync_queue.c fftools_thread_queue.c
ifeq ($(TARGET_PLATFORM),android-16)
MY_SRC_FILES += android_lts_support.c

@ -38,7 +38,7 @@ PROJECT_NAME = "FFmpegKit iOS / macOS / tvOS API"
# could be handy for archiving the generated documentation or if some version
# control system is used.
PROJECT_NUMBER = 5.1
PROJECT_NUMBER = 6.0
# 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

@ -8,7 +8,7 @@
- Objective-C API
- Camera access
- `ARC` enabled library
- Built with `-fembed-bitcode` flag
- Can be built with `-fembed-bitcode` flag
- Creates shared `frameworks` and `xcframeworks`
#### 1.2 macOS
@ -17,7 +17,6 @@
- Objective-C API
- Camera access
- `ARC` enabled library
- Built with `-fembed-bitcode` flag
- Creates shared `frameworks` and `xcframeworks`
#### 1.3 tvOS
@ -25,7 +24,7 @@
- Includes `arm64`, `arm64-simulator` and `x86_64` architectures
- Objective-C API
- `ARC` enabled library
- Built with `-fembed-bitcode` flag
- Can be built with `-fembed-bitcode` flag
- Creates shared `frameworks` and `xcframeworks`
### 2. Building
@ -66,7 +65,7 @@ Please note that `FFmpegKit` project repository includes the source code of `FFm
Use your package manager (brew, etc.) to install the following packages.
```
autoconf automake libtool pkg-config curl cmake gcc gperf texinfo yasm nasm bison autogen git wget gettext meson ninja
autoconf automake libtool pkg-config curl git doxygen nasm cmake gcc gperf texinfo yasm bison autogen wget gettext meson ninja ragel groff gtk-doc-tools libtasn1
```
#### 2.2 Options
@ -111,17 +110,17 @@ All libraries created can be found under the `prebuilt` directory.
- iOS
```yaml
pod 'ffmpeg-kit-ios-full', '~> 5.1'
pod 'ffmpeg-kit-ios-full', '~> 6.0'
```
- macOS
```yaml
pod 'ffmpeg-kit-macos-full', '~> 5.1'
pod 'ffmpeg-kit-macos-full', '~> 6.0'
```
- tvOS
```yaml
pod 'ffmpeg-kit-tvos-full', '~> 5.1'
pod 'ffmpeg-kit-tvos-full', '~> 6.0'
```
2. Execute synchronous `FFmpeg` commands.

@ -1,6 +1,6 @@
# ffmpeg-kit 5.1 configure.ac
# ffmpeg-kit 6.0 configure.ac
AC_INIT([ffmpeg-kit], [5.1], [https://github.com/arthenica/ffmpeg-kit/issues/new])
AC_INIT([ffmpeg-kit], [6.0], [https://github.com/arthenica/ffmpeg-kit/issues/new])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_SRCDIR([src/FFmpegKit.m])

@ -36,7 +36,7 @@
#import "SessionState.h"
/** Global library version */
NSString* const FFmpegKitVersion = @"5.1";
NSString* const FFmpegKitVersion = @"6.0";
/**
* Prefix of named pipes created by ffmpeg-kit.
@ -150,7 +150,7 @@ void addSessionToSessionHistory(id<Session> session) {
float _statisticsFps; // statistics fps
float _statisticsQuality; // statistics quality
int64_t _statisticsSize; // statistics size
int _statisticsTime; // statistics time
double _statisticsTime; // statistics time
double _statisticsBitrate; // statistics bitrate
double _statisticsSpeed; // statistics speed
}
@ -173,7 +173,7 @@ void addSessionToSessionHistory(id<Session> session) {
fps:(float)videoFps
quality:(float)videoQuality
size:(int64_t)size
time:(int)time
time:(double)time
bitrate:(double)bitrate
speed:(double)speed {
self = [super init];
@ -224,7 +224,7 @@ void addSessionToSessionHistory(id<Session> session) {
return _statisticsSize;
}
- (int)getStatisticsTime {
- (double)getStatisticsTime {
return _statisticsTime;
}
@ -340,7 +340,7 @@ void logCallbackDataAdd(int level, AVBPrint *data) {
/**
* Adds statistics data to the end of callback data list.
*/
void statisticsCallbackDataAdd(int frameNumber, float fps, float quality, int64_t size, int time, double bitrate, double speed) {
void statisticsCallbackDataAdd(int frameNumber, float fps, float quality, int64_t size, double time, double bitrate, double speed) {
CallbackData *callbackData = [[CallbackData alloc] init:globalSessionId videoFrameNumber:frameNumber fps:fps quality:quality size:size time:time bitrate:bitrate speed:speed];
[lock lock];
@ -481,13 +481,18 @@ void ffmpegkit_log_callback_function(void *ptr, int level, const char* format, v
* @param bitrate output bit rate in kbits/s
* @param speed processing speed = processed duration / operation duration
*/
void ffmpegkit_statistics_callback_function(int frameNumber, float fps, float quality, int64_t size, int time, double bitrate, double speed) {
void ffmpegkit_statistics_callback_function(int frameNumber, float fps, float quality, int64_t size, double time, double bitrate, double speed) {
statisticsCallbackDataAdd(frameNumber, fps, quality, size, time, bitrate, speed);
}
void process_log(long sessionId, int levelValue, AVBPrint* logMessage) {
int activeLogLevel = av_log_get_level();
Log* log = [[Log alloc] init:sessionId:levelValue:[NSString stringWithCString:logMessage->str encoding:NSUTF8StringEncoding]];
NSString* message = [NSString stringWithCString:logMessage->str encoding:NSUTF8StringEncoding];
if (message == nil) {
// WE DROP LOGS THAT WE CANNOT DISPLAY
return;
}
Log* log = [[Log alloc] init:sessionId:levelValue:message];
BOOL globalCallbackDefined = false;
BOOL sessionCallbackDefined = false;
LogRedirectionStrategy activeLogRedirectionStrategy = globalLogRedirectionStrategy;
@ -570,7 +575,7 @@ void process_log(long sessionId, int levelValue, AVBPrint* logMessage) {
}
}
void process_statistics(long sessionId, int videoFrameNumber, float videoFps, float videoQuality, long size, int time, double bitrate, double speed) {
void process_statistics(long sessionId, int videoFrameNumber, float videoFps, float videoQuality, long size, double time, double bitrate, double speed) {
Statistics *statistics = [[Statistics alloc] init:sessionId videoFrameNumber:videoFrameNumber videoFps:videoFps videoQuality:videoQuality size:size time:time bitrate:bitrate speed:speed];

@ -23,12 +23,17 @@ libffmpegkit_la_SOURCES = \
ffmpegkit_exception.m \
fftools_cmdutils.c \
fftools_ffmpeg.c \
fftools_ffmpeg_demux.c \
fftools_ffmpeg_filter.c \
fftools_ffmpeg_hw.c \
fftools_ffmpeg_mux.c \
fftools_ffmpeg_mux_init.c \
fftools_ffmpeg_opt.c \
fftools_ffprobe.c \
fftools_opt_common.c
fftools_objpool.c \
fftools_opt_common.c \
fftools_sync_queue.c \
fftools_thread_queue.c
include_HEADERS = \
AbstractSession.h \
@ -60,8 +65,12 @@ include_HEADERS = \
ffmpegkit_exception.h \
fftools_cmdutils.h \
fftools_ffmpeg.h \
fftools_ffmpeg_mux.h \
fftools_fopen_utf8.h \
fftools_opt_common.h
fftools_objpool.h \
fftools_opt_common.h \
fftools_sync_queue.h \
fftools_thread_queue.h
libffmpegkit_la_CFLAGS = $(CFLAGS)
libffmpegkit_la_OBJCFLAGS = $(CFLAGS)

@ -147,12 +147,17 @@ am_libffmpegkit_la_OBJECTS = libffmpegkit_la-AbstractSession.lo \
libffmpegkit_la-ffmpegkit_exception.lo \
libffmpegkit_la-fftools_cmdutils.lo \
libffmpegkit_la-fftools_ffmpeg.lo \
libffmpegkit_la-fftools_ffmpeg_demux.lo \
libffmpegkit_la-fftools_ffmpeg_filter.lo \
libffmpegkit_la-fftools_ffmpeg_hw.lo \
libffmpegkit_la-fftools_ffmpeg_mux.lo \
libffmpegkit_la-fftools_ffmpeg_mux_init.lo \
libffmpegkit_la-fftools_ffmpeg_opt.lo \
libffmpegkit_la-fftools_ffprobe.lo \
libffmpegkit_la-fftools_opt_common.lo
libffmpegkit_la-fftools_objpool.lo \
libffmpegkit_la-fftools_opt_common.lo \
libffmpegkit_la-fftools_sync_queue.lo \
libffmpegkit_la-fftools_thread_queue.lo
libffmpegkit_la_OBJECTS = $(am_libffmpegkit_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@ -197,12 +202,17 @@ am__depfiles_remade = ./$(DEPDIR)/libffmpegkit_la-AbstractSession.Plo \
./$(DEPDIR)/libffmpegkit_la-ffmpegkit_exception.Plo \
./$(DEPDIR)/libffmpegkit_la-fftools_cmdutils.Plo \
./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg.Plo \
./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_demux.Plo \
./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_filter.Plo \
./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_hw.Plo \
./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_mux.Plo \
./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_mux_init.Plo \
./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_opt.Plo \
./$(DEPDIR)/libffmpegkit_la-fftools_ffprobe.Plo \
./$(DEPDIR)/libffmpegkit_la-fftools_opt_common.Plo
./$(DEPDIR)/libffmpegkit_la-fftools_objpool.Plo \
./$(DEPDIR)/libffmpegkit_la-fftools_opt_common.Plo \
./$(DEPDIR)/libffmpegkit_la-fftools_sync_queue.Plo \
./$(DEPDIR)/libffmpegkit_la-fftools_thread_queue.Plo
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@ -415,12 +425,17 @@ libffmpegkit_la_SOURCES = \
ffmpegkit_exception.m \
fftools_cmdutils.c \
fftools_ffmpeg.c \
fftools_ffmpeg_demux.c \
fftools_ffmpeg_filter.c \
fftools_ffmpeg_hw.c \
fftools_ffmpeg_mux.c \
fftools_ffmpeg_mux_init.c \
fftools_ffmpeg_opt.c \
fftools_ffprobe.c \
fftools_opt_common.c
fftools_objpool.c \
fftools_opt_common.c \
fftools_sync_queue.c \
fftools_thread_queue.c
include_HEADERS = \
AbstractSession.h \
@ -452,8 +467,12 @@ include_HEADERS = \
ffmpegkit_exception.h \
fftools_cmdutils.h \
fftools_ffmpeg.h \
fftools_ffmpeg_mux.h \
fftools_fopen_utf8.h \
fftools_opt_common.h
fftools_objpool.h \
fftools_opt_common.h \
fftools_sync_queue.h \
fftools_thread_queue.h
libffmpegkit_la_CFLAGS = $(CFLAGS)
libffmpegkit_la_OBJCFLAGS = $(CFLAGS)
@ -557,12 +576,17 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libffmpegkit_la-ffmpegkit_exception.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libffmpegkit_la-fftools_cmdutils.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_demux.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_filter.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_hw.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_mux.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_mux_init.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_opt.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libffmpegkit_la-fftools_ffprobe.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libffmpegkit_la-fftools_objpool.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libffmpegkit_la-fftools_opt_common.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libffmpegkit_la-fftools_sync_queue.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libffmpegkit_la-fftools_thread_queue.Plo@am__quote@ # am--include-marker
$(am__depfiles_remade):
@$(MKDIR_P) $(@D)
@ -608,6 +632,13 @@ libffmpegkit_la-fftools_ffmpeg.lo: fftools_ffmpeg.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libffmpegkit_la_CFLAGS) $(CFLAGS) -c -o libffmpegkit_la-fftools_ffmpeg.lo `test -f 'fftools_ffmpeg.c' || echo '$(srcdir)/'`fftools_ffmpeg.c
libffmpegkit_la-fftools_ffmpeg_demux.lo: fftools_ffmpeg_demux.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libffmpegkit_la_CFLAGS) $(CFLAGS) -MT libffmpegkit_la-fftools_ffmpeg_demux.lo -MD -MP -MF $(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_demux.Tpo -c -o libffmpegkit_la-fftools_ffmpeg_demux.lo `test -f 'fftools_ffmpeg_demux.c' || echo '$(srcdir)/'`fftools_ffmpeg_demux.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_demux.Tpo $(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_demux.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fftools_ffmpeg_demux.c' object='libffmpegkit_la-fftools_ffmpeg_demux.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libffmpegkit_la_CFLAGS) $(CFLAGS) -c -o libffmpegkit_la-fftools_ffmpeg_demux.lo `test -f 'fftools_ffmpeg_demux.c' || echo '$(srcdir)/'`fftools_ffmpeg_demux.c
libffmpegkit_la-fftools_ffmpeg_filter.lo: fftools_ffmpeg_filter.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libffmpegkit_la_CFLAGS) $(CFLAGS) -MT libffmpegkit_la-fftools_ffmpeg_filter.lo -MD -MP -MF $(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_filter.Tpo -c -o libffmpegkit_la-fftools_ffmpeg_filter.lo `test -f 'fftools_ffmpeg_filter.c' || echo '$(srcdir)/'`fftools_ffmpeg_filter.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_filter.Tpo $(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_filter.Plo
@ -629,6 +660,13 @@ libffmpegkit_la-fftools_ffmpeg_mux.lo: fftools_ffmpeg_mux.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libffmpegkit_la_CFLAGS) $(CFLAGS) -c -o libffmpegkit_la-fftools_ffmpeg_mux.lo `test -f 'fftools_ffmpeg_mux.c' || echo '$(srcdir)/'`fftools_ffmpeg_mux.c
libffmpegkit_la-fftools_ffmpeg_mux_init.lo: fftools_ffmpeg_mux_init.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libffmpegkit_la_CFLAGS) $(CFLAGS) -MT libffmpegkit_la-fftools_ffmpeg_mux_init.lo -MD -MP -MF $(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_mux_init.Tpo -c -o libffmpegkit_la-fftools_ffmpeg_mux_init.lo `test -f 'fftools_ffmpeg_mux_init.c' || echo '$(srcdir)/'`fftools_ffmpeg_mux_init.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_mux_init.Tpo $(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_mux_init.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fftools_ffmpeg_mux_init.c' object='libffmpegkit_la-fftools_ffmpeg_mux_init.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libffmpegkit_la_CFLAGS) $(CFLAGS) -c -o libffmpegkit_la-fftools_ffmpeg_mux_init.lo `test -f 'fftools_ffmpeg_mux_init.c' || echo '$(srcdir)/'`fftools_ffmpeg_mux_init.c
libffmpegkit_la-fftools_ffmpeg_opt.lo: fftools_ffmpeg_opt.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libffmpegkit_la_CFLAGS) $(CFLAGS) -MT libffmpegkit_la-fftools_ffmpeg_opt.lo -MD -MP -MF $(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_opt.Tpo -c -o libffmpegkit_la-fftools_ffmpeg_opt.lo `test -f 'fftools_ffmpeg_opt.c' || echo '$(srcdir)/'`fftools_ffmpeg_opt.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_opt.Tpo $(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_opt.Plo
@ -643,6 +681,13 @@ libffmpegkit_la-fftools_ffprobe.lo: fftools_ffprobe.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libffmpegkit_la_CFLAGS) $(CFLAGS) -c -o libffmpegkit_la-fftools_ffprobe.lo `test -f 'fftools_ffprobe.c' || echo '$(srcdir)/'`fftools_ffprobe.c
libffmpegkit_la-fftools_objpool.lo: fftools_objpool.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libffmpegkit_la_CFLAGS) $(CFLAGS) -MT libffmpegkit_la-fftools_objpool.lo -MD -MP -MF $(DEPDIR)/libffmpegkit_la-fftools_objpool.Tpo -c -o libffmpegkit_la-fftools_objpool.lo `test -f 'fftools_objpool.c' || echo '$(srcdir)/'`fftools_objpool.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libffmpegkit_la-fftools_objpool.Tpo $(DEPDIR)/libffmpegkit_la-fftools_objpool.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fftools_objpool.c' object='libffmpegkit_la-fftools_objpool.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libffmpegkit_la_CFLAGS) $(CFLAGS) -c -o libffmpegkit_la-fftools_objpool.lo `test -f 'fftools_objpool.c' || echo '$(srcdir)/'`fftools_objpool.c
libffmpegkit_la-fftools_opt_common.lo: fftools_opt_common.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libffmpegkit_la_CFLAGS) $(CFLAGS) -MT libffmpegkit_la-fftools_opt_common.lo -MD -MP -MF $(DEPDIR)/libffmpegkit_la-fftools_opt_common.Tpo -c -o libffmpegkit_la-fftools_opt_common.lo `test -f 'fftools_opt_common.c' || echo '$(srcdir)/'`fftools_opt_common.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libffmpegkit_la-fftools_opt_common.Tpo $(DEPDIR)/libffmpegkit_la-fftools_opt_common.Plo
@ -650,6 +695,20 @@ libffmpegkit_la-fftools_opt_common.lo: fftools_opt_common.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libffmpegkit_la_CFLAGS) $(CFLAGS) -c -o libffmpegkit_la-fftools_opt_common.lo `test -f 'fftools_opt_common.c' || echo '$(srcdir)/'`fftools_opt_common.c
libffmpegkit_la-fftools_sync_queue.lo: fftools_sync_queue.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libffmpegkit_la_CFLAGS) $(CFLAGS) -MT libffmpegkit_la-fftools_sync_queue.lo -MD -MP -MF $(DEPDIR)/libffmpegkit_la-fftools_sync_queue.Tpo -c -o libffmpegkit_la-fftools_sync_queue.lo `test -f 'fftools_sync_queue.c' || echo '$(srcdir)/'`fftools_sync_queue.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libffmpegkit_la-fftools_sync_queue.Tpo $(DEPDIR)/libffmpegkit_la-fftools_sync_queue.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fftools_sync_queue.c' object='libffmpegkit_la-fftools_sync_queue.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libffmpegkit_la_CFLAGS) $(CFLAGS) -c -o libffmpegkit_la-fftools_sync_queue.lo `test -f 'fftools_sync_queue.c' || echo '$(srcdir)/'`fftools_sync_queue.c
libffmpegkit_la-fftools_thread_queue.lo: fftools_thread_queue.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libffmpegkit_la_CFLAGS) $(CFLAGS) -MT libffmpegkit_la-fftools_thread_queue.lo -MD -MP -MF $(DEPDIR)/libffmpegkit_la-fftools_thread_queue.Tpo -c -o libffmpegkit_la-fftools_thread_queue.lo `test -f 'fftools_thread_queue.c' || echo '$(srcdir)/'`fftools_thread_queue.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libffmpegkit_la-fftools_thread_queue.Tpo $(DEPDIR)/libffmpegkit_la-fftools_thread_queue.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fftools_thread_queue.c' object='libffmpegkit_la-fftools_thread_queue.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libffmpegkit_la_CFLAGS) $(CFLAGS) -c -o libffmpegkit_la-fftools_thread_queue.lo `test -f 'fftools_thread_queue.c' || echo '$(srcdir)/'`fftools_thread_queue.c
.m.o:
@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@am__fastdepOBJC_TRUE@ $(OBJCCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
@ -974,12 +1033,17 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/libffmpegkit_la-ffmpegkit_exception.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_cmdutils.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_demux.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_filter.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_hw.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_mux.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_mux_init.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_opt.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_ffprobe.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_objpool.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_opt_common.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_sync_queue.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_thread_queue.Plo
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
@ -1045,12 +1109,17 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/libffmpegkit_la-ffmpegkit_exception.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_cmdutils.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_demux.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_filter.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_hw.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_mux.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_mux_init.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_opt.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_ffprobe.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_objpool.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_opt_common.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_sync_queue.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_thread_queue.Plo
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

@ -27,7 +27,7 @@
*/
@interface Statistics : NSObject
- (instancetype)init:(long)sessionId videoFrameNumber:(int)videoFrameNumber videoFps:(float)videoFps videoQuality:(float)videoQuality size:(int64_t)size time:(int)time bitrate:(double)bitrate speed:(double)speed;
- (instancetype)init:(long)sessionId videoFrameNumber:(int)videoFrameNumber videoFps:(float)videoFps videoQuality:(float)videoQuality size:(int64_t)size time:(double)time bitrate:(double)bitrate speed:(double)speed;
- (long)getSessionId;
@ -39,7 +39,7 @@
- (long)getSize;
- (int)getTime;
- (double)getTime;
- (double)getBitrate;

@ -25,12 +25,12 @@
float _videoFps;
float _videoQuality;
long _size;
int _time;
double _time;
double _bitrate;
double _speed;
}
- (instancetype)init:(long)sessionId videoFrameNumber:(int)videoFrameNumber videoFps:(float)videoFps videoQuality:(float)videoQuality size:(int64_t)size time:(int)time bitrate:(double)bitrate speed:(double)speed {
- (instancetype)init:(long)sessionId videoFrameNumber:(int)videoFrameNumber videoFps:(float)videoFps videoQuality:(float)videoQuality size:(int64_t)size time:(double)time bitrate:(double)bitrate speed:(double)speed {
self = [super init];
if (self) {
_sessionId = sessionId;
@ -66,7 +66,7 @@
return _size;
}
- (int)getTime {
- (double)getTime {
return _time;
}

@ -1,7 +1,8 @@
/*
* Various utilities for command line tools
* Copyright (c) 2000-2003 Fabrice Bellard
* copyright (c) 2018 Taner Sener ( tanersener gmail com )
* Copyright (c) 2018-2022 Taner Sener
* Copyright (c) 2023 ARTHENICA LTD
*
* This file is part of FFmpeg.
*
@ -25,6 +26,12 @@
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop mobile-ffmpeg and later ffmpeg-kit libraries.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
*
* mobile-ffmpeg / ffmpeg-kit changes by Taner Sener
*
* 09.2022
@ -129,11 +136,18 @@ void register_exit(void (*cb)(int ret))
program_exit = cb;
}
void report_and_exit(int ret)
{
av_log(NULL, AV_LOG_FATAL, "%s\n", av_err2str(ret));
exit_program(AVUNERROR(ret));
}
void exit_program(int ret)
{
if (program_exit)
program_exit(ret);
// FFmpegKit
// exit disabled and replaced with longjmp, exit value stored in longjmp_value
// exit(ret);
longjmp_value = ret;
@ -696,7 +710,7 @@ static void init_parse_context(OptionParseContext *octx,
octx->nb_groups = nb_groups;
octx->groups = av_calloc(octx->nb_groups, sizeof(*octx->groups));
if (!octx->groups)
exit_program(1);
report_and_exit(AVERROR(ENOMEM));
for (i = 0; i < octx->nb_groups; i++)
octx->groups[i].group_def = &groups[i];
@ -843,12 +857,7 @@ do { \
void print_error(const char *filename, int err)
{
char errbuf[128];
const char *errbuf_ptr = errbuf;
if (av_strerror(err, errbuf, sizeof(errbuf)) < 0)
errbuf_ptr = strerror(AVUNERROR(err));
av_log(NULL, AV_LOG_ERROR, "%s: %s\n", filename, errbuf_ptr);
av_log(NULL, AV_LOG_ERROR, "%s: %s\n", filename, av_err2str(err));
}
int read_yesno(void)
@ -971,7 +980,7 @@ AVDictionary *filter_codec_opts(AVDictionary *opts, enum AVCodecID codec_id,
break;
}
while ((t = av_dict_get(opts, "", t, AV_DICT_IGNORE_SUFFIX))) {
while ((t = av_dict_iterate(opts, t))) {
const AVClass *priv_class;
char *p = strchr(t->key, ':');
@ -1009,11 +1018,8 @@ AVDictionary **setup_find_stream_info_opts(AVFormatContext *s,
if (!s->nb_streams)
return NULL;
opts = av_calloc(s->nb_streams, sizeof(*opts));
if (!opts) {
av_log(NULL, AV_LOG_ERROR,
"Could not alloc memory for stream options.\n");
exit_program(1);
}
if (!opts)
report_and_exit(AVERROR(ENOMEM));
for (i = 0; i < s->nb_streams; i++)
opts[i] = filter_codec_opts(codec_opts, s->streams[i]->codecpar->codec_id,
s, s->streams[i], NULL);
@ -1028,10 +1034,8 @@ void *grow_array(void *array, int elem_size, int *size, int new_size)
}
if (*size < new_size) {
uint8_t *tmp = av_realloc_array(array, new_size, elem_size);
if (!tmp) {
av_log(NULL, AV_LOG_ERROR, "Could not alloc buffer.\n");
exit_program(1);
}
if (!tmp)
report_and_exit(AVERROR(ENOMEM));
memset(tmp + *size*elem_size, 0, (new_size-*size) * elem_size);
*size = new_size;
return tmp;
@ -1044,10 +1048,8 @@ void *allocate_array_elem(void *ptr, size_t elem_size, int *nb_elems)
void *new_elem;
if (!(new_elem = av_mallocz(elem_size)) ||
av_dynarray_add_nofree(ptr, nb_elems, new_elem) < 0) {
av_log(NULL, AV_LOG_ERROR, "Could not alloc buffer.\n");
exit_program(1);
}
av_dynarray_add_nofree(ptr, nb_elems, new_elem) < 0)
report_and_exit(AVERROR(ENOMEM));
return new_elem;
}

@ -1,7 +1,8 @@
/*
* Various utilities for command line tools
* copyright (c) 2003 Fabrice Bellard
* copyright (c) 2018 Taner Sener ( tanersener gmail com )
* copyright (c) 2018-2022 Taner Sener
* copyright (c) 2023 ARTHENICA LTD
*
* This file is part of FFmpeg.
*
@ -25,6 +26,12 @@
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop mobile-ffmpeg and later ffmpeg-kit libraries.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
*
* mobile-ffmpeg / ffmpeg-kit changes by Taner Sener
*
* 09.2022
@ -95,6 +102,17 @@ extern __thread int find_stream_info;
*/
void register_exit(void (*cb)(int ret));
/**
* Reports an error corresponding to the provided
* AVERROR code and calls exit_program() with the
* corresponding POSIX error code.
* @note ret must be an AVERROR-value of a POSIX error code
* (i.e. AVERROR(EFOO) and not AVERROR_FOO).
* library functions can return both, so call this only
* with AVERROR(EFOO) of your own.
*/
void report_and_exit(int ret) av_noreturn;
/**
* Wraps exit with a program-specific cleanup routine.
*/
@ -232,11 +250,6 @@ void show_help_children(const AVClass *clazz, int flags);
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.
*/
int show_help(void *optctx, const char *opt, const char *arg);
/**
* Parse the command line arguments.
*

File diff suppressed because it is too large Load Diff

@ -1,6 +1,7 @@
/*
* This file is part of FFmpeg.
* Copyright (c) 2018 Taner Sener ( tanersener gmail com )
* Copyright (c) 2018-2022 Taner Sener
* Copyright (c) 2023 ARTHENICA LTD
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -22,6 +23,16 @@
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop mobile-ffmpeg and later ffmpeg-kit libraries.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
* - WARN_MULTIPLE_OPT_USAGE, MATCH_PER_STREAM_OPT, MATCH_PER_TYPE_OPT, SPECIFIER_OPT_FMT declarations migrated to
* ffmpeg_mux.h
* - "class" member field renamed as clazz
* - time field in set_report_callback updated as double
*
* mobile-ffmpeg / ffmpeg-kit changes by Taner Sener
*
* 09.2022
@ -59,11 +70,13 @@
#include "config.h"
#include <stdatomic.h>
#include <stdint.h>
#include <stdio.h>
#include <signal.h>
#include "fftools_cmdutils.h"
#include "fftools_sync_queue.h"
#include "libavformat/avformat.h"
#include "libavformat/avio.h"
@ -85,6 +98,12 @@
#include "libswresample/swresample.h"
// deprecated features
#define FFMPEG_OPT_PSNR 1
#define FFMPEG_OPT_MAP_CHANNEL 1
#define FFMPEG_OPT_MAP_SYNC 1
#define FFMPEG_ROTATION_METADATA 1
enum VideoSyncMethod {
VSYNC_AUTO = -1,
VSYNC_PASSTHROUGH,
@ -113,15 +132,15 @@ typedef struct StreamMap {
int disabled; /* 1 is this mapping is disabled by a negative map */
int file_index;
int stream_index;
int sync_file_index;
int sync_stream_index;
char *linklabel; /* name of an output link, for mapping lavfi outputs */
} StreamMap;
#if FFMPEG_OPT_MAP_CHANNEL
typedef struct {
int file_idx, stream_idx, channel_idx; // input
int ofile_idx, ostream_idx; // output
} AudioChannelMap;
#endif
typedef struct OptionsContext {
OptionGroup *g;
@ -157,6 +176,7 @@ typedef struct OptionsContext {
int accurate_seek;
int thread_queue_size;
int input_sync_ref;
int find_stream_info;
SpecifierOpt *ts_scale;
int nb_ts_scale;
@ -174,11 +194,10 @@ typedef struct OptionsContext {
/* output options */
StreamMap *stream_maps;
int nb_stream_maps;
#if FFMPEG_OPT_MAP_CHANNEL
AudioChannelMap *audio_channel_maps; /* one info entry per -map_channel */
int nb_audio_channel_maps; /* number of (valid) -map_channel settings */
int metadata_global_manual;
int metadata_streams_manual;
int metadata_chapters_manual;
#endif
const char **attachments;
int nb_attachments;
@ -186,9 +205,10 @@ typedef struct OptionsContext {
int64_t recording_time;
int64_t stop_time;
uint64_t limit_filesize;
int64_t limit_filesize;
float mux_preload;
float mux_max_delay;
float shortest_buf_duration;
int shortest;
int bitexact;
@ -221,6 +241,12 @@ typedef struct OptionsContext {
int nb_force_fps;
SpecifierOpt *frame_aspect_ratios;
int nb_frame_aspect_ratios;
SpecifierOpt *display_rotations;
int nb_display_rotations;
SpecifierOpt *display_hflips;
int nb_display_hflips;
SpecifierOpt *display_vflips;
int nb_display_vflips;
SpecifierOpt *rc_overrides;
int nb_rc_overrides;
SpecifierOpt *intra_matrices;
@ -247,6 +273,8 @@ typedef struct OptionsContext {
int nb_reinit_filters;
SpecifierOpt *fix_sub_duration;
int nb_fix_sub_duration;
SpecifierOpt *fix_sub_duration_heartbeat;
int nb_fix_sub_duration_heartbeat;
SpecifierOpt *canvas_sizes;
int nb_canvas_sizes;
SpecifierOpt *pass;
@ -275,6 +303,18 @@ typedef struct OptionsContext {
int nb_autoscale;
SpecifierOpt *bits_per_raw_sample;
int nb_bits_per_raw_sample;
SpecifierOpt *enc_stats_pre;
int nb_enc_stats_pre;
SpecifierOpt *enc_stats_post;
int nb_enc_stats_post;
SpecifierOpt *mux_stats;
int nb_mux_stats;
SpecifierOpt *enc_stats_pre_fmt;
int nb_enc_stats_pre_fmt;
SpecifierOpt *enc_stats_post_fmt;
int nb_enc_stats_post_fmt;
SpecifierOpt *mux_stats_fmt;
int nb_mux_stats_fmt;
} OptionsContext;
typedef struct InputFilter {
@ -350,12 +390,22 @@ typedef struct InputStream {
#define DECODING_FOR_OST 1
#define DECODING_FOR_FILTER 2
int processing_needed; /* non zero if the packets must be processed */
// should attach FrameData as opaque_ref after decoding
int want_frame_data;
/**
* Codec parameters - to be used by the decoding/streamcopy code.
* st->codecpar should not be accessed, because it may be modified
* concurrently by the demuxing thread.
*/
AVCodecParameters *par;
AVCodecContext *dec_ctx;
const AVCodec *dec;
AVFrame *decoded_frame;
AVPacket *pkt;
AVRational framerate_guessed;
int64_t prev_pkt_pts;
int64_t start; /* time when read started */
/* predicted dts of the next packet read for this stream or (when there are
@ -368,6 +418,12 @@ typedef struct InputStream {
int64_t pts; ///< current pts of the decoded frame (in AV_TIME_BASE units)
int wrap_correction_done;
// the value of AVCodecParserContext.repeat_pict from the AVStream parser
// for the last packet returned from ifile_get_packet()
// -1 if unknown
// FIXME: this is a hack, the avstream parser should not be used
int last_pkt_repeat_pict;
int64_t filter_in_rescale_delta_last;
int64_t min_pts; /* pts with the smallest value in a current stream */
@ -417,12 +473,8 @@ typedef struct InputStream {
char *hwaccel_device;
enum AVPixelFormat hwaccel_output_format;
/* hwaccel context */
void *hwaccel_ctx;
void (*hwaccel_uninit)(AVCodecContext *s);
int (*hwaccel_retrieve_data)(AVCodecContext *s, AVFrame *frame);
enum AVPixelFormat hwaccel_pix_fmt;
enum AVPixelFormat hwaccel_retrieved_pix_fmt;
/* stats */
// combined size of all the packets read
@ -439,38 +491,46 @@ typedef struct InputStream {
int got_output;
} InputStream;
typedef struct LastFrameDuration {
int stream_idx;
int64_t duration;
} LastFrameDuration;
typedef struct InputFile {
int index;
AVFormatContext *ctx;
int eof_reached; /* true if eof reached */
int eagain; /* true if last read attempt returned EAGAIN */
int ist_index; /* index of first stream in input_streams */
int loop; /* set number of times input stream should be looped */
int64_t duration; /* actual duration of the longest stream in a file
at the moment when looping happens */
AVRational time_base; /* time base of the duration */
int64_t input_ts_offset;
int input_sync_ref;
/**
* Effective format start time based on enabled streams.
*/
int64_t start_time_effective;
int64_t ts_offset;
/**
* Extra timestamp offset added by discontinuity handling.
*/
int64_t ts_offset_discont;
int64_t last_ts;
int64_t start_time; /* user-specified start time in AV_TIME_BASE or AV_NOPTS_VALUE */
int64_t recording_time;
int nb_streams; /* number of stream that ffmpeg is aware of; may be different
from ctx.nb_streams if new streams appear during av_read_frame() */
int nb_streams_warn; /* number of streams that the user was warned of */
/* streams that ffmpeg is aware of;
* there may be extra streams in ctx that are not mapped to an InputStream
* if new streams appear dynamically during demuxing */
InputStream **streams;
int nb_streams;
int rate_emu;
float readrate;
int accurate_seek;
AVPacket *pkt;
#if HAVE_THREADS
AVThreadMessageQueue *in_thread_queue;
pthread_t thread; /* thread reading from this file */
int non_blocking; /* reading packets from the thread should not block */
int joined; /* the thread has been joined */
int thread_queue_size; /* maximum number of queued packets */
#endif
/* when looping the input file, this queue is used by decoders to report
* the last frame duration back to the demuxer thread */
AVThreadMessageQueue *audio_duration_queue;
int audio_duration_queue_size;
} InputFile;
enum forced_keyframes_const {
@ -485,6 +545,41 @@ enum forced_keyframes_const {
#define ABORT_ON_FLAG_EMPTY_OUTPUT (1 << 0)
#define ABORT_ON_FLAG_EMPTY_OUTPUT_STREAM (1 << 1)
enum EncStatsType {
ENC_STATS_LITERAL = 0,
ENC_STATS_FILE_IDX,
ENC_STATS_STREAM_IDX,
ENC_STATS_FRAME_NUM,
ENC_STATS_FRAME_NUM_IN,
ENC_STATS_TIMEBASE,
ENC_STATS_TIMEBASE_IN,
ENC_STATS_PTS,
ENC_STATS_PTS_TIME,
ENC_STATS_PTS_IN,
ENC_STATS_PTS_TIME_IN,
ENC_STATS_DTS,
ENC_STATS_DTS_TIME,
ENC_STATS_SAMPLE_NUM,
ENC_STATS_NB_SAMPLES,
ENC_STATS_PKT_SIZE,
ENC_STATS_BITRATE,
ENC_STATS_AVG_BITRATE,
};
typedef struct EncStatsComponent {
enum EncStatsType type;
uint8_t *str;
size_t str_len;
} EncStatsComponent;
typedef struct EncStats {
EncStatsComponent *components;
int nb_components;
AVIOContext *io;
} EncStats;
extern const char *const forced_keyframes_const_names[];
typedef enum {
@ -492,68 +587,92 @@ typedef enum {
MUXER_FINISHED = 2,
} OSTFinished ;
enum {
KF_FORCE_SOURCE = 1,
KF_FORCE_SOURCE_NO_DROP = 2,
};
typedef struct KeyframeForceCtx {
int type;
int64_t ref_pts;
// timestamps of the forced keyframes, in AV_TIME_BASE_Q
int64_t *pts;
int nb_pts;
int index;
AVExpr *pexpr;
double expr_const_values[FKF_NB];
int dropped_keyframe;
} KeyframeForceCtx;
typedef struct OutputStream {
const AVClass *clazz;
int file_index; /* file index */
int index; /* stream index in the output file */
int source_index; /* InputStream index */
/* input stream that is the source for this output stream;
* may be NULL for streams with no well-defined source, e.g.
* attachments or outputs from complex filtergraphs */
InputStream *ist;
AVStream *st; /* stream in the output file */
int encoding_needed; /* true if encoding needed for this stream */
int64_t frame_number;
/* input pts and corresponding output pts
for A/V sync */
struct InputStream *sync_ist; /* input stream to sync against */
int64_t sync_opts; /* output frame counter, could be changed to some true timestamp */ // FIXME look at frame_number
/* pts of the first frame encoded for this stream, used for limiting
* recording time */
int64_t first_pts;
/* dts of the last packet sent to the muxer */
/* number of frames emitted by the video-encoding sync code */
int64_t vsync_frame_number;
/* predicted pts of the next frame to be encoded
* audio/video encoding only */
int64_t next_pts;
/* dts of the last packet sent to the muxing queue, in AV_TIME_BASE_Q */
int64_t last_mux_dts;
/* pts of the last frame received from the filters, in AV_TIME_BASE_Q */
int64_t last_filter_pts;
// timestamp from which the streamcopied streams should start,
// in AV_TIME_BASE_Q;
// everything before it should be discarded
int64_t ts_copy_start;
// the timebase of the packets sent to the muxer
AVRational mux_timebase;
AVRational enc_timebase;
AVBSFContext *bsf_ctx;
AVCodecContext *enc_ctx;
AVCodecParameters *ref_par; /* associated input codec parameters with encoders options applied */
const AVCodec *enc;
int64_t max_frames;
AVFrame *filtered_frame;
AVFrame *last_frame;
AVFrame *sq_frame;
AVPacket *pkt;
int64_t last_dropped;
int64_t last_nb0_frames[3];
void *hwaccel_ctx;
/* video only */
AVRational frame_rate;
AVRational max_frame_rate;
enum VideoSyncMethod vsync_method;
int is_cfr;
const char *fps_mode;
int force_fps;
int top_field_first;
#if FFMPEG_ROTATION_METADATA
int rotate_overridden;
#endif
int autoscale;
int bitexact;
int bits_per_raw_sample;
#if FFMPEG_ROTATION_METADATA
double rotate_override_value;
#endif
AVRational frame_aspect_ratio;
/* forced key frames */
int64_t forced_kf_ref_pts;
int64_t *forced_kf_pts;
int forced_kf_count;
int forced_kf_index;
char *forced_keyframes;
AVExpr *forced_keyframes_pexpr;
double forced_keyframes_expr_const_values[FKF_NB];
int dropped_keyframe;
KeyframeForceCtx kf;
/* audio only */
#if FFMPEG_OPT_MAP_CHANNEL
int *audio_channels_map; /* list of the channels id to pick from the source stream */
int audio_channels_mapped; /* number of channels in audio_channels_map */
#endif
char *logfile_prefix;
FILE *logfile;
@ -569,7 +688,6 @@ typedef struct OutputStream {
char *apad;
OSTFinished finished; /* no more packets should be written for this stream */
int unavailable; /* true if the steram is unavailable (possibly temporarily) */
int stream_copy;
// init_output_stream() has been called for this stream
// The encoder and the bitstream filters have been initialized and the stream
@ -582,15 +700,16 @@ typedef struct OutputStream {
int streamcopy_started;
int copy_initial_nonkeyframes;
int copy_prior_start;
char *disposition;
int keep_pix_fmt;
/* stats */
// combined size of all the packets written
uint64_t data_size;
// combined size of all the packets sent to the muxer
uint64_t data_size_mux;
// combined size of all the packets received from the encoder
uint64_t data_size_enc;
// number of packets send to the muxer
uint64_t packets_written;
atomic_uint_least64_t packets_written;
// number of frames/samples sent to the encoder
uint64_t frames_encoded;
uint64_t samples_encoded;
@ -600,51 +719,48 @@ typedef struct OutputStream {
/* packet quality factor */
int quality;
int max_muxing_queue_size;
/* the packets are buffered here until the muxer is ready to be initialized */
AVFifo *muxing_queue;
/*
* The size of the AVPackets' buffers in queue.
* Updated when a packet is either pushed or pulled from the queue.
*/
size_t muxing_queue_data_size;
/* Threshold after which max_muxing_queue_size will be in effect */
size_t muxing_queue_data_threshold;
/* packet picture type */
int pict_type;
/* frame encode sum of squared error values */
int64_t error[4];
int sq_idx_encode;
int sq_idx_mux;
EncStats enc_stats_pre;
EncStats enc_stats_post;
/*
* bool on whether this stream should be utilized for splitting
* subtitles utilizing fix_sub_duration at random access points.
*/
unsigned int fix_sub_duration_heartbeat;
} OutputStream;
typedef struct OutputFile {
const AVClass *clazz;
int index;
const AVOutputFormat *format;
const char *url;
OutputStream **streams;
int nb_streams;
SyncQueue *sq_encode;
AVFormatContext *ctx;
AVDictionary *opts;
int ost_index; /* index of the first stream in output_streams */
int64_t recording_time; ///< desired length of the resulting file in microseconds == AV_TIME_BASE units
int64_t start_time; ///< start time in microseconds == AV_TIME_BASE units
uint64_t limit_filesize; /* filesize limit expressed in bytes */
int shortest;
int header_written;
int bitexact;
} OutputFile;
extern __thread InputStream **input_streams;
extern __thread int nb_input_streams;
extern __thread InputFile **input_files;
extern __thread int nb_input_files;
extern __thread OutputStream **output_streams;
extern __thread int nb_output_streams;
extern __thread OutputFile **output_files;
extern __thread int nb_output_files;
@ -658,13 +774,10 @@ extern __thread float audio_drift_threshold;
extern __thread float dts_delta_threshold;
extern __thread float dts_error_threshold;
extern __thread int audio_volume;
extern __thread int audio_sync_method;
extern __thread enum VideoSyncMethod 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;
@ -677,7 +790,6 @@ extern __thread int print_stats;
extern __thread int64_t stats_period;
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;
@ -688,15 +800,20 @@ extern __thread int auto_conversion_filters;
extern __thread const AVIOInterruptCB int_cb;
#if CONFIG_QSV
extern __thread char *qsv_device;
#endif
extern __thread HWDevice *filter_hw_device;
extern __thread int want_sdp;
extern __thread unsigned nb_output_dumped;
extern __thread int main_ffmpeg_return_code;
extern __thread int ignore_unknown_streams;
extern __thread int copy_unknown_streams;
extern __thread int recast_media;
#if FFMPEG_OPT_PSNR
extern __thread int do_psnr;
#endif
void term_init(void);
void term_exit(void);
@ -705,7 +822,12 @@ void show_usage(void);
void remove_avoptions(AVDictionary **a, AVDictionary *b);
void assert_avoptions(AVDictionary *m);
int guess_input_channel_layout(InputStream *ist);
void assert_file_overwrite(const char *filename);
char *file_read(const char *filename);
AVDictionary *strip_specifiers(const AVDictionary *dict);
const AVCodec *find_codec_or_die(void *logctx, const char *name,
enum AVMediaType type, int encoder);
int parse_and_set_vsync(const char *arg, int *vsync_var, int file_idx, int st_idx, int is_global);
int configure_filtergraph(FilterGraph *fg);
void check_filter_outputs(void);
@ -719,8 +841,9 @@ int ifilter_parameters_from_frame(InputFilter *ifilter, const AVFrame *frame);
int ffmpeg_parse_options(int argc, char **argv);
int videotoolbox_init(AVCodecContext *s);
int qsv_init(AVCodecContext *s);
void enc_stats_write(OutputStream *ost, EncStats *es,
const AVFrame *frame, const AVPacket *pkt,
uint64_t frame_num);
HWDevice *hw_device_get_by_name(const char *name);
int hw_device_init_from_string(const char *arg, HWDevice **dev);
@ -732,15 +855,58 @@ int hw_device_setup_for_filter(FilterGraph *fg);
int hwaccel_decode_init(AVCodecContext *avctx);
/* open the muxer when all the streams are initialized */
int of_check_init(OutputFile *of);
/*
* Initialize muxing state for the given stream, should be called
* after the codec/streamcopy setup has been done.
*
* Open the muxer once all the streams have been initialized.
*/
int of_stream_init(OutputFile *of, OutputStream *ost);
int of_write_trailer(OutputFile *of);
int of_open(const OptionsContext *o, const char *filename);
void of_close(OutputFile **pof);
void of_write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost,
int unqueue);
void of_enc_stats_close(void);
/*
* Send a single packet to the output, applying any bitstream filters
* associated with the output stream. This may result in any number
* of packets actually being written, depending on what bitstream
* filters are applied. The supplied packet is consumed and will be
* blank (as if newly-allocated) when this function returns.
*
* If eof is set, instead indicate EOF to all bitstream filters and
* therefore flush any delayed packets to the output. A blank packet
* must be supplied in this case.
*/
void of_output_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost, int eof);
int64_t of_filesize(OutputFile *of);
int ifile_open(const OptionsContext *o, const char *filename);
void ifile_close(InputFile **f);
/**
* Get next input packet from the demuxer.
*
* @param pkt the packet is written here when this function returns 0
* @return
* - 0 when a packet has been read successfully
* - 1 when stream end was reached, but the stream is looped;
* caller should flush decoders and read from this demuxer again
* - a negative error code on failure
*/
int ifile_get_packet(InputFile *f, AVPacket **pkt);
/* iterate over all input streams in all input files;
* pass NULL to start iteration */
InputStream *ist_iter(InputStream *prev);
extern const char * const opt_name_codec_names[];
extern const char * const opt_name_codec_tags[];
extern const char * const opt_name_frame_rates[];
extern const char * const opt_name_top_field_first[];
void set_report_callback(void (*callback)(int, float, float, int64_t, int, double, double));
void set_report_callback(void (*callback)(int, float, float, int64_t, double, double, double));
void cancel_operation(long id);
#endif /* FFTOOLS_FFMPEG_H */

File diff suppressed because it is too large Load Diff

@ -1,6 +1,7 @@
/*
* ffmpeg filter configuration
* copyright (c) 2018 Taner Sener ( tanersener gmail com )
* Copyright (c) 2018 Taner Sener
* Copyright (c) 2023 ARTHENICA LTD
*
* This file is part of FFmpeg.
*
@ -24,6 +25,12 @@
* We manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop mobile-ffmpeg and later ffmpeg-kit libraries.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
*
* mobile-ffmpeg / ffmpeg-kit changes by Taner Sener
*
* 08.2018
@ -69,8 +76,9 @@ static const enum AVPixelFormat *get_compliance_normal_pix_fmts(const AVCodec *c
}
}
enum AVPixelFormat choose_pixel_fmt(AVStream *st, AVCodecContext *enc_ctx,
const AVCodec *codec, enum AVPixelFormat target)
enum AVPixelFormat
choose_pixel_fmt(const AVCodec *codec, enum AVPixelFormat target,
int strict_std_compliance)
{
if (codec && codec->pix_fmts) {
const enum AVPixelFormat *p = codec->pix_fmts;
@ -79,7 +87,7 @@ enum AVPixelFormat choose_pixel_fmt(AVStream *st, AVCodecContext *enc_ctx,
int has_alpha = desc ? desc->nb_components % 2 == 0 : 0;
enum AVPixelFormat best= AV_PIX_FMT_NONE;
if (enc_ctx->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL) {
if (strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL) {
p = get_compliance_normal_pix_fmts(codec, p);
}
for (; *p != AV_PIX_FMT_NONE; p++) {
@ -106,6 +114,7 @@ enum AVPixelFormat choose_pixel_fmt(AVStream *st, AVCodecContext *enc_ctx,
static const char *choose_pix_fmts(OutputFilter *ofilter, AVBPrint *bprint)
{
OutputStream *ost = ofilter->ost;
AVCodecContext *enc = ost->enc_ctx;
const AVDictionaryEntry *strict_dict = av_dict_get(ost->encoder_opts, "strict", NULL, 0);
if (strict_dict)
// used by choose_pixel_fmt() and below
@ -119,13 +128,14 @@ static const char *choose_pix_fmts(OutputFilter *ofilter, AVBPrint *bprint)
return av_get_pix_fmt_name(ost->enc_ctx->pix_fmt);
}
if (ost->enc_ctx->pix_fmt != AV_PIX_FMT_NONE) {
return av_get_pix_fmt_name(choose_pixel_fmt(ost->st, ost->enc_ctx, ost->enc, ost->enc_ctx->pix_fmt));
} else if (ost->enc && ost->enc->pix_fmts) {
return av_get_pix_fmt_name(choose_pixel_fmt(enc->codec, enc->pix_fmt,
ost->enc_ctx->strict_std_compliance));
} else if (enc->codec->pix_fmts) {
const enum AVPixelFormat *p;
p = ost->enc->pix_fmts;
p = enc->codec->pix_fmts;
if (ost->enc_ctx->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL) {
p = get_compliance_normal_pix_fmts(ost->enc, p);
p = get_compliance_normal_pix_fmts(enc->codec, p);
}
for (; *p != AV_PIX_FMT_NONE; p++) {
@ -133,7 +143,7 @@ static const char *choose_pix_fmts(OutputFilter *ofilter, AVBPrint *bprint)
av_bprintf(bprint, "%s%c", name, p[1] == AV_PIX_FMT_NONE ? '\0' : '|');
}
if (!av_bprint_is_complete(bprint))
exit_program(1);
report_and_exit(AVERROR(ENOMEM));
return bprint->str;
} else
return NULL;
@ -197,7 +207,7 @@ int init_simple_filtergraph(InputStream *ist, OutputStream *ost)
InputFilter *ifilter;
if (!fg)
exit_program(1);
report_and_exit(AVERROR(ENOMEM));
fg->index = nb_filtergraphs;
ofilter = ALLOC_ARRAY_ELEM(fg->outputs, fg->nb_outputs);
@ -214,7 +224,7 @@ int init_simple_filtergraph(InputStream *ist, OutputStream *ost)
ifilter->frame_queue = av_fifo_alloc2(8, sizeof(AVFrame*), AV_FIFO_FLAG_AUTO_GROW);
if (!ifilter->frame_queue)
exit_program(1);
report_and_exit(AVERROR(ENOMEM));
GROW_ARRAY(ist->filters, ist->nb_filters);
ist->filters[ist->nb_filters - 1] = ifilter;
@ -238,7 +248,7 @@ static char *describe_filter_link(FilterGraph *fg, AVFilterInOut *inout, int in)
res = av_asprintf("%s:%s", ctx->filter->name,
avfilter_pad_get_name(pads, inout->pad_idx));
if (!res)
exit_program(1);
report_and_exit(AVERROR(ENOMEM));
return res;
}
@ -285,7 +295,7 @@ static void init_input_filter(FilterGraph *fg, AVFilterInOut *in)
"matches no streams.\n", p, fg->graph_desc);
exit_program(1);
}
ist = input_streams[input_files[file_idx]->ist_index + st->index];
ist = input_files[file_idx]->streams[st->index];
if (ist->user_set_discard == AVDISCARD_ALL) {
av_log(NULL, AV_LOG_FATAL, "Stream specifier '%s' in filtergraph description %s "
"matches a disabled input stream.\n", p, fg->graph_desc);
@ -293,14 +303,13 @@ static void init_input_filter(FilterGraph *fg, AVFilterInOut *in)
}
} else {
/* find the first unused stream of corresponding type */
for (i = 0; i < nb_input_streams; i++) {
ist = input_streams[i];
for (ist = ist_iter(NULL); ist; ist = ist_iter(ist)) {
if (ist->user_set_discard == AVDISCARD_ALL)
continue;
if (ist->dec_ctx->codec_type == type && ist->discard)
break;
}
if (i == nb_input_streams) {
if (!ist) {
av_log(NULL, AV_LOG_FATAL, "Cannot find a matching stream for "
"unlabeled input pad %d on filter %s\n", in->pad_idx,
in->filter_ctx->name);
@ -323,12 +332,162 @@ static void init_input_filter(FilterGraph *fg, AVFilterInOut *in)
ifilter->frame_queue = av_fifo_alloc2(8, sizeof(AVFrame*), AV_FIFO_FLAG_AUTO_GROW);
if (!ifilter->frame_queue)
exit_program(1);
report_and_exit(AVERROR(ENOMEM));
GROW_ARRAY(ist->filters, ist->nb_filters);
ist->filters[ist->nb_filters - 1] = ifilter;
}
static int read_binary(const char *path, uint8_t **data, int *len)
{
AVIOContext *io = NULL;
int64_t fsize;
int ret;
*data = NULL;
*len = 0;
ret = avio_open2(&io, path, AVIO_FLAG_READ, &int_cb, NULL);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open file '%s': %s\n",
path, av_err2str(ret));
return ret;
}
fsize = avio_size(io);
if (fsize < 0 || fsize > INT_MAX) {
av_log(NULL, AV_LOG_ERROR, "Cannot obtain size of file %s\n", path);
ret = AVERROR(EIO);
goto fail;
}
*data = av_malloc(fsize);
if (!*data) {
ret = AVERROR(ENOMEM);
goto fail;
}
ret = avio_read(io, *data, fsize);
if (ret != fsize) {
av_log(NULL, AV_LOG_ERROR, "Error reading file %s\n", path);
ret = ret < 0 ? ret : AVERROR(EIO);
goto fail;
}
*len = fsize;
return 0;
fail:
avio_close(io);
av_freep(data);
*len = 0;
return ret;
}
static int filter_opt_apply(AVFilterContext *f, const char *key, const char *val)
{
const AVOption *o = NULL;
int ret;
ret = av_opt_set(f, key, val, AV_OPT_SEARCH_CHILDREN);
if (ret >= 0)
return 0;
if (ret == AVERROR_OPTION_NOT_FOUND && key[0] == '/')
o = av_opt_find(f, key + 1, NULL, 0, AV_OPT_SEARCH_CHILDREN);
if (!o)
goto err_apply;
// key is a valid option name prefixed with '/'
// interpret value as a path from which to load the actual option value
key++;
if (o->type == AV_OPT_TYPE_BINARY) {
uint8_t *data;
int len;
ret = read_binary(val, &data, &len);
if (ret < 0)
goto err_load;
ret = av_opt_set_bin(f, key, data, len, AV_OPT_SEARCH_CHILDREN);
av_freep(&data);
} else {
char *data = file_read(val);
if (!data) {
ret = AVERROR(EIO);
goto err_load;
}
ret = av_opt_set(f, key, data, AV_OPT_SEARCH_CHILDREN);
av_freep(&data);
}
if (ret < 0)
goto err_apply;
return 0;
err_apply:
av_log(NULL, AV_LOG_ERROR,
"Error applying option '%s' to filter '%s': %s\n",
key, f->filter->name, av_err2str(ret));
return ret;
err_load:
av_log(NULL, AV_LOG_ERROR,
"Error loading value for option '%s' from file '%s'\n",
key, val);
return ret;
}
static int graph_opts_apply(AVFilterGraphSegment *seg)
{
for (size_t i = 0; i < seg->nb_chains; i++) {
AVFilterChain *ch = seg->chains[i];
for (size_t j = 0; j < ch->nb_filters; j++) {
AVFilterParams *p = ch->filters[j];
const AVDictionaryEntry *e = NULL;
av_assert0(p->filter);
while ((e = av_dict_iterate(p->opts, e))) {
int ret = filter_opt_apply(p->filter, e->key, e->value);
if (ret < 0)
return ret;
}
av_dict_free(&p->opts);
}
}
return 0;
}
static int graph_parse(AVFilterGraph *graph, const char *desc,
AVFilterInOut **inputs, AVFilterInOut **outputs)
{
AVFilterGraphSegment *seg;
int ret;
ret = avfilter_graph_segment_parse(graph, desc, 0, &seg);
if (ret < 0)
return ret;
ret = avfilter_graph_segment_create_filters(seg, 0);
if (ret < 0)
goto fail;
ret = graph_opts_apply(seg);
if (ret < 0)
goto fail;
ret = avfilter_graph_segment_apply(seg, 0, inputs, outputs);
fail:
avfilter_graph_segment_free(&seg);
return ret;
}
int init_complex_filtergraph(FilterGraph *fg)
{
AVFilterInOut *inputs, *outputs, *cur;
@ -342,7 +501,7 @@ int init_complex_filtergraph(FilterGraph *fg)
return AVERROR(ENOMEM);
graph->nb_threads = 1;
ret = avfilter_graph_parse2(graph, fg->graph_desc, &inputs, &outputs);
ret = graph_parse(graph, fg->graph_desc, &inputs, &outputs);
if (ret < 0)
goto fail;
@ -467,8 +626,7 @@ static int configure_output_video_filter(FilterGraph *fg, OutputFilter *ofilter,
snprintf(args, sizeof(args), "%d:%d",
ofilter->width, ofilter->height);
while ((e = av_dict_get(ost->sws_dict, "", e,
AV_DICT_IGNORE_SUFFIX))) {
while ((e = av_dict_iterate(ost->sws_dict, e))) {
av_strlcatf(args, sizeof(args), ":%s=%s", e->key, e->value);
}
@ -575,6 +733,7 @@ static int configure_output_audio_filter(FilterGraph *fg, OutputFilter *ofilter,
pad_idx = 0; \
} while (0)
av_bprint_init(&args, 0, AV_BPRINT_SIZE_UNLIMITED);
#if FFMPEG_OPT_MAP_CHANNEL
if (ost->audio_channels_mapped) {
AVChannelLayout mapped_layout = { 0 };
int i;
@ -587,6 +746,7 @@ static int configure_output_audio_filter(FilterGraph *fg, OutputFilter *ofilter,
AUTO_INSERT_FILTER("-map_channel", "pan", args.str);
av_bprint_clear(&args);
}
#endif
if (codec->ch_layout.order == AV_CHANNEL_ORDER_UNSPEC)
av_channel_layout_default(&codec->ch_layout, codec->ch_layout.nb_channels);
@ -620,11 +780,11 @@ static int configure_output_audio_filter(FilterGraph *fg, OutputFilter *ofilter,
if (ost->apad && of->shortest) {
int i;
for (i=0; i<of->ctx->nb_streams; i++)
if (of->ctx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)
for (i = 0; i < of->nb_streams; i++)
if (of->streams[i]->st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)
break;
if (i<of->ctx->nb_streams) {
if (i < of->nb_streams) {
AUTO_INSERT_FILTER("-apad", "apad", ost->apad);
}
}
@ -751,7 +911,7 @@ static int configure_input_video_filter(FilterGraph *fg, InputFilter *ifilter,
}
if (!fr.num)
fr = av_guess_frame_rate(input_files[ist->file_index]->ctx, ist->st, NULL);
fr = ist->framerate_guessed;
if (ist->dec_ctx->codec_type == AVMEDIA_TYPE_SUBTITLE) {
ret = sub2video_prepare(ist, ifilter);
@ -904,40 +1064,6 @@ static int configure_input_audio_filter(FilterGraph *fg, InputFilter *ifilter,
last_filter = filt_ctx; \
} while (0)
if (audio_sync_method > 0) {
char args[256] = {0};
av_strlcatf(args, sizeof(args), "async=%d", audio_sync_method);
if (audio_drift_threshold != 0.1)
av_strlcatf(args, sizeof(args), ":min_hard_comp=%f", audio_drift_threshold);
if (!fg->reconfiguration)
av_strlcatf(args, sizeof(args), ":first_pts=0");
AUTO_INSERT_FILTER_INPUT("-async", "aresample", args);
}
// if (ost->audio_channels_mapped) {
// int i;
// AVBPrint pan_buf;
// av_bprint_init(&pan_buf, 256, 8192);
// av_bprintf(&pan_buf, "0x%"PRIx64,
// av_get_default_channel_layout(ost->audio_channels_mapped));
// for (i = 0; i < ost->audio_channels_mapped; i++)
// if (ost->audio_channels_map[i] != -1)
// av_bprintf(&pan_buf, ":c%d=c%d", i, ost->audio_channels_map[i]);
// AUTO_INSERT_FILTER_INPUT("-map_channel", "pan", pan_buf.str);
// av_bprint_finalize(&pan_buf, NULL);
// }
if (audio_volume != 256) {
char args[256];
av_log(NULL, AV_LOG_WARNING, "-vol has been deprecated. Use the volume "
"audio filter instead.\n");
snprintf(args, sizeof(args), "%f", audio_volume / 256.);
AUTO_INSERT_FILTER_INPUT("-vol", "volume", args);
}
snprintf(name, sizeof(name), "trim for input stream %d:%d",
ist->file_index, ist->st->index);
if (copy_ts) {
@ -1020,44 +1146,39 @@ int configure_filtergraph(FilterGraph *fg)
if (simple) {
OutputStream *ost = fg->outputs[0]->ost;
char args[512];
const AVDictionaryEntry *e = NULL;
if (filter_nbthreads) {
ret = av_opt_set(fg->graph, "threads", filter_nbthreads, 0);
if (ret < 0)
goto fail;
} else {
const AVDictionaryEntry *e = NULL;
e = av_dict_get(ost->encoder_opts, "threads", NULL, 0);
if (e)
av_opt_set(fg->graph, "threads", e->value, 0);
}
args[0] = 0;
e = NULL;
while ((e = av_dict_get(ost->sws_dict, "", e,
AV_DICT_IGNORE_SUFFIX))) {
av_strlcatf(args, sizeof(args), "%s=%s:", e->key, e->value);
}
if (strlen(args)) {
args[strlen(args)-1] = 0;
fg->graph->scale_sws_opts = av_strdup(args);
if (av_dict_count(ost->sws_dict)) {
ret = av_dict_get_string(ost->sws_dict,
&fg->graph->scale_sws_opts,
'=', ':');
if (ret < 0)
goto fail;
}
args[0] = 0;
e = NULL;
while ((e = av_dict_get(ost->swr_opts, "", e,
AV_DICT_IGNORE_SUFFIX))) {
av_strlcatf(args, sizeof(args), "%s=%s:", e->key, e->value);
if (av_dict_count(ost->swr_opts)) {
char *args;
ret = av_dict_get_string(ost->swr_opts, &args, '=', ':');
if (ret < 0)
goto fail;
av_opt_set(fg->graph, "aresample_swr_opts", args, 0);
av_free(args);
}
if (strlen(args))
args[strlen(args)-1] = 0;
av_opt_set(fg->graph, "aresample_swr_opts", args, 0);
} else {
fg->graph->nb_threads = filter_complex_nbthreads;
}
if ((ret = avfilter_graph_parse2(fg->graph, graph_desc, &inputs, &outputs)) < 0)
if ((ret = graph_parse(fg->graph, graph_desc, &inputs, &outputs)) < 0)
goto fail;
ret = hw_device_setup_for_filter(fg);
@ -1131,16 +1252,8 @@ int configure_filtergraph(FilterGraph *fg)
for (i = 0; i < fg->nb_outputs; i++) {
OutputStream *ost = fg->outputs[i]->ost;
if (!ost->enc) {
/* identical to the same check in ffmpeg.c, needed because
complex filter graphs are initialized earlier */
av_log(NULL, AV_LOG_ERROR, "Encoder (codec %s) not found for output stream #%d:%d\n",
avcodec_get_name(ost->st->codecpar->codec_id), ost->file_index, ost->index);
ret = AVERROR(EINVAL);
goto fail;
}
if (ost->enc->type == AVMEDIA_TYPE_AUDIO &&
!(ost->enc->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE))
if (ost->enc_ctx->codec_type == AVMEDIA_TYPE_AUDIO &&
!(ost->enc_ctx->codec->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE))
av_buffersink_set_frame_size(ost->filter->filter,
ost->enc_ctx->frame_size);
}

@ -1,5 +1,6 @@
/*
* copyright (c) 2018 Taner Sener ( tanersener gmail com )
* Copyright (c) 2018-2019 Taner Sener
* Copyright (c) 2023 ARTHENICA LTD
*
* This file is part of FFmpeg.
*
@ -23,6 +24,12 @@
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop mobile-ffmpeg and later ffmpeg-kit libraries.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
*
* mobile-ffmpeg / ffmpeg-kit changes by Taner Sener
*
* 12.2019
@ -357,7 +364,7 @@ int hw_device_setup_for_decode(InputStream *ist)
if (ist->hwaccel_id == HWACCEL_AUTO) {
ist->hwaccel_device_type = dev->type;
} else if (ist->hwaccel_device_type != dev->type) {
av_log(ist->dec_ctx, AV_LOG_ERROR, "Invalid hwaccel device "
av_log(NULL, AV_LOG_ERROR, "Invalid hwaccel device "
"specified for decoder: device %s of type %s is not "
"usable with hwaccel %s.\n", dev->name,
av_hwdevice_get_type_name(dev->type),
@ -408,7 +415,7 @@ int hw_device_setup_for_decode(InputStream *ist)
type = config->device_type;
dev = hw_device_get_by_type(type);
if (dev) {
av_log(ist->dec_ctx, AV_LOG_INFO, "Using auto "
av_log(NULL, AV_LOG_INFO, "Using auto "
"hwaccel type %s with existing device %s.\n",
av_hwdevice_get_type_name(type), dev->name);
}
@ -426,12 +433,12 @@ int hw_device_setup_for_decode(InputStream *ist)
continue;
}
if (ist->hwaccel_device) {
av_log(ist->dec_ctx, AV_LOG_INFO, "Using auto "
av_log(NULL, AV_LOG_INFO, "Using auto "
"hwaccel type %s with new device created "
"from %s.\n", av_hwdevice_get_type_name(type),
ist->hwaccel_device);
} else {
av_log(ist->dec_ctx, AV_LOG_INFO, "Using auto "
av_log(NULL, AV_LOG_INFO, "Using auto "
"hwaccel type %s with new default device.\n",
av_hwdevice_get_type_name(type));
}
@ -439,7 +446,7 @@ int hw_device_setup_for_decode(InputStream *ist)
if (dev) {
ist->hwaccel_device_type = type;
} else {
av_log(ist->dec_ctx, AV_LOG_INFO, "Auto hwaccel "
av_log(NULL, AV_LOG_INFO, "Auto hwaccel "
"disabled: no device found.\n");
ist->hwaccel_id = HWACCEL_NONE;
return 0;
@ -447,7 +454,7 @@ int hw_device_setup_for_decode(InputStream *ist)
}
if (!dev) {
av_log(ist->dec_ctx, AV_LOG_ERROR, "No device available "
av_log(NULL, AV_LOG_ERROR, "No device available "
"for decoder: device type %s needed for codec %s.\n",
av_hwdevice_get_type_name(type), ist->dec->name);
return err;
@ -479,7 +486,7 @@ int hw_device_setup_for_encode(OutputStream *ost)
}
for (i = 0;; i++) {
config = avcodec_get_hw_config(ost->enc, i);
config = avcodec_get_hw_config(ost->enc_ctx->codec, i);
if (!config)
break;
@ -490,7 +497,7 @@ int hw_device_setup_for_encode(OutputStream *ost)
av_log(ost->enc_ctx, AV_LOG_VERBOSE, "Using input "
"frames context (format %s) with %s encoder.\n",
av_get_pix_fmt_name(ost->enc_ctx->pix_fmt),
ost->enc->name);
ost->enc_ctx->codec->name);
ost->enc_ctx->hw_frames_ctx = av_buffer_ref(frames_ref);
if (!ost->enc_ctx->hw_frames_ctx)
return AVERROR(ENOMEM);
@ -505,7 +512,7 @@ int hw_device_setup_for_encode(OutputStream *ost)
if (dev) {
av_log(ost->enc_ctx, AV_LOG_VERBOSE, "Using device %s "
"(type %s) with %s encoder.\n", dev->name,
av_hwdevice_get_type_name(dev->type), ost->enc->name);
av_hwdevice_get_type_name(dev->type), ost->enc_ctx->codec->name);
ost->enc_ctx->hw_device_ctx = av_buffer_ref(dev->device_ref);
if (!ost->enc_ctx->hw_device_ctx)
return AVERROR(ENOMEM);

@ -1,6 +1,7 @@
/*
* This file is part of FFmpeg.
* copyright (c) 2022 Taner Sener ( tanersener gmail com )
* Copyright (c) 2022 Taner Sener
* Copyright (c) 2023 ARTHENICA LTD
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -22,6 +23,15 @@
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop the ffmpeg-kit library.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
* - fftools header names updated
* - want_sdp marked as thread-local
* - ms_from_ost migrated from ffmpeg_mux.c and marked as non-static
*
* ffmpeg-kit changes by Taner Sener
*
* 09.2022
@ -31,100 +41,83 @@
* - printf replaced with av_log statements
*/
#include <stdatomic.h>
#include <stdio.h>
#include <string.h>
#include "fftools_ffmpeg.h"
#include "fftools_ffmpeg_mux.h"
#include "fftools_objpool.h"
#include "fftools_sync_queue.h"
#include "fftools_thread_queue.h"
#include "libavutil/fifo.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/log.h"
#include "libavutil/mem.h"
#include "libavutil/timestamp.h"
#include "libavutil/thread.h"
#include "libavcodec/packet.h"
#include "libavformat/avformat.h"
#include "libavformat/avio.h"
static void close_all_output_streams(OutputStream *ost, OSTFinished this_stream, OSTFinished others)
__thread int want_sdp = 1;
MuxStream *ms_from_ost(OutputStream *ost)
{
int i;
for (i = 0; i < nb_output_streams; i++) {
OutputStream *ost2 = output_streams[i];
ost2->finished |= ost == ost2 ? this_stream : others;
return (MuxStream*)ost;
}
static Muxer *mux_from_of(OutputFile *of)
{
return (Muxer*)of;
}
static int64_t filesize(AVIOContext *pb)
{
int64_t ret = -1;
if (pb) {
ret = avio_size(pb);
if (ret <= 0) // FIXME improve avio_size() so it works with non seekable output too
ret = avio_tell(pb);
}
return ret;
}
void of_write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost,
int unqueue)
static int write_packet(Muxer *mux, OutputStream *ost, AVPacket *pkt)
{
AVFormatContext *s = of->ctx;
MuxStream *ms = ms_from_ost(ost);
AVFormatContext *s = mux->fc;
AVStream *st = ost->st;
int64_t fs;
uint64_t frame_num;
int ret;
/*
* Audio encoders may split the packets -- #frames in != #packets out.
* But there is no reordering, so we can limit the number of output packets
* by simply dropping them here.
* Counting encoded video frames needs to be done separately because of
* reordering, see do_video_out().
* Do not count the packet when unqueued because it has been counted when queued.
*/
if (!(st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && ost->encoding_needed) && !unqueue) {
if (ost->frame_number >= ost->max_frames) {
av_packet_unref(pkt);
return;
}
ost->frame_number++;
}
if (!of->header_written) {
AVPacket *tmp_pkt;
/* the muxer is not initialized yet, buffer the packet */
if (!av_fifo_can_write(ost->muxing_queue)) {
size_t cur_size = av_fifo_can_read(ost->muxing_queue);
unsigned int are_we_over_size =
(ost->muxing_queue_data_size + pkt->size) > ost->muxing_queue_data_threshold;
size_t limit = are_we_over_size ? ost->max_muxing_queue_size : SIZE_MAX;
size_t new_size = FFMIN(2 * cur_size, limit);
if (new_size <= cur_size) {
av_log(NULL, AV_LOG_ERROR,
"Too many packets buffered for output stream %d:%d.\n",
ost->file_index, ost->st->index);
exit_program(1);
}
ret = av_fifo_grow2(ost->muxing_queue, new_size - cur_size);
if (ret < 0)
exit_program(1);
}
ret = av_packet_make_refcounted(pkt);
if (ret < 0)
exit_program(1);
tmp_pkt = av_packet_alloc();
if (!tmp_pkt)
exit_program(1);
av_packet_move_ref(tmp_pkt, pkt);
ost->muxing_queue_data_size += tmp_pkt->size;
av_fifo_write(ost->muxing_queue, &tmp_pkt, 1);
return;
fs = filesize(s->pb);
atomic_store(&mux->last_filesize, fs);
if (fs >= mux->limit_filesize) {
ret = AVERROR_EOF;
goto fail;
}
if ((st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && ost->vsync_method == VSYNC_DROP) ||
(st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && audio_sync_method < 0))
if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && ost->vsync_method == VSYNC_DROP)
pkt->pts = pkt->dts = AV_NOPTS_VALUE;
if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
if (ost->frame_rate.num && ost->is_cfr) {
if (pkt->duration > 0)
av_log(NULL, AV_LOG_WARNING, "Overriding packet duration by frame rate, this should not happen\n");
av_log(ost, AV_LOG_WARNING, "Overriding packet duration by frame rate, this should not happen\n");
pkt->duration = av_rescale_q(1, av_inv_q(ost->frame_rate),
ost->mux_timebase);
pkt->time_base);
}
}
av_packet_rescale_ts(pkt, ost->mux_timebase, ost->st->time_base);
av_packet_rescale_ts(pkt, pkt->time_base, ost->st->time_base);
pkt->time_base = ost->st->time_base;
if (!(s->oformat->flags & AVFMT_NOTIMESTAMPS)) {
if (pkt->dts != AV_NOPTS_VALUE &&
@ -134,25 +127,26 @@ void of_write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost,
pkt->dts, pkt->pts,
ost->file_index, ost->st->index);
pkt->pts =
pkt->dts = pkt->pts + pkt->dts + ost->last_mux_dts + 1
- FFMIN3(pkt->pts, pkt->dts, ost->last_mux_dts + 1)
- FFMAX3(pkt->pts, pkt->dts, ost->last_mux_dts + 1);
pkt->dts = pkt->pts + pkt->dts + ms->last_mux_dts + 1
- FFMIN3(pkt->pts, pkt->dts, ms->last_mux_dts + 1)
- FFMAX3(pkt->pts, pkt->dts, ms->last_mux_dts + 1);
}
if ((st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO || st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO || st->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE) &&
pkt->dts != AV_NOPTS_VALUE &&
ost->last_mux_dts != AV_NOPTS_VALUE) {
int64_t max = ost->last_mux_dts + !(s->oformat->flags & AVFMT_TS_NONSTRICT);
ms->last_mux_dts != AV_NOPTS_VALUE) {
int64_t max = ms->last_mux_dts + !(s->oformat->flags & AVFMT_TS_NONSTRICT);
if (pkt->dts < max) {
int loglevel = max - pkt->dts > 2 || st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO ? AV_LOG_WARNING : AV_LOG_DEBUG;
if (exit_on_error)
loglevel = AV_LOG_ERROR;
av_log(s, loglevel, "Non-monotonous DTS in output stream "
"%d:%d; previous: %"PRId64", current: %"PRId64"; ",
ost->file_index, ost->st->index, ost->last_mux_dts, pkt->dts);
ost->file_index, ost->st->index, ms->last_mux_dts, pkt->dts);
if (exit_on_error) {
av_log(NULL, AV_LOG_FATAL, "aborting.\n");
exit_program(1);
ret = AVERROR(EINVAL);
goto fail;
}
av_log(s, loglevel, "changing to %"PRId64". This may result "
"in incorrect timestamps in the output file.\n",
max);
@ -162,17 +156,17 @@ void of_write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost,
}
}
}
ost->last_mux_dts = pkt->dts;
ms->last_mux_dts = pkt->dts;
ost->data_size += pkt->size;
ost->packets_written++;
ost->data_size_mux += pkt->size;
frame_num = atomic_fetch_add(&ost->packets_written, 1);
pkt->stream_index = ost->index;
if (debug_ts) {
av_log(NULL, AV_LOG_INFO, "muxer <- type:%s "
av_log(ost, AV_LOG_INFO, "muxer <- type:%s "
"pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s duration:%s duration_time:%s size:%d\n",
av_get_media_type_string(ost->enc_ctx->codec_type),
av_get_media_type_string(st->codecpar->codec_type),
av_ts2str(pkt->pts), av_ts2timestr(pkt->pts, &ost->st->time_base),
av_ts2str(pkt->dts), av_ts2timestr(pkt->dts, &ost->st->time_base),
av_ts2str(pkt->duration), av_ts2timestr(pkt->duration, &ost->st->time_base),
@ -180,12 +174,307 @@ void of_write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost,
);
}
if (ms->stats.io)
enc_stats_write(ost, &ms->stats, NULL, pkt, frame_num);
ret = av_interleaved_write_frame(s, pkt);
if (ret < 0) {
print_error("av_interleaved_write_frame()", ret);
main_ffmpeg_return_code = 1;
close_all_output_streams(ost, MUXER_FINISHED | ENCODER_FINISHED, ENCODER_FINISHED);
goto fail;
}
return 0;
fail:
av_packet_unref(pkt);
return ret;
}
static int sync_queue_process(Muxer *mux, OutputStream *ost, AVPacket *pkt, int *stream_eof)
{
OutputFile *of = &mux->of;
if (ost->sq_idx_mux >= 0) {
int ret = sq_send(mux->sq_mux, ost->sq_idx_mux, SQPKT(pkt));
if (ret < 0) {
if (ret == AVERROR_EOF)
*stream_eof = 1;
return ret;
}
while (1) {
ret = sq_receive(mux->sq_mux, -1, SQPKT(mux->sq_pkt));
if (ret < 0)
return (ret == AVERROR_EOF || ret == AVERROR(EAGAIN)) ? 0 : ret;
ret = write_packet(mux, of->streams[ret],
mux->sq_pkt);
if (ret < 0)
return ret;
}
} else if (pkt)
return write_packet(mux, ost, pkt);
return 0;
}
static void thread_set_name(OutputFile *of)
{
char name[16];
snprintf(name, sizeof(name), "mux%d:%s", of->index, of->format->name);
ff_thread_setname(name);
}
static void *muxer_thread(void *arg)
{
Muxer *mux = arg;
OutputFile *of = &mux->of;
AVPacket *pkt = NULL;
int ret = 0;
pkt = av_packet_alloc();
if (!pkt) {
ret = AVERROR(ENOMEM);
goto finish;
}
thread_set_name(of);
while (1) {
OutputStream *ost;
int stream_idx, stream_eof = 0;
ret = tq_receive(mux->tq, &stream_idx, pkt);
if (stream_idx < 0) {
av_log(mux, AV_LOG_VERBOSE, "All streams finished\n");
ret = 0;
break;
}
ost = of->streams[stream_idx];
ret = sync_queue_process(mux, ost, ret < 0 ? NULL : pkt, &stream_eof);
av_packet_unref(pkt);
if (ret == AVERROR_EOF && stream_eof)
tq_receive_finish(mux->tq, stream_idx);
else if (ret < 0) {
av_log(mux, AV_LOG_ERROR, "Error muxing a packet\n");
break;
}
}
finish:
av_packet_free(&pkt);
for (unsigned int i = 0; i < mux->fc->nb_streams; i++)
tq_receive_finish(mux->tq, i);
av_log(mux, AV_LOG_VERBOSE, "Terminating muxer thread\n");
return (void*)(intptr_t)ret;
}
static int thread_submit_packet(Muxer *mux, OutputStream *ost, AVPacket *pkt)
{
int ret = 0;
if (!pkt || ost->finished & MUXER_FINISHED)
goto finish;
ret = tq_send(mux->tq, ost->index, pkt);
if (ret < 0)
goto finish;
return 0;
finish:
if (pkt)
av_packet_unref(pkt);
ost->finished |= MUXER_FINISHED;
tq_send_finish(mux->tq, ost->index);
return ret == AVERROR_EOF ? 0 : ret;
}
static int queue_packet(Muxer *mux, OutputStream *ost, AVPacket *pkt)
{
MuxStream *ms = ms_from_ost(ost);
AVPacket *tmp_pkt = NULL;
int ret;
if (!av_fifo_can_write(ms->muxing_queue)) {
size_t cur_size = av_fifo_can_read(ms->muxing_queue);
size_t pkt_size = pkt ? pkt->size : 0;
unsigned int are_we_over_size =
(ms->muxing_queue_data_size + pkt_size) > ms->muxing_queue_data_threshold;
size_t limit = are_we_over_size ? ms->max_muxing_queue_size : SIZE_MAX;
size_t new_size = FFMIN(2 * cur_size, limit);
if (new_size <= cur_size) {
av_log(ost, AV_LOG_ERROR,
"Too many packets buffered for output stream %d:%d.\n",
ost->file_index, ost->st->index);
return AVERROR(ENOSPC);
}
ret = av_fifo_grow2(ms->muxing_queue, new_size - cur_size);
if (ret < 0)
return ret;
}
if (pkt) {
ret = av_packet_make_refcounted(pkt);
if (ret < 0)
return ret;
tmp_pkt = av_packet_alloc();
if (!tmp_pkt)
return AVERROR(ENOMEM);
av_packet_move_ref(tmp_pkt, pkt);
ms->muxing_queue_data_size += tmp_pkt->size;
}
av_fifo_write(ms->muxing_queue, &tmp_pkt, 1);
return 0;
}
static int submit_packet(Muxer *mux, AVPacket *pkt, OutputStream *ost)
{
int ret;
if (mux->tq) {
return thread_submit_packet(mux, ost, pkt);
} else {
/* the muxer is not initialized yet, buffer the packet */
ret = queue_packet(mux, ost, pkt);
if (ret < 0) {
if (pkt)
av_packet_unref(pkt);
return ret;
}
}
return 0;
}
void of_output_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost, int eof)
{
Muxer *mux = mux_from_of(of);
MuxStream *ms = ms_from_ost(ost);
const char *err_msg;
int ret = 0;
if (!eof && pkt->dts != AV_NOPTS_VALUE)
ost->last_mux_dts = av_rescale_q(pkt->dts, pkt->time_base, AV_TIME_BASE_Q);
/* apply the output bitstream filters */
if (ms->bsf_ctx) {
int bsf_eof = 0;
ret = av_bsf_send_packet(ms->bsf_ctx, eof ? NULL : pkt);
if (ret < 0) {
err_msg = "submitting a packet for bitstream filtering";
goto fail;
}
while (!bsf_eof) {
ret = av_bsf_receive_packet(ms->bsf_ctx, pkt);
if (ret == AVERROR(EAGAIN))
return;
else if (ret == AVERROR_EOF)
bsf_eof = 1;
else if (ret < 0) {
err_msg = "applying bitstream filters to a packet";
goto fail;
}
ret = submit_packet(mux, bsf_eof ? NULL : pkt, ost);
if (ret < 0)
goto mux_fail;
}
} else {
ret = submit_packet(mux, eof ? NULL : pkt, ost);
if (ret < 0)
goto mux_fail;
}
return;
mux_fail:
err_msg = "submitting a packet to the muxer";
fail:
av_log(ost, AV_LOG_ERROR, "Error %s\n", err_msg);
if (exit_on_error)
exit_program(1);
}
static int thread_stop(Muxer *mux)
{
void *ret;
if (!mux || !mux->tq)
return 0;
for (unsigned int i = 0; i < mux->fc->nb_streams; i++)
tq_send_finish(mux->tq, i);
pthread_join(mux->thread, &ret);
tq_free(&mux->tq);
return (int)(intptr_t)ret;
}
static void pkt_move(void *dst, void *src)
{
av_packet_move_ref(dst, src);
}
static int thread_start(Muxer *mux)
{
AVFormatContext *fc = mux->fc;
ObjPool *op;
int ret;
op = objpool_alloc_packets();
if (!op)
return AVERROR(ENOMEM);
mux->tq = tq_alloc(fc->nb_streams, mux->thread_queue_size, op, pkt_move);
if (!mux->tq) {
objpool_free(&op);
return AVERROR(ENOMEM);
}
ret = pthread_create(&mux->thread, NULL, muxer_thread, (void*)mux);
if (ret) {
tq_free(&mux->tq);
return AVERROR(ret);
}
/* flush the muxing queues */
for (int i = 0; i < fc->nb_streams; i++) {
OutputStream *ost = mux->of.streams[i];
MuxStream *ms = ms_from_ost(ost);
AVPacket *pkt;
/* try to improve muxing time_base (only possible if nothing has been written yet) */
if (!av_fifo_can_read(ms->muxing_queue))
ost->mux_timebase = ost->st->time_base;
while (av_fifo_read(ms->muxing_queue, &pkt, 1) >= 0) {
ret = thread_submit_packet(mux, ost, pkt);
if (pkt) {
ms->muxing_queue_data_size -= pkt->size;
av_packet_free(&pkt);
}
if (ret < 0)
return ret;
}
}
return 0;
}
static int print_sdp(void)
@ -197,16 +486,16 @@ static int print_sdp(void)
AVFormatContext **avc;
for (i = 0; i < nb_output_files; i++) {
if (!output_files[i]->header_written)
if (!mux_from_of(output_files[i])->header_written)
return 0;
}
avc = av_malloc_array(nb_output_files, sizeof(*avc));
if (!avc)
exit_program(1);
return AVERROR(ENOMEM);
for (i = 0, j = 0; i < nb_output_files; i++) {
if (!strcmp(output_files[i]->ctx->oformat->name, "rtp")) {
avc[j] = output_files[i]->ctx;
if (!strcmp(output_files[i]->format->name, "rtp")) {
avc[j] = mux_from_of(output_files[i])->fc;
j++;
}
}
@ -236,34 +525,36 @@ static int print_sdp(void)
av_freep(&sdp_filename);
}
// SDP successfully written, allow muxer threads to start
ret = 1;
fail:
av_freep(&avc);
return ret;
}
/* open the muxer when all the streams are initialized */
int of_check_init(OutputFile *of)
int mux_check_init(Muxer *mux)
{
OutputFile *of = &mux->of;
AVFormatContext *fc = mux->fc;
int ret, i;
for (i = 0; i < of->ctx->nb_streams; i++) {
OutputStream *ost = output_streams[of->ost_index + i];
for (i = 0; i < fc->nb_streams; i++) {
OutputStream *ost = of->streams[i];
if (!ost->initialized)
return 0;
}
ret = avformat_write_header(of->ctx, &of->opts);
ret = avformat_write_header(fc, &mux->opts);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR,
"Could not write header for output file #%d "
"(incorrect codec parameters ?): %s\n",
of->index, av_err2str(ret));
av_log(mux, AV_LOG_ERROR, "Could not write header (incorrect codec "
"parameters ?): %s\n", av_err2str(ret));
return ret;
}
//assert_avoptions(of->opts);
of->header_written = 1;
mux->header_written = 1;
av_dump_format(of->ctx, of->index, of->ctx->url, 1);
av_dump_format(fc, of->index, fc->url, 1);
nb_output_dumped++;
if (sdp_filename || want_sdp) {
@ -271,62 +562,220 @@ int of_check_init(OutputFile *of)
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Error writing the SDP.\n");
return ret;
} else if (ret == 1) {
/* SDP is written only after all the muxers are ready, so now we
* start ALL the threads */
for (i = 0; i < nb_output_files; i++) {
ret = thread_start(mux_from_of(output_files[i]));
if (ret < 0)
return ret;
}
}
} else {
ret = thread_start(mux_from_of(of));
if (ret < 0)
return ret;
}
/* flush the muxing queues */
for (i = 0; i < of->ctx->nb_streams; i++) {
OutputStream *ost = output_streams[of->ost_index + i];
AVPacket *pkt;
return 0;
}
/* try to improve muxing time_base (only possible if nothing has been written yet) */
if (!av_fifo_can_read(ost->muxing_queue))
ost->mux_timebase = ost->st->time_base;
static int bsf_init(MuxStream *ms)
{
OutputStream *ost = &ms->ost;
AVBSFContext *ctx = ms->bsf_ctx;
int ret;
while (av_fifo_read(ost->muxing_queue, &pkt, 1) >= 0) {
ost->muxing_queue_data_size -= pkt->size;
of_write_packet(of, pkt, ost, 1);
av_packet_free(&pkt);
}
if (!ctx)
return 0;
ret = avcodec_parameters_copy(ctx->par_in, ost->st->codecpar);
if (ret < 0)
return ret;
ctx->time_base_in = ost->st->time_base;
ret = av_bsf_init(ctx);
if (ret < 0) {
av_log(ms, AV_LOG_ERROR, "Error initializing bitstream filter: %s\n",
ctx->filter->name);
return ret;
}
ret = avcodec_parameters_copy(ost->st->codecpar, ctx->par_out);
if (ret < 0)
return ret;
ost->st->time_base = ctx->time_base_out;
return 0;
}
int of_stream_init(OutputFile *of, OutputStream *ost)
{
Muxer *mux = mux_from_of(of);
MuxStream *ms = ms_from_ost(ost);
int ret;
if (ost->sq_idx_mux >= 0)
sq_set_tb(mux->sq_mux, ost->sq_idx_mux, ost->mux_timebase);
/* initialize bitstream filters for the output stream
* needs to be done here, because the codec id for streamcopy is not
* known until now */
ret = bsf_init(ms);
if (ret < 0)
return ret;
ost->initialized = 1;
return mux_check_init(mux);
}
int of_write_trailer(OutputFile *of)
{
Muxer *mux = mux_from_of(of);
AVFormatContext *fc = mux->fc;
int ret;
if (!of->header_written) {
av_log(NULL, AV_LOG_ERROR,
"Nothing was written into output file %d (%s), because "
"at least one of its streams received no packets.\n",
of->index, of->ctx->url);
if (!mux->tq) {
av_log(mux, AV_LOG_ERROR,
"Nothing was written into output file, because "
"at least one of its streams received no packets.\n");
return AVERROR(EINVAL);
}
ret = av_write_trailer(of->ctx);
ret = thread_stop(mux);
if (ret < 0)
main_ffmpeg_return_code = ret;
ret = av_write_trailer(fc);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Error writing trailer of %s: %s\n", of->ctx->url, av_err2str(ret));
av_log(mux, AV_LOG_ERROR, "Error writing trailer: %s\n", av_err2str(ret));
return ret;
}
mux->last_filesize = filesize(fc->pb);
if (!(of->format->flags & AVFMT_NOFILE)) {
ret = avio_closep(&fc->pb);
if (ret < 0) {
av_log(mux, AV_LOG_ERROR, "Error closing file: %s\n", av_err2str(ret));
return ret;
}
}
return 0;
}
static void ost_free(OutputStream **post)
{
OutputStream *ost = *post;
MuxStream *ms;
if (!ost)
return;
ms = ms_from_ost(ost);
if (ost->logfile) {
if (fclose(ost->logfile))
av_log(ms, AV_LOG_ERROR,
"Error closing logfile, loss of information possible: %s\n",
av_err2str(AVERROR(errno)));
ost->logfile = NULL;
}
if (ms->muxing_queue) {
AVPacket *pkt;
while (av_fifo_read(ms->muxing_queue, &pkt, 1) >= 0)
av_packet_free(&pkt);
av_fifo_freep2(&ms->muxing_queue);
}
av_bsf_free(&ms->bsf_ctx);
av_frame_free(&ost->filtered_frame);
av_frame_free(&ost->sq_frame);
av_frame_free(&ost->last_frame);
av_packet_free(&ost->pkt);
av_dict_free(&ost->encoder_opts);
av_freep(&ost->kf.pts);
av_expr_free(ost->kf.pexpr);
av_freep(&ost->avfilter);
av_freep(&ost->logfile_prefix);
av_freep(&ost->apad);
#if FFMPEG_OPT_MAP_CHANNEL
av_freep(&ost->audio_channels_map);
ost->audio_channels_mapped = 0;
#endif
av_dict_free(&ost->sws_dict);
av_dict_free(&ost->swr_opts);
if (ost->enc_ctx)
av_freep(&ost->enc_ctx->stats_in);
avcodec_free_context(&ost->enc_ctx);
for (int i = 0; i < ost->enc_stats_pre.nb_components; i++)
av_freep(&ost->enc_stats_pre.components[i].str);
av_freep(&ost->enc_stats_pre.components);
for (int i = 0; i < ost->enc_stats_post.nb_components; i++)
av_freep(&ost->enc_stats_post.components[i].str);
av_freep(&ost->enc_stats_post.components);
for (int i = 0; i < ms->stats.nb_components; i++)
av_freep(&ms->stats.components[i].str);
av_freep(&ms->stats.components);
av_freep(post);
}
static void fc_close(AVFormatContext **pfc)
{
AVFormatContext *fc = *pfc;
if (!fc)
return;
if (!(fc->oformat->flags & AVFMT_NOFILE))
avio_closep(&fc->pb);
avformat_free_context(fc);
*pfc = NULL;
}
void of_close(OutputFile **pof)
{
OutputFile *of = *pof;
AVFormatContext *s;
Muxer *mux;
if (!of)
return;
mux = mux_from_of(of);
thread_stop(mux);
s = of->ctx;
if (s && s->oformat && !(s->oformat->flags & AVFMT_NOFILE))
avio_closep(&s->pb);
avformat_free_context(s);
av_dict_free(&of->opts);
sq_free(&of->sq_encode);
sq_free(&mux->sq_mux);
for (int i = 0; i < of->nb_streams; i++)
ost_free(&of->streams[i]);
av_freep(&of->streams);
av_dict_free(&mux->opts);
av_packet_free(&mux->sq_pkt);
fc_close(&mux->fc);
av_freep(pof);
}
int64_t of_filesize(OutputFile *of)
{
Muxer *mux = mux_from_of(of);
return atomic_load(&mux->last_filesize);
}

@ -0,0 +1,165 @@
/*
* Muxer internal APIs - should not be included outside of ffmpeg_mux*
* Copyright (c) 2023 ARTHENICA LTD
*
* This file is part of FFmpeg.
*
* FFmpeg 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 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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 FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
* This file is the modified version of ffmpeg_mux.h file living in ffmpeg source code under the fftools folder. We
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop ffmpeg-kit library.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
* - fftools header names updated
* - want_sdp made thread-local
* - EncStatsFile declaration migrated from ffmpeg_mux_init.c
* - WARN_MULTIPLE_OPT_USAGE, MATCH_PER_STREAM_OPT, MATCH_PER_TYPE_OPT, SPECIFIER_OPT_FMT declarations migrated from
* ffmpeg.h
* - ms_from_ost migrated to ffmpeg_mux.c
*/
#ifndef FFTOOLS_FFMPEG_MUX_H
#define FFTOOLS_FFMPEG_MUX_H
#include <stdatomic.h>
#include <stdint.h>
#include "fftools_thread_queue.h"
#include "libavformat/avformat.h"
#include "libavcodec/packet.h"
#include "libavutil/dict.h"
#include "libavutil/fifo.h"
#include "libavutil/thread.h"
#define SPECIFIER_OPT_FMT_str "%s"
#define SPECIFIER_OPT_FMT_i "%i"
#define SPECIFIER_OPT_FMT_i64 "%"PRId64
#define SPECIFIER_OPT_FMT_ui64 "%"PRIu64
#define SPECIFIER_OPT_FMT_f "%f"
#define SPECIFIER_OPT_FMT_dbl "%lf"
#define WARN_MULTIPLE_OPT_USAGE(name, type, so, st)\
{\
char namestr[128] = "";\
const char *spec = so->specifier && so->specifier[0] ? so->specifier : "";\
for (int _i = 0; opt_name_##name[_i]; _i++)\
av_strlcatf(namestr, sizeof(namestr), "-%s%s", opt_name_##name[_i], opt_name_##name[_i+1] ? (opt_name_##name[_i+2] ? ", " : " or ") : "");\
av_log(NULL, AV_LOG_WARNING, "Multiple %s options specified for stream %d, only the last option '-%s%s%s "SPECIFIER_OPT_FMT_##type"' will be used.\n",\
namestr, st->index, opt_name_##name[0], spec[0] ? ":" : "", spec, so->u.type);\
}
#define MATCH_PER_STREAM_OPT(name, type, outvar, fmtctx, st)\
{\
int _ret, _matches = 0;\
SpecifierOpt *so;\
for (int _i = 0; _i < o->nb_ ## name; _i++) {\
char *spec = o->name[_i].specifier;\
if ((_ret = check_stream_specifier(fmtctx, st, spec)) > 0) {\
outvar = o->name[_i].u.type;\
so = &o->name[_i];\
_matches++;\
} else if (_ret < 0)\
exit_program(1);\
}\
if (_matches > 1)\
WARN_MULTIPLE_OPT_USAGE(name, type, so, st);\
}
#define MATCH_PER_TYPE_OPT(name, type, outvar, fmtctx, mediatype)\
{\
int i;\
for (i = 0; i < o->nb_ ## name; i++) {\
char *spec = o->name[i].specifier;\
if (!strcmp(spec, mediatype))\
outvar = o->name[i].u.type;\
}\
}
typedef struct MuxStream {
OutputStream ost;
// name used for logging
char log_name[32];
/* the packets are buffered here until the muxer is ready to be initialized */
AVFifo *muxing_queue;
AVBSFContext *bsf_ctx;
EncStats stats;
int64_t max_frames;
/*
* The size of the AVPackets' buffers in queue.
* Updated when a packet is either pushed or pulled from the queue.
*/
size_t muxing_queue_data_size;
int max_muxing_queue_size;
/* Threshold after which max_muxing_queue_size will be in effect */
size_t muxing_queue_data_threshold;
/* dts of the last packet sent to the muxer, in the stream timebase
* used for making up missing dts values */
int64_t last_mux_dts;
} MuxStream;
typedef struct Muxer {
OutputFile of;
// name used for logging
char log_name[32];
AVFormatContext *fc;
pthread_t thread;
ThreadQueue *tq;
AVDictionary *opts;
int thread_queue_size;
/* filesize limit expressed in bytes */
int64_t limit_filesize;
atomic_int_least64_t last_filesize;
int header_written;
SyncQueue *sq_mux;
AVPacket *sq_pkt;
} Muxer;
typedef struct EncStatsFile {
char *path;
AVIOContext *io;
} EncStatsFile;
/* whether we want to print an SDP, set in of_open() */
extern __thread int want_sdp;
int mux_check_init(Muxer *mux);
#endif /* FFTOOLS_FFMPEG_MUX_H */

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1,6 +1,7 @@
/*
* Copyright (c) 2007-2010 Stefano Sabatini
* Copyright (c) 2020 Taner Sener ( tanersener gmail com )
* Copyright (c) 2020-2022 Taner Sener
* Copyright (c) 2023 ARTHENICA LTD
*
* This file is part of FFmpeg.
*
@ -29,6 +30,13 @@
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop mobile-ffmpeg and later ffmpeg-kit libraries.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
* - fftools header names updated
*
* mobile-ffmpeg / ffmpeg-kit changes by Taner Sener
*
* 09.2022
@ -52,9 +60,11 @@
#include "libavutil/ffversion.h"
#include <string.h>
#include <math.h>
#include "libavformat/avformat.h"
#include "libavcodec/avcodec.h"
#include "libavutil/ambient_viewing_environment.h"
#include "libavutil/avassert.h"
#include "libavutil/avstring.h"
#include "libavutil/bprint.h"
@ -163,6 +173,8 @@ typedef struct ReadInterval {
__thread ReadInterval *read_intervals;
__thread int read_intervals_nb = 0;
__thread int find_stream_info = 1;
/* section structure definition */
#define SECTION_MAX_NB_CHILDREN 10
@ -626,6 +638,7 @@ static inline void writer_put_str_printf(WriterContext *wctx, const char *str)
static inline void writer_printf_printf(WriterContext *wctx, const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
av_vlog(NULL, AV_LOG_STDERR, fmt, ap);
va_end(ap);
@ -671,7 +684,7 @@ static int writer_open(WriterContext **wctx, const Writer *writer, const char *a
goto fail;
}
while ((opt = av_dict_get(opts, "", opt, AV_DICT_IGNORE_SUFFIX))) {
while ((opt = av_dict_iterate(opts, opt))) {
if ((ret = av_opt_set(*wctx, opt->key, opt->value, AV_OPT_SEARCH_CHILDREN)) < 0) {
av_log(*wctx, AV_LOG_ERROR, "Failed to set option '%s' with value '%s' provided to writer context\n",
opt->key, opt->value);
@ -1907,12 +1920,14 @@ static void writer_register_all(void)
writer_print_string(w, k, pbuf.str, 0); \
} while (0)
#define print_list_fmt(k, f, n, ...) do { \
#define print_list_fmt(k, f, n, m, ...) do { \
av_bprint_clear(&pbuf); \
for (int idx = 0; idx < n; idx++) { \
if (idx > 0) \
av_bprint_chars(&pbuf, ' ', 1); \
av_bprintf(&pbuf, f, __VA_ARGS__); \
for (int idx2 = 0; idx2 < m; idx2++) { \
if (idx > 0 || idx2 > 0) \
av_bprint_chars(&pbuf, ' ', 1); \
av_bprintf(&pbuf, f, __VA_ARGS__); \
} \
} \
writer_print_string(w, k, pbuf.str, 0); \
} while (0)
@ -1953,7 +1968,7 @@ static inline int show_tags(WriterContext *w, AVDictionary *tags, int section_id
return 0;
writer_print_section_header(w, section_id);
while ((tag = av_dict_get(tags, "", tag, AV_DICT_IGNORE_SUFFIX))) {
while ((tag = av_dict_iterate(tags, tag))) {
if ((ret = print_str_validate(tag->key, tag->value)) < 0)
break;
}
@ -2023,7 +2038,7 @@ static void print_dovi_metadata(WriterContext *w, const AVDOVIMetadata *dovi)
const AVDOVIReshapingCurve *curve = &mapping->curves[c];
writer_print_section_header(w, SECTION_ID_FRAME_SIDE_DATA_COMPONENT);
print_list_fmt("pivots", "%"PRIu16, curve->num_pivots, curve->pivots[idx]);
print_list_fmt("pivots", "%"PRIu16, curve->num_pivots, 1, curve->pivots[idx]);
writer_print_section_header(w, SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST);
for (int i = 0; i < curve->num_pivots - 1; i++) {
@ -2035,7 +2050,7 @@ static void print_dovi_metadata(WriterContext *w, const AVDOVIMetadata *dovi)
print_str("mapping_idc_name", "polynomial");
print_int("poly_order", curve->poly_order[i]);
print_list_fmt("poly_coef", "%"PRIi64,
curve->poly_order[i] + 1,
curve->poly_order[i] + 1, 1,
curve->poly_coef[i][idx]);
break;
case AV_DOVI_MAPPING_MMR:
@ -2043,8 +2058,8 @@ static void print_dovi_metadata(WriterContext *w, const AVDOVIMetadata *dovi)
print_int("mmr_order", curve->mmr_order[i]);
print_int("mmr_constant", curve->mmr_constant[i]);
print_list_fmt("mmr_coef", "%"PRIi64,
curve->mmr_order[i] * 7,
curve->mmr_coef[i][0][idx]);
curve->mmr_order[i], 7,
curve->mmr_coef[i][idx][idx2]);
break;
default:
print_str("mapping_idc_name", "unknown");
@ -2082,15 +2097,15 @@ static void print_dovi_metadata(WriterContext *w, const AVDOVIMetadata *dovi)
print_int("dm_metadata_id", color->dm_metadata_id);
print_int("scene_refresh_flag", color->scene_refresh_flag);
print_list_fmt("ycc_to_rgb_matrix", "%d/%d",
FF_ARRAY_ELEMS(color->ycc_to_rgb_matrix),
FF_ARRAY_ELEMS(color->ycc_to_rgb_matrix), 1,
color->ycc_to_rgb_matrix[idx].num,
color->ycc_to_rgb_matrix[idx].den);
print_list_fmt("ycc_to_rgb_offset", "%d/%d",
FF_ARRAY_ELEMS(color->ycc_to_rgb_offset),
FF_ARRAY_ELEMS(color->ycc_to_rgb_offset), 1,
color->ycc_to_rgb_offset[idx].num,
color->ycc_to_rgb_offset[idx].den);
print_list_fmt("rgb_to_lms_matrix", "%d/%d",
FF_ARRAY_ELEMS(color->rgb_to_lms_matrix),
FF_ARRAY_ELEMS(color->rgb_to_lms_matrix), 1,
color->rgb_to_lms_matrix[idx].num,
color->rgb_to_lms_matrix[idx].den);
print_int("signal_eotf", color->signal_eotf);
@ -2276,6 +2291,17 @@ static void print_dynamic_hdr_vivid(WriterContext *w, const AVDynamicHDRVivid *m
}
}
static void print_ambient_viewing_environment(WriterContext *w,
const AVAmbientViewingEnvironment *env)
{
if (!env)
return;
print_q("ambient_illuminance", env->ambient_illuminance, '/');
print_q("ambient_light_x", env->ambient_light_x, '/');
print_q("ambient_light_y", env->ambient_light_y, '/');
}
static void print_pkt_side_data(WriterContext *w,
AVCodecParameters *par,
const AVPacketSideData *side_data,
@ -2293,8 +2319,11 @@ static void print_pkt_side_data(WriterContext *w,
writer_print_section_header(w, id_data);
print_str("side_data_type", name ? name : "unknown");
if (sd->type == AV_PKT_DATA_DISPLAYMATRIX && sd->size >= 9*4) {
double rotation = av_display_rotation_get((int32_t *)sd->data);
if (isnan(rotation))
rotation = 0;
writer_print_integers(w, "displaymatrix", sd->data, 9, " %11d", 3, 4, 1);
print_int("rotation", av_display_rotation_get((int32_t *)sd->data));
print_int("rotation", rotation);
} else if (sd->type == AV_PKT_DATA_STEREO3D) {
const AVStereo3D *stereo = (AVStereo3D *)sd->data;
print_str("type", av_stereo3d_type_name(stereo->type));
@ -2506,8 +2535,12 @@ static void show_packet(WriterContext *w, InputFile *ifile, AVPacket *pkt, int p
print_val("size", pkt->size, unit_byte_str);
if (pkt->pos != -1) print_fmt ("pos", "%"PRId64, pkt->pos);
else print_str_opt("pos", "N/A");
print_fmt("flags", "%c%c", pkt->flags & AV_PKT_FLAG_KEY ? 'K' : '_',
pkt->flags & AV_PKT_FLAG_DISCARD ? 'D' : '_');
print_fmt("flags", "%c%c%c", pkt->flags & AV_PKT_FLAG_KEY ? 'K' : '_',
pkt->flags & AV_PKT_FLAG_DISCARD ? 'D' : '_',
pkt->flags & AV_PKT_FLAG_CORRUPT ? 'C' : '_');
if (do_show_data)
writer_print_data(w, "data", pkt->data, pkt->size);
writer_print_data_hash(w, "data_hash", pkt->data, pkt->size);
if (pkt->side_data_elems) {
size_t size;
@ -2526,9 +2559,6 @@ static void show_packet(WriterContext *w, InputFile *ifile, AVPacket *pkt, int p
SECTION_ID_PACKET_SIDE_DATA);
}
if (do_show_data)
writer_print_data(w, "data", pkt->data, pkt->size);
writer_print_data_hash(w, "data_hash", pkt->data, pkt->size);
writer_print_section_footer(w);
av_bprint_finalize(&pbuf, NULL);
@ -2581,8 +2611,14 @@ static void show_frame(WriterContext *w, AVFrame *frame, AVStream *stream,
print_time("pkt_dts_time", frame->pkt_dts, &stream->time_base);
print_ts ("best_effort_timestamp", frame->best_effort_timestamp);
print_time("best_effort_timestamp_time", frame->best_effort_timestamp, &stream->time_base);
#if LIBAVUTIL_VERSION_MAJOR < 59
AV_NOWARN_DEPRECATED(
print_duration_ts ("pkt_duration", frame->pkt_duration);
print_duration_time("pkt_duration_time", frame->pkt_duration, &stream->time_base);
)
#endif
print_duration_ts ("duration", frame->duration);
print_duration_time("duration_time", frame->duration, &stream->time_base);
if (frame->pkt_pos != -1) print_fmt ("pkt_pos", "%"PRId64, frame->pkt_pos);
else print_str_opt("pkt_pos", "N/A");
if (frame->pkt_size != -1) print_val ("pkt_size", frame->pkt_size, unit_byte_str);
@ -2604,8 +2640,12 @@ static void show_frame(WriterContext *w, AVFrame *frame, AVStream *stream,
print_str_opt("sample_aspect_ratio", "N/A");
}
print_fmt("pict_type", "%c", av_get_picture_type_char(frame->pict_type));
#if LIBAVUTIL_VERSION_MAJOR < 59
AV_NOWARN_DEPRECATED(
print_int("coded_picture_number", frame->coded_picture_number);
print_int("display_picture_number", frame->display_picture_number);
)
#endif
print_int("interlaced_frame", frame->interlaced_frame);
print_int("top_field_first", frame->top_field_first);
print_int("repeat_pict", frame->repeat_pict);
@ -2644,8 +2684,11 @@ static void show_frame(WriterContext *w, AVFrame *frame, AVStream *stream,
name = av_frame_side_data_name(sd->type);
print_str("side_data_type", name ? name : "unknown");
if (sd->type == AV_FRAME_DATA_DISPLAYMATRIX && sd->size >= 9*4) {
double rotation = av_display_rotation_get((int32_t *)sd->data);
if (isnan(rotation))
rotation = 0;
writer_print_integers(w, "displaymatrix", sd->data, 9, " %11d", 3, 4, 1);
print_int("rotation", av_display_rotation_get((int32_t *)sd->data));
print_int("rotation", rotation);
} else if (sd->type == AV_FRAME_DATA_AFD && sd->size > 0) {
print_int("active_format", *sd->data);
} else if (sd->type == AV_FRAME_DATA_GOP_TIMECODE && sd->size >= 8) {
@ -2700,6 +2743,9 @@ static void show_frame(WriterContext *w, AVFrame *frame, AVStream *stream,
} else if (sd->type == AV_FRAME_DATA_DYNAMIC_HDR_VIVID) {
AVDynamicHDRVivid *metadata = (AVDynamicHDRVivid *)sd->data;
print_dynamic_hdr_vivid(w, metadata);
} else if (sd->type == AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT) {
print_ambient_viewing_environment(
w, (const AVAmbientViewingEnvironment *)sd->data);
}
writer_print_section_footer(w);
}
@ -2714,7 +2760,7 @@ static void show_frame(WriterContext *w, AVFrame *frame, AVStream *stream,
static av_always_inline int process_frame(WriterContext *w,
InputFile *ifile,
AVFrame *frame, AVPacket *pkt,
AVFrame *frame, const AVPacket *pkt,
int *packet_new)
{
AVFormatContext *fmt_ctx = ifile->fmt_ctx;
@ -2858,9 +2904,10 @@ static int read_interval_packets(WriterContext *w, InputFile *ifile,
}
if (selected_streams[pkt->stream_index]) {
AVRational tb = ifile->streams[pkt->stream_index].st->time_base;
int64_t pts = pkt->pts != AV_NOPTS_VALUE ? pkt->pts : pkt->dts;
if (pkt->pts != AV_NOPTS_VALUE)
*cur_ts = av_rescale_q(pkt->pts, tb, AV_TIME_BASE_Q);
if (pts != AV_NOPTS_VALUE)
*cur_ts = av_rescale_q(pts, tb, AV_TIME_BASE_Q);
if (!has_start && *cur_ts != AV_NOPTS_VALUE) {
start = *cur_ts;
@ -2894,7 +2941,7 @@ static int read_interval_packets(WriterContext *w, InputFile *ifile,
}
av_packet_unref(pkt);
//Flush remaining frames that are cached in the decoder
for (i = 0; i < fmt_ctx->nb_streams; i++) {
for (i = 0; i < ifile->nb_streams; i++) {
pkt->stream_index = i;
if (do_read_frames) {
while (process_frame(w, ifile, frame, pkt, &(int){1}) > 0);
@ -3052,6 +3099,8 @@ static int show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_id
}
print_int("bits_per_sample", av_get_bits_per_sample(par->codec_id));
print_int("initial_padding", par->initial_padding);
break;
case AVMEDIA_TYPE_SUBTITLE:
@ -3278,15 +3327,9 @@ static int show_format(WriterContext *w, InputFile *ifile)
static void show_error(WriterContext *w, int err)
{
char errbuf[128];
const char *errbuf_ptr = errbuf;
if (av_strerror(err, errbuf, sizeof(errbuf)) < 0)
errbuf_ptr = strerror(AVUNERROR(err));
writer_print_section_header(w, SECTION_ID_ERROR);
print_int("code", err);
print_str("string", errbuf_ptr);
print_str("string", av_err2str(err));
writer_print_section_footer(w);
}
@ -3299,10 +3342,8 @@ static int open_input_file(InputFile *ifile, const char *filename,
int scan_all_pmts_set = 0;
fmt_ctx = avformat_alloc_context();
if (!fmt_ctx) {
print_error(filename, AVERROR(ENOMEM));
exit_program(1);
}
if (!fmt_ctx)
report_and_exit(AVERROR(ENOMEM));
if (!av_dict_get(format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE)) {
av_dict_set(&format_opts, "scan_all_pmts", "1", AV_DICT_DONT_OVERWRITE);
@ -3320,7 +3361,7 @@ static int open_input_file(InputFile *ifile, const char *filename,
ifile->fmt_ctx = fmt_ctx;
if (scan_all_pmts_set)
av_dict_set(&format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE);
while ((t = av_dict_get(format_opts, "", t, AV_DICT_IGNORE_SUFFIX)))
while ((t = av_dict_iterate(format_opts, t)))
av_log(NULL, AV_LOG_WARNING, "Option %s skipped - not known to demuxer.\n", t->key);
if (find_stream_info) {
@ -3718,7 +3759,7 @@ static void opt_input_file(void *optctx, const char *arg)
exit_program(1);
}
if (!strcmp(arg, "-"))
arg = "pipe:";
arg = "fd:";
input_filename = arg;
}
@ -3737,7 +3778,7 @@ static void opt_output_file(void *optctx, const char *arg)
exit_program(1);
}
if (!strcmp(arg, "-"))
arg = "pipe:";
arg = "fd:";
output_filename = arg;
}

@ -0,0 +1,145 @@
/*
* This file is part of FFmpeg.
* Copyright (c) 2023 ARTHENICA LTD
*
* FFmpeg 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 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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 FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
* This file is the modified version of objpool.c file living in ffmpeg source code under the fftools folder. We
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop ffmpeg-kit library.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
* - fftools header names updated
*/
#include <stdint.h>
#include "libavcodec/packet.h"
#include "libavutil/common.h"
#include "libavutil/error.h"
#include "libavutil/frame.h"
#include "libavutil/mem.h"
#include "fftools_objpool.h"
struct ObjPool {
void *pool[32];
unsigned int pool_count;
ObjPoolCBAlloc alloc;
ObjPoolCBReset reset;
ObjPoolCBFree free;
};
ObjPool *objpool_alloc(ObjPoolCBAlloc cb_alloc, ObjPoolCBReset cb_reset,
ObjPoolCBFree cb_free)
{
ObjPool *op = av_mallocz(sizeof(*op));
if (!op)
return NULL;
op->alloc = cb_alloc;
op->reset = cb_reset;
op->free = cb_free;
return op;
}
void objpool_free(ObjPool **pop)
{
ObjPool *op = *pop;
if (!op)
return;
for (unsigned int i = 0; i < op->pool_count; i++)
op->free(&op->pool[i]);
av_freep(pop);
}
int objpool_get(ObjPool *op, void **obj)
{
if (op->pool_count) {
*obj = op->pool[--op->pool_count];
op->pool[op->pool_count] = NULL;
} else
*obj = op->alloc();
return *obj ? 0 : AVERROR(ENOMEM);
}
void objpool_release(ObjPool *op, void **obj)
{
if (!*obj)
return;
op->reset(*obj);
if (op->pool_count < FF_ARRAY_ELEMS(op->pool))
op->pool[op->pool_count++] = *obj;
else
op->free(obj);
*obj = NULL;
}
static void *alloc_packet(void)
{
return av_packet_alloc();
}
static void *alloc_frame(void)
{
return av_frame_alloc();
}
static void reset_packet(void *obj)
{
av_packet_unref(obj);
}
static void reset_frame(void *obj)
{
av_frame_unref(obj);
}
static void free_packet(void **obj)
{
AVPacket *pkt = *obj;
av_packet_free(&pkt);
*obj = NULL;
}
static void free_frame(void **obj)
{
AVFrame *frame = *obj;
av_frame_free(&frame);
*obj = NULL;
}
ObjPool *objpool_alloc_packets(void)
{
return objpool_alloc(alloc_packet, reset_packet, free_packet);
}
ObjPool *objpool_alloc_frames(void)
{
return objpool_alloc(alloc_frame, reset_frame, free_frame);
}

@ -0,0 +1,50 @@
/*
* This file is part of FFmpeg.
* Copyright (c) 2023 ARTHENICA LTD
*
* FFmpeg 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 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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 FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
* This file is the modified version of objpool.h file living in ffmpeg source code under the fftools folder. We
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop ffmpeg-kit library.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
*/
#ifndef FFTOOLS_OBJPOOL_H
#define FFTOOLS_OBJPOOL_H
typedef struct ObjPool ObjPool;
typedef void* (*ObjPoolCBAlloc)(void);
typedef void (*ObjPoolCBReset)(void *);
typedef void (*ObjPoolCBFree)(void **);
void objpool_free(ObjPool **op);
ObjPool *objpool_alloc(ObjPoolCBAlloc cb_alloc, ObjPoolCBReset cb_reset,
ObjPoolCBFree cb_free);
ObjPool *objpool_alloc_packets(void);
ObjPool *objpool_alloc_frames(void);
int objpool_get(ObjPool *op, void **obj);
void objpool_release(ObjPool *op, void **obj);
#endif // FFTOOLS_OBJPOOL_H

@ -1,6 +1,7 @@
/*
* Option handlers shared between the tools.
* copyright (c) 2022 Taner Sener ( tanersener gmail com )
* Copyright (c) 2022 Taner Sener
* Copyright (c) 2023 ARTHENICA LTD
*
* This file is part of FFmpeg.
*
@ -24,6 +25,12 @@
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop the ffmpeg-kit library.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - time field in report_callback updated as double
*
* ffmpeg-kit changes by Taner Sener
*
* 09.2022
@ -88,7 +95,7 @@ static __thread FILE *report_file = NULL;
static __thread int report_file_level = AV_LOG_DEBUG;
extern void ffmpegkit_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);
extern void (*report_callback)(int, float, float, int64_t, double, double, double);
extern __thread char *program_name;
int show_license(void *optctx, const char *opt, const char *arg)

@ -1,6 +1,6 @@
/*
* Option handlers shared between the tools.
* copyright (c) 2022 Taner Sener ( tanersener gmail com )
* Copyright (c) 2022 Taner Sener
*
* This file is part of FFmpeg.
*

@ -0,0 +1,462 @@
/*
* This file is part of FFmpeg.
* Copyright (c) 2023 ARTHENICA LTD
*
* FFmpeg 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 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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 FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
* This file is the modified version of sync_queue.c file living in ffmpeg source code under the fftools folder. We
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop ffmpeg-kit library.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
* - fftools header names updated
*/
#include <stdint.h>
#include <string.h>
#include "libavutil/avassert.h"
#include "libavutil/error.h"
#include "libavutil/fifo.h"
#include "libavutil/mathematics.h"
#include "libavutil/mem.h"
#include "fftools_objpool.h"
#include "fftools_sync_queue.h"
typedef struct SyncQueueStream {
AVFifo *fifo;
AVRational tb;
/* stream head: largest timestamp seen */
int64_t head_ts;
int limiting;
/* no more frames will be sent for this stream */
int finished;
uint64_t frames_sent;
uint64_t frames_max;
} SyncQueueStream;
struct SyncQueue {
enum SyncQueueType type;
/* no more frames will be sent for any stream */
int finished;
/* sync head: the stream with the _smallest_ head timestamp
* this stream determines which frames can be output */
int head_stream;
/* the finished stream with the smallest finish timestamp or -1 */
int head_finished_stream;
// maximum buffering duration in microseconds
int64_t buf_size_us;
SyncQueueStream *streams;
unsigned int nb_streams;
// pool of preallocated frames to avoid constant allocations
ObjPool *pool;
};
static void frame_move(const SyncQueue *sq, SyncQueueFrame dst,
SyncQueueFrame src)
{
if (sq->type == SYNC_QUEUE_PACKETS)
av_packet_move_ref(dst.p, src.p);
else
av_frame_move_ref(dst.f, src.f);
}
static int64_t frame_ts(const SyncQueue *sq, SyncQueueFrame frame)
{
return (sq->type == SYNC_QUEUE_PACKETS) ?
frame.p->pts + frame.p->duration :
frame.f->pts + frame.f->duration;
}
static int frame_null(const SyncQueue *sq, SyncQueueFrame frame)
{
return (sq->type == SYNC_QUEUE_PACKETS) ? (frame.p == NULL) : (frame.f == NULL);
}
static void finish_stream(SyncQueue *sq, unsigned int stream_idx)
{
SyncQueueStream *st = &sq->streams[stream_idx];
st->finished = 1;
if (st->limiting && st->head_ts != AV_NOPTS_VALUE) {
/* check if this stream is the new finished head */
if (sq->head_finished_stream < 0 ||
av_compare_ts(st->head_ts, st->tb,
sq->streams[sq->head_finished_stream].head_ts,
sq->streams[sq->head_finished_stream].tb) < 0) {
sq->head_finished_stream = stream_idx;
}
/* mark as finished all streams that should no longer receive new frames,
* due to them being ahead of some finished stream */
st = &sq->streams[sq->head_finished_stream];
for (unsigned int i = 0; i < sq->nb_streams; i++) {
SyncQueueStream *st1 = &sq->streams[i];
if (st != st1 && st1->head_ts != AV_NOPTS_VALUE &&
av_compare_ts(st->head_ts, st->tb, st1->head_ts, st1->tb) <= 0)
st1->finished = 1;
}
}
/* mark the whole queue as finished if all streams are finished */
for (unsigned int i = 0; i < sq->nb_streams; i++) {
if (!sq->streams[i].finished)
return;
}
sq->finished = 1;
}
static void queue_head_update(SyncQueue *sq)
{
if (sq->head_stream < 0) {
/* wait for one timestamp in each stream before determining
* the queue head */
for (unsigned int i = 0; i < sq->nb_streams; i++) {
SyncQueueStream *st = &sq->streams[i];
if (st->limiting && st->head_ts == AV_NOPTS_VALUE)
return;
}
// placeholder value, correct one will be found below
sq->head_stream = 0;
}
for (unsigned int i = 0; i < sq->nb_streams; i++) {
SyncQueueStream *st_head = &sq->streams[sq->head_stream];
SyncQueueStream *st_other = &sq->streams[i];
if (st_other->limiting && st_other->head_ts != AV_NOPTS_VALUE &&
av_compare_ts(st_other->head_ts, st_other->tb,
st_head->head_ts, st_head->tb) < 0)
sq->head_stream = i;
}
}
/* update this stream's head timestamp */
static void stream_update_ts(SyncQueue *sq, unsigned int stream_idx, int64_t ts)
{
SyncQueueStream *st = &sq->streams[stream_idx];
if (ts == AV_NOPTS_VALUE ||
(st->head_ts != AV_NOPTS_VALUE && st->head_ts >= ts))
return;
st->head_ts = ts;
/* if this stream is now ahead of some finished stream, then
* this stream is also finished */
if (sq->head_finished_stream >= 0 &&
av_compare_ts(sq->streams[sq->head_finished_stream].head_ts,
sq->streams[sq->head_finished_stream].tb,
ts, st->tb) <= 0)
finish_stream(sq, stream_idx);
/* update the overall head timestamp if it could have changed */
if (st->limiting &&
(sq->head_stream < 0 || sq->head_stream == stream_idx))
queue_head_update(sq);
}
/* If the queue for the given stream (or all streams when stream_idx=-1)
* is overflowing, trigger a fake heartbeat on lagging streams.
*
* @return 1 if heartbeat triggered, 0 otherwise
*/
static int overflow_heartbeat(SyncQueue *sq, int stream_idx)
{
SyncQueueStream *st;
SyncQueueFrame frame;
int64_t tail_ts = AV_NOPTS_VALUE;
/* if no stream specified, pick the one that is most ahead */
if (stream_idx < 0) {
int64_t ts = AV_NOPTS_VALUE;
for (int i = 0; i < sq->nb_streams; i++) {
st = &sq->streams[i];
if (st->head_ts != AV_NOPTS_VALUE &&
(ts == AV_NOPTS_VALUE ||
av_compare_ts(ts, sq->streams[stream_idx].tb,
st->head_ts, st->tb) < 0)) {
ts = st->head_ts;
stream_idx = i;
}
}
/* no stream has a timestamp yet -> nothing to do */
if (stream_idx < 0)
return 0;
}
st = &sq->streams[stream_idx];
/* get the chosen stream's tail timestamp */
for (size_t i = 0; tail_ts == AV_NOPTS_VALUE &&
av_fifo_peek(st->fifo, &frame, 1, i) >= 0; i++)
tail_ts = frame_ts(sq, frame);
/* overflow triggers when the tail is over specified duration behind the head */
if (tail_ts == AV_NOPTS_VALUE || tail_ts >= st->head_ts ||
av_rescale_q(st->head_ts - tail_ts, st->tb, AV_TIME_BASE_Q) < sq->buf_size_us)
return 0;
/* signal a fake timestamp for all streams that prevent tail_ts from being output */
tail_ts++;
for (unsigned int i = 0; i < sq->nb_streams; i++) {
SyncQueueStream *st1 = &sq->streams[i];
int64_t ts;
if (st == st1 || st1->finished ||
(st1->head_ts != AV_NOPTS_VALUE &&
av_compare_ts(tail_ts, st->tb, st1->head_ts, st1->tb) <= 0))
continue;
ts = av_rescale_q(tail_ts, st->tb, st1->tb);
if (st1->head_ts != AV_NOPTS_VALUE)
ts = FFMAX(st1->head_ts + 1, ts);
stream_update_ts(sq, i, ts);
}
return 1;
}
int sq_send(SyncQueue *sq, unsigned int stream_idx, SyncQueueFrame frame)
{
SyncQueueStream *st;
SyncQueueFrame dst;
int64_t ts;
int ret;
av_assert0(stream_idx < sq->nb_streams);
st = &sq->streams[stream_idx];
av_assert0(st->tb.num > 0 && st->tb.den > 0);
if (frame_null(sq, frame)) {
finish_stream(sq, stream_idx);
return 0;
}
if (st->finished)
return AVERROR_EOF;
ret = objpool_get(sq->pool, (void**)&dst);
if (ret < 0)
return ret;
frame_move(sq, dst, frame);
ts = frame_ts(sq, dst);
ret = av_fifo_write(st->fifo, &dst, 1);
if (ret < 0) {
frame_move(sq, frame, dst);
objpool_release(sq->pool, (void**)&dst);
return ret;
}
stream_update_ts(sq, stream_idx, ts);
st->frames_sent++;
if (st->frames_sent >= st->frames_max)
finish_stream(sq, stream_idx);
return 0;
}
static int receive_for_stream(SyncQueue *sq, unsigned int stream_idx,
SyncQueueFrame frame)
{
SyncQueueStream *st_head = sq->head_stream >= 0 ?
&sq->streams[sq->head_stream] : NULL;
SyncQueueStream *st;
av_assert0(stream_idx < sq->nb_streams);
st = &sq->streams[stream_idx];
if (av_fifo_can_read(st->fifo)) {
SyncQueueFrame peek;
int64_t ts;
int cmp = 1;
av_fifo_peek(st->fifo, &peek, 1, 0);
ts = frame_ts(sq, peek);
/* check if this stream's tail timestamp does not overtake
* the overall queue head */
if (ts != AV_NOPTS_VALUE && st_head)
cmp = av_compare_ts(ts, st->tb, st_head->head_ts, st_head->tb);
/* We can release frames that do not end after the queue head.
* Frames with no timestamps are just passed through with no conditions.
*/
if (cmp <= 0 || ts == AV_NOPTS_VALUE) {
frame_move(sq, frame, peek);
objpool_release(sq->pool, (void**)&peek);
av_fifo_drain2(st->fifo, 1);
return 0;
}
}
return (sq->finished || (st->finished && !av_fifo_can_read(st->fifo))) ?
AVERROR_EOF : AVERROR(EAGAIN);
}
static int receive_internal(SyncQueue *sq, int stream_idx, SyncQueueFrame frame)
{
int nb_eof = 0;
int ret;
/* read a frame for a specific stream */
if (stream_idx >= 0) {
ret = receive_for_stream(sq, stream_idx, frame);
return (ret < 0) ? ret : stream_idx;
}
/* read a frame for any stream with available output */
for (unsigned int i = 0; i < sq->nb_streams; i++) {
ret = receive_for_stream(sq, i, frame);
if (ret == AVERROR_EOF || ret == AVERROR(EAGAIN)) {
nb_eof += (ret == AVERROR_EOF);
continue;
}
return (ret < 0) ? ret : i;
}
return (nb_eof == sq->nb_streams) ? AVERROR_EOF : AVERROR(EAGAIN);
}
int sq_receive(SyncQueue *sq, int stream_idx, SyncQueueFrame frame)
{
int ret = receive_internal(sq, stream_idx, frame);
/* try again if the queue overflowed and triggered a fake heartbeat
* for lagging streams */
if (ret == AVERROR(EAGAIN) && overflow_heartbeat(sq, stream_idx))
ret = receive_internal(sq, stream_idx, frame);
return ret;
}
int sq_add_stream(SyncQueue *sq, int limiting)
{
SyncQueueStream *tmp, *st;
tmp = av_realloc_array(sq->streams, sq->nb_streams + 1, sizeof(*sq->streams));
if (!tmp)
return AVERROR(ENOMEM);
sq->streams = tmp;
st = &sq->streams[sq->nb_streams];
memset(st, 0, sizeof(*st));
st->fifo = av_fifo_alloc2(1, sizeof(SyncQueueFrame), AV_FIFO_FLAG_AUTO_GROW);
if (!st->fifo)
return AVERROR(ENOMEM);
/* we set a valid default, so that a pathological stream that never
* receives even a real timebase (and no frames) won't stall all other
* streams forever; cf. overflow_heartbeat() */
st->tb = (AVRational){ 1, 1 };
st->head_ts = AV_NOPTS_VALUE;
st->frames_max = UINT64_MAX;
st->limiting = limiting;
return sq->nb_streams++;
}
void sq_set_tb(SyncQueue *sq, unsigned int stream_idx, AVRational tb)
{
SyncQueueStream *st;
av_assert0(stream_idx < sq->nb_streams);
st = &sq->streams[stream_idx];
av_assert0(!av_fifo_can_read(st->fifo));
if (st->head_ts != AV_NOPTS_VALUE)
st->head_ts = av_rescale_q(st->head_ts, st->tb, tb);
st->tb = tb;
}
void sq_limit_frames(SyncQueue *sq, unsigned int stream_idx, uint64_t frames)
{
SyncQueueStream *st;
av_assert0(stream_idx < sq->nb_streams);
st = &sq->streams[stream_idx];
st->frames_max = frames;
if (st->frames_sent >= st->frames_max)
finish_stream(sq, stream_idx);
}
SyncQueue *sq_alloc(enum SyncQueueType type, int64_t buf_size_us)
{
SyncQueue *sq = av_mallocz(sizeof(*sq));
if (!sq)
return NULL;
sq->type = type;
sq->buf_size_us = buf_size_us;
sq->head_stream = -1;
sq->head_finished_stream = -1;
sq->pool = (type == SYNC_QUEUE_PACKETS) ? objpool_alloc_packets() :
objpool_alloc_frames();
if (!sq->pool) {
av_freep(&sq);
return NULL;
}
return sq;
}
void sq_free(SyncQueue **psq)
{
SyncQueue *sq = *psq;
if (!sq)
return;
for (unsigned int i = 0; i < sq->nb_streams; i++) {
SyncQueueFrame frame;
while (av_fifo_read(sq->streams[i].fifo, &frame, 1) >= 0)
objpool_release(sq->pool, (void**)&frame);
av_fifo_freep2(&sq->streams[i].fifo);
}
av_freep(&sq->streams);
objpool_free(&sq->pool);
av_freep(psq);
}

@ -0,0 +1,122 @@
/*
* This file is part of FFmpeg.
* Copyright (c) 2023 ARTHENICA LTD
*
* FFmpeg 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 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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 FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
* This file is the modified version of sync_queue.h file living in ffmpeg source code under the fftools folder. We
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop ffmpeg-kit library.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
*/
#ifndef FFTOOLS_SYNC_QUEUE_H
#define FFTOOLS_SYNC_QUEUE_H
#include <stdint.h>
#include "libavcodec/packet.h"
#include "libavutil/frame.h"
enum SyncQueueType {
SYNC_QUEUE_PACKETS,
SYNC_QUEUE_FRAMES,
};
typedef union SyncQueueFrame {
AVFrame *f;
AVPacket *p;
} SyncQueueFrame;
#define SQFRAME(frame) ((SyncQueueFrame){ .f = (frame) })
#define SQPKT(pkt) ((SyncQueueFrame){ .p = (pkt) })
typedef struct SyncQueue SyncQueue;
/**
* Allocate a sync queue of the given type.
*
* @param buf_size_us maximum duration that will be buffered in microseconds
*/
SyncQueue *sq_alloc(enum SyncQueueType type, int64_t buf_size_us);
void sq_free(SyncQueue **sq);
/**
* Add a new stream to the sync queue.
*
* @param limiting whether the stream is limiting, i.e. no other stream can be
* longer than this one
* @return
* - a non-negative stream index on success
* - a negative error code on error
*/
int sq_add_stream(SyncQueue *sq, int limiting);
/**
* Set the timebase for the stream with index stream_idx. Should be called
* before sending any frames for this stream.
*/
void sq_set_tb(SyncQueue *sq, unsigned int stream_idx, AVRational tb);
/**
* Limit the number of output frames for stream with index stream_idx
* to max_frames.
*/
void sq_limit_frames(SyncQueue *sq, unsigned int stream_idx,
uint64_t max_frames);
/**
* Submit a frame for the stream with index stream_idx.
*
* On success, the sync queue takes ownership of the frame and will reset the
* contents of the supplied frame. On failure, the frame remains owned by the
* caller.
*
* Sending a frame with NULL contents marks the stream as finished.
*
* @return
* - 0 on success
* - AVERROR_EOF when no more frames should be submitted for this stream
* - another a negative error code on failure
*/
int sq_send(SyncQueue *sq, unsigned int stream_idx, SyncQueueFrame frame);
/**
* Read a frame from the queue.
*
* @param stream_idx index of the stream to read a frame for. May be -1, then
* try to read a frame from any stream that is ready for
* output.
* @param frame output frame will be written here on success. The frame is owned
* by the caller.
*
* @return
* - a non-negative index of the stream to which the returned frame belongs
* - AVERROR(EAGAIN) when more frames need to be submitted to the queue
* - AVERROR_EOF when no more frames will be available for this stream (for any
* stream if stream_idx is -1)
* - another negative error code on failure
*/
int sq_receive(SyncQueue *sq, int stream_idx, SyncQueueFrame frame);
#endif // FFTOOLS_SYNC_QUEUE_H

@ -0,0 +1,259 @@
/*
* This file is part of FFmpeg.
* Copyright (c) 2023 ARTHENICA LTD
*
* FFmpeg 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 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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 FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
* This file is the modified version of thread_queue.c file living in ffmpeg source code under the fftools folder. We
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop ffmpeg-kit library.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
* - fftools header names updated
*/
#include <stdint.h>
#include <string.h>
#include "libavutil/avassert.h"
#include "libavutil/error.h"
#include "libavutil/fifo.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/mem.h"
#include "libavutil/thread.h"
#include "fftools_objpool.h"
#include "fftools_thread_queue.h"
enum {
FINISHED_SEND = (1 << 0),
FINISHED_RECV = (1 << 1),
};
typedef struct FifoElem {
void *obj;
unsigned int stream_idx;
} FifoElem;
struct ThreadQueue {
int *finished;
unsigned int nb_streams;
AVFifo *fifo;
ObjPool *obj_pool;
void (*obj_move)(void *dst, void *src);
pthread_mutex_t lock;
pthread_cond_t cond;
};
void tq_free(ThreadQueue **ptq)
{
ThreadQueue *tq = *ptq;
if (!tq)
return;
if (tq->fifo) {
FifoElem elem;
while (av_fifo_read(tq->fifo, &elem, 1) >= 0)
objpool_release(tq->obj_pool, &elem.obj);
}
av_fifo_freep2(&tq->fifo);
objpool_free(&tq->obj_pool);
av_freep(&tq->finished);
pthread_cond_destroy(&tq->cond);
pthread_mutex_destroy(&tq->lock);
av_freep(ptq);
}
ThreadQueue *tq_alloc(unsigned int nb_streams, size_t queue_size,
ObjPool *obj_pool, void (*obj_move)(void *dst, void *src))
{
ThreadQueue *tq;
int ret;
tq = av_mallocz(sizeof(*tq));
if (!tq)
return NULL;
ret = pthread_cond_init(&tq->cond, NULL);
if (ret) {
av_freep(&tq);
return NULL;
}
ret = pthread_mutex_init(&tq->lock, NULL);
if (ret) {
pthread_cond_destroy(&tq->cond);
av_freep(&tq);
return NULL;
}
tq->finished = av_calloc(nb_streams, sizeof(*tq->finished));
if (!tq->finished)
goto fail;
tq->nb_streams = nb_streams;
tq->fifo = av_fifo_alloc2(queue_size, sizeof(FifoElem), 0);
if (!tq->fifo)
goto fail;
tq->obj_pool = obj_pool;
tq->obj_move = obj_move;
return tq;
fail:
tq_free(&tq);
return NULL;
}
int tq_send(ThreadQueue *tq, unsigned int stream_idx, void *data)
{
int *finished;
int ret;
av_assert0(stream_idx < tq->nb_streams);
finished = &tq->finished[stream_idx];
pthread_mutex_lock(&tq->lock);
if (*finished & FINISHED_SEND) {
ret = AVERROR(EINVAL);
goto finish;
}
while (!(*finished & FINISHED_RECV) && !av_fifo_can_write(tq->fifo))
pthread_cond_wait(&tq->cond, &tq->lock);
if (*finished & FINISHED_RECV) {
ret = AVERROR_EOF;
*finished |= FINISHED_SEND;
} else {
FifoElem elem = { .stream_idx = stream_idx };
ret = objpool_get(tq->obj_pool, &elem.obj);
if (ret < 0)
goto finish;
tq->obj_move(elem.obj, data);
ret = av_fifo_write(tq->fifo, &elem, 1);
av_assert0(ret >= 0);
pthread_cond_broadcast(&tq->cond);
}
finish:
pthread_mutex_unlock(&tq->lock);
return ret;
}
static int receive_locked(ThreadQueue *tq, int *stream_idx,
void *data)
{
FifoElem elem;
unsigned int nb_finished = 0;
if (av_fifo_read(tq->fifo, &elem, 1) >= 0) {
tq->obj_move(data, elem.obj);
objpool_release(tq->obj_pool, &elem.obj);
*stream_idx = elem.stream_idx;
return 0;
}
for (unsigned int i = 0; i < tq->nb_streams; i++) {
if (!(tq->finished[i] & FINISHED_SEND))
continue;
/* return EOF to the consumer at most once for each stream */
if (!(tq->finished[i] & FINISHED_RECV)) {
tq->finished[i] |= FINISHED_RECV;
*stream_idx = i;
return AVERROR_EOF;
}
nb_finished++;
}
return nb_finished == tq->nb_streams ? AVERROR_EOF : AVERROR(EAGAIN);
}
int tq_receive(ThreadQueue *tq, int *stream_idx, void *data)
{
int ret;
*stream_idx = -1;
pthread_mutex_lock(&tq->lock);
while (1) {
ret = receive_locked(tq, stream_idx, data);
if (ret == AVERROR(EAGAIN)) {
pthread_cond_wait(&tq->cond, &tq->lock);
continue;
}
break;
}
if (ret == 0)
pthread_cond_broadcast(&tq->cond);
pthread_mutex_unlock(&tq->lock);
return ret;
}
void tq_send_finish(ThreadQueue *tq, unsigned int stream_idx)
{
av_assert0(stream_idx < tq->nb_streams);
pthread_mutex_lock(&tq->lock);
/* mark the stream as send-finished;
* next time the consumer thread tries to read this stream it will get
* an EOF and recv-finished flag will be set */
tq->finished[stream_idx] |= FINISHED_SEND;
pthread_cond_broadcast(&tq->cond);
pthread_mutex_unlock(&tq->lock);
}
void tq_receive_finish(ThreadQueue *tq, unsigned int stream_idx)
{
av_assert0(stream_idx < tq->nb_streams);
pthread_mutex_lock(&tq->lock);
/* mark the stream as recv-finished;
* next time the producer thread tries to send for this stream, it will
* get an EOF and send-finished flag will be set */
tq->finished[stream_idx] |= FINISHED_RECV;
pthread_cond_broadcast(&tq->cond);
pthread_mutex_unlock(&tq->lock);
}

@ -0,0 +1,94 @@
/*
* This file is part of FFmpeg.
* Copyright (c) 2023 ARTHENICA LTD
*
* FFmpeg 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 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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 FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
* This file is the modified version of thread_queue.h file living in ffmpeg source code under the fftools folder. We
* manually update it each time we depend on a new ffmpeg version. Below you can see the list of changes applied
* by us to develop ffmpeg-kit library.
*
* ffmpeg-kit changes by ARTHENICA LTD
*
* 07.2023
* --------------------------------------------------------
* - FFmpeg 6.0 changes migrated
*/
#ifndef FFTOOLS_THREAD_QUEUE_H
#define FFTOOLS_THREAD_QUEUE_H
#include <string.h>
#include "fftools_objpool.h"
typedef struct ThreadQueue ThreadQueue;
/**
* Allocate a queue for sending data between threads.
*
* @param nb_streams number of streams for which a distinct EOF state is
* maintained
* @param queue_size number of items that can be stored in the queue without
* blocking
* @param obj_pool object pool that will be used to allocate items stored in the
* queue; the pool becomes owned by the queue
* @param callback that moves the contents between two data pointers
*/
ThreadQueue *tq_alloc(unsigned int nb_streams, size_t queue_size,
ObjPool *obj_pool, void (*obj_move)(void *dst, void *src));
void tq_free(ThreadQueue **tq);
/**
* Send an item for the given stream to the queue.
*
* @param data the item to send, its contents will be moved using the callback
* provided to tq_alloc(); on failure the item will be left
* untouched
* @return
* - 0 the item was successfully sent
* - AVERROR(ENOMEM) could not allocate an item for writing to the FIFO
* - AVERROR(EINVAL) the sending side has previously been marked as finished
* - AVERROR_EOF the receiving side has marked the given stream as finished
*/
int tq_send(ThreadQueue *tq, unsigned int stream_idx, void *data);
/**
* Mark the given stream finished from the sending side.
*/
void tq_send_finish(ThreadQueue *tq, unsigned int stream_idx);
/**
* Read the next item from the queue.
*
* @param stream_idx the index of the stream that was processed or -1 will be
* written here
* @param data the data item will be written here on success using the
* callback provided to tq_alloc()
* @return
* - 0 a data item was successfully read; *stream_idx contains a non-negative
* stream index
* - AVERROR_EOF When *stream_idx is non-negative, this signals that the sending
* side has marked the given stream as finished. This will happen at most once
* for each stream. When *stream_idx is -1, all streams are done.
*/
int tq_receive(ThreadQueue *tq, int *stream_idx, void *data);
/**
* Mark the given stream finished from the receiving side.
*/
void tq_receive_finish(ThreadQueue *tq, unsigned int stream_idx);
#endif // FFTOOLS_THREAD_QUEUE_H

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: Data Structures</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
@ -57,9 +57,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
@ -69,44 +76,60 @@ $(function() {
<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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;">&#160;</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_1_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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;">&#160;</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;">&#160;</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_3_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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;">&#160;</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;">&#160;</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;">&#160;</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;">&#160;</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_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_11_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_11_" class="arrow" onclick="toggleFolder('11_')">&#9660;</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_11_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</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_12_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_13_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_14_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_15_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_16_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_17_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_18_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_19_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_20_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_21_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_22_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_23_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_24_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_25_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_26_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_27_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_28_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_29_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_30_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_31_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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>
<tr id="row_5_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="d7/dc9/struct_demuxer.html" target="_self">Demuxer</a></td><td class="desc"></td></tr>
<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="d9/d6c/struct_demux_msg.html" target="_self">DemuxMsg</a></td><td class="desc"></td></tr>
<tr id="row_7_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="db/dbb/struct_enc_stats.html" target="_self">EncStats</a></td><td class="desc"></td></tr>
<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="dd/d0c/struct_enc_stats_component.html" target="_self">EncStatsComponent</a></td><td class="desc"></td></tr>
<tr id="row_9_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="da/d56/struct_enc_stats_file.html" target="_self">EncStatsFile</a></td><td class="desc"></td></tr>
<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="da/d62/struct_fifo_elem.html" target="_self">FifoElem</a></td><td class="desc"></td></tr>
<tr id="row_11_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_13_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="d7/d60/struct_frame_data.html" target="_self">FrameData</a></td><td class="desc"></td></tr>
<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_15_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_17_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_18_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_18_" class="arrow" onclick="toggleFolder('18_')">&#9660;</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_18_0_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</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_19_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_20_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="d3/da2/struct_keyframe_force_ctx.html" target="_self">KeyframeForceCtx</a></td><td class="desc"></td></tr>
<tr id="row_21_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="dc/d16/struct_last_frame_duration.html" target="_self">LastFrameDuration</a></td><td class="desc"></td></tr>
<tr id="row_22_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_23_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="de/d29/struct_muxer.html" target="_self">Muxer</a></td><td class="desc"></td></tr>
<tr id="row_24_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="d6/d16/struct_mux_stream.html" target="_self">MuxStream</a></td><td class="desc"></td></tr>
<tr id="row_25_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="d4/d62/struct_obj_pool.html" target="_self">ObjPool</a></td><td class="desc"></td></tr>
<tr id="row_26_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_27_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_28_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_29_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_30_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_31_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_32_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_33_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_34_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_35_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_36_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_37_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_38_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_39_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_40_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="d9/d28/struct_sync_queue.html" target="_self">SyncQueue</a></td><td class="desc"></td></tr>
<tr id="row_41_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="dc/df8/union_sync_queue_frame.html" target="_self">SyncQueueFrame</a></td><td class="desc"></td></tr>
<tr id="row_42_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="d2/d94/struct_sync_queue_stream.html" target="_self">SyncQueueStream</a></td><td class="desc"></td></tr>
<tr id="row_43_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="d9/db4/struct_thread_queue.html" target="_self">ThreadQueue</a></td><td class="desc"></td></tr>
<tr id="row_44_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_45_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_46_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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_47_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</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 Sep 17 2022 18:38:10 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 635 B

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: Data Structure Index</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
@ -57,16 +57,23 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">Data Structure Index</div></div>
</div><!--header-->
<div class="contents">
<div class="qindex"><a class="qindex" href="#letter_A">A</a>&#160;|&#160;<a class="qindex" href="#letter_B">B</a>&#160;|&#160;<a class="qindex" href="#letter_C">C</a>&#160;|&#160;<a class="qindex" href="#letter_D">D</a>&#160;|&#160;<a class="qindex" href="#letter_F">F</a>&#160;|&#160;<a class="qindex" href="#letter_H">H</a>&#160;|&#160;<a class="qindex" href="#letter_I">I</a>&#160;|&#160;<a class="qindex" href="#letter_J">J</a>&#160;|&#160;<a class="qindex" href="#letter_L">L</a>&#160;|&#160;<a class="qindex" href="#letter_O">O</a>&#160;|&#160;<a class="qindex" href="#letter_R">R</a>&#160;|&#160;<a class="qindex" href="#letter_S">S</a>&#160;|&#160;<a class="qindex" href="#letter_U">U</a>&#160;|&#160;<a class="qindex" href="#letter_W">W</a>&#160;|&#160;<a class="qindex" href="#letter_X">X</a></div>
<div class="qindex"><a class="qindex" href="#letter_A">A</a>&#160;|&#160;<a class="qindex" href="#letter_B">B</a>&#160;|&#160;<a class="qindex" href="#letter_C">C</a>&#160;|&#160;<a class="qindex" href="#letter_D">D</a>&#160;|&#160;<a class="qindex" href="#letter_E">E</a>&#160;|&#160;<a class="qindex" href="#letter_F">F</a>&#160;|&#160;<a class="qindex" href="#letter_H">H</a>&#160;|&#160;<a class="qindex" href="#letter_I">I</a>&#160;|&#160;<a class="qindex" href="#letter_J">J</a>&#160;|&#160;<a class="qindex" href="#letter_K">K</a>&#160;|&#160;<a class="qindex" href="#letter_L">L</a>&#160;|&#160;<a class="qindex" href="#letter_M">M</a>&#160;|&#160;<a class="qindex" href="#letter_O">O</a>&#160;|&#160;<a class="qindex" href="#letter_R">R</a>&#160;|&#160;<a class="qindex" href="#letter_S">S</a>&#160;|&#160;<a class="qindex" href="#letter_T">T</a>&#160;|&#160;<a class="qindex" href="#letter_U">U</a>&#160;|&#160;<a class="qindex" href="#letter_W">W</a>&#160;|&#160;<a class="qindex" href="#letter_X">X</a></div>
<div class="classindex">
<dl class="classindex even">
<dt class="alphachar"><a id="letter_A" name="letter_A">A</a></dt>
@ -79,31 +86,43 @@ $(function() {
<dd><a class="el" href="d2/dc3/struct_callback_data.html">CallbackData</a></dd><dd><a class="el" href="d2/ddd/struct_compact_context.html">CompactContext</a></dd></dl>
<dl class="classindex odd">
<dt class="alphachar"><a id="letter_D" name="letter_D">D</a></dt>
<dd><a class="el" href="d4/da0/struct_default_context.html">DefaultContext</a></dd></dl>
<dd><a class="el" href="d4/da0/struct_default_context.html">DefaultContext</a></dd><dd><a class="el" href="d7/dc9/struct_demuxer.html">Demuxer</a></dd><dd><a class="el" href="d9/d6c/struct_demux_msg.html">DemuxMsg</a></dd></dl>
<dl class="classindex even">
<dt class="alphachar"><a id="letter_F" name="letter_F">F</a></dt>
<dd><a class="el" href="d9/de7/struct_filter_graph.html">FilterGraph</a></dd><dd><a class="el" href="d3/db7/struct_flat_context.html">FlatContext</a></dd></dl>
<dt class="alphachar"><a id="letter_E" name="letter_E">E</a></dt>
<dd><a class="el" href="db/dbb/struct_enc_stats.html">EncStats</a></dd><dd><a class="el" href="dd/d0c/struct_enc_stats_component.html">EncStatsComponent</a></dd><dd><a class="el" href="da/d56/struct_enc_stats_file.html">EncStatsFile</a></dd></dl>
<dl class="classindex odd">
<dt class="alphachar"><a id="letter_F" name="letter_F">F</a></dt>
<dd><a class="el" href="da/d62/struct_fifo_elem.html">FifoElem</a></dd><dd><a class="el" href="d9/de7/struct_filter_graph.html">FilterGraph</a></dd><dd><a class="el" href="d3/db7/struct_flat_context.html">FlatContext</a></dd><dd><a class="el" href="d7/d60/struct_frame_data.html">FrameData</a></dd></dl>
<dl class="classindex even">
<dt class="alphachar"><a id="letter_H" name="letter_H">H</a></dt>
<dd><a class="el" href="de/dc7/struct_h_w_device.html">HWDevice</a></dd></dl>
<dl class="classindex even">
<dl class="classindex odd">
<dt class="alphachar"><a id="letter_I" name="letter_I">I</a></dt>
<dd><a class="el" href="da/d4f/struct_i_n_i_context.html">INIContext</a></dd><dd><a class="el" href="d8/d99/struct_input_file.html">InputFile</a></dd><dd><a class="el" href="d7/d0c/struct_input_filter.html">InputFilter</a></dd><dd><a class="el" href="d3/d6e/struct_input_stream.html">InputStream</a></dd></dl>
<dl class="classindex odd">
<dl class="classindex even">
<dt class="alphachar"><a id="letter_J" name="letter_J">J</a></dt>
<dd><a class="el" href="d6/d53/struct_j_s_o_n_context.html">JSONContext</a></dd></dl>
<dl class="classindex odd">
<dt class="alphachar"><a id="letter_K" name="letter_K">K</a></dt>
<dd><a class="el" href="d3/da2/struct_keyframe_force_ctx.html">KeyframeForceCtx</a></dd></dl>
<dl class="classindex even">
<dt class="alphachar"><a id="letter_L" name="letter_L">L</a></dt>
<dd><a class="el" href="dd/d15/struct_log_buffer.html">LogBuffer</a></dd></dl>
<dd><a class="el" href="dc/d16/struct_last_frame_duration.html">LastFrameDuration</a></dd><dd><a class="el" href="dd/d15/struct_log_buffer.html">LogBuffer</a></dd></dl>
<dl class="classindex odd">
<dt class="alphachar"><a id="letter_O" name="letter_O">O</a></dt>
<dd><a class="el" href="d3/d1d/struct_option.html">Option</a></dd><dd><a class="el" href="dc/d1e/struct_option_def.html">OptionDef</a></dd><dd><a class="el" href="d6/d69/struct_option_group.html">OptionGroup</a></dd><dd><a class="el" href="db/dd7/struct_option_group_def.html">OptionGroupDef</a></dd><dd><a class="el" href="d7/d4f/struct_option_group_list.html">OptionGroupList</a></dd><dd><a class="el" href="db/db5/struct_option_parse_context.html">OptionParseContext</a></dd><dd><a class="el" href="df/d77/struct_options_context.html">OptionsContext</a></dd><dd><a class="el" href="de/df2/struct_output_file.html">OutputFile</a></dd><dd><a class="el" href="d0/d0f/struct_output_filter.html">OutputFilter</a></dd><dd><a class="el" href="db/dde/struct_output_stream.html">OutputStream</a></dd></dl>
<dt class="alphachar"><a id="letter_M" name="letter_M">M</a></dt>
<dd><a class="el" href="de/d29/struct_muxer.html">Muxer</a></dd><dd><a class="el" href="d6/d16/struct_mux_stream.html">MuxStream</a></dd></dl>
<dl class="classindex even">
<dt class="alphachar"><a id="letter_O" name="letter_O">O</a></dt>
<dd><a class="el" href="d4/d62/struct_obj_pool.html">ObjPool</a></dd><dd><a class="el" href="d3/d1d/struct_option.html">Option</a></dd><dd><a class="el" href="dc/d1e/struct_option_def.html">OptionDef</a></dd><dd><a class="el" href="d6/d69/struct_option_group.html">OptionGroup</a></dd><dd><a class="el" href="db/dd7/struct_option_group_def.html">OptionGroupDef</a></dd><dd><a class="el" href="d7/d4f/struct_option_group_list.html">OptionGroupList</a></dd><dd><a class="el" href="db/db5/struct_option_parse_context.html">OptionParseContext</a></dd><dd><a class="el" href="df/d77/struct_options_context.html">OptionsContext</a></dd><dd><a class="el" href="de/df2/struct_output_file.html">OutputFile</a></dd><dd><a class="el" href="d0/d0f/struct_output_filter.html">OutputFilter</a></dd><dd><a class="el" href="db/dde/struct_output_stream.html">OutputStream</a></dd></dl>
<dl class="classindex odd">
<dt class="alphachar"><a id="letter_R" name="letter_R">R</a></dt>
<dd><a class="el" href="d8/dee/struct_read_interval.html">ReadInterval</a></dd></dl>
<dl class="classindex odd">
<dl class="classindex even">
<dt class="alphachar"><a id="letter_S" name="letter_S">S</a></dt>
<dd><a class="el" href="d9/d11/structsection.html">section</a></dd><dd><a class="el" href="dd/da5/struct_specifier_opt.html">SpecifierOpt</a></dd><dd><a class="el" href="db/d60/struct_stream_map.html">StreamMap</a></dd><dd><a class="el" href="d4/dfd/struct_input_stream_1_1sub2video.html">InputStream::sub2video</a></dd></dl>
<dd><a class="el" href="d9/d11/structsection.html">section</a></dd><dd><a class="el" href="dd/da5/struct_specifier_opt.html">SpecifierOpt</a></dd><dd><a class="el" href="db/d60/struct_stream_map.html">StreamMap</a></dd><dd><a class="el" href="d4/dfd/struct_input_stream_1_1sub2video.html">InputStream::sub2video</a></dd><dd><a class="el" href="d9/d28/struct_sync_queue.html">SyncQueue</a></dd><dd><a class="el" href="dc/df8/union_sync_queue_frame.html">SyncQueueFrame</a></dd><dd><a class="el" href="d2/d94/struct_sync_queue_stream.html">SyncQueueStream</a></dd></dl>
<dl class="classindex odd">
<dt class="alphachar"><a id="letter_T" name="letter_T">T</a></dt>
<dd><a class="el" href="d9/db4/struct_thread_queue.html">ThreadQueue</a></dd></dl>
<dl class="classindex even">
<dt class="alphachar"><a id="letter_U" name="letter_U">U</a></dt>
<dd><a class="el" href="d9/d6d/structunit__value.html">unit_value</a></dd></dl>
@ -117,7 +136,7 @@ $(function() {
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Sep 17 2022 18:38:10 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: ffmpegkit_abidetect.h File Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'Search','.html');
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
</div><!-- top -->
@ -102,7 +109,7 @@ Functions</h2></td></tr>
</table>
<h2 class="groupheader">Macro Definition Documentation</h2>
<a id="a8542ed76f69cc1f6905ec045deb67b19" name="a8542ed76f69cc1f6905ec045deb67b19"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8542ed76f69cc1f6905ec045deb67b19">&#9670;&nbsp;</a></span>ABI_ARM</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a8542ed76f69cc1f6905ec045deb67b19">&#9670;&#160;</a></span>ABI_ARM</h2>
<div class="memitem">
<div class="memproto">
@ -112,14 +119,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Represents armeabi ABI. </p>
<p>Represents armeabi ABI. </p>
<p class="definition">Definition at line <a class="el" href="../../d0/d07/ffmpegkit__abidetect_8h_source.html#l00033">33</a> of file <a class="el" href="../../d0/d07/ffmpegkit__abidetect_8h_source.html">ffmpegkit_abidetect.h</a>.</p>
</div>
</div>
<a id="aecf047197c8d184994bd8391c89dafd9" name="aecf047197c8d184994bd8391c89dafd9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aecf047197c8d184994bd8391c89dafd9">&#9670;&nbsp;</a></span>ABI_ARM64_V8A</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aecf047197c8d184994bd8391c89dafd9">&#9670;&#160;</a></span>ABI_ARM64_V8A</h2>
<div class="memitem">
<div class="memproto">
@ -129,14 +136,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Represents arm64-v8a ABI. </p>
<p>Represents arm64-v8a ABI. </p>
<p class="definition">Definition at line <a class="el" href="../../d0/d07/ffmpegkit__abidetect_8h_source.html#l00042">42</a> of file <a class="el" href="../../d0/d07/ffmpegkit__abidetect_8h_source.html">ffmpegkit_abidetect.h</a>.</p>
</div>
</div>
<a id="af4bd943711a852348c6fe7a850c68d9c" name="af4bd943711a852348c6fe7a850c68d9c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af4bd943711a852348c6fe7a850c68d9c">&#9670;&nbsp;</a></span>ABI_ARMV7A</h2>
<h2 class="memtitle"><span class="permalink"><a href="#af4bd943711a852348c6fe7a850c68d9c">&#9670;&#160;</a></span>ABI_ARMV7A</h2>
<div class="memitem">
<div class="memproto">
@ -146,14 +153,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Represents armeabi-v7a ABI. </p>
<p>Represents armeabi-v7a ABI. </p>
<p class="definition">Definition at line <a class="el" href="../../d0/d07/ffmpegkit__abidetect_8h_source.html#l00030">30</a> of file <a class="el" href="../../d0/d07/ffmpegkit__abidetect_8h_source.html">ffmpegkit_abidetect.h</a>.</p>
</div>
</div>
<a id="aa0528bb977fb058f35088a123f024040" name="aa0528bb977fb058f35088a123f024040"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa0528bb977fb058f35088a123f024040">&#9670;&nbsp;</a></span>ABI_ARMV7A_NEON</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aa0528bb977fb058f35088a123f024040">&#9670;&#160;</a></span>ABI_ARMV7A_NEON</h2>
<div class="memitem">
<div class="memproto">
@ -163,14 +170,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Represents armeabi-v7a ABI with NEON support. </p>
<p>Represents armeabi-v7a ABI with NEON support. </p>
<p class="definition">Definition at line <a class="el" href="../../d0/d07/ffmpegkit__abidetect_8h_source.html#l00027">27</a> of file <a class="el" href="../../d0/d07/ffmpegkit__abidetect_8h_source.html">ffmpegkit_abidetect.h</a>.</p>
</div>
</div>
<a id="ae1ac408cde1fef8015e817132c82f90f" name="ae1ac408cde1fef8015e817132c82f90f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae1ac408cde1fef8015e817132c82f90f">&#9670;&nbsp;</a></span>ABI_UNKNOWN</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ae1ac408cde1fef8015e817132c82f90f">&#9670;&#160;</a></span>ABI_UNKNOWN</h2>
<div class="memitem">
<div class="memproto">
@ -180,14 +187,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Represents not supported ABIs. </p>
<p>Represents not supported ABIs. </p>
<p class="definition">Definition at line <a class="el" href="../../d0/d07/ffmpegkit__abidetect_8h_source.html#l00045">45</a> of file <a class="el" href="../../d0/d07/ffmpegkit__abidetect_8h_source.html">ffmpegkit_abidetect.h</a>.</p>
</div>
</div>
<a id="aa8b590581b911e09a91165e1bfe1af4e" name="aa8b590581b911e09a91165e1bfe1af4e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa8b590581b911e09a91165e1bfe1af4e">&#9670;&nbsp;</a></span>ABI_X86</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aa8b590581b911e09a91165e1bfe1af4e">&#9670;&#160;</a></span>ABI_X86</h2>
<div class="memitem">
<div class="memproto">
@ -197,14 +204,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Represents x86 ABI. </p>
<p>Represents x86 ABI. </p>
<p class="definition">Definition at line <a class="el" href="../../d0/d07/ffmpegkit__abidetect_8h_source.html#l00036">36</a> of file <a class="el" href="../../d0/d07/ffmpegkit__abidetect_8h_source.html">ffmpegkit_abidetect.h</a>.</p>
</div>
</div>
<a id="a651b92d66b0514569b6c1e70ab56ccbd" name="a651b92d66b0514569b6c1e70ab56ccbd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a651b92d66b0514569b6c1e70ab56ccbd">&#9670;&nbsp;</a></span>ABI_X86_64</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a651b92d66b0514569b6c1e70ab56ccbd">&#9670;&#160;</a></span>ABI_X86_64</h2>
<div class="memitem">
<div class="memproto">
@ -214,7 +221,7 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Represents x86_64 ABI. </p>
<p>Represents x86_64 ABI. </p>
<p class="definition">Definition at line <a class="el" href="../../d0/d07/ffmpegkit__abidetect_8h_source.html#l00039">39</a> of file <a class="el" href="../../d0/d07/ffmpegkit__abidetect_8h_source.html">ffmpegkit_abidetect.h</a>.</p>
@ -222,7 +229,7 @@ Functions</h2></td></tr>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="ad6df138dfa7f0139d3bc00a128a3349f" name="ad6df138dfa7f0139d3bc00a128a3349f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad6df138dfa7f0139d3bc00a128a3349f">&#9670;&nbsp;</a></span>Java_com_arthenica_ffmpegkit_AbiDetect_getNativeAbi()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ad6df138dfa7f0139d3bc00a128a3349f">&#9670;&#160;</a></span>Java_com_arthenica_ffmpegkit_AbiDetect_getNativeAbi()</h2>
<div class="memitem">
<div class="memproto">
@ -246,7 +253,7 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Returns loaded ABI name.</p>
<p>Returns loaded ABI name.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">env</td><td>pointer to native method interface </td></tr>
@ -261,7 +268,7 @@ Functions</h2></td></tr>
</div>
</div>
<a id="a7942b894172687b98c86668b49a37356" name="a7942b894172687b98c86668b49a37356"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7942b894172687b98c86668b49a37356">&#9670;&nbsp;</a></span>Java_com_arthenica_ffmpegkit_AbiDetect_getNativeBuildConf()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a7942b894172687b98c86668b49a37356">&#9670;&#160;</a></span>Java_com_arthenica_ffmpegkit_AbiDetect_getNativeBuildConf()</h2>
<div class="memitem">
<div class="memproto">
@ -285,7 +292,7 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Returns build configuration for FFmpeg.</p>
<p>Returns build configuration for FFmpeg.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">env</td><td>pointer to native method interface </td></tr>
@ -300,7 +307,7 @@ Functions</h2></td></tr>
</div>
</div>
<a id="aae17a92df44b12fe7e39c93f88c3e6be" name="aae17a92df44b12fe7e39c93f88c3e6be"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aae17a92df44b12fe7e39c93f88c3e6be">&#9670;&nbsp;</a></span>Java_com_arthenica_ffmpegkit_AbiDetect_getNativeCpuAbi()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aae17a92df44b12fe7e39c93f88c3e6be">&#9670;&#160;</a></span>Java_com_arthenica_ffmpegkit_AbiDetect_getNativeCpuAbi()</h2>
<div class="memitem">
<div class="memproto">
@ -324,7 +331,7 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Returns ABI name of the running cpu.</p>
<p>Returns ABI name of the running cpu.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">env</td><td>pointer to native method interface </td></tr>
@ -339,7 +346,7 @@ Functions</h2></td></tr>
</div>
</div>
<a id="a76872252b93761eeef4e67b9995e61b1" name="a76872252b93761eeef4e67b9995e61b1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a76872252b93761eeef4e67b9995e61b1">&#9670;&nbsp;</a></span>Java_com_arthenica_ffmpegkit_AbiDetect_isNativeLTSBuild()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a76872252b93761eeef4e67b9995e61b1">&#9670;&#160;</a></span>Java_com_arthenica_ffmpegkit_AbiDetect_isNativeLTSBuild()</h2>
<div class="memitem">
<div class="memproto">
@ -363,8 +370,8 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Class: com_arthenica_ffmpegkit_AbiDetect Method: isNativeLTSBuild Signature: ()Z</p>
<p >Returns whether FFmpegKit release is a long term release or not.</p>
<p>Class: com_arthenica_ffmpegkit_AbiDetect Method: isNativeLTSBuild Signature: ()Z</p>
<p>Returns whether FFmpegKit release is a long term release or not.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">env</td><td>pointer to native method interface </td></tr>
@ -381,7 +388,7 @@ Functions</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Sep 17 2022 18:38:10 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: ffmpegkit_abidetect.h Source File</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'Search','.html');
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
@ -57,9 +57,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
@ -130,14 +137,14 @@ $(function() {
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="preprocessor">#endif </span><span class="comment">/* FFMPEG_KIT_ABIDETECT_H */</span><span class="preprocessor"></span></div>
<div class="ttc" id="affmpegkit_8h_html"><div class="ttname"><a href="../../d8/dee/ffmpegkit_8h.html">ffmpegkit.h</a></div></div>
<div class="ttc" id="affmpegkit__abidetect_8h_html_a76872252b93761eeef4e67b9995e61b1"><div class="ttname"><a href="../../d0/d07/ffmpegkit__abidetect_8h.html#a76872252b93761eeef4e67b9995e61b1">Java_com_arthenica_ffmpegkit_AbiDetect_isNativeLTSBuild</a></div><div class="ttdeci">JNIEXPORT jboolean JNICALL Java_com_arthenica_ffmpegkit_AbiDetect_isNativeLTSBuild(JNIEnv *, jclass)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d94/ffmpegkit__abidetect_8c_source.html#l00127">ffmpegkit_abidetect.c:127</a></div></div>
<div class="ttc" id="affmpegkit__abidetect_8h_html_a7942b894172687b98c86668b49a37356"><div class="ttname"><a href="../../d0/d07/ffmpegkit__abidetect_8h.html#a7942b894172687b98c86668b49a37356">Java_com_arthenica_ffmpegkit_AbiDetect_getNativeBuildConf</a></div><div class="ttdeci">JNIEXPORT jstring JNICALL Java_com_arthenica_ffmpegkit_AbiDetect_getNativeBuildConf(JNIEnv *, jclass)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d94/ffmpegkit__abidetect_8c_source.html#l00142">ffmpegkit_abidetect.c:142</a></div></div>
<div class="ttc" id="affmpegkit__abidetect_8h_html_aae17a92df44b12fe7e39c93f88c3e6be"><div class="ttname"><a href="../../d0/d07/ffmpegkit__abidetect_8h.html#aae17a92df44b12fe7e39c93f88c3e6be">Java_com_arthenica_ffmpegkit_AbiDetect_getNativeCpuAbi</a></div><div class="ttdeci">JNIEXPORT jstring JNICALL Java_com_arthenica_ffmpegkit_AbiDetect_getNativeCpuAbi(JNIEnv *, jclass)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d94/ffmpegkit__abidetect_8c_source.html#l00093">ffmpegkit_abidetect.c:93</a></div></div>
<div class="ttc" id="affmpegkit__abidetect_8h_html_ad6df138dfa7f0139d3bc00a128a3349f"><div class="ttname"><a href="../../d0/d07/ffmpegkit__abidetect_8h.html#ad6df138dfa7f0139d3bc00a128a3349f">Java_com_arthenica_ffmpegkit_AbiDetect_getNativeAbi</a></div><div class="ttdeci">JNIEXPORT jstring JNICALL Java_com_arthenica_ffmpegkit_AbiDetect_getNativeAbi(JNIEnv *, jclass)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d94/ffmpegkit__abidetect_8c_source.html#l00070">ffmpegkit_abidetect.c:70</a></div></div>
<div class="ttc" id="affmpegkit__abidetect_8h_html_a76872252b93761eeef4e67b9995e61b1"><div class="ttname"><a href="../../d0/d07/ffmpegkit__abidetect_8h.html#a76872252b93761eeef4e67b9995e61b1">Java_com_arthenica_ffmpegkit_AbiDetect_isNativeLTSBuild</a></div><div class="ttdeci">JNIEXPORT jboolean JNICALL Java_com_arthenica_ffmpegkit_AbiDetect_isNativeLTSBuild(JNIEnv *, jclass)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d94/ffmpegkit__abidetect_8c_source.html#l00127">ffmpegkit_abidetect.c:127</a></div></div>
<div class="ttc" id="affmpegkit__abidetect_8h_html_a7942b894172687b98c86668b49a37356"><div class="ttname"><a href="../../d0/d07/ffmpegkit__abidetect_8h.html#a7942b894172687b98c86668b49a37356">Java_com_arthenica_ffmpegkit_AbiDetect_getNativeBuildConf</a></div><div class="ttdeci">JNIEXPORT jstring JNICALL Java_com_arthenica_ffmpegkit_AbiDetect_getNativeBuildConf(JNIEnv *, jclass)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d94/ffmpegkit__abidetect_8c_source.html#l00142">ffmpegkit_abidetect.c:142</a></div></div>
<div class="ttc" id="affmpegkit__abidetect_8h_html_aae17a92df44b12fe7e39c93f88c3e6be"><div class="ttname"><a href="../../d0/d07/ffmpegkit__abidetect_8h.html#aae17a92df44b12fe7e39c93f88c3e6be">Java_com_arthenica_ffmpegkit_AbiDetect_getNativeCpuAbi</a></div><div class="ttdeci">JNIEXPORT jstring JNICALL Java_com_arthenica_ffmpegkit_AbiDetect_getNativeCpuAbi(JNIEnv *, jclass)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d94/ffmpegkit__abidetect_8c_source.html#l00093">ffmpegkit_abidetect.c:93</a></div></div>
<div class="ttc" id="affmpegkit__abidetect_8h_html_ad6df138dfa7f0139d3bc00a128a3349f"><div class="ttname"><a href="../../d0/d07/ffmpegkit__abidetect_8h.html#ad6df138dfa7f0139d3bc00a128a3349f">Java_com_arthenica_ffmpegkit_AbiDetect_getNativeAbi</a></div><div class="ttdeci">JNIEXPORT jstring JNICALL Java_com_arthenica_ffmpegkit_AbiDetect_getNativeAbi(JNIEnv *, jclass)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d94/ffmpegkit__abidetect_8c_source.html#l00070">ffmpegkit_abidetect.c:70</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Sep 17 2022 18:38:09 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: OutputFilter Struct Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'Search','.html');
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
</div><!-- top -->
@ -106,10 +113,10 @@ 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#l00304">304</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#l00344">344</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="aaf75618d5c17545f762fa3af3f439340" name="aaf75618d5c17545f762fa3af3f439340"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaf75618d5c17545f762fa3af3f439340">&#9670;&nbsp;</a></span>ch_layout</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aaf75618d5c17545f762fa3af3f439340">&#9670;&#160;</a></span>ch_layout</h2>
<div class="memitem">
<div class="memproto">
@ -120,12 +127,12 @@ 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#l00319">319</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#l00359">359</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a9ff26552ee22fefa55f8194768247a5c" name="a9ff26552ee22fefa55f8194768247a5c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9ff26552ee22fefa55f8194768247a5c">&#9670;&nbsp;</a></span>ch_layouts</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a9ff26552ee22fefa55f8194768247a5c">&#9670;&#160;</a></span>ch_layouts</h2>
<div class="memitem">
<div class="memproto">
@ -136,12 +143,12 @@ 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#l00324">324</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#l00364">364</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a52b3bac2e051f48e5eabbff6a227881c" name="a52b3bac2e051f48e5eabbff6a227881c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a52b3bac2e051f48e5eabbff6a227881c">&#9670;&nbsp;</a></span>filter</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a52b3bac2e051f48e5eabbff6a227881c">&#9670;&#160;</a></span>filter</h2>
<div class="memitem">
<div class="memproto">
@ -152,12 +159,12 @@ 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#l00305">305</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#l00345">345</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="aeba350050d2035d755254154e6551c49" name="aeba350050d2035d755254154e6551c49"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aeba350050d2035d755254154e6551c49">&#9670;&nbsp;</a></span>format</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aeba350050d2035d755254154e6551c49">&#9670;&#160;</a></span>format</h2>
<div class="memitem">
<div class="memproto">
@ -168,12 +175,12 @@ 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#l00317">317</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#l00357">357</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a8bef5b1f7e6b00ab4128cfcabccd3c50" name="a8bef5b1f7e6b00ab4128cfcabccd3c50"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8bef5b1f7e6b00ab4128cfcabccd3c50">&#9670;&nbsp;</a></span>formats</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a8bef5b1f7e6b00ab4128cfcabccd3c50">&#9670;&#160;</a></span>formats</h2>
<div class="memitem">
<div class="memproto">
@ -184,12 +191,12 @@ 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#l00323">323</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#l00363">363</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="ad45013a89f85087d03166652a94d1453" name="ad45013a89f85087d03166652a94d1453"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad45013a89f85087d03166652a94d1453">&#9670;&nbsp;</a></span>frame_rate</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ad45013a89f85087d03166652a94d1453">&#9670;&#160;</a></span>frame_rate</h2>
<div class="memitem">
<div class="memproto">
@ -200,12 +207,12 @@ 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#l00316">316</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#l00356">356</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="aa1e455271d4a952bc771b9951beded8e" name="aa1e455271d4a952bc771b9951beded8e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa1e455271d4a952bc771b9951beded8e">&#9670;&nbsp;</a></span>graph</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aa1e455271d4a952bc771b9951beded8e">&#9670;&#160;</a></span>graph</h2>
<div class="memitem">
<div class="memproto">
@ -216,12 +223,12 @@ 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#l00307">307</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#l00347">347</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="aaf9223843b6d814783f74c85b38de080" name="aaf9223843b6d814783f74c85b38de080"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaf9223843b6d814783f74c85b38de080">&#9670;&nbsp;</a></span>height</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aaf9223843b6d814783f74c85b38de080">&#9670;&#160;</a></span>height</h2>
<div class="memitem">
<div class="memproto">
@ -232,12 +239,12 @@ 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#l00315">315</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#l00355">355</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a7713667d07c3f7605e6dd24f0ca19940" name="a7713667d07c3f7605e6dd24f0ca19940"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7713667d07c3f7605e6dd24f0ca19940">&#9670;&nbsp;</a></span>name</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a7713667d07c3f7605e6dd24f0ca19940">&#9670;&#160;</a></span>name</h2>
<div class="memitem">
<div class="memproto">
@ -248,12 +255,12 @@ 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#l00308">308</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#l00348">348</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a2d283eee3e140f822b5eb381890ba035" name="a2d283eee3e140f822b5eb381890ba035"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2d283eee3e140f822b5eb381890ba035">&#9670;&nbsp;</a></span>ost</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a2d283eee3e140f822b5eb381890ba035">&#9670;&#160;</a></span>ost</h2>
<div class="memitem">
<div class="memproto">
@ -264,12 +271,12 @@ 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#l00306">306</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#l00346">346</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a1571021ae59382241c925f7ee613cd7d" name="a1571021ae59382241c925f7ee613cd7d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1571021ae59382241c925f7ee613cd7d">&#9670;&nbsp;</a></span>out_tmp</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a1571021ae59382241c925f7ee613cd7d">&#9670;&#160;</a></span>out_tmp</h2>
<div class="memitem">
<div class="memproto">
@ -280,12 +287,12 @@ 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#l00311">311</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#l00351">351</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="ab0be1ec413ca98912667f1bf76fd2588" name="ab0be1ec413ca98912667f1bf76fd2588"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab0be1ec413ca98912667f1bf76fd2588">&#9670;&nbsp;</a></span>sample_rate</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ab0be1ec413ca98912667f1bf76fd2588">&#9670;&#160;</a></span>sample_rate</h2>
<div class="memitem">
<div class="memproto">
@ -296,12 +303,12 @@ 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#l00318">318</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#l00358">358</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="aca41b2f858937cc98ab36b19e50f9251" name="aca41b2f858937cc98ab36b19e50f9251"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aca41b2f858937cc98ab36b19e50f9251">&#9670;&nbsp;</a></span>sample_rates</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aca41b2f858937cc98ab36b19e50f9251">&#9670;&#160;</a></span>sample_rates</h2>
<div class="memitem">
<div class="memproto">
@ -312,12 +319,12 @@ 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#l00325">325</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#l00365">365</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="aed4c46a5df26ff71f3f718a0056af294" name="aed4c46a5df26ff71f3f718a0056af294"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aed4c46a5df26ff71f3f718a0056af294">&#9670;&nbsp;</a></span>type</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aed4c46a5df26ff71f3f718a0056af294">&#9670;&#160;</a></span>type</h2>
<div class="memitem">
<div class="memproto">
@ -328,12 +335,12 @@ 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#l00312">312</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#l00352">352</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a0a621d752f3ab33e67f0a8f22bee4118" name="a0a621d752f3ab33e67f0a8f22bee4118"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0a621d752f3ab33e67f0a8f22bee4118">&#9670;&nbsp;</a></span>width</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a0a621d752f3ab33e67f0a8f22bee4118">&#9670;&#160;</a></span>width</h2>
<div class="memitem">
<div class="memproto">
@ -344,7 +351,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#l00315">315</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#l00355">355</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
@ -354,7 +361,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Sep 17 2022 18:38:10 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: fftools_fopen_utf8.h File Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'Search','.html');
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
</div><!-- top -->
@ -78,7 +85,7 @@ Functions</h2></td></tr>
</table>
<h2 class="groupheader">Function Documentation</h2>
<a id="a3eed39c4bd5135d3629a46f9f2c65b4b" name="a3eed39c4bd5135d3629a46f9f2c65b4b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3eed39c4bd5135d3629a46f9f2c65b4b">&#9670;&nbsp;</a></span>fopen_utf8()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a3eed39c4bd5135d3629a46f9f2c65b4b">&#9670;&#160;</a></span>fopen_utf8()</h2>
<div class="memitem">
<div class="memproto">
@ -118,7 +125,7 @@ Functions</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Sep 17 2022 18:38:10 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: fftools_fopen_utf8.h Source File</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'Search','.html');
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
@ -57,9 +57,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
@ -145,11 +152,11 @@ $(function() {
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> </div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="preprocessor">#endif </span><span class="comment">/* FFTOOLS_FOPEN_UTF8_H */</span><span class="preprocessor"></span></div>
<div class="ttc" id="afftools__fopen__utf8_8h_html_a3eed39c4bd5135d3629a46f9f2c65b4b"><div class="ttname"><a href="../../d1/d9f/fftools__fopen__utf8_8h.html#a3eed39c4bd5135d3629a46f9f2c65b4b">fopen_utf8</a></div><div class="ttdeci">static FILE * fopen_utf8(const char *path, const char *mode)</div><div class="ttdef"><b>Definition:</b> <a href="../../d1/d9f/fftools__fopen__utf8_8h_source.html#l00073">fftools_fopen_utf8.h:73</a></div></div>
<div class="ttc" id="afftools__fopen__utf8_8h_html_a3eed39c4bd5135d3629a46f9f2c65b4b"><div class="ttname"><a href="../../d1/d9f/fftools__fopen__utf8_8h.html#a3eed39c4bd5135d3629a46f9f2c65b4b">fopen_utf8</a></div><div class="ttdeci">static FILE * fopen_utf8(const char *path, const char *mode)</div><div class="ttdef"><b>Definition</b> <a href="../../d1/d9f/fftools__fopen__utf8_8h_source.html#l00073">fftools_fopen_utf8.h:73</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Sep 17 2022 18:38:10 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: WriterContext Struct Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'Search','.html');
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
</div><!-- top -->
@ -72,13 +79,13 @@ $(function() {
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a>
Data Fields</h2></td></tr>
<tr class="memitem:a9a134275e24f0ed7ceb2108e144b031d"><td class="memItemLeft" align="right" valign="top">const AVClass *&#160;</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">&#160;</td><td class="mdescRight">class of the writer <a href="../../d1/da2/struct_writer_context.html#a9a134275e24f0ed7ceb2108e144b031d">More...</a><br /></td></tr>
<tr class="memdesc:a9a134275e24f0ed7ceb2108e144b031d"><td class="mdescLeft">&#160;</td><td class="mdescRight">class of the writer <br /></td></tr>
<tr class="separator:a9a134275e24f0ed7ceb2108e144b031d"><td class="memSeparator" colspan="2">&#160;</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> *&#160;</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">&#160;</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="memdesc:ae5665d3128f57b9024da5d5d029c83a4"><td class="mdescLeft">&#160;</td><td class="mdescRight">the <a class="el" href="../../d6/dff/struct_writer.html">Writer</a> of which this is an instance <br /></td></tr>
<tr class="separator:ae5665d3128f57b9024da5d5d029c83a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a74ab2aea4c4a559594862656adfbf607"><td class="memItemLeft" align="right" valign="top">AVIOContext *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/da2/struct_writer_context.html#a74ab2aea4c4a559594862656adfbf607">avio</a></td></tr>
<tr class="memdesc:a74ab2aea4c4a559594862656adfbf607"><td class="mdescLeft">&#160;</td><td class="mdescRight">the I/O context used to write <a href="../../d1/da2/struct_writer_context.html#a74ab2aea4c4a559594862656adfbf607">More...</a><br /></td></tr>
<tr class="memdesc:a74ab2aea4c4a559594862656adfbf607"><td class="mdescLeft">&#160;</td><td class="mdescRight">the I/O context used to write <br /></td></tr>
<tr class="separator:a74ab2aea4c4a559594862656adfbf607"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a678b264a45a1e75928df93fcbe4f1b6d"><td class="memItemLeft" align="right" valign="top">void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/da2/struct_writer_context.html#a678b264a45a1e75928df93fcbe4f1b6d">writer_w8</a> )(<a class="el" href="../../d1/da2/struct_writer_context.html">WriterContext</a> *wctx, <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> b)</td></tr>
<tr class="separator:a678b264a45a1e75928df93fcbe4f1b6d"><td class="memSeparator" colspan="2">&#160;</td></tr>
@ -87,19 +94,19 @@ Data Fields</h2></td></tr>
<tr class="memitem:a76ac129335e9ad7a46a27d244b86d330"><td class="memItemLeft" align="right" valign="top">void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/da2/struct_writer_context.html#a76ac129335e9ad7a46a27d244b86d330">writer_printf</a> )(<a class="el" href="../../d1/da2/struct_writer_context.html">WriterContext</a> *wctx, const char *fmt,...)</td></tr>
<tr class="separator:a76ac129335e9ad7a46a27d244b86d330"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a366a8bd11cf898f02beca2f14478ed97"><td class="memItemLeft" align="right" valign="top">char *&#160;</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">&#160;</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="memdesc:a366a8bd11cf898f02beca2f14478ed97"><td class="mdescLeft">&#160;</td><td class="mdescRight">name of this writer instance <br /></td></tr>
<tr class="separator:a366a8bd11cf898f02beca2f14478ed97"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5b071322a7adc4478ba1c381bdc68202"><td class="memItemLeft" align="right" valign="top">void *&#160;</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">&#160;</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="memdesc:a5b071322a7adc4478ba1c381bdc68202"><td class="mdescLeft">&#160;</td><td class="mdescRight">private data for use by the filter <br /></td></tr>
<tr class="separator:a5b071322a7adc4478ba1c381bdc68202"><td class="memSeparator" colspan="2">&#160;</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> *&#160;</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">&#160;</td><td class="mdescRight">array containing all sections <a href="../../d1/da2/struct_writer_context.html#aa7cd84605a2d2d861d6540e07fa8dd73">More...</a><br /></td></tr>
<tr class="memdesc:aa7cd84605a2d2d861d6540e07fa8dd73"><td class="mdescLeft">&#160;</td><td class="mdescRight">array containing all sections <br /></td></tr>
<tr class="separator:aa7cd84605a2d2d861d6540e07fa8dd73"><td class="memSeparator" colspan="2">&#160;</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>&#160;</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">&#160;</td><td class="mdescRight">number of sections <a href="../../d1/da2/struct_writer_context.html#a802ea030a8d391905498183a514a7e0c">More...</a><br /></td></tr>
<tr class="memdesc:a802ea030a8d391905498183a514a7e0c"><td class="mdescLeft">&#160;</td><td class="mdescRight">number of sections <br /></td></tr>
<tr class="separator:a802ea030a8d391905498183a514a7e0c"><td class="memSeparator" colspan="2">&#160;</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>&#160;</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">&#160;</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="memdesc:a70f4367919173df339905042a73df0f4"><td class="mdescLeft">&#160;</td><td class="mdescRight">current level, starting from 0 <br /></td></tr>
<tr class="separator:a70f4367919173df339905042a73df0f4"><td class="memSeparator" colspan="2">&#160;</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>&#160;</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">&#160;</td></tr>
@ -108,13 +115,13 @@ Data Fields</h2></td></tr>
<tr class="memitem:a5c4e2da0240ebfea6358065cfc923e4e"><td class="memItemLeft" align="right" valign="top">AVBPrint&#160;</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">&#160;</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>&#160;</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">&#160;</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="memdesc:a735c05fb40aac83eeaa72ec9f3bd9c8d"><td class="mdescLeft">&#160;</td><td class="mdescRight">number of the packet section in case we are in "packets_and_frames" section <br /></td></tr>
<tr class="separator:a735c05fb40aac83eeaa72ec9f3bd9c8d"><td class="memSeparator" colspan="2">&#160;</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>&#160;</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">&#160;</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="memdesc:a0a6292cb0341b8c989f463d17c2b1c49"><td class="mdescLeft">&#160;</td><td class="mdescRight">number of the frame section in case we are in "packets_and_frames" section <br /></td></tr>
<tr class="separator:a0a6292cb0341b8c989f463d17c2b1c49"><td class="memSeparator" colspan="2">&#160;</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>&#160;</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">&#160;</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="memdesc:a70cdd0ee0389abba9865de653aac4de1"><td class="mdescLeft">&#160;</td><td class="mdescRight">nb_section_packet or nb_section_frame according if is_packets_and_frames <br /></td></tr>
<tr class="separator:a70cdd0ee0389abba9865de653aac4de1"><td class="memSeparator" colspan="2">&#160;</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>&#160;</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">&#160;</td></tr>
@ -125,10 +132,10 @@ 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="../../d8/d78/fftools__ffprobe_8c_source.html#l00493">493</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00506">506</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="a74ab2aea4c4a559594862656adfbf607" name="a74ab2aea4c4a559594862656adfbf607"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a74ab2aea4c4a559594862656adfbf607">&#9670;&nbsp;</a></span>avio</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a74ab2aea4c4a559594862656adfbf607">&#9670;&#160;</a></span>avio</h2>
<div class="memitem">
<div class="memproto">
@ -141,12 +148,12 @@ Data Fields</h2></td></tr>
<p>the I/O context used to write </p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00496">496</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00509">509</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="a9a134275e24f0ed7ceb2108e144b031d" name="a9a134275e24f0ed7ceb2108e144b031d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9a134275e24f0ed7ceb2108e144b031d">&#9670;&nbsp;</a></span>class</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a9a134275e24f0ed7ceb2108e144b031d">&#9670;&#160;</a></span>class</h2>
<div class="memitem">
<div class="memproto">
@ -159,12 +166,12 @@ Data Fields</h2></td></tr>
<p>class of the writer </p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00494">494</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00507">507</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="a70f4367919173df339905042a73df0f4" name="a70f4367919173df339905042a73df0f4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a70f4367919173df339905042a73df0f4">&#9670;&nbsp;</a></span>level</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a70f4367919173df339905042a73df0f4">&#9670;&#160;</a></span>level</h2>
<div class="memitem">
<div class="memproto">
@ -177,12 +184,12 @@ Data Fields</h2></td></tr>
<p>current level, starting from 0 </p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00508">508</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00521">521</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="a366a8bd11cf898f02beca2f14478ed97" name="a366a8bd11cf898f02beca2f14478ed97"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a366a8bd11cf898f02beca2f14478ed97">&#9670;&nbsp;</a></span>name</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a366a8bd11cf898f02beca2f14478ed97">&#9670;&#160;</a></span>name</h2>
<div class="memitem">
<div class="memproto">
@ -195,12 +202,12 @@ Data Fields</h2></td></tr>
<p>name of this writer instance </p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00502">502</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00515">515</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="a146664adf19a884f214fe3729343dc1a" name="a146664adf19a884f214fe3729343dc1a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a146664adf19a884f214fe3729343dc1a">&#9670;&nbsp;</a></span>nb_item</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a146664adf19a884f214fe3729343dc1a">&#9670;&#160;</a></span>nb_item</h2>
<div class="memitem">
<div class="memproto">
@ -210,14 +217,14 @@ Data Fields</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >number of the item printed in the given section, starting from 0 </p>
<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#l00511">511</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00524">524</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="a0a6292cb0341b8c989f463d17c2b1c49" name="a0a6292cb0341b8c989f463d17c2b1c49"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0a6292cb0341b8c989f463d17c2b1c49">&#9670;&nbsp;</a></span>nb_section_frame</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a0a6292cb0341b8c989f463d17c2b1c49">&#9670;&#160;</a></span>nb_section_frame</h2>
<div class="memitem">
<div class="memproto">
@ -230,12 +237,12 @@ Data Fields</h2></td></tr>
<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#l00519">519</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00532">532</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="a735c05fb40aac83eeaa72ec9f3bd9c8d" name="a735c05fb40aac83eeaa72ec9f3bd9c8d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a735c05fb40aac83eeaa72ec9f3bd9c8d">&#9670;&nbsp;</a></span>nb_section_packet</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a735c05fb40aac83eeaa72ec9f3bd9c8d">&#9670;&#160;</a></span>nb_section_packet</h2>
<div class="memitem">
<div class="memproto">
@ -248,12 +255,12 @@ Data Fields</h2></td></tr>
<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#l00518">518</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00531">531</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="a70cdd0ee0389abba9865de653aac4de1" name="a70cdd0ee0389abba9865de653aac4de1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a70cdd0ee0389abba9865de653aac4de1">&#9670;&nbsp;</a></span>nb_section_packet_frame</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a70cdd0ee0389abba9865de653aac4de1">&#9670;&#160;</a></span>nb_section_packet_frame</h2>
<div class="memitem">
<div class="memproto">
@ -266,12 +273,12 @@ Data Fields</h2></td></tr>
<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#l00520">520</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00533">533</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="a802ea030a8d391905498183a514a7e0c" name="a802ea030a8d391905498183a514a7e0c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a802ea030a8d391905498183a514a7e0c">&#9670;&nbsp;</a></span>nb_sections</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a802ea030a8d391905498183a514a7e0c">&#9670;&#160;</a></span>nb_sections</h2>
<div class="memitem">
<div class="memproto">
@ -284,12 +291,12 @@ Data Fields</h2></td></tr>
<p>number of sections </p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00506">506</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00519">519</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="a5b071322a7adc4478ba1c381bdc68202" name="a5b071322a7adc4478ba1c381bdc68202"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5b071322a7adc4478ba1c381bdc68202">&#9670;&nbsp;</a></span>priv</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a5b071322a7adc4478ba1c381bdc68202">&#9670;&#160;</a></span>priv</h2>
<div class="memitem">
<div class="memproto">
@ -302,12 +309,12 @@ Data Fields</h2></td></tr>
<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#l00503">503</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00516">516</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="a1a3764eca79f01c7935f6b00fb703ae9" name="a1a3764eca79f01c7935f6b00fb703ae9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1a3764eca79f01c7935f6b00fb703ae9">&#9670;&nbsp;</a></span>section</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a1a3764eca79f01c7935f6b00fb703ae9">&#9670;&#160;</a></span>section</h2>
<div class="memitem">
<div class="memproto">
@ -317,14 +324,14 @@ Data Fields</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >section per each level </p>
<p>section per each level </p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00514">514</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00527">527</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="a5c4e2da0240ebfea6358065cfc923e4e" name="a5c4e2da0240ebfea6358065cfc923e4e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5c4e2da0240ebfea6358065cfc923e4e">&#9670;&nbsp;</a></span>section_pbuf</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a5c4e2da0240ebfea6358065cfc923e4e">&#9670;&#160;</a></span>section_pbuf</h2>
<div class="memitem">
<div class="memproto">
@ -334,14 +341,14 @@ Data Fields</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >generic print buffer dedicated to each section, used by various writers </p>
<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#l00515">515</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00528">528</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="aa7cd84605a2d2d861d6540e07fa8dd73" name="aa7cd84605a2d2d861d6540e07fa8dd73"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa7cd84605a2d2d861d6540e07fa8dd73">&#9670;&nbsp;</a></span>sections</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aa7cd84605a2d2d861d6540e07fa8dd73">&#9670;&#160;</a></span>sections</h2>
<div class="memitem">
<div class="memproto">
@ -354,12 +361,12 @@ Data Fields</h2></td></tr>
<p>array containing all sections </p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00505">505</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00518">518</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="ae4d434ae00d70b9f03be447b7c8fc02b" name="ae4d434ae00d70b9f03be447b7c8fc02b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae4d434ae00d70b9f03be447b7c8fc02b">&#9670;&nbsp;</a></span>string_validation</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ae4d434ae00d70b9f03be447b7c8fc02b">&#9670;&#160;</a></span>string_validation</h2>
<div class="memitem">
<div class="memproto">
@ -370,12 +377,12 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00522">522</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00535">535</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="a347ccaf7bdb45104accb665cab1b093f" name="a347ccaf7bdb45104accb665cab1b093f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a347ccaf7bdb45104accb665cab1b093f">&#9670;&nbsp;</a></span>string_validation_replacement</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a347ccaf7bdb45104accb665cab1b093f">&#9670;&#160;</a></span>string_validation_replacement</h2>
<div class="memitem">
<div class="memproto">
@ -386,12 +393,12 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00523">523</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00536">536</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="ac2b79828ee0384f432182d1a03bf0083" name="ac2b79828ee0384f432182d1a03bf0083"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac2b79828ee0384f432182d1a03bf0083">&#9670;&nbsp;</a></span>string_validation_utf8_flags</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ac2b79828ee0384f432182d1a03bf0083">&#9670;&#160;</a></span>string_validation_utf8_flags</h2>
<div class="memitem">
<div class="memproto">
@ -402,12 +409,12 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00524">524</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00537">537</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="ae5665d3128f57b9024da5d5d029c83a4" name="ae5665d3128f57b9024da5d5d029c83a4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae5665d3128f57b9024da5d5d029c83a4">&#9670;&nbsp;</a></span>writer</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ae5665d3128f57b9024da5d5d029c83a4">&#9670;&#160;</a></span>writer</h2>
<div class="memitem">
<div class="memproto">
@ -420,12 +427,12 @@ Data Fields</h2></td></tr>
<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#l00495">495</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00508">508</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="a76ac129335e9ad7a46a27d244b86d330" name="a76ac129335e9ad7a46a27d244b86d330"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a76ac129335e9ad7a46a27d244b86d330">&#9670;&nbsp;</a></span>writer_printf</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a76ac129335e9ad7a46a27d244b86d330">&#9670;&#160;</a></span>writer_printf</h2>
<div class="memitem">
<div class="memproto">
@ -436,12 +443,12 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00500">500</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00513">513</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="a2fb73f8a9497e6bcc971cfacc81c5559" name="a2fb73f8a9497e6bcc971cfacc81c5559"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2fb73f8a9497e6bcc971cfacc81c5559">&#9670;&nbsp;</a></span>writer_put_str</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a2fb73f8a9497e6bcc971cfacc81c5559">&#9670;&#160;</a></span>writer_put_str</h2>
<div class="memitem">
<div class="memproto">
@ -452,12 +459,12 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00499">499</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00512">512</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="a678b264a45a1e75928df93fcbe4f1b6d" name="a678b264a45a1e75928df93fcbe4f1b6d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a678b264a45a1e75928df93fcbe4f1b6d">&#9670;&nbsp;</a></span>writer_w8</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a678b264a45a1e75928df93fcbe4f1b6d">&#9670;&#160;</a></span>writer_w8</h2>
<div class="memitem">
<div class="memproto">
@ -468,7 +475,7 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00498">498</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l00511">511</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
@ -478,7 +485,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Sep 17 2022 18:38:10 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: fftools_ffmpeg_hw.c File Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'Search','.html');
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
</div><!-- top -->
@ -110,7 +117,7 @@ Variables</h2></td></tr>
</table>
<h2 class="groupheader">Function Documentation</h2>
<a id="ac41be9b83ff337fa57579c8b804aad49" name="ac41be9b83ff337fa57579c8b804aad49"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac41be9b83ff337fa57579c8b804aad49">&#9670;&nbsp;</a></span>hw_device_add()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ac41be9b83ff337fa57579c8b804aad49">&#9670;&#160;</a></span>hw_device_add()</h2>
<div class="memitem">
<div class="memproto">
@ -133,12 +140,12 @@ 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#l00072">72</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#l00079">79</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="afd7a9c296e273f36897b0f4607b896a0" name="afd7a9c296e273f36897b0f4607b896a0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afd7a9c296e273f36897b0f4607b896a0">&#9670;&nbsp;</a></span>hw_device_default_name()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#afd7a9c296e273f36897b0f4607b896a0">&#9670;&#160;</a></span>hw_device_default_name()</h2>
<div class="memitem">
<div class="memproto">
@ -161,12 +168,12 @@ 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#l00087">87</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#l00094">94</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="a7b352c0afc44da703891d7538bbcf737" name="a7b352c0afc44da703891d7538bbcf737"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7b352c0afc44da703891d7538bbcf737">&#9670;&nbsp;</a></span>hw_device_free_all()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a7b352c0afc44da703891d7538bbcf737">&#9670;&#160;</a></span>hw_device_free_all()</h2>
<div class="memitem">
<div class="memproto">
@ -181,12 +188,12 @@ 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#l00306">306</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#l00313">313</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="a539c1a0fbb455ec027e6ecbabba11d3c" name="a539c1a0fbb455ec027e6ecbabba11d3c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a539c1a0fbb455ec027e6ecbabba11d3c">&#9670;&nbsp;</a></span>hw_device_get_by_name()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a539c1a0fbb455ec027e6ecbabba11d3c">&#9670;&#160;</a></span>hw_device_get_by_name()</h2>
<div class="memitem">
<div class="memproto">
@ -201,12 +208,12 @@ 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#l00062">62</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#l00069">69</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="a73e64183d7f408877039a977b84ab64d" name="a73e64183d7f408877039a977b84ab64d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a73e64183d7f408877039a977b84ab64d">&#9670;&nbsp;</a></span>hw_device_get_by_type()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a73e64183d7f408877039a977b84ab64d">&#9670;&#160;</a></span>hw_device_get_by_type()</h2>
<div class="memitem">
<div class="memproto">
@ -229,12 +236,12 @@ 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#l00055">55</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="a3fdd5667b2f22f69baa2f711b13537fb" name="a3fdd5667b2f22f69baa2f711b13537fb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3fdd5667b2f22f69baa2f711b13537fb">&#9670;&nbsp;</a></span>hw_device_init_from_string()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a3fdd5667b2f22f69baa2f711b13537fb">&#9670;&#160;</a></span>hw_device_init_from_string()</h2>
<div class="memitem">
<div class="memproto">
@ -259,12 +266,12 @@ 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#l00112">112</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#l00119">119</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="ac2df78054133e8e90276b1d12af466da" name="ac2df78054133e8e90276b1d12af466da"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac2df78054133e8e90276b1d12af466da">&#9670;&nbsp;</a></span>hw_device_init_from_type()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ac2df78054133e8e90276b1d12af466da">&#9670;&#160;</a></span>hw_device_init_from_type()</h2>
<div class="memitem">
<div class="memproto">
@ -303,12 +310,12 @@ 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#l00263">263</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#l00270">270</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="aae07987d3556e3507f0bb2e6c451ec2a" name="aae07987d3556e3507f0bb2e6c451ec2a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aae07987d3556e3507f0bb2e6c451ec2a">&#9670;&nbsp;</a></span>hw_device_match_by_codec()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aae07987d3556e3507f0bb2e6c451ec2a">&#9670;&#160;</a></span>hw_device_match_by_codec()</h2>
<div class="memitem">
<div class="memproto">
@ -331,12 +338,12 @@ 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#l00318">318</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#l00325">325</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="a77e8d12a4bdb9110a2d815b9aa5f8d02" name="a77e8d12a4bdb9110a2d815b9aa5f8d02"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a77e8d12a4bdb9110a2d815b9aa5f8d02">&#9670;&nbsp;</a></span>hw_device_setup_for_decode()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a77e8d12a4bdb9110a2d815b9aa5f8d02">&#9670;&#160;</a></span>hw_device_setup_for_decode()</h2>
<div class="memitem">
<div class="memproto">
@ -351,12 +358,12 @@ 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#l00335">335</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#l00342">342</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="a01128ebf95f6a3b130f446b13b171c52" name="a01128ebf95f6a3b130f446b13b171c52"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a01128ebf95f6a3b130f446b13b171c52">&#9670;&nbsp;</a></span>hw_device_setup_for_encode()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a01128ebf95f6a3b130f446b13b171c52">&#9670;&#160;</a></span>hw_device_setup_for_encode()</h2>
<div class="memitem">
<div class="memproto">
@ -371,12 +378,12 @@ 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#l00463">463</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#l00470">470</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="a801831a4517a8db980bbf18c6db58cad" name="a801831a4517a8db980bbf18c6db58cad"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a801831a4517a8db980bbf18c6db58cad">&#9670;&nbsp;</a></span>hw_device_setup_for_filter()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a801831a4517a8db980bbf18c6db58cad">&#9670;&#160;</a></span>hw_device_setup_for_filter()</h2>
<div class="memitem">
<div class="memproto">
@ -391,12 +398,12 @@ 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#l00569">569</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#l00576">576</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="a518f7a9a1bd1b5544a39fdbd1d925663" name="a518f7a9a1bd1b5544a39fdbd1d925663"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a518f7a9a1bd1b5544a39fdbd1d925663">&#9670;&nbsp;</a></span>hwaccel_decode_init()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a518f7a9a1bd1b5544a39fdbd1d925663">&#9670;&#160;</a></span>hwaccel_decode_init()</h2>
<div class="memitem">
<div class="memproto">
@ -411,12 +418,12 @@ 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#l00560">560</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#l00567">567</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="a5a881e2fd908765c2df11400a6c0c7d9" name="a5a881e2fd908765c2df11400a6c0c7d9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5a881e2fd908765c2df11400a6c0c7d9">&#9670;&nbsp;</a></span>hwaccel_retrieve_data()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a5a881e2fd908765c2df11400a6c0c7d9">&#9670;&#160;</a></span>hwaccel_retrieve_data()</h2>
<div class="memitem">
<div class="memproto">
@ -449,13 +456,13 @@ 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#l00518">518</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#l00525">525</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="ad66ab6371d9721a18af13707d8b2735c" name="ad66ab6371d9721a18af13707d8b2735c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad66ab6371d9721a18af13707d8b2735c">&#9670;&nbsp;</a></span>hw_devices</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ad66ab6371d9721a18af13707d8b2735c">&#9670;&#160;</a></span>hw_devices</h2>
<div class="memitem">
<div class="memproto">
@ -466,12 +473,12 @@ 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#l00046">46</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#l00053">53</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="acea1bac2a399307791945b15467b1f75" name="acea1bac2a399307791945b15467b1f75"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acea1bac2a399307791945b15467b1f75">&#9670;&nbsp;</a></span>nb_hw_devices</h2>
<h2 class="memtitle"><span class="permalink"><a href="#acea1bac2a399307791945b15467b1f75">&#9670;&#160;</a></span>nb_hw_devices</h2>
<div class="memitem">
<div class="memproto">
@ -482,14 +489,14 @@ 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#l00045">45</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#l00052">52</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 Sep 17 2022 18:38:10 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: ffprobekit.c File Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'Search','.html');
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
</div><!-- top -->
@ -94,7 +101,7 @@ Variables</h2></td></tr>
</table>
<h2 class="groupheader">Function Documentation</h2>
<a id="a640b39ead30c29ab4caac1fc28140c15" name="a640b39ead30c29ab4caac1fc28140c15"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a640b39ead30c29ab4caac1fc28140c15">&#9670;&nbsp;</a></span>addSession()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a640b39ead30c29ab4caac1fc28140c15">&#9670;&#160;</a></span>addSession()</h2>
<div class="memitem">
<div class="memproto">
@ -108,7 +115,7 @@ Variables</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Adds a session id to the session map.</p>
<p>Adds a session id to the session map.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">id</td><td>session id </td></tr>
@ -121,7 +128,7 @@ Variables</h2></td></tr>
</div>
</div>
<a id="a4a459d7e4c3cfbf3e3d38eba042a8d53" name="a4a459d7e4c3cfbf3e3d38eba042a8d53"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4a459d7e4c3cfbf3e3d38eba042a8d53">&#9670;&nbsp;</a></span>ffprobe_execute()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a4a459d7e4c3cfbf3e3d38eba042a8d53">&#9670;&#160;</a></span>ffprobe_execute()</h2>
<div class="memitem">
<div class="memproto">
@ -145,14 +152,14 @@ Variables</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Forward declaration for function defined in <a class="el" href="../../d8/d78/fftools__ffprobe_8c.html">fftools_ffprobe.c</a> </p>
<p>Forward declaration for function defined in <a class="el" href="../../d8/d78/fftools__ffprobe_8c.html">fftools_ffprobe.c</a> </p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l04050">4050</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l04096">4096</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="a1049ebb2099274feadd0cbf165e9c8ef" name="a1049ebb2099274feadd0cbf165e9c8ef"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1049ebb2099274feadd0cbf165e9c8ef">&#9670;&nbsp;</a></span>Java_com_arthenica_ffmpegkit_FFmpegKitConfig_nativeFFprobeExecute()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a1049ebb2099274feadd0cbf165e9c8ef">&#9670;&#160;</a></span>Java_com_arthenica_ffmpegkit_FFmpegKitConfig_nativeFFprobeExecute()</h2>
<div class="memitem">
<div class="memproto">
@ -188,7 +195,7 @@ Variables</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Synchronously executes FFprobe natively with arguments provided.</p>
<p>Synchronously executes FFprobe natively with arguments provided.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">env</td><td>pointer to native method interface </td></tr>
@ -205,7 +212,7 @@ Variables</h2></td></tr>
</div>
</div>
<a id="a5f236f20079b407567c62072710656b5" name="a5f236f20079b407567c62072710656b5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5f236f20079b407567c62072710656b5">&#9670;&nbsp;</a></span>removeSession()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a5f236f20079b407567c62072710656b5">&#9670;&#160;</a></span>removeSession()</h2>
<div class="memitem">
<div class="memproto">
@ -219,7 +226,7 @@ Variables</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Removes a session id from the session map.</p>
<p>Removes a session id from the session map.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">id</td><td>session id </td></tr>
@ -232,7 +239,7 @@ Variables</h2></td></tr>
</div>
</div>
<a id="ab2b13505798c32f04fd3334e399f3a2f" name="ab2b13505798c32f04fd3334e399f3a2f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab2b13505798c32f04fd3334e399f3a2f">&#9670;&nbsp;</a></span>resetMessagesInTransmit()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ab2b13505798c32f04fd3334e399f3a2f">&#9670;&#160;</a></span>resetMessagesInTransmit()</h2>
<div class="memitem">
<div class="memproto">
@ -246,7 +253,7 @@ Variables</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Resets the number of messages in transmit for this session.</p>
<p>Resets the number of messages in transmit for this session.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">id</td><td>session id </td></tr>
@ -260,7 +267,7 @@ Variables</h2></td></tr>
</div>
<h2 class="groupheader">Variable Documentation</h2>
<a id="aefb40225eb03b1329a1fe7931c312eb8" name="aefb40225eb03b1329a1fe7931c312eb8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aefb40225eb03b1329a1fe7931c312eb8">&#9670;&nbsp;</a></span>configuredLogLevel</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aefb40225eb03b1329a1fe7931c312eb8">&#9670;&#160;</a></span>configuredLogLevel</h2>
<div class="memitem">
<div class="memproto">
@ -278,14 +285,14 @@ Variables</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Holds the default log level </p>
<p>Holds the default log level </p>
<p class="definition">Definition at line <a class="el" href="../../dc/dd3/ffmpegkit_8c_source.html#l00112">112</a> of file <a class="el" href="../../dc/dd3/ffmpegkit_8c_source.html">ffmpegkit.c</a>.</p>
</div>
</div>
<a id="aab6fe9e0975fdbf6e289bf726424a6e0" name="aab6fe9e0975fdbf6e289bf726424a6e0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aab6fe9e0975fdbf6e289bf726424a6e0">&#9670;&nbsp;</a></span>globalSessionId</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aab6fe9e0975fdbf6e289bf726424a6e0">&#9670;&#160;</a></span>globalSessionId</h2>
<div class="memitem">
<div class="memproto">
@ -303,7 +310,7 @@ Variables</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Holds the id of the current session </p>
<p>Holds the id of the current session </p>
<p class="definition">Definition at line <a class="el" href="../../dc/dd3/ffmpegkit_8c_source.html#l00109">109</a> of file <a class="el" href="../../dc/dd3/ffmpegkit_8c_source.html">ffmpegkit.c</a>.</p>
@ -312,7 +319,7 @@ Variables</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Sep 17 2022 18:38:10 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: ffprobekit.c Source File</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'Search','.html');
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
@ -57,9 +57,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
@ -162,18 +169,18 @@ $(function() {
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">return</span> returnCode;</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span>}</div>
<div class="ttc" id="affmpegkit_8h_html"><div class="ttname"><a href="../../d8/dee/ffmpegkit_8h.html">ffmpegkit.h</a></div></div>
<div class="ttc" id="affmpegkit_8h_html_a6e43beaa714b1bf01ce2271440786e38"><div class="ttname"><a href="../../d8/dee/ffmpegkit_8h.html#a6e43beaa714b1bf01ce2271440786e38">LIB_NAME</a></div><div class="ttdeci">#define LIB_NAME</div><div class="ttdef"><b>Definition:</b> <a href="../../d8/dee/ffmpegkit_8h_source.html#l00033">ffmpegkit.h:33</a></div></div>
<div class="ttc" id="affprobekit_8c_html_a1049ebb2099274feadd0cbf165e9c8ef"><div class="ttname"><a href="../../d1/ddd/ffprobekit_8c.html#a1049ebb2099274feadd0cbf165e9c8ef">Java_com_arthenica_ffmpegkit_FFmpegKitConfig_nativeFFprobeExecute</a></div><div class="ttdeci">JNIEXPORT jint JNICALL Java_com_arthenica_ffmpegkit_FFmpegKitConfig_nativeFFprobeExecute(JNIEnv *env, jclass object, jlong id, jobjectArray stringArray)</div><div class="ttdef"><b>Definition:</b> <a href="../../d1/ddd/ffprobekit_8c_source.html#l00048">ffprobekit.c:48</a></div></div>
<div class="ttc" id="affprobekit_8c_html_a4a459d7e4c3cfbf3e3d38eba042a8d53"><div class="ttname"><a href="../../d1/ddd/ffprobekit_8c.html#a4a459d7e4c3cfbf3e3d38eba042a8d53">ffprobe_execute</a></div><div class="ttdeci">int ffprobe_execute(int argc, char **argv)</div><div class="ttdef"><b>Definition:</b> <a href="../../d8/d78/fftools__ffprobe_8c_source.html#l04050">fftools_ffprobe.c:4050</a></div></div>
<div class="ttc" id="affprobekit_8c_html_a5f236f20079b407567c62072710656b5"><div class="ttname"><a href="../../d1/ddd/ffprobekit_8c.html#a5f236f20079b407567c62072710656b5">removeSession</a></div><div class="ttdeci">void removeSession(long sessionId)</div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dd3/ffmpegkit_8c_source.html#l00402">ffmpegkit.c:402</a></div></div>
<div class="ttc" id="affprobekit_8c_html_a640b39ead30c29ab4caac1fc28140c15"><div class="ttname"><a href="../../d1/ddd/ffprobekit_8c.html#a640b39ead30c29ab4caac1fc28140c15">addSession</a></div><div class="ttdeci">void addSession(long sessionId)</div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dd3/ffmpegkit_8c_source.html#l00361">ffmpegkit.c:361</a></div></div>
<div class="ttc" id="affprobekit_8c_html_aab6fe9e0975fdbf6e289bf726424a6e0"><div class="ttname"><a href="../../d1/ddd/ffprobekit_8c.html#aab6fe9e0975fdbf6e289bf726424a6e0">globalSessionId</a></div><div class="ttdeci">__thread long globalSessionId</div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dd3/ffmpegkit_8c_source.html#l00109">ffmpegkit.c:109</a></div></div>
<div class="ttc" id="affprobekit_8c_html_ab2b13505798c32f04fd3334e399f3a2f"><div class="ttname"><a href="../../d1/ddd/ffprobekit_8c.html#ab2b13505798c32f04fd3334e399f3a2f">resetMessagesInTransmit</a></div><div class="ttdeci">void resetMessagesInTransmit(long sessionId)</div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dd3/ffmpegkit_8c_source.html#l00434">ffmpegkit.c:434</a></div></div>
<div class="ttc" id="affprobekit_8c_html_aefb40225eb03b1329a1fe7931c312eb8"><div class="ttname"><a href="../../d1/ddd/ffprobekit_8c.html#aefb40225eb03b1329a1fe7931c312eb8">configuredLogLevel</a></div><div class="ttdeci">int configuredLogLevel</div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dd3/ffmpegkit_8c_source.html#l00112">ffmpegkit.c:112</a></div></div>
<div class="ttc" id="affmpegkit_8h_html_a6e43beaa714b1bf01ce2271440786e38"><div class="ttname"><a href="../../d8/dee/ffmpegkit_8h.html#a6e43beaa714b1bf01ce2271440786e38">LIB_NAME</a></div><div class="ttdeci">#define LIB_NAME</div><div class="ttdef"><b>Definition</b> <a href="../../d8/dee/ffmpegkit_8h_source.html#l00033">ffmpegkit.h:33</a></div></div>
<div class="ttc" id="affprobekit_8c_html_a1049ebb2099274feadd0cbf165e9c8ef"><div class="ttname"><a href="../../d1/ddd/ffprobekit_8c.html#a1049ebb2099274feadd0cbf165e9c8ef">Java_com_arthenica_ffmpegkit_FFmpegKitConfig_nativeFFprobeExecute</a></div><div class="ttdeci">JNIEXPORT jint JNICALL Java_com_arthenica_ffmpegkit_FFmpegKitConfig_nativeFFprobeExecute(JNIEnv *env, jclass object, jlong id, jobjectArray stringArray)</div><div class="ttdef"><b>Definition</b> <a href="../../d1/ddd/ffprobekit_8c_source.html#l00048">ffprobekit.c:48</a></div></div>
<div class="ttc" id="affprobekit_8c_html_a4a459d7e4c3cfbf3e3d38eba042a8d53"><div class="ttname"><a href="../../d1/ddd/ffprobekit_8c.html#a4a459d7e4c3cfbf3e3d38eba042a8d53">ffprobe_execute</a></div><div class="ttdeci">int ffprobe_execute(int argc, char **argv)</div><div class="ttdef"><b>Definition</b> <a href="../../d8/d78/fftools__ffprobe_8c_source.html#l04096">fftools_ffprobe.c:4096</a></div></div>
<div class="ttc" id="affprobekit_8c_html_a5f236f20079b407567c62072710656b5"><div class="ttname"><a href="../../d1/ddd/ffprobekit_8c.html#a5f236f20079b407567c62072710656b5">removeSession</a></div><div class="ttdeci">void removeSession(long sessionId)</div><div class="ttdef"><b>Definition</b> <a href="../../dc/dd3/ffmpegkit_8c_source.html#l00402">ffmpegkit.c:402</a></div></div>
<div class="ttc" id="affprobekit_8c_html_a640b39ead30c29ab4caac1fc28140c15"><div class="ttname"><a href="../../d1/ddd/ffprobekit_8c.html#a640b39ead30c29ab4caac1fc28140c15">addSession</a></div><div class="ttdeci">void addSession(long sessionId)</div><div class="ttdef"><b>Definition</b> <a href="../../dc/dd3/ffmpegkit_8c_source.html#l00361">ffmpegkit.c:361</a></div></div>
<div class="ttc" id="affprobekit_8c_html_aab6fe9e0975fdbf6e289bf726424a6e0"><div class="ttname"><a href="../../d1/ddd/ffprobekit_8c.html#aab6fe9e0975fdbf6e289bf726424a6e0">globalSessionId</a></div><div class="ttdeci">__thread long globalSessionId</div><div class="ttdef"><b>Definition</b> <a href="../../dc/dd3/ffmpegkit_8c_source.html#l00109">ffmpegkit.c:109</a></div></div>
<div class="ttc" id="affprobekit_8c_html_ab2b13505798c32f04fd3334e399f3a2f"><div class="ttname"><a href="../../d1/ddd/ffprobekit_8c.html#ab2b13505798c32f04fd3334e399f3a2f">resetMessagesInTransmit</a></div><div class="ttdeci">void resetMessagesInTransmit(long sessionId)</div><div class="ttdef"><b>Definition</b> <a href="../../dc/dd3/ffmpegkit_8c_source.html#l00434">ffmpegkit.c:434</a></div></div>
<div class="ttc" id="affprobekit_8c_html_aefb40225eb03b1329a1fe7931c312eb8"><div class="ttname"><a href="../../d1/ddd/ffprobekit_8c.html#aefb40225eb03b1329a1fe7931c312eb8">configuredLogLevel</a></div><div class="ttdeci">int configuredLogLevel</div><div class="ttdef"><b>Definition</b> <a href="../../dc/dd3/ffmpegkit_8c_source.html#l00112">ffmpegkit.c:112</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Sep 17 2022 18:38:09 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: fftools_ffmpeg_filter.c File Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'Search','.html');
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
</div><!-- top -->
@ -86,8 +93,8 @@ Macros</h2></td></tr>
Functions</h2></td></tr>
<tr class="memitem:a27d07d834af2ac1187665f6cae829b66"><td class="memItemLeft" align="right" valign="top">static enum AVPixelFormat *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a27d07d834af2ac1187665f6cae829b66">get_compliance_normal_pix_fmts</a> (const AVCodec *codec, const enum AVPixelFormat default_formats[])</td></tr>
<tr class="separator:a27d07d834af2ac1187665f6cae829b66"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a46fd7d3ff0e63394a14c329d0249e0d4"><td class="memItemLeft" align="right" valign="top">enum AVPixelFormat&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a46fd7d3ff0e63394a14c329d0249e0d4">choose_pixel_fmt</a> (AVStream *st, AVCodecContext *enc_ctx, const AVCodec *codec, enum AVPixelFormat target)</td></tr>
<tr class="separator:a46fd7d3ff0e63394a14c329d0249e0d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8b677b54c3fc1c7b57a6115bb5eab079"><td class="memItemLeft" align="right" valign="top">enum AVPixelFormat&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a8b677b54c3fc1c7b57a6115bb5eab079">choose_pixel_fmt</a> (const AVCodec *codec, enum AVPixelFormat target, <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> strict_std_compliance)</td></tr>
<tr class="separator:a8b677b54c3fc1c7b57a6115bb5eab079"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adf20b1ffdd53d7fe610efc191764035d"><td class="memItemLeft" align="right" valign="top">static const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#adf20b1ffdd53d7fe610efc191764035d">choose_pix_fmts</a> (<a class="el" href="../../d0/d0f/struct_output_filter.html">OutputFilter</a> *ofilter, AVBPrint *bprint)</td></tr>
<tr class="separator:adf20b1ffdd53d7fe610efc191764035d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aac5586382c09d11ae21736fae565e52f"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#aac5586382c09d11ae21736fae565e52f">DEF_CHOOSE_FORMAT</a> (sample_fmts, enum AVSampleFormat, format, formats, AV_SAMPLE_FMT_NONE, &quot;%s&quot;, av_get_sample_fmt_name) DEF_CHOOSE_FORMAT(<a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a12ee30995b3ac94a573f01870d1289e8">sample_rates</a></td></tr>
@ -100,6 +107,14 @@ Functions</h2></td></tr>
<tr class="separator:aac51a809083360b36c142d55f9bb2f7b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a68aafc55c81956dab85081fbdc12dec6"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a68aafc55c81956dab85081fbdc12dec6">init_input_filter</a> (<a class="el" href="../../d9/de7/struct_filter_graph.html">FilterGraph</a> *fg, AVFilterInOut *in)</td></tr>
<tr class="separator:a68aafc55c81956dab85081fbdc12dec6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abed7a0bd4bb4e49c36cf055fd64314ee"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#abed7a0bd4bb4e49c36cf055fd64314ee">read_binary</a> (const char *path, uint8_t **data, <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> *len)</td></tr>
<tr class="separator:abed7a0bd4bb4e49c36cf055fd64314ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abc092a1ce29979a16eb9ebc63684662d"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#abc092a1ce29979a16eb9ebc63684662d">filter_opt_apply</a> (AVFilterContext *f, const char *key, const char *val)</td></tr>
<tr class="separator:abc092a1ce29979a16eb9ebc63684662d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af9a8465ef2f1e7aa1000ef05828c8501"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#af9a8465ef2f1e7aa1000ef05828c8501">graph_opts_apply</a> (AVFilterGraphSegment *seg)</td></tr>
<tr class="separator:af9a8465ef2f1e7aa1000ef05828c8501"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adfb0333b7585dd6e1931d86590755741"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#adfb0333b7585dd6e1931d86590755741">graph_parse</a> (AVFilterGraph *graph, const char *desc, AVFilterInOut **inputs, AVFilterInOut **outputs)</td></tr>
<tr class="separator:adfb0333b7585dd6e1931d86590755741"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afdeaca7898e15c0cb645228fd5bb9184"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#afdeaca7898e15c0cb645228fd5bb9184">init_complex_filtergraph</a> (<a class="el" href="../../d9/de7/struct_filter_graph.html">FilterGraph</a> *fg)</td></tr>
<tr class="separator:afdeaca7898e15c0cb645228fd5bb9184"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9464282dd90b2de622c38126485d1a80"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a9464282dd90b2de622c38126485d1a80">insert_trim</a> (int64_t start_time, int64_t duration, AVFilterContext **last_filter, <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> *pad_idx, const char *filter_name)</td></tr>
@ -148,7 +163,7 @@ Variables</h2></td></tr>
</table>
<h2 class="groupheader">Macro Definition Documentation</h2>
<a id="aba8e85f08c2269c623074c81f0e428d6" name="aba8e85f08c2269c623074c81f0e428d6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aba8e85f08c2269c623074c81f0e428d6">&#9670;&nbsp;</a></span>AUTO_INSERT_FILTER</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aba8e85f08c2269c623074c81f0e428d6">&#9670;&#160;</a></span>AUTO_INSERT_FILTER</h2>
<div class="memitem">
<div class="memproto">
@ -188,11 +203,11 @@ Variables</h2></td></tr>
<div class="line"> avfilter_get_by_name(filter_name), \</div>
<div class="line"> filter_name, arg, NULL, fg-&gt;graph); \</div>
<div class="line"> if (ret &lt; 0) \</div>
<div class="line"> goto fail; \</div>
<div class="line"> <span class="keywordflow">goto</span> fail; \</div>
<div class="line"> \</div>
<div class="line"> ret = avfilter_link(last_filter, pad_idx, filt_ctx, 0); \</div>
<div class="line"> if (ret &lt; 0) \</div>
<div class="line"> goto fail; \</div>
<div class="line"> <span class="keywordflow">goto</span> fail; \</div>
<div class="line"> \</div>
<div class="line"> last_filter = filt_ctx; \</div>
<div class="line"> pad_idx = 0; \</div>
@ -201,7 +216,7 @@ Variables</h2></td></tr>
</div>
</div>
<a id="a9cf53e21bfb4178eefcce6b7dd20eca2" name="a9cf53e21bfb4178eefcce6b7dd20eca2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9cf53e21bfb4178eefcce6b7dd20eca2">&#9670;&nbsp;</a></span>AUTO_INSERT_FILTER_INPUT</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a9cf53e21bfb4178eefcce6b7dd20eca2">&#9670;&#160;</a></span>AUTO_INSERT_FILTER_INPUT</h2>
<div class="memitem">
<div class="memproto">
@ -243,11 +258,11 @@ Variables</h2></td></tr>
<div class="line"> avfilter_get_by_name(filter_name), \</div>
<div class="line"> name, arg, NULL, fg-&gt;graph); \</div>
<div class="line"> if (ret &lt; 0) \</div>
<div class="line"> return ret; \</div>
<div class="line"> <span class="keywordflow">return</span> ret; \</div>
<div class="line"> \</div>
<div class="line"> ret = avfilter_link(last_filter, 0, filt_ctx, 0); \</div>
<div class="line"> if (ret &lt; 0) \</div>
<div class="line"> return ret; \</div>
<div class="line"> <span class="keywordflow">return</span> ret; \</div>
<div class="line"> \</div>
<div class="line"> last_filter = filt_ctx; \</div>
<div class="line">} <span class="keywordflow">while</span> (0)</div>
@ -255,7 +270,7 @@ Variables</h2></td></tr>
</div>
</div>
<a id="adf70c3c13bfce09e37627128b7603633" name="adf70c3c13bfce09e37627128b7603633"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adf70c3c13bfce09e37627128b7603633">&#9670;&nbsp;</a></span>DEF_CHOOSE_FORMAT</h2>
<h2 class="memtitle"><span class="permalink"><a href="#adf70c3c13bfce09e37627128b7603633">&#9670;&#160;</a></span>DEF_CHOOSE_FORMAT</h2>
<div class="memitem">
<div class="memproto">
@ -312,12 +327,12 @@ Variables</h2></td></tr>
<b>Value:</b><div class="fragment"><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> choose_ ## name (<a class="code hl_struct" href="../../d0/d0f/struct_output_filter.html">OutputFilter</a> *ofilter, AVBPrint *bprint) \</div>
<div class="line">{ \</div>
<div class="line"> if (ofilter-&gt;var == none &amp;&amp; !ofilter-&gt;supported_list) \</div>
<div class="line"> return; \</div>
<div class="line"> <span class="keywordflow">return</span>; \</div>
<div class="line"> av_bprintf(bprint, #name <span class="stringliteral">&quot;=&quot;</span>); \</div>
<div class="line"> if (ofilter-&gt;var != none) { \</div>
<div class="line"> av_bprintf(bprint, printf_format, get_name(ofilter-&gt;var)); \</div>
<div class="line"> } <span class="keywordflow">else</span> { \</div>
<div class="line"> const type *p; \</div>
<div class="line"> <span class="keyword">const</span> type *p; \</div>
<div class="line"> \</div>
<div class="line"> for (p = ofilter-&gt;supported_list; *p != none; p++) { \</div>
<div class="line"> av_bprintf(bprint, printf_format <span class="stringliteral">&quot;|&quot;</span>, get_name(*p)); \</div>
@ -327,15 +342,15 @@ Variables</h2></td></tr>
<div class="line"> } \</div>
<div class="line"> av_bprint_chars(bprint, <span class="charliteral">&#39;:&#39;</span>, 1); \</div>
<div class="line">}</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#l00304">fftools_ffmpeg.h:304</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#l00344">fftools_ffmpeg.h:344</a></div></div>
</div><!-- fragment -->
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00144">144</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00154">154</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="ad7582860b219ad64ec003d5924747d20" name="ad7582860b219ad64ec003d5924747d20"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad7582860b219ad64ec003d5924747d20">&#9670;&nbsp;</a></span>check_filter_outputs()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ad7582860b219ad64ec003d5924747d20">&#9670;&#160;</a></span>check_filter_outputs()</h2>
<div class="memitem">
<div class="memproto">
@ -350,12 +365,12 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00662">662</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00822">822</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="af90a0015e3c8a69c63f294292701d6d9" name="af90a0015e3c8a69c63f294292701d6d9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af90a0015e3c8a69c63f294292701d6d9">&#9670;&nbsp;</a></span>choose_channel_layouts()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#af90a0015e3c8a69c63f294292701d6d9">&#9670;&#160;</a></span>choose_channel_layouts()</h2>
<div class="memitem">
<div class="memproto">
@ -388,12 +403,12 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00173">173</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00183">183</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="adf20b1ffdd53d7fe610efc191764035d" name="adf20b1ffdd53d7fe610efc191764035d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adf20b1ffdd53d7fe610efc191764035d">&#9670;&nbsp;</a></span>choose_pix_fmts()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#adf20b1ffdd53d7fe610efc191764035d">&#9670;&#160;</a></span>choose_pix_fmts()</h2>
<div class="memitem">
<div class="memproto">
@ -426,12 +441,12 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00106">106</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00114">114</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="a46fd7d3ff0e63394a14c329d0249e0d4" name="a46fd7d3ff0e63394a14c329d0249e0d4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a46fd7d3ff0e63394a14c329d0249e0d4">&#9670;&nbsp;</a></span>choose_pixel_fmt()</h2>
<a id="a8b677b54c3fc1c7b57a6115bb5eab079" name="a8b677b54c3fc1c7b57a6115bb5eab079"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8b677b54c3fc1c7b57a6115bb5eab079">&#9670;&#160;</a></span>choose_pixel_fmt()</h2>
<div class="memitem">
<div class="memproto">
@ -439,26 +454,20 @@ Variables</h2></td></tr>
<tr>
<td class="memname">enum AVPixelFormat choose_pixel_fmt </td>
<td>(</td>
<td class="paramtype">AVStream *&#160;</td>
<td class="paramname"><em>st</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">AVCodecContext *&#160;</td>
<td class="paramname"><em>enc_ctx</em>, </td>
<td class="paramtype">const AVCodec *&#160;</td>
<td class="paramname"><em>codec</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const AVCodec *&#160;</td>
<td class="paramname"><em>codec</em>, </td>
<td class="paramtype">enum AVPixelFormat&#160;</td>
<td class="paramname"><em>target</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">enum AVPixelFormat&#160;</td>
<td class="paramname"><em>target</em>&#160;</td>
<td class="paramtype"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td>
<td class="paramname"><em>strict_std_compliance</em>&#160;</td>
</tr>
<tr>
<td></td>
@ -468,12 +477,12 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00072">72</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00080">80</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="a027d310ab49f2b105fc3b980a6b6c340" name="a027d310ab49f2b105fc3b980a6b6c340"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a027d310ab49f2b105fc3b980a6b6c340">&#9670;&nbsp;</a></span>cleanup_filtergraph()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a027d310ab49f2b105fc3b980a6b6c340">&#9670;&#160;</a></span>cleanup_filtergraph()</h2>
<div class="memitem">
<div class="memproto">
@ -496,12 +505,12 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00976">976</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l01102">1102</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="adfc4727f627c5abd0aa843206d046ec6" name="adfc4727f627c5abd0aa843206d046ec6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adfc4727f627c5abd0aa843206d046ec6">&#9670;&nbsp;</a></span>configure_filtergraph()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#adfc4727f627c5abd0aa843206d046ec6">&#9670;&#160;</a></span>configure_filtergraph()</h2>
<div class="memitem">
<div class="memproto">
@ -516,12 +525,12 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l01010">1010</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l01136">1136</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="abd040cc1f24edd0ee72c1bdfaa5599c2" name="abd040cc1f24edd0ee72c1bdfaa5599c2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abd040cc1f24edd0ee72c1bdfaa5599c2">&#9670;&nbsp;</a></span>configure_input_audio_filter()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#abd040cc1f24edd0ee72c1bdfaa5599c2">&#9670;&#160;</a></span>configure_input_audio_filter()</h2>
<div class="memitem">
<div class="memproto">
@ -560,12 +569,12 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00849">849</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l01009">1009</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="a8866c5d369968e1f79743e44ad4b8169" name="a8866c5d369968e1f79743e44ad4b8169"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8866c5d369968e1f79743e44ad4b8169">&#9670;&nbsp;</a></span>configure_input_filter()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a8866c5d369968e1f79743e44ad4b8169">&#9670;&#160;</a></span>configure_input_filter()</h2>
<div class="memitem">
<div class="memproto">
@ -604,12 +613,12 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00960">960</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l01086">1086</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="a9f383c04c76d00cb7fbe0c561fc54aba" name="a9f383c04c76d00cb7fbe0c561fc54aba"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9f383c04c76d00cb7fbe0c561fc54aba">&#9670;&nbsp;</a></span>configure_input_video_filter()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a9f383c04c76d00cb7fbe0c561fc54aba">&#9670;&#160;</a></span>configure_input_video_filter()</h2>
<div class="memitem">
<div class="memproto">
@ -648,12 +657,12 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00724">724</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00884">884</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="a57f643dc94cbbbb752e2943a7457a668" name="a57f643dc94cbbbb752e2943a7457a668"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a57f643dc94cbbbb752e2943a7457a668">&#9670;&nbsp;</a></span>configure_output_audio_filter()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a57f643dc94cbbbb752e2943a7457a668">&#9670;&#160;</a></span>configure_output_audio_filter()</h2>
<div class="memitem">
<div class="memproto">
@ -692,12 +701,12 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00538">538</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00696">696</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="a045cee5da7d7a2926a5351a4938ef056" name="a045cee5da7d7a2926a5351a4938ef056"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a045cee5da7d7a2926a5351a4938ef056">&#9670;&nbsp;</a></span>configure_output_filter()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a045cee5da7d7a2926a5351a4938ef056">&#9670;&#160;</a></span>configure_output_filter()</h2>
<div class="memitem">
<div class="memproto">
@ -728,12 +737,12 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00647">647</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00807">807</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="a1aff0805d8ea5d89a1dbf1fb1e460113" name="a1aff0805d8ea5d89a1dbf1fb1e460113"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1aff0805d8ea5d89a1dbf1fb1e460113">&#9670;&nbsp;</a></span>configure_output_video_filter()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a1aff0805d8ea5d89a1dbf1fb1e460113">&#9670;&#160;</a></span>configure_output_video_filter()</h2>
<div class="memitem">
<div class="memproto">
@ -772,12 +781,12 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00443">443</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00602">602</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="aac5586382c09d11ae21736fae565e52f" name="aac5586382c09d11ae21736fae565e52f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aac5586382c09d11ae21736fae565e52f">&#9670;&nbsp;</a></span>DEF_CHOOSE_FORMAT()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aac5586382c09d11ae21736fae565e52f">&#9670;&#160;</a></span>DEF_CHOOSE_FORMAT()</h2>
<div class="memitem">
<div class="memproto">
@ -835,7 +844,7 @@ Variables</h2></td></tr>
</div>
</div>
<a id="aac51a809083360b36c142d55f9bb2f7b" name="aac51a809083360b36c142d55f9bb2f7b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aac51a809083360b36c142d55f9bb2f7b">&#9670;&nbsp;</a></span>describe_filter_link()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aac51a809083360b36c142d55f9bb2f7b">&#9670;&#160;</a></span>describe_filter_link()</h2>
<div class="memitem">
<div class="memproto">
@ -874,12 +883,12 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00228">228</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00238">238</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="a7157960a2ffbb1abceac96cefb13da43" name="a7157960a2ffbb1abceac96cefb13da43"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7157960a2ffbb1abceac96cefb13da43">&#9670;&nbsp;</a></span>filter_is_buffersrc()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a7157960a2ffbb1abceac96cefb13da43">&#9670;&#160;</a></span>filter_is_buffersrc()</h2>
<div class="memitem">
<div class="memproto">
@ -902,12 +911,56 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00986">986</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l01112">1112</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="abc092a1ce29979a16eb9ebc63684662d" name="abc092a1ce29979a16eb9ebc63684662d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abc092a1ce29979a16eb9ebc63684662d">&#9670;&#160;</a></span>filter_opt_apply()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> filter_opt_apply </td>
<td>(</td>
<td class="paramtype">AVFilterContext *&#160;</td>
<td class="paramname"><em>f</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>key</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>val</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></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="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00387">387</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="ad60a50ce02efbab762effbbdd7eda05e" name="ad60a50ce02efbab762effbbdd7eda05e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad60a50ce02efbab762effbbdd7eda05e">&#9670;&nbsp;</a></span>filtergraph_is_simple()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ad60a50ce02efbab762effbbdd7eda05e">&#9670;&#160;</a></span>filtergraph_is_simple()</h2>
<div class="memitem">
<div class="memproto">
@ -922,12 +975,12 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l01218">1218</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l01331">1331</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="a27d07d834af2ac1187665f6cae829b66" name="a27d07d834af2ac1187665f6cae829b66"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a27d07d834af2ac1187665f6cae829b66">&#9670;&nbsp;</a></span>get_compliance_normal_pix_fmts()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a27d07d834af2ac1187665f6cae829b66">&#9670;&#160;</a></span>get_compliance_normal_pix_fmts()</h2>
<div class="memitem">
<div class="memproto">
@ -960,12 +1013,12 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00059">59</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00066">66</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="ac281a0a708b333e9a15963d70a069b3c" name="ac281a0a708b333e9a15963d70a069b3c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac281a0a708b333e9a15963d70a069b3c">&#9670;&nbsp;</a></span>graph_is_meta()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ac281a0a708b333e9a15963d70a069b3c">&#9670;&#160;</a></span>graph_is_meta()</h2>
<div class="memitem">
<div class="memproto">
@ -988,12 +1041,90 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00993">993</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l01119">1119</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="af9a8465ef2f1e7aa1000ef05828c8501" name="af9a8465ef2f1e7aa1000ef05828c8501"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af9a8465ef2f1e7aa1000ef05828c8501">&#9670;&#160;</a></span>graph_opts_apply()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> graph_opts_apply </td>
<td>(</td>
<td class="paramtype">AVFilterGraphSegment *&#160;</td>
<td class="paramname"><em>seg</em></td><td>)</td>
<td></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="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00442">442</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="adfb0333b7585dd6e1931d86590755741" name="adfb0333b7585dd6e1931d86590755741"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adfb0333b7585dd6e1931d86590755741">&#9670;&#160;</a></span>graph_parse()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> graph_parse </td>
<td>(</td>
<td class="paramtype">AVFilterGraph *&#160;</td>
<td class="paramname"><em>graph</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>desc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">AVFilterInOut **&#160;</td>
<td class="paramname"><em>inputs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">AVFilterInOut **&#160;</td>
<td class="paramname"><em>outputs</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></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="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00466">466</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="a0e8b6e753bb0f299b554d18f3589944a" name="a0e8b6e753bb0f299b554d18f3589944a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0e8b6e753bb0f299b554d18f3589944a">&#9670;&nbsp;</a></span>ifilter_parameters_from_frame()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a0e8b6e753bb0f299b554d18f3589944a">&#9670;&#160;</a></span>ifilter_parameters_from_frame()</h2>
<div class="memitem">
<div class="memproto">
@ -1018,12 +1149,12 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l01186">1186</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l01299">1299</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="afdeaca7898e15c0cb645228fd5bb9184" name="afdeaca7898e15c0cb645228fd5bb9184"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afdeaca7898e15c0cb645228fd5bb9184">&#9670;&nbsp;</a></span>init_complex_filtergraph()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#afdeaca7898e15c0cb645228fd5bb9184">&#9670;&#160;</a></span>init_complex_filtergraph()</h2>
<div class="memitem">
<div class="memproto">
@ -1038,12 +1169,12 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00332">332</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00491">491</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="a68aafc55c81956dab85081fbdc12dec6" name="a68aafc55c81956dab85081fbdc12dec6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a68aafc55c81956dab85081fbdc12dec6">&#9670;&nbsp;</a></span>init_input_filter()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a68aafc55c81956dab85081fbdc12dec6">&#9670;&#160;</a></span>init_input_filter()</h2>
<div class="memitem">
<div class="memproto">
@ -1076,12 +1207,12 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00245">245</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00255">255</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="a82f6df78dc4d5a93f9708b27f16de2b5" name="a82f6df78dc4d5a93f9708b27f16de2b5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a82f6df78dc4d5a93f9708b27f16de2b5">&#9670;&nbsp;</a></span>init_simple_filtergraph()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a82f6df78dc4d5a93f9708b27f16de2b5">&#9670;&#160;</a></span>init_simple_filtergraph()</h2>
<div class="memitem">
<div class="memproto">
@ -1106,12 +1237,12 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00193">193</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00203">203</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="add10aa9fae87dc2259bc821b29dee0f8" name="add10aa9fae87dc2259bc821b29dee0f8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#add10aa9fae87dc2259bc821b29dee0f8">&#9670;&nbsp;</a></span>insert_filter()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#add10aa9fae87dc2259bc821b29dee0f8">&#9670;&#160;</a></span>insert_filter()</h2>
<div class="memitem">
<div class="memproto">
@ -1156,12 +1287,12 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00421">421</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00580">580</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="a9464282dd90b2de622c38126485d1a80" name="a9464282dd90b2de622c38126485d1a80"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9464282dd90b2de622c38126485d1a80">&#9670;&nbsp;</a></span>insert_trim()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a9464282dd90b2de622c38126485d1a80">&#9670;&#160;</a></span>insert_trim()</h2>
<div class="memitem">
<div class="memproto">
@ -1212,12 +1343,56 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00370">370</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00529">529</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="abed7a0bd4bb4e49c36cf055fd64314ee" name="abed7a0bd4bb4e49c36cf055fd64314ee"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abed7a0bd4bb4e49c36cf055fd64314ee">&#9670;&#160;</a></span>read_binary()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> read_binary </td>
<td>(</td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>path</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t **&#160;</td>
<td class="paramname"><em>data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> *&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></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="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00341">341</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="a175b3d698e81a2781fddebdbf7209d8f" name="a175b3d698e81a2781fddebdbf7209d8f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a175b3d698e81a2781fddebdbf7209d8f">&#9670;&nbsp;</a></span>sub2video_prepare()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a175b3d698e81a2781fddebdbf7209d8f">&#9670;&#160;</a></span>sub2video_prepare()</h2>
<div class="memitem">
<div class="memproto">
@ -1250,13 +1425,13 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00677">677</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00837">837</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<h2 class="groupheader">Variable Documentation</h2>
<a id="a1aabac6d068eef6a7bad3fdf50a05cc8" name="a1aabac6d068eef6a7bad3fdf50a05cc8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1aabac6d068eef6a7bad3fdf50a05cc8">&#9670;&nbsp;</a></span>d</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a1aabac6d068eef6a7bad3fdf50a05cc8">&#9670;&#160;</a></span>d</h2>
<div class="memitem">
<div class="memproto">
@ -1267,12 +1442,12 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00171">171</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00181">181</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="a61569f2965b7a369eb10b6d75d410d11" name="a61569f2965b7a369eb10b6d75d410d11"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a61569f2965b7a369eb10b6d75d410d11">&#9670;&nbsp;</a></span>int</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a61569f2965b7a369eb10b6d75d410d11">&#9670;&#160;</a></span>int</h2>
<div class="memitem">
<div class="memproto">
@ -1283,12 +1458,12 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00170">170</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00180">180</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="a9feef5270e0e54f103868362df0cd27a" name="a9feef5270e0e54f103868362df0cd27a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9feef5270e0e54f103868362df0cd27a">&#9670;&nbsp;</a></span>sample_rate</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a9feef5270e0e54f103868362df0cd27a">&#9670;&#160;</a></span>sample_rate</h2>
<div class="memitem">
<div class="memproto">
@ -1299,12 +1474,12 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00170">170</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00180">180</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
<a id="a12ee30995b3ac94a573f01870d1289e8" name="a12ee30995b3ac94a573f01870d1289e8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a12ee30995b3ac94a573f01870d1289e8">&#9670;&nbsp;</a></span>sample_rates</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a12ee30995b3ac94a573f01870d1289e8">&#9670;&#160;</a></span>sample_rates</h2>
<div class="memitem">
<div class="memproto">
@ -1315,14 +1490,14 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00170">170</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html#l00180">180</a> of file <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c_source.html">fftools_ffmpeg_filter.c</a>.</p>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Sep 17 2022 18:38:10 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: fftools_opt_common.h File Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'Search','.html');
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
</div><!-- top -->
@ -126,7 +133,7 @@ Functions</h2></td></tr>
</table>
<h2 class="groupheader">Function Documentation</h2>
<a id="ac4662679a582ffa71ad420b2d52a2f1d" name="ac4662679a582ffa71ad420b2d52a2f1d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac4662679a582ffa71ad420b2d52a2f1d">&#9670;&nbsp;</a></span>init_report()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ac4662679a582ffa71ad420b2d52a2f1d">&#9670;&#160;</a></span>init_report()</h2>
<div class="memitem">
<div class="memproto">
@ -151,12 +158,12 @@ Functions</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l01155">1155</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l01162">1162</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
</div>
</div>
<a id="a8bc82376a974a97ef9384792d30b4cc4" name="a8bc82376a974a97ef9384792d30b4cc4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8bc82376a974a97ef9384792d30b4cc4">&#9670;&nbsp;</a></span>opt_cpucount()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a8bc82376a974a97ef9384792d30b4cc4">&#9670;&#160;</a></span>opt_cpucount()</h2>
<div class="memitem">
<div class="memproto">
@ -186,14 +193,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Override the cpucount. </p>
<p>Override the cpucount. </p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l01081">1081</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l01088">1088</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
</div>
</div>
<a id="a0bc08eaf2739c5b0977996228a81a129" name="a0bc08eaf2739c5b0977996228a81a129"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0bc08eaf2739c5b0977996228a81a129">&#9670;&nbsp;</a></span>opt_cpuflags()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a0bc08eaf2739c5b0977996228a81a129">&#9670;&#160;</a></span>opt_cpuflags()</h2>
<div class="memitem">
<div class="memproto">
@ -223,14 +230,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Override the cpuflags. </p>
<p>Override the cpuflags. </p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l01069">1069</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l01076">1076</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
</div>
</div>
<a id="a0655c99b1344272c17f0dc8eb480c598" name="a0655c99b1344272c17f0dc8eb480c598"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0655c99b1344272c17f0dc8eb480c598">&#9670;&nbsp;</a></span>opt_loglevel()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a0655c99b1344272c17f0dc8eb480c598">&#9670;&#160;</a></span>opt_loglevel()</h2>
<div class="memitem">
<div class="memproto">
@ -260,14 +267,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Set the libav* libraries log level. </p>
<p>Set the libav* libraries log level. </p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l01256">1256</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l01263">1263</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
</div>
</div>
<a id="ae2131affd4cd632364d24b0d0a809fc3" name="ae2131affd4cd632364d24b0d0a809fc3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae2131affd4cd632364d24b0d0a809fc3">&#9670;&nbsp;</a></span>opt_max_alloc()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ae2131affd4cd632364d24b0d0a809fc3">&#9670;&#160;</a></span>opt_max_alloc()</h2>
<div class="memitem">
<div class="memproto">
@ -298,12 +305,12 @@ Functions</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l01242">1242</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l01249">1249</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
</div>
</div>
<a id="ae83addf5abc14d1dd046f315499ed6bf" name="ae83addf5abc14d1dd046f315499ed6bf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae83addf5abc14d1dd046f315499ed6bf">&#9670;&nbsp;</a></span>opt_report()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ae83addf5abc14d1dd046f315499ed6bf">&#9670;&#160;</a></span>opt_report()</h2>
<div class="memitem">
<div class="memproto">
@ -334,12 +341,12 @@ Functions</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l01237">1237</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l01244">1244</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
</div>
</div>
<a id="a53fb409434bc59eeabbfc52f67a1c641" name="a53fb409434bc59eeabbfc52f67a1c641"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a53fb409434bc59eeabbfc52f67a1c641">&#9670;&nbsp;</a></span>show_bsfs()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a53fb409434bc59eeabbfc52f67a1c641">&#9670;&#160;</a></span>show_bsfs()</h2>
<div class="memitem">
<div class="memproto">
@ -369,14 +376,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Print a listing containing all the bit stream filters supported by the program. This option processing function does not utilize the arguments. </p>
<p>Print a listing containing all the bit stream filters supported by the program. This option processing function does not utilize the arguments. </p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00799">799</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00806">806</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
</div>
</div>
<a id="a9f7a57bae796faca3c46ba0894f0b7bf" name="a9f7a57bae796faca3c46ba0894f0b7bf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9f7a57bae796faca3c46ba0894f0b7bf">&#9670;&nbsp;</a></span>show_buildconf()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a9f7a57bae796faca3c46ba0894f0b7bf">&#9670;&#160;</a></span>show_buildconf()</h2>
<div class="memitem">
<div class="memproto">
@ -406,14 +413,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Print the build configuration of the program to stdout. The contents depend on the definition of FFMPEG_CONFIGURATION. This option processing function does not utilize the arguments. </p>
<p>Print the build configuration of the program to stdout. The contents depend on the definition of FFMPEG_CONFIGURATION. This option processing function does not utilize the arguments. </p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00274">274</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00281">281</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
</div>
</div>
<a id="a9d32ed47a0ec2bdf5a11b9ec477af632" name="a9d32ed47a0ec2bdf5a11b9ec477af632"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9d32ed47a0ec2bdf5a11b9ec477af632">&#9670;&nbsp;</a></span>show_codecs()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a9d32ed47a0ec2bdf5a11b9ec477af632">&#9670;&#160;</a></span>show_codecs()</h2>
<div class="memitem">
<div class="memproto">
@ -443,14 +450,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Print a listing containing all the codecs supported by the program. This option processing function does not utilize the arguments. </p>
<p>Print a listing containing all the codecs supported by the program. This option processing function does not utilize the arguments. </p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00690">690</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00697">697</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
</div>
</div>
<a id="aed7606e2d2a9218a50ecbbc75a76aab7" name="aed7606e2d2a9218a50ecbbc75a76aab7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aed7606e2d2a9218a50ecbbc75a76aab7">&#9670;&nbsp;</a></span>show_colors()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aed7606e2d2a9218a50ecbbc75a76aab7">&#9670;&#160;</a></span>show_colors()</h2>
<div class="memitem">
<div class="memproto">
@ -480,14 +487,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Print a listing containing all the color names and values recognized by the program. </p>
<p>Print a listing containing all the color names and values recognized by the program. </p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00965">965</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00972">972</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
</div>
</div>
<a id="a051c87d97a1dfd644a97f965dfaa18dc" name="a051c87d97a1dfd644a97f965dfaa18dc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a051c87d97a1dfd644a97f965dfaa18dc">&#9670;&nbsp;</a></span>show_decoders()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a051c87d97a1dfd644a97f965dfaa18dc">&#9670;&#160;</a></span>show_decoders()</h2>
<div class="memitem">
<div class="memproto">
@ -517,14 +524,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Print a listing containing all the decoders supported by the program. </p>
<p>Print a listing containing all the decoders supported by the program. </p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00787">787</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00794">794</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
</div>
</div>
<a id="af99b4b78c2355c81ff66ae146b92bc7b" name="af99b4b78c2355c81ff66ae146b92bc7b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af99b4b78c2355c81ff66ae146b92bc7b">&#9670;&nbsp;</a></span>show_demuxers()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#af99b4b78c2355c81ff66ae146b92bc7b">&#9670;&#160;</a></span>show_demuxers()</h2>
<div class="memitem">
<div class="memproto">
@ -554,14 +561,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Print a listing containing all the demuxer supported by the program (including devices). This option processing function does not utilize the arguments. </p>
<p>Print a listing containing all the demuxer supported by the program (including devices). This option processing function does not utilize the arguments. </p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00940">940</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00947">947</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
</div>
</div>
<a id="aaf26a4937c16d8b7cb22a6542ebb46a5" name="aaf26a4937c16d8b7cb22a6542ebb46a5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaf26a4937c16d8b7cb22a6542ebb46a5">&#9670;&nbsp;</a></span>show_devices()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aaf26a4937c16d8b7cb22a6542ebb46a5">&#9670;&#160;</a></span>show_devices()</h2>
<div class="memitem">
<div class="memproto">
@ -591,14 +598,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Print a listing containing all the devices supported by the program. This option processing function does not utilize the arguments. </p>
<p>Print a listing containing all the devices supported by the program. This option processing function does not utilize the arguments. </p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00945">945</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00952">952</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
</div>
</div>
<a id="a6eac4715ae30d65e0638fb94d52aa1fe" name="a6eac4715ae30d65e0638fb94d52aa1fe"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6eac4715ae30d65e0638fb94d52aa1fe">&#9670;&nbsp;</a></span>show_dispositions()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a6eac4715ae30d65e0638fb94d52aa1fe">&#9670;&#160;</a></span>show_dispositions()</h2>
<div class="memitem">
<div class="memproto">
@ -628,14 +635,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Print a listing containing all supported stream dispositions. </p>
<p>Print a listing containing all supported stream dispositions. </p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l01059">1059</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l01066">1066</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
</div>
</div>
<a id="a7271f609adb83bed31f8ef0eb8ee2b79" name="a7271f609adb83bed31f8ef0eb8ee2b79"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7271f609adb83bed31f8ef0eb8ee2b79">&#9670;&nbsp;</a></span>show_encoders()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a7271f609adb83bed31f8ef0eb8ee2b79">&#9670;&#160;</a></span>show_encoders()</h2>
<div class="memitem">
<div class="memproto">
@ -665,14 +672,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Print a listing containing all the encoders supported by the program. </p>
<p>Print a listing containing all the encoders supported by the program. </p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00793">793</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00800">800</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
</div>
</div>
<a id="a2cad88ee81ff905e2309375818c89020" name="a2cad88ee81ff905e2309375818c89020"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2cad88ee81ff905e2309375818c89020">&#9670;&nbsp;</a></span>show_filters()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a2cad88ee81ff905e2309375818c89020">&#9670;&#160;</a></span>show_filters()</h2>
<div class="memitem">
<div class="memproto">
@ -702,14 +709,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Print a listing containing all the filters supported by the program. This option processing function does not utilize the arguments. </p>
<p>Print a listing containing all the filters supported by the program. This option processing function does not utilize the arguments. </p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00811">811</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00818">818</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
</div>
</div>
<a id="ac64f66a36c4ca887741fe28475a99b01" name="ac64f66a36c4ca887741fe28475a99b01"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac64f66a36c4ca887741fe28475a99b01">&#9670;&nbsp;</a></span>show_formats()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ac64f66a36c4ca887741fe28475a99b01">&#9670;&#160;</a></span>show_formats()</h2>
<div class="memitem">
<div class="memproto">
@ -739,14 +746,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Print a listing containing all the formats supported by the program (including devices). This option processing function does not utilize the arguments. </p>
<p>Print a listing containing all the formats supported by the program (including devices). This option processing function does not utilize the arguments. </p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00930">930</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00937">937</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
</div>
</div>
<a id="a0ff9db0d178a0397441c0269cea9e48a" name="a0ff9db0d178a0397441c0269cea9e48a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0ff9db0d178a0397441c0269cea9e48a">&#9670;&nbsp;</a></span>show_help()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a0ff9db0d178a0397441c0269cea9e48a">&#9670;&#160;</a></span>show_help()</h2>
<div class="memitem">
<div class="memproto">
@ -776,14 +783,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Generic -h handler common to all fftools. </p>
<p>Generic -h handler common to all fftools. </p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00590">590</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00597">597</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
</div>
</div>
<a id="a6fea7aab2873df1439a71f12e0f1afd8" name="a6fea7aab2873df1439a71f12e0f1afd8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6fea7aab2873df1439a71f12e0f1afd8">&#9670;&nbsp;</a></span>show_layouts()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a6fea7aab2873df1439a71f12e0f1afd8">&#9670;&#160;</a></span>show_layouts()</h2>
<div class="memitem">
<div class="memproto">
@ -813,14 +820,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Print a listing containing all the standard channel layouts supported by the program. This option processing function does not utilize the arguments. </p>
<p>Print a listing containing all the standard channel layouts supported by the program. This option processing function does not utilize the arguments. </p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l01017">1017</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l01024">1024</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
</div>
</div>
<a id="a9ac5f2397cd42cd32e4b3cb199739b35" name="a9ac5f2397cd42cd32e4b3cb199739b35"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9ac5f2397cd42cd32e4b3cb199739b35">&#9670;&nbsp;</a></span>show_license()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a9ac5f2397cd42cd32e4b3cb199739b35">&#9670;&#160;</a></span>show_license()</h2>
<div class="memitem">
<div class="memproto">
@ -850,14 +857,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Print the license of the program to stdout. The license depends on the license of the libraries compiled into the program. This option processing function does not utilize the arguments. </p>
<p>Print the license of the program to stdout. The license depends on the license of the libraries compiled into the program. This option processing function does not utilize the arguments. </p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00094">94</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00101">101</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
</div>
</div>
<a id="a4c35b5b42d01e850824bc0af1016e71f" name="a4c35b5b42d01e850824bc0af1016e71f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4c35b5b42d01e850824bc0af1016e71f">&#9670;&nbsp;</a></span>show_muxers()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a4c35b5b42d01e850824bc0af1016e71f">&#9670;&#160;</a></span>show_muxers()</h2>
<div class="memitem">
<div class="memproto">
@ -887,14 +894,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Print a listing containing all the muxers supported by the program (including devices). This option processing function does not utilize the arguments. </p>
<p>Print a listing containing all the muxers supported by the program (including devices). This option processing function does not utilize the arguments. </p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00935">935</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00942">942</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
</div>
</div>
<a id="af34c982b84b7c76d45edc5a7715a4fed" name="af34c982b84b7c76d45edc5a7715a4fed"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af34c982b84b7c76d45edc5a7715a4fed">&#9670;&nbsp;</a></span>show_pix_fmts()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#af34c982b84b7c76d45edc5a7715a4fed">&#9670;&#160;</a></span>show_pix_fmts()</h2>
<div class="memitem">
<div class="memproto">
@ -924,14 +931,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Print a listing containing all the pixel formats supported by the program. This option processing function does not utilize the arguments. </p>
<p>Print a listing containing all the pixel formats supported by the program. This option processing function does not utilize the arguments. </p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00979">979</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00986">986</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
</div>
</div>
<a id="addb6306dc020aa290075bed9b1f42a3a" name="addb6306dc020aa290075bed9b1f42a3a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#addb6306dc020aa290075bed9b1f42a3a">&#9670;&nbsp;</a></span>show_protocols()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#addb6306dc020aa290075bed9b1f42a3a">&#9670;&#160;</a></span>show_protocols()</h2>
<div class="memitem">
<div class="memproto">
@ -961,14 +968,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Print a listing containing all the protocols supported by the program. This option processing function does not utilize the arguments. </p>
<p>Print a listing containing all the protocols supported by the program. This option processing function does not utilize the arguments. </p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00950">950</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00957">957</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
</div>
</div>
<a id="a3359dc295afcfd0ee6f592dd37f03080" name="a3359dc295afcfd0ee6f592dd37f03080"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3359dc295afcfd0ee6f592dd37f03080">&#9670;&nbsp;</a></span>show_sample_fmts()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a3359dc295afcfd0ee6f592dd37f03080">&#9670;&#160;</a></span>show_sample_fmts()</h2>
<div class="memitem">
<div class="memproto">
@ -998,14 +1005,14 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Print a listing containing all the sample formats supported by the program. </p>
<p>Print a listing containing all the sample formats supported by the program. </p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l01050">1050</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l01057">1057</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
</div>
</div>
<a id="a79c0ae205603f7f83f15171ba3413f26" name="a79c0ae205603f7f83f15171ba3413f26"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a79c0ae205603f7f83f15171ba3413f26">&#9670;&nbsp;</a></span>show_version()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a79c0ae205603f7f83f15171ba3413f26">&#9670;&#160;</a></span>show_version()</h2>
<div class="memitem">
<div class="memproto">
@ -1035,16 +1042,16 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Print the version of the program to stdout. The version message depends on the current versions of the repository and of the libav* libraries. This option processing function does not utilize the arguments. </p>
<p>Print the version of the program to stdout. The version message depends on the current versions of the repository and of the libav* libraries. This option processing function does not utilize the arguments. </p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00266">266</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html#l00273">273</a> of file <a class="el" href="../../da/d2c/fftools__opt__common_8c_source.html">fftools_opt_common.c</a>.</p>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Sep 17 2022 18:38:10 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: fftools_opt_common.h Source File</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'Search','.html');
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
@ -57,9 +57,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
@ -68,7 +75,7 @@ $(function() {
<div class="contents">
<a href="../../d2/d50/fftools__opt__common_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * Option handlers shared between the tools.</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * copyright (c) 2022 Taner Sener ( tanersener gmail com )</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * Copyright (c) 2022 Taner Sener</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> *</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * This file is part of FFmpeg.</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> *</span></div>
@ -164,35 +171,35 @@ $(function() {
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> </div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span><span class="preprocessor">#endif </span><span class="comment">/* FFTOOLS_OPT_COMMON_H */</span><span class="preprocessor"></span></div>
<div class="ttc" id="afftools__cmdutils_8h_html"><div class="ttname"><a href="../../d8/d4e/fftools__cmdutils_8h.html">fftools_cmdutils.h</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a051c87d97a1dfd644a97f965dfaa18dc"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a051c87d97a1dfd644a97f965dfaa18dc">show_decoders</a></div><div class="ttdeci">int show_decoders(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00787">fftools_opt_common.c:787</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a0655c99b1344272c17f0dc8eb480c598"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a0655c99b1344272c17f0dc8eb480c598">opt_loglevel</a></div><div class="ttdeci">int opt_loglevel(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l01256">fftools_opt_common.c:1256</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a0bc08eaf2739c5b0977996228a81a129"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a0bc08eaf2739c5b0977996228a81a129">opt_cpuflags</a></div><div class="ttdeci">int opt_cpuflags(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l01069">fftools_opt_common.c:1069</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a0ff9db0d178a0397441c0269cea9e48a"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a0ff9db0d178a0397441c0269cea9e48a">show_help</a></div><div class="ttdeci">int show_help(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00590">fftools_opt_common.c:590</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a2cad88ee81ff905e2309375818c89020"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a2cad88ee81ff905e2309375818c89020">show_filters</a></div><div class="ttdeci">int show_filters(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00811">fftools_opt_common.c:811</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a3359dc295afcfd0ee6f592dd37f03080"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a3359dc295afcfd0ee6f592dd37f03080">show_sample_fmts</a></div><div class="ttdeci">int show_sample_fmts(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l01050">fftools_opt_common.c:1050</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a4c35b5b42d01e850824bc0af1016e71f"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a4c35b5b42d01e850824bc0af1016e71f">show_muxers</a></div><div class="ttdeci">int show_muxers(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00935">fftools_opt_common.c:935</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a53fb409434bc59eeabbfc52f67a1c641"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a53fb409434bc59eeabbfc52f67a1c641">show_bsfs</a></div><div class="ttdeci">int show_bsfs(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00799">fftools_opt_common.c:799</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a6eac4715ae30d65e0638fb94d52aa1fe"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a6eac4715ae30d65e0638fb94d52aa1fe">show_dispositions</a></div><div class="ttdeci">int show_dispositions(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l01059">fftools_opt_common.c:1059</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a6fea7aab2873df1439a71f12e0f1afd8"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a6fea7aab2873df1439a71f12e0f1afd8">show_layouts</a></div><div class="ttdeci">int show_layouts(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l01017">fftools_opt_common.c:1017</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a7271f609adb83bed31f8ef0eb8ee2b79"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a7271f609adb83bed31f8ef0eb8ee2b79">show_encoders</a></div><div class="ttdeci">int show_encoders(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00793">fftools_opt_common.c:793</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a79c0ae205603f7f83f15171ba3413f26"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a79c0ae205603f7f83f15171ba3413f26">show_version</a></div><div class="ttdeci">int show_version(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00266">fftools_opt_common.c:266</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a8bc82376a974a97ef9384792d30b4cc4"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a8bc82376a974a97ef9384792d30b4cc4">opt_cpucount</a></div><div class="ttdeci">int opt_cpucount(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l01081">fftools_opt_common.c:1081</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a9ac5f2397cd42cd32e4b3cb199739b35"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a9ac5f2397cd42cd32e4b3cb199739b35">show_license</a></div><div class="ttdeci">int show_license(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00094">fftools_opt_common.c:94</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a9d32ed47a0ec2bdf5a11b9ec477af632"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a9d32ed47a0ec2bdf5a11b9ec477af632">show_codecs</a></div><div class="ttdeci">int show_codecs(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00690">fftools_opt_common.c:690</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a9f7a57bae796faca3c46ba0894f0b7bf"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a9f7a57bae796faca3c46ba0894f0b7bf">show_buildconf</a></div><div class="ttdeci">int show_buildconf(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00274">fftools_opt_common.c:274</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_aaf26a4937c16d8b7cb22a6542ebb46a5"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#aaf26a4937c16d8b7cb22a6542ebb46a5">show_devices</a></div><div class="ttdeci">int show_devices(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00945">fftools_opt_common.c:945</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_ac4662679a582ffa71ad420b2d52a2f1d"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#ac4662679a582ffa71ad420b2d52a2f1d">init_report</a></div><div class="ttdeci">int init_report(const char *env, FILE **file)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l01155">fftools_opt_common.c:1155</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_ac64f66a36c4ca887741fe28475a99b01"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#ac64f66a36c4ca887741fe28475a99b01">show_formats</a></div><div class="ttdeci">int show_formats(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00930">fftools_opt_common.c:930</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_addb6306dc020aa290075bed9b1f42a3a"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#addb6306dc020aa290075bed9b1f42a3a">show_protocols</a></div><div class="ttdeci">int show_protocols(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00950">fftools_opt_common.c:950</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_ae2131affd4cd632364d24b0d0a809fc3"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#ae2131affd4cd632364d24b0d0a809fc3">opt_max_alloc</a></div><div class="ttdeci">int opt_max_alloc(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l01242">fftools_opt_common.c:1242</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_ae83addf5abc14d1dd046f315499ed6bf"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#ae83addf5abc14d1dd046f315499ed6bf">opt_report</a></div><div class="ttdeci">int opt_report(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l01237">fftools_opt_common.c:1237</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_aed7606e2d2a9218a50ecbbc75a76aab7"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#aed7606e2d2a9218a50ecbbc75a76aab7">show_colors</a></div><div class="ttdeci">int show_colors(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00965">fftools_opt_common.c:965</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_af34c982b84b7c76d45edc5a7715a4fed"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#af34c982b84b7c76d45edc5a7715a4fed">show_pix_fmts</a></div><div class="ttdeci">int show_pix_fmts(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00979">fftools_opt_common.c:979</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_af99b4b78c2355c81ff66ae146b92bc7b"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#af99b4b78c2355c81ff66ae146b92bc7b">show_demuxers</a></div><div class="ttdeci">int show_demuxers(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00940">fftools_opt_common.c:940</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a051c87d97a1dfd644a97f965dfaa18dc"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a051c87d97a1dfd644a97f965dfaa18dc">show_decoders</a></div><div class="ttdeci">int show_decoders(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00794">fftools_opt_common.c:794</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a0655c99b1344272c17f0dc8eb480c598"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a0655c99b1344272c17f0dc8eb480c598">opt_loglevel</a></div><div class="ttdeci">int opt_loglevel(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l01263">fftools_opt_common.c:1263</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a0bc08eaf2739c5b0977996228a81a129"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a0bc08eaf2739c5b0977996228a81a129">opt_cpuflags</a></div><div class="ttdeci">int opt_cpuflags(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l01076">fftools_opt_common.c:1076</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a0ff9db0d178a0397441c0269cea9e48a"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a0ff9db0d178a0397441c0269cea9e48a">show_help</a></div><div class="ttdeci">int show_help(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00597">fftools_opt_common.c:597</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a2cad88ee81ff905e2309375818c89020"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a2cad88ee81ff905e2309375818c89020">show_filters</a></div><div class="ttdeci">int show_filters(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00818">fftools_opt_common.c:818</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a3359dc295afcfd0ee6f592dd37f03080"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a3359dc295afcfd0ee6f592dd37f03080">show_sample_fmts</a></div><div class="ttdeci">int show_sample_fmts(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l01057">fftools_opt_common.c:1057</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a4c35b5b42d01e850824bc0af1016e71f"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a4c35b5b42d01e850824bc0af1016e71f">show_muxers</a></div><div class="ttdeci">int show_muxers(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00942">fftools_opt_common.c:942</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a53fb409434bc59eeabbfc52f67a1c641"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a53fb409434bc59eeabbfc52f67a1c641">show_bsfs</a></div><div class="ttdeci">int show_bsfs(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00806">fftools_opt_common.c:806</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a6eac4715ae30d65e0638fb94d52aa1fe"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a6eac4715ae30d65e0638fb94d52aa1fe">show_dispositions</a></div><div class="ttdeci">int show_dispositions(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l01066">fftools_opt_common.c:1066</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a6fea7aab2873df1439a71f12e0f1afd8"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a6fea7aab2873df1439a71f12e0f1afd8">show_layouts</a></div><div class="ttdeci">int show_layouts(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l01024">fftools_opt_common.c:1024</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a7271f609adb83bed31f8ef0eb8ee2b79"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a7271f609adb83bed31f8ef0eb8ee2b79">show_encoders</a></div><div class="ttdeci">int show_encoders(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00800">fftools_opt_common.c:800</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a79c0ae205603f7f83f15171ba3413f26"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a79c0ae205603f7f83f15171ba3413f26">show_version</a></div><div class="ttdeci">int show_version(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00273">fftools_opt_common.c:273</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a8bc82376a974a97ef9384792d30b4cc4"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a8bc82376a974a97ef9384792d30b4cc4">opt_cpucount</a></div><div class="ttdeci">int opt_cpucount(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l01088">fftools_opt_common.c:1088</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a9ac5f2397cd42cd32e4b3cb199739b35"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a9ac5f2397cd42cd32e4b3cb199739b35">show_license</a></div><div class="ttdeci">int show_license(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00101">fftools_opt_common.c:101</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a9d32ed47a0ec2bdf5a11b9ec477af632"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a9d32ed47a0ec2bdf5a11b9ec477af632">show_codecs</a></div><div class="ttdeci">int show_codecs(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00697">fftools_opt_common.c:697</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_a9f7a57bae796faca3c46ba0894f0b7bf"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#a9f7a57bae796faca3c46ba0894f0b7bf">show_buildconf</a></div><div class="ttdeci">int show_buildconf(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00281">fftools_opt_common.c:281</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_aaf26a4937c16d8b7cb22a6542ebb46a5"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#aaf26a4937c16d8b7cb22a6542ebb46a5">show_devices</a></div><div class="ttdeci">int show_devices(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00952">fftools_opt_common.c:952</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_ac4662679a582ffa71ad420b2d52a2f1d"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#ac4662679a582ffa71ad420b2d52a2f1d">init_report</a></div><div class="ttdeci">int init_report(const char *env, FILE **file)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l01162">fftools_opt_common.c:1162</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_ac64f66a36c4ca887741fe28475a99b01"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#ac64f66a36c4ca887741fe28475a99b01">show_formats</a></div><div class="ttdeci">int show_formats(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00937">fftools_opt_common.c:937</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_addb6306dc020aa290075bed9b1f42a3a"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#addb6306dc020aa290075bed9b1f42a3a">show_protocols</a></div><div class="ttdeci">int show_protocols(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00957">fftools_opt_common.c:957</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_ae2131affd4cd632364d24b0d0a809fc3"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#ae2131affd4cd632364d24b0d0a809fc3">opt_max_alloc</a></div><div class="ttdeci">int opt_max_alloc(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l01249">fftools_opt_common.c:1249</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_ae83addf5abc14d1dd046f315499ed6bf"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#ae83addf5abc14d1dd046f315499ed6bf">opt_report</a></div><div class="ttdeci">int opt_report(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l01244">fftools_opt_common.c:1244</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_aed7606e2d2a9218a50ecbbc75a76aab7"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#aed7606e2d2a9218a50ecbbc75a76aab7">show_colors</a></div><div class="ttdeci">int show_colors(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00972">fftools_opt_common.c:972</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_af34c982b84b7c76d45edc5a7715a4fed"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#af34c982b84b7c76d45edc5a7715a4fed">show_pix_fmts</a></div><div class="ttdeci">int show_pix_fmts(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00986">fftools_opt_common.c:986</a></div></div>
<div class="ttc" id="afftools__opt__common_8h_html_af99b4b78c2355c81ff66ae146b92bc7b"><div class="ttname"><a href="../../d2/d50/fftools__opt__common_8h.html#af99b4b78c2355c81ff66ae146b92bc7b">show_demuxers</a></div><div class="ttdeci">int show_demuxers(void *optctx, const char *opt, const char *arg)</div><div class="ttdef"><b>Definition</b> <a href="../../da/d2c/fftools__opt__common_8c_source.html#l00947">fftools_opt_common.c:947</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Sep 17 2022 18:38:10 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -0,0 +1,221 @@
<!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" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: SyncQueueStream 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 id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @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:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(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">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-attribs">Data Fields</a> </div>
<div class="headertitle"><div class="title">SyncQueueStream Struct Reference</div></div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a>
Data Fields</h2></td></tr>
<tr class="memitem:aa3aa5fc3137f9f222d45a0dcb5d031f8"><td class="memItemLeft" align="right" valign="top">AVFifo *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d94/struct_sync_queue_stream.html#aa3aa5fc3137f9f222d45a0dcb5d031f8">fifo</a></td></tr>
<tr class="separator:aa3aa5fc3137f9f222d45a0dcb5d031f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a215a25282f85265e765035089c7197f9"><td class="memItemLeft" align="right" valign="top">AVRational&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d94/struct_sync_queue_stream.html#a215a25282f85265e765035089c7197f9">tb</a></td></tr>
<tr class="separator:a215a25282f85265e765035089c7197f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afa8c97ba87d308f5760f61c229a8fead"><td class="memItemLeft" align="right" valign="top">int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d94/struct_sync_queue_stream.html#afa8c97ba87d308f5760f61c229a8fead">head_ts</a></td></tr>
<tr class="separator:afa8c97ba87d308f5760f61c229a8fead"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a24abe05decc9a6825a890be5cddcb740"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d94/struct_sync_queue_stream.html#a24abe05decc9a6825a890be5cddcb740">limiting</a></td></tr>
<tr class="separator:a24abe05decc9a6825a890be5cddcb740"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9780b2194bcb4f34802ad6c8119f4fe5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d94/struct_sync_queue_stream.html#a9780b2194bcb4f34802ad6c8119f4fe5">finished</a></td></tr>
<tr class="separator:a9780b2194bcb4f34802ad6c8119f4fe5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab20fc7999548152df14069363152e431"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d94/struct_sync_queue_stream.html#ab20fc7999548152df14069363152e431">frames_sent</a></td></tr>
<tr class="separator:ab20fc7999548152df14069363152e431"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad2651b7a252f02dcb05098760d0b9a4e"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d94/struct_sync_queue_stream.html#ad2651b7a252f02dcb05098760d0b9a4e">frames_max</a></td></tr>
<tr class="separator:ad2651b7a252f02dcb05098760d0b9a4e"><td class="memSeparator" colspan="2">&#160;</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="../../df/dbb/fftools__sync__queue_8c_source.html#l00045">45</a> of file <a class="el" href="../../df/dbb/fftools__sync__queue_8c_source.html">fftools_sync_queue.c</a>.</p>
</div><h2 class="groupheader">Field Documentation</h2>
<a id="aa3aa5fc3137f9f222d45a0dcb5d031f8" name="aa3aa5fc3137f9f222d45a0dcb5d031f8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa3aa5fc3137f9f222d45a0dcb5d031f8">&#9670;&#160;</a></span>fifo</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">AVFifo* SyncQueueStream::fifo</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../df/dbb/fftools__sync__queue_8c_source.html#l00046">46</a> of file <a class="el" href="../../df/dbb/fftools__sync__queue_8c_source.html">fftools_sync_queue.c</a>.</p>
</div>
</div>
<a id="a9780b2194bcb4f34802ad6c8119f4fe5" name="a9780b2194bcb4f34802ad6c8119f4fe5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9780b2194bcb4f34802ad6c8119f4fe5">&#9670;&#160;</a></span>finished</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> SyncQueueStream::finished</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../df/dbb/fftools__sync__queue_8c_source.html#l00053">53</a> of file <a class="el" href="../../df/dbb/fftools__sync__queue_8c_source.html">fftools_sync_queue.c</a>.</p>
</div>
</div>
<a id="ad2651b7a252f02dcb05098760d0b9a4e" name="ad2651b7a252f02dcb05098760d0b9a4e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad2651b7a252f02dcb05098760d0b9a4e">&#9670;&#160;</a></span>frames_max</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint64_t SyncQueueStream::frames_max</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../df/dbb/fftools__sync__queue_8c_source.html#l00056">56</a> of file <a class="el" href="../../df/dbb/fftools__sync__queue_8c_source.html">fftools_sync_queue.c</a>.</p>
</div>
</div>
<a id="ab20fc7999548152df14069363152e431" name="ab20fc7999548152df14069363152e431"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab20fc7999548152df14069363152e431">&#9670;&#160;</a></span>frames_sent</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint64_t SyncQueueStream::frames_sent</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../df/dbb/fftools__sync__queue_8c_source.html#l00055">55</a> of file <a class="el" href="../../df/dbb/fftools__sync__queue_8c_source.html">fftools_sync_queue.c</a>.</p>
</div>
</div>
<a id="afa8c97ba87d308f5760f61c229a8fead" name="afa8c97ba87d308f5760f61c229a8fead"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afa8c97ba87d308f5760f61c229a8fead">&#9670;&#160;</a></span>head_ts</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int64_t SyncQueueStream::head_ts</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../df/dbb/fftools__sync__queue_8c_source.html#l00050">50</a> of file <a class="el" href="../../df/dbb/fftools__sync__queue_8c_source.html">fftools_sync_queue.c</a>.</p>
</div>
</div>
<a id="a24abe05decc9a6825a890be5cddcb740" name="a24abe05decc9a6825a890be5cddcb740"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a24abe05decc9a6825a890be5cddcb740">&#9670;&#160;</a></span>limiting</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> SyncQueueStream::limiting</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../df/dbb/fftools__sync__queue_8c_source.html#l00051">51</a> of file <a class="el" href="../../df/dbb/fftools__sync__queue_8c_source.html">fftools_sync_queue.c</a>.</p>
</div>
</div>
<a id="a215a25282f85265e765035089c7197f9" name="a215a25282f85265e765035089c7197f9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a215a25282f85265e765035089c7197f9">&#9670;&#160;</a></span>tb</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">AVRational SyncQueueStream::tb</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../df/dbb/fftools__sync__queue_8c_source.html#l00047">47</a> of file <a class="el" href="../../df/dbb/fftools__sync__queue_8c_source.html">fftools_sync_queue.c</a>.</p>
</div>
</div>
<hr/>The documentation for this struct was generated from the following file:<ul>
<li><a class="el" href="../../df/dbb/fftools__sync__queue_8c_source.html">fftools_sync_queue.c</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: ffprobekit.h File Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'Search','.html');
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
</div><!-- top -->
@ -78,7 +85,7 @@ Functions</h2></td></tr>
</table>
<h2 class="groupheader">Function Documentation</h2>
<a id="a22b43bda480738857bff636161c61a58" name="a22b43bda480738857bff636161c61a58"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a22b43bda480738857bff636161c61a58">&#9670;&nbsp;</a></span>Java_com_arthenica_ffmpegkit_FFmpegKitConfig_nativeFFprobeExecute()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a22b43bda480738857bff636161c61a58">&#9670;&#160;</a></span>Java_com_arthenica_ffmpegkit_FFmpegKitConfig_nativeFFprobeExecute()</h2>
<div class="memitem">
<div class="memproto">
@ -114,7 +121,7 @@ Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Synchronously executes FFprobe natively with arguments provided.</p>
<p>Synchronously executes FFprobe natively with arguments provided.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">env</td><td>pointer to native method interface </td></tr>
@ -133,7 +140,7 @@ Functions</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Sep 17 2022 18:38:10 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: ffprobekit.h Source File</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'Search','.html');
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
@ -57,9 +57,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
@ -98,11 +105,11 @@ $(function() {
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span>JNIEXPORT jint JNICALL <a class="code hl_function" href="../../d2/dbf/ffprobekit_8h.html#a22b43bda480738857bff636161c61a58">Java_com_arthenica_ffmpegkit_FFmpegKitConfig_nativeFFprobeExecute</a>(JNIEnv *, jclass, jlong, jobjectArray);</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="preprocessor">#endif </span><span class="comment">/* FFPROBE_KIT_H */</span><span class="preprocessor"></span></div>
<div class="ttc" id="affprobekit_8h_html_a22b43bda480738857bff636161c61a58"><div class="ttname"><a href="../../d2/dbf/ffprobekit_8h.html#a22b43bda480738857bff636161c61a58">Java_com_arthenica_ffmpegkit_FFmpegKitConfig_nativeFFprobeExecute</a></div><div class="ttdeci">JNIEXPORT jint JNICALL Java_com_arthenica_ffmpegkit_FFmpegKitConfig_nativeFFprobeExecute(JNIEnv *, jclass, jlong, jobjectArray)</div><div class="ttdef"><b>Definition:</b> <a href="../../d1/ddd/ffprobekit_8c_source.html#l00048">ffprobekit.c:48</a></div></div>
<div class="ttc" id="affprobekit_8h_html_a22b43bda480738857bff636161c61a58"><div class="ttname"><a href="../../d2/dbf/ffprobekit_8h.html#a22b43bda480738857bff636161c61a58">Java_com_arthenica_ffmpegkit_FFmpegKitConfig_nativeFFprobeExecute</a></div><div class="ttdeci">JNIEXPORT jint JNICALL Java_com_arthenica_ffmpegkit_FFmpegKitConfig_nativeFFprobeExecute(JNIEnv *, jclass, jlong, jobjectArray)</div><div class="ttdef"><b>Definition</b> <a href="../../d1/ddd/ffprobekit_8c_source.html#l00048">ffprobekit.c:48</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Sep 17 2022 18:38:09 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: CallbackData Struct Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'Search','.html');
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
</div><!-- top -->
@ -87,8 +94,8 @@ Data Fields</h2></td></tr>
<tr class="separator:a0eba672f8309ce08c41eeb63c48091af"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aee6855bc657b56db6c8a32656b3018c4"><td class="memItemLeft" align="right" valign="top">int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/dc3/struct_callback_data.html#aee6855bc657b56db6c8a32656b3018c4">statisticsSize</a></td></tr>
<tr class="separator:aee6855bc657b56db6c8a32656b3018c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abe4eff38e39d603bd966c554e9e5afc8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/dc3/struct_callback_data.html#abe4eff38e39d603bd966c554e9e5afc8">statisticsTime</a></td></tr>
<tr class="separator:abe4eff38e39d603bd966c554e9e5afc8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a10bb5b2136f3ecf818079cd0b4632c2b"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/dc3/struct_callback_data.html#a10bb5b2136f3ecf818079cd0b4632c2b">statisticsTime</a></td></tr>
<tr class="separator:a10bb5b2136f3ecf818079cd0b4632c2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0e02eb985ed5c68bdf82a3445c0b4514"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/dc3/struct_callback_data.html#a0e02eb985ed5c68bdf82a3445c0b4514">statisticsBitrate</a></td></tr>
<tr class="separator:a0e02eb985ed5c68bdf82a3445c0b4514"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a577a99dc4c2767d1946ac174f7a0c69e"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/dc3/struct_callback_data.html#a577a99dc4c2767d1946ac174f7a0c69e">statisticsSpeed</a></td></tr>
@ -97,12 +104,12 @@ Data Fields</h2></td></tr>
<tr class="separator:a2e5d0fd0859aca2c5a304b4823b86ccd"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >Callback data structure </p>
<div class="textblock"><p>Callback data structure </p>
<p class="definition">Definition at line <a class="el" href="../../dc/dd3/ffmpegkit_8c_source.html#l00037">37</a> of file <a class="el" href="../../dc/dd3/ffmpegkit_8c_source.html">ffmpegkit.c</a>.</p>
</div><h2 class="groupheader">Field Documentation</h2>
<a id="ae7661f79a95fe7d0eaa118264431f9c2" name="ae7661f79a95fe7d0eaa118264431f9c2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae7661f79a95fe7d0eaa118264431f9c2">&#9670;&nbsp;</a></span>logData</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ae7661f79a95fe7d0eaa118264431f9c2">&#9670;&#160;</a></span>logData</h2>
<div class="memitem">
<div class="memproto">
@ -118,7 +125,7 @@ Data Fields</h2></td></tr>
</div>
</div>
<a id="a0108648839b77d246e659a7eefdde4fb" name="a0108648839b77d246e659a7eefdde4fb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0108648839b77d246e659a7eefdde4fb">&#9670;&nbsp;</a></span>logLevel</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a0108648839b77d246e659a7eefdde4fb">&#9670;&#160;</a></span>logLevel</h2>
<div class="memitem">
<div class="memproto">
@ -134,7 +141,7 @@ Data Fields</h2></td></tr>
</div>
</div>
<a id="a2e5d0fd0859aca2c5a304b4823b86ccd" name="a2e5d0fd0859aca2c5a304b4823b86ccd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2e5d0fd0859aca2c5a304b4823b86ccd">&#9670;&nbsp;</a></span>next</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a2e5d0fd0859aca2c5a304b4823b86ccd">&#9670;&#160;</a></span>next</h2>
<div class="memitem">
<div class="memproto">
@ -150,7 +157,7 @@ Data Fields</h2></td></tr>
</div>
</div>
<a id="ad8af170b5f3057c34dc1221a65a8c4af" name="ad8af170b5f3057c34dc1221a65a8c4af"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad8af170b5f3057c34dc1221a65a8c4af">&#9670;&nbsp;</a></span>sessionId</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ad8af170b5f3057c34dc1221a65a8c4af">&#9670;&#160;</a></span>sessionId</h2>
<div class="memitem">
<div class="memproto">
@ -166,7 +173,7 @@ Data Fields</h2></td></tr>
</div>
</div>
<a id="a0e02eb985ed5c68bdf82a3445c0b4514" name="a0e02eb985ed5c68bdf82a3445c0b4514"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0e02eb985ed5c68bdf82a3445c0b4514">&#9670;&nbsp;</a></span>statisticsBitrate</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a0e02eb985ed5c68bdf82a3445c0b4514">&#9670;&#160;</a></span>statisticsBitrate</h2>
<div class="memitem">
<div class="memproto">
@ -182,7 +189,7 @@ Data Fields</h2></td></tr>
</div>
</div>
<a id="ad4ef14e9625fe915267d644480e9410f" name="ad4ef14e9625fe915267d644480e9410f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad4ef14e9625fe915267d644480e9410f">&#9670;&nbsp;</a></span>statisticsFps</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ad4ef14e9625fe915267d644480e9410f">&#9670;&#160;</a></span>statisticsFps</h2>
<div class="memitem">
<div class="memproto">
@ -198,7 +205,7 @@ Data Fields</h2></td></tr>
</div>
</div>
<a id="a6ea1c5fbcf7ad64a04687d738a9c6559" name="a6ea1c5fbcf7ad64a04687d738a9c6559"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6ea1c5fbcf7ad64a04687d738a9c6559">&#9670;&nbsp;</a></span>statisticsFrameNumber</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a6ea1c5fbcf7ad64a04687d738a9c6559">&#9670;&#160;</a></span>statisticsFrameNumber</h2>
<div class="memitem">
<div class="memproto">
@ -214,7 +221,7 @@ Data Fields</h2></td></tr>
</div>
</div>
<a id="a0eba672f8309ce08c41eeb63c48091af" name="a0eba672f8309ce08c41eeb63c48091af"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0eba672f8309ce08c41eeb63c48091af">&#9670;&nbsp;</a></span>statisticsQuality</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a0eba672f8309ce08c41eeb63c48091af">&#9670;&#160;</a></span>statisticsQuality</h2>
<div class="memitem">
<div class="memproto">
@ -230,7 +237,7 @@ Data Fields</h2></td></tr>
</div>
</div>
<a id="aee6855bc657b56db6c8a32656b3018c4" name="aee6855bc657b56db6c8a32656b3018c4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aee6855bc657b56db6c8a32656b3018c4">&#9670;&nbsp;</a></span>statisticsSize</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aee6855bc657b56db6c8a32656b3018c4">&#9670;&#160;</a></span>statisticsSize</h2>
<div class="memitem">
<div class="memproto">
@ -246,7 +253,7 @@ Data Fields</h2></td></tr>
</div>
</div>
<a id="a577a99dc4c2767d1946ac174f7a0c69e" name="a577a99dc4c2767d1946ac174f7a0c69e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a577a99dc4c2767d1946ac174f7a0c69e">&#9670;&nbsp;</a></span>statisticsSpeed</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a577a99dc4c2767d1946ac174f7a0c69e">&#9670;&#160;</a></span>statisticsSpeed</h2>
<div class="memitem">
<div class="memproto">
@ -261,14 +268,14 @@ Data Fields</h2></td></tr>
</div>
</div>
<a id="abe4eff38e39d603bd966c554e9e5afc8" name="abe4eff38e39d603bd966c554e9e5afc8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abe4eff38e39d603bd966c554e9e5afc8">&#9670;&nbsp;</a></span>statisticsTime</h2>
<a id="a10bb5b2136f3ecf818079cd0b4632c2b" name="a10bb5b2136f3ecf818079cd0b4632c2b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a10bb5b2136f3ecf818079cd0b4632c2b">&#9670;&#160;</a></span>statisticsTime</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> CallbackData::statisticsTime</td>
<td class="memname">double CallbackData::statisticsTime</td>
</tr>
</table>
</div><div class="memdoc">
@ -278,7 +285,7 @@ Data Fields</h2></td></tr>
</div>
</div>
<a id="a24877dd94bec8b5bad7a0ed6893f7c28" name="a24877dd94bec8b5bad7a0ed6893f7c28"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a24877dd94bec8b5bad7a0ed6893f7c28">&#9670;&nbsp;</a></span>type</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a24877dd94bec8b5bad7a0ed6893f7c28">&#9670;&#160;</a></span>type</h2>
<div class="memitem">
<div class="memproto">
@ -299,7 +306,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Sep 17 2022 18:38:10 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: CompactContext Struct Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'Search','.html');
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
</div><!-- top -->
@ -94,10 +101,10 @@ 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="../../d8/d78/fftools__ffprobe_8c_source.html#l01181">1181</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01195">1195</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" name="a8e0108669bebe76f67bb8ae4869f4843"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8e0108669bebe76f67bb8ae4869f4843">&#9670;&nbsp;</a></span>class</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a8e0108669bebe76f67bb8ae4869f4843">&#9670;&#160;</a></span>class</h2>
<div class="memitem">
<div class="memproto">
@ -108,12 +115,12 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01182">1182</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01196">1196</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="ad9d56249a5965a5ec47f3a1241ce6b1e" name="ad9d56249a5965a5ec47f3a1241ce6b1e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad9d56249a5965a5ec47f3a1241ce6b1e">&#9670;&nbsp;</a></span>escape_mode_str</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ad9d56249a5965a5ec47f3a1241ce6b1e">&#9670;&#160;</a></span>escape_mode_str</h2>
<div class="memitem">
<div class="memproto">
@ -124,12 +131,12 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01187">1187</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01201">1201</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="a75a85295a2f8026ff95330866cf563aa" name="a75a85295a2f8026ff95330866cf563aa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a75a85295a2f8026ff95330866cf563aa">&#9670;&nbsp;</a></span>escape_str</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a75a85295a2f8026ff95330866cf563aa">&#9670;&#160;</a></span>escape_str</h2>
<div class="memitem">
<div class="memproto">
@ -140,12 +147,12 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01188">1188</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01202">1202</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="a2384aee850920cabfaece87e4c368931" name="a2384aee850920cabfaece87e4c368931"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2384aee850920cabfaece87e4c368931">&#9670;&nbsp;</a></span>has_nested_elems</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a2384aee850920cabfaece87e4c368931">&#9670;&#160;</a></span>has_nested_elems</h2>
<div class="memitem">
<div class="memproto">
@ -156,12 +163,12 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01190">1190</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01204">1204</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="a803eb26c6bc39957c885f8f58dfee861" name="a803eb26c6bc39957c885f8f58dfee861"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a803eb26c6bc39957c885f8f58dfee861">&#9670;&nbsp;</a></span>item_sep</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a803eb26c6bc39957c885f8f58dfee861">&#9670;&#160;</a></span>item_sep</h2>
<div class="memitem">
<div class="memproto">
@ -172,12 +179,12 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01184">1184</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01198">1198</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="ab69db67b807887e2e11247ff28f0482c" name="ab69db67b807887e2e11247ff28f0482c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab69db67b807887e2e11247ff28f0482c">&#9670;&nbsp;</a></span>item_sep_str</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ab69db67b807887e2e11247ff28f0482c">&#9670;&#160;</a></span>item_sep_str</h2>
<div class="memitem">
<div class="memproto">
@ -188,12 +195,12 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01183">1183</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01197">1197</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="a2b8d470952d1051c0fd6b89b13a35e1e" name="a2b8d470952d1051c0fd6b89b13a35e1e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2b8d470952d1051c0fd6b89b13a35e1e">&#9670;&nbsp;</a></span>nested_section</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a2b8d470952d1051c0fd6b89b13a35e1e">&#9670;&#160;</a></span>nested_section</h2>
<div class="memitem">
<div class="memproto">
@ -204,12 +211,12 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01189">1189</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01203">1203</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="a4d211d2b2ba9c83a0613ec9c79af1f71" name="a4d211d2b2ba9c83a0613ec9c79af1f71"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4d211d2b2ba9c83a0613ec9c79af1f71">&#9670;&nbsp;</a></span>nokey</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a4d211d2b2ba9c83a0613ec9c79af1f71">&#9670;&#160;</a></span>nokey</h2>
<div class="memitem">
<div class="memproto">
@ -220,12 +227,12 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01185">1185</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01199">1199</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="af0b37847b18bd84f3d786c7e824356ee" name="af0b37847b18bd84f3d786c7e824356ee"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af0b37847b18bd84f3d786c7e824356ee">&#9670;&nbsp;</a></span>print_section</h2>
<h2 class="memtitle"><span class="permalink"><a href="#af0b37847b18bd84f3d786c7e824356ee">&#9670;&#160;</a></span>print_section</h2>
<div class="memitem">
<div class="memproto">
@ -236,12 +243,12 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01186">1186</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01200">1200</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="a14c571b1a684a9d550b5649fcbaa93f8" name="a14c571b1a684a9d550b5649fcbaa93f8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a14c571b1a684a9d550b5649fcbaa93f8">&#9670;&nbsp;</a></span>terminate_line</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a14c571b1a684a9d550b5649fcbaa93f8">&#9670;&#160;</a></span>terminate_line</h2>
<div class="memitem">
<div class="memproto">
@ -252,7 +259,7 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01191">1191</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01205">1205</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
@ -262,7 +269,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Sep 17 2022 18:38:10 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: Option Struct Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'Search','.html');
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
</div><!-- top -->
@ -81,12 +88,12 @@ Data Fields</h2></td></tr>
<tr class="separator:a4dc04a99a38324c37ad89101d720e236"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<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>
<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#l00265">265</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#l00278">278</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" name="a16d977bce49a6da603426937ff7b6617"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a16d977bce49a6da603426937ff7b6617">&#9670;&nbsp;</a></span>key</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a16d977bce49a6da603426937ff7b6617">&#9670;&#160;</a></span>key</h2>
<div class="memitem">
<div class="memproto">
@ -97,12 +104,12 @@ 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#l00267">267</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#l00280">280</a> of file <a class="el" href="../../d8/d4e/fftools__cmdutils_8h_source.html">fftools_cmdutils.h</a>.</p>
</div>
</div>
<a id="a3b25df629d81a005daeb930f12560edc" name="a3b25df629d81a005daeb930f12560edc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3b25df629d81a005daeb930f12560edc">&#9670;&nbsp;</a></span>opt</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a3b25df629d81a005daeb930f12560edc">&#9670;&#160;</a></span>opt</h2>
<div class="memitem">
<div class="memproto">
@ -113,12 +120,12 @@ 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#l00266">266</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#l00279">279</a> of file <a class="el" href="../../d8/d4e/fftools__cmdutils_8h_source.html">fftools_cmdutils.h</a>.</p>
</div>
</div>
<a id="a4dc04a99a38324c37ad89101d720e236" name="a4dc04a99a38324c37ad89101d720e236"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4dc04a99a38324c37ad89101d720e236">&#9670;&nbsp;</a></span>val</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a4dc04a99a38324c37ad89101d720e236">&#9670;&#160;</a></span>val</h2>
<div class="memitem">
<div class="memproto">
@ -129,7 +136,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#l00268">268</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#l00281">281</a> of file <a class="el" href="../../d8/d4e/fftools__cmdutils_8h_source.html">fftools_cmdutils.h</a>.</p>
</div>
</div>
@ -139,7 +146,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Sep 17 2022 18:38:10 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: InputStream Struct Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'Search','.html');
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
</div><!-- top -->
@ -91,6 +98,10 @@ Data Fields</h2></td></tr>
<tr class="separator:ac9fc51324b931c1db5c5c1445fe70c3b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6c98acd7bffcebe0d9e13f9d845845e7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#a6c98acd7bffcebe0d9e13f9d845845e7">processing_needed</a></td></tr>
<tr class="separator:a6c98acd7bffcebe0d9e13f9d845845e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3df48bcac32b134bb20d3943759ac2fb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#a3df48bcac32b134bb20d3943759ac2fb">want_frame_data</a></td></tr>
<tr class="separator:a3df48bcac32b134bb20d3943759ac2fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8815cc7a53aea25fa0aee7004a3202c3"><td class="memItemLeft" align="right" valign="top">AVCodecParameters *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#a8815cc7a53aea25fa0aee7004a3202c3">par</a></td></tr>
<tr class="separator:a8815cc7a53aea25fa0aee7004a3202c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a550ceee60cb995b284b52962dcba6597"><td class="memItemLeft" align="right" valign="top">AVCodecContext *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#a550ceee60cb995b284b52962dcba6597">dec_ctx</a></td></tr>
<tr class="separator:a550ceee60cb995b284b52962dcba6597"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aec71efef67656157f493555fddbbc1c9"><td class="memItemLeft" align="right" valign="top">const AVCodec *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#aec71efef67656157f493555fddbbc1c9">dec</a></td></tr>
@ -99,6 +110,8 @@ Data Fields</h2></td></tr>
<tr class="separator:a1492e008c195bbd4e2c84bccbc5ee216"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9d7d1e08713e8fb98d18d1ef6367e8e6"><td class="memItemLeft" align="right" valign="top">AVPacket *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#a9d7d1e08713e8fb98d18d1ef6367e8e6">pkt</a></td></tr>
<tr class="separator:a9d7d1e08713e8fb98d18d1ef6367e8e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae52558c47e51e5d92451dc4731b66d1d"><td class="memItemLeft" align="right" valign="top">AVRational&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#ae52558c47e51e5d92451dc4731b66d1d">framerate_guessed</a></td></tr>
<tr class="separator:ae52558c47e51e5d92451dc4731b66d1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae6c0680d4f8c5173937451d79efef0bf"><td class="memItemLeft" align="right" valign="top">int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#ae6c0680d4f8c5173937451d79efef0bf">prev_pkt_pts</a></td></tr>
<tr class="separator:ae6c0680d4f8c5173937451d79efef0bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6718f5f7b2206b2848af5e35ae3a9186"><td class="memItemLeft" align="right" valign="top">int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#a6718f5f7b2206b2848af5e35ae3a9186">start</a></td></tr>
@ -106,19 +119,21 @@ Data Fields</h2></td></tr>
<tr class="memitem:a8026af86b300d31432bc1bf74910aea5"><td class="memItemLeft" align="right" valign="top">int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#a8026af86b300d31432bc1bf74910aea5">next_dts</a></td></tr>
<tr class="separator:a8026af86b300d31432bc1bf74910aea5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa4918133b75f0447192deea8c21f822e"><td class="memItemLeft" align="right" valign="top">int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#aa4918133b75f0447192deea8c21f822e">first_dts</a></td></tr>
<tr class="memdesc:aa4918133b75f0447192deea8c21f822e"><td class="mdescLeft">&#160;</td><td class="mdescRight">dts of the first packet read for this stream (in AV_TIME_BASE units) <a href="../../d3/d6e/struct_input_stream.html#aa4918133b75f0447192deea8c21f822e">More...</a><br /></td></tr>
<tr class="memdesc:aa4918133b75f0447192deea8c21f822e"><td class="mdescLeft">&#160;</td><td class="mdescRight">dts of the first packet read for this stream (in AV_TIME_BASE units) <br /></td></tr>
<tr class="separator:aa4918133b75f0447192deea8c21f822e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1e7893cdf661d9ad7c24fdccc60fa05e"><td class="memItemLeft" align="right" valign="top">int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#a1e7893cdf661d9ad7c24fdccc60fa05e">dts</a></td></tr>
<tr class="memdesc:a1e7893cdf661d9ad7c24fdccc60fa05e"><td class="mdescLeft">&#160;</td><td class="mdescRight">dts of the last packet read for this stream (in AV_TIME_BASE units) <a href="../../d3/d6e/struct_input_stream.html#a1e7893cdf661d9ad7c24fdccc60fa05e">More...</a><br /></td></tr>
<tr class="memdesc:a1e7893cdf661d9ad7c24fdccc60fa05e"><td class="mdescLeft">&#160;</td><td class="mdescRight">dts of the last packet read for this stream (in AV_TIME_BASE units) <br /></td></tr>
<tr class="separator:a1e7893cdf661d9ad7c24fdccc60fa05e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab14ac8d1cdb5c1dd6472dd4c13867368"><td class="memItemLeft" align="right" valign="top">int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#ab14ac8d1cdb5c1dd6472dd4c13867368">next_pts</a></td></tr>
<tr class="memdesc:ab14ac8d1cdb5c1dd6472dd4c13867368"><td class="mdescLeft">&#160;</td><td class="mdescRight">synthetic pts for the next decode frame (in AV_TIME_BASE units) <a href="../../d3/d6e/struct_input_stream.html#ab14ac8d1cdb5c1dd6472dd4c13867368">More...</a><br /></td></tr>
<tr class="memdesc:ab14ac8d1cdb5c1dd6472dd4c13867368"><td class="mdescLeft">&#160;</td><td class="mdescRight">synthetic pts for the next decode frame (in AV_TIME_BASE units) <br /></td></tr>
<tr class="separator:ab14ac8d1cdb5c1dd6472dd4c13867368"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5e77505bdc5afbc6ab5cf613894925b4"><td class="memItemLeft" align="right" valign="top">int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#a5e77505bdc5afbc6ab5cf613894925b4">pts</a></td></tr>
<tr class="memdesc:a5e77505bdc5afbc6ab5cf613894925b4"><td class="mdescLeft">&#160;</td><td class="mdescRight">current pts of the decoded frame (in AV_TIME_BASE units) <a href="../../d3/d6e/struct_input_stream.html#a5e77505bdc5afbc6ab5cf613894925b4">More...</a><br /></td></tr>
<tr class="memdesc:a5e77505bdc5afbc6ab5cf613894925b4"><td class="mdescLeft">&#160;</td><td class="mdescRight">current pts of the decoded frame (in AV_TIME_BASE units) <br /></td></tr>
<tr class="separator:a5e77505bdc5afbc6ab5cf613894925b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8ee44633b600f2b31541b213f0a4b322"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#a8ee44633b600f2b31541b213f0a4b322">wrap_correction_done</a></td></tr>
<tr class="separator:a8ee44633b600f2b31541b213f0a4b322"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa8f3a07669847da56cd65bd95329d7a4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#aa8f3a07669847da56cd65bd95329d7a4">last_pkt_repeat_pict</a></td></tr>
<tr class="separator:aa8f3a07669847da56cd65bd95329d7a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7ff433fc7a48e7b58a4b91e8ff05cf25"><td class="memItemLeft" align="right" valign="top">int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#a7ff433fc7a48e7b58a4b91e8ff05cf25">filter_in_rescale_delta_last</a></td></tr>
<tr class="separator:a7ff433fc7a48e7b58a4b91e8ff05cf25"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeb79819841b6d172faf8c108db4ffbd0"><td class="memItemLeft" align="right" valign="top">int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#aeb79819841b6d172faf8c108db4ffbd0">min_pts</a></td></tr>
@ -145,15 +160,16 @@ Data Fields</h2></td></tr>
<tr class="separator:abcb8222561f1ee84a2f7a2157bed356c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1ed159d9bc9d71428699968505629b38"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#a1ed159d9bc9d71428699968505629b38">fix_sub_duration</a></td></tr>
<tr class="separator:a1ed159d9bc9d71428699968505629b38"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a620e4a8547e0bedc99f562539fc30421"><td class="memItemLeft" >struct {</td></tr>
<tr class="memitem:aad79c358d15e2c9af9ecfe08de8bf19d"><td class="memItemLeft" >&#160;&#160;&#160;<a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;&#160;&#160;<a class="el" href="../../d3/d6e/struct_input_stream.html#a408a0502c42d26b196c524812d70a7e8">got_output</a></td></tr>
<tr class="separator:aad79c358d15e2c9af9ecfe08de8bf19d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a26040c4e9ce36924b8cdad3c0b0b324c"><td class="memItemLeft" >&#160;&#160;&#160;<a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;&#160;&#160;<a class="el" href="../../d3/d6e/struct_input_stream.html#a6ae65382f22317b94b7ccfe00024d31a">ret</a></td></tr>
<tr class="separator:a26040c4e9ce36924b8cdad3c0b0b324c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2cbe4d705c7f3ccade0c5f3caad4db2b"><td class="memItemLeft" >&#160;&#160;&#160;AVSubtitle&#160;&#160;&#160;<a class="el" href="../../d3/d6e/struct_input_stream.html#ae37fb0410a65c6b2e5a38614f4481f07">subtitle</a></td></tr>
<tr class="separator:a2cbe4d705c7f3ccade0c5f3caad4db2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a620e4a8547e0bedc99f562539fc30421"><td class="memItemLeft" valign="top">}&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#a620e4a8547e0bedc99f562539fc30421">prev_sub</a></td></tr>
<tr class="separator:a620e4a8547e0bedc99f562539fc30421"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abfb2fd782cfdeec429963f4a9b378a15"><td class="memItemLeft" >struct {&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adf4a2ef75c7bef625d60aad657335d18"><td class="memItemLeft" >&#160;&#160;&#160;<a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;&#160;&#160;<a class="el" href="../../d3/d6e/struct_input_stream.html#a408a0502c42d26b196c524812d70a7e8">got_output</a>&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
<tr class="separator:adf4a2ef75c7bef625d60aad657335d18"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a973dada2a0b2631bae7f87a229e8a332"><td class="memItemLeft" >&#160;&#160;&#160;<a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;&#160;&#160;<a class="el" href="../../d3/d6e/struct_input_stream.html#a6ae65382f22317b94b7ccfe00024d31a">ret</a>&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
<tr class="separator:a973dada2a0b2631bae7f87a229e8a332"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a09a23912b6caddf3270aa96db79db091"><td class="memItemLeft" >&#160;&#160;&#160;AVSubtitle&#160;&#160;&#160;<a class="el" href="../../d3/d6e/struct_input_stream.html#ae37fb0410a65c6b2e5a38614f4481f07">subtitle</a>&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
<tr class="separator:a09a23912b6caddf3270aa96db79db091"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abfb2fd782cfdeec429963f4a9b378a15"><td class="memItemLeft" valign="top">}&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#abfb2fd782cfdeec429963f4a9b378a15">prev_sub</a>&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
<tr class="separator:abfb2fd782cfdeec429963f4a9b378a15"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acc9fee6e45ff302a2c1a06a053cbaa22"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="../../d4/dfd/struct_input_stream_1_1sub2video.html">InputStream::sub2video</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#acc9fee6e45ff302a2c1a06a053cbaa22">sub2video</a></td></tr>
<tr class="separator:acc9fee6e45ff302a2c1a06a053cbaa22"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad76700001c97c3ce465539f0c698e6bc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d7/d0c/struct_input_filter.html">InputFilter</a> **&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#ad76700001c97c3ce465539f0c698e6bc">filters</a></td></tr>
@ -170,16 +186,10 @@ Data Fields</h2></td></tr>
<tr class="separator:ae48685e82826c6b5922014d47e2cb6bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a252184ceda81f2d65f63f0470b877bd4"><td class="memItemLeft" align="right" valign="top">enum AVPixelFormat&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#a252184ceda81f2d65f63f0470b877bd4">hwaccel_output_format</a></td></tr>
<tr class="separator:a252184ceda81f2d65f63f0470b877bd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa455c67610467c0d79f42b9c2e620d9f"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#aa455c67610467c0d79f42b9c2e620d9f">hwaccel_ctx</a></td></tr>
<tr class="separator:aa455c67610467c0d79f42b9c2e620d9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a45c7ee6dae692d19ff3d275032aeea94"><td class="memItemLeft" align="right" valign="top">void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#a45c7ee6dae692d19ff3d275032aeea94">hwaccel_uninit</a> )(AVCodecContext *s)</td></tr>
<tr class="separator:a45c7ee6dae692d19ff3d275032aeea94"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad983487b3e7c29f53bb3336190f14051"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#ad983487b3e7c29f53bb3336190f14051">hwaccel_retrieve_data</a> )(AVCodecContext *s, AVFrame *frame)</td></tr>
<tr class="separator:ad983487b3e7c29f53bb3336190f14051"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a05769ba0518105626a6d64386795b48f"><td class="memItemLeft" align="right" valign="top">enum AVPixelFormat&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#a05769ba0518105626a6d64386795b48f">hwaccel_pix_fmt</a></td></tr>
<tr class="separator:a05769ba0518105626a6d64386795b48f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a91c6f154cc61c348f644987044423e57"><td class="memItemLeft" align="right" valign="top">enum AVPixelFormat&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#a91c6f154cc61c348f644987044423e57">hwaccel_retrieved_pix_fmt</a></td></tr>
<tr class="separator:a91c6f154cc61c348f644987044423e57"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6f49309998ba92804b9d16761817811e"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#a6f49309998ba92804b9d16761817811e">data_size</a></td></tr>
<tr class="separator:a6f49309998ba92804b9d16761817811e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ade4b46981af499da120e4e2b30517bef"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d6e/struct_input_stream.html#ade4b46981af499da120e4e2b30517bef">nb_packets</a></td></tr>
@ -195,10 +205,10 @@ 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#l00344">344</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#l00384">384</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="abcb8222561f1ee84a2f7a2157bed356c" name="abcb8222561f1ee84a2f7a2157bed356c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abcb8222561f1ee84a2f7a2157bed356c">&#9670;&nbsp;</a></span>autorotate</h2>
<h2 class="memtitle"><span class="permalink"><a href="#abcb8222561f1ee84a2f7a2157bed356c">&#9670;&#160;</a></span>autorotate</h2>
<div class="memitem">
<div class="memproto">
@ -209,12 +219,12 @@ 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#l00389">389</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#l00445">445</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a3a0034bb2959a06111810d2813975b24" name="a3a0034bb2959a06111810d2813975b24"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3a0034bb2959a06111810d2813975b24">&#9670;&nbsp;</a></span>cfr_next_pts</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a3a0034bb2959a06111810d2813975b24">&#9670;&#160;</a></span>cfr_next_pts</h2>
<div class="memitem">
<div class="memproto">
@ -225,12 +235,12 @@ 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#l00378">378</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#l00434">434</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a6f49309998ba92804b9d16761817811e" name="a6f49309998ba92804b9d16761817811e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6f49309998ba92804b9d16761817811e">&#9670;&nbsp;</a></span>data_size</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a6f49309998ba92804b9d16761817811e">&#9670;&#160;</a></span>data_size</h2>
<div class="memitem">
<div class="memproto">
@ -241,12 +251,12 @@ 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#l00429">429</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#l00481">481</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="aec71efef67656157f493555fddbbc1c9" name="aec71efef67656157f493555fddbbc1c9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aec71efef67656157f493555fddbbc1c9">&#9670;&nbsp;</a></span>dec</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aec71efef67656157f493555fddbbc1c9">&#9670;&#160;</a></span>dec</h2>
<div class="memitem">
<div class="memproto">
@ -257,12 +267,12 @@ 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#l00355">355</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#l00403">403</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a550ceee60cb995b284b52962dcba6597" name="a550ceee60cb995b284b52962dcba6597"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a550ceee60cb995b284b52962dcba6597">&#9670;&nbsp;</a></span>dec_ctx</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a550ceee60cb995b284b52962dcba6597">&#9670;&#160;</a></span>dec_ctx</h2>
<div class="memitem">
<div class="memproto">
@ -273,12 +283,12 @@ 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#l00354">354</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#l00402">402</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a1492e008c195bbd4e2c84bccbc5ee216" name="a1492e008c195bbd4e2c84bccbc5ee216"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1492e008c195bbd4e2c84bccbc5ee216">&#9670;&nbsp;</a></span>decoded_frame</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a1492e008c195bbd4e2c84bccbc5ee216">&#9670;&#160;</a></span>decoded_frame</h2>
<div class="memitem">
<div class="memproto">
@ -289,12 +299,12 @@ 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#l00356">356</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#l00404">404</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="ae73dddf18b49b6660263bc3a73a44290" name="ae73dddf18b49b6660263bc3a73a44290"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae73dddf18b49b6660263bc3a73a44290">&#9670;&nbsp;</a></span>decoder_opts</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ae73dddf18b49b6660263bc3a73a44290">&#9670;&#160;</a></span>decoder_opts</h2>
<div class="memitem">
<div class="memproto">
@ -305,12 +315,12 @@ 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#l00384">384</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#l00440">440</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="ac9fc51324b931c1db5c5c1445fe70c3b" name="ac9fc51324b931c1db5c5c1445fe70c3b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac9fc51324b931c1db5c5c1445fe70c3b">&#9670;&nbsp;</a></span>decoding_needed</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ac9fc51324b931c1db5c5c1445fe70c3b">&#9670;&#160;</a></span>decoding_needed</h2>
<div class="memitem">
<div class="memproto">
@ -321,12 +331,12 @@ 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#l00349">349</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#l00389">389</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="ac39249a26eeec2ed084fcc433ec9825e" name="ac39249a26eeec2ed084fcc433ec9825e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac39249a26eeec2ed084fcc433ec9825e">&#9670;&nbsp;</a></span>discard</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ac39249a26eeec2ed084fcc433ec9825e">&#9670;&#160;</a></span>discard</h2>
<div class="memitem">
<div class="memproto">
@ -337,12 +347,12 @@ 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#l00347">347</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#l00387">387</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a1e7893cdf661d9ad7c24fdccc60fa05e" name="a1e7893cdf661d9ad7c24fdccc60fa05e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1e7893cdf661d9ad7c24fdccc60fa05e">&#9670;&nbsp;</a></span>dts</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a1e7893cdf661d9ad7c24fdccc60fa05e">&#9670;&#160;</a></span>dts</h2>
<div class="memitem">
<div class="memproto">
@ -355,12 +365,12 @@ Data Fields</h2></td></tr>
<p>dts of the last packet read for this stream (in AV_TIME_BASE units) </p>
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00365">365</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#l00415">415</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a1690691cd9bdc598717be8aa911b01ad" name="a1690691cd9bdc598717be8aa911b01ad"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1690691cd9bdc598717be8aa911b01ad">&#9670;&nbsp;</a></span>dts_buffer</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a1690691cd9bdc598717be8aa911b01ad">&#9670;&#160;</a></span>dts_buffer</h2>
<div class="memitem">
<div class="memproto">
@ -371,12 +381,12 @@ 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#l00436">436</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#l00488">488</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="ad47d834630eee2dca258aa449fb1df47" name="ad47d834630eee2dca258aa449fb1df47"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad47d834630eee2dca258aa449fb1df47">&#9670;&nbsp;</a></span>file_index</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ad47d834630eee2dca258aa449fb1df47">&#9670;&#160;</a></span>file_index</h2>
<div class="memitem">
<div class="memproto">
@ -387,12 +397,12 @@ 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#l00345">345</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#l00385">385</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a7ff433fc7a48e7b58a4b91e8ff05cf25" name="a7ff433fc7a48e7b58a4b91e8ff05cf25"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7ff433fc7a48e7b58a4b91e8ff05cf25">&#9670;&nbsp;</a></span>filter_in_rescale_delta_last</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a7ff433fc7a48e7b58a4b91e8ff05cf25">&#9670;&#160;</a></span>filter_in_rescale_delta_last</h2>
<div class="memitem">
<div class="memproto">
@ -403,12 +413,12 @@ 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#l00371">371</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#l00427">427</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="ad76700001c97c3ce465539f0c698e6bc" name="ad76700001c97c3ce465539f0c698e6bc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad76700001c97c3ce465539f0c698e6bc">&#9670;&nbsp;</a></span>filters</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ad76700001c97c3ce465539f0c698e6bc">&#9670;&#160;</a></span>filters</h2>
<div class="memitem">
<div class="memproto">
@ -419,12 +429,12 @@ 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#l00409">409</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#l00465">465</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="aa4918133b75f0447192deea8c21f822e" name="aa4918133b75f0447192deea8c21f822e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa4918133b75f0447192deea8c21f822e">&#9670;&nbsp;</a></span>first_dts</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aa4918133b75f0447192deea8c21f822e">&#9670;&#160;</a></span>first_dts</h2>
<div class="memitem">
<div class="memproto">
@ -437,12 +447,12 @@ Data Fields</h2></td></tr>
<p>dts of the first packet read for this stream (in AV_TIME_BASE units) </p>
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00364">364</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#l00414">414</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a1ed159d9bc9d71428699968505629b38" name="a1ed159d9bc9d71428699968505629b38"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1ed159d9bc9d71428699968505629b38">&#9670;&nbsp;</a></span>fix_sub_duration</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a1ed159d9bc9d71428699968505629b38">&#9670;&#160;</a></span>fix_sub_duration</h2>
<div class="memitem">
<div class="memproto">
@ -453,12 +463,12 @@ 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#l00391">391</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#l00447">447</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="afbaeaac6e0b1fc3095bb90f17d58621d" name="afbaeaac6e0b1fc3095bb90f17d58621d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afbaeaac6e0b1fc3095bb90f17d58621d">&#9670;&nbsp;</a></span>framerate</h2>
<h2 class="memtitle"><span class="permalink"><a href="#afbaeaac6e0b1fc3095bb90f17d58621d">&#9670;&#160;</a></span>framerate</h2>
<div class="memitem">
<div class="memproto">
@ -469,76 +479,76 @@ 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#l00385">385</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#l00441">441</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="ac61e0f854402b58a64e676bdcfa75dfd" name="ac61e0f854402b58a64e676bdcfa75dfd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac61e0f854402b58a64e676bdcfa75dfd">&#9670;&nbsp;</a></span>frames_decoded</h2>
<a id="ae52558c47e51e5d92451dc4731b66d1d" name="ae52558c47e51e5d92451dc4731b66d1d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae52558c47e51e5d92451dc4731b66d1d">&#9670;&#160;</a></span>framerate_guessed</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint64_t InputStream::frames_decoded</td>
<td class="memname">AVRational InputStream::framerate_guessed</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00433">433</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#l00407">407</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a408a0502c42d26b196c524812d70a7e8" name="a408a0502c42d26b196c524812d70a7e8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a408a0502c42d26b196c524812d70a7e8">&#9670;&nbsp;</a></span>got_output</h2>
<a id="ac61e0f854402b58a64e676bdcfa75dfd" name="ac61e0f854402b58a64e676bdcfa75dfd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac61e0f854402b58a64e676bdcfa75dfd">&#9670;&#160;</a></span>frames_decoded</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> InputStream::got_output</td>
<td class="memname">uint64_t InputStream::frames_decoded</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00393">393</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#l00485">485</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a99e6bf56ec091f8af11744e4b0499327" name="a99e6bf56ec091f8af11744e4b0499327"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a99e6bf56ec091f8af11744e4b0499327">&#9670;&nbsp;</a></span>guess_layout_max</h2>
<a id="a408a0502c42d26b196c524812d70a7e8" name="a408a0502c42d26b196c524812d70a7e8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a408a0502c42d26b196c524812d70a7e8">&#9670;&#160;</a></span>got_output</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> InputStream::guess_layout_max</td>
<td class="memname"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> InputStream::got_output</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00387">387</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#l00449">449</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="aa455c67610467c0d79f42b9c2e620d9f" name="aa455c67610467c0d79f42b9c2e620d9f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa455c67610467c0d79f42b9c2e620d9f">&#9670;&nbsp;</a></span>hwaccel_ctx</h2>
<a id="a99e6bf56ec091f8af11744e4b0499327" name="a99e6bf56ec091f8af11744e4b0499327"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a99e6bf56ec091f8af11744e4b0499327">&#9670;&#160;</a></span>guess_layout_max</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void* InputStream::hwaccel_ctx</td>
<td class="memname"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> InputStream::guess_layout_max</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00421">421</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#l00443">443</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="ae48685e82826c6b5922014d47e2cb6bb" name="ae48685e82826c6b5922014d47e2cb6bb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae48685e82826c6b5922014d47e2cb6bb">&#9670;&nbsp;</a></span>hwaccel_device</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ae48685e82826c6b5922014d47e2cb6bb">&#9670;&#160;</a></span>hwaccel_device</h2>
<div class="memitem">
<div class="memproto">
@ -549,12 +559,12 @@ 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#l00417">417</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#l00473">473</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="af577e45cb148e174ef437f3cbaa8b628" name="af577e45cb148e174ef437f3cbaa8b628"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af577e45cb148e174ef437f3cbaa8b628">&#9670;&nbsp;</a></span>hwaccel_device_type</h2>
<h2 class="memtitle"><span class="permalink"><a href="#af577e45cb148e174ef437f3cbaa8b628">&#9670;&#160;</a></span>hwaccel_device_type</h2>
<div class="memitem">
<div class="memproto">
@ -565,12 +575,12 @@ 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#l00416">416</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#l00472">472</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a6c3473c28e30500adb3fa7886e6d7c3e" name="a6c3473c28e30500adb3fa7886e6d7c3e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6c3473c28e30500adb3fa7886e6d7c3e">&#9670;&nbsp;</a></span>hwaccel_id</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a6c3473c28e30500adb3fa7886e6d7c3e">&#9670;&#160;</a></span>hwaccel_id</h2>
<div class="memitem">
<div class="memproto">
@ -581,12 +591,12 @@ 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#l00415">415</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#l00471">471</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a252184ceda81f2d65f63f0470b877bd4" name="a252184ceda81f2d65f63f0470b877bd4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a252184ceda81f2d65f63f0470b877bd4">&#9670;&nbsp;</a></span>hwaccel_output_format</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a252184ceda81f2d65f63f0470b877bd4">&#9670;&#160;</a></span>hwaccel_output_format</h2>
<div class="memitem">
<div class="memproto">
@ -597,12 +607,12 @@ 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#l00418">418</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#l00474">474</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a05769ba0518105626a6d64386795b48f" name="a05769ba0518105626a6d64386795b48f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a05769ba0518105626a6d64386795b48f">&#9670;&nbsp;</a></span>hwaccel_pix_fmt</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a05769ba0518105626a6d64386795b48f">&#9670;&#160;</a></span>hwaccel_pix_fmt</h2>
<div class="memitem">
<div class="memproto">
@ -613,12 +623,12 @@ 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#l00424">424</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#l00477">477</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="ad983487b3e7c29f53bb3336190f14051" name="ad983487b3e7c29f53bb3336190f14051"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad983487b3e7c29f53bb3336190f14051">&#9670;&nbsp;</a></span>hwaccel_retrieve_data</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ad983487b3e7c29f53bb3336190f14051">&#9670;&#160;</a></span>hwaccel_retrieve_data</h2>
<div class="memitem">
<div class="memproto">
@ -629,44 +639,28 @@ 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#l00423">423</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#l00476">476</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a91c6f154cc61c348f644987044423e57" name="a91c6f154cc61c348f644987044423e57"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a91c6f154cc61c348f644987044423e57">&#9670;&nbsp;</a></span>hwaccel_retrieved_pix_fmt</h2>
<a id="aa8f3a07669847da56cd65bd95329d7a4" name="aa8f3a07669847da56cd65bd95329d7a4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa8f3a07669847da56cd65bd95329d7a4">&#9670;&#160;</a></span>last_pkt_repeat_pict</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum AVPixelFormat InputStream::hwaccel_retrieved_pix_fmt</td>
<td class="memname"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> InputStream::last_pkt_repeat_pict</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00425">425</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a45c7ee6dae692d19ff3d275032aeea94" name="a45c7ee6dae692d19ff3d275032aeea94"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a45c7ee6dae692d19ff3d275032aeea94">&#9670;&nbsp;</a></span>hwaccel_uninit</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void(* InputStream::hwaccel_uninit) (AVCodecContext *s)</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00422">422</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a911d752902aa8d4666ccefd8c912c91e" name="a911d752902aa8d4666ccefd8c912c91e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a911d752902aa8d4666ccefd8c912c91e">&#9670;&nbsp;</a></span>max_pts</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a911d752902aa8d4666ccefd8c912c91e">&#9670;&#160;</a></span>max_pts</h2>
<div class="memitem">
<div class="memproto">
@ -677,12 +671,12 @@ 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#l00374">374</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#l00430">430</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="aeb79819841b6d172faf8c108db4ffbd0" name="aeb79819841b6d172faf8c108db4ffbd0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aeb79819841b6d172faf8c108db4ffbd0">&#9670;&nbsp;</a></span>min_pts</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aeb79819841b6d172faf8c108db4ffbd0">&#9670;&#160;</a></span>min_pts</h2>
<div class="memitem">
<div class="memproto">
@ -693,12 +687,12 @@ 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#l00373">373</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#l00429">429</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a4b6db5d0fb15c8262b1ba543495fe628" name="a4b6db5d0fb15c8262b1ba543495fe628"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4b6db5d0fb15c8262b1ba543495fe628">&#9670;&nbsp;</a></span>nb_dts_buffer</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a4b6db5d0fb15c8262b1ba543495fe628">&#9670;&#160;</a></span>nb_dts_buffer</h2>
<div class="memitem">
<div class="memproto">
@ -709,12 +703,12 @@ 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#l00437">437</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#l00489">489</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a7c2c9b58a4db2101414f2d106f4244b0" name="a7c2c9b58a4db2101414f2d106f4244b0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7c2c9b58a4db2101414f2d106f4244b0">&#9670;&nbsp;</a></span>nb_filters</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a7c2c9b58a4db2101414f2d106f4244b0">&#9670;&#160;</a></span>nb_filters</h2>
<div class="memitem">
<div class="memproto">
@ -725,12 +719,12 @@ 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#l00410">410</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#l00466">466</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="ade4b46981af499da120e4e2b30517bef" name="ade4b46981af499da120e4e2b30517bef"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ade4b46981af499da120e4e2b30517bef">&#9670;&nbsp;</a></span>nb_packets</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ade4b46981af499da120e4e2b30517bef">&#9670;&#160;</a></span>nb_packets</h2>
<div class="memitem">
<div class="memproto">
@ -741,12 +735,12 @@ 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#l00431">431</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#l00483">483</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="af76c7165931c721b63008034c94d9275" name="af76c7165931c721b63008034c94d9275"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af76c7165931c721b63008034c94d9275">&#9670;&nbsp;</a></span>nb_samples</h2>
<h2 class="memtitle"><span class="permalink"><a href="#af76c7165931c721b63008034c94d9275">&#9670;&#160;</a></span>nb_samples</h2>
<div class="memitem">
<div class="memproto">
@ -757,12 +751,12 @@ 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#l00380">380</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#l00436">436</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a8026af86b300d31432bc1bf74910aea5" name="a8026af86b300d31432bc1bf74910aea5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8026af86b300d31432bc1bf74910aea5">&#9670;&nbsp;</a></span>next_dts</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a8026af86b300d31432bc1bf74910aea5">&#9670;&#160;</a></span>next_dts</h2>
<div class="memitem">
<div class="memproto">
@ -773,12 +767,12 @@ 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#l00363">363</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#l00413">413</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="ab14ac8d1cdb5c1dd6472dd4c13867368" name="ab14ac8d1cdb5c1dd6472dd4c13867368"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab14ac8d1cdb5c1dd6472dd4c13867368">&#9670;&nbsp;</a></span>next_pts</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ab14ac8d1cdb5c1dd6472dd4c13867368">&#9670;&#160;</a></span>next_pts</h2>
<div class="memitem">
<div class="memproto">
@ -791,12 +785,29 @@ Data Fields</h2></td></tr>
<p>synthetic pts for the next decode frame (in AV_TIME_BASE units) </p>
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00367">367</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#l00417">417</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a8815cc7a53aea25fa0aee7004a3202c3" name="a8815cc7a53aea25fa0aee7004a3202c3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8815cc7a53aea25fa0aee7004a3202c3">&#9670;&#160;</a></span>par</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">AVCodecParameters* InputStream::par</td>
</tr>
</table>
</div><div class="memdoc">
<p>Codec parameters - to be used by the decoding/streamcopy code. st-&gt;codecpar should not be accessed, because it may be modified concurrently by the demuxing thread. </p>
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00401">401</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a9d7d1e08713e8fb98d18d1ef6367e8e6" name="a9d7d1e08713e8fb98d18d1ef6367e8e6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9d7d1e08713e8fb98d18d1ef6367e8e6">&#9670;&nbsp;</a></span>pkt</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a9d7d1e08713e8fb98d18d1ef6367e8e6">&#9670;&#160;</a></span>pkt</h2>
<div class="memitem">
<div class="memproto">
@ -807,12 +818,12 @@ 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#l00357">357</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#l00405">405</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="ae6c0680d4f8c5173937451d79efef0bf" name="ae6c0680d4f8c5173937451d79efef0bf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae6c0680d4f8c5173937451d79efef0bf">&#9670;&nbsp;</a></span>prev_pkt_pts</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ae6c0680d4f8c5173937451d79efef0bf">&#9670;&#160;</a></span>prev_pkt_pts</h2>
<div class="memitem">
<div class="memproto">
@ -823,12 +834,12 @@ 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#l00359">359</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#l00409">409</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a620e4a8547e0bedc99f562539fc30421" name="a620e4a8547e0bedc99f562539fc30421"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a620e4a8547e0bedc99f562539fc30421">&#9670;&nbsp;</a></span></h2>
<a id="abfb2fd782cfdeec429963f4a9b378a15" name="abfb2fd782cfdeec429963f4a9b378a15"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abfb2fd782cfdeec429963f4a9b378a15">&#9670;&#160;</a></span>[struct]</h2>
<div class="memitem">
<div class="memproto">
@ -842,7 +853,7 @@ Data Fields</h2></td></tr>
</div>
</div>
<a id="a6c98acd7bffcebe0d9e13f9d845845e7" name="a6c98acd7bffcebe0d9e13f9d845845e7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6c98acd7bffcebe0d9e13f9d845845e7">&#9670;&nbsp;</a></span>processing_needed</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a6c98acd7bffcebe0d9e13f9d845845e7">&#9670;&#160;</a></span>processing_needed</h2>
<div class="memitem">
<div class="memproto">
@ -853,12 +864,12 @@ 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#l00352">352</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#l00392">392</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a5e77505bdc5afbc6ab5cf613894925b4" name="a5e77505bdc5afbc6ab5cf613894925b4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5e77505bdc5afbc6ab5cf613894925b4">&#9670;&nbsp;</a></span>pts</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a5e77505bdc5afbc6ab5cf613894925b4">&#9670;&#160;</a></span>pts</h2>
<div class="memitem">
<div class="memproto">
@ -871,12 +882,12 @@ Data Fields</h2></td></tr>
<p>current pts of the decoded frame (in AV_TIME_BASE units) </p>
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00368">368</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#l00418">418</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a809d93e64e76fe2f142102e58dc82a1e" name="a809d93e64e76fe2f142102e58dc82a1e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a809d93e64e76fe2f142102e58dc82a1e">&#9670;&nbsp;</a></span>reinit_filters</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a809d93e64e76fe2f142102e58dc82a1e">&#9670;&#160;</a></span>reinit_filters</h2>
<div class="memitem">
<div class="memproto">
@ -887,12 +898,12 @@ 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#l00412">412</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#l00468">468</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a6ae65382f22317b94b7ccfe00024d31a" name="a6ae65382f22317b94b7ccfe00024d31a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6ae65382f22317b94b7ccfe00024d31a">&#9670;&nbsp;</a></span>ret</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a6ae65382f22317b94b7ccfe00024d31a">&#9670;&#160;</a></span>ret</h2>
<div class="memitem">
<div class="memproto">
@ -903,12 +914,12 @@ 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#l00394">394</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#l00450">450</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="aa8aa609acb39eb21da43f02cdfb036eb" name="aa8aa609acb39eb21da43f02cdfb036eb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa8aa609acb39eb21da43f02cdfb036eb">&#9670;&nbsp;</a></span>samples_decoded</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aa8aa609acb39eb21da43f02cdfb036eb">&#9670;&#160;</a></span>samples_decoded</h2>
<div class="memitem">
<div class="memproto">
@ -919,12 +930,12 @@ 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#l00434">434</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#l00486">486</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a09d78f4795c4ff17dd54204450f2d394" name="a09d78f4795c4ff17dd54204450f2d394"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a09d78f4795c4ff17dd54204450f2d394">&#9670;&nbsp;</a></span>saw_first_ts</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a09d78f4795c4ff17dd54204450f2d394">&#9670;&#160;</a></span>saw_first_ts</h2>
<div class="memitem">
<div class="memproto">
@ -935,12 +946,12 @@ 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#l00383">383</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#l00439">439</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="acf438e2a33238676cb3f68b39ae18049" name="acf438e2a33238676cb3f68b39ae18049"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acf438e2a33238676cb3f68b39ae18049">&#9670;&nbsp;</a></span>st</h2>
<h2 class="memtitle"><span class="permalink"><a href="#acf438e2a33238676cb3f68b39ae18049">&#9670;&#160;</a></span>st</h2>
<div class="memitem">
<div class="memproto">
@ -951,12 +962,12 @@ 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#l00346">346</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#l00386">386</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a6718f5f7b2206b2848af5e35ae3a9186" name="a6718f5f7b2206b2848af5e35ae3a9186"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6718f5f7b2206b2848af5e35ae3a9186">&#9670;&nbsp;</a></span>start</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a6718f5f7b2206b2848af5e35ae3a9186">&#9670;&#160;</a></span>start</h2>
<div class="memitem">
<div class="memproto">
@ -967,12 +978,12 @@ 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#l00360">360</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#l00410">410</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="acc9fee6e45ff302a2c1a06a053cbaa22" name="acc9fee6e45ff302a2c1a06a053cbaa22"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acc9fee6e45ff302a2c1a06a053cbaa22">&#9670;&nbsp;</a></span>sub2video</h2>
<h2 class="memtitle"><span class="permalink"><a href="#acc9fee6e45ff302a2c1a06a053cbaa22">&#9670;&#160;</a></span>sub2video</h2>
<div class="memitem">
<div class="memproto">
@ -986,7 +997,7 @@ Data Fields</h2></td></tr>
</div>
</div>
<a id="ae37fb0410a65c6b2e5a38614f4481f07" name="ae37fb0410a65c6b2e5a38614f4481f07"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae37fb0410a65c6b2e5a38614f4481f07">&#9670;&nbsp;</a></span>subtitle</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ae37fb0410a65c6b2e5a38614f4481f07">&#9670;&#160;</a></span>subtitle</h2>
<div class="memitem">
<div class="memproto">
@ -997,12 +1008,12 @@ 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#l00395">395</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#l00451">451</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="abc71c343e0ade7e102adb45badfc6243" name="abc71c343e0ade7e102adb45badfc6243"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abc71c343e0ade7e102adb45badfc6243">&#9670;&nbsp;</a></span>top_field_first</h2>
<h2 class="memtitle"><span class="permalink"><a href="#abc71c343e0ade7e102adb45badfc6243">&#9670;&#160;</a></span>top_field_first</h2>
<div class="memitem">
<div class="memproto">
@ -1013,12 +1024,12 @@ 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#l00386">386</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#l00442">442</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a0dae26daa277d99147113de4ea449bc1" name="a0dae26daa277d99147113de4ea449bc1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0dae26daa277d99147113de4ea449bc1">&#9670;&nbsp;</a></span>ts_scale</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a0dae26daa277d99147113de4ea449bc1">&#9670;&#160;</a></span>ts_scale</h2>
<div class="memitem">
<div class="memproto">
@ -1029,12 +1040,12 @@ 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#l00382">382</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#l00438">438</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a86b730f87f0f8ebd088f94af51d91b96" name="a86b730f87f0f8ebd088f94af51d91b96"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a86b730f87f0f8ebd088f94af51d91b96">&#9670;&nbsp;</a></span>user_set_discard</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a86b730f87f0f8ebd088f94af51d91b96">&#9670;&#160;</a></span>user_set_discard</h2>
<div class="memitem">
<div class="memproto">
@ -1045,12 +1056,28 @@ 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#l00348">348</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#l00388">388</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a3df48bcac32b134bb20d3943759ac2fb" name="a3df48bcac32b134bb20d3943759ac2fb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3df48bcac32b134bb20d3943759ac2fb">&#9670;&#160;</a></span>want_frame_data</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> InputStream::want_frame_data</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00394">394</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a8ee44633b600f2b31541b213f0a4b322" name="a8ee44633b600f2b31541b213f0a4b322"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8ee44633b600f2b31541b213f0a4b322">&#9670;&nbsp;</a></span>wrap_correction_done</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a8ee44633b600f2b31541b213f0a4b322">&#9670;&#160;</a></span>wrap_correction_done</h2>
<div class="memitem">
<div class="memproto">
@ -1061,7 +1088,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#l00369">369</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#l00419">419</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
@ -1072,7 +1099,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Sep 17 2022 18:38:10 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -0,0 +1,241 @@
<!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" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: KeyframeForceCtx 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 id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @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:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(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">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-attribs">Data Fields</a> </div>
<div class="headertitle"><div class="title">KeyframeForceCtx Struct Reference</div></div>
</div><!--header-->
<div class="contents">
<p><code>#include &lt;<a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a>
Data Fields</h2></td></tr>
<tr class="memitem:addb12bcf31cc12b09a5f57cad628a41a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/da2/struct_keyframe_force_ctx.html#addb12bcf31cc12b09a5f57cad628a41a">type</a></td></tr>
<tr class="separator:addb12bcf31cc12b09a5f57cad628a41a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1f880ee515007075c37e454285ea9a83"><td class="memItemLeft" align="right" valign="top">int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/da2/struct_keyframe_force_ctx.html#a1f880ee515007075c37e454285ea9a83">ref_pts</a></td></tr>
<tr class="separator:a1f880ee515007075c37e454285ea9a83"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a10dc082c5f386bb0656c57ad00c8d5c4"><td class="memItemLeft" align="right" valign="top">int64_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/da2/struct_keyframe_force_ctx.html#a10dc082c5f386bb0656c57ad00c8d5c4">pts</a></td></tr>
<tr class="separator:a10dc082c5f386bb0656c57ad00c8d5c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adf798befc0a80e66b7f90fd8f17349ea"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/da2/struct_keyframe_force_ctx.html#adf798befc0a80e66b7f90fd8f17349ea">nb_pts</a></td></tr>
<tr class="separator:adf798befc0a80e66b7f90fd8f17349ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa6ccff7aa390582351eee47745ed9c89"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/da2/struct_keyframe_force_ctx.html#aa6ccff7aa390582351eee47745ed9c89">index</a></td></tr>
<tr class="separator:aa6ccff7aa390582351eee47745ed9c89"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaf699d1e164f7faf3df4f2f5e769aa75"><td class="memItemLeft" align="right" valign="top">AVExpr *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/da2/struct_keyframe_force_ctx.html#aaf699d1e164f7faf3df4f2f5e769aa75">pexpr</a></td></tr>
<tr class="separator:aaf699d1e164f7faf3df4f2f5e769aa75"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a27d7c4a8b7db90f94076ca6d5be8ad3a"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/da2/struct_keyframe_force_ctx.html#a27d7c4a8b7db90f94076ca6d5be8ad3a">expr_const_values</a> [<a class="el" href="../../d7/db3/fftools__ffmpeg_8h.html#aa21f6f0cd9174b2bb6223cbd15b83508a433ef01f7e501e6a6afbee4980a80ab1">FKF_NB</a>]</td></tr>
<tr class="separator:a27d7c4a8b7db90f94076ca6d5be8ad3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaf1736d785fade32649e301ce55df55b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/da2/struct_keyframe_force_ctx.html#aaf1736d785fade32649e301ce55df55b">dropped_keyframe</a></td></tr>
<tr class="separator:aaf1736d785fade32649e301ce55df55b"><td class="memSeparator" colspan="2">&#160;</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#l00595">595</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="aaf1736d785fade32649e301ce55df55b" name="aaf1736d785fade32649e301ce55df55b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaf1736d785fade32649e301ce55df55b">&#9670;&#160;</a></span>dropped_keyframe</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> KeyframeForceCtx::dropped_keyframe</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00608">608</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a27d7c4a8b7db90f94076ca6d5be8ad3a" name="a27d7c4a8b7db90f94076ca6d5be8ad3a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a27d7c4a8b7db90f94076ca6d5be8ad3a">&#9670;&#160;</a></span>expr_const_values</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">double KeyframeForceCtx::expr_const_values[<a class="el" href="../../d7/db3/fftools__ffmpeg_8h.html#aa21f6f0cd9174b2bb6223cbd15b83508a433ef01f7e501e6a6afbee4980a80ab1">FKF_NB</a>]</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00606">606</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="aa6ccff7aa390582351eee47745ed9c89" name="aa6ccff7aa390582351eee47745ed9c89"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa6ccff7aa390582351eee47745ed9c89">&#9670;&#160;</a></span>index</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> KeyframeForceCtx::index</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00603">603</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="adf798befc0a80e66b7f90fd8f17349ea" name="adf798befc0a80e66b7f90fd8f17349ea"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adf798befc0a80e66b7f90fd8f17349ea">&#9670;&#160;</a></span>nb_pts</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> KeyframeForceCtx::nb_pts</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00602">602</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="aaf699d1e164f7faf3df4f2f5e769aa75" name="aaf699d1e164f7faf3df4f2f5e769aa75"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaf699d1e164f7faf3df4f2f5e769aa75">&#9670;&#160;</a></span>pexpr</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">AVExpr* KeyframeForceCtx::pexpr</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00605">605</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a10dc082c5f386bb0656c57ad00c8d5c4" name="a10dc082c5f386bb0656c57ad00c8d5c4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a10dc082c5f386bb0656c57ad00c8d5c4">&#9670;&#160;</a></span>pts</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int64_t* KeyframeForceCtx::pts</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00601">601</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a1f880ee515007075c37e454285ea9a83" name="a1f880ee515007075c37e454285ea9a83"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1f880ee515007075c37e454285ea9a83">&#9670;&#160;</a></span>ref_pts</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int64_t KeyframeForceCtx::ref_pts</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00598">598</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="addb12bcf31cc12b09a5f57cad628a41a" name="addb12bcf31cc12b09a5f57cad628a41a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#addb12bcf31cc12b09a5f57cad628a41a">&#9670;&#160;</a></span>type</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> KeyframeForceCtx::type</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00596">596</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<hr/>The documentation for this struct was generated from the following file:<ul>
<li><a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: ffmpegkit_exception.h File Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'Search','.html');
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
</div><!-- top -->
@ -78,7 +85,7 @@ Variables</h2></td></tr>
</table>
<h2 class="groupheader">Variable Documentation</h2>
<a id="a602bfc62417fcbda9f5e3e6604917b3c" name="a602bfc62417fcbda9f5e3e6604917b3c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a602bfc62417fcbda9f5e3e6604917b3c">&#9670;&nbsp;</a></span>ex_buf__</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a602bfc62417fcbda9f5e3e6604917b3c">&#9670;&#160;</a></span>ex_buf__</h2>
<div class="memitem">
<div class="memproto">
@ -96,7 +103,7 @@ Variables</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p >Holds information to implement exception handling. </p>
<p>Holds information to implement exception handling. </p>
<p class="definition">Definition at line <a class="el" href="../../d9/d56/ffmpegkit__exception_8c_source.html#l00023">23</a> of file <a class="el" href="../../d9/d56/ffmpegkit__exception_8c_source.html">ffmpegkit_exception.c</a>.</p>
@ -105,7 +112,7 @@ Variables</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Sep 17 2022 18:38:10 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: ffmpegkit_exception.h Source File</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'Search','.html');
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
@ -57,9 +57,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
@ -94,11 +101,11 @@ $(function() {
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="keyword">extern</span> __thread jmp_buf <a class="code hl_variable" href="../../d3/dad/ffmpegkit__exception_8h.html#a602bfc62417fcbda9f5e3e6604917b3c">ex_buf__</a>;</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="preprocessor">#endif </span><span class="comment">// FFMPEG_KIT_EXCEPTION_H</span></div>
<div class="ttc" id="affmpegkit__exception_8h_html_a602bfc62417fcbda9f5e3e6604917b3c"><div class="ttname"><a href="../../d3/dad/ffmpegkit__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="../../d9/d56/ffmpegkit__exception_8c_source.html#l00023">ffmpegkit_exception.c:23</a></div></div>
<div class="ttc" id="affmpegkit__exception_8h_html_a602bfc62417fcbda9f5e3e6604917b3c"><div class="ttname"><a href="../../d3/dad/ffmpegkit__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="../../d9/d56/ffmpegkit__exception_8c_source.html#l00023">ffmpegkit_exception.c:23</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Sep 17 2022 18:38:09 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: FlatContext Struct Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'Search','.html');
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
</div><!-- top -->
@ -82,10 +89,10 @@ 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="../../d8/d78/fftools__ffprobe_8c_source.html#l01343">1343</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01357">1357</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="acad059863d0d81b605f384b447e49734" name="acad059863d0d81b605f384b447e49734"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acad059863d0d81b605f384b447e49734">&#9670;&nbsp;</a></span>class</h2>
<h2 class="memtitle"><span class="permalink"><a href="#acad059863d0d81b605f384b447e49734">&#9670;&#160;</a></span>class</h2>
<div class="memitem">
<div class="memproto">
@ -96,12 +103,12 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01344">1344</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01358">1358</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="aba2cac86faa289090af7543ff4ffcdcc" name="aba2cac86faa289090af7543ff4ffcdcc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aba2cac86faa289090af7543ff4ffcdcc">&#9670;&nbsp;</a></span>hierarchical</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aba2cac86faa289090af7543ff4ffcdcc">&#9670;&#160;</a></span>hierarchical</h2>
<div class="memitem">
<div class="memproto">
@ -112,12 +119,12 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01347">1347</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01361">1361</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="a529baa5a1cba47d2eb62f49b0a4fd03b" name="a529baa5a1cba47d2eb62f49b0a4fd03b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a529baa5a1cba47d2eb62f49b0a4fd03b">&#9670;&nbsp;</a></span>sep</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a529baa5a1cba47d2eb62f49b0a4fd03b">&#9670;&#160;</a></span>sep</h2>
<div class="memitem">
<div class="memproto">
@ -128,12 +135,12 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01346">1346</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01360">1360</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="a509af19cca73c04f13342034fee165c7" name="a509af19cca73c04f13342034fee165c7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a509af19cca73c04f13342034fee165c7">&#9670;&nbsp;</a></span>sep_str</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a509af19cca73c04f13342034fee165c7">&#9670;&#160;</a></span>sep_str</h2>
<div class="memitem">
<div class="memproto">
@ -144,7 +151,7 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01345">1345</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01359">1359</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
@ -154,7 +161,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Sep 17 2022 18:38:10 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -0,0 +1,185 @@
<!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" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: ObjPool 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 id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @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:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(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">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-attribs">Data Fields</a> </div>
<div class="headertitle"><div class="title">ObjPool Struct Reference</div></div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a>
Data Fields</h2></td></tr>
<tr class="memitem:ab342c9ac56f3fc47292cdbd546c6b2bd"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d62/struct_obj_pool.html#ab342c9ac56f3fc47292cdbd546c6b2bd">pool</a> [32]</td></tr>
<tr class="separator:ab342c9ac56f3fc47292cdbd546c6b2bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5af7de4b62443f1cab5cd4d6d8a55cc2"><td class="memItemLeft" align="right" valign="top">unsigned <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d62/struct_obj_pool.html#a5af7de4b62443f1cab5cd4d6d8a55cc2">pool_count</a></td></tr>
<tr class="separator:a5af7de4b62443f1cab5cd4d6d8a55cc2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a12072478fa85f969fbf362ff4007db72"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d5/df5/fftools__objpool_8h.html#a278e923ca4660a44531c958fb7444b55">ObjPoolCBAlloc</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d62/struct_obj_pool.html#a12072478fa85f969fbf362ff4007db72">alloc</a></td></tr>
<tr class="separator:a12072478fa85f969fbf362ff4007db72"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3d6ad08534eee68a2bf333a81720f3ca"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d5/df5/fftools__objpool_8h.html#a9cd63c894cb5bdb83c8f98a944f73f87">ObjPoolCBReset</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d62/struct_obj_pool.html#a3d6ad08534eee68a2bf333a81720f3ca">reset</a></td></tr>
<tr class="separator:a3d6ad08534eee68a2bf333a81720f3ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a79329d72f2b20c4b2b5a0734ba1d281f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d5/df5/fftools__objpool_8h.html#a5c2ce6b4dfa9698db080e2577aee2759">ObjPoolCBFree</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d62/struct_obj_pool.html#a79329d72f2b20c4b2b5a0734ba1d281f">free</a></td></tr>
<tr class="separator:a79329d72f2b20c4b2b5a0734ba1d281f"><td class="memSeparator" colspan="2">&#160;</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/dd8/fftools__objpool_8c_source.html#l00044">44</a> of file <a class="el" href="../../d7/dd8/fftools__objpool_8c_source.html">fftools_objpool.c</a>.</p>
</div><h2 class="groupheader">Field Documentation</h2>
<a id="a12072478fa85f969fbf362ff4007db72" name="a12072478fa85f969fbf362ff4007db72"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a12072478fa85f969fbf362ff4007db72">&#9670;&#160;</a></span>alloc</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="../../d5/df5/fftools__objpool_8h.html#a278e923ca4660a44531c958fb7444b55">ObjPoolCBAlloc</a> ObjPool::alloc</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d7/dd8/fftools__objpool_8c_source.html#l00048">48</a> of file <a class="el" href="../../d7/dd8/fftools__objpool_8c_source.html">fftools_objpool.c</a>.</p>
</div>
</div>
<a id="a79329d72f2b20c4b2b5a0734ba1d281f" name="a79329d72f2b20c4b2b5a0734ba1d281f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a79329d72f2b20c4b2b5a0734ba1d281f">&#9670;&#160;</a></span>free</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="../../d5/df5/fftools__objpool_8h.html#a5c2ce6b4dfa9698db080e2577aee2759">ObjPoolCBFree</a> ObjPool::free</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d7/dd8/fftools__objpool_8c_source.html#l00050">50</a> of file <a class="el" href="../../d7/dd8/fftools__objpool_8c_source.html">fftools_objpool.c</a>.</p>
</div>
</div>
<a id="ab342c9ac56f3fc47292cdbd546c6b2bd" name="ab342c9ac56f3fc47292cdbd546c6b2bd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab342c9ac56f3fc47292cdbd546c6b2bd">&#9670;&#160;</a></span>pool</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void* ObjPool::pool[32]</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d7/dd8/fftools__objpool_8c_source.html#l00045">45</a> of file <a class="el" href="../../d7/dd8/fftools__objpool_8c_source.html">fftools_objpool.c</a>.</p>
</div>
</div>
<a id="a5af7de4b62443f1cab5cd4d6d8a55cc2" name="a5af7de4b62443f1cab5cd4d6d8a55cc2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5af7de4b62443f1cab5cd4d6d8a55cc2">&#9670;&#160;</a></span>pool_count</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> ObjPool::pool_count</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d7/dd8/fftools__objpool_8c_source.html#l00046">46</a> of file <a class="el" href="../../d7/dd8/fftools__objpool_8c_source.html">fftools_objpool.c</a>.</p>
</div>
</div>
<a id="a3d6ad08534eee68a2bf333a81720f3ca" name="a3d6ad08534eee68a2bf333a81720f3ca"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3d6ad08534eee68a2bf333a81720f3ca">&#9670;&#160;</a></span>reset</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="../../d5/df5/fftools__objpool_8h.html#a9cd63c894cb5bdb83c8f98a944f73f87">ObjPoolCBReset</a> ObjPool::reset</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d7/dd8/fftools__objpool_8c_source.html#l00049">49</a> of file <a class="el" href="../../d7/dd8/fftools__objpool_8c_source.html">fftools_objpool.c</a>.</p>
</div>
</div>
<hr/>The documentation for this struct was generated from the following file:<ul>
<li><a class="el" href="../../d7/dd8/fftools__objpool_8c_source.html">fftools_objpool.c</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: DefaultContext Struct Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'Search','.html');
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
</div><!-- top -->
@ -82,10 +89,10 @@ 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="../../d8/d78/fftools__ffprobe_8c_source.html#l01033">1033</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01047">1047</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="afa8e41a1d7f3eb5e48102d58da4c7db3" name="afa8e41a1d7f3eb5e48102d58da4c7db3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afa8e41a1d7f3eb5e48102d58da4c7db3">&#9670;&nbsp;</a></span>class</h2>
<h2 class="memtitle"><span class="permalink"><a href="#afa8e41a1d7f3eb5e48102d58da4c7db3">&#9670;&#160;</a></span>class</h2>
<div class="memitem">
<div class="memproto">
@ -96,12 +103,12 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01034">1034</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01048">1048</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="a98cfc785481b62077206b991234b0f9e" name="a98cfc785481b62077206b991234b0f9e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a98cfc785481b62077206b991234b0f9e">&#9670;&nbsp;</a></span>nested_section</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a98cfc785481b62077206b991234b0f9e">&#9670;&#160;</a></span>nested_section</h2>
<div class="memitem">
<div class="memproto">
@ -112,12 +119,12 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01037">1037</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01051">1051</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="aa4fb1e189f6e2788e6ccc23e65dc3d98" name="aa4fb1e189f6e2788e6ccc23e65dc3d98"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa4fb1e189f6e2788e6ccc23e65dc3d98">&#9670;&nbsp;</a></span>nokey</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aa4fb1e189f6e2788e6ccc23e65dc3d98">&#9670;&#160;</a></span>nokey</h2>
<div class="memitem">
<div class="memproto">
@ -128,12 +135,12 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01035">1035</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01049">1049</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
<a id="a7cae04407b25e67940bc2ff2c70496dd" name="a7cae04407b25e67940bc2ff2c70496dd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7cae04407b25e67940bc2ff2c70496dd">&#9670;&nbsp;</a></span>noprint_wrappers</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a7cae04407b25e67940bc2ff2c70496dd">&#9670;&#160;</a></span>noprint_wrappers</h2>
<div class="memitem">
<div class="memproto">
@ -144,7 +151,7 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01036">1036</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html#l01050">1050</a> of file <a class="el" href="../../d8/d78/fftools__ffprobe_8c_source.html">fftools_ffprobe.c</a>.</p>
</div>
</div>
@ -154,7 +161,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Sep 17 2022 18:38:10 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: InputStream::sub2video Struct Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'Search','.html');
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
@ -82,7 +89,7 @@ Data Fields</h2></td></tr>
<tr class="memitem:aaf500e3a36c6e6a6920a8e18c6478a8e"><td class="memItemLeft" align="right" valign="top">int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#aaf500e3a36c6e6a6920a8e18c6478a8e">end_pts</a></td></tr>
<tr class="separator:aaf500e3a36c6e6a6920a8e18c6478a8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a509d9d1872ee8969a6769ce138da3fb2"><td class="memItemLeft" align="right" valign="top">AVFifo *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#a509d9d1872ee8969a6769ce138da3fb2">sub_queue</a></td></tr>
<tr class="memdesc:a509d9d1872ee8969a6769ce138da3fb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">queue of AVSubtitle* before filter init <a href="../../d4/dfd/struct_input_stream_1_1sub2video.html#a509d9d1872ee8969a6769ce138da3fb2">More...</a><br /></td></tr>
<tr class="memdesc:a509d9d1872ee8969a6769ce138da3fb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">queue of AVSubtitle* before filter init <br /></td></tr>
<tr class="separator:a509d9d1872ee8969a6769ce138da3fb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0e7ca3e0eebc5db360ae15f2dac3d622"><td class="memItemLeft" align="right" valign="top">AVFrame *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#a0e7ca3e0eebc5db360ae15f2dac3d622">frame</a></td></tr>
<tr class="separator:a0e7ca3e0eebc5db360ae15f2dac3d622"><td class="memSeparator" colspan="2">&#160;</td></tr>
@ -91,15 +98,15 @@ Data Fields</h2></td></tr>
<tr class="memitem:aeecdbc3f86c3bcbf9c42ac7a867e91db"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#aeecdbc3f86c3bcbf9c42ac7a867e91db">h</a></td></tr>
<tr class="separator:aeecdbc3f86c3bcbf9c42ac7a867e91db"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a15e606590596931e88ebd0b4626bfe97"><td class="memItemLeft" align="right" valign="top">unsigned <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dfd/struct_input_stream_1_1sub2video.html#a15e606590596931e88ebd0b4626bfe97">initialize</a></td></tr>
<tr class="memdesc:a15e606590596931e88ebd0b4626bfe97"><td class="mdescLeft">&#160;</td><td class="mdescRight">marks if sub2video_update should force an initialization <a href="../../d4/dfd/struct_input_stream_1_1sub2video.html#a15e606590596931e88ebd0b4626bfe97">More...</a><br /></td></tr>
<tr class="memdesc:a15e606590596931e88ebd0b4626bfe97"><td class="mdescLeft">&#160;</td><td class="mdescRight">marks if sub2video_update should force an initialization <br /></td></tr>
<tr class="separator:a15e606590596931e88ebd0b4626bfe97"><td class="memSeparator" colspan="2">&#160;</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#l00398">398</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#l00454">454</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="aaf500e3a36c6e6a6920a8e18c6478a8e" name="aaf500e3a36c6e6a6920a8e18c6478a8e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaf500e3a36c6e6a6920a8e18c6478a8e">&#9670;&nbsp;</a></span>end_pts</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aaf500e3a36c6e6a6920a8e18c6478a8e">&#9670;&#160;</a></span>end_pts</h2>
<div class="memitem">
<div class="memproto">
@ -110,12 +117,12 @@ 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#l00400">400</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#l00456">456</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a0e7ca3e0eebc5db360ae15f2dac3d622" name="a0e7ca3e0eebc5db360ae15f2dac3d622"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0e7ca3e0eebc5db360ae15f2dac3d622">&#9670;&nbsp;</a></span>frame</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a0e7ca3e0eebc5db360ae15f2dac3d622">&#9670;&#160;</a></span>frame</h2>
<div class="memitem">
<div class="memproto">
@ -126,12 +133,12 @@ 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#l00402">402</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#l00458">458</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="aeecdbc3f86c3bcbf9c42ac7a867e91db" name="aeecdbc3f86c3bcbf9c42ac7a867e91db"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aeecdbc3f86c3bcbf9c42ac7a867e91db">&#9670;&nbsp;</a></span>h</h2>
<h2 class="memtitle"><span class="permalink"><a href="#aeecdbc3f86c3bcbf9c42ac7a867e91db">&#9670;&#160;</a></span>h</h2>
<div class="memitem">
<div class="memproto">
@ -142,12 +149,12 @@ 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#l00403">403</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#l00459">459</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a15e606590596931e88ebd0b4626bfe97" name="a15e606590596931e88ebd0b4626bfe97"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a15e606590596931e88ebd0b4626bfe97">&#9670;&nbsp;</a></span>initialize</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a15e606590596931e88ebd0b4626bfe97">&#9670;&#160;</a></span>initialize</h2>
<div class="memitem">
<div class="memproto">
@ -160,12 +167,12 @@ Data Fields</h2></td></tr>
<p>marks if sub2video_update should force an initialization </p>
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00404">404</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#l00460">460</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a992c9fe5de3acf5dce388cffda4fdce8" name="a992c9fe5de3acf5dce388cffda4fdce8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a992c9fe5de3acf5dce388cffda4fdce8">&#9670;&nbsp;</a></span>last_pts</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a992c9fe5de3acf5dce388cffda4fdce8">&#9670;&#160;</a></span>last_pts</h2>
<div class="memitem">
<div class="memproto">
@ -176,12 +183,12 @@ 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#l00399">399</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#l00455">455</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a509d9d1872ee8969a6769ce138da3fb2" name="a509d9d1872ee8969a6769ce138da3fb2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a509d9d1872ee8969a6769ce138da3fb2">&#9670;&nbsp;</a></span>sub_queue</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a509d9d1872ee8969a6769ce138da3fb2">&#9670;&#160;</a></span>sub_queue</h2>
<div class="memitem">
<div class="memproto">
@ -194,12 +201,12 @@ Data Fields</h2></td></tr>
<p>queue of AVSubtitle* before filter init </p>
<p class="definition">Definition at line <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html#l00401">401</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#l00457">457</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
<a id="a0bd83c4ad9f5301d63e49a9f94b8cf7d" name="a0bd83c4ad9f5301d63e49a9f94b8cf7d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0bd83c4ad9f5301d63e49a9f94b8cf7d">&#9670;&nbsp;</a></span>w</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a0bd83c4ad9f5301d63e49a9f94b8cf7d">&#9670;&#160;</a></span>w</h2>
<div class="memitem">
<div class="memproto">
@ -210,7 +217,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#l00403">403</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#l00459">459</a> of file <a class="el" href="../../d7/db3/fftools__ffmpeg_8h_source.html">fftools_ffmpeg.h</a>.</p>
</div>
</div>
@ -220,7 +227,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Sep 17 2022 18:38:10 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: BenchmarkTimeStamps Struct Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'Search','.html');
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
</div><!-- top -->
@ -80,10 +87,10 @@ 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/d48/fftools__ffmpeg_8c_source.html#l00176">176</a> of file <a class="el" href="../../d7/d48/fftools__ffmpeg_8c_source.html">fftools_ffmpeg.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d7/d48/fftools__ffmpeg_8c_source.html#l00187">187</a> of file <a class="el" href="../../d7/d48/fftools__ffmpeg_8c_source.html">fftools_ffmpeg.c</a>.</p>
</div><h2 class="groupheader">Field Documentation</h2>
<a id="a8639f0bbe9044fc765f4ec5b3968a488" name="a8639f0bbe9044fc765f4ec5b3968a488"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8639f0bbe9044fc765f4ec5b3968a488">&#9670;&nbsp;</a></span>real_usec</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a8639f0bbe9044fc765f4ec5b3968a488">&#9670;&#160;</a></span>real_usec</h2>
<div class="memitem">
<div class="memproto">
@ -94,12 +101,12 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d7/d48/fftools__ffmpeg_8c_source.html#l00177">177</a> of file <a class="el" href="../../d7/d48/fftools__ffmpeg_8c_source.html">fftools_ffmpeg.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d7/d48/fftools__ffmpeg_8c_source.html#l00188">188</a> of file <a class="el" href="../../d7/d48/fftools__ffmpeg_8c_source.html">fftools_ffmpeg.c</a>.</p>
</div>
</div>
<a id="a06a44cae9b837e8481ba86a648cbcc95" name="a06a44cae9b837e8481ba86a648cbcc95"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a06a44cae9b837e8481ba86a648cbcc95">&#9670;&nbsp;</a></span>sys_usec</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a06a44cae9b837e8481ba86a648cbcc95">&#9670;&#160;</a></span>sys_usec</h2>
<div class="memitem">
<div class="memproto">
@ -110,12 +117,12 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d7/d48/fftools__ffmpeg_8c_source.html#l00179">179</a> of file <a class="el" href="../../d7/d48/fftools__ffmpeg_8c_source.html">fftools_ffmpeg.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d7/d48/fftools__ffmpeg_8c_source.html#l00190">190</a> of file <a class="el" href="../../d7/d48/fftools__ffmpeg_8c_source.html">fftools_ffmpeg.c</a>.</p>
</div>
</div>
<a id="ad0f18c644b145f2ef6c7bd37c22d7cd6" name="ad0f18c644b145f2ef6c7bd37c22d7cd6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad0f18c644b145f2ef6c7bd37c22d7cd6">&#9670;&nbsp;</a></span>user_usec</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ad0f18c644b145f2ef6c7bd37c22d7cd6">&#9670;&#160;</a></span>user_usec</h2>
<div class="memitem">
<div class="memproto">
@ -126,7 +133,7 @@ Data Fields</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d7/d48/fftools__ffmpeg_8c_source.html#l00178">178</a> of file <a class="el" href="../../d7/d48/fftools__ffmpeg_8c_source.html">fftools_ffmpeg.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d7/d48/fftools__ffmpeg_8c_source.html#l00189">189</a> of file <a class="el" href="../../d7/d48/fftools__ffmpeg_8c_source.html">fftools_ffmpeg.c</a>.</p>
</div>
</div>
@ -136,7 +143,7 @@ Data Fields</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Sep 17 2022 18:38:10 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

@ -1,9 +1,9 @@
<!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">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="generator" content="Doxygen 1.9.7"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: fftools_ffmpeg_mux.c File Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign">
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;5.1</span>
<div id="projectname">FFmpegKit Android API<span id="projectnumber">&#160;6.0</span>
</div>
</td>
</tr>
@ -30,10 +30,10 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'Search','.html');
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
@ -56,15 +56,23 @@ $(function() {
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<a href="#func-members">Functions</a> &#124;
<a href="#var-members">Variables</a> </div>
<div class="headertitle"><div class="title">fftools_ffmpeg_mux.c File Reference</div></div>
</div><!--header-->
<div class="contents">
@ -73,22 +81,61 @@ $(function() {
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ac237321f98a7041c9f6004d2ce8a425c"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#ac237321f98a7041c9f6004d2ce8a425c">close_all_output_streams</a> (<a class="el" href="../../db/dde/struct_output_stream.html">OutputStream</a> *ost, <a class="el" href="../../d7/db3/fftools__ffmpeg_8h.html#a54e97364f74d8bf15062a8ea185f1c31">OSTFinished</a> this_stream, <a class="el" href="../../d7/db3/fftools__ffmpeg_8h.html#a54e97364f74d8bf15062a8ea185f1c31">OSTFinished</a> others)</td></tr>
<tr class="separator:ac237321f98a7041c9f6004d2ce8a425c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aea0554f44067721a9066e82c8f5fc847"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#aea0554f44067721a9066e82c8f5fc847">of_write_packet</a> (<a class="el" href="../../de/df2/struct_output_file.html">OutputFile</a> *of, AVPacket *pkt, <a class="el" href="../../db/dde/struct_output_stream.html">OutputStream</a> *ost, <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> unqueue)</td></tr>
<tr class="separator:aea0554f44067721a9066e82c8f5fc847"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae83a6b9dd35a60f10d79371fb8d1c469"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/d16/struct_mux_stream.html">MuxStream</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#ae83a6b9dd35a60f10d79371fb8d1c469">ms_from_ost</a> (<a class="el" href="../../db/dde/struct_output_stream.html">OutputStream</a> *ost)</td></tr>
<tr class="separator:ae83a6b9dd35a60f10d79371fb8d1c469"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a26dcef2b6f9acc114d07755777eb1974"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="../../de/d29/struct_muxer.html">Muxer</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#a26dcef2b6f9acc114d07755777eb1974">mux_from_of</a> (<a class="el" href="../../de/df2/struct_output_file.html">OutputFile</a> *of)</td></tr>
<tr class="separator:a26dcef2b6f9acc114d07755777eb1974"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a036baf3fb518cc0d7dcc1e91758141a8"><td class="memItemLeft" align="right" valign="top">static int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#a036baf3fb518cc0d7dcc1e91758141a8">filesize</a> (AVIOContext *pb)</td></tr>
<tr class="separator:a036baf3fb518cc0d7dcc1e91758141a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afef236e146a038c9ca2e40297044238d"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#afef236e146a038c9ca2e40297044238d">write_packet</a> (<a class="el" href="../../de/d29/struct_muxer.html">Muxer</a> *mux, <a class="el" href="../../db/dde/struct_output_stream.html">OutputStream</a> *ost, AVPacket *pkt)</td></tr>
<tr class="separator:afef236e146a038c9ca2e40297044238d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9485345078d3bad91b3fd12071e41f50"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#a9485345078d3bad91b3fd12071e41f50">sync_queue_process</a> (<a class="el" href="../../de/d29/struct_muxer.html">Muxer</a> *mux, <a class="el" href="../../db/dde/struct_output_stream.html">OutputStream</a> *ost, AVPacket *pkt, <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> *stream_eof)</td></tr>
<tr class="separator:a9485345078d3bad91b3fd12071e41f50"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a91f1e0862fd8c633a06819a942a71fe7"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#a91f1e0862fd8c633a06819a942a71fe7">thread_set_name</a> (<a class="el" href="../../de/df2/struct_output_file.html">OutputFile</a> *of)</td></tr>
<tr class="separator:a91f1e0862fd8c633a06819a942a71fe7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aee717b0de03a034174434f2297ccad89"><td class="memItemLeft" align="right" valign="top">static void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#aee717b0de03a034174434f2297ccad89">muxer_thread</a> (void *arg)</td></tr>
<tr class="separator:aee717b0de03a034174434f2297ccad89"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad54b783ddce1362bc44dc91ff0ca9e7a"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#ad54b783ddce1362bc44dc91ff0ca9e7a">thread_submit_packet</a> (<a class="el" href="../../de/d29/struct_muxer.html">Muxer</a> *mux, <a class="el" href="../../db/dde/struct_output_stream.html">OutputStream</a> *ost, AVPacket *pkt)</td></tr>
<tr class="separator:ad54b783ddce1362bc44dc91ff0ca9e7a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab552a82e1c941a2555ce8fbae7881438"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#ab552a82e1c941a2555ce8fbae7881438">queue_packet</a> (<a class="el" href="../../de/d29/struct_muxer.html">Muxer</a> *mux, <a class="el" href="../../db/dde/struct_output_stream.html">OutputStream</a> *ost, AVPacket *pkt)</td></tr>
<tr class="separator:ab552a82e1c941a2555ce8fbae7881438"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afa883d20893269bd8d5ff3cc06060c1c"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#afa883d20893269bd8d5ff3cc06060c1c">submit_packet</a> (<a class="el" href="../../de/d29/struct_muxer.html">Muxer</a> *mux, AVPacket *pkt, <a class="el" href="../../db/dde/struct_output_stream.html">OutputStream</a> *ost)</td></tr>
<tr class="separator:afa883d20893269bd8d5ff3cc06060c1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a617ff0bc3d1f3d46ad57fd6c1957b6f8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#a617ff0bc3d1f3d46ad57fd6c1957b6f8">of_output_packet</a> (<a class="el" href="../../de/df2/struct_output_file.html">OutputFile</a> *of, AVPacket *pkt, <a class="el" href="../../db/dde/struct_output_stream.html">OutputStream</a> *ost, <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> eof)</td></tr>
<tr class="separator:a617ff0bc3d1f3d46ad57fd6c1957b6f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae477282b15330fa74ee96b8b3ba3a51b"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#ae477282b15330fa74ee96b8b3ba3a51b">thread_stop</a> (<a class="el" href="../../de/d29/struct_muxer.html">Muxer</a> *mux)</td></tr>
<tr class="separator:ae477282b15330fa74ee96b8b3ba3a51b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae7015a1e34988b04946b1949fecd0ff8"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#ae7015a1e34988b04946b1949fecd0ff8">pkt_move</a> (void *dst, void *src)</td></tr>
<tr class="separator:ae7015a1e34988b04946b1949fecd0ff8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aebcb3bc88ffef930ca3e1fa159d7b4b6"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#aebcb3bc88ffef930ca3e1fa159d7b4b6">thread_start</a> (<a class="el" href="../../de/d29/struct_muxer.html">Muxer</a> *mux)</td></tr>
<tr class="separator:aebcb3bc88ffef930ca3e1fa159d7b4b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae7e4c98861cf63306a9211c4b056f757"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#ae7e4c98861cf63306a9211c4b056f757">print_sdp</a> (void)</td></tr>
<tr class="separator:ae7e4c98861cf63306a9211c4b056f757"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6397eeb0856f5070264449b7a24c438a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#a6397eeb0856f5070264449b7a24c438a">of_check_init</a> (<a class="el" href="../../de/df2/struct_output_file.html">OutputFile</a> *of)</td></tr>
<tr class="separator:a6397eeb0856f5070264449b7a24c438a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab2d70d28711fd0ab3e019e2d1eafd938"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#ab2d70d28711fd0ab3e019e2d1eafd938">mux_check_init</a> (<a class="el" href="../../de/d29/struct_muxer.html">Muxer</a> *mux)</td></tr>
<tr class="separator:ab2d70d28711fd0ab3e019e2d1eafd938"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a163e7f4ab7e6ac7d75a43b8ec8a16a0c"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#a163e7f4ab7e6ac7d75a43b8ec8a16a0c">bsf_init</a> (<a class="el" href="../../d6/d16/struct_mux_stream.html">MuxStream</a> *ms)</td></tr>
<tr class="separator:a163e7f4ab7e6ac7d75a43b8ec8a16a0c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa2cad7aba1fe8d5eda6ad974e376480e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#aa2cad7aba1fe8d5eda6ad974e376480e">of_stream_init</a> (<a class="el" href="../../de/df2/struct_output_file.html">OutputFile</a> *of, <a class="el" href="../../db/dde/struct_output_stream.html">OutputStream</a> *ost)</td></tr>
<tr class="separator:aa2cad7aba1fe8d5eda6ad974e376480e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8ee6bbffc4d71793d225e162b4e05600"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#a8ee6bbffc4d71793d225e162b4e05600">of_write_trailer</a> (<a class="el" href="../../de/df2/struct_output_file.html">OutputFile</a> *of)</td></tr>
<tr class="separator:a8ee6bbffc4d71793d225e162b4e05600"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeae3687ef95ce442e5cf4a13acf8b61a"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#aeae3687ef95ce442e5cf4a13acf8b61a">ost_free</a> (<a class="el" href="../../db/dde/struct_output_stream.html">OutputStream</a> **post)</td></tr>
<tr class="separator:aeae3687ef95ce442e5cf4a13acf8b61a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a06a623c7c169b8a8c835e20e1cd9c41b"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#a06a623c7c169b8a8c835e20e1cd9c41b">fc_close</a> (AVFormatContext **pfc)</td></tr>
<tr class="separator:a06a623c7c169b8a8c835e20e1cd9c41b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a148f8b518ba854ce09c277c7acdc2cb7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#a148f8b518ba854ce09c277c7acdc2cb7">of_close</a> (<a class="el" href="../../de/df2/struct_output_file.html">OutputFile</a> **pof)</td></tr>
<tr class="separator:a148f8b518ba854ce09c277c7acdc2cb7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a164526686b908ef10824442ec35cf9dc"><td class="memItemLeft" align="right" valign="top">int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#a164526686b908ef10824442ec35cf9dc">of_filesize</a> (<a class="el" href="../../de/df2/struct_output_file.html">OutputFile</a> *of)</td></tr>
<tr class="separator:a164526686b908ef10824442ec35cf9dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a>
Variables</h2></td></tr>
<tr class="memitem:aee22300aab0a785e62da0d08de0c20d2"><td class="memItemLeft" align="right" valign="top">__thread <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c.html#aee22300aab0a785e62da0d08de0c20d2">want_sdp</a> = 1</td></tr>
<tr class="separator:aee22300aab0a785e62da0d08de0c20d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Function Documentation</h2>
<a id="ac237321f98a7041c9f6004d2ce8a425c" name="ac237321f98a7041c9f6004d2ce8a425c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac237321f98a7041c9f6004d2ce8a425c">&#9670;&nbsp;</a></span>close_all_output_streams()</h2>
<a id="a163e7f4ab7e6ac7d75a43b8ec8a16a0c" name="a163e7f4ab7e6ac7d75a43b8ec8a16a0c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a163e7f4ab7e6ac7d75a43b8ec8a16a0c">&#9670;&#160;</a></span>bsf_init()</h2>
<div class="memitem">
<div class="memproto">
@ -97,27 +144,67 @@ Functions</h2></td></tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static void close_all_output_streams </td>
<td class="memname">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> bsf_init </td>
<td>(</td>
<td class="paramtype"><a class="el" href="../../db/dde/struct_output_stream.html">OutputStream</a> *&#160;</td>
<td class="paramname"><em>ost</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td class="paramtype"><a class="el" href="../../d6/d16/struct_mux_stream.html">MuxStream</a> *&#160;</td>
<td class="paramname"><em>ms</em></td><td>)</td>
<td></td>
<td class="paramtype"><a class="el" href="../../d7/db3/fftools__ffmpeg_8h.html#a54e97364f74d8bf15062a8ea185f1c31">OSTFinished</a>&#160;</td>
<td class="paramname"><em>this_stream</em>, </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="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00583">583</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
</div>
</div>
<a id="a06a623c7c169b8a8c835e20e1cd9c41b" name="a06a623c7c169b8a8c835e20e1cd9c41b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a06a623c7c169b8a8c835e20e1cd9c41b">&#9670;&#160;</a></span>fc_close()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="paramkey"></td>
<td class="memname">static void fc_close </td>
<td>(</td>
<td class="paramtype">AVFormatContext **&#160;</td>
<td class="paramname"><em>pfc</em></td><td>)</td>
<td></td>
<td class="paramtype"><a class="el" href="../../d7/db3/fftools__ffmpeg_8h.html#a54e97364f74d8bf15062a8ea185f1c31">OSTFinished</a>&#160;</td>
<td class="paramname"><em>others</em>&#160;</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="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00736">736</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
</div>
</div>
<a id="a036baf3fb518cc0d7dcc1e91758141a8" name="a036baf3fb518cc0d7dcc1e91758141a8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a036baf3fb518cc0d7dcc1e91758141a8">&#9670;&#160;</a></span>filesize()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static int64_t filesize </td>
<td>(</td>
<td class="paramtype">AVIOContext *&#160;</td>
<td class="paramname"><em>pb</em></td><td>)</td>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
@ -127,32 +214,108 @@ Functions</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00049">49</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00078">78</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
</div>
</div>
<a id="ae83a6b9dd35a60f10d79371fb8d1c469" name="ae83a6b9dd35a60f10d79371fb8d1c469"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae83a6b9dd35a60f10d79371fb8d1c469">&#9670;&#160;</a></span>ms_from_ost()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="../../d6/d16/struct_mux_stream.html">MuxStream</a> * ms_from_ost </td>
<td>(</td>
<td class="paramtype"><a class="el" href="../../db/dde/struct_output_stream.html">OutputStream</a> *&#160;</td>
<td class="paramname"><em>ost</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00068">68</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
</div>
</div>
<a id="ab2d70d28711fd0ab3e019e2d1eafd938" name="ab2d70d28711fd0ab3e019e2d1eafd938"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab2d70d28711fd0ab3e019e2d1eafd938">&#9670;&#160;</a></span>mux_check_init()</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> mux_check_init </td>
<td>(</td>
<td class="paramtype"><a class="el" href="../../de/d29/struct_muxer.html">Muxer</a> *&#160;</td>
<td class="paramname"><em>mux</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00536">536</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
</div>
</div>
<a id="a6397eeb0856f5070264449b7a24c438a" name="a6397eeb0856f5070264449b7a24c438a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6397eeb0856f5070264449b7a24c438a">&#9670;&nbsp;</a></span>of_check_init()</h2>
<a id="a26dcef2b6f9acc114d07755777eb1974" name="a26dcef2b6f9acc114d07755777eb1974"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a26dcef2b6f9acc114d07755777eb1974">&#9670;&#160;</a></span>mux_from_of()</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> of_check_init </td>
<td class="memname">static <a class="el" href="../../de/d29/struct_muxer.html">Muxer</a> * mux_from_of </td>
<td>(</td>
<td class="paramtype"><a class="el" href="../../de/df2/struct_output_file.html">OutputFile</a> *&#160;</td>
<td class="paramname"><em>of</em></td><td>)</td>
<td></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="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00244">244</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00073">73</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
</div>
</div>
<a id="aee717b0de03a034174434f2297ccad89" name="aee717b0de03a034174434f2297ccad89"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aee717b0de03a034174434f2297ccad89">&#9670;&#160;</a></span>muxer_thread()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static void * muxer_thread </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>arg</em></td><td>)</td>
<td></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="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00228">228</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
</div>
</div>
<a id="a148f8b518ba854ce09c277c7acdc2cb7" name="a148f8b518ba854ce09c277c7acdc2cb7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a148f8b518ba854ce09c277c7acdc2cb7">&#9670;&nbsp;</a></span>of_close()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a148f8b518ba854ce09c277c7acdc2cb7">&#9670;&#160;</a></span>of_close()</h2>
<div class="memitem">
<div class="memproto">
@ -167,18 +330,38 @@ Functions</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00316">316</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00750">750</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
</div>
</div>
<a id="a164526686b908ef10824442ec35cf9dc" name="a164526686b908ef10824442ec35cf9dc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a164526686b908ef10824442ec35cf9dc">&#9670;&#160;</a></span>of_filesize()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int64_t of_filesize </td>
<td>(</td>
<td class="paramtype"><a class="el" href="../../de/df2/struct_output_file.html">OutputFile</a> *&#160;</td>
<td class="paramname"><em>of</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00777">777</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
</div>
</div>
<a id="aea0554f44067721a9066e82c8f5fc847" name="aea0554f44067721a9066e82c8f5fc847"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aea0554f44067721a9066e82c8f5fc847">&#9670;&nbsp;</a></span>of_write_packet()</h2>
<a id="a617ff0bc3d1f3d46ad57fd6c1957b6f8" name="a617ff0bc3d1f3d46ad57fd6c1957b6f8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a617ff0bc3d1f3d46ad57fd6c1957b6f8">&#9670;&#160;</a></span>of_output_packet()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void of_write_packet </td>
<td class="memname">void of_output_packet </td>
<td>(</td>
<td class="paramtype"><a class="el" href="../../de/df2/struct_output_file.html">OutputFile</a> *&#160;</td>
<td class="paramname"><em>of</em>, </td>
@ -199,7 +382,7 @@ Functions</h2></td></tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#160;</td>
<td class="paramname"><em>unqueue</em>&#160;</td>
<td class="paramname"><em>eof</em>&#160;</td>
</tr>
<tr>
<td></td>
@ -209,12 +392,42 @@ Functions</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00058">58</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00359">359</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
</div>
</div>
<a id="aa2cad7aba1fe8d5eda6ad974e376480e" name="aa2cad7aba1fe8d5eda6ad974e376480e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa2cad7aba1fe8d5eda6ad974e376480e">&#9670;&#160;</a></span>of_stream_init()</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> of_stream_init </td>
<td>(</td>
<td class="paramtype"><a class="el" href="../../de/df2/struct_output_file.html">OutputFile</a> *&#160;</td>
<td class="paramname"><em>of</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="../../db/dde/struct_output_stream.html">OutputStream</a> *&#160;</td>
<td class="paramname"><em>ost</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00613">613</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
</div>
</div>
<a id="a8ee6bbffc4d71793d225e162b4e05600" name="a8ee6bbffc4d71793d225e162b4e05600"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8ee6bbffc4d71793d225e162b4e05600">&#9670;&nbsp;</a></span>of_write_trailer()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#a8ee6bbffc4d71793d225e162b4e05600">&#9670;&#160;</a></span>of_write_trailer()</h2>
<div class="memitem">
<div class="memproto">
@ -229,12 +442,78 @@ Functions</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00295">295</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00634">634</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
</div>
</div>
<a id="aeae3687ef95ce442e5cf4a13acf8b61a" name="aeae3687ef95ce442e5cf4a13acf8b61a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aeae3687ef95ce442e5cf4a13acf8b61a">&#9670;&#160;</a></span>ost_free()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static void ost_free </td>
<td>(</td>
<td class="paramtype"><a class="el" href="../../db/dde/struct_output_stream.html">OutputStream</a> **&#160;</td>
<td class="paramname"><em>post</em></td><td>)</td>
<td></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="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00670">670</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
</div>
</div>
<a id="ae7015a1e34988b04946b1949fecd0ff8" name="ae7015a1e34988b04946b1949fecd0ff8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae7015a1e34988b04946b1949fecd0ff8">&#9670;&#160;</a></span>pkt_move()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static void pkt_move </td>
<td>(</td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>dst</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>src</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></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="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00429">429</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
</div>
</div>
<a id="ae7e4c98861cf63306a9211c4b056f757" name="ae7e4c98861cf63306a9211c4b056f757"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae7e4c98861cf63306a9211c4b056f757">&#9670;&nbsp;</a></span>print_sdp()</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ae7e4c98861cf63306a9211c4b056f757">&#9670;&#160;</a></span>print_sdp()</h2>
<div class="memitem">
<div class="memproto">
@ -257,14 +536,341 @@ Functions</h2></td></tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00190">190</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
<p class="definition">Definition at line <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00480">480</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
</div>
</div>
<a id="ab552a82e1c941a2555ce8fbae7881438" name="ab552a82e1c941a2555ce8fbae7881438"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab552a82e1c941a2555ce8fbae7881438">&#9670;&#160;</a></span>queue_packet()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> queue_packet </td>
<td>(</td>
<td class="paramtype"><a class="el" href="../../de/d29/struct_muxer.html">Muxer</a> *&#160;</td>
<td class="paramname"><em>mux</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="../../db/dde/struct_output_stream.html">OutputStream</a> *&#160;</td>
<td class="paramname"><em>ost</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">AVPacket *&#160;</td>
<td class="paramname"><em>pkt</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></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="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00298">298</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
</div>
</div>
<a id="afa883d20893269bd8d5ff3cc06060c1c" name="afa883d20893269bd8d5ff3cc06060c1c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afa883d20893269bd8d5ff3cc06060c1c">&#9670;&#160;</a></span>submit_packet()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> submit_packet </td>
<td>(</td>
<td class="paramtype"><a class="el" href="../../de/d29/struct_muxer.html">Muxer</a> *&#160;</td>
<td class="paramname"><em>mux</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">AVPacket *&#160;</td>
<td class="paramname"><em>pkt</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="../../db/dde/struct_output_stream.html">OutputStream</a> *&#160;</td>
<td class="paramname"><em>ost</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></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="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00340">340</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
</div>
</div>
<a id="a9485345078d3bad91b3fd12071e41f50" name="a9485345078d3bad91b3fd12071e41f50"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9485345078d3bad91b3fd12071e41f50">&#9670;&#160;</a></span>sync_queue_process()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> sync_queue_process </td>
<td>(</td>
<td class="paramtype"><a class="el" href="../../de/d29/struct_muxer.html">Muxer</a> *&#160;</td>
<td class="paramname"><em>mux</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="../../db/dde/struct_output_stream.html">OutputStream</a> *&#160;</td>
<td class="paramname"><em>ost</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">AVPacket *&#160;</td>
<td class="paramname"><em>pkt</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> *&#160;</td>
<td class="paramname"><em>stream_eof</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></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="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00192">192</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
</div>
</div>
<a id="a91f1e0862fd8c633a06819a942a71fe7" name="a91f1e0862fd8c633a06819a942a71fe7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a91f1e0862fd8c633a06819a942a71fe7">&#9670;&#160;</a></span>thread_set_name()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static void thread_set_name </td>
<td>(</td>
<td class="paramtype"><a class="el" href="../../de/df2/struct_output_file.html">OutputFile</a> *&#160;</td>
<td class="paramname"><em>of</em></td><td>)</td>
<td></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="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00221">221</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
</div>
</div>
<a id="aebcb3bc88ffef930ca3e1fa159d7b4b6" name="aebcb3bc88ffef930ca3e1fa159d7b4b6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aebcb3bc88ffef930ca3e1fa159d7b4b6">&#9670;&#160;</a></span>thread_start()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> thread_start </td>
<td>(</td>
<td class="paramtype"><a class="el" href="../../de/d29/struct_muxer.html">Muxer</a> *&#160;</td>
<td class="paramname"><em>mux</em></td><td>)</td>
<td></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="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00434">434</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
</div>
</div>
<a id="ae477282b15330fa74ee96b8b3ba3a51b" name="ae477282b15330fa74ee96b8b3ba3a51b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae477282b15330fa74ee96b8b3ba3a51b">&#9670;&#160;</a></span>thread_stop()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> thread_stop </td>
<td>(</td>
<td class="paramtype"><a class="el" href="../../de/d29/struct_muxer.html">Muxer</a> *&#160;</td>
<td class="paramname"><em>mux</em></td><td>)</td>
<td></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="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00412">412</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
</div>
</div>
<a id="ad54b783ddce1362bc44dc91ff0ca9e7a" name="ad54b783ddce1362bc44dc91ff0ca9e7a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad54b783ddce1362bc44dc91ff0ca9e7a">&#9670;&#160;</a></span>thread_submit_packet()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> thread_submit_packet </td>
<td>(</td>
<td class="paramtype"><a class="el" href="../../de/d29/struct_muxer.html">Muxer</a> *&#160;</td>
<td class="paramname"><em>mux</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="../../db/dde/struct_output_stream.html">OutputStream</a> *&#160;</td>
<td class="paramname"><em>ost</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">AVPacket *&#160;</td>
<td class="paramname"><em>pkt</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></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="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00276">276</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
</div>
</div>
<a id="afef236e146a038c9ca2e40297044238d" name="afef236e146a038c9ca2e40297044238d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afef236e146a038c9ca2e40297044238d">&#9670;&#160;</a></span>write_packet()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> write_packet </td>
<td>(</td>
<td class="paramtype"><a class="el" href="../../de/d29/struct_muxer.html">Muxer</a> *&#160;</td>
<td class="paramname"><em>mux</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="../../db/dde/struct_output_stream.html">OutputStream</a> *&#160;</td>
<td class="paramname"><em>ost</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">AVPacket *&#160;</td>
<td class="paramname"><em>pkt</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></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="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00091">91</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
</div>
</div>
<h2 class="groupheader">Variable Documentation</h2>
<a id="aee22300aab0a785e62da0d08de0c20d2" name="aee22300aab0a785e62da0d08de0c20d2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aee22300aab0a785e62da0d08de0c20d2">&#9670;&#160;</a></span>want_sdp</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">__thread <a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a> want_sdp = 1</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html#l00066">66</a> of file <a class="el" href="../../d5/d94/fftools__ffmpeg__mux_8c_source.html">fftools_ffmpeg_mux.c</a>.</p>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Sep 17 2022 18:38:10 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
Generated on Tue Aug 22 2023 01:26:55 for FFmpegKit Android API by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.7
</small></address>
</body>
</html>

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

Loading…
Cancel
Save