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 - Documentation
## Checks ## Checks
- [ ] Changes support all platforms (`Android`, `iOS`, `Linux`, macOS`, `tvOS`) - [ ] Changes support all platforms (`Android`, `iOS`, `Linux`, `macOS`, `tvOS`)
- [ ] Breaks existing functionality - [ ] Breaks existing functionality
- [ ] Implementation is completed, not half-done - [ ] Implementation is completed, not half-done
- [ ] Is there another PR already created for this feature/bug fix - [ ] Is there another PR already created for this feature/bug fix

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

@ -32,7 +32,7 @@ jobs:
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: prerequisites - 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 - name: run the build script
run: ./linux.sh -d run: ./linux.sh -d
- name: print build logs - name: print build logs
@ -50,7 +50,7 @@ jobs:
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: prerequisites - 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 - name: run the build script
run: ./linux.sh -d --lts run: ./linux.sh -d --lts
- name: print build logs - name: print build logs

@ -7,7 +7,7 @@ on:
jobs: jobs:
build-android-main-on-linux: build-android-main-on-linux:
name: android main on linux name: android main on linux
runs-on: ubuntu-20.04 runs-on: ubuntu-22.04
strategy: strategy:
matrix: matrix:
ndk-version: [ 'r22b-linux-x86_64', 'r23b-linux', 'r24-linux', 'r25b-linux' ] ndk-version: [ 'r22b-linux-x86_64', 'r23b-linux', 'r24-linux', 'r25b-linux' ]
@ -19,13 +19,13 @@ jobs:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
with: with:
ref: ${{ matrix.branches }} ref: ${{ matrix.branches }}
- name: set up adopt jdk 11 - name: set up adopt jdk 17
uses: actions/setup-java@v3 uses: actions/setup-java@v3
with: with:
distribution: 'adopt' distribution: 'adopt'
java-version: '11' java-version: '17'
- name: prerequisites - 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 - name: upgrade meson
run: pip install meson --upgrade run: pip install meson --upgrade
- name: set up android ndk - name: set up android ndk
@ -43,7 +43,7 @@ jobs:
run: '[[ -f ./src/ffmpeg/ffbuild/config.log ]] && tail -50 ./src/ffmpeg/ffbuild/config.log' run: '[[ -f ./src/ffmpeg/ffbuild/config.log ]] && tail -50 ./src/ffmpeg/ffbuild/config.log'
build-android-lts-on-linux: build-android-lts-on-linux:
name: android lts on linux name: android lts on linux
runs-on: ubuntu-20.04 runs-on: ubuntu-22.04
strategy: strategy:
matrix: matrix:
ndk-version: [ 'r22b-linux-x86_64', 'r23b-linux' ] ndk-version: [ 'r22b-linux-x86_64', 'r23b-linux' ]
@ -55,13 +55,13 @@ jobs:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
with: with:
ref: ${{ matrix.branches }} ref: ${{ matrix.branches }}
- name: set up adopt jdk 11 - name: set up adopt jdk 17
uses: actions/setup-java@v3 uses: actions/setup-java@v3
with: with:
distribution: 'adopt' distribution: 'adopt'
java-version: '11' java-version: '17'
- name: prerequisites - 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 - name: upgrade meson
run: pip install meson --upgrade run: pip install meson --upgrade
- name: set up android ndk - name: set up android ndk

@ -20,7 +20,7 @@ jobs:
with: with:
ref: ${{ matrix.branches }} ref: ${{ matrix.branches }}
- name: prerequisites - 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 - name: set up xcode
run: echo "export DEVELOPER_DIR=/Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer" > ~/.xcode.for.ffmpeg.kit.sh run: echo "export DEVELOPER_DIR=/Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer" > ~/.xcode.for.ffmpeg.kit.sh
- name: run the build script - name: run the build script
@ -46,7 +46,7 @@ jobs:
with: with:
ref: ${{ matrix.branches }} ref: ${{ matrix.branches }}
- name: prerequisites - 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 - name: set up xcode
run: echo "export DEVELOPER_DIR=/Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer" > ~/.xcode.for.ffmpeg.kit.sh run: echo "export DEVELOPER_DIR=/Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer" > ~/.xcode.for.ffmpeg.kit.sh
- name: run the build script - name: run the build script
@ -72,7 +72,7 @@ jobs:
with: with:
ref: ${{ matrix.branches }} ref: ${{ matrix.branches }}
- name: prerequisites - 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 - name: set up xcode
run: echo "export DEVELOPER_DIR=/Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer" > ~/.xcode.for.ffmpeg.kit.sh run: echo "export DEVELOPER_DIR=/Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer" > ~/.xcode.for.ffmpeg.kit.sh
- name: run the build script - name: run the build script
@ -98,7 +98,7 @@ jobs:
with: with:
ref: ${{ matrix.branches }} ref: ${{ matrix.branches }}
- name: prerequisites - 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 - name: set up xcode
run: echo "export DEVELOPER_DIR=/Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer" > ~/.xcode.for.ffmpeg.kit.sh run: echo "export DEVELOPER_DIR=/Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer" > ~/.xcode.for.ffmpeg.kit.sh
- name: run the build script - name: run the build script
@ -124,7 +124,7 @@ jobs:
with: with:
ref: ${{ matrix.branches }} ref: ${{ matrix.branches }}
- name: prerequisites - 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 - name: set up xcode
run: echo "export DEVELOPER_DIR=/Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer" > ~/.xcode.for.ffmpeg.kit.sh run: echo "export DEVELOPER_DIR=/Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer" > ~/.xcode.for.ffmpeg.kit.sh
- name: run the build script - name: run the build script
@ -150,7 +150,7 @@ jobs:
with: with:
ref: ${{ matrix.branches }} ref: ${{ matrix.branches }}
- name: prerequisites - 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 - name: set up xcode
run: echo "export DEVELOPER_DIR=/Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer" > ~/.xcode.for.ffmpeg.kit.sh run: echo "export DEVELOPER_DIR=/Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer" > ~/.xcode.for.ffmpeg.kit.sh
- name: run the build script - 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"> <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 `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. the exact version number of `FFmpeg` is obtained using the `git describe --tags` command.
| Platforms | FFmpegKit Version | FFmpeg Version | Release Date | | 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<br>Apple | [6.0](https://github.com/arthenica/ffmpeg-kit/releases/tag/v6.0) | 6.0 | Aug 21, 2023 |
| Android | [5.1](https://github.com/arthenica/ffmpeg-kit/releases/tag/v5.1) | 5.1.2 | Sep 29, 2022 | | React Native | [5.1.0](https://github.com/arthenica/ffmpeg-kit/releases/tag/react.native.v5.1.0) | 5.1.2 | Oct 02, 2022 |
| Apple | [5.1](https://github.com/arthenica/ffmpeg-kit/releases/tag/v5.1) | 5.1.2 | Sep 29, 2022 | | Flutter | [5.1.0](https://github.com/arthenica/ffmpeg-kit/releases/tag/flutter.v5.1.0) | 5.1.2 | Oct 02, 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 | | Android<br>Apple | [5.1](https://github.com/arthenica/ffmpeg-kit/releases/tag/v5.1) | 5.1.2 | Sep 29, 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.2](https://github.com/arthenica/ffmpeg-kit/releases/tag/react.native.v4.5.2) | 4.5-dev-3393 | May 25, 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 | | Flutter | [4.5.1](https://github.com/arthenica/ffmpeg-kit/releases/tag/flutter.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 | | 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 |
| Apple | [4.5.1](https://github.com/arthenica/ffmpeg-kit/releases/tag/v4.5.1) | 4.5-dev-3393 | Dec 30, 2021 | | Android | [4.5.1](https://github.com/arthenica/ffmpeg-kit/releases/tag/v4.5.1) | 4.5-dev-3393 | Jan 01, 2022 |
| Flutter | [4.5.0](https://github.com/arthenica/ffmpeg-kit/releases/tag/flutter.v4.5.0) | 4.5-dev-2008 | Oct 05, 2021 | | Apple | [4.5.1](https://github.com/arthenica/ffmpeg-kit/releases/tag/v4.5.1) | 4.5-dev-3393 | Dec 30, 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 | | Flutter | [4.5.0](https://github.com/arthenica/ffmpeg-kit/releases/tag/flutter.v4.5.0) | 4.5-dev-2008 | Oct 05, 2021 |
| Android<br>Apple | [4.5](https://github.com/arthenica/ffmpeg-kit/releases/tag/v4.5) | 4.5-dev-2008 | Sep 18, 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.4](https://github.com/arthenica/ffmpeg-kit/releases/tag/v4.4) | 4.4-dev-3015 | Mar 03, 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 ### 11. LTS Releases

@ -22,14 +22,14 @@ external libraries enabled.
##### 2.1.1 Android Tools ##### 2.1.1 Android Tools
- Android SDK Build 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 ##### 2.1.2 Packages
Use your package manager (apt, yum, dnf, brew, etc.) to install the following 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 ##### 2.1.3 Environment Variables
@ -77,7 +77,7 @@ All libraries created by `android.sh` can be found under the `prebuilt` director
} }
dependencies { dependencies {
implementation 'com.arthenica:ffmpeg-kit-full:5.1' implementation 'com.arthenica:ffmpeg-kit-full:6.0'
} }
``` ```

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

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

@ -45,7 +45,7 @@ struct CallbackData {
float statisticsFps; // statistics fps float statisticsFps; // statistics fps
float statisticsQuality; // statistics quality float statisticsQuality; // statistics quality
int64_t statisticsSize; // statistics size int64_t statisticsSize; // statistics size
int statisticsTime; // statistics time double statisticsTime; // statistics time
double statisticsBitrate; // statistics bitrate double statisticsBitrate; // statistics bitrate
double statisticsSpeed; // statistics speed double statisticsSpeed; // statistics speed
@ -312,7 +312,7 @@ void logCallbackDataAdd(int level, AVBPrint *data) {
/** /**
* Adds statistics data to the end of callback data list. * 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 // CREATE DATA STRUCT FIRST
struct CallbackData *newData = (struct CallbackData*)av_malloc(sizeof(struct CallbackData)); 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 bitrate output bit rate in kbits/s
* @param speed processing speed = processed duration / operation duration * @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); statisticsCallbackDataAdd(frameNumber, fps, quality, size, time, bitrate, speed);
} }
@ -581,6 +581,30 @@ int saf_close(int fd) {
return (*env)->CallStaticIntMethod(env, configClass, safCloseMethod, 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. * Called when 'ffmpegkit' native library is loaded.
* *
@ -620,7 +644,7 @@ jint JNI_OnLoad(JavaVM *vm, void *reserved) {
return JNI_FALSE; return JNI_FALSE;
} }
statisticsMethod = (*env)->GetStaticMethodID(env, localConfigClass, "statistics", "(JIFFJIDD)V"); statisticsMethod = (*env)->GetStaticMethodID(env, localConfigClass, "statistics", "(JIFFJDDD)V");
if (statisticsMethod == NULL) { if (statisticsMethod == NULL) {
LOGE("OnLoad thread failed to GetStaticMethodID for %s.\n", "statistics"); LOGE("OnLoad thread failed to GetStaticMethodID for %s.\n", "statistics");
return JNI_FALSE; return JNI_FALSE;
@ -665,6 +689,8 @@ jint JNI_OnLoad(JavaVM *vm, void *reserved) {
av_set_saf_open(saf_open); av_set_saf_open(saf_open);
av_set_saf_close(saf_close); av_set_saf_close(saf_close);
enableNativeRedirection();
return JNI_VERSION_1_6; 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 * @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) { JNIEXPORT void JNICALL Java_com_arthenica_ffmpegkit_FFmpegKitConfig_enableNativeRedirection(JNIEnv *env, jclass object) {
mutexLock(); enableNativeRedirection();
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);
} }
/** /**

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

@ -1,7 +1,8 @@
/* /*
* Various utilities for command line tools * Various utilities for command line tools
* Copyright (c) 2000-2003 Fabrice Bellard * 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. * 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 * 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. * 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 * mobile-ffmpeg / ffmpeg-kit changes by Taner Sener
* *
* 09.2022 * 09.2022
@ -129,11 +136,18 @@ void register_exit(void (*cb)(int ret))
program_exit = cb; 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) void exit_program(int ret)
{ {
if (program_exit) if (program_exit)
program_exit(ret); program_exit(ret);
// FFmpegKit
// exit disabled and replaced with longjmp, exit value stored in longjmp_value // exit disabled and replaced with longjmp, exit value stored in longjmp_value
// exit(ret); // exit(ret);
longjmp_value = ret; longjmp_value = ret;
@ -696,7 +710,7 @@ static void init_parse_context(OptionParseContext *octx,
octx->nb_groups = nb_groups; octx->nb_groups = nb_groups;
octx->groups = av_calloc(octx->nb_groups, sizeof(*octx->groups)); octx->groups = av_calloc(octx->nb_groups, sizeof(*octx->groups));
if (!octx->groups) if (!octx->groups)
exit_program(1); report_and_exit(AVERROR(ENOMEM));
for (i = 0; i < octx->nb_groups; i++) for (i = 0; i < octx->nb_groups; i++)
octx->groups[i].group_def = &groups[i]; octx->groups[i].group_def = &groups[i];
@ -843,12 +857,7 @@ do { \
void print_error(const char *filename, int err) void print_error(const char *filename, int err)
{ {
char errbuf[128]; av_log(NULL, AV_LOG_ERROR, "%s: %s\n", filename, av_err2str(err));
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);
} }
int read_yesno(void) int read_yesno(void)
@ -971,7 +980,7 @@ AVDictionary *filter_codec_opts(AVDictionary *opts, enum AVCodecID codec_id,
break; break;
} }
while ((t = av_dict_get(opts, "", t, AV_DICT_IGNORE_SUFFIX))) { while ((t = av_dict_iterate(opts, t))) {
const AVClass *priv_class; const AVClass *priv_class;
char *p = strchr(t->key, ':'); char *p = strchr(t->key, ':');
@ -1009,11 +1018,8 @@ AVDictionary **setup_find_stream_info_opts(AVFormatContext *s,
if (!s->nb_streams) if (!s->nb_streams)
return NULL; return NULL;
opts = av_calloc(s->nb_streams, sizeof(*opts)); opts = av_calloc(s->nb_streams, sizeof(*opts));
if (!opts) { if (!opts)
av_log(NULL, AV_LOG_ERROR, report_and_exit(AVERROR(ENOMEM));
"Could not alloc memory for stream options.\n");
exit_program(1);
}
for (i = 0; i < s->nb_streams; i++) for (i = 0; i < s->nb_streams; i++)
opts[i] = filter_codec_opts(codec_opts, s->streams[i]->codecpar->codec_id, opts[i] = filter_codec_opts(codec_opts, s->streams[i]->codecpar->codec_id,
s, s->streams[i], NULL); 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) { if (*size < new_size) {
uint8_t *tmp = av_realloc_array(array, new_size, elem_size); uint8_t *tmp = av_realloc_array(array, new_size, elem_size);
if (!tmp) { if (!tmp)
av_log(NULL, AV_LOG_ERROR, "Could not alloc buffer.\n"); report_and_exit(AVERROR(ENOMEM));
exit_program(1);
}
memset(tmp + *size*elem_size, 0, (new_size-*size) * elem_size); memset(tmp + *size*elem_size, 0, (new_size-*size) * elem_size);
*size = new_size; *size = new_size;
return tmp; return tmp;
@ -1044,10 +1048,8 @@ void *allocate_array_elem(void *ptr, size_t elem_size, int *nb_elems)
void *new_elem; void *new_elem;
if (!(new_elem = av_mallocz(elem_size)) || if (!(new_elem = av_mallocz(elem_size)) ||
av_dynarray_add_nofree(ptr, nb_elems, new_elem) < 0) { av_dynarray_add_nofree(ptr, nb_elems, new_elem) < 0)
av_log(NULL, AV_LOG_ERROR, "Could not alloc buffer.\n"); report_and_exit(AVERROR(ENOMEM));
exit_program(1);
}
return new_elem; return new_elem;
} }

@ -1,7 +1,8 @@
/* /*
* Various utilities for command line tools * Various utilities for command line tools
* copyright (c) 2003 Fabrice Bellard * 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. * 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 * 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. * 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 * mobile-ffmpeg / ffmpeg-kit changes by Taner Sener
* *
* 09.2022 * 09.2022
@ -95,6 +102,17 @@ extern __thread int find_stream_info;
*/ */
void register_exit(void (*cb)(int ret)); 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. * 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_ffmpeg(const char *opt, const char *arg);
void show_help_default_ffprobe(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. * 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. * 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 * FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * 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 * 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. * 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 * mobile-ffmpeg / ffmpeg-kit changes by Taner Sener
* *
* 09.2022 * 09.2022
@ -59,11 +70,13 @@
#include "config.h" #include "config.h"
#include <stdatomic.h>
#include <stdint.h> #include <stdint.h>
#include <stdio.h> #include <stdio.h>
#include <signal.h> #include <signal.h>
#include "fftools_cmdutils.h" #include "fftools_cmdutils.h"
#include "fftools_sync_queue.h"
#include "libavformat/avformat.h" #include "libavformat/avformat.h"
#include "libavformat/avio.h" #include "libavformat/avio.h"
@ -85,6 +98,12 @@
#include "libswresample/swresample.h" #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 { enum VideoSyncMethod {
VSYNC_AUTO = -1, VSYNC_AUTO = -1,
VSYNC_PASSTHROUGH, VSYNC_PASSTHROUGH,
@ -113,15 +132,15 @@ typedef struct StreamMap {
int disabled; /* 1 is this mapping is disabled by a negative map */ int disabled; /* 1 is this mapping is disabled by a negative map */
int file_index; int file_index;
int stream_index; int stream_index;
int sync_file_index;
int sync_stream_index;
char *linklabel; /* name of an output link, for mapping lavfi outputs */ char *linklabel; /* name of an output link, for mapping lavfi outputs */
} StreamMap; } StreamMap;
#if FFMPEG_OPT_MAP_CHANNEL
typedef struct { typedef struct {
int file_idx, stream_idx, channel_idx; // input int file_idx, stream_idx, channel_idx; // input
int ofile_idx, ostream_idx; // output int ofile_idx, ostream_idx; // output
} AudioChannelMap; } AudioChannelMap;
#endif
typedef struct OptionsContext { typedef struct OptionsContext {
OptionGroup *g; OptionGroup *g;
@ -157,6 +176,7 @@ typedef struct OptionsContext {
int accurate_seek; int accurate_seek;
int thread_queue_size; int thread_queue_size;
int input_sync_ref; int input_sync_ref;
int find_stream_info;
SpecifierOpt *ts_scale; SpecifierOpt *ts_scale;
int nb_ts_scale; int nb_ts_scale;
@ -174,11 +194,10 @@ typedef struct OptionsContext {
/* output options */ /* output options */
StreamMap *stream_maps; StreamMap *stream_maps;
int nb_stream_maps; int nb_stream_maps;
#if FFMPEG_OPT_MAP_CHANNEL
AudioChannelMap *audio_channel_maps; /* one info entry per -map_channel */ AudioChannelMap *audio_channel_maps; /* one info entry per -map_channel */
int nb_audio_channel_maps; /* number of (valid) -map_channel settings */ int nb_audio_channel_maps; /* number of (valid) -map_channel settings */
int metadata_global_manual; #endif
int metadata_streams_manual;
int metadata_chapters_manual;
const char **attachments; const char **attachments;
int nb_attachments; int nb_attachments;
@ -186,9 +205,10 @@ typedef struct OptionsContext {
int64_t recording_time; int64_t recording_time;
int64_t stop_time; int64_t stop_time;
uint64_t limit_filesize; int64_t limit_filesize;
float mux_preload; float mux_preload;
float mux_max_delay; float mux_max_delay;
float shortest_buf_duration;
int shortest; int shortest;
int bitexact; int bitexact;
@ -221,6 +241,12 @@ typedef struct OptionsContext {
int nb_force_fps; int nb_force_fps;
SpecifierOpt *frame_aspect_ratios; SpecifierOpt *frame_aspect_ratios;
int nb_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; SpecifierOpt *rc_overrides;
int nb_rc_overrides; int nb_rc_overrides;
SpecifierOpt *intra_matrices; SpecifierOpt *intra_matrices;
@ -247,6 +273,8 @@ typedef struct OptionsContext {
int nb_reinit_filters; int nb_reinit_filters;
SpecifierOpt *fix_sub_duration; SpecifierOpt *fix_sub_duration;
int nb_fix_sub_duration; int nb_fix_sub_duration;
SpecifierOpt *fix_sub_duration_heartbeat;
int nb_fix_sub_duration_heartbeat;
SpecifierOpt *canvas_sizes; SpecifierOpt *canvas_sizes;
int nb_canvas_sizes; int nb_canvas_sizes;
SpecifierOpt *pass; SpecifierOpt *pass;
@ -275,6 +303,18 @@ typedef struct OptionsContext {
int nb_autoscale; int nb_autoscale;
SpecifierOpt *bits_per_raw_sample; SpecifierOpt *bits_per_raw_sample;
int nb_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; } OptionsContext;
typedef struct InputFilter { typedef struct InputFilter {
@ -350,12 +390,22 @@ typedef struct InputStream {
#define DECODING_FOR_OST 1 #define DECODING_FOR_OST 1
#define DECODING_FOR_FILTER 2 #define DECODING_FOR_FILTER 2
int processing_needed; /* non zero if the packets must be processed */ 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; AVCodecContext *dec_ctx;
const AVCodec *dec; const AVCodec *dec;
AVFrame *decoded_frame; AVFrame *decoded_frame;
AVPacket *pkt; AVPacket *pkt;
AVRational framerate_guessed;
int64_t prev_pkt_pts; int64_t prev_pkt_pts;
int64_t start; /* time when read started */ int64_t start; /* time when read started */
/* predicted dts of the next packet read for this stream or (when there are /* 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) int64_t pts; ///< current pts of the decoded frame (in AV_TIME_BASE units)
int wrap_correction_done; 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 filter_in_rescale_delta_last;
int64_t min_pts; /* pts with the smallest value in a current stream */ int64_t min_pts; /* pts with the smallest value in a current stream */
@ -417,12 +473,8 @@ typedef struct InputStream {
char *hwaccel_device; char *hwaccel_device;
enum AVPixelFormat hwaccel_output_format; enum AVPixelFormat hwaccel_output_format;
/* hwaccel context */
void *hwaccel_ctx;
void (*hwaccel_uninit)(AVCodecContext *s);
int (*hwaccel_retrieve_data)(AVCodecContext *s, AVFrame *frame); int (*hwaccel_retrieve_data)(AVCodecContext *s, AVFrame *frame);
enum AVPixelFormat hwaccel_pix_fmt; enum AVPixelFormat hwaccel_pix_fmt;
enum AVPixelFormat hwaccel_retrieved_pix_fmt;
/* stats */ /* stats */
// combined size of all the packets read // combined size of all the packets read
@ -439,38 +491,46 @@ typedef struct InputStream {
int got_output; int got_output;
} InputStream; } InputStream;
typedef struct LastFrameDuration {
int stream_idx;
int64_t duration;
} LastFrameDuration;
typedef struct InputFile { typedef struct InputFile {
int index;
AVFormatContext *ctx; AVFormatContext *ctx;
int eof_reached; /* true if eof reached */ int eof_reached; /* true if eof reached */
int eagain; /* true if last read attempt returned EAGAIN */ 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; int64_t input_ts_offset;
int input_sync_ref; int input_sync_ref;
/**
* Effective format start time based on enabled streams.
*/
int64_t start_time_effective;
int64_t ts_offset; int64_t ts_offset;
/**
* Extra timestamp offset added by discontinuity handling.
*/
int64_t ts_offset_discont;
int64_t last_ts; int64_t last_ts;
int64_t start_time; /* user-specified start time in AV_TIME_BASE or AV_NOPTS_VALUE */ int64_t start_time; /* user-specified start time in AV_TIME_BASE or AV_NOPTS_VALUE */
int64_t recording_time; 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() */ /* streams that ffmpeg is aware of;
int nb_streams_warn; /* number of streams that the user was warned 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; int rate_emu;
float readrate; float readrate;
int accurate_seek; int accurate_seek;
AVPacket *pkt; /* when looping the input file, this queue is used by decoders to report
* the last frame duration back to the demuxer thread */
#if HAVE_THREADS AVThreadMessageQueue *audio_duration_queue;
AVThreadMessageQueue *in_thread_queue; int audio_duration_queue_size;
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
} InputFile; } InputFile;
enum forced_keyframes_const { 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 (1 << 0)
#define ABORT_ON_FLAG_EMPTY_OUTPUT_STREAM (1 << 1) #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[]; extern const char *const forced_keyframes_const_names[];
typedef enum { typedef enum {
@ -492,68 +587,92 @@ typedef enum {
MUXER_FINISHED = 2, MUXER_FINISHED = 2,
} OSTFinished ; } 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 { typedef struct OutputStream {
const AVClass *clazz;
int file_index; /* file index */ int file_index; /* file index */
int index; /* stream index in the output file */ 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 */ AVStream *st; /* stream in the output file */
int encoding_needed; /* true if encoding needed for this stream */ /* number of frames emitted by the video-encoding sync code */
int64_t frame_number; int64_t vsync_frame_number;
/* input pts and corresponding output pts /* predicted pts of the next frame to be encoded
for A/V sync */ * audio/video encoding only */
struct InputStream *sync_ist; /* input stream to sync against */ int64_t next_pts;
int64_t sync_opts; /* output frame counter, could be changed to some true timestamp */ // FIXME look at frame_number /* dts of the last packet sent to the muxing queue, in AV_TIME_BASE_Q */
/* 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 */
int64_t last_mux_dts; 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 // the timebase of the packets sent to the muxer
AVRational mux_timebase; AVRational mux_timebase;
AVRational enc_timebase; AVRational enc_timebase;
AVBSFContext *bsf_ctx;
AVCodecContext *enc_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 *filtered_frame;
AVFrame *last_frame; AVFrame *last_frame;
AVFrame *sq_frame;
AVPacket *pkt; AVPacket *pkt;
int64_t last_dropped; int64_t last_dropped;
int64_t last_nb0_frames[3]; int64_t last_nb0_frames[3];
void *hwaccel_ctx;
/* video only */ /* video only */
AVRational frame_rate; AVRational frame_rate;
AVRational max_frame_rate; AVRational max_frame_rate;
enum VideoSyncMethod vsync_method; enum VideoSyncMethod vsync_method;
int is_cfr; int is_cfr;
const char *fps_mode;
int force_fps; int force_fps;
int top_field_first; int top_field_first;
#if FFMPEG_ROTATION_METADATA
int rotate_overridden; int rotate_overridden;
#endif
int autoscale; int autoscale;
int bitexact;
int bits_per_raw_sample; int bits_per_raw_sample;
#if FFMPEG_ROTATION_METADATA
double rotate_override_value; double rotate_override_value;
#endif
AVRational frame_aspect_ratio; AVRational frame_aspect_ratio;
/* forced key frames */ KeyframeForceCtx kf;
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;
/* audio only */ /* 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_map; /* list of the channels id to pick from the source stream */
int audio_channels_mapped; /* number of channels in audio_channels_map */ int audio_channels_mapped; /* number of channels in audio_channels_map */
#endif
char *logfile_prefix; char *logfile_prefix;
FILE *logfile; FILE *logfile;
@ -569,7 +688,6 @@ typedef struct OutputStream {
char *apad; char *apad;
OSTFinished finished; /* no more packets should be written for this stream */ OSTFinished finished; /* no more packets should be written for this stream */
int unavailable; /* true if the steram is unavailable (possibly temporarily) */ int unavailable; /* true if the steram is unavailable (possibly temporarily) */
int stream_copy;
// init_output_stream() has been called for this stream // init_output_stream() has been called for this stream
// The encoder and the bitstream filters have been initialized and the stream // The encoder and the bitstream filters have been initialized and the stream
@ -582,15 +700,16 @@ typedef struct OutputStream {
int streamcopy_started; int streamcopy_started;
int copy_initial_nonkeyframes; int copy_initial_nonkeyframes;
int copy_prior_start; int copy_prior_start;
char *disposition;
int keep_pix_fmt; int keep_pix_fmt;
/* stats */ /* stats */
// combined size of all the packets written // combined size of all the packets sent to the muxer
uint64_t data_size; 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 // 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 // number of frames/samples sent to the encoder
uint64_t frames_encoded; uint64_t frames_encoded;
uint64_t samples_encoded; uint64_t samples_encoded;
@ -600,51 +719,48 @@ typedef struct OutputStream {
/* packet quality factor */ /* packet quality factor */
int quality; 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 */ /* packet picture type */
int pict_type; int pict_type;
/* frame encode sum of squared error values */ /* frame encode sum of squared error values */
int64_t error[4]; 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; } OutputStream;
typedef struct OutputFile { typedef struct OutputFile {
const AVClass *clazz;
int index; int index;
const AVOutputFormat *format; 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 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 int64_t start_time; ///< start time in microseconds == AV_TIME_BASE units
uint64_t limit_filesize; /* filesize limit expressed in bytes */
int shortest; int shortest;
int bitexact;
int header_written;
} OutputFile; } OutputFile;
extern __thread InputStream **input_streams;
extern __thread int nb_input_streams;
extern __thread InputFile **input_files; extern __thread InputFile **input_files;
extern __thread int nb_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 OutputFile **output_files;
extern __thread int nb_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_delta_threshold;
extern __thread float dts_error_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 enum VideoSyncMethod video_sync_method;
extern __thread float frame_drop_threshold; extern __thread float frame_drop_threshold;
extern __thread int do_benchmark; extern __thread int do_benchmark;
extern __thread int do_benchmark_all; extern __thread int do_benchmark_all;
extern __thread int do_deinterlace;
extern __thread int do_hex_dump; extern __thread int do_hex_dump;
extern __thread int do_pkt_dump; extern __thread int do_pkt_dump;
extern __thread int copy_ts; extern __thread int copy_ts;
@ -677,7 +790,6 @@ extern __thread int print_stats;
extern __thread int64_t stats_period; extern __thread int64_t stats_period;
extern __thread int qp_hist; extern __thread int qp_hist;
extern __thread int stdin_interaction; extern __thread int stdin_interaction;
extern __thread int frame_bits_per_raw_sample;
extern __thread AVIOContext *progress_avio; extern __thread AVIOContext *progress_avio;
extern __thread float max_error_rate; extern __thread float max_error_rate;
@ -688,15 +800,20 @@ extern __thread int auto_conversion_filters;
extern __thread const AVIOInterruptCB int_cb; extern __thread const AVIOInterruptCB int_cb;
#if CONFIG_QSV
extern __thread char *qsv_device;
#endif
extern __thread HWDevice *filter_hw_device; extern __thread HWDevice *filter_hw_device;
extern __thread int want_sdp;
extern __thread unsigned nb_output_dumped; extern __thread unsigned nb_output_dumped;
extern __thread int main_ffmpeg_return_code; 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_init(void);
void term_exit(void); void term_exit(void);
@ -705,7 +822,12 @@ void show_usage(void);
void remove_avoptions(AVDictionary **a, AVDictionary *b); void remove_avoptions(AVDictionary **a, AVDictionary *b);
void assert_avoptions(AVDictionary *m); 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); int configure_filtergraph(FilterGraph *fg);
void check_filter_outputs(void); 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 ffmpeg_parse_options(int argc, char **argv);
int videotoolbox_init(AVCodecContext *s); void enc_stats_write(OutputStream *ost, EncStats *es,
int qsv_init(AVCodecContext *s); const AVFrame *frame, const AVPacket *pkt,
uint64_t frame_num);
HWDevice *hw_device_get_by_name(const char *name); HWDevice *hw_device_get_by_name(const char *name);
int hw_device_init_from_string(const char *arg, HWDevice **dev); 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); 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_write_trailer(OutputFile *of);
int of_open(const OptionsContext *o, const char *filename);
void of_close(OutputFile **pof); void of_close(OutputFile **pof);
void of_write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost, void of_enc_stats_close(void);
int unqueue);
/*
* 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); void cancel_operation(long id);
#endif /* FFTOOLS_FFMPEG_H */ #endif /* FFTOOLS_FFMPEG_H */

@ -1,6 +1,7 @@
/* /*
* ffmpeg filter configuration * 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. * 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 * 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. * 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 * mobile-ffmpeg / ffmpeg-kit changes by Taner Sener
* *
* 08.2018 * 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, enum AVPixelFormat
const AVCodec *codec, enum AVPixelFormat target) choose_pixel_fmt(const AVCodec *codec, enum AVPixelFormat target,
int strict_std_compliance)
{ {
if (codec && codec->pix_fmts) { if (codec && codec->pix_fmts) {
const enum AVPixelFormat *p = 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; int has_alpha = desc ? desc->nb_components % 2 == 0 : 0;
enum AVPixelFormat best= AV_PIX_FMT_NONE; 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); p = get_compliance_normal_pix_fmts(codec, p);
} }
for (; *p != AV_PIX_FMT_NONE; 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) static const char *choose_pix_fmts(OutputFilter *ofilter, AVBPrint *bprint)
{ {
OutputStream *ost = ofilter->ost; OutputStream *ost = ofilter->ost;
AVCodecContext *enc = ost->enc_ctx;
const AVDictionaryEntry *strict_dict = av_dict_get(ost->encoder_opts, "strict", NULL, 0); const AVDictionaryEntry *strict_dict = av_dict_get(ost->encoder_opts, "strict", NULL, 0);
if (strict_dict) if (strict_dict)
// used by choose_pixel_fmt() and below // 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); return av_get_pix_fmt_name(ost->enc_ctx->pix_fmt);
} }
if (ost->enc_ctx->pix_fmt != AV_PIX_FMT_NONE) { 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)); return av_get_pix_fmt_name(choose_pixel_fmt(enc->codec, enc->pix_fmt,
} else if (ost->enc && ost->enc->pix_fmts) { ost->enc_ctx->strict_std_compliance));
} else if (enc->codec->pix_fmts) {
const enum AVPixelFormat *p; const enum AVPixelFormat *p;
p = ost->enc->pix_fmts; p = enc->codec->pix_fmts;
if (ost->enc_ctx->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL) { 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++) { 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' : '|'); av_bprintf(bprint, "%s%c", name, p[1] == AV_PIX_FMT_NONE ? '\0' : '|');
} }
if (!av_bprint_is_complete(bprint)) if (!av_bprint_is_complete(bprint))
exit_program(1); report_and_exit(AVERROR(ENOMEM));
return bprint->str; return bprint->str;
} else } else
return NULL; return NULL;
@ -197,7 +207,7 @@ int init_simple_filtergraph(InputStream *ist, OutputStream *ost)
InputFilter *ifilter; InputFilter *ifilter;
if (!fg) if (!fg)
exit_program(1); report_and_exit(AVERROR(ENOMEM));
fg->index = nb_filtergraphs; fg->index = nb_filtergraphs;
ofilter = ALLOC_ARRAY_ELEM(fg->outputs, fg->nb_outputs); 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); ifilter->frame_queue = av_fifo_alloc2(8, sizeof(AVFrame*), AV_FIFO_FLAG_AUTO_GROW);
if (!ifilter->frame_queue) if (!ifilter->frame_queue)
exit_program(1); report_and_exit(AVERROR(ENOMEM));
GROW_ARRAY(ist->filters, ist->nb_filters); GROW_ARRAY(ist->filters, ist->nb_filters);
ist->filters[ist->nb_filters - 1] = ifilter; 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, res = av_asprintf("%s:%s", ctx->filter->name,
avfilter_pad_get_name(pads, inout->pad_idx)); avfilter_pad_get_name(pads, inout->pad_idx));
if (!res) if (!res)
exit_program(1); report_and_exit(AVERROR(ENOMEM));
return res; return res;
} }
@ -285,7 +295,7 @@ static void init_input_filter(FilterGraph *fg, AVFilterInOut *in)
"matches no streams.\n", p, fg->graph_desc); "matches no streams.\n", p, fg->graph_desc);
exit_program(1); 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) { if (ist->user_set_discard == AVDISCARD_ALL) {
av_log(NULL, AV_LOG_FATAL, "Stream specifier '%s' in filtergraph description %s " av_log(NULL, AV_LOG_FATAL, "Stream specifier '%s' in filtergraph description %s "
"matches a disabled input stream.\n", p, fg->graph_desc); "matches a disabled input stream.\n", p, fg->graph_desc);
@ -293,14 +303,13 @@ static void init_input_filter(FilterGraph *fg, AVFilterInOut *in)
} }
} else { } else {
/* find the first unused stream of corresponding type */ /* find the first unused stream of corresponding type */
for (i = 0; i < nb_input_streams; i++) { for (ist = ist_iter(NULL); ist; ist = ist_iter(ist)) {
ist = input_streams[i];
if (ist->user_set_discard == AVDISCARD_ALL) if (ist->user_set_discard == AVDISCARD_ALL)
continue; continue;
if (ist->dec_ctx->codec_type == type && ist->discard) if (ist->dec_ctx->codec_type == type && ist->discard)
break; break;
} }
if (i == nb_input_streams) { if (!ist) {
av_log(NULL, AV_LOG_FATAL, "Cannot find a matching stream for " av_log(NULL, AV_LOG_FATAL, "Cannot find a matching stream for "
"unlabeled input pad %d on filter %s\n", in->pad_idx, "unlabeled input pad %d on filter %s\n", in->pad_idx,
in->filter_ctx->name); 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); ifilter->frame_queue = av_fifo_alloc2(8, sizeof(AVFrame*), AV_FIFO_FLAG_AUTO_GROW);
if (!ifilter->frame_queue) if (!ifilter->frame_queue)
exit_program(1); report_and_exit(AVERROR(ENOMEM));
GROW_ARRAY(ist->filters, ist->nb_filters); GROW_ARRAY(ist->filters, ist->nb_filters);
ist->filters[ist->nb_filters - 1] = ifilter; 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) int init_complex_filtergraph(FilterGraph *fg)
{ {
AVFilterInOut *inputs, *outputs, *cur; AVFilterInOut *inputs, *outputs, *cur;
@ -342,7 +501,7 @@ int init_complex_filtergraph(FilterGraph *fg)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
graph->nb_threads = 1; 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) if (ret < 0)
goto fail; goto fail;
@ -467,8 +626,7 @@ static int configure_output_video_filter(FilterGraph *fg, OutputFilter *ofilter,
snprintf(args, sizeof(args), "%d:%d", snprintf(args, sizeof(args), "%d:%d",
ofilter->width, ofilter->height); ofilter->width, ofilter->height);
while ((e = av_dict_get(ost->sws_dict, "", e, while ((e = av_dict_iterate(ost->sws_dict, e))) {
AV_DICT_IGNORE_SUFFIX))) {
av_strlcatf(args, sizeof(args), ":%s=%s", e->key, e->value); 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; \ pad_idx = 0; \
} while (0) } while (0)
av_bprint_init(&args, 0, AV_BPRINT_SIZE_UNLIMITED); av_bprint_init(&args, 0, AV_BPRINT_SIZE_UNLIMITED);
#if FFMPEG_OPT_MAP_CHANNEL
if (ost->audio_channels_mapped) { if (ost->audio_channels_mapped) {
AVChannelLayout mapped_layout = { 0 }; AVChannelLayout mapped_layout = { 0 };
int i; int i;
@ -587,6 +746,7 @@ static int configure_output_audio_filter(FilterGraph *fg, OutputFilter *ofilter,
AUTO_INSERT_FILTER("-map_channel", "pan", args.str); AUTO_INSERT_FILTER("-map_channel", "pan", args.str);
av_bprint_clear(&args); av_bprint_clear(&args);
} }
#endif
if (codec->ch_layout.order == AV_CHANNEL_ORDER_UNSPEC) if (codec->ch_layout.order == AV_CHANNEL_ORDER_UNSPEC)
av_channel_layout_default(&codec->ch_layout, codec->ch_layout.nb_channels); 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) { if (ost->apad && of->shortest) {
int i; int i;
for (i=0; i<of->ctx->nb_streams; i++) for (i = 0; i < of->nb_streams; i++)
if (of->ctx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) if (of->streams[i]->st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)
break; break;
if (i<of->ctx->nb_streams) { if (i < of->nb_streams) {
AUTO_INSERT_FILTER("-apad", "apad", ost->apad); AUTO_INSERT_FILTER("-apad", "apad", ost->apad);
} }
} }
@ -751,7 +911,7 @@ static int configure_input_video_filter(FilterGraph *fg, InputFilter *ifilter,
} }
if (!fr.num) 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) { if (ist->dec_ctx->codec_type == AVMEDIA_TYPE_SUBTITLE) {
ret = sub2video_prepare(ist, ifilter); ret = sub2video_prepare(ist, ifilter);
@ -904,40 +1064,6 @@ static int configure_input_audio_filter(FilterGraph *fg, InputFilter *ifilter,
last_filter = filt_ctx; \ last_filter = filt_ctx; \
} while (0) } 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", snprintf(name, sizeof(name), "trim for input stream %d:%d",
ist->file_index, ist->st->index); ist->file_index, ist->st->index);
if (copy_ts) { if (copy_ts) {
@ -1020,44 +1146,39 @@ int configure_filtergraph(FilterGraph *fg)
if (simple) { if (simple) {
OutputStream *ost = fg->outputs[0]->ost; OutputStream *ost = fg->outputs[0]->ost;
char args[512];
const AVDictionaryEntry *e = NULL;
if (filter_nbthreads) { if (filter_nbthreads) {
ret = av_opt_set(fg->graph, "threads", filter_nbthreads, 0); ret = av_opt_set(fg->graph, "threads", filter_nbthreads, 0);
if (ret < 0) if (ret < 0)
goto fail; goto fail;
} else { } else {
const AVDictionaryEntry *e = NULL;
e = av_dict_get(ost->encoder_opts, "threads", NULL, 0); e = av_dict_get(ost->encoder_opts, "threads", NULL, 0);
if (e) if (e)
av_opt_set(fg->graph, "threads", e->value, 0); av_opt_set(fg->graph, "threads", e->value, 0);
} }
args[0] = 0; if (av_dict_count(ost->sws_dict)) {
e = NULL; ret = av_dict_get_string(ost->sws_dict,
while ((e = av_dict_get(ost->sws_dict, "", e, &fg->graph->scale_sws_opts,
AV_DICT_IGNORE_SUFFIX))) { '=', ':');
av_strlcatf(args, sizeof(args), "%s=%s:", e->key, e->value); if (ret < 0)
} goto fail;
if (strlen(args)) {
args[strlen(args)-1] = 0;
fg->graph->scale_sws_opts = av_strdup(args);
} }
args[0] = 0; if (av_dict_count(ost->swr_opts)) {
e = NULL; char *args;
while ((e = av_dict_get(ost->swr_opts, "", e, ret = av_dict_get_string(ost->swr_opts, &args, '=', ':');
AV_DICT_IGNORE_SUFFIX))) { if (ret < 0)
av_strlcatf(args, sizeof(args), "%s=%s:", e->key, e->value); 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 { } else {
fg->graph->nb_threads = filter_complex_nbthreads; 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; goto fail;
ret = hw_device_setup_for_filter(fg); ret = hw_device_setup_for_filter(fg);
@ -1131,16 +1252,8 @@ int configure_filtergraph(FilterGraph *fg)
for (i = 0; i < fg->nb_outputs; i++) { for (i = 0; i < fg->nb_outputs; i++) {
OutputStream *ost = fg->outputs[i]->ost; OutputStream *ost = fg->outputs[i]->ost;
if (!ost->enc) { if (ost->enc_ctx->codec_type == AVMEDIA_TYPE_AUDIO &&
/* identical to the same check in ffmpeg.c, needed because !(ost->enc_ctx->codec->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE))
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))
av_buffersink_set_frame_size(ost->filter->filter, av_buffersink_set_frame_size(ost->filter->filter,
ost->enc_ctx->frame_size); 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. * 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 * 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. * 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 * mobile-ffmpeg / ffmpeg-kit changes by Taner Sener
* *
* 12.2019 * 12.2019
@ -357,7 +364,7 @@ int hw_device_setup_for_decode(InputStream *ist)
if (ist->hwaccel_id == HWACCEL_AUTO) { if (ist->hwaccel_id == HWACCEL_AUTO) {
ist->hwaccel_device_type = dev->type; ist->hwaccel_device_type = dev->type;
} else if (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 " "specified for decoder: device %s of type %s is not "
"usable with hwaccel %s.\n", dev->name, "usable with hwaccel %s.\n", dev->name,
av_hwdevice_get_type_name(dev->type), av_hwdevice_get_type_name(dev->type),
@ -408,7 +415,7 @@ int hw_device_setup_for_decode(InputStream *ist)
type = config->device_type; type = config->device_type;
dev = hw_device_get_by_type(type); dev = hw_device_get_by_type(type);
if (dev) { 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", "hwaccel type %s with existing device %s.\n",
av_hwdevice_get_type_name(type), dev->name); av_hwdevice_get_type_name(type), dev->name);
} }
@ -426,12 +433,12 @@ int hw_device_setup_for_decode(InputStream *ist)
continue; continue;
} }
if (ist->hwaccel_device) { 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 " "hwaccel type %s with new device created "
"from %s.\n", av_hwdevice_get_type_name(type), "from %s.\n", av_hwdevice_get_type_name(type),
ist->hwaccel_device); ist->hwaccel_device);
} else { } 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", "hwaccel type %s with new default device.\n",
av_hwdevice_get_type_name(type)); av_hwdevice_get_type_name(type));
} }
@ -439,7 +446,7 @@ int hw_device_setup_for_decode(InputStream *ist)
if (dev) { if (dev) {
ist->hwaccel_device_type = type; ist->hwaccel_device_type = type;
} else { } else {
av_log(ist->dec_ctx, AV_LOG_INFO, "Auto hwaccel " av_log(NULL, AV_LOG_INFO, "Auto hwaccel "
"disabled: no device found.\n"); "disabled: no device found.\n");
ist->hwaccel_id = HWACCEL_NONE; ist->hwaccel_id = HWACCEL_NONE;
return 0; return 0;
@ -447,7 +454,7 @@ int hw_device_setup_for_decode(InputStream *ist)
} }
if (!dev) { 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", "for decoder: device type %s needed for codec %s.\n",
av_hwdevice_get_type_name(type), ist->dec->name); av_hwdevice_get_type_name(type), ist->dec->name);
return err; return err;
@ -479,7 +486,7 @@ int hw_device_setup_for_encode(OutputStream *ost)
} }
for (i = 0;; i++) { for (i = 0;; i++) {
config = avcodec_get_hw_config(ost->enc, i); config = avcodec_get_hw_config(ost->enc_ctx->codec, i);
if (!config) if (!config)
break; break;
@ -490,7 +497,7 @@ int hw_device_setup_for_encode(OutputStream *ost)
av_log(ost->enc_ctx, AV_LOG_VERBOSE, "Using input " av_log(ost->enc_ctx, AV_LOG_VERBOSE, "Using input "
"frames context (format %s) with %s encoder.\n", "frames context (format %s) with %s encoder.\n",
av_get_pix_fmt_name(ost->enc_ctx->pix_fmt), 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); ost->enc_ctx->hw_frames_ctx = av_buffer_ref(frames_ref);
if (!ost->enc_ctx->hw_frames_ctx) if (!ost->enc_ctx->hw_frames_ctx)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
@ -505,7 +512,7 @@ int hw_device_setup_for_encode(OutputStream *ost)
if (dev) { if (dev) {
av_log(ost->enc_ctx, AV_LOG_VERBOSE, "Using device %s " av_log(ost->enc_ctx, AV_LOG_VERBOSE, "Using device %s "
"(type %s) with %s encoder.\n", dev->name, "(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); ost->enc_ctx->hw_device_ctx = av_buffer_ref(dev->device_ref);
if (!ost->enc_ctx->hw_device_ctx) if (!ost->enc_ctx->hw_device_ctx)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);

@ -1,6 +1,7 @@
/* /*
* This file is part of FFmpeg. * 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 * FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * 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 * 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. * 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 * ffmpeg-kit changes by Taner Sener
* *
* 09.2022 * 09.2022
* -------------------------------------------------------- * --------------------------------------------------------
* - fftools_ prefix added to fftools headers * - fftools_ prefix added to fftools headers
* - using main_ffmpeg_return_code instead of main_return_code * - using main_ffmpeg_return_code instead of main_return_code
* - printf replaced with av_log statements
*/ */
#include <stdatomic.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include "fftools_ffmpeg.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/fifo.h"
#include "libavutil/intreadwrite.h" #include "libavutil/intreadwrite.h"
#include "libavutil/log.h" #include "libavutil/log.h"
#include "libavutil/mem.h" #include "libavutil/mem.h"
#include "libavutil/timestamp.h" #include "libavutil/timestamp.h"
#include "libavutil/thread.h"
#include "libavcodec/packet.h" #include "libavcodec/packet.h"
#include "libavformat/avformat.h" #include "libavformat/avformat.h"
#include "libavformat/avio.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; return (MuxStream*)ost;
for (i = 0; i < nb_output_streams; i++) { }
OutputStream *ost2 = output_streams[i];
ost2->finished |= ost == ost2 ? this_stream : others; 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, static int write_packet(Muxer *mux, OutputStream *ost, AVPacket *pkt)
int unqueue)
{ {
AVFormatContext *s = of->ctx; MuxStream *ms = ms_from_ost(ost);
AVFormatContext *s = mux->fc;
AVStream *st = ost->st; AVStream *st = ost->st;
int64_t fs;
uint64_t frame_num;
int ret; int ret;
/* fs = filesize(s->pb);
* Audio encoders may split the packets -- #frames in != #packets out. atomic_store(&mux->last_filesize, fs);
* But there is no reordering, so we can limit the number of output packets if (fs >= mux->limit_filesize) {
* by simply dropping them here. ret = AVERROR_EOF;
* Counting encoded video frames needs to be done separately because of goto fail;
* 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;
} }
if ((st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && ost->vsync_method == VSYNC_DROP) || if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && ost->vsync_method == VSYNC_DROP)
(st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && audio_sync_method < 0))
pkt->pts = pkt->dts = AV_NOPTS_VALUE; pkt->pts = pkt->dts = AV_NOPTS_VALUE;
if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
if (ost->frame_rate.num && ost->is_cfr) { if (ost->frame_rate.num && ost->is_cfr) {
if (pkt->duration > 0) 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), 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 (!(s->oformat->flags & AVFMT_NOTIMESTAMPS)) {
if (pkt->dts != AV_NOPTS_VALUE && if (pkt->dts != AV_NOPTS_VALUE &&
@ -133,25 +127,26 @@ void of_write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost,
pkt->dts, pkt->pts, pkt->dts, pkt->pts,
ost->file_index, ost->st->index); ost->file_index, ost->st->index);
pkt->pts = pkt->pts =
pkt->dts = 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, ost->last_mux_dts + 1) - FFMIN3(pkt->pts, pkt->dts, ms->last_mux_dts + 1)
- FFMAX3(pkt->pts, pkt->dts, ost->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) && 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 && pkt->dts != AV_NOPTS_VALUE &&
ost->last_mux_dts != AV_NOPTS_VALUE) { ms->last_mux_dts != AV_NOPTS_VALUE) {
int64_t max = ost->last_mux_dts + !(s->oformat->flags & AVFMT_TS_NONSTRICT); int64_t max = ms->last_mux_dts + !(s->oformat->flags & AVFMT_TS_NONSTRICT);
if (pkt->dts < max) { if (pkt->dts < max) {
int loglevel = max - pkt->dts > 2 || st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO ? AV_LOG_WARNING : AV_LOG_DEBUG; int loglevel = max - pkt->dts > 2 || st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO ? AV_LOG_WARNING : AV_LOG_DEBUG;
if (exit_on_error) if (exit_on_error)
loglevel = AV_LOG_ERROR; loglevel = AV_LOG_ERROR;
av_log(s, loglevel, "Non-monotonous DTS in output stream " av_log(s, loglevel, "Non-monotonous DTS in output stream "
"%d:%d; previous: %"PRId64", current: %"PRId64"; ", "%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) { if (exit_on_error) {
av_log(NULL, AV_LOG_FATAL, "aborting.\n"); ret = AVERROR(EINVAL);
exit_program(1); goto fail;
} }
av_log(s, loglevel, "changing to %"PRId64". This may result " av_log(s, loglevel, "changing to %"PRId64". This may result "
"in incorrect timestamps in the output file.\n", "in incorrect timestamps in the output file.\n",
max); 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->data_size_mux += pkt->size;
ost->packets_written++; frame_num = atomic_fetch_add(&ost->packets_written, 1);
pkt->stream_index = ost->index; pkt->stream_index = ost->index;
if (debug_ts) { 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", "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->pts), av_ts2timestr(pkt->pts, &ost->st->time_base),
av_ts2str(pkt->dts), av_ts2timestr(pkt->dts, &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), 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); ret = av_interleaved_write_frame(s, pkt);
if (ret < 0) { if (ret < 0) {
print_error("av_interleaved_write_frame()", ret); print_error("av_interleaved_write_frame()", ret);
main_ffmpeg_return_code = 1; goto fail;
close_all_output_streams(ost, MUXER_FINISHED | ENCODER_FINISHED, ENCODER_FINISHED);
} }
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) static int print_sdp(void)
@ -196,16 +486,16 @@ static int print_sdp(void)
AVFormatContext **avc; AVFormatContext **avc;
for (i = 0; i < nb_output_files; i++) { 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; return 0;
} }
avc = av_malloc_array(nb_output_files, sizeof(*avc)); avc = av_malloc_array(nb_output_files, sizeof(*avc));
if (!avc) if (!avc)
exit_program(1); return AVERROR(ENOMEM);
for (i = 0, j = 0; i < nb_output_files; i++) { for (i = 0, j = 0; i < nb_output_files; i++) {
if (!strcmp(output_files[i]->ctx->oformat->name, "rtp")) { if (!strcmp(output_files[i]->format->name, "rtp")) {
avc[j] = output_files[i]->ctx; avc[j] = mux_from_of(output_files[i])->fc;
j++; j++;
} }
} }
@ -221,7 +511,7 @@ static int print_sdp(void)
goto fail; goto fail;
if (!sdp_filename) { if (!sdp_filename) {
printf("SDP:\n%s\n", sdp); av_log(NULL, AV_LOG_ERROR, "SDP:\n%s\n", sdp);
fflush(stdout); fflush(stdout);
} else { } else {
ret = avio_open2(&sdp_pb, sdp_filename, AVIO_FLAG_WRITE, &int_cb, NULL); 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); av_freep(&sdp_filename);
} }
// SDP successfully written, allow muxer threads to start
ret = 1;
fail: fail:
av_freep(&avc); av_freep(&avc);
return ret; return ret;
} }
/* open the muxer when all the streams are initialized */ int mux_check_init(Muxer *mux)
int of_check_init(OutputFile *of)
{ {
OutputFile *of = &mux->of;
AVFormatContext *fc = mux->fc;
int ret, i; int ret, i;
for (i = 0; i < of->ctx->nb_streams; i++) { for (i = 0; i < fc->nb_streams; i++) {
OutputStream *ost = output_streams[of->ost_index + i]; OutputStream *ost = of->streams[i];
if (!ost->initialized) if (!ost->initialized)
return 0; return 0;
} }
ret = avformat_write_header(of->ctx, &of->opts); ret = avformat_write_header(fc, &mux->opts);
if (ret < 0) { if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, av_log(mux, AV_LOG_ERROR, "Could not write header (incorrect codec "
"Could not write header for output file #%d " "parameters ?): %s\n", av_err2str(ret));
"(incorrect codec parameters ?): %s\n",
of->index, av_err2str(ret));
return ret; return ret;
} }
//assert_avoptions(of->opts); //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++; nb_output_dumped++;
if (sdp_filename || want_sdp) { if (sdp_filename || want_sdp) {
@ -270,62 +562,220 @@ int of_check_init(OutputFile *of)
if (ret < 0) { if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Error writing the SDP.\n"); av_log(NULL, AV_LOG_ERROR, "Error writing the SDP.\n");
return ret; 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 */ return 0;
for (i = 0; i < of->ctx->nb_streams; i++) { }
OutputStream *ost = output_streams[of->ost_index + i];
AVPacket *pkt;
/* try to improve muxing time_base (only possible if nothing has been written yet) */ static int bsf_init(MuxStream *ms)
if (!av_fifo_can_read(ost->muxing_queue)) {
ost->mux_timebase = ost->st->time_base; OutputStream *ost = &ms->ost;
AVBSFContext *ctx = ms->bsf_ctx;
int ret;
while (av_fifo_read(ost->muxing_queue, &pkt, 1) >= 0) { if (!ctx)
ost->muxing_queue_data_size -= pkt->size; return 0;
of_write_packet(of, pkt, ost, 1);
av_packet_free(&pkt); 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; 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) int of_write_trailer(OutputFile *of)
{ {
Muxer *mux = mux_from_of(of);
AVFormatContext *fc = mux->fc;
int ret; int ret;
if (!of->header_written) { if (!mux->tq) {
av_log(NULL, AV_LOG_ERROR, av_log(mux, AV_LOG_ERROR,
"Nothing was written into output file %d (%s), because " "Nothing was written into output file, because "
"at least one of its streams received no packets.\n", "at least one of its streams received no packets.\n");
of->index, of->ctx->url);
return AVERROR(EINVAL); 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) { 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; 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; 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) void of_close(OutputFile **pof)
{ {
OutputFile *of = *pof; OutputFile *of = *pof;
AVFormatContext *s; Muxer *mux;
if (!of) if (!of)
return; return;
mux = mux_from_of(of);
thread_stop(mux);
s = of->ctx; sq_free(&of->sq_encode);
if (s && s->oformat && !(s->oformat->flags & AVFMT_NOFILE)) sq_free(&mux->sq_mux);
avio_closep(&s->pb);
avformat_free_context(s); for (int i = 0; i < of->nb_streams; i++)
av_dict_free(&of->opts); 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); 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) 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. * 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 * 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. * 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 * mobile-ffmpeg / ffmpeg-kit changes by Taner Sener
* *
* 09.2022 * 09.2022
@ -52,9 +60,11 @@
#include "libavutil/ffversion.h" #include "libavutil/ffversion.h"
#include <string.h> #include <string.h>
#include <math.h>
#include "libavformat/avformat.h" #include "libavformat/avformat.h"
#include "libavcodec/avcodec.h" #include "libavcodec/avcodec.h"
#include "libavutil/ambient_viewing_environment.h"
#include "libavutil/avassert.h" #include "libavutil/avassert.h"
#include "libavutil/avstring.h" #include "libavutil/avstring.h"
#include "libavutil/bprint.h" #include "libavutil/bprint.h"
@ -163,6 +173,8 @@ typedef struct ReadInterval {
__thread ReadInterval *read_intervals; __thread ReadInterval *read_intervals;
__thread int read_intervals_nb = 0; __thread int read_intervals_nb = 0;
__thread int find_stream_info = 1;
/* section structure definition */ /* section structure definition */
#define SECTION_MAX_NB_CHILDREN 10 #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, ...) static inline void writer_printf_printf(WriterContext *wctx, const char *fmt, ...)
{ {
va_list ap; va_list ap;
va_start(ap, fmt); va_start(ap, fmt);
av_vlog(NULL, AV_LOG_STDERR, fmt, ap); av_vlog(NULL, AV_LOG_STDERR, fmt, ap);
va_end(ap); va_end(ap);
@ -671,7 +684,7 @@ static int writer_open(WriterContext **wctx, const Writer *writer, const char *a
goto fail; 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) { 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", av_log(*wctx, AV_LOG_ERROR, "Failed to set option '%s' with value '%s' provided to writer context\n",
opt->key, opt->value); opt->key, opt->value);
@ -1907,12 +1920,14 @@ static void writer_register_all(void)
writer_print_string(w, k, pbuf.str, 0); \ writer_print_string(w, k, pbuf.str, 0); \
} while (0) } while (0)
#define print_list_fmt(k, f, n, ...) do { \ #define print_list_fmt(k, f, n, m, ...) do { \
av_bprint_clear(&pbuf); \ av_bprint_clear(&pbuf); \
for (int idx = 0; idx < n; idx++) { \ for (int idx = 0; idx < n; idx++) { \
if (idx > 0) \ for (int idx2 = 0; idx2 < m; idx2++) { \
av_bprint_chars(&pbuf, ' ', 1); \ if (idx > 0 || idx2 > 0) \
av_bprintf(&pbuf, f, __VA_ARGS__); \ av_bprint_chars(&pbuf, ' ', 1); \
av_bprintf(&pbuf, f, __VA_ARGS__); \
} \
} \ } \
writer_print_string(w, k, pbuf.str, 0); \ writer_print_string(w, k, pbuf.str, 0); \
} while (0) } while (0)
@ -1953,7 +1968,7 @@ static inline int show_tags(WriterContext *w, AVDictionary *tags, int section_id
return 0; return 0;
writer_print_section_header(w, section_id); 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) if ((ret = print_str_validate(tag->key, tag->value)) < 0)
break; break;
} }
@ -2023,7 +2038,7 @@ static void print_dovi_metadata(WriterContext *w, const AVDOVIMetadata *dovi)
const AVDOVIReshapingCurve *curve = &mapping->curves[c]; const AVDOVIReshapingCurve *curve = &mapping->curves[c];
writer_print_section_header(w, SECTION_ID_FRAME_SIDE_DATA_COMPONENT); 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); writer_print_section_header(w, SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST);
for (int i = 0; i < curve->num_pivots - 1; i++) { 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_str("mapping_idc_name", "polynomial");
print_int("poly_order", curve->poly_order[i]); print_int("poly_order", curve->poly_order[i]);
print_list_fmt("poly_coef", "%"PRIi64, print_list_fmt("poly_coef", "%"PRIi64,
curve->poly_order[i] + 1, curve->poly_order[i] + 1, 1,
curve->poly_coef[i][idx]); curve->poly_coef[i][idx]);
break; break;
case AV_DOVI_MAPPING_MMR: 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_order", curve->mmr_order[i]);
print_int("mmr_constant", curve->mmr_constant[i]); print_int("mmr_constant", curve->mmr_constant[i]);
print_list_fmt("mmr_coef", "%"PRIi64, print_list_fmt("mmr_coef", "%"PRIi64,
curve->mmr_order[i] * 7, curve->mmr_order[i], 7,
curve->mmr_coef[i][0][idx]); curve->mmr_coef[i][idx][idx2]);
break; break;
default: default:
print_str("mapping_idc_name", "unknown"); 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("dm_metadata_id", color->dm_metadata_id);
print_int("scene_refresh_flag", color->scene_refresh_flag); print_int("scene_refresh_flag", color->scene_refresh_flag);
print_list_fmt("ycc_to_rgb_matrix", "%d/%d", 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].num,
color->ycc_to_rgb_matrix[idx].den); color->ycc_to_rgb_matrix[idx].den);
print_list_fmt("ycc_to_rgb_offset", "%d/%d", 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].num,
color->ycc_to_rgb_offset[idx].den); color->ycc_to_rgb_offset[idx].den);
print_list_fmt("rgb_to_lms_matrix", "%d/%d", 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].num,
color->rgb_to_lms_matrix[idx].den); color->rgb_to_lms_matrix[idx].den);
print_int("signal_eotf", color->signal_eotf); 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, static void print_pkt_side_data(WriterContext *w,
AVCodecParameters *par, AVCodecParameters *par,
const AVPacketSideData *side_data, const AVPacketSideData *side_data,
@ -2293,8 +2319,11 @@ static void print_pkt_side_data(WriterContext *w,
writer_print_section_header(w, id_data); writer_print_section_header(w, id_data);
print_str("side_data_type", name ? name : "unknown"); print_str("side_data_type", name ? name : "unknown");
if (sd->type == AV_PKT_DATA_DISPLAYMATRIX && sd->size >= 9*4) { 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); 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) { } else if (sd->type == AV_PKT_DATA_STEREO3D) {
const AVStereo3D *stereo = (AVStereo3D *)sd->data; const AVStereo3D *stereo = (AVStereo3D *)sd->data;
print_str("type", av_stereo3d_type_name(stereo->type)); 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); print_val("size", pkt->size, unit_byte_str);
if (pkt->pos != -1) print_fmt ("pos", "%"PRId64, pkt->pos); if (pkt->pos != -1) print_fmt ("pos", "%"PRId64, pkt->pos);
else print_str_opt("pos", "N/A"); else print_str_opt("pos", "N/A");
print_fmt("flags", "%c%c", pkt->flags & AV_PKT_FLAG_KEY ? 'K' : '_', 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_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) { if (pkt->side_data_elems) {
size_t size; size_t size;
@ -2526,9 +2559,6 @@ static void show_packet(WriterContext *w, InputFile *ifile, AVPacket *pkt, int p
SECTION_ID_PACKET_SIDE_DATA); 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); writer_print_section_footer(w);
av_bprint_finalize(&pbuf, NULL); 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_time("pkt_dts_time", frame->pkt_dts, &stream->time_base);
print_ts ("best_effort_timestamp", frame->best_effort_timestamp); print_ts ("best_effort_timestamp", frame->best_effort_timestamp);
print_time("best_effort_timestamp_time", frame->best_effort_timestamp, &stream->time_base); 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_ts ("pkt_duration", frame->pkt_duration);
print_duration_time("pkt_duration_time", frame->pkt_duration, &stream->time_base); 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); if (frame->pkt_pos != -1) print_fmt ("pkt_pos", "%"PRId64, frame->pkt_pos);
else print_str_opt("pkt_pos", "N/A"); else print_str_opt("pkt_pos", "N/A");
if (frame->pkt_size != -1) print_val ("pkt_size", frame->pkt_size, unit_byte_str); 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_str_opt("sample_aspect_ratio", "N/A");
} }
print_fmt("pict_type", "%c", av_get_picture_type_char(frame->pict_type)); 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("coded_picture_number", frame->coded_picture_number);
print_int("display_picture_number", frame->display_picture_number); print_int("display_picture_number", frame->display_picture_number);
)
#endif
print_int("interlaced_frame", frame->interlaced_frame); print_int("interlaced_frame", frame->interlaced_frame);
print_int("top_field_first", frame->top_field_first); print_int("top_field_first", frame->top_field_first);
print_int("repeat_pict", frame->repeat_pict); 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); name = av_frame_side_data_name(sd->type);
print_str("side_data_type", name ? name : "unknown"); print_str("side_data_type", name ? name : "unknown");
if (sd->type == AV_FRAME_DATA_DISPLAYMATRIX && sd->size >= 9*4) { 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); 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) { } else if (sd->type == AV_FRAME_DATA_AFD && sd->size > 0) {
print_int("active_format", *sd->data); print_int("active_format", *sd->data);
} else if (sd->type == AV_FRAME_DATA_GOP_TIMECODE && sd->size >= 8) { } 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) { } else if (sd->type == AV_FRAME_DATA_DYNAMIC_HDR_VIVID) {
AVDynamicHDRVivid *metadata = (AVDynamicHDRVivid *)sd->data; AVDynamicHDRVivid *metadata = (AVDynamicHDRVivid *)sd->data;
print_dynamic_hdr_vivid(w, metadata); 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); 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, static av_always_inline int process_frame(WriterContext *w,
InputFile *ifile, InputFile *ifile,
AVFrame *frame, AVPacket *pkt, AVFrame *frame, const AVPacket *pkt,
int *packet_new) int *packet_new)
{ {
AVFormatContext *fmt_ctx = ifile->fmt_ctx; 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]) { if (selected_streams[pkt->stream_index]) {
AVRational tb = ifile->streams[pkt->stream_index].st->time_base; 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) if (pts != AV_NOPTS_VALUE)
*cur_ts = av_rescale_q(pkt->pts, tb, AV_TIME_BASE_Q); *cur_ts = av_rescale_q(pts, tb, AV_TIME_BASE_Q);
if (!has_start && *cur_ts != AV_NOPTS_VALUE) { if (!has_start && *cur_ts != AV_NOPTS_VALUE) {
start = *cur_ts; start = *cur_ts;
@ -2894,7 +2941,7 @@ static int read_interval_packets(WriterContext *w, InputFile *ifile,
} }
av_packet_unref(pkt); av_packet_unref(pkt);
//Flush remaining frames that are cached in the decoder //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; pkt->stream_index = i;
if (do_read_frames) { if (do_read_frames) {
while (process_frame(w, ifile, frame, pkt, &(int){1}) > 0); 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("bits_per_sample", av_get_bits_per_sample(par->codec_id));
print_int("initial_padding", par->initial_padding);
break; break;
case AVMEDIA_TYPE_SUBTITLE: case AVMEDIA_TYPE_SUBTITLE:
@ -3278,15 +3327,9 @@ static int show_format(WriterContext *w, InputFile *ifile)
static void show_error(WriterContext *w, int err) 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); writer_print_section_header(w, SECTION_ID_ERROR);
print_int("code", err); print_int("code", err);
print_str("string", errbuf_ptr); print_str("string", av_err2str(err));
writer_print_section_footer(w); 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; int scan_all_pmts_set = 0;
fmt_ctx = avformat_alloc_context(); fmt_ctx = avformat_alloc_context();
if (!fmt_ctx) { if (!fmt_ctx)
print_error(filename, AVERROR(ENOMEM)); report_and_exit(AVERROR(ENOMEM));
exit_program(1);
}
if (!av_dict_get(format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE)) { 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); 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; ifile->fmt_ctx = fmt_ctx;
if (scan_all_pmts_set) if (scan_all_pmts_set)
av_dict_set(&format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE); 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); av_log(NULL, AV_LOG_WARNING, "Option %s skipped - not known to demuxer.\n", t->key);
if (find_stream_info) { if (find_stream_info) {
@ -3718,7 +3759,7 @@ static void opt_input_file(void *optctx, const char *arg)
exit_program(1); exit_program(1);
} }
if (!strcmp(arg, "-")) if (!strcmp(arg, "-"))
arg = "pipe:"; arg = "fd:";
input_filename = arg; input_filename = arg;
} }
@ -3737,7 +3778,7 @@ static void opt_output_file(void *optctx, const char *arg)
exit_program(1); exit_program(1);
} }
if (!strcmp(arg, "-")) if (!strcmp(arg, "-"))
arg = "pipe:"; arg = "fd:";
output_filename = arg; 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. * 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. * 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 * 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. * 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 * ffmpeg-kit changes by Taner Sener
* *
* 09.2022 * 09.2022
@ -88,7 +95,7 @@ static __thread FILE *report_file = NULL;
static __thread int report_file_level = AV_LOG_DEBUG; 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 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; extern __thread char *program_name;
int show_license(void *optctx, const char *opt, const char *arg) int show_license(void *optctx, const char *opt, const char *arg)

@ -1,6 +1,6 @@
/* /*
* Option handlers shared between the tools. * 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. * 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); 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); uniqueIdGenerator = new AtomicInteger(1);
/* NATIVE LOG LEVEL IS RECEIVED ONLY ON STARTUP */ /* NATIVE LOG LEVEL IS RECEIVED ONLY ON STARTUP */
@ -175,7 +173,7 @@ public class FFmpegKitConfig {
safFileDescriptorMap = new SparseArray<>(); safFileDescriptorMap = new SparseArray<>();
globalLogRedirectionStrategy = LogRedirectionStrategy.PRINT_LOGS_WHEN_NO_CALLBACKS_DEFINED; 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, private static void statistics(final long sessionId, final int videoFrameNumber,
final float videoFps, final float videoQuality, final long size, 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 Statistics statistics = new Statistics(sessionId, videoFrameNumber, videoFps, videoQuality, size, time, bitrate, speed);
final Session session = getSession(sessionId); final Session session = getSession(sessionId);

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

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

@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists 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 zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

@ -69,7 +69,7 @@ include $(BUILD_SHARED_LIBRARY)
$(call import-module, cpu-features) $(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) ifeq ($(TARGET_PLATFORM),android-16)
MY_SRC_FILES += android_lts_support.c 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 # could be handy for archiving the generated documentation or if some version
# control system is used. # 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 # 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 # for a project that appears at the top of each page and should give viewer a

@ -8,7 +8,7 @@
- Objective-C API - Objective-C API
- Camera access - Camera access
- `ARC` enabled library - `ARC` enabled library
- Built with `-fembed-bitcode` flag - Can be built with `-fembed-bitcode` flag
- Creates shared `frameworks` and `xcframeworks` - Creates shared `frameworks` and `xcframeworks`
#### 1.2 macOS #### 1.2 macOS
@ -17,7 +17,6 @@
- Objective-C API - Objective-C API
- Camera access - Camera access
- `ARC` enabled library - `ARC` enabled library
- Built with `-fembed-bitcode` flag
- Creates shared `frameworks` and `xcframeworks` - Creates shared `frameworks` and `xcframeworks`
#### 1.3 tvOS #### 1.3 tvOS
@ -25,7 +24,7 @@
- Includes `arm64`, `arm64-simulator` and `x86_64` architectures - Includes `arm64`, `arm64-simulator` and `x86_64` architectures
- Objective-C API - Objective-C API
- `ARC` enabled library - `ARC` enabled library
- Built with `-fembed-bitcode` flag - Can be built with `-fembed-bitcode` flag
- Creates shared `frameworks` and `xcframeworks` - Creates shared `frameworks` and `xcframeworks`
### 2. Building ### 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. 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 #### 2.2 Options
@ -111,17 +110,17 @@ All libraries created can be found under the `prebuilt` directory.
- iOS - iOS
```yaml ```yaml
pod 'ffmpeg-kit-ios-full', '~> 5.1' pod 'ffmpeg-kit-ios-full', '~> 6.0'
``` ```
- macOS - macOS
```yaml ```yaml
pod 'ffmpeg-kit-macos-full', '~> 5.1' pod 'ffmpeg-kit-macos-full', '~> 6.0'
``` ```
- tvOS - tvOS
```yaml ```yaml
pod 'ffmpeg-kit-tvos-full', '~> 5.1' pod 'ffmpeg-kit-tvos-full', '~> 6.0'
``` ```
2. Execute synchronous `FFmpeg` commands. 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_MACRO_DIR([m4])
AC_CONFIG_SRCDIR([src/FFmpegKit.m]) AC_CONFIG_SRCDIR([src/FFmpegKit.m])

@ -36,7 +36,7 @@
#import "SessionState.h" #import "SessionState.h"
/** Global library version */ /** Global library version */
NSString* const FFmpegKitVersion = @"5.1"; NSString* const FFmpegKitVersion = @"6.0";
/** /**
* Prefix of named pipes created by ffmpeg-kit. * Prefix of named pipes created by ffmpeg-kit.
@ -150,7 +150,7 @@ void addSessionToSessionHistory(id<Session> session) {
float _statisticsFps; // statistics fps float _statisticsFps; // statistics fps
float _statisticsQuality; // statistics quality float _statisticsQuality; // statistics quality
int64_t _statisticsSize; // statistics size int64_t _statisticsSize; // statistics size
int _statisticsTime; // statistics time double _statisticsTime; // statistics time
double _statisticsBitrate; // statistics bitrate double _statisticsBitrate; // statistics bitrate
double _statisticsSpeed; // statistics speed double _statisticsSpeed; // statistics speed
} }
@ -173,7 +173,7 @@ void addSessionToSessionHistory(id<Session> session) {
fps:(float)videoFps fps:(float)videoFps
quality:(float)videoQuality quality:(float)videoQuality
size:(int64_t)size size:(int64_t)size
time:(int)time time:(double)time
bitrate:(double)bitrate bitrate:(double)bitrate
speed:(double)speed { speed:(double)speed {
self = [super init]; self = [super init];
@ -224,7 +224,7 @@ void addSessionToSessionHistory(id<Session> session) {
return _statisticsSize; return _statisticsSize;
} }
- (int)getStatisticsTime { - (double)getStatisticsTime {
return _statisticsTime; return _statisticsTime;
} }
@ -340,7 +340,7 @@ void logCallbackDataAdd(int level, AVBPrint *data) {
/** /**
* Adds statistics data to the end of callback data list. * 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]; CallbackData *callbackData = [[CallbackData alloc] init:globalSessionId videoFrameNumber:frameNumber fps:fps quality:quality size:size time:time bitrate:bitrate speed:speed];
[lock lock]; [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 bitrate output bit rate in kbits/s
* @param speed processing speed = processed duration / operation duration * @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); statisticsCallbackDataAdd(frameNumber, fps, quality, size, time, bitrate, speed);
} }
void process_log(long sessionId, int levelValue, AVBPrint* logMessage) { void process_log(long sessionId, int levelValue, AVBPrint* logMessage) {
int activeLogLevel = av_log_get_level(); 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 globalCallbackDefined = false;
BOOL sessionCallbackDefined = false; BOOL sessionCallbackDefined = false;
LogRedirectionStrategy activeLogRedirectionStrategy = globalLogRedirectionStrategy; 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]; 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 \ ffmpegkit_exception.m \
fftools_cmdutils.c \ fftools_cmdutils.c \
fftools_ffmpeg.c \ fftools_ffmpeg.c \
fftools_ffmpeg_demux.c \
fftools_ffmpeg_filter.c \ fftools_ffmpeg_filter.c \
fftools_ffmpeg_hw.c \ fftools_ffmpeg_hw.c \
fftools_ffmpeg_mux.c \ fftools_ffmpeg_mux.c \
fftools_ffmpeg_mux_init.c \
fftools_ffmpeg_opt.c \ fftools_ffmpeg_opt.c \
fftools_ffprobe.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 = \ include_HEADERS = \
AbstractSession.h \ AbstractSession.h \
@ -60,8 +65,12 @@ include_HEADERS = \
ffmpegkit_exception.h \ ffmpegkit_exception.h \
fftools_cmdutils.h \ fftools_cmdutils.h \
fftools_ffmpeg.h \ fftools_ffmpeg.h \
fftools_ffmpeg_mux.h \
fftools_fopen_utf8.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_CFLAGS = $(CFLAGS)
libffmpegkit_la_OBJCFLAGS = $(CFLAGS) libffmpegkit_la_OBJCFLAGS = $(CFLAGS)

@ -147,12 +147,17 @@ am_libffmpegkit_la_OBJECTS = libffmpegkit_la-AbstractSession.lo \
libffmpegkit_la-ffmpegkit_exception.lo \ libffmpegkit_la-ffmpegkit_exception.lo \
libffmpegkit_la-fftools_cmdutils.lo \ libffmpegkit_la-fftools_cmdutils.lo \
libffmpegkit_la-fftools_ffmpeg.lo \ libffmpegkit_la-fftools_ffmpeg.lo \
libffmpegkit_la-fftools_ffmpeg_demux.lo \
libffmpegkit_la-fftools_ffmpeg_filter.lo \ libffmpegkit_la-fftools_ffmpeg_filter.lo \
libffmpegkit_la-fftools_ffmpeg_hw.lo \ libffmpegkit_la-fftools_ffmpeg_hw.lo \
libffmpegkit_la-fftools_ffmpeg_mux.lo \ libffmpegkit_la-fftools_ffmpeg_mux.lo \
libffmpegkit_la-fftools_ffmpeg_mux_init.lo \
libffmpegkit_la-fftools_ffmpeg_opt.lo \ libffmpegkit_la-fftools_ffmpeg_opt.lo \
libffmpegkit_la-fftools_ffprobe.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) libffmpegkit_la_OBJECTS = $(am_libffmpegkit_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@) AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_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-ffmpegkit_exception.Plo \
./$(DEPDIR)/libffmpegkit_la-fftools_cmdutils.Plo \ ./$(DEPDIR)/libffmpegkit_la-fftools_cmdutils.Plo \
./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg.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_filter.Plo \
./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_hw.Plo \ ./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_hw.Plo \
./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_mux.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_ffmpeg_opt.Plo \
./$(DEPDIR)/libffmpegkit_la-fftools_ffprobe.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 am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@ -415,12 +425,17 @@ libffmpegkit_la_SOURCES = \
ffmpegkit_exception.m \ ffmpegkit_exception.m \
fftools_cmdutils.c \ fftools_cmdutils.c \
fftools_ffmpeg.c \ fftools_ffmpeg.c \
fftools_ffmpeg_demux.c \
fftools_ffmpeg_filter.c \ fftools_ffmpeg_filter.c \
fftools_ffmpeg_hw.c \ fftools_ffmpeg_hw.c \
fftools_ffmpeg_mux.c \ fftools_ffmpeg_mux.c \
fftools_ffmpeg_mux_init.c \
fftools_ffmpeg_opt.c \ fftools_ffmpeg_opt.c \
fftools_ffprobe.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 = \ include_HEADERS = \
AbstractSession.h \ AbstractSession.h \
@ -452,8 +467,12 @@ include_HEADERS = \
ffmpegkit_exception.h \ ffmpegkit_exception.h \
fftools_cmdutils.h \ fftools_cmdutils.h \
fftools_ffmpeg.h \ fftools_ffmpeg.h \
fftools_ffmpeg_mux.h \
fftools_fopen_utf8.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_CFLAGS = $(CFLAGS)
libffmpegkit_la_OBJCFLAGS = $(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-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_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.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_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_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.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_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_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_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): $(am__depfiles_remade):
@$(MKDIR_P) $(@D) @$(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@ @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 @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 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_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 @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@ @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 @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 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_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 @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@ @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 @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 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_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 @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@ @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 @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: .m.o:
@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.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 $@ $< &&\ @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-ffmpegkit_exception.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_cmdutils.Plo -rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_cmdutils.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg.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_filter.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_hw.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.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_ffmpeg_opt.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_ffprobe.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_opt_common.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_sync_queue.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_thread_queue.Plo
-rm -f Makefile -rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \ distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags distclean-tags
@ -1045,12 +1109,17 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/libffmpegkit_la-ffmpegkit_exception.Plo -rm -f ./$(DEPDIR)/libffmpegkit_la-ffmpegkit_exception.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_cmdutils.Plo -rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_cmdutils.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg.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_filter.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_ffmpeg_hw.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.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_ffmpeg_opt.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_ffprobe.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_opt_common.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_sync_queue.Plo
-rm -f ./$(DEPDIR)/libffmpegkit_la-fftools_thread_queue.Plo
-rm -f Makefile -rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic maintainer-clean-am: distclean-am maintainer-clean-generic

@ -27,7 +27,7 @@
*/ */
@interface Statistics : NSObject @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; - (long)getSessionId;
@ -39,7 +39,7 @@
- (long)getSize; - (long)getSize;
- (int)getTime; - (double)getTime;
- (double)getBitrate; - (double)getBitrate;

@ -25,12 +25,12 @@
float _videoFps; float _videoFps;
float _videoQuality; float _videoQuality;
long _size; long _size;
int _time; double _time;
double _bitrate; double _bitrate;
double _speed; 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]; self = [super init];
if (self) { if (self) {
_sessionId = sessionId; _sessionId = sessionId;
@ -66,7 +66,7 @@
return _size; return _size;
} }
- (int)getTime { - (double)getTime {
return _time; return _time;
} }

@ -1,7 +1,8 @@
/* /*
* Various utilities for command line tools * Various utilities for command line tools
* Copyright (c) 2000-2003 Fabrice Bellard * 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. * 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 * 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. * 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 * mobile-ffmpeg / ffmpeg-kit changes by Taner Sener
* *
* 09.2022 * 09.2022
@ -129,11 +136,18 @@ void register_exit(void (*cb)(int ret))
program_exit = cb; 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) void exit_program(int ret)
{ {
if (program_exit) if (program_exit)
program_exit(ret); program_exit(ret);
// FFmpegKit
// exit disabled and replaced with longjmp, exit value stored in longjmp_value // exit disabled and replaced with longjmp, exit value stored in longjmp_value
// exit(ret); // exit(ret);
longjmp_value = ret; longjmp_value = ret;
@ -696,7 +710,7 @@ static void init_parse_context(OptionParseContext *octx,
octx->nb_groups = nb_groups; octx->nb_groups = nb_groups;
octx->groups = av_calloc(octx->nb_groups, sizeof(*octx->groups)); octx->groups = av_calloc(octx->nb_groups, sizeof(*octx->groups));
if (!octx->groups) if (!octx->groups)
exit_program(1); report_and_exit(AVERROR(ENOMEM));
for (i = 0; i < octx->nb_groups; i++) for (i = 0; i < octx->nb_groups; i++)
octx->groups[i].group_def = &groups[i]; octx->groups[i].group_def = &groups[i];
@ -843,12 +857,7 @@ do { \
void print_error(const char *filename, int err) void print_error(const char *filename, int err)
{ {
char errbuf[128]; av_log(NULL, AV_LOG_ERROR, "%s: %s\n", filename, av_err2str(err));
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);
} }
int read_yesno(void) int read_yesno(void)
@ -971,7 +980,7 @@ AVDictionary *filter_codec_opts(AVDictionary *opts, enum AVCodecID codec_id,
break; break;
} }
while ((t = av_dict_get(opts, "", t, AV_DICT_IGNORE_SUFFIX))) { while ((t = av_dict_iterate(opts, t))) {
const AVClass *priv_class; const AVClass *priv_class;
char *p = strchr(t->key, ':'); char *p = strchr(t->key, ':');
@ -1009,11 +1018,8 @@ AVDictionary **setup_find_stream_info_opts(AVFormatContext *s,
if (!s->nb_streams) if (!s->nb_streams)
return NULL; return NULL;
opts = av_calloc(s->nb_streams, sizeof(*opts)); opts = av_calloc(s->nb_streams, sizeof(*opts));
if (!opts) { if (!opts)
av_log(NULL, AV_LOG_ERROR, report_and_exit(AVERROR(ENOMEM));
"Could not alloc memory for stream options.\n");
exit_program(1);
}
for (i = 0; i < s->nb_streams; i++) for (i = 0; i < s->nb_streams; i++)
opts[i] = filter_codec_opts(codec_opts, s->streams[i]->codecpar->codec_id, opts[i] = filter_codec_opts(codec_opts, s->streams[i]->codecpar->codec_id,
s, s->streams[i], NULL); 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) { if (*size < new_size) {
uint8_t *tmp = av_realloc_array(array, new_size, elem_size); uint8_t *tmp = av_realloc_array(array, new_size, elem_size);
if (!tmp) { if (!tmp)
av_log(NULL, AV_LOG_ERROR, "Could not alloc buffer.\n"); report_and_exit(AVERROR(ENOMEM));
exit_program(1);
}
memset(tmp + *size*elem_size, 0, (new_size-*size) * elem_size); memset(tmp + *size*elem_size, 0, (new_size-*size) * elem_size);
*size = new_size; *size = new_size;
return tmp; return tmp;
@ -1044,10 +1048,8 @@ void *allocate_array_elem(void *ptr, size_t elem_size, int *nb_elems)
void *new_elem; void *new_elem;
if (!(new_elem = av_mallocz(elem_size)) || if (!(new_elem = av_mallocz(elem_size)) ||
av_dynarray_add_nofree(ptr, nb_elems, new_elem) < 0) { av_dynarray_add_nofree(ptr, nb_elems, new_elem) < 0)
av_log(NULL, AV_LOG_ERROR, "Could not alloc buffer.\n"); report_and_exit(AVERROR(ENOMEM));
exit_program(1);
}
return new_elem; return new_elem;
} }

@ -1,7 +1,8 @@
/* /*
* Various utilities for command line tools * Various utilities for command line tools
* copyright (c) 2003 Fabrice Bellard * 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. * 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 * 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. * 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 * mobile-ffmpeg / ffmpeg-kit changes by Taner Sener
* *
* 09.2022 * 09.2022
@ -95,6 +102,17 @@ extern __thread int find_stream_info;
*/ */
void register_exit(void (*cb)(int ret)); 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. * 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_ffmpeg(const char *opt, const char *arg);
void show_help_default_ffprobe(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. * 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. * 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 * FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * 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 * 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. * 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 * mobile-ffmpeg / ffmpeg-kit changes by Taner Sener
* *
* 09.2022 * 09.2022
@ -59,11 +70,13 @@
#include "config.h" #include "config.h"
#include <stdatomic.h>
#include <stdint.h> #include <stdint.h>
#include <stdio.h> #include <stdio.h>
#include <signal.h> #include <signal.h>
#include "fftools_cmdutils.h" #include "fftools_cmdutils.h"
#include "fftools_sync_queue.h"
#include "libavformat/avformat.h" #include "libavformat/avformat.h"
#include "libavformat/avio.h" #include "libavformat/avio.h"
@ -85,6 +98,12 @@
#include "libswresample/swresample.h" #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 { enum VideoSyncMethod {
VSYNC_AUTO = -1, VSYNC_AUTO = -1,
VSYNC_PASSTHROUGH, VSYNC_PASSTHROUGH,
@ -113,15 +132,15 @@ typedef struct StreamMap {
int disabled; /* 1 is this mapping is disabled by a negative map */ int disabled; /* 1 is this mapping is disabled by a negative map */
int file_index; int file_index;
int stream_index; int stream_index;
int sync_file_index;
int sync_stream_index;
char *linklabel; /* name of an output link, for mapping lavfi outputs */ char *linklabel; /* name of an output link, for mapping lavfi outputs */
} StreamMap; } StreamMap;
#if FFMPEG_OPT_MAP_CHANNEL
typedef struct { typedef struct {
int file_idx, stream_idx, channel_idx; // input int file_idx, stream_idx, channel_idx; // input
int ofile_idx, ostream_idx; // output int ofile_idx, ostream_idx; // output
} AudioChannelMap; } AudioChannelMap;
#endif
typedef struct OptionsContext { typedef struct OptionsContext {
OptionGroup *g; OptionGroup *g;
@ -157,6 +176,7 @@ typedef struct OptionsContext {
int accurate_seek; int accurate_seek;
int thread_queue_size; int thread_queue_size;
int input_sync_ref; int input_sync_ref;
int find_stream_info;
SpecifierOpt *ts_scale; SpecifierOpt *ts_scale;
int nb_ts_scale; int nb_ts_scale;
@ -174,11 +194,10 @@ typedef struct OptionsContext {
/* output options */ /* output options */
StreamMap *stream_maps; StreamMap *stream_maps;
int nb_stream_maps; int nb_stream_maps;
#if FFMPEG_OPT_MAP_CHANNEL
AudioChannelMap *audio_channel_maps; /* one info entry per -map_channel */ AudioChannelMap *audio_channel_maps; /* one info entry per -map_channel */
int nb_audio_channel_maps; /* number of (valid) -map_channel settings */ int nb_audio_channel_maps; /* number of (valid) -map_channel settings */
int metadata_global_manual; #endif
int metadata_streams_manual;
int metadata_chapters_manual;
const char **attachments; const char **attachments;
int nb_attachments; int nb_attachments;
@ -186,9 +205,10 @@ typedef struct OptionsContext {
int64_t recording_time; int64_t recording_time;
int64_t stop_time; int64_t stop_time;
uint64_t limit_filesize; int64_t limit_filesize;
float mux_preload; float mux_preload;
float mux_max_delay; float mux_max_delay;
float shortest_buf_duration;
int shortest; int shortest;
int bitexact; int bitexact;
@ -221,6 +241,12 @@ typedef struct OptionsContext {
int nb_force_fps; int nb_force_fps;
SpecifierOpt *frame_aspect_ratios; SpecifierOpt *frame_aspect_ratios;
int nb_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; SpecifierOpt *rc_overrides;
int nb_rc_overrides; int nb_rc_overrides;
SpecifierOpt *intra_matrices; SpecifierOpt *intra_matrices;
@ -247,6 +273,8 @@ typedef struct OptionsContext {
int nb_reinit_filters; int nb_reinit_filters;
SpecifierOpt *fix_sub_duration; SpecifierOpt *fix_sub_duration;
int nb_fix_sub_duration; int nb_fix_sub_duration;
SpecifierOpt *fix_sub_duration_heartbeat;
int nb_fix_sub_duration_heartbeat;
SpecifierOpt *canvas_sizes; SpecifierOpt *canvas_sizes;
int nb_canvas_sizes; int nb_canvas_sizes;
SpecifierOpt *pass; SpecifierOpt *pass;
@ -275,6 +303,18 @@ typedef struct OptionsContext {
int nb_autoscale; int nb_autoscale;
SpecifierOpt *bits_per_raw_sample; SpecifierOpt *bits_per_raw_sample;
int nb_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; } OptionsContext;
typedef struct InputFilter { typedef struct InputFilter {
@ -350,12 +390,22 @@ typedef struct InputStream {
#define DECODING_FOR_OST 1 #define DECODING_FOR_OST 1
#define DECODING_FOR_FILTER 2 #define DECODING_FOR_FILTER 2
int processing_needed; /* non zero if the packets must be processed */ 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; AVCodecContext *dec_ctx;
const AVCodec *dec; const AVCodec *dec;
AVFrame *decoded_frame; AVFrame *decoded_frame;
AVPacket *pkt; AVPacket *pkt;
AVRational framerate_guessed;
int64_t prev_pkt_pts; int64_t prev_pkt_pts;
int64_t start; /* time when read started */ int64_t start; /* time when read started */
/* predicted dts of the next packet read for this stream or (when there are /* 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) int64_t pts; ///< current pts of the decoded frame (in AV_TIME_BASE units)
int wrap_correction_done; 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 filter_in_rescale_delta_last;
int64_t min_pts; /* pts with the smallest value in a current stream */ int64_t min_pts; /* pts with the smallest value in a current stream */
@ -417,12 +473,8 @@ typedef struct InputStream {
char *hwaccel_device; char *hwaccel_device;
enum AVPixelFormat hwaccel_output_format; enum AVPixelFormat hwaccel_output_format;
/* hwaccel context */
void *hwaccel_ctx;
void (*hwaccel_uninit)(AVCodecContext *s);
int (*hwaccel_retrieve_data)(AVCodecContext *s, AVFrame *frame); int (*hwaccel_retrieve_data)(AVCodecContext *s, AVFrame *frame);
enum AVPixelFormat hwaccel_pix_fmt; enum AVPixelFormat hwaccel_pix_fmt;
enum AVPixelFormat hwaccel_retrieved_pix_fmt;
/* stats */ /* stats */
// combined size of all the packets read // combined size of all the packets read
@ -439,38 +491,46 @@ typedef struct InputStream {
int got_output; int got_output;
} InputStream; } InputStream;
typedef struct LastFrameDuration {
int stream_idx;
int64_t duration;
} LastFrameDuration;
typedef struct InputFile { typedef struct InputFile {
int index;
AVFormatContext *ctx; AVFormatContext *ctx;
int eof_reached; /* true if eof reached */ int eof_reached; /* true if eof reached */
int eagain; /* true if last read attempt returned EAGAIN */ 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; int64_t input_ts_offset;
int input_sync_ref; int input_sync_ref;
/**
* Effective format start time based on enabled streams.
*/
int64_t start_time_effective;
int64_t ts_offset; int64_t ts_offset;
/**
* Extra timestamp offset added by discontinuity handling.
*/
int64_t ts_offset_discont;
int64_t last_ts; int64_t last_ts;
int64_t start_time; /* user-specified start time in AV_TIME_BASE or AV_NOPTS_VALUE */ int64_t start_time; /* user-specified start time in AV_TIME_BASE or AV_NOPTS_VALUE */
int64_t recording_time; 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() */ /* streams that ffmpeg is aware of;
int nb_streams_warn; /* number of streams that the user was warned 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; int rate_emu;
float readrate; float readrate;
int accurate_seek; int accurate_seek;
AVPacket *pkt; /* when looping the input file, this queue is used by decoders to report
* the last frame duration back to the demuxer thread */
#if HAVE_THREADS AVThreadMessageQueue *audio_duration_queue;
AVThreadMessageQueue *in_thread_queue; int audio_duration_queue_size;
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
} InputFile; } InputFile;
enum forced_keyframes_const { 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 (1 << 0)
#define ABORT_ON_FLAG_EMPTY_OUTPUT_STREAM (1 << 1) #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[]; extern const char *const forced_keyframes_const_names[];
typedef enum { typedef enum {
@ -492,68 +587,92 @@ typedef enum {
MUXER_FINISHED = 2, MUXER_FINISHED = 2,
} OSTFinished ; } 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 { typedef struct OutputStream {
const AVClass *clazz;
int file_index; /* file index */ int file_index; /* file index */
int index; /* stream index in the output file */ 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 */ AVStream *st; /* stream in the output file */
int encoding_needed; /* true if encoding needed for this stream */ /* number of frames emitted by the video-encoding sync code */
int64_t frame_number; int64_t vsync_frame_number;
/* input pts and corresponding output pts /* predicted pts of the next frame to be encoded
for A/V sync */ * audio/video encoding only */
struct InputStream *sync_ist; /* input stream to sync against */ int64_t next_pts;
int64_t sync_opts; /* output frame counter, could be changed to some true timestamp */ // FIXME look at frame_number /* dts of the last packet sent to the muxing queue, in AV_TIME_BASE_Q */
/* 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 */
int64_t last_mux_dts; 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 // the timebase of the packets sent to the muxer
AVRational mux_timebase; AVRational mux_timebase;
AVRational enc_timebase; AVRational enc_timebase;
AVBSFContext *bsf_ctx;
AVCodecContext *enc_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 *filtered_frame;
AVFrame *last_frame; AVFrame *last_frame;
AVFrame *sq_frame;
AVPacket *pkt; AVPacket *pkt;
int64_t last_dropped; int64_t last_dropped;
int64_t last_nb0_frames[3]; int64_t last_nb0_frames[3];
void *hwaccel_ctx;
/* video only */ /* video only */
AVRational frame_rate; AVRational frame_rate;
AVRational max_frame_rate; AVRational max_frame_rate;
enum VideoSyncMethod vsync_method; enum VideoSyncMethod vsync_method;
int is_cfr; int is_cfr;
const char *fps_mode;
int force_fps; int force_fps;
int top_field_first; int top_field_first;
#if FFMPEG_ROTATION_METADATA
int rotate_overridden; int rotate_overridden;
#endif
int autoscale; int autoscale;
int bitexact;
int bits_per_raw_sample; int bits_per_raw_sample;
#if FFMPEG_ROTATION_METADATA
double rotate_override_value; double rotate_override_value;
#endif
AVRational frame_aspect_ratio; AVRational frame_aspect_ratio;
/* forced key frames */ KeyframeForceCtx kf;
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;
/* audio only */ /* 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_map; /* list of the channels id to pick from the source stream */
int audio_channels_mapped; /* number of channels in audio_channels_map */ int audio_channels_mapped; /* number of channels in audio_channels_map */
#endif
char *logfile_prefix; char *logfile_prefix;
FILE *logfile; FILE *logfile;
@ -569,7 +688,6 @@ typedef struct OutputStream {
char *apad; char *apad;
OSTFinished finished; /* no more packets should be written for this stream */ OSTFinished finished; /* no more packets should be written for this stream */
int unavailable; /* true if the steram is unavailable (possibly temporarily) */ int unavailable; /* true if the steram is unavailable (possibly temporarily) */
int stream_copy;
// init_output_stream() has been called for this stream // init_output_stream() has been called for this stream
// The encoder and the bitstream filters have been initialized and the stream // The encoder and the bitstream filters have been initialized and the stream
@ -582,15 +700,16 @@ typedef struct OutputStream {
int streamcopy_started; int streamcopy_started;
int copy_initial_nonkeyframes; int copy_initial_nonkeyframes;
int copy_prior_start; int copy_prior_start;
char *disposition;
int keep_pix_fmt; int keep_pix_fmt;
/* stats */ /* stats */
// combined size of all the packets written // combined size of all the packets sent to the muxer
uint64_t data_size; 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 // 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 // number of frames/samples sent to the encoder
uint64_t frames_encoded; uint64_t frames_encoded;
uint64_t samples_encoded; uint64_t samples_encoded;
@ -600,51 +719,48 @@ typedef struct OutputStream {
/* packet quality factor */ /* packet quality factor */
int quality; 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 */ /* packet picture type */
int pict_type; int pict_type;
/* frame encode sum of squared error values */ /* frame encode sum of squared error values */
int64_t error[4]; 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; } OutputStream;
typedef struct OutputFile { typedef struct OutputFile {
const AVClass *clazz;
int index; int index;
const AVOutputFormat *format; 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 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 int64_t start_time; ///< start time in microseconds == AV_TIME_BASE units
uint64_t limit_filesize; /* filesize limit expressed in bytes */
int shortest; int shortest;
int bitexact;
int header_written;
} OutputFile; } OutputFile;
extern __thread InputStream **input_streams;
extern __thread int nb_input_streams;
extern __thread InputFile **input_files; extern __thread InputFile **input_files;
extern __thread int nb_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 OutputFile **output_files;
extern __thread int nb_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_delta_threshold;
extern __thread float dts_error_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 enum VideoSyncMethod video_sync_method;
extern __thread float frame_drop_threshold; extern __thread float frame_drop_threshold;
extern __thread int do_benchmark; extern __thread int do_benchmark;
extern __thread int do_benchmark_all; extern __thread int do_benchmark_all;
extern __thread int do_deinterlace;
extern __thread int do_hex_dump; extern __thread int do_hex_dump;
extern __thread int do_pkt_dump; extern __thread int do_pkt_dump;
extern __thread int copy_ts; extern __thread int copy_ts;
@ -677,7 +790,6 @@ extern __thread int print_stats;
extern __thread int64_t stats_period; extern __thread int64_t stats_period;
extern __thread int qp_hist; extern __thread int qp_hist;
extern __thread int stdin_interaction; extern __thread int stdin_interaction;
extern __thread int frame_bits_per_raw_sample;
extern __thread AVIOContext *progress_avio; extern __thread AVIOContext *progress_avio;
extern __thread float max_error_rate; extern __thread float max_error_rate;
@ -688,15 +800,20 @@ extern __thread int auto_conversion_filters;
extern __thread const AVIOInterruptCB int_cb; extern __thread const AVIOInterruptCB int_cb;
#if CONFIG_QSV
extern __thread char *qsv_device;
#endif
extern __thread HWDevice *filter_hw_device; extern __thread HWDevice *filter_hw_device;
extern __thread int want_sdp;
extern __thread unsigned nb_output_dumped; extern __thread unsigned nb_output_dumped;
extern __thread int main_ffmpeg_return_code; 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_init(void);
void term_exit(void); void term_exit(void);
@ -705,7 +822,12 @@ void show_usage(void);
void remove_avoptions(AVDictionary **a, AVDictionary *b); void remove_avoptions(AVDictionary **a, AVDictionary *b);
void assert_avoptions(AVDictionary *m); 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); int configure_filtergraph(FilterGraph *fg);
void check_filter_outputs(void); 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 ffmpeg_parse_options(int argc, char **argv);
int videotoolbox_init(AVCodecContext *s); void enc_stats_write(OutputStream *ost, EncStats *es,
int qsv_init(AVCodecContext *s); const AVFrame *frame, const AVPacket *pkt,
uint64_t frame_num);
HWDevice *hw_device_get_by_name(const char *name); HWDevice *hw_device_get_by_name(const char *name);
int hw_device_init_from_string(const char *arg, HWDevice **dev); 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); 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_write_trailer(OutputFile *of);
int of_open(const OptionsContext *o, const char *filename);
void of_close(OutputFile **pof); void of_close(OutputFile **pof);
void of_write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost, void of_enc_stats_close(void);
int unqueue);
/*
* 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); void cancel_operation(long id);
#endif /* FFTOOLS_FFMPEG_H */ #endif /* FFTOOLS_FFMPEG_H */

File diff suppressed because it is too large Load Diff

@ -1,6 +1,7 @@
/* /*
* ffmpeg filter configuration * 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. * 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 * 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. * 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 * mobile-ffmpeg / ffmpeg-kit changes by Taner Sener
* *
* 08.2018 * 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, enum AVPixelFormat
const AVCodec *codec, enum AVPixelFormat target) choose_pixel_fmt(const AVCodec *codec, enum AVPixelFormat target,
int strict_std_compliance)
{ {
if (codec && codec->pix_fmts) { if (codec && codec->pix_fmts) {
const enum AVPixelFormat *p = 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; int has_alpha = desc ? desc->nb_components % 2 == 0 : 0;
enum AVPixelFormat best= AV_PIX_FMT_NONE; 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); p = get_compliance_normal_pix_fmts(codec, p);
} }
for (; *p != AV_PIX_FMT_NONE; 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) static const char *choose_pix_fmts(OutputFilter *ofilter, AVBPrint *bprint)
{ {
OutputStream *ost = ofilter->ost; OutputStream *ost = ofilter->ost;
AVCodecContext *enc = ost->enc_ctx;
const AVDictionaryEntry *strict_dict = av_dict_get(ost->encoder_opts, "strict", NULL, 0); const AVDictionaryEntry *strict_dict = av_dict_get(ost->encoder_opts, "strict", NULL, 0);
if (strict_dict) if (strict_dict)
// used by choose_pixel_fmt() and below // 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); return av_get_pix_fmt_name(ost->enc_ctx->pix_fmt);
} }
if (ost->enc_ctx->pix_fmt != AV_PIX_FMT_NONE) { 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)); return av_get_pix_fmt_name(choose_pixel_fmt(enc->codec, enc->pix_fmt,
} else if (ost->enc && ost->enc->pix_fmts) { ost->enc_ctx->strict_std_compliance));
} else if (enc->codec->pix_fmts) {
const enum AVPixelFormat *p; const enum AVPixelFormat *p;
p = ost->enc->pix_fmts; p = enc->codec->pix_fmts;
if (ost->enc_ctx->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL) { 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++) { 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' : '|'); av_bprintf(bprint, "%s%c", name, p[1] == AV_PIX_FMT_NONE ? '\0' : '|');
} }
if (!av_bprint_is_complete(bprint)) if (!av_bprint_is_complete(bprint))
exit_program(1); report_and_exit(AVERROR(ENOMEM));
return bprint->str; return bprint->str;
} else } else
return NULL; return NULL;
@ -197,7 +207,7 @@ int init_simple_filtergraph(InputStream *ist, OutputStream *ost)
InputFilter *ifilter; InputFilter *ifilter;
if (!fg) if (!fg)
exit_program(1); report_and_exit(AVERROR(ENOMEM));
fg->index = nb_filtergraphs; fg->index = nb_filtergraphs;
ofilter = ALLOC_ARRAY_ELEM(fg->outputs, fg->nb_outputs); 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); ifilter->frame_queue = av_fifo_alloc2(8, sizeof(AVFrame*), AV_FIFO_FLAG_AUTO_GROW);
if (!ifilter->frame_queue) if (!ifilter->frame_queue)
exit_program(1); report_and_exit(AVERROR(ENOMEM));
GROW_ARRAY(ist->filters, ist->nb_filters); GROW_ARRAY(ist->filters, ist->nb_filters);
ist->filters[ist->nb_filters - 1] = ifilter; 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, res = av_asprintf("%s:%s", ctx->filter->name,
avfilter_pad_get_name(pads, inout->pad_idx)); avfilter_pad_get_name(pads, inout->pad_idx));
if (!res) if (!res)
exit_program(1); report_and_exit(AVERROR(ENOMEM));
return res; return res;
} }
@ -285,7 +295,7 @@ static void init_input_filter(FilterGraph *fg, AVFilterInOut *in)
"matches no streams.\n", p, fg->graph_desc); "matches no streams.\n", p, fg->graph_desc);
exit_program(1); 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) { if (ist->user_set_discard == AVDISCARD_ALL) {
av_log(NULL, AV_LOG_FATAL, "Stream specifier '%s' in filtergraph description %s " av_log(NULL, AV_LOG_FATAL, "Stream specifier '%s' in filtergraph description %s "
"matches a disabled input stream.\n", p, fg->graph_desc); "matches a disabled input stream.\n", p, fg->graph_desc);
@ -293,14 +303,13 @@ static void init_input_filter(FilterGraph *fg, AVFilterInOut *in)
} }
} else { } else {
/* find the first unused stream of corresponding type */ /* find the first unused stream of corresponding type */
for (i = 0; i < nb_input_streams; i++) { for (ist = ist_iter(NULL); ist; ist = ist_iter(ist)) {
ist = input_streams[i];
if (ist->user_set_discard == AVDISCARD_ALL) if (ist->user_set_discard == AVDISCARD_ALL)
continue; continue;
if (ist->dec_ctx->codec_type == type && ist->discard) if (ist->dec_ctx->codec_type == type && ist->discard)
break; break;
} }
if (i == nb_input_streams) { if (!ist) {
av_log(NULL, AV_LOG_FATAL, "Cannot find a matching stream for " av_log(NULL, AV_LOG_FATAL, "Cannot find a matching stream for "
"unlabeled input pad %d on filter %s\n", in->pad_idx, "unlabeled input pad %d on filter %s\n", in->pad_idx,
in->filter_ctx->name); 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); ifilter->frame_queue = av_fifo_alloc2(8, sizeof(AVFrame*), AV_FIFO_FLAG_AUTO_GROW);
if (!ifilter->frame_queue) if (!ifilter->frame_queue)
exit_program(1); report_and_exit(AVERROR(ENOMEM));
GROW_ARRAY(ist->filters, ist->nb_filters); GROW_ARRAY(ist->filters, ist->nb_filters);
ist->filters[ist->nb_filters - 1] = ifilter; 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) int init_complex_filtergraph(FilterGraph *fg)
{ {
AVFilterInOut *inputs, *outputs, *cur; AVFilterInOut *inputs, *outputs, *cur;
@ -342,7 +501,7 @@ int init_complex_filtergraph(FilterGraph *fg)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
graph->nb_threads = 1; 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) if (ret < 0)
goto fail; goto fail;
@ -467,8 +626,7 @@ static int configure_output_video_filter(FilterGraph *fg, OutputFilter *ofilter,
snprintf(args, sizeof(args), "%d:%d", snprintf(args, sizeof(args), "%d:%d",
ofilter->width, ofilter->height); ofilter->width, ofilter->height);
while ((e = av_dict_get(ost->sws_dict, "", e, while ((e = av_dict_iterate(ost->sws_dict, e))) {
AV_DICT_IGNORE_SUFFIX))) {
av_strlcatf(args, sizeof(args), ":%s=%s", e->key, e->value); 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; \ pad_idx = 0; \
} while (0) } while (0)
av_bprint_init(&args, 0, AV_BPRINT_SIZE_UNLIMITED); av_bprint_init(&args, 0, AV_BPRINT_SIZE_UNLIMITED);
#if FFMPEG_OPT_MAP_CHANNEL
if (ost->audio_channels_mapped) { if (ost->audio_channels_mapped) {
AVChannelLayout mapped_layout = { 0 }; AVChannelLayout mapped_layout = { 0 };
int i; int i;
@ -587,6 +746,7 @@ static int configure_output_audio_filter(FilterGraph *fg, OutputFilter *ofilter,
AUTO_INSERT_FILTER("-map_channel", "pan", args.str); AUTO_INSERT_FILTER("-map_channel", "pan", args.str);
av_bprint_clear(&args); av_bprint_clear(&args);
} }
#endif
if (codec->ch_layout.order == AV_CHANNEL_ORDER_UNSPEC) if (codec->ch_layout.order == AV_CHANNEL_ORDER_UNSPEC)
av_channel_layout_default(&codec->ch_layout, codec->ch_layout.nb_channels); 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) { if (ost->apad && of->shortest) {
int i; int i;
for (i=0; i<of->ctx->nb_streams; i++) for (i = 0; i < of->nb_streams; i++)
if (of->ctx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) if (of->streams[i]->st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)
break; break;
if (i<of->ctx->nb_streams) { if (i < of->nb_streams) {
AUTO_INSERT_FILTER("-apad", "apad", ost->apad); AUTO_INSERT_FILTER("-apad", "apad", ost->apad);
} }
} }
@ -751,7 +911,7 @@ static int configure_input_video_filter(FilterGraph *fg, InputFilter *ifilter,
} }
if (!fr.num) 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) { if (ist->dec_ctx->codec_type == AVMEDIA_TYPE_SUBTITLE) {
ret = sub2video_prepare(ist, ifilter); ret = sub2video_prepare(ist, ifilter);
@ -904,40 +1064,6 @@ static int configure_input_audio_filter(FilterGraph *fg, InputFilter *ifilter,
last_filter = filt_ctx; \ last_filter = filt_ctx; \
} while (0) } 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", snprintf(name, sizeof(name), "trim for input stream %d:%d",
ist->file_index, ist->st->index); ist->file_index, ist->st->index);
if (copy_ts) { if (copy_ts) {
@ -1020,44 +1146,39 @@ int configure_filtergraph(FilterGraph *fg)
if (simple) { if (simple) {
OutputStream *ost = fg->outputs[0]->ost; OutputStream *ost = fg->outputs[0]->ost;
char args[512];
const AVDictionaryEntry *e = NULL;
if (filter_nbthreads) { if (filter_nbthreads) {
ret = av_opt_set(fg->graph, "threads", filter_nbthreads, 0); ret = av_opt_set(fg->graph, "threads", filter_nbthreads, 0);
if (ret < 0) if (ret < 0)
goto fail; goto fail;
} else { } else {
const AVDictionaryEntry *e = NULL;
e = av_dict_get(ost->encoder_opts, "threads", NULL, 0); e = av_dict_get(ost->encoder_opts, "threads", NULL, 0);
if (e) if (e)
av_opt_set(fg->graph, "threads", e->value, 0); av_opt_set(fg->graph, "threads", e->value, 0);
} }
args[0] = 0; if (av_dict_count(ost->sws_dict)) {
e = NULL; ret = av_dict_get_string(ost->sws_dict,
while ((e = av_dict_get(ost->sws_dict, "", e, &fg->graph->scale_sws_opts,
AV_DICT_IGNORE_SUFFIX))) { '=', ':');
av_strlcatf(args, sizeof(args), "%s=%s:", e->key, e->value); if (ret < 0)
} goto fail;
if (strlen(args)) {
args[strlen(args)-1] = 0;
fg->graph->scale_sws_opts = av_strdup(args);
} }
args[0] = 0; if (av_dict_count(ost->swr_opts)) {
e = NULL; char *args;
while ((e = av_dict_get(ost->swr_opts, "", e, ret = av_dict_get_string(ost->swr_opts, &args, '=', ':');
AV_DICT_IGNORE_SUFFIX))) { if (ret < 0)
av_strlcatf(args, sizeof(args), "%s=%s:", e->key, e->value); 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 { } else {
fg->graph->nb_threads = filter_complex_nbthreads; 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; goto fail;
ret = hw_device_setup_for_filter(fg); ret = hw_device_setup_for_filter(fg);
@ -1131,16 +1252,8 @@ int configure_filtergraph(FilterGraph *fg)
for (i = 0; i < fg->nb_outputs; i++) { for (i = 0; i < fg->nb_outputs; i++) {
OutputStream *ost = fg->outputs[i]->ost; OutputStream *ost = fg->outputs[i]->ost;
if (!ost->enc) { if (ost->enc_ctx->codec_type == AVMEDIA_TYPE_AUDIO &&
/* identical to the same check in ffmpeg.c, needed because !(ost->enc_ctx->codec->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE))
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))
av_buffersink_set_frame_size(ost->filter->filter, av_buffersink_set_frame_size(ost->filter->filter,
ost->enc_ctx->frame_size); 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. * 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 * 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. * 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 * mobile-ffmpeg / ffmpeg-kit changes by Taner Sener
* *
* 12.2019 * 12.2019
@ -357,7 +364,7 @@ int hw_device_setup_for_decode(InputStream *ist)
if (ist->hwaccel_id == HWACCEL_AUTO) { if (ist->hwaccel_id == HWACCEL_AUTO) {
ist->hwaccel_device_type = dev->type; ist->hwaccel_device_type = dev->type;
} else if (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 " "specified for decoder: device %s of type %s is not "
"usable with hwaccel %s.\n", dev->name, "usable with hwaccel %s.\n", dev->name,
av_hwdevice_get_type_name(dev->type), av_hwdevice_get_type_name(dev->type),
@ -408,7 +415,7 @@ int hw_device_setup_for_decode(InputStream *ist)
type = config->device_type; type = config->device_type;
dev = hw_device_get_by_type(type); dev = hw_device_get_by_type(type);
if (dev) { 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", "hwaccel type %s with existing device %s.\n",
av_hwdevice_get_type_name(type), dev->name); av_hwdevice_get_type_name(type), dev->name);
} }
@ -426,12 +433,12 @@ int hw_device_setup_for_decode(InputStream *ist)
continue; continue;
} }
if (ist->hwaccel_device) { 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 " "hwaccel type %s with new device created "
"from %s.\n", av_hwdevice_get_type_name(type), "from %s.\n", av_hwdevice_get_type_name(type),
ist->hwaccel_device); ist->hwaccel_device);
} else { } 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", "hwaccel type %s with new default device.\n",
av_hwdevice_get_type_name(type)); av_hwdevice_get_type_name(type));
} }
@ -439,7 +446,7 @@ int hw_device_setup_for_decode(InputStream *ist)
if (dev) { if (dev) {
ist->hwaccel_device_type = type; ist->hwaccel_device_type = type;
} else { } else {
av_log(ist->dec_ctx, AV_LOG_INFO, "Auto hwaccel " av_log(NULL, AV_LOG_INFO, "Auto hwaccel "
"disabled: no device found.\n"); "disabled: no device found.\n");
ist->hwaccel_id = HWACCEL_NONE; ist->hwaccel_id = HWACCEL_NONE;
return 0; return 0;
@ -447,7 +454,7 @@ int hw_device_setup_for_decode(InputStream *ist)
} }
if (!dev) { 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", "for decoder: device type %s needed for codec %s.\n",
av_hwdevice_get_type_name(type), ist->dec->name); av_hwdevice_get_type_name(type), ist->dec->name);
return err; return err;
@ -479,7 +486,7 @@ int hw_device_setup_for_encode(OutputStream *ost)
} }
for (i = 0;; i++) { for (i = 0;; i++) {
config = avcodec_get_hw_config(ost->enc, i); config = avcodec_get_hw_config(ost->enc_ctx->codec, i);
if (!config) if (!config)
break; break;
@ -490,7 +497,7 @@ int hw_device_setup_for_encode(OutputStream *ost)
av_log(ost->enc_ctx, AV_LOG_VERBOSE, "Using input " av_log(ost->enc_ctx, AV_LOG_VERBOSE, "Using input "
"frames context (format %s) with %s encoder.\n", "frames context (format %s) with %s encoder.\n",
av_get_pix_fmt_name(ost->enc_ctx->pix_fmt), 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); ost->enc_ctx->hw_frames_ctx = av_buffer_ref(frames_ref);
if (!ost->enc_ctx->hw_frames_ctx) if (!ost->enc_ctx->hw_frames_ctx)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
@ -505,7 +512,7 @@ int hw_device_setup_for_encode(OutputStream *ost)
if (dev) { if (dev) {
av_log(ost->enc_ctx, AV_LOG_VERBOSE, "Using device %s " av_log(ost->enc_ctx, AV_LOG_VERBOSE, "Using device %s "
"(type %s) with %s encoder.\n", dev->name, "(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); ost->enc_ctx->hw_device_ctx = av_buffer_ref(dev->device_ref);
if (!ost->enc_ctx->hw_device_ctx) if (!ost->enc_ctx->hw_device_ctx)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);

@ -1,6 +1,7 @@
/* /*
* This file is part of FFmpeg. * 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 * FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * 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 * 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. * 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 * ffmpeg-kit changes by Taner Sener
* *
* 09.2022 * 09.2022
@ -31,100 +41,83 @@
* - printf replaced with av_log statements * - printf replaced with av_log statements
*/ */
#include <stdatomic.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include "fftools_ffmpeg.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/fifo.h"
#include "libavutil/intreadwrite.h" #include "libavutil/intreadwrite.h"
#include "libavutil/log.h" #include "libavutil/log.h"
#include "libavutil/mem.h" #include "libavutil/mem.h"
#include "libavutil/timestamp.h" #include "libavutil/timestamp.h"
#include "libavutil/thread.h"
#include "libavcodec/packet.h" #include "libavcodec/packet.h"
#include "libavformat/avformat.h" #include "libavformat/avformat.h"
#include "libavformat/avio.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; return (MuxStream*)ost;
for (i = 0; i < nb_output_streams; i++) { }
OutputStream *ost2 = output_streams[i];
ost2->finished |= ost == ost2 ? this_stream : others; 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, static int write_packet(Muxer *mux, OutputStream *ost, AVPacket *pkt)
int unqueue)
{ {
AVFormatContext *s = of->ctx; MuxStream *ms = ms_from_ost(ost);
AVFormatContext *s = mux->fc;
AVStream *st = ost->st; AVStream *st = ost->st;
int64_t fs;
uint64_t frame_num;
int ret; int ret;
/* fs = filesize(s->pb);
* Audio encoders may split the packets -- #frames in != #packets out. atomic_store(&mux->last_filesize, fs);
* But there is no reordering, so we can limit the number of output packets if (fs >= mux->limit_filesize) {
* by simply dropping them here. ret = AVERROR_EOF;
* Counting encoded video frames needs to be done separately because of goto fail;
* 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;
} }
if ((st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && ost->vsync_method == VSYNC_DROP) || if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && ost->vsync_method == VSYNC_DROP)
(st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && audio_sync_method < 0))
pkt->pts = pkt->dts = AV_NOPTS_VALUE; pkt->pts = pkt->dts = AV_NOPTS_VALUE;
if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
if (ost->frame_rate.num && ost->is_cfr) { if (ost->frame_rate.num && ost->is_cfr) {
if (pkt->duration > 0) 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), 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 (!(s->oformat->flags & AVFMT_NOTIMESTAMPS)) {
if (pkt->dts != AV_NOPTS_VALUE && if (pkt->dts != AV_NOPTS_VALUE &&
@ -134,25 +127,26 @@ void of_write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost,
pkt->dts, pkt->pts, pkt->dts, pkt->pts,
ost->file_index, ost->st->index); ost->file_index, ost->st->index);
pkt->pts = pkt->pts =
pkt->dts = 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, ost->last_mux_dts + 1) - FFMIN3(pkt->pts, pkt->dts, ms->last_mux_dts + 1)
- FFMAX3(pkt->pts, pkt->dts, ost->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) && 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 && pkt->dts != AV_NOPTS_VALUE &&
ost->last_mux_dts != AV_NOPTS_VALUE) { ms->last_mux_dts != AV_NOPTS_VALUE) {
int64_t max = ost->last_mux_dts + !(s->oformat->flags & AVFMT_TS_NONSTRICT); int64_t max = ms->last_mux_dts + !(s->oformat->flags & AVFMT_TS_NONSTRICT);
if (pkt->dts < max) { if (pkt->dts < max) {
int loglevel = max - pkt->dts > 2 || st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO ? AV_LOG_WARNING : AV_LOG_DEBUG; int loglevel = max - pkt->dts > 2 || st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO ? AV_LOG_WARNING : AV_LOG_DEBUG;
if (exit_on_error) if (exit_on_error)
loglevel = AV_LOG_ERROR; loglevel = AV_LOG_ERROR;
av_log(s, loglevel, "Non-monotonous DTS in output stream " av_log(s, loglevel, "Non-monotonous DTS in output stream "
"%d:%d; previous: %"PRId64", current: %"PRId64"; ", "%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) { if (exit_on_error) {
av_log(NULL, AV_LOG_FATAL, "aborting.\n"); ret = AVERROR(EINVAL);
exit_program(1); goto fail;
} }
av_log(s, loglevel, "changing to %"PRId64". This may result " av_log(s, loglevel, "changing to %"PRId64". This may result "
"in incorrect timestamps in the output file.\n", "in incorrect timestamps in the output file.\n",
max); 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->data_size_mux += pkt->size;
ost->packets_written++; frame_num = atomic_fetch_add(&ost->packets_written, 1);
pkt->stream_index = ost->index; pkt->stream_index = ost->index;
if (debug_ts) { 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", "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->pts), av_ts2timestr(pkt->pts, &ost->st->time_base),
av_ts2str(pkt->dts), av_ts2timestr(pkt->dts, &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), 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); ret = av_interleaved_write_frame(s, pkt);
if (ret < 0) { if (ret < 0) {
print_error("av_interleaved_write_frame()", ret); print_error("av_interleaved_write_frame()", ret);
main_ffmpeg_return_code = 1; goto fail;
close_all_output_streams(ost, MUXER_FINISHED | ENCODER_FINISHED, ENCODER_FINISHED);
} }
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) static int print_sdp(void)
@ -197,16 +486,16 @@ static int print_sdp(void)
AVFormatContext **avc; AVFormatContext **avc;
for (i = 0; i < nb_output_files; i++) { 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; return 0;
} }
avc = av_malloc_array(nb_output_files, sizeof(*avc)); avc = av_malloc_array(nb_output_files, sizeof(*avc));
if (!avc) if (!avc)
exit_program(1); return AVERROR(ENOMEM);
for (i = 0, j = 0; i < nb_output_files; i++) { for (i = 0, j = 0; i < nb_output_files; i++) {
if (!strcmp(output_files[i]->ctx->oformat->name, "rtp")) { if (!strcmp(output_files[i]->format->name, "rtp")) {
avc[j] = output_files[i]->ctx; avc[j] = mux_from_of(output_files[i])->fc;
j++; j++;
} }
} }
@ -236,34 +525,36 @@ static int print_sdp(void)
av_freep(&sdp_filename); av_freep(&sdp_filename);
} }
// SDP successfully written, allow muxer threads to start
ret = 1;
fail: fail:
av_freep(&avc); av_freep(&avc);
return ret; return ret;
} }
/* open the muxer when all the streams are initialized */ int mux_check_init(Muxer *mux)
int of_check_init(OutputFile *of)
{ {
OutputFile *of = &mux->of;
AVFormatContext *fc = mux->fc;
int ret, i; int ret, i;
for (i = 0; i < of->ctx->nb_streams; i++) { for (i = 0; i < fc->nb_streams; i++) {
OutputStream *ost = output_streams[of->ost_index + i]; OutputStream *ost = of->streams[i];
if (!ost->initialized) if (!ost->initialized)
return 0; return 0;
} }
ret = avformat_write_header(of->ctx, &of->opts); ret = avformat_write_header(fc, &mux->opts);
if (ret < 0) { if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, av_log(mux, AV_LOG_ERROR, "Could not write header (incorrect codec "
"Could not write header for output file #%d " "parameters ?): %s\n", av_err2str(ret));
"(incorrect codec parameters ?): %s\n",
of->index, av_err2str(ret));
return ret; return ret;
} }
//assert_avoptions(of->opts); //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++; nb_output_dumped++;
if (sdp_filename || want_sdp) { if (sdp_filename || want_sdp) {
@ -271,62 +562,220 @@ int of_check_init(OutputFile *of)
if (ret < 0) { if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Error writing the SDP.\n"); av_log(NULL, AV_LOG_ERROR, "Error writing the SDP.\n");
return ret; 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 */ return 0;
for (i = 0; i < of->ctx->nb_streams; i++) { }
OutputStream *ost = output_streams[of->ost_index + i];
AVPacket *pkt;
/* try to improve muxing time_base (only possible if nothing has been written yet) */ static int bsf_init(MuxStream *ms)
if (!av_fifo_can_read(ost->muxing_queue)) {
ost->mux_timebase = ost->st->time_base; OutputStream *ost = &ms->ost;
AVBSFContext *ctx = ms->bsf_ctx;
int ret;
while (av_fifo_read(ost->muxing_queue, &pkt, 1) >= 0) { if (!ctx)
ost->muxing_queue_data_size -= pkt->size; return 0;
of_write_packet(of, pkt, ost, 1);
av_packet_free(&pkt); 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; 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) int of_write_trailer(OutputFile *of)
{ {
Muxer *mux = mux_from_of(of);
AVFormatContext *fc = mux->fc;
int ret; int ret;
if (!of->header_written) { if (!mux->tq) {
av_log(NULL, AV_LOG_ERROR, av_log(mux, AV_LOG_ERROR,
"Nothing was written into output file %d (%s), because " "Nothing was written into output file, because "
"at least one of its streams received no packets.\n", "at least one of its streams received no packets.\n");
of->index, of->ctx->url);
return AVERROR(EINVAL); 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) { 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; 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; 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) void of_close(OutputFile **pof)
{ {
OutputFile *of = *pof; OutputFile *of = *pof;
AVFormatContext *s; Muxer *mux;
if (!of) if (!of)
return; return;
mux = mux_from_of(of);
thread_stop(mux);
s = of->ctx; sq_free(&of->sq_encode);
if (s && s->oformat && !(s->oformat->flags & AVFMT_NOFILE)) sq_free(&mux->sq_mux);
avio_closep(&s->pb);
avformat_free_context(s); for (int i = 0; i < of->nb_streams; i++)
av_dict_free(&of->opts); 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); 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) 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. * 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 * 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. * 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 * mobile-ffmpeg / ffmpeg-kit changes by Taner Sener
* *
* 09.2022 * 09.2022
@ -52,9 +60,11 @@
#include "libavutil/ffversion.h" #include "libavutil/ffversion.h"
#include <string.h> #include <string.h>
#include <math.h>
#include "libavformat/avformat.h" #include "libavformat/avformat.h"
#include "libavcodec/avcodec.h" #include "libavcodec/avcodec.h"
#include "libavutil/ambient_viewing_environment.h"
#include "libavutil/avassert.h" #include "libavutil/avassert.h"
#include "libavutil/avstring.h" #include "libavutil/avstring.h"
#include "libavutil/bprint.h" #include "libavutil/bprint.h"
@ -163,6 +173,8 @@ typedef struct ReadInterval {
__thread ReadInterval *read_intervals; __thread ReadInterval *read_intervals;
__thread int read_intervals_nb = 0; __thread int read_intervals_nb = 0;
__thread int find_stream_info = 1;
/* section structure definition */ /* section structure definition */
#define SECTION_MAX_NB_CHILDREN 10 #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, ...) static inline void writer_printf_printf(WriterContext *wctx, const char *fmt, ...)
{ {
va_list ap; va_list ap;
va_start(ap, fmt); va_start(ap, fmt);
av_vlog(NULL, AV_LOG_STDERR, fmt, ap); av_vlog(NULL, AV_LOG_STDERR, fmt, ap);
va_end(ap); va_end(ap);
@ -671,7 +684,7 @@ static int writer_open(WriterContext **wctx, const Writer *writer, const char *a
goto fail; 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) { 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", av_log(*wctx, AV_LOG_ERROR, "Failed to set option '%s' with value '%s' provided to writer context\n",
opt->key, opt->value); opt->key, opt->value);
@ -1907,12 +1920,14 @@ static void writer_register_all(void)
writer_print_string(w, k, pbuf.str, 0); \ writer_print_string(w, k, pbuf.str, 0); \
} while (0) } while (0)
#define print_list_fmt(k, f, n, ...) do { \ #define print_list_fmt(k, f, n, m, ...) do { \
av_bprint_clear(&pbuf); \ av_bprint_clear(&pbuf); \
for (int idx = 0; idx < n; idx++) { \ for (int idx = 0; idx < n; idx++) { \
if (idx > 0) \ for (int idx2 = 0; idx2 < m; idx2++) { \
av_bprint_chars(&pbuf, ' ', 1); \ if (idx > 0 || idx2 > 0) \
av_bprintf(&pbuf, f, __VA_ARGS__); \ av_bprint_chars(&pbuf, ' ', 1); \
av_bprintf(&pbuf, f, __VA_ARGS__); \
} \
} \ } \
writer_print_string(w, k, pbuf.str, 0); \ writer_print_string(w, k, pbuf.str, 0); \
} while (0) } while (0)
@ -1953,7 +1968,7 @@ static inline int show_tags(WriterContext *w, AVDictionary *tags, int section_id
return 0; return 0;
writer_print_section_header(w, section_id); 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) if ((ret = print_str_validate(tag->key, tag->value)) < 0)
break; break;
} }
@ -2023,7 +2038,7 @@ static void print_dovi_metadata(WriterContext *w, const AVDOVIMetadata *dovi)
const AVDOVIReshapingCurve *curve = &mapping->curves[c]; const AVDOVIReshapingCurve *curve = &mapping->curves[c];
writer_print_section_header(w, SECTION_ID_FRAME_SIDE_DATA_COMPONENT); 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); writer_print_section_header(w, SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST);
for (int i = 0; i < curve->num_pivots - 1; i++) { 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_str("mapping_idc_name", "polynomial");
print_int("poly_order", curve->poly_order[i]); print_int("poly_order", curve->poly_order[i]);
print_list_fmt("poly_coef", "%"PRIi64, print_list_fmt("poly_coef", "%"PRIi64,
curve->poly_order[i] + 1, curve->poly_order[i] + 1, 1,
curve->poly_coef[i][idx]); curve->poly_coef[i][idx]);
break; break;
case AV_DOVI_MAPPING_MMR: 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_order", curve->mmr_order[i]);
print_int("mmr_constant", curve->mmr_constant[i]); print_int("mmr_constant", curve->mmr_constant[i]);
print_list_fmt("mmr_coef", "%"PRIi64, print_list_fmt("mmr_coef", "%"PRIi64,
curve->mmr_order[i] * 7, curve->mmr_order[i], 7,
curve->mmr_coef[i][0][idx]); curve->mmr_coef[i][idx][idx2]);
break; break;
default: default:
print_str("mapping_idc_name", "unknown"); 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("dm_metadata_id", color->dm_metadata_id);
print_int("scene_refresh_flag", color->scene_refresh_flag); print_int("scene_refresh_flag", color->scene_refresh_flag);
print_list_fmt("ycc_to_rgb_matrix", "%d/%d", 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].num,
color->ycc_to_rgb_matrix[idx].den); color->ycc_to_rgb_matrix[idx].den);
print_list_fmt("ycc_to_rgb_offset", "%d/%d", 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].num,
color->ycc_to_rgb_offset[idx].den); color->ycc_to_rgb_offset[idx].den);
print_list_fmt("rgb_to_lms_matrix", "%d/%d", 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].num,
color->rgb_to_lms_matrix[idx].den); color->rgb_to_lms_matrix[idx].den);
print_int("signal_eotf", color->signal_eotf); 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, static void print_pkt_side_data(WriterContext *w,
AVCodecParameters *par, AVCodecParameters *par,
const AVPacketSideData *side_data, const AVPacketSideData *side_data,
@ -2293,8 +2319,11 @@ static void print_pkt_side_data(WriterContext *w,
writer_print_section_header(w, id_data); writer_print_section_header(w, id_data);
print_str("side_data_type", name ? name : "unknown"); print_str("side_data_type", name ? name : "unknown");
if (sd->type == AV_PKT_DATA_DISPLAYMATRIX && sd->size >= 9*4) { 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); 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) { } else if (sd->type == AV_PKT_DATA_STEREO3D) {
const AVStereo3D *stereo = (AVStereo3D *)sd->data; const AVStereo3D *stereo = (AVStereo3D *)sd->data;
print_str("type", av_stereo3d_type_name(stereo->type)); 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); print_val("size", pkt->size, unit_byte_str);
if (pkt->pos != -1) print_fmt ("pos", "%"PRId64, pkt->pos); if (pkt->pos != -1) print_fmt ("pos", "%"PRId64, pkt->pos);
else print_str_opt("pos", "N/A"); else print_str_opt("pos", "N/A");
print_fmt("flags", "%c%c", pkt->flags & AV_PKT_FLAG_KEY ? 'K' : '_', 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_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) { if (pkt->side_data_elems) {
size_t size; size_t size;
@ -2526,9 +2559,6 @@ static void show_packet(WriterContext *w, InputFile *ifile, AVPacket *pkt, int p
SECTION_ID_PACKET_SIDE_DATA); 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); writer_print_section_footer(w);
av_bprint_finalize(&pbuf, NULL); 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_time("pkt_dts_time", frame->pkt_dts, &stream->time_base);
print_ts ("best_effort_timestamp", frame->best_effort_timestamp); print_ts ("best_effort_timestamp", frame->best_effort_timestamp);
print_time("best_effort_timestamp_time", frame->best_effort_timestamp, &stream->time_base); 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_ts ("pkt_duration", frame->pkt_duration);
print_duration_time("pkt_duration_time", frame->pkt_duration, &stream->time_base); 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); if (frame->pkt_pos != -1) print_fmt ("pkt_pos", "%"PRId64, frame->pkt_pos);
else print_str_opt("pkt_pos", "N/A"); else print_str_opt("pkt_pos", "N/A");
if (frame->pkt_size != -1) print_val ("pkt_size", frame->pkt_size, unit_byte_str); 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_str_opt("sample_aspect_ratio", "N/A");
} }
print_fmt("pict_type", "%c", av_get_picture_type_char(frame->pict_type)); 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("coded_picture_number", frame->coded_picture_number);
print_int("display_picture_number", frame->display_picture_number); print_int("display_picture_number", frame->display_picture_number);
)
#endif
print_int("interlaced_frame", frame->interlaced_frame); print_int("interlaced_frame", frame->interlaced_frame);
print_int("top_field_first", frame->top_field_first); print_int("top_field_first", frame->top_field_first);
print_int("repeat_pict", frame->repeat_pict); 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); name = av_frame_side_data_name(sd->type);
print_str("side_data_type", name ? name : "unknown"); print_str("side_data_type", name ? name : "unknown");
if (sd->type == AV_FRAME_DATA_DISPLAYMATRIX && sd->size >= 9*4) { 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); 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) { } else if (sd->type == AV_FRAME_DATA_AFD && sd->size > 0) {
print_int("active_format", *sd->data); print_int("active_format", *sd->data);
} else if (sd->type == AV_FRAME_DATA_GOP_TIMECODE && sd->size >= 8) { } 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) { } else if (sd->type == AV_FRAME_DATA_DYNAMIC_HDR_VIVID) {
AVDynamicHDRVivid *metadata = (AVDynamicHDRVivid *)sd->data; AVDynamicHDRVivid *metadata = (AVDynamicHDRVivid *)sd->data;
print_dynamic_hdr_vivid(w, metadata); 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); 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, static av_always_inline int process_frame(WriterContext *w,
InputFile *ifile, InputFile *ifile,
AVFrame *frame, AVPacket *pkt, AVFrame *frame, const AVPacket *pkt,
int *packet_new) int *packet_new)
{ {
AVFormatContext *fmt_ctx = ifile->fmt_ctx; 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]) { if (selected_streams[pkt->stream_index]) {
AVRational tb = ifile->streams[pkt->stream_index].st->time_base; 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) if (pts != AV_NOPTS_VALUE)
*cur_ts = av_rescale_q(pkt->pts, tb, AV_TIME_BASE_Q); *cur_ts = av_rescale_q(pts, tb, AV_TIME_BASE_Q);
if (!has_start && *cur_ts != AV_NOPTS_VALUE) { if (!has_start && *cur_ts != AV_NOPTS_VALUE) {
start = *cur_ts; start = *cur_ts;
@ -2894,7 +2941,7 @@ static int read_interval_packets(WriterContext *w, InputFile *ifile,
} }
av_packet_unref(pkt); av_packet_unref(pkt);
//Flush remaining frames that are cached in the decoder //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; pkt->stream_index = i;
if (do_read_frames) { if (do_read_frames) {
while (process_frame(w, ifile, frame, pkt, &(int){1}) > 0); 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("bits_per_sample", av_get_bits_per_sample(par->codec_id));
print_int("initial_padding", par->initial_padding);
break; break;
case AVMEDIA_TYPE_SUBTITLE: case AVMEDIA_TYPE_SUBTITLE:
@ -3278,15 +3327,9 @@ static int show_format(WriterContext *w, InputFile *ifile)
static void show_error(WriterContext *w, int err) 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); writer_print_section_header(w, SECTION_ID_ERROR);
print_int("code", err); print_int("code", err);
print_str("string", errbuf_ptr); print_str("string", av_err2str(err));
writer_print_section_footer(w); 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; int scan_all_pmts_set = 0;
fmt_ctx = avformat_alloc_context(); fmt_ctx = avformat_alloc_context();
if (!fmt_ctx) { if (!fmt_ctx)
print_error(filename, AVERROR(ENOMEM)); report_and_exit(AVERROR(ENOMEM));
exit_program(1);
}
if (!av_dict_get(format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE)) { 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); 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; ifile->fmt_ctx = fmt_ctx;
if (scan_all_pmts_set) if (scan_all_pmts_set)
av_dict_set(&format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE); 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); av_log(NULL, AV_LOG_WARNING, "Option %s skipped - not known to demuxer.\n", t->key);
if (find_stream_info) { if (find_stream_info) {
@ -3718,7 +3759,7 @@ static void opt_input_file(void *optctx, const char *arg)
exit_program(1); exit_program(1);
} }
if (!strcmp(arg, "-")) if (!strcmp(arg, "-"))
arg = "pipe:"; arg = "fd:";
input_filename = arg; input_filename = arg;
} }
@ -3737,7 +3778,7 @@ static void opt_output_file(void *optctx, const char *arg)
exit_program(1); exit_program(1);
} }
if (!strcmp(arg, "-")) if (!strcmp(arg, "-"))
arg = "pipe:"; arg = "fd:";
output_filename = arg; 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. * 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. * 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 * 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. * 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 * ffmpeg-kit changes by Taner Sener
* *
* 09.2022 * 09.2022
@ -88,7 +95,7 @@ static __thread FILE *report_file = NULL;
static __thread int report_file_level = AV_LOG_DEBUG; 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 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; extern __thread char *program_name;
int show_license(void *optctx, const char *opt, const char *arg) int show_license(void *optctx, const char *opt, const char *arg)

@ -1,6 +1,6 @@
/* /*
* Option handlers shared between the tools. * 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. * 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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: Data Structures</title> <title>FFmpegKit Android API: Data Structures</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="menudata.js"></script> <script type="text/javascript" src="menudata.js"></script>
@ -57,9 +57,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
<div class="header"> <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="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"> <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_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_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_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_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="d3/db7/struct_flat_context.html" target="_self">FlatContext</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_"><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_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="da/d4f/struct_i_n_i_context.html" target="_self">INIContext</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_"><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_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="d7/d0c/struct_input_filter.html" target="_self">InputFilter</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_"><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_" 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_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_" 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_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="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_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_" 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_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="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_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_" 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_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="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_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_" 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_"><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_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="db/db5/struct_option_parse_context.html" target="_self">OptionParseContext</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_"><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_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="de/df2/struct_output_file.html" target="_self">OutputFile</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_"><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_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="db/dde/struct_output_stream.html" target="_self">OutputStream</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_"><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_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="d9/d11/structsection.html" target="_self">section</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_"><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_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="db/d60/struct_stream_map.html" target="_self">StreamMap</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_"><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_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="d6/dff/struct_writer.html" target="_self">Writer</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_"><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_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="d7/db2/struct_x_m_l_context.html" target="_self">XMLContext</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> </table>
</div><!-- directory --> </div><!-- directory -->
</div><!-- contents --> </div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: Data Structure Index</title> <title>FFmpegKit Android API: Data Structure Index</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="menudata.js"></script> <script type="text/javascript" src="menudata.js"></script>
@ -57,16 +57,23 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
<div class="header"> <div class="header">
<div class="headertitle"><div class="title">Data Structure Index</div></div> <div class="headertitle"><div class="title">Data Structure Index</div></div>
</div><!--header--> </div><!--header-->
<div class="contents"> <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"> <div class="classindex">
<dl class="classindex even"> <dl class="classindex even">
<dt class="alphachar"><a id="letter_A" name="letter_A">A</a></dt> <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> <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"> <dl class="classindex odd">
<dt class="alphachar"><a id="letter_D" name="letter_D">D</a></dt> <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"> <dl class="classindex even">
<dt class="alphachar"><a id="letter_F" name="letter_F">F</a></dt> <dt class="alphachar"><a id="letter_E" name="letter_E">E</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> <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"> <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> <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> <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> <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> <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> <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> <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"> <dl class="classindex even">
<dt class="alphachar"><a id="letter_L" name="letter_L">L</a></dt> <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"> <dl class="classindex odd">
<dt class="alphachar"><a id="letter_O" name="letter_O">O</a></dt> <dt class="alphachar"><a id="letter_M" name="letter_M">M</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> <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"> <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> <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> <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> <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"> <dl class="classindex even">
<dt class="alphachar"><a id="letter_U" name="letter_U">U</a></dt> <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> <dd><a class="el" href="d9/d6d/structunit__value.html">unit_value</a></dd></dl>
@ -117,7 +136,7 @@ $(function() {
</div><!-- contents --> </div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: ffmpegkit_abidetect.h File Reference</title> <title>FFmpegKit Android API: ffmpegkit_abidetect.h File Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/> <link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
</div><!-- top --> </div><!-- top -->
@ -102,7 +109,7 @@ Functions</h2></td></tr>
</table> </table>
<h2 class="groupheader">Macro Definition Documentation</h2> <h2 class="groupheader">Macro Definition Documentation</h2>
<a id="a8542ed76f69cc1f6905ec045deb67b19" name="a8542ed76f69cc1f6905ec045deb67b19"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -112,14 +119,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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> <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>
</div> </div>
<a id="aecf047197c8d184994bd8391c89dafd9" name="aecf047197c8d184994bd8391c89dafd9"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -129,14 +136,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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> <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>
</div> </div>
<a id="af4bd943711a852348c6fe7a850c68d9c" name="af4bd943711a852348c6fe7a850c68d9c"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -146,14 +153,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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> <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>
</div> </div>
<a id="aa0528bb977fb058f35088a123f024040" name="aa0528bb977fb058f35088a123f024040"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -163,14 +170,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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> <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>
</div> </div>
<a id="ae1ac408cde1fef8015e817132c82f90f" name="ae1ac408cde1fef8015e817132c82f90f"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -180,14 +187,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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> <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>
</div> </div>
<a id="aa8b590581b911e09a91165e1bfe1af4e" name="aa8b590581b911e09a91165e1bfe1af4e"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -197,14 +204,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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> <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>
</div> </div>
<a id="a651b92d66b0514569b6c1e70ab56ccbd" name="a651b92d66b0514569b6c1e70ab56ccbd"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -214,7 +221,7 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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> <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> </div>
<h2 class="groupheader">Function Documentation</h2> <h2 class="groupheader">Function Documentation</h2>
<a id="ad6df138dfa7f0139d3bc00a128a3349f" name="ad6df138dfa7f0139d3bc00a128a3349f"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -246,7 +253,7 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </div><div class="memdoc">
<p >Returns loaded ABI name.</p> <p>Returns loaded ABI name.</p>
<dl class="params"><dt>Parameters</dt><dd> <dl class="params"><dt>Parameters</dt><dd>
<table class="params"> <table class="params">
<tr><td class="paramname">env</td><td>pointer to native method interface </td></tr> <tr><td class="paramname">env</td><td>pointer to native method interface </td></tr>
@ -261,7 +268,7 @@ Functions</h2></td></tr>
</div> </div>
</div> </div>
<a id="a7942b894172687b98c86668b49a37356" name="a7942b894172687b98c86668b49a37356"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -285,7 +292,7 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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> <dl class="params"><dt>Parameters</dt><dd>
<table class="params"> <table class="params">
<tr><td class="paramname">env</td><td>pointer to native method interface </td></tr> <tr><td class="paramname">env</td><td>pointer to native method interface </td></tr>
@ -300,7 +307,7 @@ Functions</h2></td></tr>
</div> </div>
</div> </div>
<a id="aae17a92df44b12fe7e39c93f88c3e6be" name="aae17a92df44b12fe7e39c93f88c3e6be"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -324,7 +331,7 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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> <dl class="params"><dt>Parameters</dt><dd>
<table class="params"> <table class="params">
<tr><td class="paramname">env</td><td>pointer to native method interface </td></tr> <tr><td class="paramname">env</td><td>pointer to native method interface </td></tr>
@ -339,7 +346,7 @@ Functions</h2></td></tr>
</div> </div>
</div> </div>
<a id="a76872252b93761eeef4e67b9995e61b1" name="a76872252b93761eeef4e67b9995e61b1"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -363,8 +370,8 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </div><div class="memdoc">
<p >Class: com_arthenica_ffmpegkit_AbiDetect Method: isNativeLTSBuild Signature: ()Z</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> <p>Returns whether FFmpegKit release is a long term release or not.</p>
<dl class="params"><dt>Parameters</dt><dd> <dl class="params"><dt>Parameters</dt><dd>
<table class="params"> <table class="params">
<tr><td class="paramname">env</td><td>pointer to native method interface </td></tr> <tr><td class="paramname">env</td><td>pointer to native method interface </td></tr>
@ -381,7 +388,7 @@ Functions</h2></td></tr>
</div><!-- contents --> </div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: ffmpegkit_abidetect.h Source File</title> <title>FFmpegKit Android API: ffmpegkit_abidetect.h Source File</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/> <link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menudata.js"></script>
@ -57,9 +57,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
<div class="header"> <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="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="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_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_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_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_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_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 --> </div><!-- fragment --></div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: OutputFilter Struct Reference</title> <title>FFmpegKit Android API: OutputFilter Struct Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/> <link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
</div><!-- top --> </div><!-- top -->
@ -106,10 +113,10 @@ Data Fields</h2></td></tr>
</table> </table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"> <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> </div><h2 class="groupheader">Field Documentation</h2>
<a id="aaf75618d5c17545f762fa3af3f439340" name="aaf75618d5c17545f762fa3af3f439340"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -120,12 +127,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a9ff26552ee22fefa55f8194768247a5c" name="a9ff26552ee22fefa55f8194768247a5c"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -136,12 +143,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a52b3bac2e051f48e5eabbff6a227881c" name="a52b3bac2e051f48e5eabbff6a227881c"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -152,12 +159,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="aeba350050d2035d755254154e6551c49" name="aeba350050d2035d755254154e6551c49"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -168,12 +175,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a8bef5b1f7e6b00ab4128cfcabccd3c50" name="a8bef5b1f7e6b00ab4128cfcabccd3c50"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -184,12 +191,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="ad45013a89f85087d03166652a94d1453" name="ad45013a89f85087d03166652a94d1453"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -200,12 +207,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="aa1e455271d4a952bc771b9951beded8e" name="aa1e455271d4a952bc771b9951beded8e"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -216,12 +223,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="aaf9223843b6d814783f74c85b38de080" name="aaf9223843b6d814783f74c85b38de080"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -232,12 +239,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a7713667d07c3f7605e6dd24f0ca19940" name="a7713667d07c3f7605e6dd24f0ca19940"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -248,12 +255,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a2d283eee3e140f822b5eb381890ba035" name="a2d283eee3e140f822b5eb381890ba035"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -264,12 +271,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a1571021ae59382241c925f7ee613cd7d" name="a1571021ae59382241c925f7ee613cd7d"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -280,12 +287,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="ab0be1ec413ca98912667f1bf76fd2588" name="ab0be1ec413ca98912667f1bf76fd2588"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -296,12 +303,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="aca41b2f858937cc98ab36b19e50f9251" name="aca41b2f858937cc98ab36b19e50f9251"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -312,12 +319,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="aed4c46a5df26ff71f3f718a0056af294" name="aed4c46a5df26ff71f3f718a0056af294"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -328,12 +335,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a0a621d752f3ab33e67f0a8f22bee4118" name="a0a621d752f3ab33e67f0a8f22bee4118"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -344,7 +351,7 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
@ -354,7 +361,7 @@ Data Fields</h2></td></tr>
</div><!-- contents --> </div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: fftools_fopen_utf8.h File Reference</title> <title>FFmpegKit Android API: fftools_fopen_utf8.h File Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/> <link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
</div><!-- top --> </div><!-- top -->
@ -78,7 +85,7 @@ Functions</h2></td></tr>
</table> </table>
<h2 class="groupheader">Function Documentation</h2> <h2 class="groupheader">Function Documentation</h2>
<a id="a3eed39c4bd5135d3629a46f9f2c65b4b" name="a3eed39c4bd5135d3629a46f9f2c65b4b"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -118,7 +125,7 @@ Functions</h2></td></tr>
</div><!-- contents --> </div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: fftools_fopen_utf8.h Source File</title> <title>FFmpegKit Android API: fftools_fopen_utf8.h Source File</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/> <link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menudata.js"></script>
@ -57,9 +57,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
<div class="header"> <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="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="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="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 --> </div><!-- fragment --></div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: WriterContext Struct Reference</title> <title>FFmpegKit Android API: WriterContext Struct Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/> <link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
</div><!-- top --> </div><!-- top -->
@ -72,13 +79,13 @@ $(function() {
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a>
Data Fields</h2></td></tr> 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="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="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="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="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="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="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="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> <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="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="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="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="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="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="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="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="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="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="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="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="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="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> <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="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="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="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="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="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="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="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="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="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> <tr class="separator:ae4d434ae00d70b9f03be447b7c8fc02b"><td class="memSeparator" colspan="2">&#160;</td></tr>
@ -125,10 +132,10 @@ Data Fields</h2></td></tr>
</table> </table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"> <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> </div><h2 class="groupheader">Field Documentation</h2>
<a id="a74ab2aea4c4a559594862656adfbf607" name="a74ab2aea4c4a559594862656adfbf607"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -141,12 +148,12 @@ Data Fields</h2></td></tr>
<p>the I/O context used to write </p> <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>
</div> </div>
<a id="a9a134275e24f0ed7ceb2108e144b031d" name="a9a134275e24f0ed7ceb2108e144b031d"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -159,12 +166,12 @@ Data Fields</h2></td></tr>
<p>class of the writer </p> <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>
</div> </div>
<a id="a70f4367919173df339905042a73df0f4" name="a70f4367919173df339905042a73df0f4"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -177,12 +184,12 @@ Data Fields</h2></td></tr>
<p>current level, starting from 0 </p> <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>
</div> </div>
<a id="a366a8bd11cf898f02beca2f14478ed97" name="a366a8bd11cf898f02beca2f14478ed97"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -195,12 +202,12 @@ Data Fields</h2></td></tr>
<p>name of this writer instance </p> <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>
</div> </div>
<a id="a146664adf19a884f214fe3729343dc1a" name="a146664adf19a884f214fe3729343dc1a"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -210,14 +217,14 @@ Data Fields</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a0a6292cb0341b8c989f463d17c2b1c49" name="a0a6292cb0341b8c989f463d17c2b1c49"></a> <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="memitem">
<div class="memproto"> <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>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>
</div> </div>
<a id="a735c05fb40aac83eeaa72ec9f3bd9c8d" name="a735c05fb40aac83eeaa72ec9f3bd9c8d"></a> <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="memitem">
<div class="memproto"> <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>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>
</div> </div>
<a id="a70cdd0ee0389abba9865de653aac4de1" name="a70cdd0ee0389abba9865de653aac4de1"></a> <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="memitem">
<div class="memproto"> <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>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>
</div> </div>
<a id="a802ea030a8d391905498183a514a7e0c" name="a802ea030a8d391905498183a514a7e0c"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -284,12 +291,12 @@ Data Fields</h2></td></tr>
<p>number of sections </p> <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>
</div> </div>
<a id="a5b071322a7adc4478ba1c381bdc68202" name="a5b071322a7adc4478ba1c381bdc68202"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -302,12 +309,12 @@ Data Fields</h2></td></tr>
<p>private data for use by the filter </p> <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>
</div> </div>
<a id="a1a3764eca79f01c7935f6b00fb703ae9" name="a1a3764eca79f01c7935f6b00fb703ae9"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -317,14 +324,14 @@ Data Fields</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a5c4e2da0240ebfea6358065cfc923e4e" name="a5c4e2da0240ebfea6358065cfc923e4e"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -334,14 +341,14 @@ Data Fields</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="aa7cd84605a2d2d861d6540e07fa8dd73" name="aa7cd84605a2d2d861d6540e07fa8dd73"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -354,12 +361,12 @@ Data Fields</h2></td></tr>
<p>array containing all sections </p> <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>
</div> </div>
<a id="ae4d434ae00d70b9f03be447b7c8fc02b" name="ae4d434ae00d70b9f03be447b7c8fc02b"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -370,12 +377,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a347ccaf7bdb45104accb665cab1b093f" name="a347ccaf7bdb45104accb665cab1b093f"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -386,12 +393,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="ac2b79828ee0384f432182d1a03bf0083" name="ac2b79828ee0384f432182d1a03bf0083"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -402,12 +409,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="ae5665d3128f57b9024da5d5d029c83a4" name="ae5665d3128f57b9024da5d5d029c83a4"></a> <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="memitem">
<div class="memproto"> <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>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>
</div> </div>
<a id="a76ac129335e9ad7a46a27d244b86d330" name="a76ac129335e9ad7a46a27d244b86d330"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -436,12 +443,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a2fb73f8a9497e6bcc971cfacc81c5559" name="a2fb73f8a9497e6bcc971cfacc81c5559"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -452,12 +459,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a678b264a45a1e75928df93fcbe4f1b6d" name="a678b264a45a1e75928df93fcbe4f1b6d"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -468,7 +475,7 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
@ -478,7 +485,7 @@ Data Fields</h2></td></tr>
</div><!-- contents --> </div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: fftools_ffmpeg_hw.c File Reference</title> <title>FFmpegKit Android API: fftools_ffmpeg_hw.c File Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/> <link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
</div><!-- top --> </div><!-- top -->
@ -110,7 +117,7 @@ Variables</h2></td></tr>
</table> </table>
<h2 class="groupheader">Function Documentation</h2> <h2 class="groupheader">Function Documentation</h2>
<a id="ac41be9b83ff337fa57579c8b804aad49" name="ac41be9b83ff337fa57579c8b804aad49"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -133,12 +140,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="afd7a9c296e273f36897b0f4607b896a0" name="afd7a9c296e273f36897b0f4607b896a0"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -161,12 +168,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a7b352c0afc44da703891d7538bbcf737" name="a7b352c0afc44da703891d7538bbcf737"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -181,12 +188,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a539c1a0fbb455ec027e6ecbabba11d3c" name="a539c1a0fbb455ec027e6ecbabba11d3c"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -201,12 +208,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a73e64183d7f408877039a977b84ab64d" name="a73e64183d7f408877039a977b84ab64d"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -229,12 +236,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a3fdd5667b2f22f69baa2f711b13537fb" name="a3fdd5667b2f22f69baa2f711b13537fb"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -259,12 +266,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="ac2df78054133e8e90276b1d12af466da" name="ac2df78054133e8e90276b1d12af466da"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -303,12 +310,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="aae07987d3556e3507f0bb2e6c451ec2a" name="aae07987d3556e3507f0bb2e6c451ec2a"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -331,12 +338,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a77e8d12a4bdb9110a2d815b9aa5f8d02" name="a77e8d12a4bdb9110a2d815b9aa5f8d02"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -351,12 +358,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a01128ebf95f6a3b130f446b13b171c52" name="a01128ebf95f6a3b130f446b13b171c52"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -371,12 +378,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a801831a4517a8db980bbf18c6db58cad" name="a801831a4517a8db980bbf18c6db58cad"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -391,12 +398,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a518f7a9a1bd1b5544a39fdbd1d925663" name="a518f7a9a1bd1b5544a39fdbd1d925663"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -411,12 +418,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a5a881e2fd908765c2df11400a6c0c7d9" name="a5a881e2fd908765c2df11400a6c0c7d9"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -449,13 +456,13 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<h2 class="groupheader">Variable Documentation</h2> <h2 class="groupheader">Variable Documentation</h2>
<a id="ad66ab6371d9721a18af13707d8b2735c" name="ad66ab6371d9721a18af13707d8b2735c"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -466,12 +473,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="acea1bac2a399307791945b15467b1f75" name="acea1bac2a399307791945b15467b1f75"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -482,14 +489,14 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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> </div>
</div><!-- contents --> </div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: ffprobekit.c File Reference</title> <title>FFmpegKit Android API: ffprobekit.c File Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/> <link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
</div><!-- top --> </div><!-- top -->
@ -94,7 +101,7 @@ Variables</h2></td></tr>
</table> </table>
<h2 class="groupheader">Function Documentation</h2> <h2 class="groupheader">Function Documentation</h2>
<a id="a640b39ead30c29ab4caac1fc28140c15" name="a640b39ead30c29ab4caac1fc28140c15"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -108,7 +115,7 @@ Variables</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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> <dl class="params"><dt>Parameters</dt><dd>
<table class="params"> <table class="params">
<tr><td class="paramname">id</td><td>session id </td></tr> <tr><td class="paramname">id</td><td>session id </td></tr>
@ -121,7 +128,7 @@ Variables</h2></td></tr>
</div> </div>
</div> </div>
<a id="a4a459d7e4c3cfbf3e3d38eba042a8d53" name="a4a459d7e4c3cfbf3e3d38eba042a8d53"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -145,14 +152,14 @@ Variables</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a1049ebb2099274feadd0cbf165e9c8ef" name="a1049ebb2099274feadd0cbf165e9c8ef"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -188,7 +195,7 @@ Variables</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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> <dl class="params"><dt>Parameters</dt><dd>
<table class="params"> <table class="params">
<tr><td class="paramname">env</td><td>pointer to native method interface </td></tr> <tr><td class="paramname">env</td><td>pointer to native method interface </td></tr>
@ -205,7 +212,7 @@ Variables</h2></td></tr>
</div> </div>
</div> </div>
<a id="a5f236f20079b407567c62072710656b5" name="a5f236f20079b407567c62072710656b5"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -219,7 +226,7 @@ Variables</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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> <dl class="params"><dt>Parameters</dt><dd>
<table class="params"> <table class="params">
<tr><td class="paramname">id</td><td>session id </td></tr> <tr><td class="paramname">id</td><td>session id </td></tr>
@ -232,7 +239,7 @@ Variables</h2></td></tr>
</div> </div>
</div> </div>
<a id="ab2b13505798c32f04fd3334e399f3a2f" name="ab2b13505798c32f04fd3334e399f3a2f"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -246,7 +253,7 @@ Variables</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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> <dl class="params"><dt>Parameters</dt><dd>
<table class="params"> <table class="params">
<tr><td class="paramname">id</td><td>session id </td></tr> <tr><td class="paramname">id</td><td>session id </td></tr>
@ -260,7 +267,7 @@ Variables</h2></td></tr>
</div> </div>
<h2 class="groupheader">Variable Documentation</h2> <h2 class="groupheader">Variable Documentation</h2>
<a id="aefb40225eb03b1329a1fe7931c312eb8" name="aefb40225eb03b1329a1fe7931c312eb8"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -278,14 +285,14 @@ Variables</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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> <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>
</div> </div>
<a id="aab6fe9e0975fdbf6e289bf726424a6e0" name="aab6fe9e0975fdbf6e289bf726424a6e0"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -303,7 +310,7 @@ Variables</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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> <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 --> </div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: ffprobekit.c Source File</title> <title>FFmpegKit Android API: ffprobekit.c Source File</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/> <link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menudata.js"></script>
@ -57,9 +57,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
<div class="header"> <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="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="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"><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="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_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_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_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_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_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_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="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 --> </div><!-- fragment --></div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: fftools_ffmpeg_filter.c File Reference</title> <title>FFmpegKit Android API: fftools_ffmpeg_filter.c File Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/> <link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
</div><!-- top --> </div><!-- top -->
@ -86,8 +93,8 @@ Macros</h2></td></tr>
Functions</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="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="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="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:a46fd7d3ff0e63394a14c329d0249e0d4"><td class="memSeparator" colspan="2">&#160;</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="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="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> <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="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="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="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="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="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> <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> </table>
<h2 class="groupheader">Macro Definition Documentation</h2> <h2 class="groupheader">Macro Definition Documentation</h2>
<a id="aba8e85f08c2269c623074c81f0e428d6" name="aba8e85f08c2269c623074c81f0e428d6"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -188,11 +203,11 @@ Variables</h2></td></tr>
<div class="line"> avfilter_get_by_name(filter_name), \</div> <div class="line"> avfilter_get_by_name(filter_name), \</div>
<div class="line"> filter_name, arg, NULL, fg-&gt;graph); \</div> <div class="line"> filter_name, arg, NULL, fg-&gt;graph); \</div>
<div class="line"> if (ret &lt; 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"> \</div>
<div class="line"> ret = avfilter_link(last_filter, pad_idx, filt_ctx, 0); \</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"> 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"> \</div>
<div class="line"> last_filter = filt_ctx; \</div> <div class="line"> last_filter = filt_ctx; \</div>
<div class="line"> pad_idx = 0; \</div> <div class="line"> pad_idx = 0; \</div>
@ -201,7 +216,7 @@ Variables</h2></td></tr>
</div> </div>
</div> </div>
<a id="a9cf53e21bfb4178eefcce6b7dd20eca2" name="a9cf53e21bfb4178eefcce6b7dd20eca2"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -243,11 +258,11 @@ Variables</h2></td></tr>
<div class="line"> avfilter_get_by_name(filter_name), \</div> <div class="line"> avfilter_get_by_name(filter_name), \</div>
<div class="line"> name, arg, NULL, fg-&gt;graph); \</div> <div class="line"> name, arg, NULL, fg-&gt;graph); \</div>
<div class="line"> if (ret &lt; 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"> \</div>
<div class="line"> ret = avfilter_link(last_filter, 0, filt_ctx, 0); \</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"> 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"> \</div>
<div class="line"> last_filter = filt_ctx; \</div> <div class="line"> last_filter = filt_ctx; \</div>
<div class="line">} <span class="keywordflow">while</span> (0)</div> <div class="line">} <span class="keywordflow">while</span> (0)</div>
@ -255,7 +270,7 @@ Variables</h2></td></tr>
</div> </div>
</div> </div>
<a id="adf70c3c13bfce09e37627128b7603633" name="adf70c3c13bfce09e37627128b7603633"></a> <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="memitem">
<div class="memproto"> <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> <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">{ \</div>
<div class="line"> if (ofilter-&gt;var == none &amp;&amp; !ofilter-&gt;supported_list) \</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"> av_bprintf(bprint, #name <span class="stringliteral">&quot;=&quot;</span>); \</div>
<div class="line"> if (ofilter-&gt;var != none) { \</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"> av_bprintf(bprint, printf_format, get_name(ofilter-&gt;var)); \</div>
<div class="line"> } <span class="keywordflow">else</span> { \</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"> \</div>
<div class="line"> for (p = ofilter-&gt;supported_list; *p != none; p++) { \</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> <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"> } \</div>
<div class="line"> av_bprint_chars(bprint, <span class="charliteral">&#39;:&#39;</span>, 1); \</div> <div class="line"> av_bprint_chars(bprint, <span class="charliteral">&#39;:&#39;</span>, 1); \</div>
<div class="line">}</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 --> </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>
</div> </div>
<h2 class="groupheader">Function Documentation</h2> <h2 class="groupheader">Function Documentation</h2>
<a id="ad7582860b219ad64ec003d5924747d20" name="ad7582860b219ad64ec003d5924747d20"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -350,12 +365,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="af90a0015e3c8a69c63f294292701d6d9" name="af90a0015e3c8a69c63f294292701d6d9"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -388,12 +403,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="adf20b1ffdd53d7fe610efc191764035d" name="adf20b1ffdd53d7fe610efc191764035d"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -426,12 +441,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a46fd7d3ff0e63394a14c329d0249e0d4" name="a46fd7d3ff0e63394a14c329d0249e0d4"></a> <a id="a8b677b54c3fc1c7b57a6115bb5eab079" name="a8b677b54c3fc1c7b57a6115bb5eab079"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a46fd7d3ff0e63394a14c329d0249e0d4">&#9670;&nbsp;</a></span>choose_pixel_fmt()</h2> <h2 class="memtitle"><span class="permalink"><a href="#a8b677b54c3fc1c7b57a6115bb5eab079">&#9670;&#160;</a></span>choose_pixel_fmt()</h2>
<div class="memitem"> <div class="memitem">
<div class="memproto"> <div class="memproto">
@ -439,26 +454,20 @@ Variables</h2></td></tr>
<tr> <tr>
<td class="memname">enum AVPixelFormat choose_pixel_fmt </td> <td class="memname">enum AVPixelFormat choose_pixel_fmt </td>
<td>(</td> <td>(</td>
<td class="paramtype">AVStream *&#160;</td> <td class="paramtype">const AVCodec *&#160;</td>
<td class="paramname"><em>st</em>, </td> <td class="paramname"><em>codec</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">AVCodecContext *&#160;</td>
<td class="paramname"><em>enc_ctx</em>, </td>
</tr> </tr>
<tr> <tr>
<td class="paramkey"></td> <td class="paramkey"></td>
<td></td> <td></td>
<td class="paramtype">const AVCodec *&#160;</td> <td class="paramtype">enum AVPixelFormat&#160;</td>
<td class="paramname"><em>codec</em>, </td> <td class="paramname"><em>target</em>, </td>
</tr> </tr>
<tr> <tr>
<td class="paramkey"></td> <td class="paramkey"></td>
<td></td> <td></td>
<td class="paramtype">enum AVPixelFormat&#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>target</em>&#160;</td> <td class="paramname"><em>strict_std_compliance</em>&#160;</td>
</tr> </tr>
<tr> <tr>
<td></td> <td></td>
@ -468,12 +477,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a027d310ab49f2b105fc3b980a6b6c340" name="a027d310ab49f2b105fc3b980a6b6c340"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -496,12 +505,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="adfc4727f627c5abd0aa843206d046ec6" name="adfc4727f627c5abd0aa843206d046ec6"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -516,12 +525,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="abd040cc1f24edd0ee72c1bdfaa5599c2" name="abd040cc1f24edd0ee72c1bdfaa5599c2"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -560,12 +569,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a8866c5d369968e1f79743e44ad4b8169" name="a8866c5d369968e1f79743e44ad4b8169"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -604,12 +613,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a9f383c04c76d00cb7fbe0c561fc54aba" name="a9f383c04c76d00cb7fbe0c561fc54aba"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -648,12 +657,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a57f643dc94cbbbb752e2943a7457a668" name="a57f643dc94cbbbb752e2943a7457a668"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -692,12 +701,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a045cee5da7d7a2926a5351a4938ef056" name="a045cee5da7d7a2926a5351a4938ef056"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -728,12 +737,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a1aff0805d8ea5d89a1dbf1fb1e460113" name="a1aff0805d8ea5d89a1dbf1fb1e460113"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -772,12 +781,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="aac5586382c09d11ae21736fae565e52f" name="aac5586382c09d11ae21736fae565e52f"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -835,7 +844,7 @@ Variables</h2></td></tr>
</div> </div>
</div> </div>
<a id="aac51a809083360b36c142d55f9bb2f7b" name="aac51a809083360b36c142d55f9bb2f7b"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -874,12 +883,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a7157960a2ffbb1abceac96cefb13da43" name="a7157960a2ffbb1abceac96cefb13da43"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -902,12 +911,56 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="ad60a50ce02efbab762effbbdd7eda05e" name="ad60a50ce02efbab762effbbdd7eda05e"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -922,12 +975,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a27d07d834af2ac1187665f6cae829b66" name="a27d07d834af2ac1187665f6cae829b66"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -960,12 +1013,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="ac281a0a708b333e9a15963d70a069b3c" name="ac281a0a708b333e9a15963d70a069b3c"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -988,12 +1041,90 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a0e8b6e753bb0f299b554d18f3589944a" name="a0e8b6e753bb0f299b554d18f3589944a"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -1018,12 +1149,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="afdeaca7898e15c0cb645228fd5bb9184" name="afdeaca7898e15c0cb645228fd5bb9184"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -1038,12 +1169,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a68aafc55c81956dab85081fbdc12dec6" name="a68aafc55c81956dab85081fbdc12dec6"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -1076,12 +1207,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a82f6df78dc4d5a93f9708b27f16de2b5" name="a82f6df78dc4d5a93f9708b27f16de2b5"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -1106,12 +1237,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="add10aa9fae87dc2259bc821b29dee0f8" name="add10aa9fae87dc2259bc821b29dee0f8"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -1156,12 +1287,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a9464282dd90b2de622c38126485d1a80" name="a9464282dd90b2de622c38126485d1a80"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -1212,12 +1343,56 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a175b3d698e81a2781fddebdbf7209d8f" name="a175b3d698e81a2781fddebdbf7209d8f"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -1250,13 +1425,13 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<h2 class="groupheader">Variable Documentation</h2> <h2 class="groupheader">Variable Documentation</h2>
<a id="a1aabac6d068eef6a7bad3fdf50a05cc8" name="a1aabac6d068eef6a7bad3fdf50a05cc8"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -1267,12 +1442,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a61569f2965b7a369eb10b6d75d410d11" name="a61569f2965b7a369eb10b6d75d410d11"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -1283,12 +1458,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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> </div>
<a id="a9feef5270e0e54f103868362df0cd27a" name="a9feef5270e0e54f103868362df0cd27a"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -1299,12 +1474,12 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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> </div>
<a id="a12ee30995b3ac94a573f01870d1289e8" name="a12ee30995b3ac94a573f01870d1289e8"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -1315,14 +1490,14 @@ Variables</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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> </div>
</div><!-- contents --> </div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: fftools_opt_common.h File Reference</title> <title>FFmpegKit Android API: fftools_opt_common.h File Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/> <link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
</div><!-- top --> </div><!-- top -->
@ -126,7 +133,7 @@ Functions</h2></td></tr>
</table> </table>
<h2 class="groupheader">Function Documentation</h2> <h2 class="groupheader">Function Documentation</h2>
<a id="ac4662679a582ffa71ad420b2d52a2f1d" name="ac4662679a582ffa71ad420b2d52a2f1d"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -151,12 +158,12 @@ Functions</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a8bc82376a974a97ef9384792d30b4cc4" name="a8bc82376a974a97ef9384792d30b4cc4"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -186,14 +193,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a0bc08eaf2739c5b0977996228a81a129" name="a0bc08eaf2739c5b0977996228a81a129"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -223,14 +230,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a0655c99b1344272c17f0dc8eb480c598" name="a0655c99b1344272c17f0dc8eb480c598"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -260,14 +267,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="ae2131affd4cd632364d24b0d0a809fc3" name="ae2131affd4cd632364d24b0d0a809fc3"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -298,12 +305,12 @@ Functions</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="ae83addf5abc14d1dd046f315499ed6bf" name="ae83addf5abc14d1dd046f315499ed6bf"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -334,12 +341,12 @@ Functions</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a53fb409434bc59eeabbfc52f67a1c641" name="a53fb409434bc59eeabbfc52f67a1c641"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -369,14 +376,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a9f7a57bae796faca3c46ba0894f0b7bf" name="a9f7a57bae796faca3c46ba0894f0b7bf"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -406,14 +413,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a9d32ed47a0ec2bdf5a11b9ec477af632" name="a9d32ed47a0ec2bdf5a11b9ec477af632"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -443,14 +450,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="aed7606e2d2a9218a50ecbbc75a76aab7" name="aed7606e2d2a9218a50ecbbc75a76aab7"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -480,14 +487,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a051c87d97a1dfd644a97f965dfaa18dc" name="a051c87d97a1dfd644a97f965dfaa18dc"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -517,14 +524,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="af99b4b78c2355c81ff66ae146b92bc7b" name="af99b4b78c2355c81ff66ae146b92bc7b"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -554,14 +561,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="aaf26a4937c16d8b7cb22a6542ebb46a5" name="aaf26a4937c16d8b7cb22a6542ebb46a5"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -591,14 +598,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a6eac4715ae30d65e0638fb94d52aa1fe" name="a6eac4715ae30d65e0638fb94d52aa1fe"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -628,14 +635,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a7271f609adb83bed31f8ef0eb8ee2b79" name="a7271f609adb83bed31f8ef0eb8ee2b79"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -665,14 +672,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a2cad88ee81ff905e2309375818c89020" name="a2cad88ee81ff905e2309375818c89020"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -702,14 +709,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="ac64f66a36c4ca887741fe28475a99b01" name="ac64f66a36c4ca887741fe28475a99b01"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -739,14 +746,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a0ff9db0d178a0397441c0269cea9e48a" name="a0ff9db0d178a0397441c0269cea9e48a"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -776,14 +783,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a6fea7aab2873df1439a71f12e0f1afd8" name="a6fea7aab2873df1439a71f12e0f1afd8"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -813,14 +820,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a9ac5f2397cd42cd32e4b3cb199739b35" name="a9ac5f2397cd42cd32e4b3cb199739b35"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -850,14 +857,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a4c35b5b42d01e850824bc0af1016e71f" name="a4c35b5b42d01e850824bc0af1016e71f"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -887,14 +894,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="af34c982b84b7c76d45edc5a7715a4fed" name="af34c982b84b7c76d45edc5a7715a4fed"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -924,14 +931,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="addb6306dc020aa290075bed9b1f42a3a" name="addb6306dc020aa290075bed9b1f42a3a"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -961,14 +968,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a3359dc295afcfd0ee6f592dd37f03080" name="a3359dc295afcfd0ee6f592dd37f03080"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -998,14 +1005,14 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a79c0ae205603f7f83f15171ba3413f26" name="a79c0ae205603f7f83f15171ba3413f26"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -1035,16 +1042,16 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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> </div>
</div><!-- contents --> </div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: fftools_opt_common.h Source File</title> <title>FFmpegKit Android API: fftools_opt_common.h Source File</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/> <link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menudata.js"></script>
@ -57,9 +57,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
<div class="header"> <div class="header">
@ -68,7 +75,7 @@ $(function() {
<div class="contents"> <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> <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="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="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="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> <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="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="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__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_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#l01256">fftools_opt_common.c:1256</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#l01069">fftools_opt_common.c:1069</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#l00590">fftools_opt_common.c:590</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#l00811">fftools_opt_common.c:811</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#l01050">fftools_opt_common.c:1050</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#l00935">fftools_opt_common.c:935</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#l00799">fftools_opt_common.c:799</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#l01059">fftools_opt_common.c:1059</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#l01017">fftools_opt_common.c:1017</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#l00793">fftools_opt_common.c:793</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#l00266">fftools_opt_common.c:266</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#l01081">fftools_opt_common.c:1081</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#l00094">fftools_opt_common.c:94</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#l00690">fftools_opt_common.c:690</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#l00274">fftools_opt_common.c:274</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#l00945">fftools_opt_common.c:945</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#l01155">fftools_opt_common.c:1155</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#l00930">fftools_opt_common.c:930</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#l00950">fftools_opt_common.c:950</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#l01242">fftools_opt_common.c:1242</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#l01237">fftools_opt_common.c:1237</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#l00965">fftools_opt_common.c:965</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#l00979">fftools_opt_common.c:979</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#l00940">fftools_opt_common.c:940</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 --> </div><!-- fragment --></div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: ffprobekit.h File Reference</title> <title>FFmpegKit Android API: ffprobekit.h File Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/> <link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
</div><!-- top --> </div><!-- top -->
@ -78,7 +85,7 @@ Functions</h2></td></tr>
</table> </table>
<h2 class="groupheader">Function Documentation</h2> <h2 class="groupheader">Function Documentation</h2>
<a id="a22b43bda480738857bff636161c61a58" name="a22b43bda480738857bff636161c61a58"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -114,7 +121,7 @@ Functions</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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> <dl class="params"><dt>Parameters</dt><dd>
<table class="params"> <table class="params">
<tr><td class="paramname">env</td><td>pointer to native method interface </td></tr> <tr><td class="paramname">env</td><td>pointer to native method interface </td></tr>
@ -133,7 +140,7 @@ Functions</h2></td></tr>
</div><!-- contents --> </div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: ffprobekit.h Source File</title> <title>FFmpegKit Android API: ffprobekit.h Source File</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/> <link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menudata.js"></script>
@ -57,9 +57,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
<div class="header"> <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="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="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="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 --> </div><!-- fragment --></div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: CallbackData Struct Reference</title> <title>FFmpegKit Android API: CallbackData Struct Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/> <link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
</div><!-- top --> </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="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="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="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="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:abe4eff38e39d603bd966c554e9e5afc8"><td class="memSeparator" colspan="2">&#160;</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="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="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> <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> <tr class="separator:a2e5d0fd0859aca2c5a304b4823b86ccd"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table> </table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <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> <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> </div><h2 class="groupheader">Field Documentation</h2>
<a id="ae7661f79a95fe7d0eaa118264431f9c2" name="ae7661f79a95fe7d0eaa118264431f9c2"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -118,7 +125,7 @@ Data Fields</h2></td></tr>
</div> </div>
</div> </div>
<a id="a0108648839b77d246e659a7eefdde4fb" name="a0108648839b77d246e659a7eefdde4fb"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -134,7 +141,7 @@ Data Fields</h2></td></tr>
</div> </div>
</div> </div>
<a id="a2e5d0fd0859aca2c5a304b4823b86ccd" name="a2e5d0fd0859aca2c5a304b4823b86ccd"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -150,7 +157,7 @@ Data Fields</h2></td></tr>
</div> </div>
</div> </div>
<a id="ad8af170b5f3057c34dc1221a65a8c4af" name="ad8af170b5f3057c34dc1221a65a8c4af"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -166,7 +173,7 @@ Data Fields</h2></td></tr>
</div> </div>
</div> </div>
<a id="a0e02eb985ed5c68bdf82a3445c0b4514" name="a0e02eb985ed5c68bdf82a3445c0b4514"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -182,7 +189,7 @@ Data Fields</h2></td></tr>
</div> </div>
</div> </div>
<a id="ad4ef14e9625fe915267d644480e9410f" name="ad4ef14e9625fe915267d644480e9410f"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -198,7 +205,7 @@ Data Fields</h2></td></tr>
</div> </div>
</div> </div>
<a id="a6ea1c5fbcf7ad64a04687d738a9c6559" name="a6ea1c5fbcf7ad64a04687d738a9c6559"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -214,7 +221,7 @@ Data Fields</h2></td></tr>
</div> </div>
</div> </div>
<a id="a0eba672f8309ce08c41eeb63c48091af" name="a0eba672f8309ce08c41eeb63c48091af"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -230,7 +237,7 @@ Data Fields</h2></td></tr>
</div> </div>
</div> </div>
<a id="aee6855bc657b56db6c8a32656b3018c4" name="aee6855bc657b56db6c8a32656b3018c4"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -246,7 +253,7 @@ Data Fields</h2></td></tr>
</div> </div>
</div> </div>
<a id="a577a99dc4c2767d1946ac174f7a0c69e" name="a577a99dc4c2767d1946ac174f7a0c69e"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -261,14 +268,14 @@ Data Fields</h2></td></tr>
</div> </div>
</div> </div>
<a id="abe4eff38e39d603bd966c554e9e5afc8" name="abe4eff38e39d603bd966c554e9e5afc8"></a> <a id="a10bb5b2136f3ecf818079cd0b4632c2b" name="a10bb5b2136f3ecf818079cd0b4632c2b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abe4eff38e39d603bd966c554e9e5afc8">&#9670;&nbsp;</a></span>statisticsTime</h2> <h2 class="memtitle"><span class="permalink"><a href="#a10bb5b2136f3ecf818079cd0b4632c2b">&#9670;&#160;</a></span>statisticsTime</h2>
<div class="memitem"> <div class="memitem">
<div class="memproto"> <div class="memproto">
<table class="memname"> <table class="memname">
<tr> <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> </tr>
</table> </table>
</div><div class="memdoc"> </div><div class="memdoc">
@ -278,7 +285,7 @@ Data Fields</h2></td></tr>
</div> </div>
</div> </div>
<a id="a24877dd94bec8b5bad7a0ed6893f7c28" name="a24877dd94bec8b5bad7a0ed6893f7c28"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -299,7 +306,7 @@ Data Fields</h2></td></tr>
</div><!-- contents --> </div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: CompactContext Struct Reference</title> <title>FFmpegKit Android API: CompactContext Struct Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/> <link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
</div><!-- top --> </div><!-- top -->
@ -94,10 +101,10 @@ Data Fields</h2></td></tr>
</table> </table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"> <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> </div><h2 class="groupheader">Field Documentation</h2>
<a id="a8e0108669bebe76f67bb8ae4869f4843" name="a8e0108669bebe76f67bb8ae4869f4843"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -108,12 +115,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="ad9d56249a5965a5ec47f3a1241ce6b1e" name="ad9d56249a5965a5ec47f3a1241ce6b1e"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -124,12 +131,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a75a85295a2f8026ff95330866cf563aa" name="a75a85295a2f8026ff95330866cf563aa"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -140,12 +147,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a2384aee850920cabfaece87e4c368931" name="a2384aee850920cabfaece87e4c368931"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -156,12 +163,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a803eb26c6bc39957c885f8f58dfee861" name="a803eb26c6bc39957c885f8f58dfee861"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -172,12 +179,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="ab69db67b807887e2e11247ff28f0482c" name="ab69db67b807887e2e11247ff28f0482c"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -188,12 +195,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a2b8d470952d1051c0fd6b89b13a35e1e" name="a2b8d470952d1051c0fd6b89b13a35e1e"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -204,12 +211,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a4d211d2b2ba9c83a0613ec9c79af1f71" name="a4d211d2b2ba9c83a0613ec9c79af1f71"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -220,12 +227,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="af0b37847b18bd84f3d786c7e824356ee" name="af0b37847b18bd84f3d786c7e824356ee"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -236,12 +243,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a14c571b1a684a9d550b5649fcbaa93f8" name="a14c571b1a684a9d550b5649fcbaa93f8"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -252,7 +259,7 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
@ -262,7 +269,7 @@ Data Fields</h2></td></tr>
</div><!-- contents --> </div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: Option Struct Reference</title> <title>FFmpegKit Android API: Option Struct Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/> <link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
</div><!-- top --> </div><!-- top -->
@ -81,12 +88,12 @@ Data Fields</h2></td></tr>
<tr class="separator:a4dc04a99a38324c37ad89101d720e236"><td class="memSeparator" colspan="2">&#160;</td></tr> <tr class="separator:a4dc04a99a38324c37ad89101d720e236"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table> </table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <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> </div><h2 class="groupheader">Field Documentation</h2>
<a id="a16d977bce49a6da603426937ff7b6617" name="a16d977bce49a6da603426937ff7b6617"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -97,12 +104,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a3b25df629d81a005daeb930f12560edc" name="a3b25df629d81a005daeb930f12560edc"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -113,12 +120,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a4dc04a99a38324c37ad89101d720e236" name="a4dc04a99a38324c37ad89101d720e236"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -129,7 +136,7 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
@ -139,7 +146,7 @@ Data Fields</h2></td></tr>
</div><!-- contents --> </div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: InputStream Struct Reference</title> <title>FFmpegKit Android API: InputStream Struct Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/> <link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
</div><!-- top --> </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="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="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="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="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="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> <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="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="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="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="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="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> <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="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="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="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="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="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="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="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="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="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="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="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="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="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="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> <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="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="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="separator:a1ed159d9bc9d71428699968505629b38"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a620e4a8547e0bedc99f562539fc30421"><td class="memItemLeft" >struct {</td></tr> <tr class="memitem:abfb2fd782cfdeec429963f4a9b378a15"><td class="memItemLeft" >struct {&#160;</td><td class="memItemRight" valign="bottom"></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:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="separator:aad79c358d15e2c9af9ecfe08de8bf19d"><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="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:adf4a2ef75c7bef625d60aad657335d18"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="separator:a26040c4e9ce36924b8cdad3c0b0b324c"><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="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:a973dada2a0b2631bae7f87a229e8a332"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="separator:a2cbe4d705c7f3ccade0c5f3caad4db2b"><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="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:a09a23912b6caddf3270aa96db79db091"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="separator:a620e4a8547e0bedc99f562539fc30421"><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="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="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> <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="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="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="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="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="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="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="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="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="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> <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> </table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"> <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> </div><h2 class="groupheader">Field Documentation</h2>
<a id="abcb8222561f1ee84a2f7a2157bed356c" name="abcb8222561f1ee84a2f7a2157bed356c"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -209,12 +219,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a3a0034bb2959a06111810d2813975b24" name="a3a0034bb2959a06111810d2813975b24"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -225,12 +235,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a6f49309998ba92804b9d16761817811e" name="a6f49309998ba92804b9d16761817811e"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -241,12 +251,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="aec71efef67656157f493555fddbbc1c9" name="aec71efef67656157f493555fddbbc1c9"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -257,12 +267,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a550ceee60cb995b284b52962dcba6597" name="a550ceee60cb995b284b52962dcba6597"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -273,12 +283,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a1492e008c195bbd4e2c84bccbc5ee216" name="a1492e008c195bbd4e2c84bccbc5ee216"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -289,12 +299,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="ae73dddf18b49b6660263bc3a73a44290" name="ae73dddf18b49b6660263bc3a73a44290"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -305,12 +315,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="ac9fc51324b931c1db5c5c1445fe70c3b" name="ac9fc51324b931c1db5c5c1445fe70c3b"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -321,12 +331,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="ac39249a26eeec2ed084fcc433ec9825e" name="ac39249a26eeec2ed084fcc433ec9825e"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -337,12 +347,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a1e7893cdf661d9ad7c24fdccc60fa05e" name="a1e7893cdf661d9ad7c24fdccc60fa05e"></a> <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="memitem">
<div class="memproto"> <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>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>
</div> </div>
<a id="a1690691cd9bdc598717be8aa911b01ad" name="a1690691cd9bdc598717be8aa911b01ad"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -371,12 +381,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="ad47d834630eee2dca258aa449fb1df47" name="ad47d834630eee2dca258aa449fb1df47"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -387,12 +397,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a7ff433fc7a48e7b58a4b91e8ff05cf25" name="a7ff433fc7a48e7b58a4b91e8ff05cf25"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -403,12 +413,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="ad76700001c97c3ce465539f0c698e6bc" name="ad76700001c97c3ce465539f0c698e6bc"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -419,12 +429,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="aa4918133b75f0447192deea8c21f822e" name="aa4918133b75f0447192deea8c21f822e"></a> <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="memitem">
<div class="memproto"> <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>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>
</div> </div>
<a id="a1ed159d9bc9d71428699968505629b38" name="a1ed159d9bc9d71428699968505629b38"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -453,12 +463,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="afbaeaac6e0b1fc3095bb90f17d58621d" name="afbaeaac6e0b1fc3095bb90f17d58621d"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -469,76 +479,76 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="ac61e0f854402b58a64e676bdcfa75dfd" name="ac61e0f854402b58a64e676bdcfa75dfd"></a> <a id="ae52558c47e51e5d92451dc4731b66d1d" name="ae52558c47e51e5d92451dc4731b66d1d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac61e0f854402b58a64e676bdcfa75dfd">&#9670;&nbsp;</a></span>frames_decoded</h2> <h2 class="memtitle"><span class="permalink"><a href="#ae52558c47e51e5d92451dc4731b66d1d">&#9670;&#160;</a></span>framerate_guessed</h2>
<div class="memitem"> <div class="memitem">
<div class="memproto"> <div class="memproto">
<table class="memname"> <table class="memname">
<tr> <tr>
<td class="memname">uint64_t InputStream::frames_decoded</td> <td class="memname">AVRational InputStream::framerate_guessed</td>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a408a0502c42d26b196c524812d70a7e8" name="a408a0502c42d26b196c524812d70a7e8"></a> <a id="ac61e0f854402b58a64e676bdcfa75dfd" name="ac61e0f854402b58a64e676bdcfa75dfd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a408a0502c42d26b196c524812d70a7e8">&#9670;&nbsp;</a></span>got_output</h2> <h2 class="memtitle"><span class="permalink"><a href="#ac61e0f854402b58a64e676bdcfa75dfd">&#9670;&#160;</a></span>frames_decoded</h2>
<div class="memitem"> <div class="memitem">
<div class="memproto"> <div class="memproto">
<table class="memname"> <table class="memname">
<tr> <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> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a99e6bf56ec091f8af11744e4b0499327" name="a99e6bf56ec091f8af11744e4b0499327"></a> <a id="a408a0502c42d26b196c524812d70a7e8" name="a408a0502c42d26b196c524812d70a7e8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a99e6bf56ec091f8af11744e4b0499327">&#9670;&nbsp;</a></span>guess_layout_max</h2> <h2 class="memtitle"><span class="permalink"><a href="#a408a0502c42d26b196c524812d70a7e8">&#9670;&#160;</a></span>got_output</h2>
<div class="memitem"> <div class="memitem">
<div class="memproto"> <div class="memproto">
<table class="memname"> <table class="memname">
<tr> <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> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="aa455c67610467c0d79f42b9c2e620d9f" name="aa455c67610467c0d79f42b9c2e620d9f"></a> <a id="a99e6bf56ec091f8af11744e4b0499327" name="a99e6bf56ec091f8af11744e4b0499327"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa455c67610467c0d79f42b9c2e620d9f">&#9670;&nbsp;</a></span>hwaccel_ctx</h2> <h2 class="memtitle"><span class="permalink"><a href="#a99e6bf56ec091f8af11744e4b0499327">&#9670;&#160;</a></span>guess_layout_max</h2>
<div class="memitem"> <div class="memitem">
<div class="memproto"> <div class="memproto">
<table class="memname"> <table class="memname">
<tr> <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> </tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="ae48685e82826c6b5922014d47e2cb6bb" name="ae48685e82826c6b5922014d47e2cb6bb"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -549,12 +559,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="af577e45cb148e174ef437f3cbaa8b628" name="af577e45cb148e174ef437f3cbaa8b628"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -565,12 +575,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a6c3473c28e30500adb3fa7886e6d7c3e" name="a6c3473c28e30500adb3fa7886e6d7c3e"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -581,12 +591,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a252184ceda81f2d65f63f0470b877bd4" name="a252184ceda81f2d65f63f0470b877bd4"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -597,12 +607,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a05769ba0518105626a6d64386795b48f" name="a05769ba0518105626a6d64386795b48f"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -613,12 +623,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="ad983487b3e7c29f53bb3336190f14051" name="ad983487b3e7c29f53bb3336190f14051"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -629,44 +639,28 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a91c6f154cc61c348f644987044423e57" name="a91c6f154cc61c348f644987044423e57"></a> <a id="aa8f3a07669847da56cd65bd95329d7a4" name="aa8f3a07669847da56cd65bd95329d7a4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a91c6f154cc61c348f644987044423e57">&#9670;&nbsp;</a></span>hwaccel_retrieved_pix_fmt</h2> <h2 class="memtitle"><span class="permalink"><a href="#aa8f3a07669847da56cd65bd95329d7a4">&#9670;&#160;</a></span>last_pkt_repeat_pict</h2>
<div class="memitem"> <div class="memitem">
<div class="memproto"> <div class="memproto">
<table class="memname"> <table class="memname">
<tr> <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> </tr>
</table> </table>
</div><div class="memdoc"> </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> <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>
</div> </div>
<a id="a911d752902aa8d4666ccefd8c912c91e" name="a911d752902aa8d4666ccefd8c912c91e"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -677,12 +671,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="aeb79819841b6d172faf8c108db4ffbd0" name="aeb79819841b6d172faf8c108db4ffbd0"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -693,12 +687,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a4b6db5d0fb15c8262b1ba543495fe628" name="a4b6db5d0fb15c8262b1ba543495fe628"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -709,12 +703,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a7c2c9b58a4db2101414f2d106f4244b0" name="a7c2c9b58a4db2101414f2d106f4244b0"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -725,12 +719,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="ade4b46981af499da120e4e2b30517bef" name="ade4b46981af499da120e4e2b30517bef"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -741,12 +735,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="af76c7165931c721b63008034c94d9275" name="af76c7165931c721b63008034c94d9275"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -757,12 +751,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a8026af86b300d31432bc1bf74910aea5" name="a8026af86b300d31432bc1bf74910aea5"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -773,12 +767,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="ab14ac8d1cdb5c1dd6472dd4c13867368" name="ab14ac8d1cdb5c1dd6472dd4c13867368"></a> <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="memitem">
<div class="memproto"> <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>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>
</div> </div>
<a id="a9d7d1e08713e8fb98d18d1ef6367e8e6" name="a9d7d1e08713e8fb98d18d1ef6367e8e6"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -807,12 +818,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="ae6c0680d4f8c5173937451d79efef0bf" name="ae6c0680d4f8c5173937451d79efef0bf"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -823,12 +834,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a620e4a8547e0bedc99f562539fc30421" name="a620e4a8547e0bedc99f562539fc30421"></a> <a id="abfb2fd782cfdeec429963f4a9b378a15" name="abfb2fd782cfdeec429963f4a9b378a15"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a620e4a8547e0bedc99f562539fc30421">&#9670;&nbsp;</a></span></h2> <h2 class="memtitle"><span class="permalink"><a href="#abfb2fd782cfdeec429963f4a9b378a15">&#9670;&#160;</a></span>[struct]</h2>
<div class="memitem"> <div class="memitem">
<div class="memproto"> <div class="memproto">
@ -842,7 +853,7 @@ Data Fields</h2></td></tr>
</div> </div>
</div> </div>
<a id="a6c98acd7bffcebe0d9e13f9d845845e7" name="a6c98acd7bffcebe0d9e13f9d845845e7"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -853,12 +864,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a5e77505bdc5afbc6ab5cf613894925b4" name="a5e77505bdc5afbc6ab5cf613894925b4"></a> <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="memitem">
<div class="memproto"> <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>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>
</div> </div>
<a id="a809d93e64e76fe2f142102e58dc82a1e" name="a809d93e64e76fe2f142102e58dc82a1e"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -887,12 +898,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a6ae65382f22317b94b7ccfe00024d31a" name="a6ae65382f22317b94b7ccfe00024d31a"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -903,12 +914,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="aa8aa609acb39eb21da43f02cdfb036eb" name="aa8aa609acb39eb21da43f02cdfb036eb"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -919,12 +930,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a09d78f4795c4ff17dd54204450f2d394" name="a09d78f4795c4ff17dd54204450f2d394"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -935,12 +946,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="acf438e2a33238676cb3f68b39ae18049" name="acf438e2a33238676cb3f68b39ae18049"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -951,12 +962,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a6718f5f7b2206b2848af5e35ae3a9186" name="a6718f5f7b2206b2848af5e35ae3a9186"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -967,12 +978,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="acc9fee6e45ff302a2c1a06a053cbaa22" name="acc9fee6e45ff302a2c1a06a053cbaa22"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -986,7 +997,7 @@ Data Fields</h2></td></tr>
</div> </div>
</div> </div>
<a id="ae37fb0410a65c6b2e5a38614f4481f07" name="ae37fb0410a65c6b2e5a38614f4481f07"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -997,12 +1008,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="abc71c343e0ade7e102adb45badfc6243" name="abc71c343e0ade7e102adb45badfc6243"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -1013,12 +1024,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a0dae26daa277d99147113de4ea449bc1" name="a0dae26daa277d99147113de4ea449bc1"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -1029,12 +1040,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a86b730f87f0f8ebd088f94af51d91b96" name="a86b730f87f0f8ebd088f94af51d91b96"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -1045,12 +1056,28 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a8ee44633b600f2b31541b213f0a4b322" name="a8ee44633b600f2b31541b213f0a4b322"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -1061,7 +1088,7 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
@ -1072,7 +1099,7 @@ Data Fields</h2></td></tr>
</div><!-- contents --> </div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: ffmpegkit_exception.h File Reference</title> <title>FFmpegKit Android API: ffmpegkit_exception.h File Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/> <link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
</div><!-- top --> </div><!-- top -->
@ -78,7 +85,7 @@ Variables</h2></td></tr>
</table> </table>
<h2 class="groupheader">Variable Documentation</h2> <h2 class="groupheader">Variable Documentation</h2>
<a id="a602bfc62417fcbda9f5e3e6604917b3c" name="a602bfc62417fcbda9f5e3e6604917b3c"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -96,7 +103,7 @@ Variables</h2></td></tr>
</tr> </tr>
</table> </table>
</div><div class="memdoc"> </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> <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 --> </div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: ffmpegkit_exception.h Source File</title> <title>FFmpegKit Android API: ffmpegkit_exception.h Source File</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/> <link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menudata.js"></script>
@ -57,9 +57,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
<div class="header"> <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="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="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="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 --> </div><!-- fragment --></div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: FlatContext Struct Reference</title> <title>FFmpegKit Android API: FlatContext Struct Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/> <link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
</div><!-- top --> </div><!-- top -->
@ -82,10 +89,10 @@ Data Fields</h2></td></tr>
</table> </table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"> <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> </div><h2 class="groupheader">Field Documentation</h2>
<a id="acad059863d0d81b605f384b447e49734" name="acad059863d0d81b605f384b447e49734"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -96,12 +103,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="aba2cac86faa289090af7543ff4ffcdcc" name="aba2cac86faa289090af7543ff4ffcdcc"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -112,12 +119,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a529baa5a1cba47d2eb62f49b0a4fd03b" name="a529baa5a1cba47d2eb62f49b0a4fd03b"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -128,12 +135,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a509af19cca73c04f13342034fee165c7" name="a509af19cca73c04f13342034fee165c7"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -144,7 +151,7 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
@ -154,7 +161,7 @@ Data Fields</h2></td></tr>
</div><!-- contents --> </div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: DefaultContext Struct Reference</title> <title>FFmpegKit Android API: DefaultContext Struct Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/> <link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
</div><!-- top --> </div><!-- top -->
@ -82,10 +89,10 @@ Data Fields</h2></td></tr>
</table> </table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"> <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> </div><h2 class="groupheader">Field Documentation</h2>
<a id="afa8e41a1d7f3eb5e48102d58da4c7db3" name="afa8e41a1d7f3eb5e48102d58da4c7db3"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -96,12 +103,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a98cfc785481b62077206b991234b0f9e" name="a98cfc785481b62077206b991234b0f9e"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -112,12 +119,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="aa4fb1e189f6e2788e6ccc23e65dc3d98" name="aa4fb1e189f6e2788e6ccc23e65dc3d98"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -128,12 +135,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a7cae04407b25e67940bc2ff2c70496dd" name="a7cae04407b25e67940bc2ff2c70496dd"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -144,7 +151,7 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
@ -154,7 +161,7 @@ Data Fields</h2></td></tr>
</div><!-- contents --> </div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: InputStream::sub2video Struct Reference</title> <title>FFmpegKit Android API: InputStream::sub2video Struct Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/> <link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
<div id="nav-path" class="navpath"> <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="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="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="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="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="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> <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="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="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="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> <tr class="separator:a15e606590596931e88ebd0b4626bfe97"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table> </table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"> <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> </div><h2 class="groupheader">Field Documentation</h2>
<a id="aaf500e3a36c6e6a6920a8e18c6478a8e" name="aaf500e3a36c6e6a6920a8e18c6478a8e"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -110,12 +117,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a0e7ca3e0eebc5db360ae15f2dac3d622" name="a0e7ca3e0eebc5db360ae15f2dac3d622"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -126,12 +133,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="aeecdbc3f86c3bcbf9c42ac7a867e91db" name="aeecdbc3f86c3bcbf9c42ac7a867e91db"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -142,12 +149,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a15e606590596931e88ebd0b4626bfe97" name="a15e606590596931e88ebd0b4626bfe97"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -160,12 +167,12 @@ Data Fields</h2></td></tr>
<p>marks if sub2video_update should force an initialization </p> <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>
</div> </div>
<a id="a992c9fe5de3acf5dce388cffda4fdce8" name="a992c9fe5de3acf5dce388cffda4fdce8"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -176,12 +183,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a509d9d1872ee8969a6769ce138da3fb2" name="a509d9d1872ee8969a6769ce138da3fb2"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -194,12 +201,12 @@ Data Fields</h2></td></tr>
<p>queue of AVSubtitle* before filter init </p> <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>
</div> </div>
<a id="a0bd83c4ad9f5301d63e49a9f94b8cf7d" name="a0bd83c4ad9f5301d63e49a9f94b8cf7d"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -210,7 +217,7 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
@ -220,7 +227,7 @@ Data Fields</h2></td></tr>
</div><!-- contents --> </div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: BenchmarkTimeStamps Struct Reference</title> <title>FFmpegKit Android API: BenchmarkTimeStamps Struct Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/> <link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menudata.js"></script>
@ -56,9 +56,16 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
</div><!-- top --> </div><!-- top -->
@ -80,10 +87,10 @@ Data Fields</h2></td></tr>
</table> </table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"> <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> </div><h2 class="groupheader">Field Documentation</h2>
<a id="a8639f0bbe9044fc765f4ec5b3968a488" name="a8639f0bbe9044fc765f4ec5b3968a488"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -94,12 +101,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a06a44cae9b837e8481ba86a648cbcc95" name="a06a44cae9b837e8481ba86a648cbcc95"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -110,12 +117,12 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="ad0f18c644b145f2ef6c7bd37c22d7cd6" name="ad0f18c644b145f2ef6c7bd37c22d7cd6"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -126,7 +133,7 @@ Data Fields</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
@ -136,7 +143,7 @@ Data Fields</h2></td></tr>
</div><!-- contents --> </div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </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"> <!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> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <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"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FFmpegKit Android API: fftools_ffmpeg_mux.c File Reference</title> <title>FFmpegKit Android API: fftools_ffmpeg_mux.c File Reference</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/> <link href="../../tabs.css" rel="stylesheet" type="text/css"/>
@ -22,7 +22,7 @@
<tr id="projectrow"> <tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td> <td id="projectlogo"><img alt="Logo" src="../../ffmpeg-kit-icon-v9-small.png"/></td>
<td id="projectalign"> <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> </div>
</td> </td>
</tr> </tr>
@ -30,10 +30,10 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.9.4 --> <!-- Generated by Doxygen 1.9.7 -->
<script type="text/javascript"> <script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */ /* @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 */ /* @license-end */
</script> </script>
<script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menudata.js"></script>
@ -56,15 +56,23 @@ $(function() {
<!-- iframe showing the search results (closed by default) --> <!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow"> <div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" <div id="MSearchResults">
name="MSearchResults" id="MSearchResults"> <div class="SRPage">
</iframe> <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>
</div><!-- top --> </div><!-- top -->
<div class="header"> <div class="header">
<div class="summary"> <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 class="headertitle"><div class="title">fftools_ffmpeg_mux.c File Reference</div></div>
</div><!--header--> </div><!--header-->
<div class="contents"> <div class="contents">
@ -73,22 +81,61 @@ $(function() {
<table class="memberdecls"> <table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr> 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="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:ac237321f98a7041c9f6004d2ce8a425c"><td class="memSeparator" colspan="2">&#160;</td></tr> <tr class="separator:ae83a6b9dd35a60f10d79371fb8d1c469"><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="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:aea0554f44067721a9066e82c8f5fc847"><td class="memSeparator" colspan="2">&#160;</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="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="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="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:a6397eeb0856f5070264449b7a24c438a"><td class="memSeparator" colspan="2">&#160;</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="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="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="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="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> </table>
<h2 class="groupheader">Function Documentation</h2> <h2 class="groupheader">Function Documentation</h2>
<a id="ac237321f98a7041c9f6004d2ce8a425c" name="ac237321f98a7041c9f6004d2ce8a425c"></a> <a id="a163e7f4ab7e6ac7d75a43b8ec8a16a0c" name="a163e7f4ab7e6ac7d75a43b8ec8a16a0c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac237321f98a7041c9f6004d2ce8a425c">&#9670;&nbsp;</a></span>close_all_output_streams()</h2> <h2 class="memtitle"><span class="permalink"><a href="#a163e7f4ab7e6ac7d75a43b8ec8a16a0c">&#9670;&#160;</a></span>bsf_init()</h2>
<div class="memitem"> <div class="memitem">
<div class="memproto"> <div class="memproto">
@ -97,27 +144,67 @@ Functions</h2></td></tr>
<td class="mlabels-left"> <td class="mlabels-left">
<table class="memname"> <table class="memname">
<tr> <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>(</td>
<td class="paramtype"><a class="el" href="../../db/dde/struct_output_stream.html">OutputStream</a> *&#160;</td> <td class="paramtype"><a class="el" href="../../d6/d16/struct_mux_stream.html">MuxStream</a> *&#160;</td>
<td class="paramname"><em>ost</em>, </td> <td class="paramname"><em>ms</em></td><td>)</td>
</tr>
<tr>
<td class="paramkey"></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> </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> <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></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> </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> <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><td></td>
</tr> </tr>
</table> </table>
</td> </td>
@ -127,32 +214,108 @@ Functions</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a6397eeb0856f5070264449b7a24c438a" name="a6397eeb0856f5070264449b7a24c438a"></a> <a id="a26dcef2b6f9acc114d07755777eb1974" name="a26dcef2b6f9acc114d07755777eb1974"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6397eeb0856f5070264449b7a24c438a">&#9670;&nbsp;</a></span>of_check_init()</h2> <h2 class="memtitle"><span class="permalink"><a href="#a26dcef2b6f9acc114d07755777eb1974">&#9670;&#160;</a></span>mux_from_of()</h2>
<div class="memitem"> <div class="memitem">
<div class="memproto"> <div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname"> <table class="memname">
<tr> <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>(</td>
<td class="paramtype"><a class="el" href="../../de/df2/struct_output_file.html">OutputFile</a> *&#160;</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 class="paramname"><em>of</em></td><td>)</td>
<td></td> <td></td>
</tr> </tr>
</table> </table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a148f8b518ba854ce09c277c7acdc2cb7" name="a148f8b518ba854ce09c277c7acdc2cb7"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -167,18 +330,38 @@ Functions</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="aea0554f44067721a9066e82c8f5fc847" name="aea0554f44067721a9066e82c8f5fc847"></a> <a id="a617ff0bc3d1f3d46ad57fd6c1957b6f8" name="a617ff0bc3d1f3d46ad57fd6c1957b6f8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aea0554f44067721a9066e82c8f5fc847">&#9670;&nbsp;</a></span>of_write_packet()</h2> <h2 class="memtitle"><span class="permalink"><a href="#a617ff0bc3d1f3d46ad57fd6c1957b6f8">&#9670;&#160;</a></span>of_output_packet()</h2>
<div class="memitem"> <div class="memitem">
<div class="memproto"> <div class="memproto">
<table class="memname"> <table class="memname">
<tr> <tr>
<td class="memname">void of_write_packet </td> <td class="memname">void of_output_packet </td>
<td>(</td> <td>(</td>
<td class="paramtype"><a class="el" href="../../de/df2/struct_output_file.html">OutputFile</a> *&#160;</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 class="paramname"><em>of</em>, </td>
@ -199,7 +382,7 @@ Functions</h2></td></tr>
<td class="paramkey"></td> <td class="paramkey"></td>
<td></td> <td></td>
<td class="paramtype"><a class="el" href="../../d2/d36/fftools__ffmpeg__filter_8c.html#a61569f2965b7a369eb10b6d75d410d11">int</a>&#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>unqueue</em>&#160;</td> <td class="paramname"><em>eof</em>&#160;</td>
</tr> </tr>
<tr> <tr>
<td></td> <td></td>
@ -209,12 +392,42 @@ Functions</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="a8ee6bbffc4d71793d225e162b4e05600" name="a8ee6bbffc4d71793d225e162b4e05600"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -229,12 +442,78 @@ Functions</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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>
</div> </div>
<a id="ae7e4c98861cf63306a9211c4b056f757" name="ae7e4c98861cf63306a9211c4b056f757"></a> <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="memitem">
<div class="memproto"> <div class="memproto">
@ -257,14 +536,341 @@ Functions</h2></td></tr>
</table> </table>
</div><div class="memdoc"> </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> </div>
</div><!-- contents --> </div><!-- contents -->
<!-- start footer part --> <!-- start footer part -->
<hr class="footer"/><address class="footer"><small> <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> </small></address>
</body> </body>
</html> </html>

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

Loading…
Cancel
Save