Full Code of bilibili/ijkplayer for AI

master 30eb9441945d cached
640 files
2.8 MB
762.0k tokens
2730 symbols
1 requests
Download .txt
Showing preview only (3,033K chars total). Download the full file or copy to clipboard to get everything.
Repository: bilibili/ijkplayer
Branch: master
Commit: 30eb9441945d
Files: 640
Total size: 2.8 MB

Directory structure:
gitextract_n9wctwe6/

├── .gitignore
├── .travis.yml
├── COPYING.GPLv2
├── COPYING.GPLv3
├── COPYING.LGPLv2.1
├── COPYING.LGPLv3
├── MODULE_LICENSE_APACHE2
├── NEWS.md
├── NOTICE
├── README.md
├── android/
│   ├── .gitignore
│   ├── build-on-travis.sh
│   ├── compile-ijk.sh
│   ├── contrib/
│   │   ├── .gitignore
│   │   ├── compile-ffmpeg.sh
│   │   ├── compile-libsoxr.sh
│   │   ├── compile-openssl.sh
│   │   ├── setup-as-commiter.sh
│   │   ├── sync-mirrors.sh
│   │   └── tools/
│   │       ├── do-compile-ffmpeg.sh
│   │       ├── do-compile-libsoxr.sh
│   │       ├── do-compile-openssl.sh
│   │       └── do-detect-env.sh
│   ├── ijk-addr2line.sh
│   ├── ijk-ndk-stack.sh
│   ├── ijkplayer/
│   │   ├── .gitignore
│   │   ├── build.gradle
│   │   ├── gradle/
│   │   │   └── wrapper/
│   │   │       ├── gradle-wrapper.jar
│   │   │       └── gradle-wrapper.properties
│   │   ├── gradle.properties
│   │   ├── gradlew
│   │   ├── gradlew.bat
│   │   ├── ijkplayer-arm64/
│   │   │   ├── .gitignore
│   │   │   ├── build.gradle
│   │   │   ├── gradle.properties
│   │   │   ├── proguard-rules.pro
│   │   │   └── src/
│   │   │       ├── androidTest/
│   │   │       │   └── java/
│   │   │       │       └── tv/
│   │   │       │           └── danmaku/
│   │   │       │               └── ijk/
│   │   │       │                   └── media/
│   │   │       │                       └── player_arm64/
│   │   │       │                           └── ApplicationTest.java
│   │   │       └── main/
│   │   │           ├── .classpath
│   │   │           ├── .project
│   │   │           ├── .settings/
│   │   │           │   └── org.eclipse.jdt.core.prefs
│   │   │           ├── AndroidManifest.xml
│   │   │           ├── java/
│   │   │           │   └── tv/
│   │   │           │       └── danmaku/
│   │   │           │           └── ijk/
│   │   │           │               └── media/
│   │   │           │                   └── player_arm64/
│   │   │           │                       └── Pragma.java
│   │   │           ├── jni/
│   │   │           │   └── Application.mk
│   │   │           ├── project.properties
│   │   │           └── res/
│   │   │               └── values/
│   │   │                   └── strings.xml
│   │   ├── ijkplayer-armv5/
│   │   │   ├── .gitignore
│   │   │   ├── build.gradle
│   │   │   ├── gradle.properties
│   │   │   ├── proguard-rules.pro
│   │   │   └── src/
│   │   │       ├── androidTest/
│   │   │       │   └── java/
│   │   │       │       └── tv/
│   │   │       │           └── danmaku/
│   │   │       │               └── ijk/
│   │   │       │                   └── media/
│   │   │       │                       └── player_armv5/
│   │   │       │                           └── ApplicationTest.java
│   │   │       └── main/
│   │   │           ├── .classpath
│   │   │           ├── .project
│   │   │           ├── .settings/
│   │   │           │   └── org.eclipse.jdt.core.prefs
│   │   │           ├── AndroidManifest.xml
│   │   │           ├── java/
│   │   │           │   └── tv/
│   │   │           │       └── danmaku/
│   │   │           │           └── ijk/
│   │   │           │               └── media/
│   │   │           │                   └── player_armv5/
│   │   │           │                       └── Pragma.java
│   │   │           ├── jni/
│   │   │           │   └── Application.mk
│   │   │           ├── project.properties
│   │   │           └── res/
│   │   │               └── values/
│   │   │                   └── strings.xml
│   │   ├── ijkplayer-armv7a/
│   │   │   ├── .gitignore
│   │   │   ├── build.gradle
│   │   │   ├── gradle.properties
│   │   │   ├── proguard-rules.pro
│   │   │   └── src/
│   │   │       ├── androidTest/
│   │   │       │   └── java/
│   │   │       │       └── tv/
│   │   │       │           └── danmaku/
│   │   │       │               └── ijk/
│   │   │       │                   └── media/
│   │   │       │                       └── player_armv7a/
│   │   │       │                           └── ApplicationTest.java
│   │   │       └── main/
│   │   │           ├── .classpath
│   │   │           ├── .project
│   │   │           ├── .settings/
│   │   │           │   └── org.eclipse.jdt.core.prefs
│   │   │           ├── AndroidManifest.xml
│   │   │           ├── java/
│   │   │           │   └── tv/
│   │   │           │       └── danmaku/
│   │   │           │           └── ijk/
│   │   │           │               └── media/
│   │   │           │                   └── player_armv7a/
│   │   │           │                       └── Pragma.java
│   │   │           ├── jni/
│   │   │           │   ├── Android.mk
│   │   │           │   ├── Application.mk
│   │   │           │   └── ffmpeg/
│   │   │           │       └── Android.mk
│   │   │           ├── project.properties
│   │   │           └── res/
│   │   │               └── values/
│   │   │                   └── strings.xml
│   │   ├── ijkplayer-example/
│   │   │   ├── .gitignore
│   │   │   ├── build.gradle
│   │   │   ├── proguard-rules.pro
│   │   │   └── src/
│   │   │       ├── androidTest/
│   │   │       │   └── java/
│   │   │       │       └── tv/
│   │   │       │           └── danmaku/
│   │   │       │               └── ijk/
│   │   │       │                   └── media/
│   │   │       │                       └── example/
│   │   │       │                           └── ApplicationTest.java
│   │   │       └── main/
│   │   │           ├── .classpath
│   │   │           ├── .project
│   │   │           ├── .settings/
│   │   │           │   └── org.eclipse.jdt.core.prefs
│   │   │           ├── AndroidManifest.xml
│   │   │           ├── java/
│   │   │           │   └── tv/
│   │   │           │       └── danmaku/
│   │   │           │           └── ijk/
│   │   │           │               └── media/
│   │   │           │                   └── example/
│   │   │           │                       ├── activities/
│   │   │           │                       │   ├── FileExplorerActivity.java
│   │   │           │                       │   ├── RecentMediaActivity.java
│   │   │           │                       │   ├── SampleMediaActivity.java
│   │   │           │                       │   ├── SettingsActivity.java
│   │   │           │                       │   └── VideoActivity.java
│   │   │           │                       ├── application/
│   │   │           │                       │   ├── AppActivity.java
│   │   │           │                       │   └── Settings.java
│   │   │           │                       ├── content/
│   │   │           │                       │   ├── PathCursor.java
│   │   │           │                       │   ├── PathCursorLoader.java
│   │   │           │                       │   └── RecentMediaStorage.java
│   │   │           │                       ├── eventbus/
│   │   │           │                       │   └── FileExplorerEvents.java
│   │   │           │                       ├── fragments/
│   │   │           │                       │   ├── FileListFragment.java
│   │   │           │                       │   ├── RecentMediaListFragment.java
│   │   │           │                       │   ├── SampleMediaListFragment.java
│   │   │           │                       │   ├── SettingsFragment.java
│   │   │           │                       │   └── TracksFragment.java
│   │   │           │                       ├── services/
│   │   │           │                       │   └── MediaPlayerService.java
│   │   │           │                       └── widget/
│   │   │           │                           ├── media/
│   │   │           │                           │   ├── AndroidMediaController.java
│   │   │           │                           │   ├── FileMediaDataSource.java
│   │   │           │                           │   ├── IMediaController.java
│   │   │           │                           │   ├── IRenderView.java
│   │   │           │                           │   ├── IjkVideoView.java
│   │   │           │                           │   ├── InfoHudViewHolder.java
│   │   │           │                           │   ├── MeasureHelper.java
│   │   │           │                           │   ├── MediaPlayerCompat.java
│   │   │           │                           │   ├── SurfaceRenderView.java
│   │   │           │                           │   ├── TableLayoutBinder.java
│   │   │           │                           │   └── TextureRenderView.java
│   │   │           │                           └── preference/
│   │   │           │                               └── IjkListPreference.java
│   │   │           ├── project.properties
│   │   │           └── res/
│   │   │               ├── layout/
│   │   │               │   ├── activity_app.xml
│   │   │               │   ├── activity_player.xml
│   │   │               │   ├── fragment_file_list.xml
│   │   │               │   ├── fragment_file_list_item.xml
│   │   │               │   ├── fragment_track_list.xml
│   │   │               │   ├── table_media_info.xml
│   │   │               │   ├── table_media_info_row1.xml
│   │   │               │   ├── table_media_info_row2.xml
│   │   │               │   ├── table_media_info_section.xml
│   │   │               │   └── widget_toolbar.xml
│   │   │               ├── menu/
│   │   │               │   ├── menu_app.xml
│   │   │               │   └── menu_player.xml
│   │   │               ├── values/
│   │   │               │   ├── attrs.xml
│   │   │               │   ├── colors.xml
│   │   │               │   ├── dimens.xml
│   │   │               │   ├── ids.xml
│   │   │               │   ├── strings.xml
│   │   │               │   ├── strings_pref.xml
│   │   │               │   ├── styles.xml
│   │   │               │   └── themes.xml
│   │   │               ├── values-v11/
│   │   │               │   └── styles.xml
│   │   │               ├── values-v14/
│   │   │               │   └── styles.xml
│   │   │               ├── values-w820dp/
│   │   │               │   └── dimens.xml
│   │   │               └── xml/
│   │   │                   └── settings.xml
│   │   ├── ijkplayer-exo/
│   │   │   ├── .gitignore
│   │   │   ├── build.gradle
│   │   │   ├── gradle.properties
│   │   │   ├── proguard-rules.pro
│   │   │   └── src/
│   │   │       ├── androidTest/
│   │   │       │   └── java/
│   │   │       │       └── tv/
│   │   │       │           └── danmaku/
│   │   │       │               └── ijk/
│   │   │       │                   └── media/
│   │   │       │                       └── exo/
│   │   │       │                           └── ApplicationTest.java
│   │   │       └── main/
│   │   │           ├── AndroidManifest.xml
│   │   │           ├── java/
│   │   │           │   └── tv/
│   │   │           │       └── danmaku/
│   │   │           │           └── ijk/
│   │   │           │               └── media/
│   │   │           │                   └── exo/
│   │   │           │                       ├── IjkExoMediaPlayer.java
│   │   │           │                       └── demo/
│   │   │           │                           ├── EventLogger.java
│   │   │           │                           ├── SmoothStreamingTestMediaDrmCallback.java
│   │   │           │                           └── player/
│   │   │           │                               ├── DashRendererBuilder.java
│   │   │           │                               ├── DemoPlayer.java
│   │   │           │                               ├── ExtractorRendererBuilder.java
│   │   │           │                               ├── HlsRendererBuilder.java
│   │   │           │                               └── SmoothStreamingRendererBuilder.java
│   │   │           └── res/
│   │   │               └── values/
│   │   │                   └── strings.xml
│   │   ├── ijkplayer-java/
│   │   │   ├── .gitignore
│   │   │   ├── build.gradle
│   │   │   ├── gradle.properties
│   │   │   ├── proguard-rules.pro
│   │   │   └── src/
│   │   │       ├── androidTest/
│   │   │       │   └── java/
│   │   │       │       └── tv/
│   │   │       │           └── danmaku/
│   │   │       │               └── ijk/
│   │   │       │                   └── media/
│   │   │       │                       └── player/
│   │   │       │                           └── ApplicationTest.java
│   │   │       └── main/
│   │   │           ├── .classpath
│   │   │           ├── .project
│   │   │           ├── .settings/
│   │   │           │   └── org.eclipse.jdt.core.prefs
│   │   │           ├── AndroidManifest.xml
│   │   │           ├── java/
│   │   │           │   └── tv/
│   │   │           │       └── danmaku/
│   │   │           │           └── ijk/
│   │   │           │               └── media/
│   │   │           │                   └── player/
│   │   │           │                       ├── AbstractMediaPlayer.java
│   │   │           │                       ├── AndroidMediaPlayer.java
│   │   │           │                       ├── IMediaPlayer.java
│   │   │           │                       ├── ISurfaceTextureHolder.java
│   │   │           │                       ├── ISurfaceTextureHost.java
│   │   │           │                       ├── IjkLibLoader.java
│   │   │           │                       ├── IjkMediaCodecInfo.java
│   │   │           │                       ├── IjkMediaMeta.java
│   │   │           │                       ├── IjkMediaPlayer.java
│   │   │           │                       ├── IjkTimedText.java
│   │   │           │                       ├── MediaInfo.java
│   │   │           │                       ├── MediaPlayerProxy.java
│   │   │           │                       ├── TextureMediaPlayer.java
│   │   │           │                       ├── annotations/
│   │   │           │                       │   ├── AccessedByNative.java
│   │   │           │                       │   └── CalledByNative.java
│   │   │           │                       ├── exceptions/
│   │   │           │                       │   └── IjkMediaException.java
│   │   │           │                       ├── ffmpeg/
│   │   │           │                       │   └── FFmpegApi.java
│   │   │           │                       ├── misc/
│   │   │           │                       │   ├── AndroidMediaFormat.java
│   │   │           │                       │   ├── AndroidTrackInfo.java
│   │   │           │                       │   ├── IAndroidIO.java
│   │   │           │                       │   ├── IMediaDataSource.java
│   │   │           │                       │   ├── IMediaFormat.java
│   │   │           │                       │   ├── ITrackInfo.java
│   │   │           │                       │   ├── IjkMediaFormat.java
│   │   │           │                       │   └── IjkTrackInfo.java
│   │   │           │                       └── pragma/
│   │   │           │                           ├── DebugLog.java
│   │   │           │                           └── Pragma.java
│   │   │           ├── project.properties
│   │   │           └── res/
│   │   │               └── values/
│   │   │                   └── strings.xml
│   │   ├── ijkplayer-x86/
│   │   │   ├── .gitignore
│   │   │   ├── build.gradle
│   │   │   ├── gradle.properties
│   │   │   ├── proguard-rules.pro
│   │   │   └── src/
│   │   │       ├── androidTest/
│   │   │       │   └── java/
│   │   │       │       └── tv/
│   │   │       │           └── danmaku/
│   │   │       │               └── ijk/
│   │   │       │                   └── media/
│   │   │       │                       └── ijkplayer/
│   │   │       │                           └── ApplicationTest.java
│   │   │       └── main/
│   │   │           ├── .classpath
│   │   │           ├── .project
│   │   │           ├── .settings/
│   │   │           │   └── org.eclipse.jdt.core.prefs
│   │   │           ├── AndroidManifest.xml
│   │   │           ├── java/
│   │   │           │   └── tv/
│   │   │           │       └── danmaku/
│   │   │           │           └── ijk/
│   │   │           │               └── media/
│   │   │           │                   └── player_x86/
│   │   │           │                       └── Pragma.java
│   │   │           ├── jni/
│   │   │           │   ├── Application.mk
│   │   │           │   └── ffmpeg/
│   │   │           │       └── Android.mk
│   │   │           ├── project.properties
│   │   │           └── res/
│   │   │               └── values/
│   │   │                   └── strings.xml
│   │   ├── ijkplayer-x86_64/
│   │   │   ├── .gitignore
│   │   │   ├── build.gradle
│   │   │   ├── gradle.properties
│   │   │   ├── proguard-rules.pro
│   │   │   └── src/
│   │   │       ├── androidTest/
│   │   │       │   └── java/
│   │   │       │       └── com/
│   │   │       │           └── example/
│   │   │       │               └── ijkplayer_x86_64/
│   │   │       │                   └── ApplicationTest.java
│   │   │       └── main/
│   │   │           ├── AndroidManifest.xml
│   │   │           ├── jni/
│   │   │           │   ├── Application.mk
│   │   │           │   └── ffmpeg/
│   │   │           │       └── Android.mk
│   │   │           └── res/
│   │   │               └── values/
│   │   │                   └── strings.xml
│   │   ├── settings.gradle
│   │   └── tools/
│   │       ├── gradle-bintray-upload.gradle
│   │       ├── gradle-mvn-push.gradle
│   │       └── gradle-on-demand.gradle
│   ├── patch-debugging-with-lldb.sh
│   └── patches/
│       ├── 0001-gitignore-ignore-.externalNativeBuild.patch
│       ├── 0002-gradle-upgrade-build-tool-to-2.2.0-beta2.patch
│       ├── 0003-arm64-enable-debugging-with-LLDB.patch
│       ├── 0003-armv5-enable-debugging-with-LLDB.patch
│       ├── 0003-armv7a-enable-debugging-with-LLDB.patch
│       ├── 0003-x86-enable-debugging-with-LLDB.patch
│       ├── 0003-x86_64-enable-debugging-with-LLDB.patch
│       ├── 0004-armv7a-link-prebuilt-staic-libraries-of-ffmepg.patch
│       ├── 0004-x86-link-prebuilt-staic-libraries-of-ffmepg.patch
│       └── 0004-x86_64-link-prebuilt-staic-libraries-of-ffmepg.patch
├── compile-android-j4a.sh
├── config/
│   ├── module-default.sh
│   ├── module-lite-hevc.sh
│   └── module-lite.sh
├── doc/
│   └── preflight_checklist.md
├── ijkmedia/
│   ├── Android.mk
│   ├── ijkj4a/
│   │   ├── .gitignore
│   │   ├── Android.mk
│   │   ├── Makefile
│   │   ├── j4a/
│   │   │   ├── class/
│   │   │   │   ├── android/
│   │   │   │   │   ├── media/
│   │   │   │   │   │   ├── AudioTrack.c
│   │   │   │   │   │   ├── AudioTrack.h
│   │   │   │   │   │   ├── AudioTrack.include.j4a
│   │   │   │   │   │   ├── AudioTrack.loader.j4a
│   │   │   │   │   │   ├── MediaCodec.c
│   │   │   │   │   │   ├── MediaCodec.h
│   │   │   │   │   │   ├── MediaCodec.include.j4a
│   │   │   │   │   │   ├── MediaCodec.loader.j4a
│   │   │   │   │   │   ├── MediaFormat.c
│   │   │   │   │   │   ├── MediaFormat.h
│   │   │   │   │   │   ├── MediaFormat.include.j4a
│   │   │   │   │   │   ├── MediaFormat.loader.j4a
│   │   │   │   │   │   ├── PlaybackParams.c
│   │   │   │   │   │   ├── PlaybackParams.h
│   │   │   │   │   │   ├── PlaybackParams.include.j4a
│   │   │   │   │   │   └── PlaybackParams.loader.j4a
│   │   │   │   │   └── os/
│   │   │   │   │       ├── Build.c
│   │   │   │   │       ├── Build.h
│   │   │   │   │       ├── Build.include.j4a
│   │   │   │   │       ├── Build.loader.j4a
│   │   │   │   │       ├── Bundle.c
│   │   │   │   │       ├── Bundle.h
│   │   │   │   │       ├── Bundle.include.j4a
│   │   │   │   │       └── Bundle.loader.j4a
│   │   │   │   ├── java/
│   │   │   │   │   ├── nio/
│   │   │   │   │   │   ├── Buffer.c
│   │   │   │   │   │   ├── Buffer.h
│   │   │   │   │   │   ├── Buffer.include.j4a
│   │   │   │   │   │   ├── Buffer.loader.j4a
│   │   │   │   │   │   ├── ByteBuffer.c
│   │   │   │   │   │   ├── ByteBuffer.h
│   │   │   │   │   │   ├── ByteBuffer.include.j4a
│   │   │   │   │   │   └── ByteBuffer.loader.j4a
│   │   │   │   │   └── util/
│   │   │   │   │       ├── ArrayList.c
│   │   │   │   │       ├── ArrayList.h
│   │   │   │   │       ├── ArrayList.include.j4a
│   │   │   │   │       └── ArrayList.loader.j4a
│   │   │   │   └── tv/
│   │   │   │       └── danmaku/
│   │   │   │           └── ijk/
│   │   │   │               └── media/
│   │   │   │                   └── player/
│   │   │   │                       ├── IjkMediaPlayer.c
│   │   │   │                       ├── IjkMediaPlayer.h
│   │   │   │                       ├── IjkMediaPlayer.include.j4a
│   │   │   │                       ├── IjkMediaPlayer.loader.j4a
│   │   │   │                       └── misc/
│   │   │   │                           ├── IAndroidIO.c
│   │   │   │                           ├── IAndroidIO.h
│   │   │   │                           ├── IAndroidIO.include.j4a
│   │   │   │                           ├── IAndroidIO.loader.j4a
│   │   │   │                           ├── IMediaDataSource.c
│   │   │   │                           ├── IMediaDataSource.h
│   │   │   │                           ├── IMediaDataSource.include.j4a
│   │   │   │                           └── IMediaDataSource.loader.j4a
│   │   │   ├── j4a_allclasses.c
│   │   │   ├── j4a_allclasses.h
│   │   │   ├── j4a_allclasses.include.h
│   │   │   ├── j4a_allclasses.loader.h
│   │   │   ├── j4a_base.c
│   │   │   └── j4a_base.h
│   │   ├── j4au/
│   │   │   └── class/
│   │   │       ├── android/
│   │   │       │   └── media/
│   │   │       │       ├── AudioTrack.util.c
│   │   │       │       └── AudioTrack.util.h
│   │   │       └── java/
│   │   │           └── nio/
│   │   │               ├── ByteBuffer.util.c
│   │   │               └── ByteBuffer.util.h
│   │   └── java/
│   │       ├── android/
│   │       │   ├── media/
│   │       │   │   ├── AudioTrack.java
│   │       │   │   ├── MediaCodec.java
│   │       │   │   ├── MediaCrypto.java
│   │       │   │   ├── MediaFormat.java
│   │       │   │   └── PlaybackParams.java
│   │       │   └── os/
│   │       │       ├── Build.java
│   │       │       └── Bundle.java
│   │       ├── java/
│   │       │   ├── nio/
│   │       │   │   ├── Buffer.java
│   │       │   │   └── ByteBuffer.java
│   │       │   └── util/
│   │       │       └── ArrayList.java
│   │       └── tv/
│   │           └── danmaku/
│   │               └── ijk/
│   │                   └── media/
│   │                       └── player/
│   │                           ├── IjkMediaPlayer.java
│   │                           └── misc/
│   │                               ├── IAndroidIO.java
│   │                               └── IMediaDataSource.java
│   ├── ijkplayer/
│   │   ├── .gitignore
│   │   ├── Android.mk
│   │   ├── android/
│   │   │   ├── ffmpeg_api_jni.c
│   │   │   ├── ffmpeg_api_jni.h
│   │   │   ├── ijkplayer_android.c
│   │   │   ├── ijkplayer_android.h
│   │   │   ├── ijkplayer_android_def.h
│   │   │   ├── ijkplayer_jni.c
│   │   │   └── pipeline/
│   │   │       ├── ffpipeline_android.c
│   │   │       ├── ffpipeline_android.h
│   │   │       ├── ffpipenode_android_mediacodec_vdec.c
│   │   │       ├── ffpipenode_android_mediacodec_vdec.h
│   │   │       ├── h264_nal.h
│   │   │       ├── hevc_nal.h
│   │   │       └── mpeg4_esds.h
│   │   ├── config.h
│   │   ├── ff_cmdutils.c
│   │   ├── ff_cmdutils.h
│   │   ├── ff_fferror.h
│   │   ├── ff_ffinc.h
│   │   ├── ff_ffmsg.h
│   │   ├── ff_ffmsg_queue.h
│   │   ├── ff_ffpipeline.c
│   │   ├── ff_ffpipeline.h
│   │   ├── ff_ffpipenode.c
│   │   ├── ff_ffpipenode.h
│   │   ├── ff_ffplay.c
│   │   ├── ff_ffplay.h
│   │   ├── ff_ffplay_debug.h
│   │   ├── ff_ffplay_def.h
│   │   ├── ff_ffplay_options.h
│   │   ├── ijkavformat/
│   │   │   ├── allformats.c
│   │   │   ├── cJSON.c
│   │   │   ├── cJSON.h
│   │   │   ├── ijkasync.c
│   │   │   ├── ijkavformat.h
│   │   │   ├── ijkio.c
│   │   │   ├── ijkioandroidio.c
│   │   │   ├── ijkioapplication.c
│   │   │   ├── ijkioapplication.h
│   │   │   ├── ijkiocache.c
│   │   │   ├── ijkioffio.c
│   │   │   ├── ijkiomanager.c
│   │   │   ├── ijkiomanager.h
│   │   │   ├── ijkioprotocol.c
│   │   │   ├── ijkioprotocol.h
│   │   │   ├── ijkiourl.h
│   │   │   ├── ijkiourlhook.c
│   │   │   ├── ijklas.c
│   │   │   ├── ijklas.h
│   │   │   ├── ijklivehook.c
│   │   │   ├── ijklongurl.c
│   │   │   ├── ijkmediadatasource.c
│   │   │   ├── ijksegment.c
│   │   │   └── ijkurlhook.c
│   │   ├── ijkavutil/
│   │   │   ├── ijkdict.c
│   │   │   ├── ijkdict.h
│   │   │   ├── ijkfifo.c
│   │   │   ├── ijkfifo.h
│   │   │   ├── ijkstl.cpp
│   │   │   ├── ijkstl.h
│   │   │   ├── ijkthreadpool.c
│   │   │   ├── ijkthreadpool.h
│   │   │   ├── ijktree.c
│   │   │   ├── ijktree.h
│   │   │   ├── ijkutils.c
│   │   │   ├── ijkutils.h
│   │   │   └── opt.h
│   │   ├── ijkmeta.c
│   │   ├── ijkmeta.h
│   │   ├── ijkplayer.c
│   │   ├── ijkplayer.h
│   │   ├── ijkplayer_internal.h
│   │   ├── pipeline/
│   │   │   ├── ffpipeline_ffplay.c
│   │   │   ├── ffpipeline_ffplay.h
│   │   │   ├── ffpipenode_ffplay_vdec.c
│   │   │   └── ffpipenode_ffplay_vdec.h
│   │   └── version.sh
│   └── ijksdl/
│       ├── Android.mk
│       ├── android/
│       │   ├── android_audiotrack.c
│       │   ├── android_audiotrack.h
│       │   ├── android_nativewindow.c
│       │   ├── android_nativewindow.h
│       │   ├── ijksdl_android.h
│       │   ├── ijksdl_android_jni.c
│       │   ├── ijksdl_android_jni.h
│       │   ├── ijksdl_aout_android_audiotrack.c
│       │   ├── ijksdl_aout_android_audiotrack.h
│       │   ├── ijksdl_aout_android_opensles.c
│       │   ├── ijksdl_aout_android_opensles.h
│       │   ├── ijksdl_codec_android_mediacodec.c
│       │   ├── ijksdl_codec_android_mediacodec.h
│       │   ├── ijksdl_codec_android_mediacodec_dummy.c
│       │   ├── ijksdl_codec_android_mediacodec_dummy.h
│       │   ├── ijksdl_codec_android_mediacodec_internal.c
│       │   ├── ijksdl_codec_android_mediacodec_internal.h
│       │   ├── ijksdl_codec_android_mediacodec_java.c
│       │   ├── ijksdl_codec_android_mediacodec_java.h
│       │   ├── ijksdl_codec_android_mediadef.c
│       │   ├── ijksdl_codec_android_mediadef.h
│       │   ├── ijksdl_codec_android_mediaformat.c
│       │   ├── ijksdl_codec_android_mediaformat.h
│       │   ├── ijksdl_codec_android_mediaformat_internal.h
│       │   ├── ijksdl_codec_android_mediaformat_java.c
│       │   ├── ijksdl_codec_android_mediaformat_java.h
│       │   ├── ijksdl_inc_internal_android.h
│       │   ├── ijksdl_vout_android_nativewindow.c
│       │   ├── ijksdl_vout_android_nativewindow.h
│       │   ├── ijksdl_vout_android_surface.c
│       │   ├── ijksdl_vout_android_surface.h
│       │   ├── ijksdl_vout_overlay_android_mediacodec.c
│       │   └── ijksdl_vout_overlay_android_mediacodec.h
│       ├── dummy/
│       │   ├── ijksdl_dummy.h
│       │   ├── ijksdl_vout_dummy.c
│       │   └── ijksdl_vout_dummy.h
│       ├── ffmpeg/
│       │   ├── abi_all/
│       │   │   └── image_convert.c
│       │   ├── ijksdl_image_convert.h
│       │   ├── ijksdl_inc_ffmpeg.h
│       │   ├── ijksdl_vout_overlay_ffmpeg.c
│       │   └── ijksdl_vout_overlay_ffmpeg.h
│       ├── gles2/
│       │   ├── color.c
│       │   ├── common.c
│       │   ├── fsh/
│       │   │   ├── rgb.fsh.c
│       │   │   ├── yuv420p.fsh.c
│       │   │   ├── yuv420sp.fsh.c
│       │   │   └── yuv444p10le.fsh.c
│       │   ├── internal.h
│       │   ├── renderer.c
│       │   ├── renderer_rgb.c
│       │   ├── renderer_yuv420p.c
│       │   ├── renderer_yuv420sp.c
│       │   ├── renderer_yuv420sp_vtb.m
│       │   ├── renderer_yuv444p10le.c
│       │   ├── shader.c
│       │   └── vsh/
│       │       └── mvp.vsh.c
│       ├── ijksdl.h
│       ├── ijksdl_aout.c
│       ├── ijksdl_aout.h
│       ├── ijksdl_aout_internal.h
│       ├── ijksdl_audio.c
│       ├── ijksdl_audio.h
│       ├── ijksdl_class.h
│       ├── ijksdl_container.h
│       ├── ijksdl_egl.c
│       ├── ijksdl_egl.h
│       ├── ijksdl_endian.h
│       ├── ijksdl_error.c
│       ├── ijksdl_error.h
│       ├── ijksdl_extra_log.c
│       ├── ijksdl_extra_log.h
│       ├── ijksdl_fourcc.h
│       ├── ijksdl_gles2.h
│       ├── ijksdl_inc_internal.h
│       ├── ijksdl_log.h
│       ├── ijksdl_misc.h
│       ├── ijksdl_mutex.c
│       ├── ijksdl_mutex.h
│       ├── ijksdl_stdinc.c
│       ├── ijksdl_stdinc.h
│       ├── ijksdl_thread.c
│       ├── ijksdl_thread.h
│       ├── ijksdl_timer.c
│       ├── ijksdl_timer.h
│       ├── ijksdl_video.h
│       ├── ijksdl_vout.c
│       ├── ijksdl_vout.h
│       └── ijksdl_vout_internal.h
├── ijkprof/
│   └── android-ndk-profiler-dummy/
│       └── jni/
│           ├── Android-include.mk
│           ├── Android.mk
│           ├── prof.c
│           └── prof.h
├── init-android-exo.sh
├── init-android-j4a.sh
├── init-android-libsoxr.sh
├── init-android-libyuv.sh
├── init-android-openssl.sh
├── init-android-prof.sh
├── init-android-soundtouch.sh
├── init-android.sh
├── init-config.sh
├── init-ios-openssl.sh
├── init-ios.sh
├── ios/
│   ├── .gitignore
│   ├── IJKMediaDemo/
│   │   ├── IJKMediaDemo/
│   │   │   ├── AppIcons.xcassets/
│   │   │   │   └── AppIcon.appiconset/
│   │   │   │       └── Contents.json
│   │   │   ├── Barcode.h
│   │   │   ├── Barcode.m
│   │   │   ├── IJKAppDelegate.h
│   │   │   ├── IJKAppDelegate.m
│   │   │   ├── IJKCommon.h
│   │   │   ├── IJKDemoHistory.h
│   │   │   ├── IJKDemoHistory.m
│   │   │   ├── IJKDemoInputURLViewController.h
│   │   │   ├── IJKDemoInputURLViewController.m
│   │   │   ├── IJKDemoInputURLViewController.xib
│   │   │   ├── IJKDemoLocalFolderViewController.h
│   │   │   ├── IJKDemoLocalFolderViewController.m
│   │   │   ├── IJKDemoMainViewController.h
│   │   │   ├── IJKDemoMainViewController.m
│   │   │   ├── IJKDemoMainViewController.xib
│   │   │   ├── IJKDemoSampleViewController.h
│   │   │   ├── IJKDemoSampleViewController.m
│   │   │   ├── IJKDemoSampleViewController.xib
│   │   │   ├── IJKMediaControl.h
│   │   │   ├── IJKMediaControl.m
│   │   │   ├── IJKMediaDemo-Info.plist
│   │   │   ├── IJKMediaDemo-Prefix.pch
│   │   │   ├── IJKMoviePlayerViewController.h
│   │   │   ├── IJKMoviePlayerViewController.m
│   │   │   ├── IJKMoviePlayerViewController.xib
│   │   │   ├── IJKQRCodeScanViewController.h
│   │   │   ├── IJKQRCodeScanViewController.m
│   │   │   ├── IJKQRCodeScanViewController.xib
│   │   │   ├── Images.xcassets/
│   │   │   │   ├── AppIcon.appiconset/
│   │   │   │   │   └── Contents.json
│   │   │   │   └── LaunchImage.launchimage/
│   │   │   │       └── Contents.json
│   │   │   ├── LaunchScreen.xib
│   │   │   ├── en.lproj/
│   │   │   │   └── InfoPlist.strings
│   │   │   └── main.m
│   │   ├── IJKMediaDemo.xcodeproj/
│   │   │   ├── project.pbxproj
│   │   │   └── project.xcworkspace/
│   │   │       └── contents.xcworkspacedata
│   │   └── XCAssets/
│   │       ├── AppIcons.xcassets/
│   │       │   └── AppIcon.appiconset/
│   │       │       └── Contents.json
│   │       ├── LaunchImages.xcassets/
│   │       │   └── LaunchImage.launchimage/
│   │       │       └── Contents.json
│   │       └── MoviePlayerImages.xcassets/
│   │           └── MoviePlayer/
│   │               ├── btn_player_back_highlighted.imageset/
│   │               │   └── Contents.json
│   │               ├── btn_player_pause.imageset/
│   │               │   └── Contents.json
│   │               ├── btn_player_play.imageset/
│   │               │   └── Contents.json
│   │               ├── player_bottom_control_bg.imageset/
│   │               │   └── Contents.json
│   │               └── player_top_control_bg.imageset/
│   │                   └── Contents.json
│   ├── IJKMediaPlayer/
│   │   ├── IJKMediaFramework/
│   │   │   ├── IJKMediaFramework.h
│   │   │   └── Info.plist
│   │   ├── IJKMediaFrameworkTests/
│   │   │   ├── IJKMediaFrameworkTests.m
│   │   │   └── Info.plist
│   │   ├── IJKMediaFrameworkWithSSL/
│   │   │   └── IJKMediaFrameworkWithSSL.h
│   │   ├── IJKMediaFrameworkWithSSL.plist
│   │   ├── IJKMediaPlayer/
│   │   │   ├── IJKAVMoviePlayerController.h
│   │   │   ├── IJKAVMoviePlayerController.m
│   │   │   ├── IJKAVPlayerLayerView.h
│   │   │   ├── IJKAVPlayerLayerView.m
│   │   │   ├── IJKAudioKit.h
│   │   │   ├── IJKAudioKit.m
│   │   │   ├── IJKDeviceModel.h
│   │   │   ├── IJKDeviceModel.m
│   │   │   ├── IJKFFMonitor.h
│   │   │   ├── IJKFFMonitor.m
│   │   │   ├── IJKFFMoviePlayerController.h
│   │   │   ├── IJKFFMoviePlayerController.m
│   │   │   ├── IJKFFMoviePlayerDef.h
│   │   │   ├── IJKFFMoviePlayerDef.m
│   │   │   ├── IJKFFOptions.h
│   │   │   ├── IJKFFOptions.m
│   │   │   ├── IJKKVOController.h
│   │   │   ├── IJKKVOController.m
│   │   │   ├── IJKMPMoviePlayerController.h
│   │   │   ├── IJKMPMoviePlayerController.m
│   │   │   ├── IJKMediaModule.h
│   │   │   ├── IJKMediaModule.m
│   │   │   ├── IJKMediaPlayback.h
│   │   │   ├── IJKMediaPlayback.m
│   │   │   ├── IJKMediaPlayer-Prefix.pch
│   │   │   ├── IJKMediaPlayer.h
│   │   │   ├── IJKMediaUtils.h
│   │   │   ├── IJKMediaUtils.m
│   │   │   ├── IJKNotificationManager.h
│   │   │   ├── IJKNotificationManager.m
│   │   │   ├── IJKSDLGLViewProtocol.h
│   │   │   ├── NSString+IJKMedia.h
│   │   │   ├── NSString+IJKMedia.m
│   │   │   └── ijkmedia/
│   │   │       ├── ijkplayer/
│   │   │       │   └── ios/
│   │   │       │       ├── ijkplayer_ios.h
│   │   │       │       ├── ijkplayer_ios.m
│   │   │       │       └── pipeline/
│   │   │       │           ├── IJKVideoToolBox.h
│   │   │       │           ├── IJKVideoToolBox.m
│   │   │       │           ├── IJKVideoToolBoxAsync.h
│   │   │       │           ├── IJKVideoToolBoxAsync.m
│   │   │       │           ├── IJKVideoToolBoxSync.h
│   │   │       │           ├── IJKVideoToolBoxSync.m
│   │   │       │           ├── ffpipeline_ios.c
│   │   │       │           ├── ffpipeline_ios.h
│   │   │       │           ├── ffpipenode_ios_videotoolbox_vdec.h
│   │   │       │           ├── ffpipenode_ios_videotoolbox_vdec.m
│   │   │       │           └── h264_sps_parser.h
│   │   │       └── ijksdl/
│   │   │           └── ios/
│   │   │               ├── IJKSDLAudioKit.h
│   │   │               ├── IJKSDLAudioKit.m
│   │   │               ├── IJKSDLAudioQueueController.h
│   │   │               ├── IJKSDLAudioQueueController.m
│   │   │               ├── IJKSDLAudioUnitController.h
│   │   │               ├── IJKSDLAudioUnitController.m
│   │   │               ├── IJKSDLGLView.h
│   │   │               ├── IJKSDLGLView.m
│   │   │               ├── IJKSDLHudViewCell.h
│   │   │               ├── IJKSDLHudViewCell.m
│   │   │               ├── IJKSDLHudViewController.h
│   │   │               ├── IJKSDLHudViewController.m
│   │   │               ├── ijksdl_aout_ios_audiounit.h
│   │   │               ├── ijksdl_aout_ios_audiounit.m
│   │   │               ├── ijksdl_ios.h
│   │   │               ├── ijksdl_thread_ios.h
│   │   │               ├── ijksdl_thread_ios.m
│   │   │               ├── ijksdl_vout_ios_gles2.h
│   │   │               ├── ijksdl_vout_ios_gles2.m
│   │   │               ├── ijksdl_vout_overlay_videotoolbox.h
│   │   │               └── ijksdl_vout_overlay_videotoolbox.m
│   │   └── IJKMediaPlayer.xcodeproj/
│   │       ├── project.pbxproj
│   │       └── project.xcworkspace/
│   │           └── contents.xcworkspacedata
│   ├── IJKMediaPodDemo/
│   │   ├── .gitignore
│   │   ├── IJKMediaPodDemo/
│   │   │   ├── AppDelegate.h
│   │   │   ├── AppDelegate.m
│   │   │   ├── Base.lproj/
│   │   │   │   ├── LaunchScreen.xib
│   │   │   │   └── Main.storyboard
│   │   │   ├── Images.xcassets/
│   │   │   │   └── AppIcon.appiconset/
│   │   │   │       └── Contents.json
│   │   │   ├── Info.plist
│   │   │   ├── ViewController.h
│   │   │   ├── ViewController.m
│   │   │   └── main.m
│   │   ├── IJKMediaPodDemo.xcodeproj/
│   │   │   ├── project.pbxproj
│   │   │   └── project.xcworkspace/
│   │   │       └── contents.xcworkspacedata
│   │   ├── IJKMediaPodDemoTests/
│   │   │   ├── IJKMediaPodDemoTests.m
│   │   │   └── Info.plist
│   │   └── Podfile
│   ├── compile-ffmpeg.sh
│   ├── compile-openssl.sh
│   └── tools/
│       ├── avconfig.h
│       ├── config.h
│       ├── do-compile-ffmpeg.sh
│       ├── do-compile-openssl.sh
│       └── ffversion.h
├── tools/
│   ├── .gitignore
│   ├── copyrighter/
│   │   ├── CRContext.py
│   │   ├── CRCopyright.py
│   │   ├── CRFile.py
│   │   ├── __init__.py
│   │   └── __main__.py
│   ├── pull-repo-base.sh
│   ├── pull-repo-ref.sh
│   ├── setup-as-commiter.sh
│   └── sync-mirrors.sh
└── version.sh

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
# -----
build/
ffmpeg-temp/
android/ffmpeg-*
android/openssl-*
ios/ffmpeg-*
ios/openssl-*
extra
.DS_Store
ijkmedia/ijkyuv/
ijkmedia/ijksoundtouch
ijkprof/android-ndk-profiler/

# built application files
*.apk
*.ap_

# files for the dex VM
*.dex

# Java class files
*.class

# generated files
bin/
gen/
libs/
obj/
ijkmedia/ijkplayer/ijkversion.h

# Local configuration file (sdk path, etc)
local.properties

# Android Studio
.idea
.gradle
build/

# Xcode
xcuserdata
xcshareddata
*.xccheckout



================================================
FILE: .travis.yml
================================================
language: android
android:
  components:
    - platform-tools
    - tools
    - build-tools-23.0.3
    - android-23
    - extra-android-support
    - extra-android-m2repository

script:
    - cd android/ijkplayer
    - ./gradlew assemble


================================================
FILE: COPYING.GPLv2
================================================
                    GNU GENERAL PUBLIC LICENSE
                       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.)  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have.  You must make sure that they, too, receive or can get the
source code.  And you must show them these terms so they know their
rights.

  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

  The precise terms and conditions for copying, distribution and
modification follow.

                    GNU GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.  The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language.  (Hereinafter, translation is included without limitation in
the term "modification".)  Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

  1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

  2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.

    b) You must cause any work that you distribute or publish, that in
    whole or in part contains or is derived from the Program or any
    part thereof, to be licensed as a whole at no charge to all third
    parties under the terms of this License.

    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License.  (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

    a) Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software interchange; or,

    b) Accompany it with a written offer, valid for at least three
    years, to give any third party, for a charge no more than your
    cost of physically performing source distribution, a complete
    machine-readable copy of the corresponding source code, to be
    distributed under the terms of Sections 1 and 2 above on a medium
    customarily used for software interchange; or,

    c) Accompany it with the information you received as to the offer
    to distribute corresponding source code.  (This alternative is
    allowed only for noncommercial distribution and only if you
    received the program in object code or executable form with such
    an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it.  For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable.  However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

  4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

  5. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Program or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

  6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

  7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all.  For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded.  In such case, this License incorporates
the limitation as if written in the body of this License.

  9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number.  If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation.  If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.

  10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

                            NO WARRANTY

  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program 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 General Public License for more details.

    You should have received a copy of the GNU General Public License along
    with this program; if not, write to the Free Software Foundation, Inc.,
    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

    Gnomovision version 69, Copyright (C) year name of author
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  `Gnomovision' (which makes passes at compilers) written by James Hacker.

  <signature of Ty Coon>, 1 April 1989
  Ty Coon, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs.  If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.


================================================
FILE: COPYING.GPLv3
================================================
                    GNU GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU General Public License is a free, copyleft license for
software and other kinds of works.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  You must make sure that they, too, receive
or can get the source code.  And you must show them these terms so they
know their rights.

  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

  For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

  Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

  Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Use with the GNU Affero General Public License.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program 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 General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

    <program>  Copyright (C) <year>  <name of author>
    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.

  The GNU General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.  But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.


================================================
FILE: COPYING.LGPLv2.1
================================================
                  GNU LESSER GENERAL PUBLIC LICENSE
                       Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

                            Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
not price.  Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

                  GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.

  1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.

  You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.

  2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.

  If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License.  However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

  9. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.

  11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded.  In such case, this License incorporates the limitation as if
written in the body of this License.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number.  If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission.  For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this.  Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.

                            NO WARRANTY

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

                     END OF TERMS AND CONDITIONS

           How to Apply These Terms to Your New Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

  To apply these terms, attach the following notices to the library.  It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.

    <one line to give the library's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This library 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.

    This library 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 this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

  <signature of Ty Coon>, 1 April 1990
  Ty Coon, President of Vice

That's all there is to it!


================================================
FILE: COPYING.LGPLv3
================================================
                   GNU LESSER GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.


  This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.

  0. Additional Definitions.

  As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.

  "The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.

  An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.

  A "Combined Work" is a work produced by combining or linking an
Application with the Library.  The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".

  The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.

  The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.

  1. Exception to Section 3 of the GNU GPL.

  You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.

  2. Conveying Modified Versions.

  If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:

   a) under this License, provided that you make a good faith effort to
   ensure that, in the event an Application does not supply the
   function or data, the facility still operates, and performs
   whatever part of its purpose remains meaningful, or

   b) under the GNU GPL, with none of the additional permissions of
   this License applicable to that copy.

  3. Object Code Incorporating Material from Library Header Files.

  The object code form of an Application may incorporate material from
a header file that is part of the Library.  You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:

   a) Give prominent notice with each copy of the object code that the
   Library is used in it and that the Library and its use are
   covered by this License.

   b) Accompany the object code with a copy of the GNU GPL and this license
   document.

  4. Combined Works.

  You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:

   a) Give prominent notice with each copy of the Combined Work that
   the Library is used in it and that the Library and its use are
   covered by this License.

   b) Accompany the Combined Work with a copy of the GNU GPL and this license
   document.

   c) For a Combined Work that displays copyright notices during
   execution, include the copyright notice for the Library among
   these notices, as well as a reference directing the user to the
   copies of the GNU GPL and this license document.

   d) Do one of the following:

       0) Convey the Minimal Corresponding Source under the terms of this
       License, and the Corresponding Application Code in a form
       suitable for, and under terms that permit, the user to
       recombine or relink the Application with a modified version of
       the Linked Version to produce a modified Combined Work, in the
       manner specified by section 6 of the GNU GPL for conveying
       Corresponding Source.

       1) Use a suitable shared library mechanism for linking with the
       Library.  A suitable mechanism is one that (a) uses at run time
       a copy of the Library already present on the user's computer
       system, and (b) will operate properly with a modified version
       of the Library that is interface-compatible with the Linked
       Version.

   e) Provide Installation Information, but only if you would otherwise
   be required to provide such information under section 6 of the
   GNU GPL, and only to the extent that such information is
   necessary to install and execute a modified version of the
   Combined Work produced by recombining or relinking the
   Application with a modified version of the Linked Version. (If
   you use option 4d0, the Installation Information must accompany
   the Minimal Corresponding Source and Corresponding Application
   Code. If you use option 4d1, you must provide the Installation
   Information in the manner specified by section 6 of the GNU GPL
   for conveying Corresponding Source.)

  5. Combined Libraries.

  You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:

   a) Accompany the combined library with a copy of the same work based
   on the Library, uncombined with any other library facilities,
   conveyed under the terms of this License.

   b) Give prominent notice with the combined library that part of it
   is a work based on the Library, and explaining where to find the
   accompanying uncombined form of the same work.

  6. Revised Versions of the GNU Lesser General Public License.

  The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.

  Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.

  If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.


================================================
FILE: MODULE_LICENSE_APACHE2
================================================


================================================
FILE: NEWS.md
================================================
tag next
--------------------------------
- ffmpeg: upgrade to 4.0

tag k0.8.8
--------------------------------
- ffmpeg: upgrade to 3.4
- ffmpeg: fix hls some issue
- android: fix seek bug when no audio
- openssl: upgrade to 1.0.2n
- ios: vtb support h265

tag k0.8.7
--------------------------------

tag k0.8.6
--------------------------------
- ijkplayer: fix opengl config error
- ffmpeg: fix a concat issue 

tag k0.8.5
--------------------------------
- ijkplayer: fix opengl config error
- ijkplayer: fix some bug about audio

tag k0.8.4
--------------------------------
- ffmpeg: enable hevc by default
- ijkio: support cache share
- ijkplayer: fix some bug

tag k0.8.3
--------------------------------
- ffmpeg: dns cache refactor
- ijkio: cache support synchronize read avoid frequent lseek
- ijkplayer: fix some bug

tag k0.8.2
--------------------------------
- ffmpeg: fix some bug
- ijkio: update and modify features
- ijkplayer: support don't calculate real frame rate, the first frame will speed up

tag k0.8.1
--------------------------------
- ffmpeg: support dns cache
- ijkio: support inject extra node

tag k0.8.0
--------------------------------
- ffmpeg: upgrade to 3.3
- ffmpeg: enable flac
- android: support sync mediacodec
- android: support framedrop when use mediacodec
- openssl: upgrade to 1.0.2k
- jni4android: upgrade to v0.0.2

tag k0.7.9
--------------------------------
- ffmpeg: add tcp timeout control
- android: support soundtouch

tag k0.7.8
--------------------------------
- ffplay: support accurate seek
- ijkio: fix some issue
- ios: add ijkplayer dynamic target with ssl

tag k0.7.7
--------------------------------
- ffmpeg: enable ijkio protocol
- ffmpeg: avoid some unreasonable pts
- ios: fix a crash caused by videotoolbox sync initialization fail

tag k0.7.6
--------------------------------
- ffmpeg: ass subtitle support
- msg_queue: add resource for msg_queue
- ios: separate vtb sync mode from mixed vtb
- android: fix some thread competition
- android: support setSpeed for pre-M(api<23) versions

tag k0.7.5
--------------------------------
- ffmpeg: disable-asm on architecture x86
- ffmpeg: revert some cutted demuxer and decoder
- ios: add playback volume interface

tag k0.7.4
--------------------------------
- ffplay: fix sample buffer leak introduced in k0.7.1
- doc: add takeoff checklist

tag k0.7.3
--------------------------------
- ios: turn videotoolbox into singleton
- ffmpeg: merge ipv6 issue in tcp.c

tag k0.7.2
-------------------------------
- ios: fix a compile error

tag k0.7.1
-------------------------------
- ffmpeg: upgrade to n3.2

tag k0.6.3
--------------------------------
- ffmpeg: disable clock_gettime added in xcode8
- android: make NDKr13 happy

tag k0.6.2
--------------------------------
- ffmpeg: fix wild pointer when decoder was not found
- player: fix bug introduced in k0.6.0

tag k0.6.1
--------------------------------
- concat: fix crash introduced in k0.6.0
- flvdec: fix seek problem introduced in k0.6.0
- hls: fix regression with ranged media segments

tag k0.6.0
--------------------------------
- openssl: upgrade to 1.0.2h
- ffmpeg: upgrade to n3.1
- MediaCodec: add options to enable resolution change.
- VideoToolbox: add options to enable resolution change.

tag k0.5.1
--------------------------------
- ffmpeg: fix crash introduced in k0.5.0

tag k0.5.0
--------------------------------
- ffmpeg: upgrade to n3.0
- android: support NDKr11

tag k0.4.5
--------------------------------
- ios: support playbackRate change. (iOS 7.0 or later)
- android: support speed change. (Android 6.0 or later)
- player: do not link avfilter by default.
- android: add x86_64 support
- android: move jjk out to jni4android project
- android: support OpenGL ES2 render

tag k0.4.4
--------------------------------
- ios: replace MPMoviePlayerXXX with IJKMPMoviePlayerXXX
- ios: remove target 'IjkMediaPlayer'. 'IjkMediaFramework' should be used instead.
- android: switch ExoPlayer to r1.5.2

tag k0.4.3
--------------------------------
- android: fix several crash when reconfiguring MediaCodec
- android: add jjk to generate API native wrapper
- android: support IMediaDataSource for user to supply media data

tag k0.4.2
--------------------------------
- ios: support Xcode 7
- ios: drop support of iOS 5.x
- ffmpeg: enable libavfilter
- player: limited support of libavfilter
- android: add ExoPlayer as an alternative backend player

tag k0.4.1
--------------------------------
- android: support downloading from jcenter

tag k0.4.0
--------------------------------
- ffmpeg: switch to ffmpeg n2.8

tag k0.3.3
--------------------------------
- player: custom protocol as io hook
- android/sample: support rotation meta (TextureView only)

tag k0.3.2
--------------------------------
- android: drop support of Eclipse
- android: update to SDK 23
- android/sample: better UI
- ios: support SAR
- android/sample: support background play

tag k0.3.1
--------------------------------
- player: key-value options API
- player: remove ijkutil
- build: support cygwin
- ios: optimize performance of VideoToolbox.

tag k0.3.0
--------------------------------
- android: support build with Android Studio / Gradle
- build: improve library fetch
- openssl: switch to openssl 1.0.1o

tag k0.2.4
--------------------------------
- ios: remove armv7s build from default
- player: introduce key-value options
- ios: demo improvement
- ios: support init/play in background.
- ffmpeg: switch to ffmpeg n2.7

tag k0.2.3
--------------------------------
- android: support OpenSL ES
- ios: support NV12 Render
- ios: support VideoToolBox
- ffmpeg: switch to ffmpeg n2.6

tag n0.2.2:
--------------------------------
- ffmpeg: switch to ffmpeg n2.5
- android: fix leak in jni
- player: retrieve media informations

tag n0.2.1:
--------------------------------
- android: support MediaCodec (API 16+)

tag n0.2.0
--------------------------------
- player: fix crash on invalid audio
- android: support build with ndk-r10
- ios: add IJKAVMoviePlayerController based on AVPlayer API
- ios: remove some unused interface
- ios8: fix latency of aout_pause_audio()
- ios8: upgrade project
- ffmpeg: switch to ffmpeg n2.4

tag n0.1.3
--------------------------------
- ffmpeg: switch to ffmpeg n2.2
- player: fix complete/error state handle
- ffmpeg: build with x86_64, armv5
- android: replace vlc-chroma-asm with libyuv

tag n0.1.2:
--------------------------------
- ffmpeg: build with openssl
- player: fix aout leak
- player: reduce memory footprint for I420/YV12 overlay
- ios: snapshot last displayed image

tag n0.1.1:
--------------------------------
- player: remove ugly frame drop trick
- ios: simplify application state handle
- ios: fix 5.1 channel support
- player: handle ffmpeg error
- player: fix leak
- player: improve buffer indicator
- player: drop frame for high fps video

tag n0.1.0:
--------------------------------
- android: replace AbstractMediaPlayer with IMediaPlayer and other misc interfaces
- android: remove list player classes due to lack of regression test
- ios: support build with SDK7
- ffmpeg: switch to n2.1 base
- ios: fix possible block on ijkmp_pause
- ios: set CAEAGLLayer.contentsScale to avoid bad image on retina devices
- ios: fix handle of AudioSession interruption
- ios: add AudioQueue api as replacement of AudioUnit api
- ijksdl: fix non-I420 pixel-format support
- player: improve late packet/frame dropping
- player: prefer h264 stream if multiple video stream exists

tag n0.0.6:
--------------------------------
- android: fix NativeWindow leak
- ios: fix a deadlock related to AudioUnit
- ios: support ffmpeg concat playback
- ios: add ffmpeg options methods
- android: limait audio sample-rate to 4kHz~48kHz
- ios: fix gles texture alignment

tag n0.0.5:
--------------------------------
- build: disable -fmodulo-sched -fmodulo-sched-allow-regmoves, may crash on gcc4.7~4.8
- player: support ios
- ijksdl: support ios gles2 video output
- ijksdl: support ios AudioUnit audio output
- build: add android/ios sub directory
- player: fix some dead lock
- build: use shell scripts instead of git-submodule
- android: use RV32 as default chroma

tag n0.0.4:
--------------------------------
- ffmpeg: enable ac3
- android: target API-18
- build: switch to NDKr9 gcc4.8 toolchain

tag n0.0.3:
--------------------------------
- ffmpeg: switch to tag n2.0
- ffmpeg: remove rarely used decoders, parsers, demuxers
- avformat/hls: fix many bugs
- avformat/http: support reading compressed data
- avformat/mov: optimize short seek
- player: fix AudioTrack latency
- player: refactor play/pause/step/buffering logic
- player: fix A/V sync
- yuv2rgb: treat YUVJ420P as YUV420P
- yuv2rgb: support zero copy of YUV420P frame output to YV12 surface
- ijksdl: fix SDL_GetTickHR() returns wrong time 


================================================
FILE: NOTICE
================================================

   Copyright (c) 2005-2008, The Android Open Source Project

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS



================================================
FILE: README.md
================================================
# ijkplayer

 Platform | Build Status
 -------- | ------------
 Android | [![Build Status](https://travis-ci.org/Bilibili/ci-ijk-ffmpeg-android.svg?branch=master)](https://travis-ci.org/Bilibili/ci-ijk-ffmpeg-android)
 iOS | [![Build Status](https://travis-ci.org/Bilibili/ci-ijk-ffmpeg-ios.svg?branch=master)](https://travis-ci.org/Bilibili/ci-ijk-ffmpeg-ios)

Video player based on [ffplay](http://ffmpeg.org)

### Download

- Android:
 - Gradle
```
# required
allprojects {
    repositories {
        jcenter()
    }
}

dependencies {
    # required, enough for most devices.
    compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
    compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'

    # Other ABIs: optional
    compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8'
    compile 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8'
    compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8'
    compile 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.8'

    # ExoPlayer as IMediaPlayer: optional, experimental
    compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.8'
}
```
- iOS
 - in coming...

### My Build Environment
- Common
 - Mac OS X 10.11.5
- Android
 - [NDK r10e](http://developer.android.com/tools/sdk/ndk/index.html)
 - Android Studio 2.1.3
 - Gradle 2.14.1
- iOS
 - Xcode 7.3 (7D175)
- [HomeBrew](http://brew.sh)
 - ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
 - brew install git

### Latest Changes
- [NEWS.md](NEWS.md)

### Features
- Common
 - remove rarely used ffmpeg components to reduce binary size [config/module-lite.sh](config/module-lite.sh)
 - workaround for some buggy online video.
- Android
 - platform: API 9~23
 - cpu: ARMv7a, ARM64v8a, x86 (ARMv5 is not tested on real devices)
 - api: [MediaPlayer-like](android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/IMediaPlayer.java)
 - video-output: NativeWindow, OpenGL ES 2.0
 - audio-output: AudioTrack, OpenSL ES
 - hw-decoder: MediaCodec (API 16+, Android 4.1+)
 - alternative-backend: android.media.MediaPlayer, ExoPlayer
- iOS
 - platform: iOS 7.0~10.2.x
 - cpu: armv7, arm64, i386, x86_64, (armv7s is obselete)
 - api: [MediaPlayer.framework-like](ios/IJKMediaPlayer/IJKMediaPlayer/IJKMediaPlayback.h)
 - video-output: OpenGL ES 2.0
 - audio-output: AudioQueue, AudioUnit
 - hw-decoder: VideoToolbox (iOS 8+)
 - alternative-backend: AVFoundation.Framework.AVPlayer, MediaPlayer.Framework.MPMoviePlayerControlelr (obselete since iOS 8)

### NOT-ON-PLAN
- obsolete platforms (Android: API-8 and below; iOS: pre-6.0)
- obsolete cpu: ARMv5, ARMv6, MIPS (I don't even have these types of devices…)
- native subtitle render
- avfilter support

### Before Build
```
# install homebrew, git, yasm
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install git
brew install yasm

# add these lines to your ~/.bash_profile or ~/.profile
# export ANDROID_SDK=<your sdk path>
# export ANDROID_NDK=<your ndk path>

# on Cygwin (unmaintained)
# install git, make, yasm
```

- If you prefer more codec/format
```
cd config
rm module.sh
ln -s module-default.sh module.sh
cd android/contrib
# cd ios
sh compile-ffmpeg.sh clean
```

- If you prefer less codec/format for smaller binary size (include hevc function)
```
cd config
rm module.sh
ln -s module-lite-hevc.sh module.sh
cd android/contrib
# cd ios
sh compile-ffmpeg.sh clean
```

- If you prefer less codec/format for smaller binary size (by default)
```
cd config
rm module.sh
ln -s module-lite.sh module.sh
cd android/contrib
# cd ios
sh compile-ffmpeg.sh clean
```

- For Ubuntu/Debian users.
```
# choose [No] to use bash
sudo dpkg-reconfigure dash
```

- If you'd like to share your config, pull request is welcome.

### Build Android
```
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
cd ijkplayer-android
git checkout -B latest k0.8.8

./init-android.sh

cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all

cd ..
./compile-ijk.sh all

# Android Studio:
#     Open an existing Android Studio project
#     Select android/ijkplayer/ and import
#
#     define ext block in your root build.gradle
#     ext {
#       compileSdkVersion = 23       // depending on your sdk version
#       buildToolsVersion = "23.0.0" // depending on your build tools version
#
#       targetSdkVersion = 23        // depending on your sdk version
#     }
#
# If you want to enable debugging ijkplayer(native modules) on Android Studio 2.2+: (experimental)
#     sh android/patch-debugging-with-lldb.sh armv7a
#     Install Android Studio 2.2(+)
#     Preference -> Android SDK -> SDK Tools
#     Select (LLDB, NDK, Android SDK Build-tools,Cmake) and install
#     Open an existing Android Studio project
#     Select android/ijkplayer
#     Sync Project with Gradle Files
#     Run -> Edit Configurations -> Debugger -> Symbol Directories
#     Add "ijkplayer-armv7a/.externalNativeBuild/ndkBuild/release/obj/local/armeabi-v7a" to Symbol Directories
#     Run -> Debug 'ijkplayer-example'
#     if you want to reverse patches:
#     sh patch-debugging-with-lldb.sh reverse armv7a
#
# Eclipse: (obselete)
#     File -> New -> Project -> Android Project from Existing Code
#     Select android/ and import all project
#     Import appcompat-v7
#     Import preference-v7
#
# Gradle
#     cd ijkplayer
#     gradle

```


### Build iOS
```
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios
cd ijkplayer-ios
git checkout -B latest k0.8.8

./init-ios.sh

cd ios
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all

# Demo
#     open ios/IJKMediaDemo/IJKMediaDemo.xcodeproj with Xcode
# 
# Import into Your own Application
#     Select your project in Xcode.
#     File -> Add Files to ... -> Select ios/IJKMediaPlayer/IJKMediaPlayer.xcodeproj
#     Select your Application's target.
#     Build Phases -> Target Dependencies -> Select IJKMediaFramework
#     Build Phases -> Link Binary with Libraries -> Add:
#         IJKMediaFramework.framework
#
#         AudioToolbox.framework
#         AVFoundation.framework
#         CoreGraphics.framework
#         CoreMedia.framework
#         CoreVideo.framework
#         libbz2.tbd
#         libz.tbd
#         MediaPlayer.framework
#         MobileCoreServices.framework
#         OpenGLES.framework
#         QuartzCore.framework
#         UIKit.framework
#         VideoToolbox.framework
#
#         ... (Maybe something else, if you get any link error)
# 
```


### Support (支持) ###
- Please do not send e-mail to me. Public technical discussion on github is preferred.
- 请尽量在 github 上公开讨论[技术问题](https://github.com/bilibili/ijkplayer/issues),不要以邮件方式私下询问,恕不一一回复。


### License

```
Copyright (c) 2017 Bilibili
Licensed under LGPLv2.1 or later
```

ijkplayer required features are based on or derives from projects below:
- LGPL
  - [FFmpeg](http://git.videolan.org/?p=ffmpeg.git)
  - [libVLC](http://git.videolan.org/?p=vlc.git)
  - [kxmovie](https://github.com/kolyvan/kxmovie)
  - [soundtouch](http://www.surina.net/soundtouch/sourcecode.html)
- zlib license
  - [SDL](http://www.libsdl.org)
- BSD-style license
  - [libyuv](https://code.google.com/p/libyuv/)
- ISC license
  - [libyuv/source/x86inc.asm](https://code.google.com/p/libyuv/source/browse/trunk/source/x86inc.asm)

android/ijkplayer-exo is based on or derives from projects below:
- Apache License 2.0
  - [ExoPlayer](https://github.com/google/ExoPlayer)

android/example is based on or derives from projects below:
- GPL
  - [android-ndk-profiler](https://github.com/richq/android-ndk-profiler) (not included by default)

ios/IJKMediaDemo is based on or derives from projects below:
- Unknown license
  - [iOS7-BarcodeScanner](https://github.com/jpwiddy/iOS7-BarcodeScanner)

ijkplayer's build scripts are based on or derives from projects below:
- [gas-preprocessor](http://git.libav.org/?p=gas-preprocessor.git)
- [VideoLAN](http://git.videolan.org)
- [yixia/FFmpeg-Android](https://github.com/yixia/FFmpeg-Android)
- [kewlbear/FFmpeg-iOS-build-script](https://github.com/kewlbear/FFmpeg-iOS-build-script) 

### Commercial Use
ijkplayer is licensed under LGPLv2.1 or later, so itself is free for commercial use under LGPLv2.1 or later

But ijkplayer is also based on other different projects under various licenses, which I have no idea whether they are compatible to each other or to your product.

[IANAL](https://en.wikipedia.org/wiki/IANAL), you should always ask your lawyer for these stuffs before use it in your product.


================================================
FILE: android/.gitignore
================================================
#--------------------
# Android.gitignore
# https://github.com/github/gitignore/blob/master/Android.gitignore
#--------------------
# Built application files
*.apk
*.ap_

# Files for the Dalvik VM
*.dex

# Java class files
*.class

# Generated files
bin/
gen/

# Gradle files
.gradle/
build/

# Local configuration file (sdk path, etc)
local.properties

# Proguard folder generated by Eclipse
proguard/

# Log Files
*.log

#--------------------
# Gradle.gitignore
# https://github.com/github/gitignore/blob/master/Gradle.gitignore
#--------------------
.gradle
build/

# Ignore Gradle GUI config
gradle-app.setting

# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
!gradle-wrapper.jar


#--------------------
# Android Studio .gitignore
# https://gist.github.com/iainconnor/8605514
#--------------------
# Built application files
/*/build/
 
# Crashlytics configuations
com_crashlytics_export_strings.xml
 
# Local configuration file (sdk path, etc)
local.properties
 
# Gradle generated files
.gradle/
 
# Signing files
.signing/
 
# User-specific configurations
.idea/libraries/
.idea/workspace.xml
.idea/tasks.xml
.idea/.name
.idea/compiler.xml
.idea/copyright/profiles_settings.xml
.idea/encodings.xml
.idea/misc.xml
.idea/modules.xml
.idea/scopes/scope_settings.xml
.idea/vcs.xml
*.iml
 
# OS-specific files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db


================================================
FILE: android/build-on-travis.sh
================================================
#! /usr/bin/env bash
#
# Copyright (C) 2013-2014 Bilibili
# Copyright (C) 2013-2014 Zhang Rui <bbcallen@gmail.com>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

set -e

if [ -z "$ANDROID_NDK" -o -z "$ANDROID_NDK" ]; then
    echo "You must define ANDROID_NDK, ANDROID_SDK before starting."
    echo "They must point to your NDK and SDK directories.\n"
    exit 1
fi


REQUEST_TARGET=$1
ACT_ABI_32="armv5 armv7a x86"
ACT_ABI_64="armv5 armv7a arm64 x86 x86_64"
ACT_ABI_ALL=$ACT_ABI_64


IJK_VERSION=`../version.sh show`



wget_uploaded_version() {
    PARAM_TARGET=$1

    VERSION_URL="https://jcenter.bintray.com/tv/danmaku/ijk/media/ijkplayer-$PARAM_TARGET/$IJK_VERSION"
    echo "VERSION_URL="$VERSION_URL
    wget $VERSION_URL -O /dev/null
}

do_build_native() {
    PARAM_TARGET=$1

    wget_uploaded_version $PARAM_TARGET && echo "ijkplayer-$PARAM_TARGET $IJK_VERSION already uploaded, skip..." && return 0

    cd contrib
    ./compile-ffmpeg.sh $PARAM_TARGET
    cd ..
    ./compile-ijk.sh $PARAM_TARGET
    cd ijkplayer
    ./gradlew :ijkplayer-$PARAM_TARGET:bintrayUpload
    cd ..
}

do_build_java() {
    wget_uploaded_version java && echo "ijkplayer-$PARAM_TARGET $IJK_VERSION already uploaded, skip..." && return 0

    cd ijkplayer
    ./gradlew :ijkplayer-java:bintrayUpload
    cd ..
}

do_build_exo() {
    wget_uploaded_version exo && echo "ijkplayer-$PARAM_TARGET $IJK_VERSION already uploaded, skip..." && return 0

    cd ijkplayer
    ./gradlew :ijkplayer-exo:bintrayUpload
    cd ..
}

case "$REQUEST_TARGET" in
    armv5|armv7a|arm64|x86|x86_64)
        do_build_native $REQUEST_TARGET
    ;;
    java)
        do_build_java
    ;;
    exo)
        do_build_exo
    ;;
    all32)
        do_build_java
        for ABI in $ACT_ABI_32
        do
            do_build_native "$ABI";
        done
        do_build_exo
    ;;
    all|all64)
        do_build_java
        for ABI in $ACT_ABI_64
        do
            do_build_native "$ABI";
        done
        do_build_exo
    ;;
    *)
        echo "Usage:"
        echo "  build-on-travis.sh armv5|armv7a|arm64|x86|x86_64"
        echo "  build-on-travis.sh java"
        echo "  build-on-travis.sh exo"
        echo "  build-on-travis.sh all|all32"
        echo "  build-on-travis.sh all64"
    ;;
esac



================================================
FILE: android/compile-ijk.sh
================================================
#! /usr/bin/env bash
#
# Copyright (C) 2013-2014 Bilibili
# Copyright (C) 2013-2014 Zhang Rui <bbcallen@gmail.com>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

if [ -z "$ANDROID_NDK" -o -z "$ANDROID_NDK" ]; then
    echo "You must define ANDROID_NDK, ANDROID_SDK before starting."
    echo "They must point to your NDK and SDK directories.\n"
    exit 1
fi

REQUEST_TARGET=$1
REQUEST_SUB_CMD=$2
ACT_ABI_32="armv5 armv7a x86"
ACT_ABI_64="armv5 armv7a arm64 x86 x86_64"
ACT_ABI_ALL=$ACT_ABI_64
UNAME_S=$(uname -s)

FF_MAKEFLAGS=
if which nproc >/dev/null
then
    FF_MAKEFLAGS=-j`nproc`
elif [ "$UNAME_S" = "Darwin" ] && which sysctl >/dev/null
then
    FF_MAKEFLAGS=-j`sysctl -n machdep.cpu.thread_count`
fi

do_sub_cmd () {
    SUB_CMD=$1
    if [ -L "./android-ndk-prof" ]; then
        rm android-ndk-prof
    fi

    if [ "$PARAM_SUB_CMD" = 'prof' ]; then
        echo 'profiler build: YES';
        ln -s ../../../../../../ijkprof/android-ndk-profiler/jni android-ndk-prof
    else
        echo 'profiler build: NO';
        ln -s ../../../../../../ijkprof/android-ndk-profiler-dummy/jni android-ndk-prof
    fi

    case $SUB_CMD in
        prof)
            $ANDROID_NDK/ndk-build $FF_MAKEFLAGS
        ;;
        clean)
            $ANDROID_NDK/ndk-build clean
        ;;
        rebuild)
            $ANDROID_NDK/ndk-build clean
            $ANDROID_NDK/ndk-build $FF_MAKEFLAGS
        ;;
        *)
            $ANDROID_NDK/ndk-build $FF_MAKEFLAGS
        ;;
    esac
}

do_ndk_build () {
    PARAM_TARGET=$1
    PARAM_SUB_CMD=$2
    case "$PARAM_TARGET" in
        armv5|armv7a)
            cd "ijkplayer/ijkplayer-$PARAM_TARGET/src/main/jni"
            do_sub_cmd $PARAM_SUB_CMD
            cd -
        ;;
        arm64|x86|x86_64)
            cd "ijkplayer/ijkplayer-$PARAM_TARGET/src/main/jni"
            if [ "$PARAM_SUB_CMD" = 'prof' ]; then PARAM_SUB_CMD=''; fi
            do_sub_cmd $PARAM_SUB_CMD
            cd -
        ;;
    esac
}


case "$REQUEST_TARGET" in
    "")
        do_ndk_build armv7a;
    ;;
    armv5|armv7a|arm64|x86|x86_64)
        do_ndk_build $REQUEST_TARGET $REQUEST_SUB_CMD;
    ;;
    all32)
        for ABI in $ACT_ABI_32
        do
            do_ndk_build "$ABI" $REQUEST_SUB_CMD;
        done
    ;;
    all|all64)
        for ABI in $ACT_ABI_64
        do
            do_ndk_build "$ABI" $REQUEST_SUB_CMD;
        done
    ;;
    clean)
        for ABI in $ACT_ABI_ALL
        do
            do_ndk_build "$ABI" clean;
        done
    ;;
    *)
        echo "Usage:"
        echo "  compile-ijk.sh armv5|armv7a|arm64|x86|x86_64"
        echo "  compile-ijk.sh all|all32"
        echo "  compile-ijk.sh all64"
        echo "  compile-ijk.sh clean"
    ;;
esac



================================================
FILE: android/contrib/.gitignore
================================================
build
ffmpeg-*
libsoxr-*
openssl-*


================================================
FILE: android/contrib/compile-ffmpeg.sh
================================================
#! /usr/bin/env bash
#
# Copyright (C) 2013-2014 Zhang Rui <bbcallen@gmail.com>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# This script is based on projects below
# https://github.com/yixia/FFmpeg-Android
# http://git.videolan.org/?p=vlc-ports/android.git;a=summary

#----------
UNI_BUILD_ROOT=`pwd`
FF_TARGET=$1
FF_TARGET_EXTRA=$2
set -e
set +x

FF_ACT_ARCHS_32="armv5 armv7a x86"
FF_ACT_ARCHS_64="armv5 armv7a arm64 x86 x86_64"
FF_ACT_ARCHS_ALL=$FF_ACT_ARCHS_64

echo_archs() {
    echo "===================="
    echo "[*] check archs"
    echo "===================="
    echo "FF_ALL_ARCHS = $FF_ACT_ARCHS_ALL"
    echo "FF_ACT_ARCHS = $*"
    echo ""
}

echo_usage() {
    echo "Usage:"
    echo "  compile-ffmpeg.sh armv5|armv7a|arm64|x86|x86_64"
    echo "  compile-ffmpeg.sh all|all32"
    echo "  compile-ffmpeg.sh all64"
    echo "  compile-ffmpeg.sh clean"
    echo "  compile-ffmpeg.sh check"
    exit 1
}

echo_nextstep_help() {
    echo ""
    echo "--------------------"
    echo "[*] Finished"
    echo "--------------------"
    echo "# to continue to build ijkplayer, run script below,"
    echo "sh compile-ijk.sh "
}

#----------
case "$FF_TARGET" in
    "")
        echo_archs armv7a
        sh tools/do-compile-ffmpeg.sh armv7a
    ;;
    armv5|armv7a|arm64|x86|x86_64)
        echo_archs $FF_TARGET $FF_TARGET_EXTRA
        sh tools/do-compile-ffmpeg.sh $FF_TARGET $FF_TARGET_EXTRA
        echo_nextstep_help
    ;;
    all32)
        echo_archs $FF_ACT_ARCHS_32
        for ARCH in $FF_ACT_ARCHS_32
        do
            sh tools/do-compile-ffmpeg.sh $ARCH $FF_TARGET_EXTRA
        done
        echo_nextstep_help
    ;;
    all|all64)
        echo_archs $FF_ACT_ARCHS_64
        for ARCH in $FF_ACT_ARCHS_64
        do
            sh tools/do-compile-ffmpeg.sh $ARCH $FF_TARGET_EXTRA
        done
        echo_nextstep_help
    ;;
    clean)
        echo_archs FF_ACT_ARCHS_64
        for ARCH in $FF_ACT_ARCHS_ALL
        do
            if [ -d ffmpeg-$ARCH ]; then
                cd ffmpeg-$ARCH && git clean -xdf && cd -
            fi
        done
        rm -rf ./build/ffmpeg-*
    ;;
    check)
        echo_archs FF_ACT_ARCHS_ALL
    ;;
    *)
        echo_usage
        exit 1
    ;;
esac


================================================
FILE: android/contrib/compile-libsoxr.sh
================================================
#! /usr/bin/env bash
#
# Copyright (C) 2013-2014 Zhang Rui <bbcallen@gmail.com>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

#----------
UNI_BUILD_ROOT=`pwd`
FF_TARGET=$1
set -e
set +x

FF_ACT_ARCHS_32="armv5 armv7a x86"
FF_ACT_ARCHS_64="armv5 armv7a arm64 x86 x86_64"
FF_ACT_ARCHS_ALL=$FF_ACT_ARCHS_64

echo_archs() {
    echo "===================="
    echo "[*] check archs"
    echo "===================="
    echo "FF_ALL_ARCHS = $FF_ACT_ARCHS_ALL"
    echo "FF_ACT_ARCHS = $*"
    echo ""
}

echo_usage() {
    echo "Usage:"
    echo "  compile-libsoxr.sh armv5|armv7a|arm64|x86|x86_64"
    echo "  compile-libsoxr.sh all|all32"
    echo "  compile-libsoxr.sh all64"
    echo "  compile-libsoxr.sh clean"
    echo "  compile-libsoxr.sh check"
    exit 1
}

echo_nextstep_help() {
    #----------
    echo ""
    echo "--------------------"
    echo "[*] Finished"
    echo "--------------------"
    echo "# to continue to build ffmpeg, run script below,"
    echo "sh compile-ffmpeg.sh "
    echo "# to continue to build ijkplayer, run script below,"
    echo "sh compile-ijk.sh "
}

#----------
case "$FF_TARGET" in
    "")
        echo_archs armv7a
        sh tools/do-compile-libsoxr.sh armv7a
    ;;
    armv5|armv7a|arm64|x86|x86_64)
        echo_archs $FF_TARGET
        sh tools/do-compile-libsoxr.sh $FF_TARGET
        echo_nextstep_help
    ;;
    all32)
        echo_archs $FF_ACT_ARCHS_32
        for ARCH in $FF_ACT_ARCHS_32
        do
            sh tools/do-compile-libsoxr.sh $ARCH
        done
        echo_nextstep_help
    ;;
    all|all64)
        echo_archs $FF_ACT_ARCHS_64
        for ARCH in $FF_ACT_ARCHS_64
        do
            sh tools/do-compile-libsoxr.sh $ARCH
        done
        echo_nextstep_help
    ;;
    clean)
        echo_archs FF_ACT_ARCHS_64
        for ARCH in $FF_ACT_ARCHS_ALL
        do
            if [ -d libsoxr-$ARCH ]; then
                cd libsoxr-$ARCH && git clean -xdf && cd -
            fi
        done
        rm -rf ./build/libsoxr-*
    ;;
    check)
        echo_archs FF_ACT_ARCHS_ALL
    ;;
    *)
        echo_usage
        exit 1
    ;;
esac


================================================
FILE: android/contrib/compile-openssl.sh
================================================
#! /usr/bin/env bash
#
# Copyright (C) 2013-2014 Zhang Rui <bbcallen@gmail.com>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

#----------
UNI_BUILD_ROOT=`pwd`
FF_TARGET=$1
set -e
set +x

FF_ACT_ARCHS_32="armv5 armv7a x86"
FF_ACT_ARCHS_64="armv5 armv7a arm64 x86 x86_64"
FF_ACT_ARCHS_ALL=$FF_ACT_ARCHS_64

echo_archs() {
    echo "===================="
    echo "[*] check archs"
    echo "===================="
    echo "FF_ALL_ARCHS = $FF_ACT_ARCHS_ALL"
    echo "FF_ACT_ARCHS = $*"
    echo ""
}

echo_usage() {
    echo "Usage:"
    echo "  compile-openssl.sh armv5|armv7a|arm64|x86|x86_64"
    echo "  compile-openssl.sh all|all32"
    echo "  compile-openssl.sh all64"
    echo "  compile-openssl.sh clean"
    echo "  compile-openssl.sh check"
    exit 1
}

echo_nextstep_help() {
    #----------
    echo ""
    echo "--------------------"
    echo "[*] Finished"
    echo "--------------------"
    echo "# to continue to build ffmpeg, run script below,"
    echo "sh compile-ffmpeg.sh "
    echo "# to continue to build ijkplayer, run script below,"
    echo "sh compile-ijk.sh "
}

#----------
case "$FF_TARGET" in
    "")
        echo_archs armv7a
        sh tools/do-compile-openssl.sh armv7a
    ;;
    armv5|armv7a|arm64|x86|x86_64)
        echo_archs $FF_TARGET
        sh tools/do-compile-openssl.sh $FF_TARGET
        echo_nextstep_help
    ;;
    all32)
        echo_archs $FF_ACT_ARCHS_32
        for ARCH in $FF_ACT_ARCHS_32
        do
            sh tools/do-compile-openssl.sh $ARCH
        done
        echo_nextstep_help
    ;;
    all|all64)
        echo_archs $FF_ACT_ARCHS_64
        for ARCH in $FF_ACT_ARCHS_64
        do
            sh tools/do-compile-openssl.sh $ARCH
        done
        echo_nextstep_help
    ;;
    clean)
        echo_archs FF_ACT_ARCHS_64
        for ARCH in $FF_ACT_ARCHS_ALL
        do
            if [ -d openssl-$ARCH ]; then
                cd openssl-$ARCH && git clean -xdf && cd -
            fi
        done
        rm -rf ./build/openssl-*
    ;;
    check)
        echo_archs FF_ACT_ARCHS_ALL
    ;;
    *)
        echo_usage
        exit 1
    ;;
esac


================================================
FILE: android/contrib/setup-as-commiter.sh
================================================
#! /usr/bin/env bash
#
# Copyright (C) 2013-2014 Zhang Rui <bbcallen@gmail.com>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

cd ffmpeg-armv7a

git remote set-url --push origin git@github.com:bbcallen/FFmpeg.git

git remote add ffmpeg git://source.ffmpeg.org/ffmpeg.git
git remote add libav git://git.libav.org/libav.git
git remote add chromium https://chromium.googlesource.com/chromium/third_party/ffmpeg
git remote add gitcafe git@gitcafe.com:bbcallen/FFmpeg.git
git remote add oschina git@git.oschina.net:bbcallen/ffmpeg.git
git remote add csdn git@code.csdn.net:bbcallen/FFmpeg.git
git fetch --all

git branch --track ffmpeg ffmpeg/master
git branch --track libav libav/master
git branch --track chromium chromium/master


================================================
FILE: android/contrib/sync-mirrors.sh
================================================
#! /usr/bin/env bash
#
# Copyright (C) 2013-2014 Zhang Rui <bbcallen@gmail.com>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

cd ffmpeg-armv7a

git checkout ffmpeg
git pull
git checkout -

git checkout libav
git pull
git checkout -

git checkout master
git pull
git merge ffmpeg
git checkout -

git push origin --all --follow-tags
git push gitcafe --all --follow-tags
git push oschina --all --follow-tags
git push csdn --all --follow-tags

cd -


================================================
FILE: android/contrib/tools/do-compile-ffmpeg.sh
================================================
#! /usr/bin/env bash
#
# Copyright (C) 2013-2014 Zhang Rui <bbcallen@gmail.com>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# This script is based on projects below
# https://github.com/yixia/FFmpeg-Android
# http://git.videolan.org/?p=vlc-ports/android.git;a=summary

#--------------------
echo "===================="
echo "[*] check env $1"
echo "===================="
set -e


#--------------------
# common defines
FF_ARCH=$1
FF_BUILD_OPT=$2
echo "FF_ARCH=$FF_ARCH"
echo "FF_BUILD_OPT=$FF_BUILD_OPT"
if [ -z "$FF_ARCH" ]; then
    echo "You must specific an architecture 'arm, armv7a, x86, ...'."
    echo ""
    exit 1
fi


FF_BUILD_ROOT=`pwd`
FF_ANDROID_PLATFORM=android-9


FF_BUILD_NAME=
FF_SOURCE=
FF_CROSS_PREFIX=
FF_DEP_OPENSSL_INC=
FF_DEP_OPENSSL_LIB=

FF_DEP_LIBSOXR_INC=
FF_DEP_LIBSOXR_LIB=

FF_CFG_FLAGS=

FF_EXTRA_CFLAGS=
FF_EXTRA_LDFLAGS=
FF_DEP_LIBS=

FF_MODULE_DIRS="compat libavcodec libavfilter libavformat libavutil libswresample libswscale"
FF_ASSEMBLER_SUB_DIRS=


#--------------------
echo ""
echo "--------------------"
echo "[*] make NDK standalone toolchain"
echo "--------------------"
. ./tools/do-detect-env.sh
FF_MAKE_TOOLCHAIN_FLAGS=$IJK_MAKE_TOOLCHAIN_FLAGS
FF_MAKE_FLAGS=$IJK_MAKE_FLAG
FF_GCC_VER=$IJK_GCC_VER
FF_GCC_64_VER=$IJK_GCC_64_VER


#----- armv7a begin -----
if [ "$FF_ARCH" = "armv7a" ]; then
    FF_BUILD_NAME=ffmpeg-armv7a
    FF_BUILD_NAME_OPENSSL=openssl-armv7a
    FF_BUILD_NAME_LIBSOXR=libsoxr-armv7a
    FF_SOURCE=$FF_BUILD_ROOT/$FF_BUILD_NAME

    FF_CROSS_PREFIX=arm-linux-androideabi
    FF_TOOLCHAIN_NAME=${FF_CROSS_PREFIX}-${FF_GCC_VER}

    FF_CFG_FLAGS="$FF_CFG_FLAGS --arch=arm --cpu=cortex-a8"
    FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-neon"
    FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-thumb"

    FF_EXTRA_CFLAGS="$FF_EXTRA_CFLAGS -march=armv7-a -mcpu=cortex-a8 -mfpu=vfpv3-d16 -mfloat-abi=softfp -mthumb"
    FF_EXTRA_LDFLAGS="$FF_EXTRA_LDFLAGS -Wl,--fix-cortex-a8"

    FF_ASSEMBLER_SUB_DIRS="arm"

elif [ "$FF_ARCH" = "armv5" ]; then
    FF_BUILD_NAME=ffmpeg-armv5
    FF_BUILD_NAME_OPENSSL=openssl-armv5
    FF_BUILD_NAME_LIBSOXR=libsoxr-armv5
    FF_SOURCE=$FF_BUILD_ROOT/$FF_BUILD_NAME

    FF_CROSS_PREFIX=arm-linux-androideabi
    FF_TOOLCHAIN_NAME=${FF_CROSS_PREFIX}-${FF_GCC_VER}

    FF_CFG_FLAGS="$FF_CFG_FLAGS --arch=arm"

    FF_EXTRA_CFLAGS="$FF_EXTRA_CFLAGS -march=armv5te -mtune=arm9tdmi -msoft-float"
    FF_EXTRA_LDFLAGS="$FF_EXTRA_LDFLAGS"

    FF_ASSEMBLER_SUB_DIRS="arm"

elif [ "$FF_ARCH" = "x86" ]; then
    FF_BUILD_NAME=ffmpeg-x86
    FF_BUILD_NAME_OPENSSL=openssl-x86
    FF_BUILD_NAME_LIBSOXR=libsoxr-x86
    FF_SOURCE=$FF_BUILD_ROOT/$FF_BUILD_NAME

    FF_CROSS_PREFIX=i686-linux-android
    FF_TOOLCHAIN_NAME=x86-${FF_GCC_VER}

    FF_CFG_FLAGS="$FF_CFG_FLAGS --arch=x86 --cpu=i686 --enable-yasm"

    FF_EXTRA_CFLAGS="$FF_EXTRA_CFLAGS -march=atom -msse3 -ffast-math -mfpmath=sse"
    FF_EXTRA_LDFLAGS="$FF_EXTRA_LDFLAGS"

    FF_ASSEMBLER_SUB_DIRS="x86"

elif [ "$FF_ARCH" = "x86_64" ]; then
    FF_ANDROID_PLATFORM=android-21

    FF_BUILD_NAME=ffmpeg-x86_64
    FF_BUILD_NAME_OPENSSL=openssl-x86_64
    FF_BUILD_NAME_LIBSOXR=libsoxr-x86_64
    FF_SOURCE=$FF_BUILD_ROOT/$FF_BUILD_NAME

    FF_CROSS_PREFIX=x86_64-linux-android
    FF_TOOLCHAIN_NAME=${FF_CROSS_PREFIX}-${FF_GCC_64_VER}

    FF_CFG_FLAGS="$FF_CFG_FLAGS --arch=x86_64 --enable-yasm"

    FF_EXTRA_CFLAGS="$FF_EXTRA_CFLAGS"
    FF_EXTRA_LDFLAGS="$FF_EXTRA_LDFLAGS"

    FF_ASSEMBLER_SUB_DIRS="x86"

elif [ "$FF_ARCH" = "arm64" ]; then
    FF_ANDROID_PLATFORM=android-21

    FF_BUILD_NAME=ffmpeg-arm64
    FF_BUILD_NAME_OPENSSL=openssl-arm64
    FF_BUILD_NAME_LIBSOXR=libsoxr-arm64
    FF_SOURCE=$FF_BUILD_ROOT/$FF_BUILD_NAME

    FF_CROSS_PREFIX=aarch64-linux-android
    FF_TOOLCHAIN_NAME=${FF_CROSS_PREFIX}-${FF_GCC_64_VER}

    FF_CFG_FLAGS="$FF_CFG_FLAGS --arch=aarch64 --enable-yasm"

    FF_EXTRA_CFLAGS="$FF_EXTRA_CFLAGS"
    FF_EXTRA_LDFLAGS="$FF_EXTRA_LDFLAGS"

    FF_ASSEMBLER_SUB_DIRS="aarch64 neon"

else
    echo "unknown architecture $FF_ARCH";
    exit 1
fi

if [ ! -d $FF_SOURCE ]; then
    echo ""
    echo "!! ERROR"
    echo "!! Can not find FFmpeg directory for $FF_BUILD_NAME"
    echo "!! Run 'sh init-android.sh' first"
    echo ""
    exit 1
fi

FF_TOOLCHAIN_PATH=$FF_BUILD_ROOT/build/$FF_BUILD_NAME/toolchain
FF_MAKE_TOOLCHAIN_FLAGS="$FF_MAKE_TOOLCHAIN_FLAGS --install-dir=$FF_TOOLCHAIN_PATH"

FF_SYSROOT=$FF_TOOLCHAIN_PATH/sysroot
FF_PREFIX=$FF_BUILD_ROOT/build/$FF_BUILD_NAME/output
FF_DEP_OPENSSL_INC=$FF_BUILD_ROOT/build/$FF_BUILD_NAME_OPENSSL/output/include
FF_DEP_OPENSSL_LIB=$FF_BUILD_ROOT/build/$FF_BUILD_NAME_OPENSSL/output/lib
FF_DEP_LIBSOXR_INC=$FF_BUILD_ROOT/build/$FF_BUILD_NAME_LIBSOXR/output/include
FF_DEP_LIBSOXR_LIB=$FF_BUILD_ROOT/build/$FF_BUILD_NAME_LIBSOXR/output/lib

case "$UNAME_S" in
    CYGWIN_NT-*)
        FF_SYSROOT="$(cygpath -am $FF_SYSROOT)"
        FF_PREFIX="$(cygpath -am $FF_PREFIX)"
    ;;
esac


mkdir -p $FF_PREFIX
# mkdir -p $FF_SYSROOT


FF_TOOLCHAIN_TOUCH="$FF_TOOLCHAIN_PATH/touch"
if [ ! -f "$FF_TOOLCHAIN_TOUCH" ]; then
    $ANDROID_NDK/build/tools/make-standalone-toolchain.sh \
        $FF_MAKE_TOOLCHAIN_FLAGS \
        --platform=$FF_ANDROID_PLATFORM \
        --toolchain=$FF_TOOLCHAIN_NAME
    touch $FF_TOOLCHAIN_TOUCH;
fi


#--------------------
echo ""
echo "--------------------"
echo "[*] check ffmpeg env"
echo "--------------------"
export PATH=$FF_TOOLCHAIN_PATH/bin/:$PATH
#export CC="ccache ${FF_CROSS_PREFIX}-gcc"
export CC="${FF_CROSS_PREFIX}-gcc"
export LD=${FF_CROSS_PREFIX}-ld
export AR=${FF_CROSS_PREFIX}-ar
export STRIP=${FF_CROSS_PREFIX}-strip

FF_CFLAGS="-O3 -Wall -pipe \
    -std=c99 \
    -ffast-math \
    -fstrict-aliasing -Werror=strict-aliasing \
    -Wno-psabi -Wa,--noexecstack \
    -DANDROID -DNDEBUG"

# cause av_strlcpy crash with gcc4.7, gcc4.8
# -fmodulo-sched -fmodulo-sched-allow-regmoves

# --enable-thumb is OK
#FF_CFLAGS="$FF_CFLAGS -mthumb"

# not necessary
#FF_CFLAGS="$FF_CFLAGS -finline-limit=300"

export COMMON_FF_CFG_FLAGS=
. $FF_BUILD_ROOT/../../config/module.sh


#--------------------
# with openssl
if [ -f "${FF_DEP_OPENSSL_LIB}/libssl.a" ]; then
    echo "OpenSSL detected"
# FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-nonfree"
    FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-openssl"

    FF_CFLAGS="$FF_CFLAGS -I${FF_DEP_OPENSSL_INC}"
    FF_DEP_LIBS="$FF_DEP_LIBS -L${FF_DEP_OPENSSL_LIB} -lssl -lcrypto"
fi

if [ -f "${FF_DEP_LIBSOXR_LIB}/libsoxr.a" ]; then
    echo "libsoxr detected"
    FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libsoxr"

    FF_CFLAGS="$FF_CFLAGS -I${FF_DEP_LIBSOXR_INC}"
    FF_DEP_LIBS="$FF_DEP_LIBS -L${FF_DEP_LIBSOXR_LIB} -lsoxr"
fi

FF_CFG_FLAGS="$FF_CFG_FLAGS $COMMON_FF_CFG_FLAGS"

#--------------------
# Standard options:
FF_CFG_FLAGS="$FF_CFG_FLAGS --prefix=$FF_PREFIX"

# Advanced options (experts only):
FF_CFG_FLAGS="$FF_CFG_FLAGS --cross-prefix=${FF_CROSS_PREFIX}-"
FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-cross-compile"
FF_CFG_FLAGS="$FF_CFG_FLAGS --target-os=linux"
FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-pic"
# FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-symver"

if [ "$FF_ARCH" = "x86" ]; then
    FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-asm"
else
    # Optimization options (experts only):
    FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-asm"
    FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-inline-asm"
fi

case "$FF_BUILD_OPT" in
    debug)
        FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-optimizations"
        FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-debug"
        FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-small"
    ;;
    *)
        FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-optimizations"
        FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-debug"
        FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-small"
    ;;
esac

#--------------------
echo ""
echo "--------------------"
echo "[*] configurate ffmpeg"
echo "--------------------"
cd $FF_SOURCE
if [ -f "./config.h" ]; then
    echo 'reuse configure'
else
    which $CC
    ./configure $FF_CFG_FLAGS \
        --extra-cflags="$FF_CFLAGS $FF_EXTRA_CFLAGS" \
        --extra-ldflags="$FF_DEP_LIBS $FF_EXTRA_LDFLAGS"
    make clean
fi

#--------------------
echo ""
echo "--------------------"
echo "[*] compile ffmpeg"
echo "--------------------"
cp config.* $FF_PREFIX
make $FF_MAKE_FLAGS > /dev/null
make install
mkdir -p $FF_PREFIX/include/libffmpeg
cp -f config.h $FF_PREFIX/include/libffmpeg/config.h

#--------------------
echo ""
echo "--------------------"
echo "[*] link ffmpeg"
echo "--------------------"
echo $FF_EXTRA_LDFLAGS

FF_C_OBJ_FILES=
FF_ASM_OBJ_FILES=
for MODULE_DIR in $FF_MODULE_DIRS
do
    C_OBJ_FILES="$MODULE_DIR/*.o"
    if ls $C_OBJ_FILES 1> /dev/null 2>&1; then
        echo "link $MODULE_DIR/*.o"
        FF_C_OBJ_FILES="$FF_C_OBJ_FILES $C_OBJ_FILES"
    fi

    for ASM_SUB_DIR in $FF_ASSEMBLER_SUB_DIRS
    do
        ASM_OBJ_FILES="$MODULE_DIR/$ASM_SUB_DIR/*.o"
        if ls $ASM_OBJ_FILES 1> /dev/null 2>&1; then
            echo "link $MODULE_DIR/$ASM_SUB_DIR/*.o"
            FF_ASM_OBJ_FILES="$FF_ASM_OBJ_FILES $ASM_OBJ_FILES"
        fi
    done
done

$CC -lm -lz -shared --sysroot=$FF_SYSROOT -Wl,--no-undefined -Wl,-z,noexecstack $FF_EXTRA_LDFLAGS \
    -Wl,-soname,libijkffmpeg.so \
    $FF_C_OBJ_FILES \
    $FF_ASM_OBJ_FILES \
    $FF_DEP_LIBS \
    -o $FF_PREFIX/libijkffmpeg.so

mysedi() {
    f=$1
    exp=$2
    n=`basename $f`
    cp $f /tmp/$n
    sed $exp /tmp/$n > $f
    rm /tmp/$n
}

echo ""
echo "--------------------"
echo "[*] create files for shared ffmpeg"
echo "--------------------"
rm -rf $FF_PREFIX/shared
mkdir -p $FF_PREFIX/shared/lib/pkgconfig
ln -s $FF_PREFIX/include $FF_PREFIX/shared/include
ln -s $FF_PREFIX/libijkffmpeg.so $FF_PREFIX/shared/lib/libijkffmpeg.so
cp $FF_PREFIX/lib/pkgconfig/*.pc $FF_PREFIX/shared/lib/pkgconfig
for f in $FF_PREFIX/lib/pkgconfig/*.pc; do
    # in case empty dir
    if [ ! -f $f ]; then
        continue
    fi
    cp $f $FF_PREFIX/shared/lib/pkgconfig
    f=$FF_PREFIX/shared/lib/pkgconfig/`basename $f`
    # OSX sed doesn't have in-place(-i)
    mysedi $f 's/\/output/\/output\/shared/g'
    mysedi $f 's/-lavcodec/-lijkffmpeg/g'
    mysedi $f 's/-lavfilter/-lijkffmpeg/g'
    mysedi $f 's/-lavformat/-lijkffmpeg/g'
    mysedi $f 's/-lavutil/-lijkffmpeg/g'
    mysedi $f 's/-lswresample/-lijkffmpeg/g'
    mysedi $f 's/-lswscale/-lijkffmpeg/g'
done


================================================
FILE: android/contrib/tools/do-compile-libsoxr.sh
================================================
#! /usr/bin/env bash
#
# Copyright (C) 2014 Miguel Botón <waninkoko@gmail.com>
# Copyright (C) 2014 Zhang Rui <bbcallen@gmail.com>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

#--------------------
set -e

if [ -z "$ANDROID_NDK" ]; then
    echo "You must define ANDROID_NDK before starting."
    echo "They must point to your NDK directories.\n"
    exit 1
fi

#--------------------
# common defines
FF_ARCH=$1
if [ -z "$FF_ARCH" ]; then
    echo "You must specific an architecture 'arm, armv7a, x86, ...'.\n"
    exit 1
fi


FF_BUILD_ROOT=`pwd`

FF_BUILD_NAME=
FF_SOURCE=
FF_CROSS_PREFIX=

FF_CFG_FLAGS=
FF_PLATFORM_CFG_FLAGS=

FF_EXTRA_CFLAGS=
FF_EXTRA_LDFLAGS=

FF_CMAKE_ABI=
FF_CMAKE_EXTRA_FLAGS=

#----- armv7a begin -----
if [ "$FF_ARCH" = "armv7a" ]; then
    FF_BUILD_NAME=libsoxr-armv7a
    FF_SOURCE=$FF_BUILD_ROOT/$FF_BUILD_NAME

    FF_CMAKE_ABI="armeabi-v7a with NEON"
    FF_CMAKE_EXTRA_FLAGS="-DHAVE_WORDS_BIGENDIAN_EXITCODE=1 -DWITH_SIMD=0"

elif [ "$FF_ARCH" = "armv5" ]; then
    FF_BUILD_NAME=libsoxr-armv5
    FF_SOURCE=$FF_BUILD_ROOT/$FF_BUILD_NAME

    FF_CMAKE_ABI="armeabi"
    FF_CMAKE_EXTRA_FLAGS="-DHAVE_WORDS_BIGENDIAN_EXITCODE=1 -DWITH_SIMD=0"

elif [ "$FF_ARCH" = "x86" ]; then
    FF_BUILD_NAME=libsoxr-x86
    FF_SOURCE=$FF_BUILD_ROOT/$FF_BUILD_NAME

    FF_CMAKE_ABI="x86"
    FF_CMAKE_EXTRA_FLAGS="-DHAVE_WORDS_BIGENDIAN_EXITCODE=1"

elif [ "$FF_ARCH" = "x86_64" ]; then
    FF_ANDROID_PLATFORM=android-21

    FF_BUILD_NAME=libsoxr-x86_64
    FF_SOURCE=$FF_BUILD_ROOT/$FF_BUILD_NAME

    FF_CMAKE_ABI="x86_64"

elif [ "$FF_ARCH" = "arm64" ]; then
    FF_ANDROID_PLATFORM=android-21

    FF_BUILD_NAME=libsoxr-arm64
    FF_SOURCE=$FF_BUILD_ROOT/$FF_BUILD_NAME

    FF_CMAKE_ABI="arm64-v8a"

else
    echo "unknown architecture $FF_ARCH";
    exit 1
fi

FF_PREFIX=$FF_BUILD_ROOT/build/$FF_BUILD_NAME/output
FF_CMAKE_BUILD_DIR=$FF_BUILD_ROOT/build/$FF_BUILD_NAME/build

mkdir -p $FF_PREFIX
mkdir -p $FF_CMAKE_BUILD_DIR

#--------------------
echo ""
echo "--------------------"
echo "[*] configurate libsoxr"
echo "--------------------"
cd $FF_CMAKE_BUILD_DIR
FF_CMAKE_CFG_FLAGS="-DCMAKE_TOOLCHAIN_FILE=${FF_SOURCE}/android.toolchain.cmake -DANDROID_NDK=$ANDROID_NDK -DBUILD_EXAMPLES=0 -DBUILD_LSR_TESTS=0 -DBUILD_SHARED_LIBS=0 -DBUILD_TESTS=0 -DCMAKE_BUILD_TYPE=Release -DWITH_LSR_BINDINGS=0 -DWITH_OPENMP=0 -DWITH_PFFFT=0"
echo "cmake $FF_CMAKE_CFG_FLAGS -DANDROID_ABI=$FF_CMAKE_ABI -DCMAKE_INSTALL_PREFIX=$FF_PREFIX"
cmake $FF_CMAKE_CFG_FLAGS $FF_CMAKE_EXTRA_FLAGS -DANDROID_ABI=$FF_CMAKE_ABI -DCMAKE_INSTALL_PREFIX=$FF_PREFIX $FF_SOURCE


#--------------------
echo ""
echo "--------------------"
echo "[*] compile libsoxr"
echo "--------------------"
make -j4
make install


================================================
FILE: android/contrib/tools/do-compile-openssl.sh
================================================
#! /usr/bin/env bash
#
# Copyright (C) 2014 Miguel Botón <waninkoko@gmail.com>
# Copyright (C) 2014 Zhang Rui <bbcallen@gmail.com>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

#--------------------
set -e

if [ -z "$ANDROID_NDK" ]; then
    echo "You must define ANDROID_NDK before starting."
    echo "They must point to your NDK directories.\n"
    exit 1
fi

#--------------------
# common defines
FF_ARCH=$1
if [ -z "$FF_ARCH" ]; then
    echo "You must specific an architecture 'arm, armv7a, x86, ...'.\n"
    exit 1
fi


FF_BUILD_ROOT=`pwd`
FF_ANDROID_PLATFORM=android-9


FF_BUILD_NAME=
FF_SOURCE=
FF_CROSS_PREFIX=

FF_CFG_FLAGS=
FF_PLATFORM_CFG_FLAGS=

FF_EXTRA_CFLAGS=
FF_EXTRA_LDFLAGS=



#--------------------
echo ""
echo "--------------------"
echo "[*] make NDK standalone toolchain"
echo "--------------------"
. ./tools/do-detect-env.sh
FF_MAKE_TOOLCHAIN_FLAGS=$IJK_MAKE_TOOLCHAIN_FLAGS
FF_MAKE_FLAGS=$IJK_MAKE_FLAG
FF_GCC_VER=$IJK_GCC_VER
FF_GCC_64_VER=$IJK_GCC_64_VER


#----- armv7a begin -----
if [ "$FF_ARCH" = "armv7a" ]; then
    FF_BUILD_NAME=openssl-armv7a
    FF_SOURCE=$FF_BUILD_ROOT/$FF_BUILD_NAME
	
    FF_CROSS_PREFIX=arm-linux-androideabi
	FF_TOOLCHAIN_NAME=${FF_CROSS_PREFIX}-${FF_GCC_VER}

    FF_PLATFORM_CFG_FLAGS="android-armv7"

elif [ "$FF_ARCH" = "armv5" ]; then
    FF_BUILD_NAME=openssl-armv5
    FF_SOURCE=$FF_BUILD_ROOT/$FF_BUILD_NAME
	
    FF_CROSS_PREFIX=arm-linux-androideabi
	FF_TOOLCHAIN_NAME=${FF_CROSS_PREFIX}-${FF_GCC_VER}

    FF_PLATFORM_CFG_FLAGS="android"

elif [ "$FF_ARCH" = "x86" ]; then
    FF_BUILD_NAME=openssl-x86
    FF_SOURCE=$FF_BUILD_ROOT/$FF_BUILD_NAME
	
    FF_CROSS_PREFIX=i686-linux-android
	FF_TOOLCHAIN_NAME=x86-${FF_GCC_VER}

    FF_PLATFORM_CFG_FLAGS="android-x86"

    FF_CFG_FLAGS="$FF_CFG_FLAGS no-asm"

elif [ "$FF_ARCH" = "x86_64" ]; then
    FF_ANDROID_PLATFORM=android-21

    FF_BUILD_NAME=openssl-x86_64
    FF_SOURCE=$FF_BUILD_ROOT/$FF_BUILD_NAME

    FF_CROSS_PREFIX=x86_64-linux-android
    FF_TOOLCHAIN_NAME=${FF_CROSS_PREFIX}-${FF_GCC_64_VER}

    FF_PLATFORM_CFG_FLAGS="linux-x86_64"

elif [ "$FF_ARCH" = "arm64" ]; then
    FF_ANDROID_PLATFORM=android-21

    FF_BUILD_NAME=openssl-arm64
    FF_SOURCE=$FF_BUILD_ROOT/$FF_BUILD_NAME

    FF_CROSS_PREFIX=aarch64-linux-android
    FF_TOOLCHAIN_NAME=${FF_CROSS_PREFIX}-${FF_GCC_64_VER}

    FF_PLATFORM_CFG_FLAGS="linux-aarch64"

else
    echo "unknown architecture $FF_ARCH";
    exit 1
fi

FF_TOOLCHAIN_PATH=$FF_BUILD_ROOT/build/$FF_BUILD_NAME/toolchain

FF_SYSROOT=$FF_TOOLCHAIN_PATH/sysroot
FF_PREFIX=$FF_BUILD_ROOT/build/$FF_BUILD_NAME/output

mkdir -p $FF_PREFIX
# mkdir -p $FF_SYSROOT


#--------------------
echo ""
echo "--------------------"
echo "[*] make NDK standalone toolchain"
echo "--------------------"
. ./tools/do-detect-env.sh
FF_MAKE_TOOLCHAIN_FLAGS=$IJK_MAKE_TOOLCHAIN_FLAGS
FF_MAKE_FLAGS=$IJK_MAKE_FLAG


FF_MAKE_TOOLCHAIN_FLAGS="$FF_MAKE_TOOLCHAIN_FLAGS --install-dir=$FF_TOOLCHAIN_PATH"
FF_TOOLCHAIN_TOUCH="$FF_TOOLCHAIN_PATH/touch"
if [ ! -f "$FF_TOOLCHAIN_TOUCH" ]; then
    $ANDROID_NDK/build/tools/make-standalone-toolchain.sh \
        $FF_MAKE_TOOLCHAIN_FLAGS \
        --platform=$FF_ANDROID_PLATFORM \
        --toolchain=$FF_TOOLCHAIN_NAME
    touch $FF_TOOLCHAIN_TOUCH;
fi


#--------------------
echo ""
echo "--------------------"
echo "[*] check openssl env"
echo "--------------------"
export PATH=$FF_TOOLCHAIN_PATH/bin:$PATH

export COMMON_FF_CFG_FLAGS=

FF_CFG_FLAGS="$FF_CFG_FLAGS $COMMON_FF_CFG_FLAGS"

#--------------------
# Standard options:
FF_CFG_FLAGS="$FF_CFG_FLAGS zlib-dynamic"
FF_CFG_FLAGS="$FF_CFG_FLAGS no-shared"
FF_CFG_FLAGS="$FF_CFG_FLAGS --openssldir=$FF_PREFIX"
FF_CFG_FLAGS="$FF_CFG_FLAGS --cross-compile-prefix=${FF_CROSS_PREFIX}-"
FF_CFG_FLAGS="$FF_CFG_FLAGS $FF_PLATFORM_CFG_FLAGS"

#--------------------
echo ""
echo "--------------------"
echo "[*] configurate openssl"
echo "--------------------"
cd $FF_SOURCE
#if [ -f "./Makefile" ]; then
#    echo 'reuse configure'
#else
    echo "./Configure $FF_CFG_FLAGS"
    ./Configure $FF_CFG_FLAGS
#        --extra-cflags="$FF_CFLAGS $FF_EXTRA_CFLAGS" \
#        --extra-ldflags="$FF_EXTRA_LDFLAGS"
#fi

#--------------------
echo ""
echo "--------------------"
echo "[*] compile openssl"
echo "--------------------"
make depend
make $FF_MAKE_FLAGS
make install_sw

#--------------------
echo ""
echo "--------------------"
echo "[*] link openssl"
echo "--------------------"


================================================
FILE: android/contrib/tools/do-detect-env.sh
================================================
#! /usr/bin/env bash
#
# Copyright (C) 2013-2014 Zhang Rui <bbcallen@gmail.com>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# This script is based on projects below
# https://github.com/yixia/FFmpeg-Android
# http://git.videolan.org/?p=vlc-ports/android.git;a=summary

#--------------------
set -e

UNAME_S=$(uname -s)
UNAME_SM=$(uname -sm)
echo "build on $UNAME_SM"

echo "ANDROID_NDK=$ANDROID_NDK"

if [ -z "$ANDROID_NDK" ]; then
    echo "You must define ANDROID_NDK before starting."
    echo "They must point to your NDK directories."
    echo ""
    exit 1
fi



# try to detect NDK version
export IJK_GCC_VER=4.9
export IJK_GCC_64_VER=4.9
export IJK_MAKE_TOOLCHAIN_FLAGS=
export IJK_MAKE_FLAG=
export IJK_NDK_REL=$(grep -o '^r[0-9]*.*' $ANDROID_NDK/RELEASE.TXT 2>/dev/null | sed 's/[[:space:]]*//g' | cut -b2-)
case "$IJK_NDK_REL" in
    10e*)
        # we don't use 4.4.3 because it doesn't handle threads correctly.
        if test -d ${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.8
        # if gcc 4.8 is present, it's there for all the archs (x86, mips, arm)
        then
            echo "NDKr$IJK_NDK_REL detected"

            case "$UNAME_S" in
                Darwin)
                    export IJK_MAKE_TOOLCHAIN_FLAGS="$IJK_MAKE_TOOLCHAIN_FLAGS --system=darwin-x86_64"
                ;;
                CYGWIN_NT-*)
                    export IJK_MAKE_TOOLCHAIN_FLAGS="$IJK_MAKE_TOOLCHAIN_FLAGS --system=windows-x86_64"
                ;;
            esac
        else
            echo "You need the NDKr10e or later"
            exit 1
        fi
    ;;
    *)
        IJK_NDK_REL=$(grep -o '^Pkg\.Revision.*=[0-9]*.*' $ANDROID_NDK/source.properties 2>/dev/null | sed 's/[[:space:]]*//g' | cut -d "=" -f 2)
        echo "IJK_NDK_REL=$IJK_NDK_REL"
        case "$IJK_NDK_REL" in
            11*|12*|13*|14*)
                if test -d ${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.9
                then
                    echo "NDKr$IJK_NDK_REL detected"
                else
                    echo "You need the NDKr10e or later"
                    exit 1
                fi
            ;;
            *)
                echo "You need the NDKr10e or later"
                exit 1
            ;;
        esac
    ;;
esac


case "$UNAME_S" in
    Darwin)
        export IJK_MAKE_FLAG=-j`sysctl -n machdep.cpu.thread_count`
    ;;
    CYGWIN_NT-*)
        IJK_WIN_TEMP="$(cygpath -am /tmp)"
        export TEMPDIR=$IJK_WIN_TEMP/

        echo "Cygwin temp prefix=$IJK_WIN_TEMP/"
    ;;
esac


================================================
FILE: android/ijk-addr2line.sh
================================================
#! /bin/sh

addr2line -e ijkplayer/ijkplayer-armv7a/src/main/obj/local/armeabi-v7a/lib$1.so


================================================
FILE: android/ijk-ndk-stack.sh
================================================
#!/bin/sh

adb logcat | ndk-stack -sym ijkplayer/ijkplayer-armv7a/src/main/obj/local/armeabi-v7a


================================================
FILE: android/ijkplayer/.gitignore
================================================
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
android-ndk-prof


================================================
FILE: android/ijkplayer/build.gradle
================================================
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.3'

        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

ext {
    compileSdkVersion = 25
    buildToolsVersion = "25.0.3"

    targetSdkVersion = 25

    versionCode = 800800
    versionName = "0.8.8"
}

wrapper {
    gradleVersion = '2.14.1'
}


================================================
FILE: android/ijkplayer/gradle/wrapper/gradle-wrapper.properties
================================================
#Wed Aug 24 16:26:25 CST 2016
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip


================================================
FILE: android/ijkplayer/gradle.properties
================================================
# Project-wide Gradle settings.

# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.

# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true

VERSION_NAME=0.8.8
VERSION_CODE=800800
GROUP=tv.danmaku.ijk.media

# http://central.sonatype.org/pages/requirements.html
POM_USER_ORG=bilibili
POM_DESCRIPTION=Video player based on FFmpeg n3.1
POM_URL=https://github.com/Bilibili/ijkplayer
POM_SCM_URL=https://github.com/Bilibili/ijkplayer
POM_SCM_CONNECTION=scm:git:git@github.com:Bilibili/ijkplayer.git
POM_SCM_DEV_CONNECTION=scm:git:git@github.com:Bilibili/ijkplayer.git
POM_LICENSE_NAME=LGPL-2.1
POM_LICENSE_URL=https://www.gnu.org/licenses/lgpl-2.1.html
POM_LICENSE_DIST=repo
POM_DEVELOPER_ID=bbcallen
POM_DEVELOPER_NAME=Zhang Rui
POM_DEVELOPER_EMAIL=bbcallen@gmail.com


================================================
FILE: android/ijkplayer/gradlew
================================================
#!/usr/bin/env bash

##############################################################################
##
##  Gradle start up script for UN*X
##
##############################################################################

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""

APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"

warn ( ) {
    echo "$*"
}

die ( ) {
    echo
    echo "$*"
    echo
    exit 1
}

# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
  CYGWIN* )
    cygwin=true
    ;;
  Darwin* )
    darwin=true
    ;;
  MINGW* )
    msys=true
    ;;
esac

# For Cygwin, ensure paths are in UNIX format before anything is touched.
if $cygwin ; then
    [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
fi

# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
    ls=`ls -ld "$PRG"`
    link=`expr "$ls" : '.*-> \(.*\)$'`
    if expr "$link" : '/.*' > /dev/null; then
        PRG="$link"
    else
        PRG=`dirname "$PRG"`"/$link"
    fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >&-
APP_HOME="`pwd -P`"
cd "$SAVED" >&-

CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar

# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
        # IBM's JDK on AIX uses strange locations for the executables
        JAVACMD="$JAVA_HOME/jre/sh/java"
    else
        JAVACMD="$JAVA_HOME/bin/java"
    fi
    if [ ! -x "$JAVACMD" ] ; then
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
else
    JAVACMD="java"
    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi

# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
    MAX_FD_LIMIT=`ulimit -H -n`
    if [ $? -eq 0 ] ; then
        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
            MAX_FD="$MAX_FD_LIMIT"
        fi
        ulimit -n $MAX_FD
        if [ $? -ne 0 ] ; then
            warn "Could not set maximum file descriptor limit: $MAX_FD"
        fi
    else
        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
    fi
fi

# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi

# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`

    # We build the pattern for arguments to be converted via cygpath
    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
    SEP=""
    for dir in $ROOTDIRSRAW ; do
        ROOTDIRS="$ROOTDIRS$SEP$dir"
        SEP="|"
    done
    OURCYGPATTERN="(^($ROOTDIRS))"
    # Add a user-defined pattern to the cygpath arguments
    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
    fi
    # Now convert the arguments - kludge to limit ourselves to /bin/sh
    i=0
    for arg in "$@" ; do
        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option

        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
        else
            eval `echo args$i`="\"$arg\""
        fi
        i=$((i+1))
    done
    case $i in
        (0) set -- ;;
        (1) set -- "$args0" ;;
        (2) set -- "$args0" "$args1" ;;
        (3) set -- "$args0" "$args1" "$args2" ;;
        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
    esac
fi

# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
    JVM_OPTS=("$@")
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"

exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"


================================================
FILE: android/ijkplayer/gradlew.bat
================================================
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem  Gradle startup script for Windows
@rem
@rem ##########################################################################

@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal

@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=

set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init

echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto init

echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

:init
@rem Get command-line arguments, handling Windowz variants

if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args

:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2

:win9xME_args_slurp
if "x%~1" == "x" goto execute

set CMD_LINE_ARGS=%*
goto execute

:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$

:execute
@rem Setup the command line

set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar

@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%

:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd

:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1

:mainEnd
if "%OS%"=="Windows_NT" endlocal

:omega


================================================
FILE: android/ijkplayer/ijkplayer-arm64/.gitignore
================================================
/build


================================================
FILE: android/ijkplayer/ijkplayer-arm64/build.gradle
================================================
apply plugin: 'com.android.library'

android {
    // http://tools.android.com/tech-docs/new-build-system/tips
    //noinspection GroovyAssignabilityCheck
    compileSdkVersion rootProject.ext.compileSdkVersion
    //noinspection GroovyAssignabilityCheck
    buildToolsVersion rootProject.ext.buildToolsVersion

    defaultConfig {
        minSdkVersion 21
        targetSdkVersion rootProject.ext.targetSdkVersion
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets.main {
        jniLibs.srcDirs 'src/main/libs'
        jni.srcDirs = [] // This prevents the auto generation of Android.mk
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

apply from: new File(rootProject.projectDir, "tools/gradle-on-demand.gradle");


================================================
FILE: android/ijkplayer/ijkplayer-arm64/gradle.properties
================================================
POM_NAME=ijkplayer-arm64
POM_ARTIFACT_ID=ijkplayer-arm64
POM_PACKAGING=aar

================================================
FILE: android/ijkplayer/ijkplayer-arm64/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /opt/android/ADK/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

================================================
FILE: android/ijkplayer/ijkplayer-arm64/src/androidTest/java/tv/danmaku/ijk/media/player_arm64/ApplicationTest.java
================================================
package tv.danmaku.ijk.media.player_arm64;

import android.app.Application;
import android.test.ApplicationTestCase;

/**
 * <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
 */
public class ApplicationTest extends ApplicationTestCase<Application> {
    public ApplicationTest() {
        super(Application.class);
    }
}

================================================
FILE: android/ijkplayer/ijkplayer-arm64/src/main/.classpath
================================================
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
	<classpathentry kind="src" path="java"/>
	<classpathentry kind="src" path="src"/>
	<classpathentry kind="src" path="gen"/>
	<classpathentry kind="output" path="bin/classes"/>
</classpath>


================================================
FILE: android/ijkplayer/ijkplayer-arm64/src/main/.project
================================================
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
	<name>ijkplayer-arm64</name>
	<comment></comment>
	<projects>
	</projects>
	<buildSpec>
		<buildCommand>
			<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
		<buildCommand>
			<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
		<buildCommand>
			<name>org.eclipse.jdt.core.javabuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
		<buildCommand>
			<name>com.android.ide.eclipse.adt.ApkBuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
	</buildSpec>
	<natures>
		<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
		<nature>org.eclipse.jdt.core.javanature</nature>
	</natures>
</projectDescription>


================================================
FILE: android/ijkplayer/ijkplayer-arm64/src/main/.settings/org.eclipse.jdt.core.prefs
================================================
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.source=1.6


================================================
FILE: android/ijkplayer/ijkplayer-arm64/src/main/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="tv.danmaku.ijk.media.player_arm64">

    <uses-sdk
        android:minSdkVersion="21" />

</manifest>


================================================
FILE: android/ijkplayer/ijkplayer-arm64/src/main/java/tv/danmaku/ijk/media/player_arm64/Pragma.java
================================================
/*
 * Copyright (C) 2015 Bilibili
 * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package tv.danmaku.ijk.media.player_arm64;

public class Pragma {

}


================================================
FILE: android/ijkplayer/ijkplayer-arm64/src/main/jni/Application.mk
================================================
# Copyright (c) 2013-2014 Bilibili
# copyright (c) 2013-2014 Zhang Rui <bbcallen@gmail.com>
#
# This file is part of ijkPlayer.
#
# ijkPlayer 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.
#
# ijkPlayer 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 ijkPlayer; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

APP_OPTIM := release
APP_PLATFORM := android-21
APP_ABI := arm64-v8a
NDK_TOOLCHAIN_VERSION=4.9
APP_PIE := false

APP_STL := stlport_static

APP_CFLAGS := -O3 -Wall -pipe \
    -ffast-math \
    -fstrict-aliasing -Werror=strict-aliasing \
    -Wno-psabi -Wa,--noexecstack \
    -DANDROID -DNDEBUG


================================================
FILE: android/ijkplayer/ijkplayer-arm64/src/main/project.properties
================================================
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

# Project target.
target=android-22
android.library=true


================================================
FILE: android/ijkplayer/ijkplayer-arm64/src/main/res/values/strings.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">

    <string name="ijkplayer_dummy" tools:ignore="UnusedResources"></string>

</resources>

================================================
FILE: android/ijkplayer/ijkplayer-armv5/.gitignore
================================================
/build


================================================
FILE: android/ijkplayer/ijkplayer-armv5/build.gradle
================================================
apply plugin: 'com.android.library'

android {
    // http://tools.android.com/tech-docs/new-build-system/tips
    //noinspection GroovyAssignabilityCheck
    compileSdkVersion rootProject.ext.compileSdkVersion
    //noinspection GroovyAssignabilityCheck
    buildToolsVersion rootProject.ext.buildToolsVersion

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion rootProject.ext.targetSdkVersion
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets.main {
        jniLibs.srcDirs 'src/main/libs'
        jni.srcDirs = [] // This prevents the auto generation of Android.mk
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

apply from: new File(rootProject.projectDir, "tools/gradle-on-demand.gradle");


================================================
FILE: android/ijkplayer/ijkplayer-armv5/gradle.properties
================================================
POM_NAME=ijkplayer-armv5
POM_ARTIFACT_ID=ijkplayer-armv5
POM_PACKAGING=aar

================================================
FILE: android/ijkplayer/ijkplayer-armv5/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /opt/android/ADK/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}


================================================
FILE: android/ijkplayer/ijkplayer-armv5/src/androidTest/java/tv/danmaku/ijk/media/player_armv5/ApplicationTest.java
================================================
package tv.danmaku.ijk.media.player_armv5;

import android.app.Application;
import android.test.ApplicationTestCase;

/**
 * <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
 */
public class ApplicationTest extends ApplicationTestCase<Application> {
    public ApplicationTest() {
        super(Application.class);
    }
}

================================================
FILE: android/ijkplayer/ijkplayer-armv5/src/main/.classpath
================================================
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
	<classpathentry kind="src" path="java"/>
	<classpathentry kind="src" path="src"/>
	<classpathentry kind="src" path="gen"/>
	<classpathentry kind="output" path="bin/classes"/>
</classpath>


================================================
FILE: android/ijkplayer/ijkplayer-armv5/src/main/.project
================================================
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
	<name>ijkplayer-armv5</name>
	<comment></comment>
	<projects>
	</projects>
	<buildSpec>
		<buildCommand>
			<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
		<buildCommand>
			<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
		<buildCommand>
			<name>org.eclipse.jdt.core.javabuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
		<buildCommand>
			<name>com.android.ide.eclipse.adt.ApkBuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
	</buildSpec>
	<natures>
		<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
		<nature>org.eclipse.jdt.core.javanature</nature>
	</natures>
</projectDescription>


================================================
FILE: android/ijkplayer/ijkplayer-armv5/src/main/.settings/org.eclipse.jdt.core.prefs
================================================
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.source=1.6


================================================
FILE: android/ijkplayer/ijkplayer-armv5/src/main/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="tv.danmaku.ijk.media.player_armv5" >

    <uses-sdk
        android:minSdkVersion="9" />

</manifest>

================================================
FILE: android/ijkplayer/ijkplayer-armv5/src/main/java/tv/danmaku/ijk/media/player_armv5/Pragma.java
================================================
/*
 * Copyright (C) 2015 Bilibili
 * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package tv.danmaku.ijk.media.player_armv5;

public class Pragma {

}


================================================
FILE: android/ijkplayer/ijkplayer-armv5/src/main/jni/Application.mk
================================================
# Copyright (c) 2013-2014 Bilibili
# copyright (c) 2013-2014 Zhang Rui <bbcallen@gmail.com>
#
# This file is part of ijkPlayer.
#
# ijkPlayer 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.
#
# ijkPlayer 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 ijkPlayer; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

APP_OPTIM := release
APP_PLATFORM := android-9
APP_ABI := armeabi
NDK_TOOLCHAIN_VERSION=4.9
APP_PIE := false

APP_STL := stlport_static

APP_CFLAGS := -O3 -Wall -pipe \
    -ffast-math \
    -fstrict-aliasing -Werror=strict-aliasing \
    -Wno-psabi -Wa,--noexecstack \
    -DANDROID -DNDEBUG


================================================
FILE: android/ijkplayer/ijkplayer-armv5/src/main/project.properties
================================================
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

# Project target.
target=android-22
android.library=true


================================================
FILE: android/ijkplayer/ijkplayer-armv5/src/main/res/values/strings.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">

    <string name="ijkplayer_dummy" tools:ignore="UnusedResources"></string>

</resources>

================================================
FILE: android/ijkplayer/ijkplayer-armv7a/.gitignore
================================================
/build


================================================
FILE: android/ijkplayer/ijkplayer-armv7a/build.gradle
================================================
apply plugin: 'com.android.library'

android {
    // http://tools.android.com/tech-docs/new-build-system/tips
    //noinspection GroovyAssignabilityCheck
    compileSdkVersion rootProject.ext.compileSdkVersion
    //noinspection GroovyAssignabilityCheck
    buildToolsVersion rootProject.ext.buildToolsVersion

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion rootProject.ext.targetSdkVersion
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets.main {
        jniLibs.srcDirs 'src/main/libs'
        jni.srcDirs = [] // This prevents the auto generation of Android.mk
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

apply from: new File(rootProject.projectDir, "tools/gradle-on-demand.gradle");


================================================
FILE: android/ijkplayer/ijkplayer-armv7a/gradle.properties
================================================
POM_NAME=ijkplayer-armv7a
POM_ARTIFACT_ID=ijkplayer-armv7a
POM_PACKAGING=aar

================================================
FILE: android/ijkplayer/ijkplayer-armv7a/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /opt/android/ADK/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}


================================================
FILE: android/ijkplayer/ijkplayer-armv7a/src/androidTest/java/tv/danmaku/ijk/media/player_armv7a/ApplicationTest.java
================================================
package tv.danmaku.ijk.media.player_armv7a;

import android.app.Application;
import android.test.ApplicationTestCase;

/**
 * <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
 */
public class ApplicationTest extends ApplicationTestCase<Application> {
    public ApplicationTest() {
        super(Application.class);
    }
}

================================================
FILE: android/ijkplayer/ijkplayer-armv7a/src/main/.classpath
================================================
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
	<classpathentry kind="src" path="java"/>
	<classpathentry kind="src" path="src"/>
	<classpathentry kind="src" path="gen"/>
	<classpathentry kind="output" path="bin/classes"/>
</classpath>


================================================
FILE: android/ijkplayer/ijkplayer-armv7a/src/main/.project
================================================
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
	<name>ijkplayer-armv7a</name>
	<comment></comment>
	<projects>
	</projects>
	<buildSpec>
		<buildCommand>
			<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
		<buildCommand>
			<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
		<buildCommand>
			<name>org.eclipse.jdt.core.javabuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
		<buildCommand>
			<name>com.android.ide.eclipse.adt.ApkBuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
	</buildSpec>
	<natures>
		<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
		<nature>org.eclipse.jdt.core.javanature</nature>
	</natures>
</projectDescription>


================================================
FILE: android/ijkplayer/ijkplayer-armv7a/src/main/.settings/org.eclipse.jdt.core.prefs
================================================
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.source=1.6


================================================
FILE: android/ijkplayer/ijkplayer-armv7a/src/main/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="tv.danmaku.ijk.media.player_armv7a" >

    <uses-sdk
        android:minSdkVersion="9" />

</manifest>

================================================
FILE: android/ijkplayer/ijkplayer-armv7a/src/main/java/tv/danmaku/ijk/media/player_armv7a/Pragma.java
================================================
/*
 * Copyright (C) 2015 Bilibili
 * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package tv.danmaku.ijk.media.player_armv7a;

public class Pragma {

}


================================================
FILE: android/ijkplayer/ijkplayer-armv7a/src/main/jni/Android.mk
================================================
# Copyright (c) 2013 Bilibili
# copyright (c) 2013 Zhang Rui <bbcallen@gmail.com>
#
# This file is part of ijkPlayer.
#
# ijkPlayer 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.
#
# ijkPlayer 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 ijkPlayer; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

LOCAL_PATH := $(call my-dir)

MY_APP_JNI_ROOT := $(realpath $(LOCAL_PATH))
MY_APP_PRJ_ROOT := $(realpath $(MY_APP_JNI_ROOT)/..)
MY_APP_ANDROID_ROOT := $(realpath $(MY_APP_PRJ_ROOT)/../../../..)

ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
MY_APP_FFMPEG_OUTPUT_PATH := $(realpath $(MY_APP_ANDROID_ROOT)/contrib/build/ffmpeg-armv7a/output)
MY_APP_FFMPEG_INCLUDE_PATH := $(realpath $(MY_APP_FFMPEG_OUTPUT_PATH)/include)
endif
ifeq ($(TARGET_ARCH_ABI),armeabi)
MY_APP_FFMPEG_OUTPUT_PATH := $(realpath $(MY_APP_ANDROID_ROOT)/contrib/build/ffmpeg-armv5/output)
MY_APP_FFMPEG_INCLUDE_PATH := $(realpath $(MY_APP_FFMPEG_OUTPUT_PATH)/include)
endif
ifeq ($(TARGET_ARCH_ABI),arm64-v8a)
MY_APP_FFMPEG_OUTPUT_PATH := $(realpath $(MY_APP_ANDROID_ROOT)/contrib/build/ffmpeg-arm64/output)
MY_APP_FFMPEG_INCLUDE_PATH := $(realpath $(MY_APP_FFMPEG_OUTPUT_PATH)/include)
endif
ifeq ($(TARGET_ARCH_ABI),x86)
MY_APP_FFMPEG_OUTPUT_PATH := $(realpath $(MY_APP_ANDROID_ROOT)/contrib/build/ffmpeg-x86/output)
MY_APP_FFMPEG_INCLUDE_PATH := $(realpath $(MY_APP_FFMPEG_OUTPUT_PATH)/include)
endif
ifeq ($(TARGET_ARCH_ABI),x86_64)
MY_APP_FFMPEG_OUTPUT_PATH := $(realpath $(MY_APP_ANDROID_ROOT)/contrib/build/ffmpeg-x86_64/output)
MY_APP_FFMPEG_INCLUDE_PATH := $(realpath $(MY_APP_FFMPEG_OUTPUT_PATH)/include)
endif

include $(call all-subdir-makefiles)


================================================
FILE: android/ijkplayer/ijkplayer-armv7a/src/main/jni/Application.mk
================================================
# Copyright (c) 2013 Bilibili
# copyright (c) 2013 Zhang Rui <bbcallen@gmail.com>
#
# This file is part of ijkPlayer.
#
# ijkPlayer 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.
#
# ijkPlayer 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 ijkPlayer; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

APP_OPTIM := release
APP_PLATFORM := android-9
APP_ABI := armeabi-v7a
NDK_TOOLCHAIN_VERSION=4.9
APP_PIE := false

APP_STL := stlport_static

APP_CFLAGS := -O3 -Wall -pipe \
    -ffast-math \
    -fstrict-aliasing -Werror=strict-aliasing \
    -Wno-psabi -Wa,--noexecstack \
    -DANDROID -DNDEBUG


================================================
FILE: android/ijkplayer/ijkplayer-armv7a/src/main/jni/ffmpeg/Android.mk
================================================
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := ijkffmpeg
LOCAL_SRC_FILES := $(MY_APP_FFMPEG_OUTPUT_PATH)/libijkffmpeg.so
include $(PREBUILT_SHARED_LIBRARY)

================================================
FILE: android/ijkplayer/ijkplayer-armv7a/src/main/project.properties
================================================
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

# Project target.
target=android-22
android.library=true


================================================
FILE: android/ijkplayer/ijkplayer-armv7a/src/main/res/values/strings.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">

    <string name="ijkplayer_dummy" tools:ignore="UnusedResources"></string>

</resources>

================================================
FILE: android/ijkplayer/ijkplayer-example/.gitignore
================================================
/build


================================================
FILE: android/ijkplayer/ijkplayer-example/build.gradle
================================================
apply plugin: 'com.android.application'

android {
    // http://tools.android.com/tech-docs/new-build-system/tips
    //noinspection GroovyAssignabilityCheck
    compileSdkVersion rootProject.ext.compileSdkVersion
    //noinspection GroovyAssignabilityCheck
    buildToolsVersion rootProject.ext.buildToolsVersion

    lintOptions {
        abortOnError false
    }
    defaultConfig {
        applicationId "tv.danmaku.ijk.media.example"
        minSdkVersion 9
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode rootProject.ext.versionCode
        versionName rootProject.ext.versionName
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
        all32 { minSdkVersion 9 }
        all64 { minSdkVersion 21 }
        // armv5 {}
        // armv7a {}
        // arm64 { minSdkVersion 21 }
        // x86 {}
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:23.0.1'
    compile 'com.android.support:preference-v7:23.0.1'
    compile 'com.android.support:support-annotations:23.0.1'

    compile 'com.squareup:otto:1.3.8'

    compile project(':ijkplayer-java')
    com
Download .txt
gitextract_n9wctwe6/

├── .gitignore
├── .travis.yml
├── COPYING.GPLv2
├── COPYING.GPLv3
├── COPYING.LGPLv2.1
├── COPYING.LGPLv3
├── MODULE_LICENSE_APACHE2
├── NEWS.md
├── NOTICE
├── README.md
├── android/
│   ├── .gitignore
│   ├── build-on-travis.sh
│   ├── compile-ijk.sh
│   ├── contrib/
│   │   ├── .gitignore
│   │   ├── compile-ffmpeg.sh
│   │   ├── compile-libsoxr.sh
│   │   ├── compile-openssl.sh
│   │   ├── setup-as-commiter.sh
│   │   ├── sync-mirrors.sh
│   │   └── tools/
│   │       ├── do-compile-ffmpeg.sh
│   │       ├── do-compile-libsoxr.sh
│   │       ├── do-compile-openssl.sh
│   │       └── do-detect-env.sh
│   ├── ijk-addr2line.sh
│   ├── ijk-ndk-stack.sh
│   ├── ijkplayer/
│   │   ├── .gitignore
│   │   ├── build.gradle
│   │   ├── gradle/
│   │   │   └── wrapper/
│   │   │       ├── gradle-wrapper.jar
│   │   │       └── gradle-wrapper.properties
│   │   ├── gradle.properties
│   │   ├── gradlew
│   │   ├── gradlew.bat
│   │   ├── ijkplayer-arm64/
│   │   │   ├── .gitignore
│   │   │   ├── build.gradle
│   │   │   ├── gradle.properties
│   │   │   ├── proguard-rules.pro
│   │   │   └── src/
│   │   │       ├── androidTest/
│   │   │       │   └── java/
│   │   │       │       └── tv/
│   │   │       │           └── danmaku/
│   │   │       │               └── ijk/
│   │   │       │                   └── media/
│   │   │       │                       └── player_arm64/
│   │   │       │                           └── ApplicationTest.java
│   │   │       └── main/
│   │   │           ├── .classpath
│   │   │           ├── .project
│   │   │           ├── .settings/
│   │   │           │   └── org.eclipse.jdt.core.prefs
│   │   │           ├── AndroidManifest.xml
│   │   │           ├── java/
│   │   │           │   └── tv/
│   │   │           │       └── danmaku/
│   │   │           │           └── ijk/
│   │   │           │               └── media/
│   │   │           │                   └── player_arm64/
│   │   │           │                       └── Pragma.java
│   │   │           ├── jni/
│   │   │           │   └── Application.mk
│   │   │           ├── project.properties
│   │   │           └── res/
│   │   │               └── values/
│   │   │                   └── strings.xml
│   │   ├── ijkplayer-armv5/
│   │   │   ├── .gitignore
│   │   │   ├── build.gradle
│   │   │   ├── gradle.properties
│   │   │   ├── proguard-rules.pro
│   │   │   └── src/
│   │   │       ├── androidTest/
│   │   │       │   └── java/
│   │   │       │       └── tv/
│   │   │       │           └── danmaku/
│   │   │       │               └── ijk/
│   │   │       │                   └── media/
│   │   │       │                       └── player_armv5/
│   │   │       │                           └── ApplicationTest.java
│   │   │       └── main/
│   │   │           ├── .classpath
│   │   │           ├── .project
│   │   │           ├── .settings/
│   │   │           │   └── org.eclipse.jdt.core.prefs
│   │   │           ├── AndroidManifest.xml
│   │   │           ├── java/
│   │   │           │   └── tv/
│   │   │           │       └── danmaku/
│   │   │           │           └── ijk/
│   │   │           │               └── media/
│   │   │           │                   └── player_armv5/
│   │   │           │                       └── Pragma.java
│   │   │           ├── jni/
│   │   │           │   └── Application.mk
│   │   │           ├── project.properties
│   │   │           └── res/
│   │   │               └── values/
│   │   │                   └── strings.xml
│   │   ├── ijkplayer-armv7a/
│   │   │   ├── .gitignore
│   │   │   ├── build.gradle
│   │   │   ├── gradle.properties
│   │   │   ├── proguard-rules.pro
│   │   │   └── src/
│   │   │       ├── androidTest/
│   │   │       │   └── java/
│   │   │       │       └── tv/
│   │   │       │           └── danmaku/
│   │   │       │               └── ijk/
│   │   │       │                   └── media/
│   │   │       │                       └── player_armv7a/
│   │   │       │                           └── ApplicationTest.java
│   │   │       └── main/
│   │   │           ├── .classpath
│   │   │           ├── .project
│   │   │           ├── .settings/
│   │   │           │   └── org.eclipse.jdt.core.prefs
│   │   │           ├── AndroidManifest.xml
│   │   │           ├── java/
│   │   │           │   └── tv/
│   │   │           │       └── danmaku/
│   │   │           │           └── ijk/
│   │   │           │               └── media/
│   │   │           │                   └── player_armv7a/
│   │   │           │                       └── Pragma.java
│   │   │           ├── jni/
│   │   │           │   ├── Android.mk
│   │   │           │   ├── Application.mk
│   │   │           │   └── ffmpeg/
│   │   │           │       └── Android.mk
│   │   │           ├── project.properties
│   │   │           └── res/
│   │   │               └── values/
│   │   │                   └── strings.xml
│   │   ├── ijkplayer-example/
│   │   │   ├── .gitignore
│   │   │   ├── build.gradle
│   │   │   ├── proguard-rules.pro
│   │   │   └── src/
│   │   │       ├── androidTest/
│   │   │       │   └── java/
│   │   │       │       └── tv/
│   │   │       │           └── danmaku/
│   │   │       │               └── ijk/
│   │   │       │                   └── media/
│   │   │       │                       └── example/
│   │   │       │                           └── ApplicationTest.java
│   │   │       └── main/
│   │   │           ├── .classpath
│   │   │           ├── .project
│   │   │           ├── .settings/
│   │   │           │   └── org.eclipse.jdt.core.prefs
│   │   │           ├── AndroidManifest.xml
│   │   │           ├── java/
│   │   │           │   └── tv/
│   │   │           │       └── danmaku/
│   │   │           │           └── ijk/
│   │   │           │               └── media/
│   │   │           │                   └── example/
│   │   │           │                       ├── activities/
│   │   │           │                       │   ├── FileExplorerActivity.java
│   │   │           │                       │   ├── RecentMediaActivity.java
│   │   │           │                       │   ├── SampleMediaActivity.java
│   │   │           │                       │   ├── SettingsActivity.java
│   │   │           │                       │   └── VideoActivity.java
│   │   │           │                       ├── application/
│   │   │           │                       │   ├── AppActivity.java
│   │   │           │                       │   └── Settings.java
│   │   │           │                       ├── content/
│   │   │           │                       │   ├── PathCursor.java
│   │   │           │                       │   ├── PathCursorLoader.java
│   │   │           │                       │   └── RecentMediaStorage.java
│   │   │           │                       ├── eventbus/
│   │   │           │                       │   └── FileExplorerEvents.java
│   │   │           │                       ├── fragments/
│   │   │           │                       │   ├── FileListFragment.java
│   │   │           │                       │   ├── RecentMediaListFragment.java
│   │   │           │                       │   ├── SampleMediaListFragment.java
│   │   │           │                       │   ├── SettingsFragment.java
│   │   │           │                       │   └── TracksFragment.java
│   │   │           │                       ├── services/
│   │   │           │                       │   └── MediaPlayerService.java
│   │   │           │                       └── widget/
│   │   │           │                           ├── media/
│   │   │           │                           │   ├── AndroidMediaController.java
│   │   │           │                           │   ├── FileMediaDataSource.java
│   │   │           │                           │   ├── IMediaController.java
│   │   │           │                           │   ├── IRenderView.java
│   │   │           │                           │   ├── IjkVideoView.java
│   │   │           │                           │   ├── InfoHudViewHolder.java
│   │   │           │                           │   ├── MeasureHelper.java
│   │   │           │                           │   ├── MediaPlayerCompat.java
│   │   │           │                           │   ├── SurfaceRenderView.java
│   │   │           │                           │   ├── TableLayoutBinder.java
│   │   │           │                           │   └── TextureRenderView.java
│   │   │           │                           └── preference/
│   │   │           │                               └── IjkListPreference.java
│   │   │           ├── project.properties
│   │   │           └── res/
│   │   │               ├── layout/
│   │   │               │   ├── activity_app.xml
│   │   │               │   ├── activity_player.xml
│   │   │               │   ├── fragment_file_list.xml
│   │   │               │   ├── fragment_file_list_item.xml
│   │   │               │   ├── fragment_track_list.xml
│   │   │               │   ├── table_media_info.xml
│   │   │               │   ├── table_media_info_row1.xml
│   │   │               │   ├── table_media_info_row2.xml
│   │   │               │   ├── table_media_info_section.xml
│   │   │               │   └── widget_toolbar.xml
│   │   │               ├── menu/
│   │   │               │   ├── menu_app.xml
│   │   │               │   └── menu_player.xml
│   │   │               ├── values/
│   │   │               │   ├── attrs.xml
│   │   │               │   ├── colors.xml
│   │   │               │   ├── dimens.xml
│   │   │               │   ├── ids.xml
│   │   │               │   ├── strings.xml
│   │   │               │   ├── strings_pref.xml
│   │   │               │   ├── styles.xml
│   │   │               │   └── themes.xml
│   │   │               ├── values-v11/
│   │   │               │   └── styles.xml
│   │   │               ├── values-v14/
│   │   │               │   └── styles.xml
│   │   │               ├── values-w820dp/
│   │   │               │   └── dimens.xml
│   │   │               └── xml/
│   │   │                   └── settings.xml
│   │   ├── ijkplayer-exo/
│   │   │   ├── .gitignore
│   │   │   ├── build.gradle
│   │   │   ├── gradle.properties
│   │   │   ├── proguard-rules.pro
│   │   │   └── src/
│   │   │       ├── androidTest/
│   │   │       │   └── java/
│   │   │       │       └── tv/
│   │   │       │           └── danmaku/
│   │   │       │               └── ijk/
│   │   │       │                   └── media/
│   │   │       │                       └── exo/
│   │   │       │                           └── ApplicationTest.java
│   │   │       └── main/
│   │   │           ├── AndroidManifest.xml
│   │   │           ├── java/
│   │   │           │   └── tv/
│   │   │           │       └── danmaku/
│   │   │           │           └── ijk/
│   │   │           │               └── media/
│   │   │           │                   └── exo/
│   │   │           │                       ├── IjkExoMediaPlayer.java
│   │   │           │                       └── demo/
│   │   │           │                           ├── EventLogger.java
│   │   │           │                           ├── SmoothStreamingTestMediaDrmCallback.java
│   │   │           │                           └── player/
│   │   │           │                               ├── DashRendererBuilder.java
│   │   │           │                               ├── DemoPlayer.java
│   │   │           │                               ├── ExtractorRendererBuilder.java
│   │   │           │                               ├── HlsRendererBuilder.java
│   │   │           │                               └── SmoothStreamingRendererBuilder.java
│   │   │           └── res/
│   │   │               └── values/
│   │   │                   └── strings.xml
│   │   ├── ijkplayer-java/
│   │   │   ├── .gitignore
│   │   │   ├── build.gradle
│   │   │   ├── gradle.properties
│   │   │   ├── proguard-rules.pro
│   │   │   └── src/
│   │   │       ├── androidTest/
│   │   │       │   └── java/
│   │   │       │       └── tv/
│   │   │       │           └── danmaku/
│   │   │       │               └── ijk/
│   │   │       │                   └── media/
│   │   │       │                       └── player/
│   │   │       │                           └── ApplicationTest.java
│   │   │       └── main/
│   │   │           ├── .classpath
│   │   │           ├── .project
│   │   │           ├── .settings/
│   │   │           │   └── org.eclipse.jdt.core.prefs
│   │   │           ├── AndroidManifest.xml
│   │   │           ├── java/
│   │   │           │   └── tv/
│   │   │           │       └── danmaku/
│   │   │           │           └── ijk/
│   │   │           │               └── media/
│   │   │           │                   └── player/
│   │   │           │                       ├── AbstractMediaPlayer.java
│   │   │           │                       ├── AndroidMediaPlayer.java
│   │   │           │                       ├── IMediaPlayer.java
│   │   │           │                       ├── ISurfaceTextureHolder.java
│   │   │           │                       ├── ISurfaceTextureHost.java
│   │   │           │                       ├── IjkLibLoader.java
│   │   │           │                       ├── IjkMediaCodecInfo.java
│   │   │           │                       ├── IjkMediaMeta.java
│   │   │           │                       ├── IjkMediaPlayer.java
│   │   │           │                       ├── IjkTimedText.java
│   │   │           │                       ├── MediaInfo.java
│   │   │           │                       ├── MediaPlayerProxy.java
│   │   │           │                       ├── TextureMediaPlayer.java
│   │   │           │                       ├── annotations/
│   │   │           │                       │   ├── AccessedByNative.java
│   │   │           │                       │   └── CalledByNative.java
│   │   │           │                       ├── exceptions/
│   │   │           │                       │   └── IjkMediaException.java
│   │   │           │                       ├── ffmpeg/
│   │   │           │                       │   └── FFmpegApi.java
│   │   │           │                       ├── misc/
│   │   │           │                       │   ├── AndroidMediaFormat.java
│   │   │           │                       │   ├── AndroidTrackInfo.java
│   │   │           │                       │   ├── IAndroidIO.java
│   │   │           │                       │   ├── IMediaDataSource.java
│   │   │           │                       │   ├── IMediaFormat.java
│   │   │           │                       │   ├── ITrackInfo.java
│   │   │           │                       │   ├── IjkMediaFormat.java
│   │   │           │                       │   └── IjkTrackInfo.java
│   │   │           │                       └── pragma/
│   │   │           │                           ├── DebugLog.java
│   │   │           │                           └── Pragma.java
│   │   │           ├── project.properties
│   │   │           └── res/
│   │   │               └── values/
│   │   │                   └── strings.xml
│   │   ├── ijkplayer-x86/
│   │   │   ├── .gitignore
│   │   │   ├── build.gradle
│   │   │   ├── gradle.properties
│   │   │   ├── proguard-rules.pro
│   │   │   └── src/
│   │   │       ├── androidTest/
│   │   │       │   └── java/
│   │   │       │       └── tv/
│   │   │       │           └── danmaku/
│   │   │       │               └── ijk/
│   │   │       │                   └── media/
│   │   │       │                       └── ijkplayer/
│   │   │       │                           └── ApplicationTest.java
│   │   │       └── main/
│   │   │           ├── .classpath
│   │   │           ├── .project
│   │   │           ├── .settings/
│   │   │           │   └── org.eclipse.jdt.core.prefs
│   │   │           ├── AndroidManifest.xml
│   │   │           ├── java/
│   │   │           │   └── tv/
│   │   │           │       └── danmaku/
│   │   │           │           └── ijk/
│   │   │           │               └── media/
│   │   │           │                   └── player_x86/
│   │   │           │                       └── Pragma.java
│   │   │           ├── jni/
│   │   │           │   ├── Application.mk
│   │   │           │   └── ffmpeg/
│   │   │           │       └── Android.mk
│   │   │           ├── project.properties
│   │   │           └── res/
│   │   │               └── values/
│   │   │                   └── strings.xml
│   │   ├── ijkplayer-x86_64/
│   │   │   ├── .gitignore
│   │   │   ├── build.gradle
│   │   │   ├── gradle.properties
│   │   │   ├── proguard-rules.pro
│   │   │   └── src/
│   │   │       ├── androidTest/
│   │   │       │   └── java/
│   │   │       │       └── com/
│   │   │       │           └── example/
│   │   │       │               └── ijkplayer_x86_64/
│   │   │       │                   └── ApplicationTest.java
│   │   │       └── main/
│   │   │           ├── AndroidManifest.xml
│   │   │           ├── jni/
│   │   │           │   ├── Application.mk
│   │   │           │   └── ffmpeg/
│   │   │           │       └── Android.mk
│   │   │           └── res/
│   │   │               └── values/
│   │   │                   └── strings.xml
│   │   ├── settings.gradle
│   │   └── tools/
│   │       ├── gradle-bintray-upload.gradle
│   │       ├── gradle-mvn-push.gradle
│   │       └── gradle-on-demand.gradle
│   ├── patch-debugging-with-lldb.sh
│   └── patches/
│       ├── 0001-gitignore-ignore-.externalNativeBuild.patch
│       ├── 0002-gradle-upgrade-build-tool-to-2.2.0-beta2.patch
│       ├── 0003-arm64-enable-debugging-with-LLDB.patch
│       ├── 0003-armv5-enable-debugging-with-LLDB.patch
│       ├── 0003-armv7a-enable-debugging-with-LLDB.patch
│       ├── 0003-x86-enable-debugging-with-LLDB.patch
│       ├── 0003-x86_64-enable-debugging-with-LLDB.patch
│       ├── 0004-armv7a-link-prebuilt-staic-libraries-of-ffmepg.patch
│       ├── 0004-x86-link-prebuilt-staic-libraries-of-ffmepg.patch
│       └── 0004-x86_64-link-prebuilt-staic-libraries-of-ffmepg.patch
├── compile-android-j4a.sh
├── config/
│   ├── module-default.sh
│   ├── module-lite-hevc.sh
│   └── module-lite.sh
├── doc/
│   └── preflight_checklist.md
├── ijkmedia/
│   ├── Android.mk
│   ├── ijkj4a/
│   │   ├── .gitignore
│   │   ├── Android.mk
│   │   ├── Makefile
│   │   ├── j4a/
│   │   │   ├── class/
│   │   │   │   ├── android/
│   │   │   │   │   ├── media/
│   │   │   │   │   │   ├── AudioTrack.c
│   │   │   │   │   │   ├── AudioTrack.h
│   │   │   │   │   │   ├── AudioTrack.include.j4a
│   │   │   │   │   │   ├── AudioTrack.loader.j4a
│   │   │   │   │   │   ├── MediaCodec.c
│   │   │   │   │   │   ├── MediaCodec.h
│   │   │   │   │   │   ├── MediaCodec.include.j4a
│   │   │   │   │   │   ├── MediaCodec.loader.j4a
│   │   │   │   │   │   ├── MediaFormat.c
│   │   │   │   │   │   ├── MediaFormat.h
│   │   │   │   │   │   ├── MediaFormat.include.j4a
│   │   │   │   │   │   ├── MediaFormat.loader.j4a
│   │   │   │   │   │   ├── PlaybackParams.c
│   │   │   │   │   │   ├── PlaybackParams.h
│   │   │   │   │   │   ├── PlaybackParams.include.j4a
│   │   │   │   │   │   └── PlaybackParams.loader.j4a
│   │   │   │   │   └── os/
│   │   │   │   │       ├── Build.c
│   │   │   │   │       ├── Build.h
│   │   │   │   │       ├── Build.include.j4a
│   │   │   │   │       ├── Build.loader.j4a
│   │   │   │   │       ├── Bundle.c
│   │   │   │   │       ├── Bundle.h
│   │   │   │   │       ├── Bundle.include.j4a
│   │   │   │   │       └── Bundle.loader.j4a
│   │   │   │   ├── java/
│   │   │   │   │   ├── nio/
│   │   │   │   │   │   ├── Buffer.c
│   │   │   │   │   │   ├── Buffer.h
│   │   │   │   │   │   ├── Buffer.include.j4a
│   │   │   │   │   │   ├── Buffer.loader.j4a
│   │   │   │   │   │   ├── ByteBuffer.c
│   │   │   │   │   │   ├── ByteBuffer.h
│   │   │   │   │   │   ├── ByteBuffer.include.j4a
│   │   │   │   │   │   └── ByteBuffer.loader.j4a
│   │   │   │   │   └── util/
│   │   │   │   │       ├── ArrayList.c
│   │   │   │   │       ├── ArrayList.h
│   │   │   │   │       ├── ArrayList.include.j4a
│   │   │   │   │       └── ArrayList.loader.j4a
│   │   │   │   └── tv/
│   │   │   │       └── danmaku/
│   │   │   │           └── ijk/
│   │   │   │               └── media/
│   │   │   │                   └── player/
│   │   │   │                       ├── IjkMediaPlayer.c
│   │   │   │                       ├── IjkMediaPlayer.h
│   │   │   │                       ├── IjkMediaPlayer.include.j4a
│   │   │   │                       ├── IjkMediaPlayer.loader.j4a
│   │   │   │                       └── misc/
│   │   │   │                           ├── IAndroidIO.c
│   │   │   │                           ├── IAndroidIO.h
│   │   │   │                           ├── IAndroidIO.include.j4a
│   │   │   │                           ├── IAndroidIO.loader.j4a
│   │   │   │                           ├── IMediaDataSource.c
│   │   │   │                           ├── IMediaDataSource.h
│   │   │   │                           ├── IMediaDataSource.include.j4a
│   │   │   │                           └── IMediaDataSource.loader.j4a
│   │   │   ├── j4a_allclasses.c
│   │   │   ├── j4a_allclasses.h
│   │   │   ├── j4a_allclasses.include.h
│   │   │   ├── j4a_allclasses.loader.h
│   │   │   ├── j4a_base.c
│   │   │   └── j4a_base.h
│   │   ├── j4au/
│   │   │   └── class/
│   │   │       ├── android/
│   │   │       │   └── media/
│   │   │       │       ├── AudioTrack.util.c
│   │   │       │       └── AudioTrack.util.h
│   │   │       └── java/
│   │   │           └── nio/
│   │   │               ├── ByteBuffer.util.c
│   │   │               └── ByteBuffer.util.h
│   │   └── java/
│   │       ├── android/
│   │       │   ├── media/
│   │       │   │   ├── AudioTrack.java
│   │       │   │   ├── MediaCodec.java
│   │       │   │   ├── MediaCrypto.java
│   │       │   │   ├── MediaFormat.java
│   │       │   │   └── PlaybackParams.java
│   │       │   └── os/
│   │       │       ├── Build.java
│   │       │       └── Bundle.java
│   │       ├── java/
│   │       │   ├── nio/
│   │       │   │   ├── Buffer.java
│   │       │   │   └── ByteBuffer.java
│   │       │   └── util/
│   │       │       └── ArrayList.java
│   │       └── tv/
│   │           └── danmaku/
│   │               └── ijk/
│   │                   └── media/
│   │                       └── player/
│   │                           ├── IjkMediaPlayer.java
│   │                           └── misc/
│   │                               ├── IAndroidIO.java
│   │                               └── IMediaDataSource.java
│   ├── ijkplayer/
│   │   ├── .gitignore
│   │   ├── Android.mk
│   │   ├── android/
│   │   │   ├── ffmpeg_api_jni.c
│   │   │   ├── ffmpeg_api_jni.h
│   │   │   ├── ijkplayer_android.c
│   │   │   ├── ijkplayer_android.h
│   │   │   ├── ijkplayer_android_def.h
│   │   │   ├── ijkplayer_jni.c
│   │   │   └── pipeline/
│   │   │       ├── ffpipeline_android.c
│   │   │       ├── ffpipeline_android.h
│   │   │       ├── ffpipenode_android_mediacodec_vdec.c
│   │   │       ├── ffpipenode_android_mediacodec_vdec.h
│   │   │       ├── h264_nal.h
│   │   │       ├── hevc_nal.h
│   │   │       └── mpeg4_esds.h
│   │   ├── config.h
│   │   ├── ff_cmdutils.c
│   │   ├── ff_cmdutils.h
│   │   ├── ff_fferror.h
│   │   ├── ff_ffinc.h
│   │   ├── ff_ffmsg.h
│   │   ├── ff_ffmsg_queue.h
│   │   ├── ff_ffpipeline.c
│   │   ├── ff_ffpipeline.h
│   │   ├── ff_ffpipenode.c
│   │   ├── ff_ffpipenode.h
│   │   ├── ff_ffplay.c
│   │   ├── ff_ffplay.h
│   │   ├── ff_ffplay_debug.h
│   │   ├── ff_ffplay_def.h
│   │   ├── ff_ffplay_options.h
│   │   ├── ijkavformat/
│   │   │   ├── allformats.c
│   │   │   ├── cJSON.c
│   │   │   ├── cJSON.h
│   │   │   ├── ijkasync.c
│   │   │   ├── ijkavformat.h
│   │   │   ├── ijkio.c
│   │   │   ├── ijkioandroidio.c
│   │   │   ├── ijkioapplication.c
│   │   │   ├── ijkioapplication.h
│   │   │   ├── ijkiocache.c
│   │   │   ├── ijkioffio.c
│   │   │   ├── ijkiomanager.c
│   │   │   ├── ijkiomanager.h
│   │   │   ├── ijkioprotocol.c
│   │   │   ├── ijkioprotocol.h
│   │   │   ├── ijkiourl.h
│   │   │   ├── ijkiourlhook.c
│   │   │   ├── ijklas.c
│   │   │   ├── ijklas.h
│   │   │   ├── ijklivehook.c
│   │   │   ├── ijklongurl.c
│   │   │   ├── ijkmediadatasource.c
│   │   │   ├── ijksegment.c
│   │   │   └── ijkurlhook.c
│   │   ├── ijkavutil/
│   │   │   ├── ijkdict.c
│   │   │   ├── ijkdict.h
│   │   │   ├── ijkfifo.c
│   │   │   ├── ijkfifo.h
│   │   │   ├── ijkstl.cpp
│   │   │   ├── ijkstl.h
│   │   │   ├── ijkthreadpool.c
│   │   │   ├── ijkthreadpool.h
│   │   │   ├── ijktree.c
│   │   │   ├── ijktree.h
│   │   │   ├── ijkutils.c
│   │   │   ├── ijkutils.h
│   │   │   └── opt.h
│   │   ├── ijkmeta.c
│   │   ├── ijkmeta.h
│   │   ├── ijkplayer.c
│   │   ├── ijkplayer.h
│   │   ├── ijkplayer_internal.h
│   │   ├── pipeline/
│   │   │   ├── ffpipeline_ffplay.c
│   │   │   ├── ffpipeline_ffplay.h
│   │   │   ├── ffpipenode_ffplay_vdec.c
│   │   │   └── ffpipenode_ffplay_vdec.h
│   │   └── version.sh
│   └── ijksdl/
│       ├── Android.mk
│       ├── android/
│       │   ├── android_audiotrack.c
│       │   ├── android_audiotrack.h
│       │   ├── android_nativewindow.c
│       │   ├── android_nativewindow.h
│       │   ├── ijksdl_android.h
│       │   ├── ijksdl_android_jni.c
│       │   ├── ijksdl_android_jni.h
│       │   ├── ijksdl_aout_android_audiotrack.c
│       │   ├── ijksdl_aout_android_audiotrack.h
│       │   ├── ijksdl_aout_android_opensles.c
│       │   ├── ijksdl_aout_android_opensles.h
│       │   ├── ijksdl_codec_android_mediacodec.c
│       │   ├── ijksdl_codec_android_mediacodec.h
│       │   ├── ijksdl_codec_android_mediacodec_dummy.c
│       │   ├── ijksdl_codec_android_mediacodec_dummy.h
│       │   ├── ijksdl_codec_android_mediacodec_internal.c
│       │   ├── ijksdl_codec_android_mediacodec_internal.h
│       │   ├── ijksdl_codec_android_mediacodec_java.c
│       │   ├── ijksdl_codec_android_mediacodec_java.h
│       │   ├── ijksdl_codec_android_mediadef.c
│       │   ├── ijksdl_codec_android_mediadef.h
│       │   ├── ijksdl_codec_android_mediaformat.c
│       │   ├── ijksdl_codec_android_mediaformat.h
│       │   ├── ijksdl_codec_android_mediaformat_internal.h
│       │   ├── ijksdl_codec_android_mediaformat_java.c
│       │   ├── ijksdl_codec_android_mediaformat_java.h
│       │   ├── ijksdl_inc_internal_android.h
│       │   ├── ijksdl_vout_android_nativewindow.c
│       │   ├── ijksdl_vout_android_nativewindow.h
│       │   ├── ijksdl_vout_android_surface.c
│       │   ├── ijksdl_vout_android_surface.h
│       │   ├── ijksdl_vout_overlay_android_mediacodec.c
│       │   └── ijksdl_vout_overlay_android_mediacodec.h
│       ├── dummy/
│       │   ├── ijksdl_dummy.h
│       │   ├── ijksdl_vout_dummy.c
│       │   └── ijksdl_vout_dummy.h
│       ├── ffmpeg/
│       │   ├── abi_all/
│       │   │   └── image_convert.c
│       │   ├── ijksdl_image_convert.h
│       │   ├── ijksdl_inc_ffmpeg.h
│       │   ├── ijksdl_vout_overlay_ffmpeg.c
│       │   └── ijksdl_vout_overlay_ffmpeg.h
│       ├── gles2/
│       │   ├── color.c
│       │   ├── common.c
│       │   ├── fsh/
│       │   │   ├── rgb.fsh.c
│       │   │   ├── yuv420p.fsh.c
│       │   │   ├── yuv420sp.fsh.c
│       │   │   └── yuv444p10le.fsh.c
│       │   ├── internal.h
│       │   ├── renderer.c
│       │   ├── renderer_rgb.c
│       │   ├── renderer_yuv420p.c
│       │   ├── renderer_yuv420sp.c
│       │   ├── renderer_yuv420sp_vtb.m
│       │   ├── renderer_yuv444p10le.c
│       │   ├── shader.c
│       │   └── vsh/
│       │       └── mvp.vsh.c
│       ├── ijksdl.h
│       ├── ijksdl_aout.c
│       ├── ijksdl_aout.h
│       ├── ijksdl_aout_internal.h
│       ├── ijksdl_audio.c
│       ├── ijksdl_audio.h
│       ├── ijksdl_class.h
│       ├── ijksdl_container.h
│       ├── ijksdl_egl.c
│       ├── ijksdl_egl.h
│       ├── ijksdl_endian.h
│       ├── ijksdl_error.c
│       ├── ijksdl_error.h
│       ├── ijksdl_extra_log.c
│       ├── ijksdl_extra_log.h
│       ├── ijksdl_fourcc.h
│       ├── ijksdl_gles2.h
│       ├── ijksdl_inc_internal.h
│       ├── ijksdl_log.h
│       ├── ijksdl_misc.h
│       ├── ijksdl_mutex.c
│       ├── ijksdl_mutex.h
│       ├── ijksdl_stdinc.c
│       ├── ijksdl_stdinc.h
│       ├── ijksdl_thread.c
│       ├── ijksdl_thread.h
│       ├── ijksdl_timer.c
│       ├── ijksdl_timer.h
│       ├── ijksdl_video.h
│       ├── ijksdl_vout.c
│       ├── ijksdl_vout.h
│       └── ijksdl_vout_internal.h
├── ijkprof/
│   └── android-ndk-profiler-dummy/
│       └── jni/
│           ├── Android-include.mk
│           ├── Android.mk
│           ├── prof.c
│           └── prof.h
├── init-android-exo.sh
├── init-android-j4a.sh
├── init-android-libsoxr.sh
├── init-android-libyuv.sh
├── init-android-openssl.sh
├── init-android-prof.sh
├── init-android-soundtouch.sh
├── init-android.sh
├── init-config.sh
├── init-ios-openssl.sh
├── init-ios.sh
├── ios/
│   ├── .gitignore
│   ├── IJKMediaDemo/
│   │   ├── IJKMediaDemo/
│   │   │   ├── AppIcons.xcassets/
│   │   │   │   └── AppIcon.appiconset/
│   │   │   │       └── Contents.json
│   │   │   ├── Barcode.h
│   │   │   ├── Barcode.m
│   │   │   ├── IJKAppDelegate.h
│   │   │   ├── IJKAppDelegate.m
│   │   │   ├── IJKCommon.h
│   │   │   ├── IJKDemoHistory.h
│   │   │   ├── IJKDemoHistory.m
│   │   │   ├── IJKDemoInputURLViewController.h
│   │   │   ├── IJKDemoInputURLViewController.m
│   │   │   ├── IJKDemoInputURLViewController.xib
│   │   │   ├── IJKDemoLocalFolderViewController.h
│   │   │   ├── IJKDemoLocalFolderViewController.m
│   │   │   ├── IJKDemoMainViewController.h
│   │   │   ├── IJKDemoMainViewController.m
│   │   │   ├── IJKDemoMainViewController.xib
│   │   │   ├── IJKDemoSampleViewController.h
│   │   │   ├── IJKDemoSampleViewController.m
│   │   │   ├── IJKDemoSampleViewController.xib
│   │   │   ├── IJKMediaControl.h
│   │   │   ├── IJKMediaControl.m
│   │   │   ├── IJKMediaDemo-Info.plist
│   │   │   ├── IJKMediaDemo-Prefix.pch
│   │   │   ├── IJKMoviePlayerViewController.h
│   │   │   ├── IJKMoviePlayerViewController.m
│   │   │   ├── IJKMoviePlayerViewController.xib
│   │   │   ├── IJKQRCodeScanViewController.h
│   │   │   ├── IJKQRCodeScanViewController.m
│   │   │   ├── IJKQRCodeScanViewController.xib
│   │   │   ├── Images.xcassets/
│   │   │   │   ├── AppIcon.appiconset/
│   │   │   │   │   └── Contents.json
│   │   │   │   └── LaunchImage.launchimage/
│   │   │   │       └── Contents.json
│   │   │   ├── LaunchScreen.xib
│   │   │   ├── en.lproj/
│   │   │   │   └── InfoPlist.strings
│   │   │   └── main.m
│   │   ├── IJKMediaDemo.xcodeproj/
│   │   │   ├── project.pbxproj
│   │   │   └── project.xcworkspace/
│   │   │       └── contents.xcworkspacedata
│   │   └── XCAssets/
│   │       ├── AppIcons.xcassets/
│   │       │   └── AppIcon.appiconset/
│   │       │       └── Contents.json
│   │       ├── LaunchImages.xcassets/
│   │       │   └── LaunchImage.launchimage/
│   │       │       └── Contents.json
│   │       └── MoviePlayerImages.xcassets/
│   │           └── MoviePlayer/
│   │               ├── btn_player_back_highlighted.imageset/
│   │               │   └── Contents.json
│   │               ├── btn_player_pause.imageset/
│   │               │   └── Contents.json
│   │               ├── btn_player_play.imageset/
│   │               │   └── Contents.json
│   │               ├── player_bottom_control_bg.imageset/
│   │               │   └── Contents.json
│   │               └── player_top_control_bg.imageset/
│   │                   └── Contents.json
│   ├── IJKMediaPlayer/
│   │   ├── IJKMediaFramework/
│   │   │   ├── IJKMediaFramework.h
│   │   │   └── Info.plist
│   │   ├── IJKMediaFrameworkTests/
│   │   │   ├── IJKMediaFrameworkTests.m
│   │   │   └── Info.plist
│   │   ├── IJKMediaFrameworkWithSSL/
│   │   │   └── IJKMediaFrameworkWithSSL.h
│   │   ├── IJKMediaFrameworkWithSSL.plist
│   │   ├── IJKMediaPlayer/
│   │   │   ├── IJKAVMoviePlayerController.h
│   │   │   ├── IJKAVMoviePlayerController.m
│   │   │   ├── IJKAVPlayerLayerView.h
│   │   │   ├── IJKAVPlayerLayerView.m
│   │   │   ├── IJKAudioKit.h
│   │   │   ├── IJKAudioKit.m
│   │   │   ├── IJKDeviceModel.h
│   │   │   ├── IJKDeviceModel.m
│   │   │   ├── IJKFFMonitor.h
│   │   │   ├── IJKFFMonitor.m
│   │   │   ├── IJKFFMoviePlayerController.h
│   │   │   ├── IJKFFMoviePlayerController.m
│   │   │   ├── IJKFFMoviePlayerDef.h
│   │   │   ├── IJKFFMoviePlayerDef.m
│   │   │   ├── IJKFFOptions.h
│   │   │   ├── IJKFFOptions.m
│   │   │   ├── IJKKVOController.h
│   │   │   ├── IJKKVOController.m
│   │   │   ├── IJKMPMoviePlayerController.h
│   │   │   ├── IJKMPMoviePlayerController.m
│   │   │   ├── IJKMediaModule.h
│   │   │   ├── IJKMediaModule.m
│   │   │   ├── IJKMediaPlayback.h
│   │   │   ├── IJKMediaPlayback.m
│   │   │   ├── IJKMediaPlayer-Prefix.pch
│   │   │   ├── IJKMediaPlayer.h
│   │   │   ├── IJKMediaUtils.h
│   │   │   ├── IJKMediaUtils.m
│   │   │   ├── IJKNotificationManager.h
│   │   │   ├── IJKNotificationManager.m
│   │   │   ├── IJKSDLGLViewProtocol.h
│   │   │   ├── NSString+IJKMedia.h
│   │   │   ├── NSString+IJKMedia.m
│   │   │   └── ijkmedia/
│   │   │       ├── ijkplayer/
│   │   │       │   └── ios/
│   │   │       │       ├── ijkplayer_ios.h
│   │   │       │       ├── ijkplayer_ios.m
│   │   │       │       └── pipeline/
│   │   │       │           ├── IJKVideoToolBox.h
│   │   │       │           ├── IJKVideoToolBox.m
│   │   │       │           ├── IJKVideoToolBoxAsync.h
│   │   │       │           ├── IJKVideoToolBoxAsync.m
│   │   │       │           ├── IJKVideoToolBoxSync.h
│   │   │       │           ├── IJKVideoToolBoxSync.m
│   │   │       │           ├── ffpipeline_ios.c
│   │   │       │           ├── ffpipeline_ios.h
│   │   │       │           ├── ffpipenode_ios_videotoolbox_vdec.h
│   │   │       │           ├── ffpipenode_ios_videotoolbox_vdec.m
│   │   │       │           └── h264_sps_parser.h
│   │   │       └── ijksdl/
│   │   │           └── ios/
│   │   │               ├── IJKSDLAudioKit.h
│   │   │               ├── IJKSDLAudioKit.m
│   │   │               ├── IJKSDLAudioQueueController.h
│   │   │               ├── IJKSDLAudioQueueController.m
│   │   │               ├── IJKSDLAudioUnitController.h
│   │   │               ├── IJKSDLAudioUnitController.m
│   │   │               ├── IJKSDLGLView.h
│   │   │               ├── IJKSDLGLView.m
│   │   │               ├── IJKSDLHudViewCell.h
│   │   │               ├── IJKSDLHudViewCell.m
│   │   │               ├── IJKSDLHudViewController.h
│   │   │               ├── IJKSDLHudViewController.m
│   │   │               ├── ijksdl_aout_ios_audiounit.h
│   │   │               ├── ijksdl_aout_ios_audiounit.m
│   │   │               ├── ijksdl_ios.h
│   │   │               ├── ijksdl_thread_ios.h
│   │   │               ├── ijksdl_thread_ios.m
│   │   │               ├── ijksdl_vout_ios_gles2.h
│   │   │               ├── ijksdl_vout_ios_gles2.m
│   │   │               ├── ijksdl_vout_overlay_videotoolbox.h
│   │   │               └── ijksdl_vout_overlay_videotoolbox.m
│   │   └── IJKMediaPlayer.xcodeproj/
│   │       ├── project.pbxproj
│   │       └── project.xcworkspace/
│   │           └── contents.xcworkspacedata
│   ├── IJKMediaPodDemo/
│   │   ├── .gitignore
│   │   ├── IJKMediaPodDemo/
│   │   │   ├── AppDelegate.h
│   │   │   ├── AppDelegate.m
│   │   │   ├── Base.lproj/
│   │   │   │   ├── LaunchScreen.xib
│   │   │   │   └── Main.storyboard
│   │   │   ├── Images.xcassets/
│   │   │   │   └── AppIcon.appiconset/
│   │   │   │       └── Contents.json
│   │   │   ├── Info.plist
│   │   │   ├── ViewController.h
│   │   │   ├── ViewController.m
│   │   │   └── main.m
│   │   ├── IJKMediaPodDemo.xcodeproj/
│   │   │   ├── project.pbxproj
│   │   │   └── project.xcworkspace/
│   │   │       └── contents.xcworkspacedata
│   │   ├── IJKMediaPodDemoTests/
│   │   │   ├── IJKMediaPodDemoTests.m
│   │   │   └── Info.plist
│   │   └── Podfile
│   ├── compile-ffmpeg.sh
│   ├── compile-openssl.sh
│   └── tools/
│       ├── avconfig.h
│       ├── config.h
│       ├── do-compile-ffmpeg.sh
│       ├── do-compile-openssl.sh
│       └── ffversion.h
├── tools/
│   ├── .gitignore
│   ├── copyrighter/
│   │   ├── CRContext.py
│   │   ├── CRCopyright.py
│   │   ├── CRFile.py
│   │   ├── __init__.py
│   │   └── __main__.py
│   ├── pull-repo-base.sh
│   ├── pull-repo-ref.sh
│   ├── setup-as-commiter.sh
│   └── sync-mirrors.sh
└── version.sh
Download .txt
Showing preview only (260K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2730 symbols across 247 files)

FILE: android/ijkplayer/ijkplayer-arm64/src/androidTest/java/tv/danmaku/ijk/media/player_arm64/ApplicationTest.java
  class ApplicationTest (line 9) | public class ApplicationTest extends ApplicationTestCase<Application> {
    method ApplicationTest (line 10) | public ApplicationTest() {

FILE: android/ijkplayer/ijkplayer-arm64/src/main/java/tv/danmaku/ijk/media/player_arm64/Pragma.java
  class Pragma (line 20) | public class Pragma {

FILE: android/ijkplayer/ijkplayer-armv5/src/androidTest/java/tv/danmaku/ijk/media/player_armv5/ApplicationTest.java
  class ApplicationTest (line 9) | public class ApplicationTest extends ApplicationTestCase<Application> {
    method ApplicationTest (line 10) | public ApplicationTest() {

FILE: android/ijkplayer/ijkplayer-armv5/src/main/java/tv/danmaku/ijk/media/player_armv5/Pragma.java
  class Pragma (line 20) | public class Pragma {

FILE: android/ijkplayer/ijkplayer-armv7a/src/androidTest/java/tv/danmaku/ijk/media/player_armv7a/ApplicationTest.java
  class ApplicationTest (line 9) | public class ApplicationTest extends ApplicationTestCase<Application> {
    method ApplicationTest (line 10) | public ApplicationTest() {

FILE: android/ijkplayer/ijkplayer-armv7a/src/main/java/tv/danmaku/ijk/media/player_armv7a/Pragma.java
  class Pragma (line 20) | public class Pragma {

FILE: android/ijkplayer/ijkplayer-example/src/androidTest/java/tv/danmaku/ijk/media/example/ApplicationTest.java
  class ApplicationTest (line 9) | public class ApplicationTest extends ApplicationTestCase<Application> {
    method ApplicationTest (line 10) | public ApplicationTest() {

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/activities/FileExplorerActivity.java
  class FileExplorerActivity (line 36) | public class FileExplorerActivity extends AppActivity {
    method onCreate (line 39) | @Override
    method onResume (line 54) | @Override
    method onPause (line 61) | @Override
    method doOpenDirectory (line 68) | private void doOpenDirectory(String path, boolean addToBackStack) {
    method onClickFile (line 79) | @Subscribe

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/activities/RecentMediaActivity.java
  class RecentMediaActivity (line 32) | public class RecentMediaActivity extends AppActivity {
    method newIntent (line 33) | public static Intent newIntent(Context context) {
    method intentTo (line 38) | public static void intentTo(Context context) {
    method onCreate (line 42) | @Override
    method onPrepareOptionsMenu (line 53) | @Override

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/activities/SampleMediaActivity.java
  class SampleMediaActivity (line 32) | public class SampleMediaActivity extends AppActivity  {
    method newIntent (line 33) | public static Intent newIntent(Context context) {
    method intentTo (line 38) | public static void intentTo(Context context) {
    method onCreate (line 42) | @Override
    method onPrepareOptionsMenu (line 53) | @Override

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/activities/SettingsActivity.java
  class SettingsActivity (line 31) | public class SettingsActivity extends AppCompatActivity {
    method newIntent (line 32) | public static Intent newIntent(Context context) {
    method intentTo (line 37) | public static void intentTo(Context context) {
    method onCreate (line 41) | @Override

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/activities/VideoActivity.java
  class VideoActivity (line 51) | public class VideoActivity extends AppCompatActivity implements TracksFr...
    method newIntent (line 67) | public static Intent newIntent(Context context, String videoPath, Stri...
    method intentTo (line 74) | public static void intentTo(Context context, String videoPath, String ...
    method onCreate (line 78) | @Override
    method onBackPressed (line 156) | @Override
    method onStop (line 163) | @Override
    method onCreateOptionsMenu (line 177) | @Override
    method onOptionsItemSelected (line 183) | @Override
    method getTrackInfo (line 227) | @Override
    method selectTrack (line 235) | @Override
    method deselectTrack (line 240) | @Override
    method getSelectedTrack (line 245) | @Override

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/application/AppActivity.java
  class AppActivity (line 36) | @SuppressLint("Registered")
    method onCreate (line 40) | @Override
    method onRequestPermissionsResult (line 62) | @Override
    method onCreateOptionsMenu (line 75) | @Override
    method onOptionsItemSelected (line 81) | @Override
    method onPrepareOptionsMenu (line 96) | @Override

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/application/Settings.java
  class Settings (line 26) | public class Settings {
    method Settings (line 35) | public Settings(Context context) {
    method getEnableBackgroundPlay (line 40) | public boolean getEnableBackgroundPlay() {
    method getPlayer (line 45) | public int getPlayer() {
    method getUsingMediaCodec (line 55) | public boolean getUsingMediaCodec() {
    method getUsingMediaCodecAutoRotate (line 60) | public boolean getUsingMediaCodecAutoRotate() {
    method getMediaCodecHandleResolutionChange (line 65) | public boolean getMediaCodecHandleResolutionChange() {
    method getUsingOpenSLES (line 70) | public boolean getUsingOpenSLES() {
    method getPixelFormat (line 75) | public String getPixelFormat() {
    method getEnableNoView (line 80) | public boolean getEnableNoView() {
    method getEnableSurfaceView (line 85) | public boolean getEnableSurfaceView() {
    method getEnableTextureView (line 90) | public boolean getEnableTextureView() {
    method getEnableDetachedSurfaceTextureView (line 95) | public boolean getEnableDetachedSurfaceTextureView() {
    method getUsingMediaDataSource (line 100) | public boolean getUsingMediaDataSource() {
    method getLastDirectory (line 105) | public String getLastDirectory() {
    method setLastDirectory (line 110) | public void setLastDirectory(String path) {

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/content/PathCursor.java
  class PathCursor (line 32) | public class PathCursor extends AbstractCursor {
    method PathCursor (line 47) | PathCursor(File parentDirectory, File[] fileList) {
    method getCount (line 62) | @Override
    method getColumnNames (line 67) | @Override
    method getString (line 72) | @Override
    method getShort (line 83) | @Override
    method getInt (line 88) | @Override
    method getLong (line 93) | @Override
    method getFloat (line 106) | @Override
    method getDouble (line 111) | @Override
    method isNull (line 116) | @Override
    method compare (line 122) | @Override
    class FileItem (line 139) | private class FileItem {
      method FileItem (line 144) | public FileItem(String file) {
      method FileItem (line 148) | public FileItem(File file) {

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/content/PathCursorLoader.java
  class PathCursorLoader (line 27) | public class PathCursorLoader extends AsyncTaskLoader<Cursor> {
    method PathCursorLoader (line 30) | public PathCursorLoader(Context context) {
    method PathCursorLoader (line 34) | public PathCursorLoader(Context context, String path) {
    method PathCursorLoader (line 39) | public PathCursorLoader(Context context, File path) {
    method loadInBackground (line 44) | @Override
    method onStartLoading (line 50) | @Override

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/content/RecentMediaStorage.java
  class RecentMediaStorage (line 29) | public class RecentMediaStorage {
    method RecentMediaStorage (line 32) | public RecentMediaStorage(Context context) {
    method saveUrlAsync (line 36) | public void saveUrlAsync(String url) {
    method saveUrl (line 46) | public void saveUrl(String url) {
    method save (line 55) | public void save(ContentValues contentValue) {
    method getNameOfUrl (line 61) | public static String getNameOfUrl(String url) {
    method getNameOfUrl (line 65) | public static String getNameOfUrl(String url, String defaultName) {
    class Entry (line 77) | public static class Entry {
    class OpenHelper (line 92) | public static class OpenHelper extends SQLiteOpenHelper {
      method OpenHelper (line 102) | public OpenHelper(Context context) {
      method onCreate (line 106) | @Override
      method onUpgrade (line 111) | @Override
    class CursorLoader (line 116) | public static class CursorLoader extends AsyncTaskLoader<Cursor> {
      method CursorLoader (line 117) | public CursorLoader(Context context) {
      method loadInBackground (line 121) | @Override
      method onStartLoading (line 132) | @Override

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/eventbus/FileExplorerEvents.java
  class FileExplorerEvents (line 24) | public class FileExplorerEvents {
    method getBus (line 27) | public static Bus getBus() {
    method FileExplorerEvents (line 31) | private FileExplorerEvents() {
    class OnClickFile (line 35) | public static class OnClickFile {
      method OnClickFile (line 38) | public OnClickFile(String path) {
      method OnClickFile (line 42) | public OnClickFile(File file) {

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/fragments/FileListFragment.java
  class FileListFragment (line 45) | public class FileListFragment extends Fragment implements LoaderManager....
    method newInstance (line 53) | public static FileListFragment newInstance(String path) {
    method onCreateView (line 64) | @Nullable
    method onActivityCreated (line 76) | @Override
    method onCreateLoader (line 104) | @Override
    method onLoadFinished (line 111) | @Override
    method onLoaderReset (line 117) | @Override
    class VideoAdapter (line 122) | final class VideoAdapter extends SimpleCursorAdapter {
      class ViewHolder (line 123) | final class ViewHolder {
      method VideoAdapter (line 128) | public VideoAdapter(Context context) {
      method getView (line 134) | @Override
      method getItemId (line 161) | @Override
      method moveToPosition (line 170) | Cursor moveToPosition(int position) {
      method isDirectory (line 179) | public boolean isDirectory(int position) {
      method isVideo (line 187) | public boolean isVideo(int position) {
      method getFileName (line 195) | public String getFileName(int position) {
      method getFilePath (line 203) | public String getFilePath(int position) {

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/fragments/RecentMediaListFragment.java
  class RecentMediaListFragment (line 39) | public class RecentMediaListFragment extends Fragment implements LoaderM...
    method newInstance (line 43) | public static RecentMediaListFragment newInstance() {
    method onCreateView (line 48) | @Nullable
    method onActivityCreated (line 56) | @Override
    method onCreateLoader (line 76) | @Override
    method onLoadFinished (line 81) | @Override
    method onLoaderReset (line 87) | @Override
    class RecentMediaAdapter (line 92) | final class RecentMediaAdapter extends SimpleCursorAdapter {
      method RecentMediaAdapter (line 97) | public RecentMediaAdapter(Context context) {
      method swapCursor (line 103) | @Override
      method getItemId (line 114) | @Override
      method moveToPosition (line 123) | Cursor moveToPosition(int position) {
      method getUrl (line 132) | public String getUrl(int position) {
      method getName (line 140) | public String getName(int position) {

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/fragments/SampleMediaListFragment.java
  class SampleMediaListFragment (line 36) | public class SampleMediaListFragment extends Fragment {
    method newInstance (line 40) | public static SampleMediaListFragment newInstance() {
    method onCreateView (line 45) | @Nullable
    method onActivityCreated (line 53) | @Override
    class SampleMediaItem (line 148) | final class SampleMediaItem {
      method SampleMediaItem (line 152) | public SampleMediaItem(String url, String name) {
    class SampleMediaAdapter (line 158) | final class SampleMediaAdapter extends ArrayAdapter<SampleMediaItem> {
      method SampleMediaAdapter (line 159) | public SampleMediaAdapter(Context context) {
      method addItem (line 163) | public void addItem(String url, String name) {
      method getItemId (line 167) | @Override
      method getView (line 172) | @Override
      class ViewHolder (line 194) | final class ViewHolder {

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/fragments/SettingsFragment.java
  class SettingsFragment (line 25) | public class SettingsFragment extends PreferenceFragmentCompat {
    method newInstance (line 26) | public static SettingsFragment newInstance() {
    method onCreatePreferences (line 31) | @Override

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/fragments/TracksFragment.java
  class TracksFragment (line 39) | public class TracksFragment extends Fragment {
    method newInstance (line 43) | public static TracksFragment newInstance() {
    method onCreateView (line 48) | @Nullable
    method onActivityCreated (line 56) | @Override
    type ITrackHolder (line 106) | public interface ITrackHolder {
      method getTrackInfo (line 107) | ITrackInfo[] getTrackInfo();
      method getSelectedTrack (line 108) | int getSelectedTrack(int trackType);
      method selectTrack (line 109) | void selectTrack(int stream);
      method deselectTrack (line 110) | void deselectTrack(int stream);
    class TrackItem (line 113) | final class TrackItem {
      method TrackItem (line 119) | public TrackItem(int index, ITrackInfo trackInfo) {
      method getInfoInline (line 125) | public String getInfoInline() {
    class TrackAdapter (line 130) | final class TrackAdapter extends ArrayAdapter<TrackItem> {
      method TrackAdapter (line 134) | public TrackAdapter(Context context) {
      method setTrackHolder (line 138) | public void setTrackHolder(ITrackHolder trackHolder) {
      method getItemId (line 151) | @Override
      method getView (line 156) | @Override
      class ViewHolder (line 176) | final class ViewHolder {

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/services/MediaPlayerService.java
  class MediaPlayerService (line 28) | public class MediaPlayerService extends Service {
    method newIntent (line 31) | public static Intent newIntent(Context context) {
    method intentToStart (line 36) | public static void intentToStart(Context context) {
    method intentToStop (line 40) | public static void intentToStop(Context context) {
    method onBind (line 44) | @Nullable
    method setMediaPlayer (line 50) | public static void setMediaPlayer(IMediaPlayer mp) {
    method getMediaPlayer (line 60) | public static IMediaPlayer getMediaPlayer() {

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/widget/media/AndroidMediaController.java
  class AndroidMediaController (line 30) | public class AndroidMediaController extends MediaController implements I...
    method AndroidMediaController (line 33) | public AndroidMediaController(Context context, AttributeSet attrs) {
    method AndroidMediaController (line 38) | public AndroidMediaController(Context context, boolean useFastForward) {
    method AndroidMediaController (line 43) | public AndroidMediaController(Context context) {
    method initView (line 48) | private void initView(Context context) {
    method setSupportActionBar (line 51) | public void setSupportActionBar(@Nullable ActionBar actionBar) {
    method show (line 60) | @Override
    method hide (line 67) | @Override
    method showOnce (line 82) | public void showOnce(@NonNull View view) {

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/widget/media/FileMediaDataSource.java
  class FileMediaDataSource (line 28) | public class FileMediaDataSource implements IMediaDataSource {
    method FileMediaDataSource (line 32) | public FileMediaDataSource(File file) throws IOException {
    method readAt (line 37) | @Override
    method getSize (line 48) | @Override
    method close (line 53) | @Override

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/widget/media/IMediaController.java
  type IMediaController (line 23) | public interface IMediaController {
    method hide (line 24) | void hide();
    method isShowing (line 26) | boolean isShowing();
    method setAnchorView (line 28) | void setAnchorView(View view);
    method setEnabled (line 30) | void setEnabled(boolean enabled);
    method setMediaPlayer (line 32) | void setMediaPlayer(MediaController.MediaPlayerControl player);
    method show (line 34) | void show(int timeout);
    method show (line 36) | void show();
    method showOnce (line 41) | void showOnce(View view);

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/widget/media/IRenderView.java
  type IRenderView (line 29) | public interface IRenderView {
    method getView (line 37) | View getView();
    method shouldWaitForResize (line 39) | boolean shouldWaitForResize();
    method setVideoSize (line 41) | void setVideoSize(int videoWidth, int videoHeight);
    method setVideoSampleAspectRatio (line 43) | void setVideoSampleAspectRatio(int videoSarNum, int videoSarDen);
    method setVideoRotation (line 45) | void setVideoRotation(int degree);
    method setAspectRatio (line 47) | void setAspectRatio(int aspectRatio);
    method addRenderCallback (line 49) | void addRenderCallback(@NonNull IRenderCallback callback);
    method removeRenderCallback (line 51) | void removeRenderCallback(@NonNull IRenderCallback callback);
    type ISurfaceHolder (line 53) | interface ISurfaceHolder {
      method bindToMediaPlayer (line 54) | void bindToMediaPlayer(IMediaPlayer mp);
      method getRenderView (line 56) | @NonNull
      method getSurfaceHolder (line 59) | @Nullable
      method openSurface (line 62) | @Nullable
      method getSurfaceTexture (line 65) | @Nullable
    type IRenderCallback (line 69) | interface IRenderCallback {
      method onSurfaceCreated (line 75) | void onSurfaceCreated(@NonNull ISurfaceHolder holder, int width, int...
      method onSurfaceChanged (line 83) | void onSurfaceChanged(@NonNull ISurfaceHolder holder, int format, in...
      method onSurfaceDestroyed (line 85) | void onSurfaceDestroyed(@NonNull ISurfaceHolder holder);

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/widget/media/IjkVideoView.java
  class IjkVideoView (line 65) | public class IjkVideoView extends FrameLayout implements MediaController...
    method IjkVideoView (line 133) | public IjkVideoView(Context context) {
    method IjkVideoView (line 138) | public IjkVideoView(Context context, AttributeSet attrs) {
    method IjkVideoView (line 143) | public IjkVideoView(Context context, AttributeSet attrs, int defStyleA...
    method IjkVideoView (line 148) | @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    method initVideoView (line 159) | private void initVideoView(Context context) {
    method setRenderView (line 187) | public void setRenderView(IRenderView renderView) {
    method setRender (line 220) | public void setRender(int render) {
    method setHudView (line 247) | public void setHudView(TableLayout tableLayout) {
    method setVideoPath (line 256) | public void setVideoPath(String path) {
    method setVideoURI (line 270) | public void setVideoURI(Uri uri) {
    method setVideoURI (line 284) | private void setVideoURI(Uri uri, Map<String, String> headers) {
    method stopPlayback (line 296) | public void stopPlayback() {
    method openVideo (line 310) | @TargetApi(Build.VERSION_CODES.M)
    method setMediaController (line 381) | public void setMediaController(IMediaController controller) {
    method attachMediaController (line 389) | private void attachMediaController() {
    method onVideoSizeChanged (line 401) | public void onVideoSizeChanged(IMediaPlayer mp, int width, int height,...
    method onPrepared (line 418) | public void onPrepared(IMediaPlayer mp) {
    method onCompletion (line 475) | public void onCompletion(IMediaPlayer mp) {
    method onInfo (line 489) | public boolean onInfo(IMediaPlayer mp, int arg1, int arg2) {
    method onError (line 540) | public boolean onError(IMediaPlayer mp, int framework_err, int impl_er...
    method onBufferingUpdate (line 592) | public void onBufferingUpdate(IMediaPlayer mp, int percent) {
    method onSeekComplete (line 599) | @Override
    method onTimedText (line 607) | @Override
    method setOnPreparedListener (line 621) | public void setOnPreparedListener(IMediaPlayer.OnPreparedListener l) {
    method setOnCompletionListener (line 631) | public void setOnCompletionListener(IMediaPlayer.OnCompletionListener ...
    method setOnErrorListener (line 643) | public void setOnErrorListener(IMediaPlayer.OnErrorListener l) {
    method setOnInfoListener (line 653) | public void setOnInfoListener(IMediaPlayer.OnInfoListener l) {
    method bindSurfaceHolder (line 658) | private void bindSurfaceHolder(IMediaPlayer mp, IRenderView.ISurfaceHo...
    method onSurfaceChanged (line 671) | @Override
    method onSurfaceCreated (line 690) | @Override
    method onSurfaceDestroyed (line 704) | @Override
    method releaseWithoutStop (line 719) | public void releaseWithoutStop() {
    method release (line 727) | public void release(boolean cleartargetstate) {
    method onTouchEvent (line 742) | @Override
    method onTrackballEvent (line 750) | @Override
    method onKeyDown (line 758) | @Override
    method toggleMediaControlsVisiblity (line 799) | private void toggleMediaControlsVisiblity() {
    method start (line 807) | @Override
    method pause (line 816) | @Override
    method suspend (line 827) | public void suspend() {
    method resume (line 831) | public void resume() {
    method getDuration (line 835) | @Override
    method getCurrentPosition (line 844) | @Override
    method seekTo (line 852) | @Override
    method isPlaying (line 863) | @Override
    method getBufferPercentage (line 868) | @Override
    method isInPlaybackState (line 876) | private boolean isInPlaybackState() {
    method canPause (line 883) | @Override
    method canSeekBackward (line 888) | @Override
    method canSeekForward (line 893) | @Override
    method getAudioSessionId (line 898) | @Override
    method toggleAspectRatio (line 926) | public int toggleAspectRatio() {
    method initRenders (line 947) | private void initRenders() {
    method toggleRender (line 963) | public int toggleRender() {
    method getRenderText (line 972) | @NonNull
    method togglePlayer (line 995) | public int togglePlayer() {
    method getPlayerText (line 1005) | @NonNull
    method createPlayer (line 1025) | public IMediaPlayer createPlayer(int playerType) {
    method initBackground (line 1104) | private void initBackground() {
    method isBackgroundPlayEnabled (line 1114) | public boolean isBackgroundPlayEnabled() {
    method enterBackground (line 1118) | public void enterBackground() {
    method stopBackgroundPlay (line 1122) | public void stopBackgroundPlay() {
    method showMediaInfo (line 1129) | public void showMediaInfo() {
    method buildResolution (line 1195) | private String buildResolution(int width, int height, int sarNum, int ...
    method buildTimeMilli (line 1212) | private String buildTimeMilli(long duration) {
    method buildTrackType (line 1229) | private String buildTrackType(int type) {
    method buildLanguage (line 1248) | private String buildLanguage(String language) {
    method getTrackInfo (line 1254) | public ITrackInfo[] getTrackInfo() {
    method selectTrack (line 1261) | public void selectTrack(int stream) {
    method deselectTrack (line 1265) | public void deselectTrack(int stream) {
    method getSelectedTrack (line 1269) | public int getSelectedTrack(int trackType) {

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/widget/media/InfoHudViewHolder.java
  class InfoHudViewHolder (line 17) | public class InfoHudViewHolder {
    method InfoHudViewHolder (line 24) | public InfoHudViewHolder(Context context, TableLayout tableLayout) {
    method appendSection (line 28) | private void appendSection(int nameId) {
    method appendRow (line 32) | private void appendRow(int nameId) {
    method setRowValue (line 37) | private void setRowValue(int id, String value) {
    method setMediaPlayer (line 47) | public void setMediaPlayer(IMediaPlayer mp) {
    method formatedDurationMilli (line 56) | private static String formatedDurationMilli(long duration) {
    method formatedSpeed (line 64) | private static String formatedSpeed(long bytes,long elapsed_milli) {
    method updateLoadCost (line 83) | public void updateLoadCost(long time)  {
    method updateSeekCost (line 87) | public void updateSeekCost(long time)  {
    method formatedSize (line 91) | private static String formatedSize(long bytes) {
    method handleMessage (line 103) | @Override

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/widget/media/MeasureHelper.java
  class MeasureHelper (line 28) | public final class MeasureHelper {
    method MeasureHelper (line 43) | public MeasureHelper(View view) {
    method getView (line 47) | public View getView() {
    method setVideoSize (line 53) | public void setVideoSize(int videoWidth, int videoHeight) {
    method setVideoSampleAspectRatio (line 58) | public void setVideoSampleAspectRatio(int videoSarNum, int videoSarDen) {
    method setVideoRotation (line 63) | public void setVideoRotation(int videoRotationDegree) {
    method doMeasure (line 73) | public void doMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    method getMeasuredWidth (line 208) | public int getMeasuredWidth() {
    method getMeasuredHeight (line 212) | public int getMeasuredHeight() {
    method setAspectRatio (line 216) | public void setAspectRatio(int aspectRatio) {
    method getAspectRatioText (line 220) | @NonNull

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/widget/media/MediaPlayerCompat.java
  class MediaPlayerCompat (line 25) | public class MediaPlayerCompat {
    method getName (line 26) | public static String getName(IMediaPlayer mp) {
    method getIjkMediaPlayer (line 44) | public static IjkMediaPlayer getIjkMediaPlayer(IMediaPlayer mp) {
    method selectTrack (line 56) | public static void selectTrack(IMediaPlayer mp, int stream) {
    method deselectTrack (line 63) | public static void deselectTrack(IMediaPlayer mp, int stream) {
    method getSelectedTrack (line 70) | public static int getSelectedTrack(IMediaPlayer mp, int trackType) {

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/widget/media/SurfaceRenderView.java
  class SurfaceRenderView (line 42) | public class SurfaceRenderView extends SurfaceView implements IRenderView {
    method SurfaceRenderView (line 45) | public SurfaceRenderView(Context context) {
    method SurfaceRenderView (line 50) | public SurfaceRenderView(Context context, AttributeSet attrs) {
    method SurfaceRenderView (line 55) | public SurfaceRenderView(Context context, AttributeSet attrs, int defS...
    method SurfaceRenderView (line 60) | @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    method initView (line 66) | private void initView(Context context) {
    method getView (line 74) | @Override
    method shouldWaitForResize (line 79) | @Override
    method setVideoSize (line 87) | @Override
    method setVideoSampleAspectRatio (line 96) | @Override
    method setVideoRotation (line 104) | @Override
    method setAspectRatio (line 109) | @Override
    method onMeasure (line 115) | @Override
    class InternalSurfaceHolder (line 125) | private static final class InternalSurfaceHolder implements IRenderVie...
      method InternalSurfaceHolder (line 129) | public InternalSurfaceHolder(@NonNull SurfaceRenderView surfaceView,
      method bindToMediaPlayer (line 135) | public void bindToMediaPlayer(IMediaPlayer mp) {
      method getRenderView (line 146) | @NonNull
      method getSurfaceHolder (line 152) | @Nullable
      method getSurfaceTexture (line 158) | @Nullable
      method openSurface (line 164) | @Nullable
    method addRenderCallback (line 177) | @Override
    method removeRenderCallback (line 182) | @Override
    class SurfaceCallback (line 189) | private static final class SurfaceCallback implements SurfaceHolder.Ca...
      method SurfaceCallback (line 199) | public SurfaceCallback(@NonNull SurfaceRenderView surfaceView) {
      method addRenderCallback (line 203) | public void addRenderCallback(@NonNull IRenderCallback callback) {
      method removeRenderCallback (line 220) | public void removeRenderCallback(@NonNull IRenderCallback callback) {
      method surfaceCreated (line 224) | @Override
      method surfaceDestroyed (line 238) | @Override
      method surfaceChanged (line 252) | @Override
    method onInitializeAccessibilityEvent (line 274) | @Override
    method onInitializeAccessibilityNodeInfo (line 280) | @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/widget/media/TableLayoutBinder.java
  class TableLayoutBinder (line 30) | public class TableLayoutBinder {
    method TableLayoutBinder (line 35) | public TableLayoutBinder(Context context) {
    method TableLayoutBinder (line 39) | public TableLayoutBinder(Context context, int layoutResourceId) {
    method TableLayoutBinder (line 45) | public TableLayoutBinder(Context context, TableLayout tableLayout) {
    method appendRow1 (line 51) | public View appendRow1(String name, String value) {
    method appendRow1 (line 55) | public View appendRow1(int nameId, String value) {
    method appendRow2 (line 59) | public View appendRow2(String name, String value) {
    method appendRow2 (line 63) | public View appendRow2(int nameId, String value) {
    method appendSection (line 67) | public View appendSection(String name) {
    method appendSection (line 71) | public View appendSection(int nameId) {
    method appendRow (line 75) | public View appendRow(int layoutId, String name, String value) {
    method obtainViewHolder (line 83) | public ViewHolder obtainViewHolder(View rowView) {
    method setNameValueText (line 94) | public void setNameValueText(View rowView, String name, String value) {
    method setValueText (line 100) | public void setValueText(View rowView, String value) {
    method buildLayout (line 105) | public ViewGroup buildLayout() {
    method buildAlertDialogBuilder (line 109) | public AlertDialog.Builder buildAlertDialogBuilder() {
    class ViewHolder (line 115) | private static class ViewHolder {
      method setName (line 119) | public void setName(String name) {
      method setValue (line 125) | public void setValue(String value) {

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/widget/media/TextureRenderView.java
  class TextureRenderView (line 43) | @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    method TextureRenderView (line 48) | public TextureRenderView(Context context) {
    method TextureRenderView (line 53) | public TextureRenderView(Context context, AttributeSet attrs) {
    method TextureRenderView (line 58) | public TextureRenderView(Context context, AttributeSet attrs, int defS...
    method TextureRenderView (line 63) | @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    method initView (line 69) | private void initView(Context context) {
    method getView (line 75) | @Override
    method shouldWaitForResize (line 80) | @Override
    method onDetachedFromWindow (line 85) | @Override
    method setVideoSize (line 95) | @Override
    method setVideoSampleAspectRatio (line 103) | @Override
    method setVideoRotation (line 111) | @Override
    method setAspectRatio (line 117) | @Override
    method onMeasure (line 123) | @Override
    method getSurfaceHolder (line 133) | public IRenderView.ISurfaceHolder getSurfaceHolder() {
    class InternalSurfaceHolder (line 137) | private static final class InternalSurfaceHolder implements IRenderVie...
      method InternalSurfaceHolder (line 142) | public InternalSurfaceHolder(@NonNull TextureRenderView textureView,
      method bindToMediaPlayer (line 150) | @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
      method getRenderView (line 172) | @NonNull
      method getSurfaceHolder (line 178) | @Nullable
      method getSurfaceTexture (line 184) | @Nullable
      method openSurface (line 190) | @Nullable
    method addRenderCallback (line 203) | @Override
    method removeRenderCallback (line 208) | @Override
    class SurfaceCallback (line 215) | private static final class SurfaceCallback implements TextureView.Surf...
      method SurfaceCallback (line 228) | public SurfaceCallback(@NonNull TextureRenderView renderView) {
      method setOwnSurfaceTexture (line 232) | public void setOwnSurfaceTexture(boolean ownSurfaceTexture) {
      method addRenderCallback (line 236) | public void addRenderCallback(@NonNull IRenderCallback callback) {
      method removeRenderCallback (line 253) | public void removeRenderCallback(@NonNull IRenderCallback callback) {
      method onSurfaceTextureAvailable (line 257) | @Override
      method onSurfaceTextureSizeChanged (line 270) | @Override
      method onSurfaceTextureDestroyed (line 283) | @Override
      method onSurfaceTextureUpdated (line 299) | @Override
      method releaseSurfaceTexture (line 307) | @Override
      method willDetachFromWindow (line 344) | public void willDetachFromWindow() {
      method didDetachFromWindow (line 349) | public void didDetachFromWindow() {
    method onInitializeAccessibilityEvent (line 359) | @Override
    method onInitializeAccessibilityNodeInfo (line 365) | @Override

FILE: android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/widget/preference/IjkListPreference.java
  class IjkListPreference (line 28) | public class IjkListPreference extends ListPreference {
    method IjkListPreference (line 31) | public IjkListPreference(Context context) {
    method IjkListPreference (line 36) | public IjkListPreference(Context context, AttributeSet attrs) {
    method IjkListPreference (line 41) | public IjkListPreference(Context context, AttributeSet attrs, int defS...
    method IjkListPreference (line 46) | public IjkListPreference(Context context, AttributeSet attrs, int defS...
    method initPreference (line 51) | private void initPreference(Context context, AttributeSet attrs) {
    method onSetInitialValue (line 63) | @Override
    method setValue (line 69) | @Override
    method setValueIndex (line 75) | @Override
    method getEntryIndex (line 81) | public int getEntryIndex() {
    method setEntrySummaries (line 99) | public void setEntrySummaries(Context context, int resId) {
    method setEntrySummaries (line 103) | public void setEntrySummaries(CharSequence[] entrySummaries) {
    method getEntrySummaries (line 108) | public CharSequence[] getEntrySummaries() {
    method syncSummary (line 112) | private void syncSummary() {

FILE: android/ijkplayer/ijkplayer-exo/src/androidTest/java/tv/danmaku/ijk/media/exo/ApplicationTest.java
  class ApplicationTest (line 9) | public class ApplicationTest extends ApplicationTestCase<Application> {
    method ApplicationTest (line 10) | public ApplicationTest() {

FILE: android/ijkplayer/ijkplayer-exo/src/main/java/tv/danmaku/ijk/media/exo/IjkExoMediaPlayer.java
  class IjkExoMediaPlayer (line 43) | public class IjkExoMediaPlayer extends AbstractMediaPlayer {
    method IjkExoMediaPlayer (line 54) | public IjkExoMediaPlayer(Context context) {
    method setDisplay (line 63) | @Override
    method setSurface (line 71) | @Override
    method setDataSource (line 78) | @Override
    method setDataSource (line 84) | @Override
    method setDataSource (line 90) | @Override
    method setDataSource (line 95) | @Override
    method getDataSource (line 101) | @Override
    method prepareAsync (line 106) | @Override
    method start (line 124) | @Override
    method stop (line 131) | @Override
    method pause (line 138) | @Override
    method setWakeMode (line 145) | @Override
    method setScreenOnWhilePlaying (line 150) | @Override
    method getTrackInfo (line 155) | @Override
    method getVideoWidth (line 161) | @Override
    method getVideoHeight (line 166) | @Override
    method isPlaying (line 171) | @Override
    method seekTo (line 188) | @Override
    method getCurrentPosition (line 195) | @Override
    method getDuration (line 202) | @Override
    method getVideoSarNum (line 209) | @Override
    method getVideoSarDen (line 214) | @Override
    method reset (line 219) | @Override
    method setLooping (line 236) | @Override
    method isLooping (line 242) | @Override
    method setVolume (line 248) | @Override
    method getAudioSessionId (line 254) | @Override
    method getMediaInfo (line 260) | @Override
    method setLogEnabled (line 266) | @Override
    method isPlayable (line 271) | @Override
    method setAudioStreamType (line 276) | @Override
    method setKeepInBackground (line 281) | @Override
    method release (line 286) | @Override
    method getBufferedPercentage (line 298) | public int getBufferedPercentage() {
    method getRendererBuilder (line 305) | private RendererBuilder getRendererBuilder() {
    method inferContentType (line 330) | private static int inferContentType(Uri uri) {
    class DemoPlayerListener (line 335) | private class DemoPlayerListener implements DemoPlayer.Listener {
      method onStateChanged (line 340) | public void onStateChanged(boolean playWhenReady, int playbackState)
      method onError (line 383) | public void onError(Exception e)
      method onVideoSizeChanged (line 388) | public void onVideoSizeChanged(int width, int height, int unappliedR...

FILE: android/ijkplayer/ijkplayer-exo/src/main/java/tv/danmaku/ijk/media/exo/demo/EventLogger.java
  class EventLogger (line 35) | public class EventLogger implements DemoPlayer.Listener, DemoPlayer.Info...
    method EventLogger (line 50) | public EventLogger() {
    method startSession (line 54) | public void startSession() {
    method endSession (line 59) | public void endSession() {
    method onStateChanged (line 65) | @Override
    method onError (line 71) | @Override
    method onVideoSizeChanged (line 76) | @Override
    method onBandwidthSample (line 85) | @Override
    method onDroppedFrames (line 91) | @Override
    method onLoadStarted (line 96) | @Override
    method onLoadCompleted (line 106) | @Override
    method onVideoFormatEnabled (line 116) | @Override
    method onAudioFormatEnabled (line 122) | @Override
    method onLoadError (line 130) | @Override
    method onRendererInitializationError (line 135) | @Override
    method onDrmSessionManagerError (line 140) | @Override
    method onDecoderInitializationError (line 145) | @Override
    method onAudioTrackInitializationError (line 150) | @Override
    method onAudioTrackWriteError (line 155) | @Override
    method onAudioTrackUnderrun (line 160) | @Override
    method onCryptoError (line 166) | @Override
    method onDecoderInitialized (line 171) | @Override
    method onAvailableRangeChanged (line 177) | @Override
    method printInternalError (line 184) | private void printInternalError(String type, Exception e) {
    method getStateString (line 188) | private String getStateString(int state) {
    method getSessionTimeString (line 205) | private String getSessionTimeString() {
    method getTimeString (line 209) | private String getTimeString(long timeMs) {

FILE: android/ijkplayer/ijkplayer-exo/src/main/java/tv/danmaku/ijk/media/exo/demo/SmoothStreamingTestMediaDrmCallback.java
  class SmoothStreamingTestMediaDrmCallback (line 34) | @TargetApi(18)
    method executeProvisionRequest (line 50) | @Override
    method executeKeyRequest (line 56) | @Override

FILE: android/ijkplayer/ijkplayer-exo/src/main/java/tv/danmaku/ijk/media/exo/demo/player/DashRendererBuilder.java
  class DashRendererBuilder (line 60) | public class DashRendererBuilder implements RendererBuilder {
    method DashRendererBuilder (line 81) | public DashRendererBuilder(Context context, String userAgent, String url,
    method buildRenderers (line 89) | @Override
    method cancel (line 95) | @Override
    class AsyncRendererBuilder (line 103) | private static final class AsyncRendererBuilder
      method AsyncRendererBuilder (line 117) | public AsyncRendererBuilder(Context context, String userAgent, Strin...
      method init (line 128) | public void init() {
      method cancel (line 132) | public void cancel() {
      method onSingleManifest (line 136) | @Override
      method onSingleManifestError (line 151) | @Override
      method onTimestampResolved (line 160) | @Override
      method onTimestampError (line 170) | @Override
      method buildRenderers (line 181) | private void buildRenderers() {
      method getWidevineSecurityLevel (line 258) | private static int getWidevineSecurityLevel(StreamingDrmSessionManag...

FILE: android/ijkplayer/ijkplayer-exo/src/main/java/tv/danmaku/ijk/media/exo/demo/player/DemoPlayer.java
  class DemoPlayer (line 59) | public class DemoPlayer implements ExoPlayer.Listener, ChunkSampleSource...
    type RendererBuilder (line 69) | public interface RendererBuilder {
      method buildRenderers (line 77) | void buildRenderers(DemoPlayer player);
      method cancel (line 84) | void cancel();
    type Listener (line 90) | public interface Listener {
      method onStateChanged (line 91) | void onStateChanged(boolean playWhenReady, int playbackState);
      method onError (line 92) | void onError(Exception e);
      method onVideoSizeChanged (line 93) | void onVideoSizeChanged(int width, int height, int unappliedRotation...
    type InternalErrorListener (line 105) | public interface InternalErrorListener {
      method onRendererInitializationError (line 106) | void onRendererInitializationError(Exception e);
      method onAudioTrackInitializationError (line 107) | void onAudioTrackInitializationError(AudioTrack.InitializationExcept...
      method onAudioTrackWriteError (line 108) | void onAudioTrackWriteError(AudioTrack.WriteException e);
      method onAudioTrackUnderrun (line 109) | void onAudioTrackUnderrun(int bufferSize, long bufferSizeMs, long el...
      method onDecoderInitializationError (line 110) | void onDecoderInitializationError(DecoderInitializationException e);
      method onCryptoError (line 111) | void onCryptoError(CryptoException e);
      method onLoadError (line 112) | void onLoadError(int sourceId, IOException e);
      method onDrmSessionManagerError (line 113) | void onDrmSessionManagerError(Exception e);
    type InfoListener (line 119) | public interface InfoListener {
      method onVideoFormatEnabled (line 120) | void onVideoFormatEnabled(Format format, int trigger, long mediaTime...
      method onAudioFormatEnabled (line 121) | void onAudioFormatEnabled(Format format, int trigger, long mediaTime...
      method onDroppedFrames (line 122) | void onDroppedFrames(int count, long elapsed);
      method onBandwidthSample (line 123) | void onBandwidthSample(int elapsedMs, long bytes, long bitrateEstima...
      method onLoadStarted (line 124) | void onLoadStarted(int sourceId, long length, int type, int trigger,...
      method onLoadCompleted (line 126) | void onLoadCompleted(int sourceId, long bytesLoaded, int type, int t...
      method onDecoderInitialized (line 128) | void onDecoderInitialized(String decoderName, long elapsedRealtimeMs,
      method onAvailableRangeChanged (line 130) | void onAvailableRangeChanged(int sourceId, TimeRange availableRange);
    type CaptionListener (line 136) | public interface CaptionListener {
      method onCues (line 137) | void onCues(List<Cue> cues);
    type Id3MetadataListener (line 143) | public interface Id3MetadataListener {
      method onId3Metadata (line 144) | void onId3Metadata(List<Id3Frame> id3Frames);
    method DemoPlayer (line 190) | public DemoPlayer(RendererBuilder rendererBuilder) {
    method getPlayerControl (line 203) | public PlayerControl getPlayerControl() {
    method addListener (line 207) | public void addListener(Listener listener) {
    method removeListener (line 211) | public void removeListener(Listener listener) {
    method setInternalErrorListener (line 215) | public void setInternalErrorListener(InternalErrorListener listener) {
    method setInfoListener (line 219) | public void setInfoListener(InfoListener listener) {
    method setCaptionListener (line 223) | public void setCaptionListener(CaptionListener listener) {
    method setMetadataListener (line 227) | public void setMetadataListener(Id3MetadataListener listener) {
    method setSurface (line 231) | public void setSurface(Surface surface) {
    method getSurface (line 236) | public Surface getSurface() {
    method blockingClearSurface (line 240) | public void blockingClearSurface() {
    method getTrackCount (line 245) | public int getTrackCount(int type) {
    method getTrackFormat (line 249) | public MediaFormat getTrackFormat(int type, int index) {
    method getSelectedTrack (line 253) | public int getSelectedTrack(int type) {
    method setSelectedTrack (line 257) | public void setSelectedTrack(int type, int index) {
    method getBackgrounded (line 264) | public boolean getBackgrounded() {
    method setBackgrounded (line 268) | public void setBackgrounded(boolean backgrounded) {
    method prepare (line 282) | public void prepare() {
    method onRenderers (line 301) | void onRenderers(TrackRenderer[] renderers, BandwidthMeter bandwidthMe...
    method onRenderersError (line 325) | void onRenderersError(Exception e) {
    method setPlayWhenReady (line 336) | public void setPlayWhenReady(boolean playWhenReady) {
    method seekTo (line 340) | public void seekTo(long positionMs) {
    method release (line 344) | public void release() {
    method getPlaybackState (line 351) | public int getPlaybackState() {
    method getFormat (line 364) | @Override
    method getBandwidthMeter (line 369) | @Override
    method getCodecCounters (line 374) | @Override
    method getCurrentPosition (line 379) | @Override
    method getDuration (line 384) | public long getDuration() {
    method getBufferedPercentage (line 388) | public int getBufferedPercentage() {
    method getPlayWhenReady (line 392) | public boolean getPlayWhenReady() {
    method getPlaybackLooper (line 396) | Looper getPlaybackLooper() {
    method getMainHandler (line 400) | Handler getMainHandler() {
    method onPlayerStateChanged (line 404) | @Override
    method onPlayerError (line 409) | @Override
    method onVideoSizeChanged (line 417) | @Override
    method onDroppedFrames (line 425) | @Override
    method onBandwidthSample (line 432) | @Override
    method onDownstreamFormatChanged (line 439) | @Override
    method onDrmKeysLoaded (line 453) | @Override
    method onDrmSessionManagerError (line 458) | @Override
    method onDecoderInitializationError (line 465) | @Override
    method onAudioTrackInitializationError (line 472) | @Override
    method onAudioTrackWriteError (line 479) | @Override
    method onAudioTrackUnderrun (line 486) | @Override
    method onCryptoError (line 493) | @Override
    method onDecoderInitialized (line 500) | @Override
    method onLoadError (line 508) | @Override
    method onCues (line 515) | @Override
    method onMetadata (line 522) | @Override
    method onAvailableRangeChanged (line 529) | @Override
    method onPlayWhenReadyCommitted (line 536) | @Override
    method onDrawnToSurface (line 541) | @Override
    method onLoadStarted (line 546) | @Override
    method onLoadCompleted (line 555) | @Override
    method onLoadCanceled (line 564) | @Override
    method onUpstreamDiscarded (line 569) | @Override
    method maybeReportPlayerState (line 574) | private void maybeReportPlayerState() {
    method pushSurface (line 586) | private void pushSurface(boolean blockForSurfacePush) {

FILE: android/ijkplayer/ijkplayer-exo/src/main/java/tv/danmaku/ijk/media/exo/demo/player/ExtractorRendererBuilder.java
  class ExtractorRendererBuilder (line 41) | public class ExtractorRendererBuilder implements RendererBuilder {
    method ExtractorRendererBuilder (line 50) | public ExtractorRendererBuilder(Context context, String userAgent, Uri...
    method buildRenderers (line 56) | @Override
    method cancel (line 83) | @Override

FILE: android/ijkplayer/ijkplayer-exo/src/main/java/tv/danmaku/ijk/media/exo/demo/player/HlsRendererBuilder.java
  class HlsRendererBuilder (line 55) | public class HlsRendererBuilder implements RendererBuilder {
    method HlsRendererBuilder (line 68) | public HlsRendererBuilder(Context context, String userAgent, String ur...
    method buildRenderers (line 74) | @Override
    method cancel (line 80) | @Override
    class AsyncRendererBuilder (line 88) | private static final class AsyncRendererBuilder implements ManifestCal...
      method AsyncRendererBuilder (line 97) | public AsyncRendererBuilder(Context context, String userAgent, Strin...
      method init (line 106) | public void init() {
      method cancel (line 110) | public void cancel() {
      method onSingleManifestError (line 114) | @Override
      method onSingleManifest (line 123) | @Override

FILE: android/ijkplayer/ijkplayer-exo/src/main/java/tv/danmaku/ijk/media/exo/demo/player/SmoothStreamingRendererBuilder.java
  class SmoothStreamingRendererBuilder (line 55) | public class SmoothStreamingRendererBuilder implements RendererBuilder {
    method SmoothStreamingRendererBuilder (line 70) | public SmoothStreamingRendererBuilder(Context context, String userAgen...
    method buildRenderers (line 78) | @Override
    method cancel (line 84) | @Override
    class AsyncRendererBuilder (line 92) | private static final class AsyncRendererBuilder
      method AsyncRendererBuilder (line 103) | public AsyncRendererBuilder(Context context, String userAgent, Strin...
      method init (line 114) | public void init() {
      method cancel (line 118) | public void cancel() {
      method onSingleManifestError (line 122) | @Override
      method onSingleManifest (line 131) | @Override

FILE: android/ijkplayer/ijkplayer-java/src/androidTest/java/tv/danmaku/ijk/media/player/ApplicationTest.java
  class ApplicationTest (line 9) | public class ApplicationTest extends ApplicationTestCase<Application> {
    method ApplicationTest (line 10) | public ApplicationTest() {

FILE: android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/AbstractMediaPlayer.java
  class AbstractMediaPlayer (line 22) | @SuppressWarnings("WeakerAccess")
    method setOnPreparedListener (line 33) | public final void setOnPreparedListener(OnPreparedListener listener) {
    method setOnCompletionListener (line 37) | public final void setOnCompletionListener(OnCompletionListener listene...
    method setOnBufferingUpdateListener (line 41) | public final void setOnBufferingUpdateListener(
    method setOnSeekCompleteListener (line 46) | public final void setOnSeekCompleteListener(OnSeekCompleteListener lis...
    method setOnVideoSizeChangedListener (line 50) | public final void setOnVideoSizeChangedListener(
    method setOnErrorListener (line 55) | public final void setOnErrorListener(OnErrorListener listener) {
    method setOnInfoListener (line 59) | public final void setOnInfoListener(OnInfoListener listener) {
    method setOnTimedTextListener (line 63) | public final void setOnTimedTextListener(OnTimedTextListener listener) {
    method resetListeners (line 67) | public void resetListeners() {
    method notifyOnPrepared (line 78) | protected final void notifyOnPrepared() {
    method notifyOnCompletion (line 83) | protected final void notifyOnCompletion() {
    method notifyOnBufferingUpdate (line 88) | protected final void notifyOnBufferingUpdate(int percent) {
    method notifyOnSeekComplete (line 93) | protected final void notifyOnSeekComplete() {
    method notifyOnVideoSizeChanged (line 98) | protected final void notifyOnVideoSizeChanged(int width, int height,
    method notifyOnError (line 105) | protected final boolean notifyOnError(int what, int extra) {
    method notifyOnInfo (line 109) | protected final boolean notifyOnInfo(int what, int extra) {
    method notifyOnTimedText (line 113) | protected final void notifyOnTimedText(IjkTimedText text) {
    method setDataSource (line 118) | public void setDataSource(IMediaDataSource mediaDataSource) {

FILE: android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/AndroidMediaPlayer.java
  class AndroidMediaPlayer (line 43) | public class AndroidMediaPlayer extends AbstractMediaPlayer {
    method AndroidMediaPlayer (line 54) | public AndroidMediaPlayer() {
    method getInternalMediaPlayer (line 63) | public MediaPlayer getInternalMediaPlayer() {
    method setDisplay (line 67) | @Override
    method setSurface (line 76) | @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    method setDataSource (line 82) | @Override
    method setDataSource (line 88) | @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    method setDataSource (line 95) | @Override
    method setDataSource (line 101) | @Override
    method setDataSource (line 115) | @TargetApi(Build.VERSION_CODES.M)
    class MediaDataSourceProxy (line 124) | @TargetApi(Build.VERSION_CODES.M)
      method MediaDataSourceProxy (line 128) | public MediaDataSourceProxy(IMediaDataSource mediaDataSource) {
      method readAt (line 132) | @Override
      method getSize (line 137) | @Override
      method close (line 142) | @Override
    method getDataSource (line 148) | @Override
    method releaseMediaDataSource (line 153) | private void releaseMediaDataSource() {
    method prepareAsync (line 164) | @Override
    method start (line 169) | @Override
    method stop (line 174) | @Override
    method pause (line 179) | @Override
    method setScreenOnWhilePlaying (line 184) | @Override
    method getTrackInfo (line 189) | @Override
    method getVideoWidth (line 194) | @Override
    method getVideoHeight (line 199) | @Override
    method getVideoSarNum (line 204) | @Override
    method getVideoSarDen (line 209) | @Override
    method isPlaying (line 214) | @Override
    method seekTo (line 224) | @Override
    method getCurrentPosition (line 229) | @Override
    method getDuration (line 239) | @Override
    method release (line 249) | @Override
    method reset (line 258) | @Override
    method setLooping (line 270) | @Override
    method isLooping (line 275) | @Override
    method setVolume (line 280) | @Override
    method getAudioSessionId (line 285) | @Override
    method getMediaInfo (line 290) | @Override
    method setLogEnabled (line 307) | @Override
    method isPlayable (line 311) | @Override
    method setWakeMode (line 319) | @Override
    method setAudioStreamType (line 324) | @Override
    method setKeepInBackground (line 329) | @Override
    method attachInternalListeners (line 336) | private void attachInternalListeners() {
    class AndroidMediaPlayerListenerHolder (line 350) | private class AndroidMediaPlayerListenerHolder implements
      method AndroidMediaPlayerListenerHolder (line 359) | public AndroidMediaPlayerListenerHolder(AndroidMediaPlayer mp) {
      method onInfo (line 363) | @Override
      method onError (line 370) | @Override
      method onVideoSizeChanged (line 377) | @Override
      method onSeekComplete (line 386) | @Override
      method onBufferingUpdate (line 395) | @Override
      method onCompletion (line 404) | @Override
      method onPrepared (line 413) | @Override
      method onTimedText (line 422) | @Override

FILE: android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/IMediaPlayer.java
  type IMediaPlayer (line 34) | public interface IMediaPlayer {
    method setDisplay (line 71) | void setDisplay(SurfaceHolder sh);
    method setDataSource (line 73) | void setDataSource(Context context, Uri uri)
    method setDataSource (line 76) | @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    method setDataSource (line 80) | void setDataSource(FileDescriptor fd)
    method setDataSource (line 83) | void setDataSource(String path)
    method getDataSource (line 86) | String getDataSource();
    method prepareAsync (line 88) | void prepareAsync() throws IllegalStateException;
    method start (line 90) | void start() throws IllegalStateException;
    method stop (line 92) | void stop() throws IllegalStateException;
    method pause (line 94) | void pause() throws IllegalStateException;
    method setScreenOnWhilePlaying (line 96) | void setScreenOnWhilePlaying(boolean screenOn);
    method getVideoWidth (line 98) | int getVideoWidth();
    method getVideoHeight (line 100) | int getVideoHeight();
    method isPlaying (line 102) | boolean isPlaying();
    method seekTo (line 104) | void seekTo(long msec) throws IllegalStateException;
    method getCurrentPosition (line 106) | long getCurrentPosition();
    method getDuration (line 108) | long getDuration();
    method release (line 110) | void release();
    method reset (line 112) | void reset();
    method setVolume (line 114) | void setVolume(float leftVolume, float rightVolume);
    method getAudioSessionId (line 116) | int getAudioSessionId();
    method getMediaInfo (line 118) | MediaInfo getMediaInfo();
    method setLogEnabled (line 120) | @SuppressWarnings("EmptyMethod")
    method isPlayable (line 124) | @Deprecated
    method setOnPreparedListener (line 127) | void setOnPreparedListener(OnPreparedListener listener);
    method setOnCompletionListener (line 129) | void setOnCompletionListener(OnCompletionListener listener);
    method setOnBufferingUpdateListener (line 131) | void setOnBufferingUpdateListener(
    method setOnSeekCompleteListener (line 134) | void setOnSeekCompleteListener(
    method setOnVideoSizeChangedListener (line 137) | void setOnVideoSizeChangedListener(
    method setOnErrorListener (line 140) | void setOnErrorListener(OnErrorListener listener);
    method setOnInfoListener (line 142) | void setOnInfoListener(OnInfoListener listener);
    method setOnTimedTextListener (line 144) | void setOnTimedTextListener(OnTimedTextListener listener);
    type OnPreparedListener (line 149) | interface OnPreparedListener {
      method onPrepared (line 150) | void onPrepared(IMediaPlayer mp);
    type OnCompletionListener (line 153) | interface OnCompletionListener {
      method onCompletion (line 154) | void onCompletion(IMediaPlayer mp);
    type OnBufferingUpdateListener (line 157) | interface OnBufferingUpdateListener {
      method onBufferingUpdate (line 158) | void onBufferingUpdate(IMediaPlayer mp, int percent);
    type OnSeekCompleteListener (line 161) | interface OnSeekCompleteListener {
      method onSeekComplete (line 162) | void onSeekComplete(IMediaPlayer mp);
    type OnVideoSizeChangedListener (line 165) | interface OnVideoSizeChangedListener {
      method onVideoSizeChanged (line 166) | void onVideoSizeChanged(IMediaPlayer mp, int width, int height,
    type OnErrorListener (line 170) | interface OnErrorListener {
      method onError (line 171) | boolean onError(IMediaPlayer mp, int what, int extra);
    type OnInfoListener (line 174) | interface OnInfoListener {
      method onInfo (line 175) | boolean onInfo(IMediaPlayer mp, int what, int extra);
    type OnTimedTextListener (line 178) | interface OnTimedTextListener {
      method onTimedText (line 179) | void onTimedText(IMediaPlayer mp, IjkTimedText text);
    method setAudioStreamType (line 185) | void setAudioStreamType(int streamtype);
    method setKeepInBackground (line 187) | @Deprecated
    method getVideoSarNum (line 190) | int getVideoSarNum();
    method getVideoSarDen (line 192) | int getVideoSarDen();
    method setWakeMode (line 194) | @Deprecated
    method setLooping (line 197) | void setLooping(boolean looping);
    method isLooping (line 199) | boolean isLooping();
    method getTrackInfo (line 204) | ITrackInfo[] getTrackInfo();
    method setSurface (line 209) | void setSurface(Surface surface);
    method setDataSource (line 214) | void setDataSource(IMediaDataSource mediaDataSource);

FILE: android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/ISurfaceTextureHolder.java
  type ISurfaceTextureHolder (line 22) | public interface ISurfaceTextureHolder {
    method setSurfaceTexture (line 23) | void setSurfaceTexture(SurfaceTexture surfaceTexture);
    method getSurfaceTexture (line 25) | SurfaceTexture getSurfaceTexture();
    method setSurfaceTextureHost (line 27) | void setSurfaceTextureHost(ISurfaceTextureHost surfaceTextureHost);

FILE: android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/ISurfaceTextureHost.java
  type ISurfaceTextureHost (line 22) | public interface ISurfaceTextureHost {
    method releaseSurfaceTexture (line 23) | void releaseSurfaceTexture(SurfaceTexture surfaceTexture);

FILE: android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/IjkLibLoader.java
  type IjkLibLoader (line 20) | public interface IjkLibLoader {
    method loadLibrary (line 21) | void loadLibrary(String libName) throws UnsatisfiedLinkError,

FILE: android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/IjkMediaCodecInfo.java
  class IjkMediaCodecInfo (line 15) | public class IjkMediaCodecInfo {
    method getKnownCodecList (line 33) | private static synchronized Map<String, Integer> getKnownCodecList() {
    method setupCandidate (line 137) | @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    method dumpProfileLevels (line 197) | @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    method getProfileLevelName (line 227) | public static String getProfileLevelName(int profile, int level) {
    method getProfileName (line 232) | public static String getProfileName(int profile) {
    method getLevelName (line 253) | public static String getLevelName(int level) {

FILE: android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/IjkMediaMeta.java
  class IjkMediaMeta (line 9) | @SuppressWarnings("SameParameterValue")
    method getString (line 143) | public String getString(String key) {
    method getInt (line 147) | public int getInt(String key) {
    method getInt (line 151) | public int getInt(String key, int defaultValue) {
    method getLong (line 163) | public long getLong(String key) {
    method getLong (line 167) | public long getLong(String key, long defaultValue) {
    method getParcelableArrayList (line 179) | public ArrayList<Bundle> getParcelableArrayList(String key) {
    method getDurationInline (line 183) | public String getDurationInline() {
    method parse (line 193) | public static IjkMediaMeta parse(Bundle mediaMeta) {
    class IjkStreamMeta (line 265) | public static class IjkStreamMeta {
      method IjkStreamMeta (line 292) | public IjkStreamMeta(int index) {
      method getString (line 296) | public String getString(String key) {
      method getInt (line 300) | public int getInt(String key) {
      method getInt (line 304) | public int getInt(String key, int defaultValue) {
      method getLong (line 316) | public long getLong(String key) {
      method getLong (line 320) | public long getLong(String key, long defaultValue) {
      method getCodecLongNameInline (line 332) | public String getCodecLongNameInline() {
      method getCodecShortNameInline (line 342) | public String getCodecShortNameInline() {
      method getResolutionInline (line 350) | public String getResolutionInline() {
      method getFpsInline (line 361) | public String getFpsInline() {
      method getBitrateInline (line 369) | public String getBitrateInline() {
      method getSampleRateInline (line 379) | public String getSampleRateInline() {
      method getChannelLayoutInline (line 387) | public String getChannelLayoutInline() {

FILE: android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java
  class IjkMediaPlayer (line 68) | public final class IjkMediaPlayer extends AbstractMediaPlayer {
    method loadLibrary (line 177) | @Override
    method loadLibrariesOnce (line 184) | public static void loadLibrariesOnce(IjkLibLoader libLoader) {
    method initNativeOnce (line 199) | private static void initNativeOnce() {
    method IjkMediaPlayer (line 217) | public IjkMediaPlayer() {
    method IjkMediaPlayer (line 226) | public IjkMediaPlayer(IjkLibLoader libLoader) {
    method initPlayer (line 230) | private void initPlayer(IjkLibLoader libLoader) {
    method _setFrameAtTime (line 250) | private native void _setFrameAtTime(String imgCachePath, long startTim...
    method _setVideoSurface (line 257) | private native void _setVideoSurface(Surface surface);
    method setDisplay (line 272) | @Override
    method setSurface (line 304) | @Override
    method setDataSource (line 322) | @Override
    method setDataSource (line 340) | @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    method setDataSource (line 404) | @Override
    method setDataSource (line 418) | public void setDataSource(String path, Map<String, String> headers)
    method setDataSource (line 444) | @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
    method setDataSource (line 480) | private void setDataSource(FileDescriptor fd, long offset, long length)
    method setDataSource (line 486) | public void setDataSource(IMediaDataSource mediaDataSource)
    method setAndroidIOCallback (line 491) | public void setAndroidIOCallback(IAndroidIO androidIO)
    method _setDataSource (line 496) | private native void _setDataSource(String path, String[] keys, String[...
    method _setDataSourceFd (line 499) | private native void _setDataSourceFd(int fd)
    method _setDataSource (line 502) | private native void _setDataSource(IMediaDataSource mediaDataSource)
    method _setAndroidIOCallback (line 505) | private native void _setAndroidIOCallback(IAndroidIO androidIO)
    method getDataSource (line 508) | @Override
    method prepareAsync (line 513) | @Override
    method _prepareAsync (line 518) | public native void _prepareAsync() throws IllegalStateException;
    method start (line 520) | @Override
    method _start (line 526) | private native void _start() throws IllegalStateException;
    method stop (line 528) | @Override
    method _stop (line 534) | private native void _stop() throws IllegalStateException;
    method pause (line 536) | @Override
    method _pause (line 542) | private native void _pause() throws IllegalStateException;
    method setWakeMode (line 544) | @SuppressLint("Wakelock")
    method setScreenOnWhilePlaying (line 566) | @Override
    method stayAwake (line 578) | @SuppressLint("Wakelock")
    method updateSurfaceScreenOn (line 591) | private void updateSurfaceScreenOn() {
    method getTrackInfo (line 597) | @Override
    method getSelectedTrack (line 624) | public int getSelectedTrack(int trackType) {
    method selectTrack (line 639) | public void selectTrack(int track) {
    method deselectTrack (line 645) | public void deselectTrack(int track) {
    method _setStreamSelected (line 649) | private native void _setStreamSelected(int stream, boolean select);
    method getVideoWidth (line 651) | @Override
    method getVideoHeight (line 656) | @Override
    method getVideoSarNum (line 661) | @Override
    method getVideoSarDen (line 666) | @Override
    method isPlaying (line 671) | @Override
    method seekTo (line 674) | @Override
    method getCurrentPosition (line 677) | @Override
    method getDuration (line 680) | @Override
    method release (line 699) | @Override
    method _release (line 707) | private native void _release();
    method reset (line 709) | @Override
    method _reset (line 720) | private native void _reset();
    method setLooping (line 727) | @Override
    method _setLoopCount (line 734) | private native void _setLoopCount(int loopCount);
    method isLooping (line 741) | @Override
    method _getLoopCount (line 747) | private native int _getLoopCount();
    method setSpeed (line 749) | public void setSpeed(float speed) {
    method getSpeed (line 753) | public float getSpeed(float speed) {
    method getVideoDecoder (line 757) | public int getVideoDecoder() {
    method getVideoOutputFramesPerSecond (line 761) | public float getVideoOutputFramesPerSecond() {
    method getVideoDecodeFramesPerSecond (line 765) | public float getVideoDecodeFramesPerSecond() {
    method getVideoCachedDuration (line 769) | public long getVideoCachedDuration() {
    method getAudioCachedDuration (line 773) | public long getAudioCachedDuration() {
    method getVideoCachedBytes (line 777) | public long getVideoCachedBytes() {
    method getAudioCachedBytes (line 781) | public long getAudioCachedBytes() {
    method getVideoCachedPackets (line 785) | public long getVideoCachedPackets() {
    method getAudioCachedPackets (line 789) | public long getAudioCachedPackets() {
    method getAsyncStatisticBufBackwards (line 793) | public long getAsyncStatisticBufBackwards() {
    method getAsyncStatisticBufForwards (line 797) | public long getAsyncStatisticBufForwards() {
    method getAsyncStatisticBufCapacity (line 801) | public long getAsyncStatisticBufCapacity() {
    method getTrafficStatisticByteCount (line 805) | public long getTrafficStatisticByteCount() {
    method getCacheStatisticPhysicalPos (line 809) | public long getCacheStatisticPhysicalPos() {
    method getCacheStatisticFileForwards (line 813) | public long getCacheStatisticFileForwards() {
    method getCacheStatisticFilePos (line 817) | public long getCacheStatisticFilePos() {
    method getCacheStatisticCountBytes (line 821) | public long getCacheStatisticCountBytes() {
    method getFileSize (line 825) | public long getFileSize() {
    method getBitRate (line 829) | public long getBitRate() {
    method getTcpSpeed (line 833) | public long getTcpSpeed() {
    method getSeekLoadDuration (line 837) | public long getSeekLoadDuration() {
    method _getPropertyFloat (line 841) | private native float _getPropertyFloat(int property, float defaultValue);
    method _setPropertyFloat (line 842) | private native void  _setPropertyFloat(int property, float value);
    method _getPropertyLong (line 843) | private native long  _getPropertyLong(int property, long defaultValue);
    method _setPropertyLong (line 844) | private native void  _setPropertyLong(int property, long value);
    method getDropFrameRate (line 846) | public float getDropFrameRate() {
    method setVolume (line 850) | @Override
    method getAudioSessionId (line 853) | @Override
    method getMediaInfo (line 856) | @Override
    method setLogEnabled (line 893) | @Override
    method isPlayable (line 898) | @Override
    method _getVideoCodecInfo (line 903) | private native String _getVideoCodecInfo();
    method _getAudioCodecInfo (line 904) | private native String _getAudioCodecInfo();
    method setOption (line 906) | public void setOption(int category, String name, String value)
    method setOption (line 911) | public void setOption(int category, String name, long value)
    method _setOption (line 916) | private native void _setOption(int category, String name, String value);
    method _setOption (line 917) | private native void _setOption(int category, String name, long value);
    method getMediaMeta (line 919) | public Bundle getMediaMeta() {
    method _getMediaMeta (line 922) | private native Bundle _getMediaMeta();
    method getColorFormatName (line 924) | public static String getColorFormatName(int mediaCodecColorFormat) {
    method _getColorFormatName (line 928) | private static native String _getColorFormatName(int mediaCodecColorFo...
    method setAudioStreamType (line 930) | @Override
    method setKeepInBackground (line 935) | @Override
    method native_init (line 940) | private static native void native_init();
    method native_setup (line 942) | private native void native_setup(Object IjkMediaPlayer_this);
    method native_finalize (line 944) | private native void native_finalize();
    method native_message_loop (line 946) | private native void native_message_loop(Object IjkMediaPlayer_this);
    method finalize (line 948) | protected void finalize() throws Throwable {
    method httphookReconnect (line 953) | public void httphookReconnect() {
    method setCacheShare (line 957) | public void setCacheShare(int share) {
    class EventHandler (line 961) | private static class EventHandler extends Handler {
      method EventHandler (line 964) | public EventHandler(IjkMediaPlayer mp, Looper looper) {
      method handleMessage (line 969) | @Override
    method postEventFromNative (line 1066) | @CalledByNative
    method setOnControlMessageListener (line 1094) | public void setOnControlMessageListener(OnControlMessageListener liste...
    type OnControlMessageListener (line 1098) | public interface OnControlMessageListener {
      method onControlResolveSegmentUrl (line 1099) | String onControlResolveSegmentUrl(int segment);
    method setOnNativeInvokeListener (line 1107) | public void setOnNativeInvokeListener(OnNativeInvokeListener listener) {
    type OnNativeInvokeListener (line 1111) | public interface OnNativeInvokeListener {
      method onNativeInvoke (line 1143) | boolean onNativeInvoke(int what, Bundle args);
    method onNativeInvoke (line 1146) | @CalledByNative
    type OnMediaCodecSelectListener (line 1188) | public interface OnMediaCodecSelectListener {
      method onMediaCodecSelect (line 1189) | String onMediaCodecSelect(IMediaPlayer mp, String mimeType, int prof...
    method setOnMediaCodecSelectListener (line 1192) | public void setOnMediaCodecSelectListener(OnMediaCodecSelectListener l...
    method resetListeners (line 1196) | public void resetListeners() {
    method onSelectCodec (line 1201) | @CalledByNative
    class DefaultMediaCodecSelector (line 1219) | public static class DefaultMediaCodecSelector implements OnMediaCodecS...
      method onMediaCodecSelect (line 1222) | @SuppressWarnings("deprecation")
    method native_profileBegin (line 1284) | public static native void native_profileBegin(String libName);
    method native_profileEnd (line 1285) | public static native void native_profileEnd();
    method native_setLogLevel (line 1286) | public static native void native_setLogLevel(int level);

FILE: android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/IjkTimedText.java
  class IjkTimedText (line 22) | public final class IjkTimedText {
    method IjkTimedText (line 27) | public IjkTimedText(Rect bounds, String text) {
    method getBounds (line 32) | public Rect getBounds() {
    method getText (line 36) | public String getText() {

FILE: android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/MediaInfo.java
  class MediaInfo (line 20) | public class MediaInfo {

FILE: android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/MediaPlayerProxy.java
  class MediaPlayerProxy (line 34) | public class MediaPlayerProxy implements IMediaPlayer {
    method MediaPlayerProxy (line 37) | public MediaPlayerProxy(IMediaPlayer backEndMediaPlayer) {
    method getInternalMediaPlayer (line 41) | public IMediaPlayer getInternalMediaPlayer() {
    method setDisplay (line 45) | @Override
    method setSurface (line 50) | @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    method setDataSource (line 56) | @Override
    method setDataSource (line 62) | @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    method setDataSource (line 69) | @Override
    method setDataSource (line 75) | @Override
    method setDataSource (line 80) | @Override
    method getDataSource (line 85) | @Override
    method prepareAsync (line 90) | @Override
    method start (line 95) | @Override
    method stop (line 100) | @Override
    method pause (line 105) | @Override
    method setScreenOnWhilePlaying (line 110) | @Override
    method getVideoWidth (line 115) | @Override
    method getVideoHeight (line 120) | @Override
    method isPlaying (line 125) | @Override
    method seekTo (line 130) | @Override
    method getCurrentPosition (line 135) | @Override
    method getDuration (line 140) | @Override
    method release (line 145) | @Override
    method reset (line 150) | @Override
    method setVolume (line 155) | @Override
    method getAudioSessionId (line 160) | @Override
    method getMediaInfo (line 165) | @Override
    method setLogEnabled (line 170) | @Override
    method isPlayable (line 175) | @Override
    method setOnPreparedListener (line 180) | @Override
    method setOnCompletionListener (line 195) | @Override
    method setOnBufferingUpdateListener (line 210) | @Override
    method setOnSeekCompleteListener (line 225) | @Override
    method setOnVideoSizeChangedListener (line 240) | @Override
    method setOnErrorListener (line 255) | @Override
    method setOnInfoListener (line 270) | @Override
    method setOnTimedTextListener (line 285) | @Override
    method setAudioStreamType (line 300) | @Override
    method setKeepInBackground (line 305) | @Override
    method getVideoSarNum (line 310) | @Override
    method getVideoSarDen (line 315) | @Override
    method setWakeMode (line 320) | @Override
    method getTrackInfo (line 325) | @Override
    method setLooping (line 330) | @Override
    method isLooping (line 335) | @Override

FILE: android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/TextureMediaPlayer.java
  class TextureMediaPlayer (line 26) | @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    method TextureMediaPlayer (line 31) | public TextureMediaPlayer(IMediaPlayer backEndMediaPlayer) {
    method releaseSurfaceTexture (line 35) | public void releaseSurfaceTexture() {
    method reset (line 49) | @Override
    method release (line 55) | @Override
    method setDisplay (line 61) | @Override
    method setSurface (line 67) | @Override
    method setSurfaceTexture (line 77) | @Override
    method getSurfaceTexture (line 91) | @Override
    method setSurfaceTextureHost (line 96) | @Override

FILE: android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/exceptions/IjkMediaException.java
  class IjkMediaException (line 20) | public class IjkMediaException extends Exception {

FILE: android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/ffmpeg/FFmpegApi.java
  class FFmpegApi (line 3) | public class FFmpegApi {
    method av_base64_encode (line 4) | public static native String av_base64_encode(byte in[]);

FILE: android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/AndroidMediaFormat.java
  class AndroidMediaFormat (line 24) | public class AndroidMediaFormat implements IMediaFormat {
    method AndroidMediaFormat (line 27) | public AndroidMediaFormat(MediaFormat mediaFormat) {
    method getInteger (line 31) | @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    method getString (line 40) | @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    method toString (line 49) | @TargetApi(Build.VERSION_CODES.JELLY_BEAN)

FILE: android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/AndroidTrackInfo.java
  class AndroidTrackInfo (line 25) | public class AndroidTrackInfo implements ITrackInfo {
    method fromMediaPlayer (line 28) | public static AndroidTrackInfo[] fromMediaPlayer(MediaPlayer mp) {
    method fromTrackInfo (line 35) | private static AndroidTrackInfo[] fromTrackInfo(MediaPlayer.TrackInfo[...
    method AndroidTrackInfo (line 47) | private AndroidTrackInfo(MediaPlayer.TrackInfo trackInfo) {
    method getFormat (line 51) | @TargetApi(Build.VERSION_CODES.KITKAT)
    method getLanguage (line 67) | @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    method getTrackType (line 76) | @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    method toString (line 85) | @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    method getInfoInline (line 100) | @TargetApi(Build.VERSION_CODES.JELLY_BEAN)

FILE: android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/IAndroidIO.java
  type IAndroidIO (line 22) | @SuppressWarnings("RedundantThrows")
    method open (line 24) | int  open(String url) throws IOException;
    method read (line 25) | int  read(byte[] buffer, int size) throws IOException;
    method seek (line 26) | long seek(long offset, int whence) throws IOException;
    method close (line 27) | int  close() throws IOException;

FILE: android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/IMediaDataSource.java
  type IMediaDataSource (line 22) | @SuppressWarnings("RedundantThrows")
    method readAt (line 24) | int	 readAt(long position, byte[] buffer, int offset, int size) throws...
    method getSize (line 26) | long getSize() throws IOException;
    method close (line 28) | void close() throws IOException;

FILE: android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/IMediaFormat.java
  type IMediaFormat (line 20) | public interface IMediaFormat {
    method getString (line 28) | String getString(String name);
    method getInteger (line 30) | int getInteger(String name);

FILE: android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/ITrackInfo.java
  type ITrackInfo (line 20) | public interface ITrackInfo {
    method getFormat (line 28) | IMediaFormat getFormat();
    method getLanguage (line 30) | String getLanguage();
    method getTrackType (line 32) | int getTrackType();
    method getInfoInline (line 34) | String getInfoInline();

FILE: android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/IjkMediaFormat.java
  class IjkMediaFormat (line 30) | public class IjkMediaFormat implements IMediaFormat {
    method IjkMediaFormat (line 51) | public IjkMediaFormat(IjkMediaMeta.IjkStreamMeta streamMeta) {
    method getInteger (line 55) | @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    method getString (line 64) | @Override
    class Formatter (line 81) | private static abstract class Formatter {
      method format (line 82) | public String format(IjkMediaFormat mediaFormat) {
      method doFormat (line 89) | protected abstract String doFormat(IjkMediaFormat mediaFormat);
      method getDefaultString (line 91) | @SuppressWarnings("SameReturnValue")
    method doFormat (line 101) | @Override
    method doFormat (line 107) | @Override
    method doFormat (line 113) | @Override
    method doFormat (line 126) | @Override
    method doFormat (line 195) | @Override
    method doFormat (line 201) | @Override
    method doFormat (line 219) | @Override
    method doFormat (line 231) | @Override
    method doFormat (line 242) | @Override

FILE: android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/IjkTrackInfo.java
  class IjkTrackInfo (line 24) | public class IjkTrackInfo implements ITrackInfo {
    method IjkTrackInfo (line 28) | public IjkTrackInfo(IjkMediaMeta.IjkStreamMeta streamMeta) {
    method setMediaMeta (line 32) | public void setMediaMeta(IjkMediaMeta.IjkStreamMeta streamMeta) {
    method getFormat (line 36) | @Override
    method getLanguage (line 41) | @Override
    method getTrackType (line 49) | @Override
    method setTrackType (line 54) | public void setTrackType(int trackType) {
    method toString (line 58) | @Override
    method getInfoInline (line 63) | @Override

FILE: android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/pragma/DebugLog.java
  class DebugLog (line 25) | @SuppressWarnings({"SameParameterValue", "WeakerAccess"})
    method e (line 33) | public static void e(String tag, String msg) {
    method e (line 39) | public static void e(String tag, String msg, Throwable tr) {
    method efmt (line 45) | public static void efmt(String tag, String fmt, Object... args) {
    method i (line 52) | public static void i(String tag, String msg) {
    method i (line 58) | public static void i(String tag, String msg, Throwable tr) {
    method ifmt (line 64) | public static void ifmt(String tag, String fmt, Object... args) {
    method w (line 71) | public static void w(String tag, String msg) {
    method w (line 77) | public static void w(String tag, String msg, Throwable tr) {
    method wfmt (line 83) | public static void wfmt(String tag, String fmt, Object... args) {
    method d (line 90) | public static void d(String tag, String msg) {
    method d (line 96) | public static void d(String tag, String msg, Throwable tr) {
    method dfmt (line 102) | public static void dfmt(String tag, String fmt, Object... args) {
    method v (line 109) | public static void v(String tag, String msg) {
    method v (line 115) | public static void v(String tag, String msg, Throwable tr) {
    method vfmt (line 121) | public static void vfmt(String tag, String fmt, Object... args) {
    method printStackTrace (line 128) | public static void printStackTrace(Throwable e) {
    method printCause (line 134) | public static void printCause(Throwable e) {

FILE: android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/pragma/Pragma.java
  class Pragma (line 22) | public class Pragma {

FILE: android/ijkplayer/ijkplayer-x86/src/androidTest/java/tv/danmaku/ijk/media/ijkplayer/ApplicationTest.java
  class ApplicationTest (line 9) | public class ApplicationTest extends ApplicationTestCase<Application> {
    method ApplicationTest (line 10) | public ApplicationTest() {

FILE: android/ijkplayer/ijkplayer-x86/src/main/java/tv/danmaku/ijk/media/player_x86/Pragma.java
  class Pragma (line 20) | public class Pragma {

FILE: android/ijkplayer/ijkplayer-x86_64/src/androidTest/java/com/example/ijkplayer_x86_64/ApplicationTest.java
  class ApplicationTest (line 9) | public class ApplicationTest extends ApplicationTestCase<Application> {
    method ApplicationTest (line 10) | public ApplicationTest() {

FILE: ijkmedia/ijkj4a/j4a/class/android/media/AudioTrack.c
  type J4AC_android_media_AudioTrack (line 24) | typedef struct J4AC_android_media_AudioTrack {
  function jobject (line 49) | jobject J4AC_android_media_AudioTrack__AudioTrack(JNIEnv *env, jint stre...
  function jobject (line 54) | jobject J4AC_android_media_AudioTrack__AudioTrack__catchAll(JNIEnv *env,...
  function jobject (line 64) | jobject J4AC_android_media_AudioTrack__AudioTrack__asGlobalRef__catchAll...
  function jint (line 84) | jint J4AC_android_media_AudioTrack__getMinBufferSize(JNIEnv *env, jint s...
  function jint (line 89) | jint J4AC_android_media_AudioTrack__getMinBufferSize__catchAll(JNIEnv *e...
  function jfloat (line 99) | jfloat J4AC_android_media_AudioTrack__getMaxVolume(JNIEnv *env)
  function jfloat (line 104) | jfloat J4AC_android_media_AudioTrack__getMaxVolume__catchAll(JNIEnv *env)
  function jfloat (line 114) | jfloat J4AC_android_media_AudioTrack__getMinVolume(JNIEnv *env)
  function jfloat (line 119) | jfloat J4AC_android_media_AudioTrack__getMinVolume__catchAll(JNIEnv *env)
  function jint (line 129) | jint J4AC_android_media_AudioTrack__getNativeOutputSampleRate(JNIEnv *en...
  function jint (line 134) | jint J4AC_android_media_AudioTrack__getNativeOutputSampleRate__catchAll(...
  function J4AC_android_media_AudioTrack__play (line 144) | void J4AC_android_media_AudioTrack__play(JNIEnv *env, jobject thiz)
  function J4AC_android_media_AudioTrack__play__catchAll (line 149) | void J4AC_android_media_AudioTrack__play__catchAll(JNIEnv *env, jobject ...
  function J4AC_android_media_AudioTrack__pause (line 155) | void J4AC_android_media_AudioTrack__pause(JNIEnv *env, jobject thiz)
  function J4AC_android_media_AudioTrack__pause__catchAll (line 160) | void J4AC_android_media_AudioTrack__pause__catchAll(JNIEnv *env, jobject...
  function J4AC_android_media_AudioTrack__stop (line 166) | void J4AC_android_media_AudioTrack__stop(JNIEnv *env, jobject thiz)
  function J4AC_android_media_AudioTrack__stop__catchAll (line 171) | void J4AC_android_media_AudioTrack__stop__catchAll(JNIEnv *env, jobject ...
  function J4AC_android_media_AudioTrack__flush (line 177) | void J4AC_android_media_AudioTrack__flush(JNIEnv *env, jobject thiz)
  function J4AC_android_media_AudioTrack__flush__catchAll (line 182) | void J4AC_android_media_AudioTrack__flush__catchAll(JNIEnv *env, jobject...
  function J4AC_android_media_AudioTrack__release (line 188) | void J4AC_android_media_AudioTrack__release(JNIEnv *env, jobject thiz)
  function J4AC_android_media_AudioTrack__release__catchAll (line 193) | void J4AC_android_media_AudioTrack__release__catchAll(JNIEnv *env, jobje...
  function jint (line 199) | jint J4AC_android_media_AudioTrack__write(JNIEnv *env, jobject thiz, jby...
  function jint (line 204) | jint J4AC_android_media_AudioTrack__write__catchAll(JNIEnv *env, jobject...
  function jint (line 214) | jint J4AC_android_media_AudioTrack__setStereoVolume(JNIEnv *env, jobject...
  function jint (line 219) | jint J4AC_android_media_AudioTrack__setStereoVolume__catchAll(JNIEnv *en...
  function jint (line 229) | jint J4AC_android_media_AudioTrack__getAudioSessionId(JNIEnv *env, jobje...
  function jint (line 234) | jint J4AC_android_media_AudioTrack__getAudioSessionId__catchAll(JNIEnv *...
  function jobject (line 244) | jobject J4AC_android_media_AudioTrack__getPlaybackParams(JNIEnv *env, jo...
  function jobject (line 249) | jobject J4AC_android_media_AudioTrack__getPlaybackParams__catchAll(JNIEn...
  function jobject (line 259) | jobject J4AC_android_media_AudioTrack__getPlaybackParams__asGlobalRef__c...
  function J4AC_android_media_AudioTrack__setPlaybackParams (line 279) | void J4AC_android_media_AudioTrack__setPlaybackParams(JNIEnv *env, jobje...
  function J4AC_android_media_AudioTrack__setPlaybackParams__catchAll (line 284) | void J4AC_android_media_AudioTrack__setPlaybackParams__catchAll(JNIEnv *...
  function jint (line 290) | jint J4AC_android_media_AudioTrack__getStreamType(JNIEnv *env, jobject t...
  function jint (line 295) | jint J4AC_android_media_AudioTrack__getStreamType__catchAll(JNIEnv *env,...
  function jint (line 305) | jint J4AC_android_media_AudioTrack__getSampleRate(JNIEnv *env, jobject t...
  function jint (line 310) | jint J4AC_android_media_AudioTrack__getSampleRate__catchAll(JNIEnv *env,...
  function jint (line 320) | jint J4AC_android_media_AudioTrack__getPlaybackRate(JNIEnv *env, jobject...
  function jint (line 325) | jint J4AC_android_media_AudioTrack__getPlaybackRate__catchAll(JNIEnv *en...
  function jint (line 335) | jint J4AC_android_media_AudioTrack__setPlaybackRate(JNIEnv *env, jobject...
  function jint (line 340) | jint J4AC_android_media_AudioTrack__setPlaybackRate__catchAll(JNIEnv *en...
  function J4A_loadClass__J4AC_android_media_AudioTrack (line 350) | int J4A_loadClass__J4AC_android_media_AudioTrack(JNIEnv *env)

FILE: ijkmedia/ijkj4a/j4a/class/android/media/MediaCodec.c
  type J4AC_android_media_MediaCodec__BufferInfo (line 24) | typedef struct J4AC_android_media_MediaCodec__BufferInfo {
  type J4AC_android_media_MediaCodec (line 35) | typedef struct J4AC_android_media_MediaCodec {
  function jint (line 53) | jint J4AC_android_media_MediaCodec__BufferInfo__flags__get(JNIEnv *env, ...
  function jint (line 58) | jint J4AC_android_media_MediaCodec__BufferInfo__flags__get__catchAll(JNI...
  function J4AC_android_media_MediaCodec__BufferInfo__flags__set (line 68) | void J4AC_android_media_MediaCodec__BufferInfo__flags__set(JNIEnv *env, ...
  function J4AC_android_media_MediaCodec__BufferInfo__flags__set__catchAll (line 73) | void J4AC_android_media_MediaCodec__BufferInfo__flags__set__catchAll(JNI...
  function jint (line 79) | jint J4AC_android_media_MediaCodec__BufferInfo__offset__get(JNIEnv *env,...
  function jint (line 84) | jint J4AC_android_media_MediaCodec__BufferInfo__offset__get__catchAll(JN...
  function J4AC_android_media_MediaCodec__BufferInfo__offset__set (line 94) | void J4AC_android_media_MediaCodec__BufferInfo__offset__set(JNIEnv *env,...
  function J4AC_android_media_MediaCodec__BufferInfo__offset__set__catchAll (line 99) | void J4AC_android_media_MediaCodec__BufferInfo__offset__set__catchAll(JN...
  function jlong (line 105) | jlong J4AC_android_media_MediaCodec__BufferInfo__presentationTimeUs__get...
  function jlong (line 110) | jlong J4AC_android_media_MediaCodec__BufferInfo__presentationTimeUs__get...
  function J4AC_android_media_MediaCodec__BufferInfo__presentationTimeUs__set (line 120) | void J4AC_android_media_MediaCodec__BufferInfo__presentationTimeUs__set(...
  function J4AC_android_media_MediaCodec__BufferInfo__presentationTimeUs__set__catchAll (line 125) | void J4AC_android_media_MediaCodec__BufferInfo__presentationTimeUs__set_...
  function jint (line 131) | jint J4AC_android_media_MediaCodec__BufferInfo__size__get(JNIEnv *env, j...
  function jint (line 136) | jint J4AC_android_media_MediaCodec__BufferInfo__size__get__catchAll(JNIE...
  function J4AC_android_media_MediaCodec__BufferInfo__size__set (line 146) | void J4AC_android_media_MediaCodec__BufferInfo__size__set(JNIEnv *env, j...
  function J4AC_android_media_MediaCodec__BufferInfo__size__set__catchAll (line 151) | void J4AC_android_media_MediaCodec__BufferInfo__size__set__catchAll(JNIE...
  function jobject (line 157) | jobject J4AC_android_media_MediaCodec__BufferInfo__BufferInfo(JNIEnv *env)
  function jobject (line 162) | jobject J4AC_android_media_MediaCodec__BufferInfo__BufferInfo__catchAll(...
  function jobject (line 172) | jobject J4AC_android_media_MediaCodec__BufferInfo__BufferInfo__asGlobalR...
  function J4A_loadClass__J4AC_android_media_MediaCodec__BufferInfo (line 192) | int J4A_loadClass__J4AC_android_media_MediaCodec__BufferInfo(JNIEnv *env)
  function jobject (line 249) | jobject J4AC_android_media_MediaCodec__createByCodecName(JNIEnv *env, js...
  function jobject (line 254) | jobject J4AC_android_media_MediaCodec__createByCodecName__catchAll(JNIEn...
  function jobject (line 264) | jobject J4AC_android_media_MediaCodec__createByCodecName__asGlobalRef__c...
  function jobject (line 284) | jobject J4AC_android_media_MediaCodec__createByCodecName__withCString(JN...
  function jobject (line 304) | jobject J4AC_android_media_MediaCodec__createByCodecName__withCString__c...
  function jobject (line 324) | jobject J4AC_android_media_MediaCodec__createByCodecName__withCString__a...
  function J4AC_android_media_MediaCodec__configure (line 344) | void J4AC_android_media_MediaCodec__configure(JNIEnv *env, jobject thiz,...
  function J4AC_android_media_MediaCodec__configure__catchAll (line 349) | void J4AC_android_media_MediaCodec__configure__catchAll(JNIEnv *env, job...
  function jobject (line 355) | jobject J4AC_android_media_MediaCodec__getOutputFormat(JNIEnv *env, jobj...
  function jobject (line 360) | jobject J4AC_android_media_MediaCodec__getOutputFormat__catchAll(JNIEnv ...
  function jobject (line 370) | jobject J4AC_android_media_MediaCodec__getOutputFormat__asGlobalRef__cat...
  function jobjectArray (line 390) | jobjectArray J4AC_android_media_MediaCodec__getInputBuffers(JNIEnv *env,...
  function jobjectArray (line 395) | jobjectArray J4AC_android_media_MediaCodec__getInputBuffers__catchAll(JN...
  function jobjectArray (line 405) | jobjectArray J4AC_android_media_MediaCodec__getInputBuffers__asGlobalRef...
  function jint (line 425) | jint J4AC_android_media_MediaCodec__dequeueInputBuffer(JNIEnv *env, jobj...
  function jint (line 430) | jint J4AC_android_media_MediaCodec__dequeueInputBuffer__catchAll(JNIEnv ...
  function J4AC_android_media_MediaCodec__queueInputBuffer (line 440) | void J4AC_android_media_MediaCodec__queueInputBuffer(JNIEnv *env, jobjec...
  function J4AC_android_media_MediaCodec__queueInputBuffer__catchAll (line 445) | void J4AC_android_media_MediaCodec__queueInputBuffer__catchAll(JNIEnv *e...
  function jint (line 451) | jint J4AC_android_media_MediaCodec__dequeueOutputBuffer(JNIEnv *env, job...
  function jint (line 456) | jint J4AC_android_media_MediaCodec__dequeueOutputBuffer__catchAll(JNIEnv...
  function J4AC_android_media_MediaCodec__releaseOutputBuffer (line 466) | void J4AC_android_media_MediaCodec__releaseOutputBuffer(JNIEnv *env, job...
  function J4AC_android_media_MediaCodec__releaseOutputBuffer__catchAll (line 471) | void J4AC_android_media_MediaCodec__releaseOutputBuffer__catchAll(JNIEnv...
  function J4AC_android_media_MediaCodec__start (line 477) | void J4AC_android_media_MediaCodec__start(JNIEnv *env, jobject thiz)
  function J4AC_android_media_MediaCodec__start__catchAll (line 482) | void J4AC_android_media_MediaCodec__start__catchAll(JNIEnv *env, jobject...
  function J4AC_android_media_MediaCodec__stop (line 488) | void J4AC_android_media_MediaCodec__stop(JNIEnv *env, jobject thiz)
  function J4AC_android_media_MediaCodec__stop__catchAll (line 493) | void J4AC_android_media_MediaCodec__stop__catchAll(JNIEnv *env, jobject ...
  function J4AC_android_media_MediaCodec__flush (line 499) | void J4AC_android_media_MediaCodec__flush(JNIEnv *env, jobject thiz)
  function J4AC_android_media_MediaCodec__flush__catchAll (line 504) | void J4AC_android_media_MediaCodec__flush__catchAll(JNIEnv *env, jobject...
  function J4AC_android_media_MediaCodec__release (line 510) | void J4AC_android_media_MediaCodec__release(JNIEnv *env, jobject thiz)
  function J4AC_android_media_MediaCodec__release__catchAll (line 515) | void J4AC_android_media_MediaCodec__release__catchAll(JNIEnv *env, jobje...
  function J4A_loadClass__J4AC_android_media_MediaCodec (line 521) | int J4A_loadClass__J4AC_android_media_MediaCodec(JNIEnv *env)

FILE: ijkmedia/ijkj4a/j4a/class/android/media/MediaFormat.c
  type J4AC_android_media_MediaFormat (line 24) | typedef struct J4AC_android_media_MediaFormat {
  function jobject (line 35) | jobject J4AC_android_media_MediaFormat__MediaFormat(JNIEnv *env)
  function jobject (line 40) | jobject J4AC_android_media_MediaFormat__MediaFormat__catchAll(JNIEnv *env)
  function jobject (line 50) | jobject J4AC_android_media_MediaFormat__MediaFormat__asGlobalRef__catchA...
  function jobject (line 70) | jobject J4AC_android_media_MediaFormat__createVideoFormat(JNIEnv *env, j...
  function jobject (line 75) | jobject J4AC_android_media_MediaFormat__createVideoFormat__catchAll(JNIE...
  function jobject (line 85) | jobject J4AC_android_media_MediaFormat__createVideoFormat__asGlobalRef__...
  function jobject (line 105) | jobject J4AC_android_media_MediaFormat__createVideoFormat__withCString(J...
  function jobject (line 125) | jobject J4AC_android_media_MediaFormat__createVideoFormat__withCString__...
  function jobject (line 145) | jobject J4AC_android_media_MediaFormat__createVideoFormat__withCString__...
  function jint (line 165) | jint J4AC_android_media_MediaFormat__getInteger(JNIEnv *env, jobject thi...
  function jint (line 170) | jint J4AC_android_media_MediaFormat__getInteger__catchAll(JNIEnv *env, j...
  function jint (line 180) | jint J4AC_android_media_MediaFormat__getInteger__withCString(JNIEnv *env...
  function jint (line 200) | jint J4AC_android_media_MediaFormat__getInteger__withCString__catchAll(J...
  function J4AC_android_media_MediaFormat__setInteger (line 220) | void J4AC_android_media_MediaFormat__setInteger(JNIEnv *env, jobject thi...
  function J4AC_android_media_MediaFormat__setInteger__catchAll (line 225) | void J4AC_android_media_MediaFormat__setInteger__catchAll(JNIEnv *env, j...
  function J4AC_android_media_MediaFormat__setInteger__withCString (line 231) | void J4AC_android_media_MediaFormat__setInteger__withCString(JNIEnv *env...
  function J4AC_android_media_MediaFormat__setInteger__withCString__catchAll (line 245) | void J4AC_android_media_MediaFormat__setInteger__withCString__catchAll(J...
  function J4AC_android_media_MediaFormat__setByteBuffer (line 259) | void J4AC_android_media_MediaFormat__setByteBuffer(JNIEnv *env, jobject ...
  function J4AC_android_media_MediaFormat__setByteBuffer__catchAll (line 264) | void J4AC_android_media_MediaFormat__setByteBuffer__catchAll(JNIEnv *env...
  function J4AC_android_media_MediaFormat__setByteBuffer__withCString (line 270) | void J4AC_android_media_MediaFormat__setByteBuffer__withCString(JNIEnv *...
  function J4AC_android_media_MediaFormat__setByteBuffer__withCString__catchAll (line 284) | void J4AC_android_media_MediaFormat__setByteBuffer__withCString__catchAl...
  function J4A_loadClass__J4AC_android_media_MediaFormat (line 298) | int J4A_loadClass__J4AC_android_media_MediaFormat(JNIEnv *env)

FILE: ijkmedia/ijkj4a/j4a/class/android/media/PlaybackParams.c
  type J4AC_android_media_PlaybackParams (line 24) | typedef struct J4AC_android_media_PlaybackParams {
  function jobject (line 31) | jobject J4AC_android_media_PlaybackParams__setSpeed(JNIEnv *env, jobject...
  function jobject (line 36) | jobject J4AC_android_media_PlaybackParams__setSpeed__catchAll(JNIEnv *en...
  function jobject (line 46) | jobject J4AC_android_media_PlaybackParams__setSpeed__asGlobalRef__catchA...
  function J4A_loadClass__J4AC_android_media_PlaybackParams (line 66) | int J4A_loadClass__J4AC_android_media_PlaybackParams(JNIEnv *env)

FILE: ijkmedia/ijkj4a/j4a/class/android/os/Build.c
  type J4AC_android_os_Build__VERSION (line 24) | typedef struct J4AC_android_os_Build__VERSION {
  type J4AC_android_os_Build (line 31) | typedef struct J4AC_android_os_Build {
  function jint (line 37) | jint J4AC_android_os_Build__VERSION__SDK_INT__get(JNIEnv *env)
  function jint (line 42) | jint J4AC_android_os_Build__VERSION__SDK_INT__get__catchAll(JNIEnv *env)
  function J4AC_android_os_Build__VERSION__SDK_INT__set (line 52) | void J4AC_android_os_Build__VERSION__SDK_INT__set(JNIEnv *env, jint value)
  function J4AC_android_os_Build__VERSION__SDK_INT__set__catchAll (line 57) | void J4AC_android_os_Build__VERSION__SDK_INT__set__catchAll(JNIEnv *env,...
  function J4A_loadClass__J4AC_android_os_Build__VERSION (line 63) | int J4A_loadClass__J4AC_android_os_Build__VERSION(JNIEnv *env)
  function J4A_loadClass__J4AC_android_os_Build (line 92) | int J4A_loadClass__J4AC_android_os_Build(JNIEnv *env)

FILE: ijkmedia/ijkj4a/j4a/class/android/os/Bundle.c
  type J4AC_android_os_Bundle (line 24) | typedef struct J4AC_android_os_Bundle {
  function jobject (line 38) | jobject J4AC_android_os_Bundle__Bundle(JNIEnv *env)
  function jobject (line 43) | jobject J4AC_android_os_Bundle__Bundle__catchAll(JNIEnv *env)
  function jobject (line 53) | jobject J4AC_android_os_Bundle__Bundle__asGlobalRef__catchAll(JNIEnv *env)
  function jint (line 73) | jint J4AC_android_os_Bundle__getInt(JNIEnv *env, jobject thiz, jstring k...
  function jint (line 78) | jint J4AC_android_os_Bundle__getInt__catchAll(JNIEnv *env, jobject thiz,...
  function jint (line 88) | jint J4AC_android_os_Bundle__getInt__withCString(JNIEnv *env, jobject th...
  function jint (line 108) | jint J4AC_android_os_Bundle__getInt__withCString__catchAll(JNIEnv *env, ...
  function J4AC_android_os_Bundle__putInt (line 128) | void J4AC_android_os_Bundle__putInt(JNIEnv *env, jobject thiz, jstring k...
  function J4AC_android_os_Bundle__putInt__catchAll (line 133) | void J4AC_android_os_Bundle__putInt__catchAll(JNIEnv *env, jobject thiz,...
  function J4AC_android_os_Bundle__putInt__withCString (line 139) | void J4AC_android_os_Bundle__putInt__withCString(JNIEnv *env, jobject th...
  function J4AC_android_os_Bundle__putInt__withCString__catchAll (line 153) | void J4AC_android_os_Bundle__putInt__withCString__catchAll(JNIEnv *env, ...
  function jstring (line 167) | jstring J4AC_android_os_Bundle__getString(JNIEnv *env, jobject thiz, jst...
  function jstring (line 172) | jstring J4AC_android_os_Bundle__getString__catchAll(JNIEnv *env, jobject...
  function jstring (line 182) | jstring J4AC_android_os_Bundle__getString__asGlobalRef__catchAll(JNIEnv ...
  function jstring (line 248) | jstring J4AC_android_os_Bundle__getString__withCString(JNIEnv *env, jobj...
  function jstring (line 268) | jstring J4AC_android_os_Bundle__getString__withCString__catchAll(JNIEnv ...
  function jstring (line 288) | jstring J4AC_android_os_Bundle__getString__withCString__asGlobalRef__cat...
  function J4AC_android_os_Bundle__putString (line 354) | void J4AC_android_os_Bundle__putString(JNIEnv *env, jobject thiz, jstrin...
  function J4AC_android_os_Bundle__putString__catchAll (line 359) | void J4AC_android_os_Bundle__putString__catchAll(JNIEnv *env, jobject th...
  function J4AC_android_os_Bundle__putString__withCString (line 365) | void J4AC_android_os_Bundle__putString__withCString(JNIEnv *env, jobject...
  function J4AC_android_os_Bundle__putString__withCString__catchAll (line 384) | void J4AC_android_os_Bundle__putString__withCString__catchAll(JNIEnv *en...
  function J4AC_android_os_Bundle__putParcelableArrayList (line 403) | void J4AC_android_os_Bundle__putParcelableArrayList(JNIEnv *env, jobject...
  function J4AC_android_os_Bundle__putParcelableArrayList__catchAll (line 408) | void J4AC_android_os_Bundle__putParcelableArrayList__catchAll(JNIEnv *en...
  function J4AC_android_os_Bundle__putParcelableArrayList__withCString (line 414) | void J4AC_android_os_Bundle__putParcelableArrayList__withCString(JNIEnv ...
  function J4AC_android_os_Bundle__putParcelableArrayList__withCString__catchAll (line 428) | void J4AC_android_os_Bundle__putParcelableArrayList__withCString__catchA...
  function jlong (line 442) | jlong J4AC_android_os_Bundle__getLong(JNIEnv *env, jobject thiz, jstring...
  function jlong (line 447) | jlong J4AC_android_os_Bundle__getLong__catchAll(JNIEnv *env, jobject thi...
  function jlong (line 457) | jlong J4AC_android_os_Bundle__getLong__withCString(JNIEnv *env, jobject ...
  function jlong (line 477) | jlong J4AC_android_os_Bundle__getLong__withCString__catchAll(JNIEnv *env...
  function J4AC_android_os_Bundle__putLong (line 497) | void J4AC_android_os_Bundle__putLong(JNIEnv *env, jobject thiz, jstring ...
  function J4AC_android_os_Bundle__putLong__catchAll (line 502) | void J4AC_android_os_Bundle__putLong__catchAll(JNIEnv *env, jobject thiz...
  function J4AC_android_os_Bundle__putLong__withCString (line 508) | void J4AC_android_os_Bundle__putLong__withCString(JNIEnv *env, jobject t...
  function J4AC_android_os_Bundle__putLong__withCString__catchAll (line 522) | void J4AC_android_os_Bundle__putLong__withCString__catchAll(JNIEnv *env,...
  function J4A_loadClass__J4AC_android_os_Bundle (line 536) | int J4A_loadClass__J4AC_android_os_Bundle(JNIEnv *env)

FILE: ijkmedia/ijkj4a/j4a/class/java/nio/Buffer.c
  type J4AC_java_nio_Buffer (line 24) | typedef struct J4AC_java_nio_Buffer {
  function J4A_loadClass__J4AC_java_nio_Buffer (line 29) | int J4A_loadClass__J4AC_java_nio_Buffer(JNIEnv *env)

FILE: ijkmedia/ijkj4a/j4a/class/java/nio/ByteBuffer.c
  type J4AC_java_nio_ByteBuffer (line 24) | typedef struct J4AC_java_nio_ByteBuffer {
  function jobject (line 33) | jobject J4AC_java_nio_ByteBuffer__allocate(JNIEnv *env, jint capacity)
  function jobject (line 38) | jobject J4AC_java_nio_ByteBuffer__allocate__catchAll(JNIEnv *env, jint c...
  function jobject (line 48) | jobject J4AC_java_nio_ByteBuffer__allocate__asGlobalRef__catchAll(JNIEnv...
  function jobject (line 68) | jobject J4AC_java_nio_ByteBuffer__allocateDirect(JNIEnv *env, jint capac...
  function jobject (line 73) | jobject J4AC_java_nio_ByteBuffer__allocateDirect__catchAll(JNIEnv *env, ...
  function jobject (line 83) | jobject J4AC_java_nio_ByteBuffer__allocateDirect__asGlobalRef__catchAll(...
  function jobject (line 103) | jobject J4AC_java_nio_ByteBuffer__limit(JNIEnv *env, jobject thiz, jint ...
  function jobject (line 108) | jobject J4AC_java_nio_ByteBuffer__limit__catchAll(JNIEnv *env, jobject t...
  function jobject (line 118) | jobject J4AC_java_nio_ByteBuffer__limit__asGlobalRef__catchAll(JNIEnv *e...
  function J4A_loadClass__J4AC_java_nio_ByteBuffer (line 138) | int J4A_loadClass__J4AC_java_nio_ByteBuffer(JNIEnv *env)

FILE: ijkmedia/ijkj4a/j4a/class/java/util/ArrayList.c
  type J4AC_java_util_ArrayList (line 24) | typedef struct J4AC_java_util_ArrayList {
  function jobject (line 32) | jobject J4AC_java_util_ArrayList__ArrayList(JNIEnv *env)
  function jobject (line 37) | jobject J4AC_java_util_ArrayList__ArrayList__catchAll(JNIEnv *env)
  function jobject (line 47) | jobject J4AC_java_util_ArrayList__ArrayList__asGlobalRef__catchAll(JNIEn...
  function jboolean (line 67) | jboolean J4AC_java_util_ArrayList__add(JNIEnv *env, jobject thiz, jobjec...
  function jboolean (line 72) | jboolean J4AC_java_util_ArrayList__add__catchAll(JNIEnv *env, jobject th...
  function J4A_loadClass__J4AC_java_util_ArrayList (line 82) | int J4A_loadClass__J4AC_java_util_ArrayList(JNIEnv *env)

FILE: ijkmedia/ijkj4a/j4a/class/tv/danmaku/ijk/media/player/IjkMediaPlayer.c
  type J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer (line 24) | typedef struct J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer {
  function jlong (line 36) | jlong J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__mNativeMediaPlaye...
  function jlong (line 41) | jlong J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__mNativeMediaPlaye...
  function J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__mNativeMediaPlayer__set (line 51) | void J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__mNativeMediaPlayer...
  function J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__mNativeMediaPlayer__set__catchAll (line 56) | void J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__mNativeMediaPlayer...
  function jlong (line 62) | jlong J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__mNativeMediaDataS...
  function jlong (line 67) | jlong J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__mNativeMediaDataS...
  function J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__mNativeMediaDataSource__set (line 77) | void J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__mNativeMediaDataSo...
  function J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__mNativeMediaDataSource__set__catchAll (line 82) | void J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__mNativeMediaDataSo...
  function jlong (line 88) | jlong J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__mNativeAndroidIO_...
  function jlong (line 93) | jlong J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__mNativeAndroidIO_...
  function J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__mNativeAndroidIO__set (line 103) | void J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__mNativeAndroidIO__...
  function J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__mNativeAndroidIO__set__catchAll (line 108) | void J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__mNativeAndroidIO__...
  function J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__postEventFromNative (line 114) | void J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__postEventFromNativ...
  function J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__postEventFromNative__catchAll (line 119) | void J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__postEventFromNativ...
  function jstring (line 125) | jstring J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__onSelectCodec(J...
  function jstring (line 130) | jstring J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__onSelectCodec__...
  function jstring (line 140) | jstring J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__onSelectCodec__...
  function jstring (line 206) | jstring J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__onSelectCodec__...
  function jstring (line 226) | jstring J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__onSelectCodec__...
  function jstring (line 246) | jstring J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__onSelectCodec__...
  function jboolean (line 312) | jboolean J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__onNativeInvoke...
  function jboolean (line 317) | jboolean J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer__onNativeInvoke...
  function J4A_loadClass__J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer (line 327) | int J4A_loadClass__J4AC_tv_danmaku_ijk_media_player_IjkMediaPlayer(JNIEn...

FILE: ijkmedia/ijkj4a/j4a/class/tv/danmaku/ijk/media/player/misc/IAndroidIO.c
  type J4AC_tv_danmaku_ijk_media_player_misc_IAndroidIO (line 24) | typedef struct J4AC_tv_danmaku_ijk_media_player_misc_IAndroidIO {
  function jint (line 34) | jint J4AC_tv_danmaku_ijk_media_player_misc_IAndroidIO__open(JNIEnv *env,...
  function jint (line 39) | jint J4AC_tv_danmaku_ijk_media_player_misc_IAndroidIO__open__catchAll(JN...
  function jint (line 49) | jint J4AC_tv_danmaku_ijk_media_player_misc_IAndroidIO__open__withCString...
  function jint (line 69) | jint J4AC_tv_danmaku_ijk_media_player_misc_IAndroidIO__open__withCString...
  function jint (line 89) | jint J4AC_tv_danmaku_ijk_media_player_misc_IAndroidIO__read(JNIEnv *env,...
  function jint (line 94) | jint J4AC_tv_danmaku_ijk_media_player_misc_IAndroidIO__read__catchAll(JN...
  function jlong (line 104) | jlong J4AC_tv_danmaku_ijk_media_player_misc_IAndroidIO__seek(JNIEnv *env...
  function jlong (line 109) | jlong J4AC_tv_danmaku_ijk_media_player_misc_IAndroidIO__seek__catchAll(J...
  function jint (line 119) | jint J4AC_tv_danmaku_ijk_media_player_misc_IAndroidIO__close(JNIEnv *env...
  function jint (line 124) | jint J4AC_tv_danmaku_ijk_media_player_misc_IAndroidIO__close__catchAll(J...
  function J4A_loadClass__J4AC_tv_danmaku_ijk_media_player_misc_IAndroidIO (line 134) | int J4A_loadClass__J4AC_tv_danmaku_ijk_media_player_misc_IAndroidIO(JNIE...

FILE: ijkmedia/ijkj4a/j4a/class/tv/danmaku/ijk/media/player/misc/IMediaDataSource.c
  type J4AC_tv_danmaku_ijk_media_player_misc_IMediaDataSource (line 24) | typedef struct J4AC_tv_danmaku_ijk_media_player_misc_IMediaDataSource {
  function jint (line 33) | jint J4AC_tv_danmaku_ijk_media_player_misc_IMediaDataSource__readAt(JNIE...
  function jint (line 38) | jint J4AC_tv_danmaku_ijk_media_player_misc_IMediaDataSource__readAt__cat...
  function jlong (line 48) | jlong J4AC_tv_danmaku_ijk_media_player_misc_IMediaDataSource__getSize(JN...
  function jlong (line 53) | jlong J4AC_tv_danmaku_ijk_media_player_misc_IMediaDataSource__getSize__c...
  function J4AC_tv_danmaku_ijk_media_player_misc_IMediaDataSource__close (line 63) | void J4AC_tv_danmaku_ijk_media_player_misc_IMediaDataSource__close(JNIEn...
  function J4AC_tv_danmaku_ijk_media_player_misc_IMediaDataSource__close__catchAll (line 68) | void J4AC_tv_danmaku_ijk_media_player_misc_IMediaDataSource__close__catc...
  function J4A_loadClass__J4AC_tv_danmaku_ijk_media_player_misc_IMediaDataSource (line 74) | int J4A_loadClass__J4AC_tv_danmaku_ijk_media_player_misc_IMediaDataSourc...

FILE: ijkmedia/ijkj4a/j4a/j4a_allclasses.c
  function J4A_LoadAll__catchAll (line 23) | int J4A_LoadAll__catchAll(JNIEnv *env)

FILE: ijkmedia/ijkj4a/j4a/j4a_base.c
  function J4A_ExceptionCheck__throwAny (line 28) | bool J4A_ExceptionCheck__throwAny(JNIEnv *env)
  function J4A_ExceptionCheck__catchAll (line 38) | bool J4A_ExceptionCheck__catchAll(JNIEnv *env)
  function J4A_ThrowExceptionOfClass (line 49) | int J4A_ThrowExceptionOfClass(JNIEnv* env, jclass clazz, const char* msg)
  function J4A_ThrowException (line 57) | int J4A_ThrowException(JNIEnv* env, const char* class_sign, const char* ...
  function J4A_ThrowIllegalStateException (line 84) | int J4A_ThrowIllegalStateException(JNIEnv *env, const char* msg)
  function jclass (line 93) | jclass J4A_NewGlobalRef__catchAll(JNIEnv *env, jobject obj)
  function J4A_DeleteLocalRef (line 105) | void J4A_DeleteLocalRef(JNIEnv *env, jobject obj)
  function J4A_DeleteLocalRef__p (line 112) | void J4A_DeleteLocalRef__p(JNIEnv *env, jobject *obj)
  function J4A_DeleteGlobalRef (line 120) | void J4A_DeleteGlobalRef(JNIEnv *env, jobject obj)
  function J4A_DeleteGlobalRef__p (line 127) | void J4A_DeleteGlobalRef__p(JNIEnv *env, jobject *obj)
  function J4A_ReleaseStringUTFChars (line 135) | void J4A_ReleaseStringUTFChars(JNIEnv *env, jstring str, const char *c_str)
  function J4A_ReleaseStringUTFChars__p (line 142) | void J4A_ReleaseStringUTFChars__p(JNIEnv *env, jstring str, const char *...
  function jclass (line 154) | jclass J4A_FindClass__catchAll(JNIEnv *env, const char *class_sign)
  function jclass (line 167) | jclass J4A_FindClass__asGlobalRef__catchAll(JNIEnv *env, const char *cla...
  function jmethodID (line 187) | jmethodID J4A_GetMethodID__catchAll(JNIEnv *env, jclass clazz, const cha...
  function jmethodID (line 200) | jmethodID J4A_GetStaticMethodID__catchAll(JNIEnv *env, jclass clazz, con...
  function jfieldID (line 213) | jfieldID J4A_GetFieldID__catchAll(JNIEnv *env, jclass clazz, const char ...
  function jfieldID (line 226) | jfieldID J4A_GetStaticFieldID__catchAll(JNIEnv *env, jclass clazz, const...
  function jbyteArray (line 243) | jbyteArray J4A_NewByteArray__catchAll(JNIEnv *env, jsize capacity)
  function jbyteArray (line 252) | jbyteArray J4A_NewByteArray__asGlobalRef__catchAll(JNIEnv *env, jsize ca...
  function J4A_GetSystemAndroidApiLevel (line 263) | int J4A_GetSystemAndroidApiLevel(JNIEnv *env)

FILE: ijkmedia/ijkj4a/j4au/class/android/media/AudioTrack.util.c
  function J4AC_android_media_AudioTrack__setSpeed (line 27) | void J4AC_android_media_AudioTrack__setSpeed(JNIEnv *env, jobject thiz, ...
  function J4AC_android_media_AudioTrack__setSpeed__catchAll (line 58) | void J4AC_android_media_AudioTrack__setSpeed__catchAll(JNIEnv *env, jobj...

FILE: ijkmedia/ijkj4a/j4au/class/java/nio/ByteBuffer.util.c
  function J4AC_java_nio_ByteBuffer__assignData__catchAll (line 37) | int J4AC_java_nio_ByteBuffer__assignData__catchAll(JNIEnv *env, jobject ...

FILE: ijkmedia/ijkj4a/java/android/media/AudioTrack.java
  class AudioTrack (line 3) | @SimpleCClassName
    method getMinBufferSize (line 8) | public static int   getMinBufferSize(int sampleRateInHz, int channelCo...
    method getMaxVolume (line 9) | public static float getMaxVolume();
    method getMinVolume (line 10) | public static float getMinVolume();
    method getNativeOutputSampleRate (line 11) | public static int   getNativeOutputSampleRate(int streamType);
    method play (line 13) | public void play();
    method pause (line 14) | public void pause();
    method stop (line 15) | public void stop();
    method flush (line 16) | public void flush();
    method release (line 17) | public void release();
    method write (line 19) | public int write(byte[] audioData, int offsetInBytes, int sizeInBytes);
    method setStereoVolume (line 21) | public int setStereoVolume(float leftGain, float rightGain);
    method getAudioSessionId (line 22) | public int getAudioSessionId();
    method getPlaybackParams (line 24) | @MinApi(23)
    method setPlaybackParams (line 26) | @MinApi(23)
    method getStreamType (line 30) | int getStreamType();
    method getSampleRate (line 31) | int getSampleRate();
    method getPlaybackRate (line 32) | int getPlaybackRate();
    method setPlaybackRate (line 33) | int setPlaybackRate(int sampleRateInHz);

FILE: ijkmedia/ijkj4a/java/android/media/MediaCodec.java
  class MediaCodec (line 6) | @SimpleCClassName
    class BufferInfo (line 9) | public static class BufferInfo {
    method createByCodecName (line 18) | public static MediaCodec createByCodecName(String name);
    method configure (line 20) | public void configure(MediaFormat format, Surface surface, MediaCrypto...
    method getOutputFormat (line 22) | public final MediaFormat getOutputFormat();
    method getInputBuffers (line 24) | public ByteBuffer[] getInputBuffers();
    method dequeueInputBuffer (line 26) | public final int  dequeueInputBuffer(long timeoutUs);
    method queueInputBuffer (line 27) | public final void queueInputBuffer(int index, int offset, int size, lo...
    method dequeueOutputBuffer (line 29) | public final int  dequeueOutputBuffer(MediaCodec.BufferInfo info, long...
    method releaseOutputBuffer (line 30) | public final void releaseOutputBuffer(int index, boolean render);
    method start (line 32) | public final void start();
    method stop (line 33) | public final void stop();
    method flush (line 34) | public final void flush();
    method release (line 35) | public final void release();

FILE: ijkmedia/ijkj4a/java/android/media/MediaCrypto.java
  class MediaCrypto (line 3) | @Hide

FILE: ijkmedia/ijkj4a/java/android/media/MediaFormat.java
  class MediaFormat (line 5) | @SimpleCClassName
    method createVideoFormat (line 10) | public final static MediaFormat createVideoFormat(String mime, int wid...
    method getInteger (line 12) | public final int   getInteger(String name);
    method setInteger (line 13) | public final void  setInteger(String name, int value);
    method setByteBuffer (line 14) | public final void  setByteBuffer(String name, ByteBuffer bytes);

FILE: ijkmedia/ijkj4a/java/android/media/PlaybackParams.java
  class PlaybackParams (line 3) | @SimpleCClassName
    method setSpeed (line 6) | public PlaybackParams setSpeed(float speed);

FILE: ijkmedia/ijkj4a/java/android/os/Build.java
  class Build (line 3) | public class Build {
    class VERSION (line 4) | public static class VERSION {

FILE: ijkmedia/ijkj4a/java/android/os/Bundle.java
  class Bundle (line 5) | @SimpleCClassName
    method getInt (line 9) | public int  getInt(String key, int defaultValue);
    method putInt (line 10) | public void putInt(String key, int value);
    method getString (line 12) | public String getString(String key);
    method putString (line 13) | public void   putString(String key, String value);
    method putParcelableArrayList (line 15) | public void putParcelableArrayList(String key, ArrayList value);
    method getLong (line 16) | public long getLong(String key);
    method putLong (line 17) | public void putLong(String key, long value);

FILE: ijkmedia/ijkj4a/java/java/nio/Buffer.java
  class Buffer (line 3) | public class Buffer {

FILE: ijkmedia/ijkj4a/java/java/nio/ByteBuffer.java
  class ByteBuffer (line 5) | @SimpleCClassName
    method allocate (line 8) | public static ByteBuffer allocate(int capacity);
    method allocateDirect (line 9) | public static ByteBuffer allocateDirect(int capacity);
    method limit (line 10) | public final  Buffer     limit(int newLimit);

FILE: ijkmedia/ijkj4a/java/java/util/ArrayList.java
  class ArrayList (line 3) | @SimpleCClassName
    method add (line 5) | public ArrayList();

FILE: ijkmedia/ijkj4a/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java
  class IjkMediaPlayer (line 5) | @SimpleCClassName
    method postEventFromNative (line 11) | private static void postEventFromNative(Object weakThiz, int what, int...
    method onSelectCodec (line 12) | private static String onSelectCodec(Object weakThiz, String mimeType, ...
    method onNativeInvoke (line 13) | private static boolean onNativeInvoke(Object weakThiz, int what, Bundl...

FILE: ijkmedia/ijkj4a/java/tv/danmaku/ijk/media/player/misc/IAndroidIO.java
  type IAndroidIO (line 3) | @SimpleCClassName
    method open (line 5) | int  open(String url);
    method read (line 6) | int  read(byte[] buffer, int size);
    method seek (line 7) | long seek(long offset, int whence);
    method close (line 8) | int  close();

FILE: ijkmedia/ijkj4a/java/tv/danmaku/ijk/media/player/misc/IMediaDataSource.java
  type IMediaDataSource (line 3) | @SimpleCClassName
    method readAt (line 5) | int  readAt(long position, byte[] buffer, int offset, int size);
    method getSize (line 6) | long getSize();
    method close (line 7) | void close();

FILE: ijkmedia/ijkplayer/android/ffmpeg_api_jni.c
  type ffmpeg_api_fields_t (line 35) | typedef struct ffmpeg_api_fields_t {
  function jstring (line 40) | static jstring
  function FFmpegApi_global_init (line 81) | int FFmpegApi_global_init(JNIEnv *env)

FILE: ijkmedia/ijkplayer/android/ijkplayer_android.c
  function IjkMediaPlayer (line 34) | IjkMediaPlayer *ijkmp_android_create(int(*msg_loop)(void*))
  function ijkmp_android_set_surface_l (line 57) | void ijkmp_android_set_surface_l(JNIEnv *env, IjkMediaPlayer *mp, jobjec...
  function ijkmp_android_set_surface (line 66) | void ijkmp_android_set_surface(JNIEnv *env, IjkMediaPlayer *mp, jobject ...
  function ijkmp_android_set_volume (line 78) | void ijkmp_android_set_volume(JNIEnv *env, IjkMediaPlayer *mp, float lef...
  function ijkmp_android_get_audio_session_id (line 94) | int ijkmp_android_get_audio_session_id(JNIEnv *env, IjkMediaPlayer *mp)
  function ijkmp_android_set_mediacodec_select_callback (line 113) | void ijkmp_android_set_mediacodec_select_callback(IjkMediaPlayer *mp, bo...

FILE: ijkmedia/ijkplayer/android/ijkplayer_android.h
  type ijkmp_android_media_format_context (line 31) | typedef struct ijkmp_android_media_format_context {

FILE: ijkmedia/ijkplayer/android/ijkplayer_android_def.h
  type media_event_type (line 32) | enum media_event_type {
  type media_error_type (line 67) | enum media_error_type {
  type media_info_type (line 101) | enum media_info_type {
  type ijkmp_mediacodecinfo_context (line 148) | typedef struct ijkmp_mediacodecinfo_context

FILE: ijkmedia/ijkplayer/android/ijkplayer_jni.c
  type player_fields_t (line 54) | typedef struct player_fields_t {
  function IjkMediaPlayer (line 63) | static IjkMediaPlayer *jni_get_media_player(JNIEnv* env, jobject thiz)
  function IjkMediaPlayer (line 76) | static IjkMediaPlayer *jni_set_media_player(JNIEnv* env, jobject thiz, I...
  function jni_set_media_data_source (line 96) | static int64_t jni_set_media_data_source(JNIEnv* env, jobject thiz, jobj...
  function jni_set_ijkio_androidio (line 123) | static int64_t jni_set_ijkio_androidio(JNIEnv* env, jobject thiz, jobjec...
  function IjkMediaPlayer_setDataSourceAndHeaders (line 152) | static void
  function IjkMediaPlayer_setDataSourceFd (line 177) | static void
  function IjkMediaPlayer_setDataSourceCallback (line 200) | static void
  function IjkMediaPlayer_setAndroidIOCallback (line 225) | static void
  function IjkMediaPlayer_setVideoSurface (line 243) | static void
  function IjkMediaPlayer_prepareAsync (line 257) | static void
  function IjkMediaPlayer_start (line 272) | static void
  function IjkMediaPlayer_stop (line 285) | static void
  function IjkMediaPlayer_pause (line 297) | static void
  function IjkMediaPlayer_seekTo (line 309) | static void
  function jboolean (line 322) | static jboolean
  function jlong (line 336) | static jlong
  function jlong (line 350) | static jlong
  function IjkMediaPlayer_release (line 364) | static void
  function IjkMediaPlayer_reset (line 385) | static void
  function IjkMediaPlayer_setLoopCount (line 401) | static void
  function jint (line 414) | static jint
  function jfloat (line 429) | static jfloat
  function ijkMediaPlayer_setPropertyFloat (line 443) | static void
  function jlong (line 456) | static jlong
  function ijkMediaPlayer_setPropertyLong (line 470) | static void
  function ijkMediaPlayer_setStreamSelected (line 483) | static void
  function IjkMediaPlayer_setVolume (line 501) | static void
  function jint (line 514) | static jint
  function IjkMediaPlayer_setOption (line 529) | static void
  function IjkMediaPlayer_setOptionLong (line 561) | static void
  function jstring (line 580) | static jstring
  function jstring (line 590) | static jstring
  function jstring (line 613) | static jstring
  function fillMetaInternal (line 636) | inline static void fillMetaInternal(JNIEnv *env, jobject jbundle, IjkMed...
  function jobject (line 645) | static jobject
  function IjkMediaPlayer_native_init (line 743) | static void
  function IjkMediaPlayer_native_setup (line 749) | static void
  function IjkMediaPlayer_native_finalize (line 766) | static void
  function inject_callback (line 774) | static int
  function mediacodec_select_callback (line 861) | static bool mediacodec_select_callback(void *opaque, ijkmp_mediacodecinf...
  function post_event (line 882) | inline static void post_event(JNIEnv *env, jobject weak_this, int what, ...
  function post_event2 (line 889) | inline static void post_event2(JNIEnv *env, jobject weak_this, int what,...
  function message_loop_n (line 896) | static void message_loop_n(JNIEnv *env, IjkMediaPlayer *mp)
  function message_loop (line 1033) | static int message_loop(void *arg)
  function IjkMediaPlayer_native_profileBegin (line 1059) | static void
  function IjkMediaPlayer_native_profileEnd (line 1087) | static void
  function IjkMediaPlayer_native_setLogLevel (line 1103) | static void
  function IjkMediaPlayer_setFrameAtTime (line 1111) | static void
  function JNIEXPORT (line 1185) | JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved)
  function JNIEXPORT (line 1209) | JNIEXPORT void JNI_OnUnload(JavaVM *jvm, void *reserved)

FILE: ijkmedia/ijkplayer/android/pipeline/ffpipeline_android.c
  type IJKFF_Pipeline_Opaque (line 36) | typedef struct IJKFF_Pipeline_Opaque {
  function func_destroy (line 51) | static void func_destroy(IJKFF_Pipeline *pipeline)
  function IJKFF_Pipenode (line 68) | static IJKFF_Pipenode *func_open_video_decoder(IJKFF_Pipeline *pipeline,...
  function SDL_Aout (line 82) | static SDL_Aout *func_open_audio_output(IJKFF_Pipeline *pipeline, FFPlay...
  function IJKFF_Pipenode (line 95) | static IJKFF_Pipenode *func_init_video_decoder(IJKFF_Pipeline *pipeline,...
  function func_config_video_decoder (line 106) | static int func_config_video_decoder(IJKFF_Pipeline *pipeline, FFPlayer ...
  function check_ffpipeline (line 119) | inline static bool check_ffpipeline(IJKFF_Pipeline* pipeline, const char...
  function IJKFF_Pipeline (line 134) | IJKFF_Pipeline *ffpipeline_create_from_android(FFPlayer *ffp)
  function ffpipeline_lock_surface (line 163) | int ffpipeline_lock_surface(IJKFF_Pipeline* pipeline)
  function ffpipeline_unlock_surface (line 169) | int ffpipeline_unlock_surface(IJKFF_Pipeline* pipeline)
  function jobject (line 175) | jobject ffpipeline_get_surface_as_global_ref_l(JNIEnv *env, IJKFF_Pipeli...
  function jobject (line 191) | jobject ffpipeline_get_surface_as_global_ref(JNIEnv *env, IJKFF_Pipeline...
  function ffpipeline_set_vout (line 199) | void ffpipeline_set_vout(IJKFF_Pipeline* pipeline, SDL_Vout *vout)
  function ffpipeline_set_surface (line 208) | int ffpipeline_set_surface(JNIEnv *env, IJKFF_Pipeline* pipeline, jobjec...
  function ffpipeline_is_surface_need_reconfigure_l (line 244) | bool ffpipeline_is_surface_need_reconfigure_l(IJKFF_Pipeline* pipeline)
  function ffpipeline_set_surface_need_reconfigure_l (line 252) | void ffpipeline_set_surface_need_reconfigure_l(IJKFF_Pipeline* pipeline,...
  function ffpipeline_set_mediacodec_select_callback (line 261) | void ffpipeline_set_mediacodec_select_callback(IJKFF_Pipeline* pipeline,...
  function ffpipeline_select_mediacodec_l (line 271) | bool ffpipeline_select_mediacodec_l(IJKFF_Pipeline* pipeline, ijkmp_medi...
  function ffpipeline_set_volume (line 283) | void ffpipeline_set_volume(IJKFF_Pipeline* pipeline, float left, float r...

FILE: ijkmedia/ijkplayer/android/pipeline/ffpipeline_android.h
  type FFPlayer (line 33) | typedef struct FFPlayer       FFPlayer;
  type IJKFF_Pipeline (line 34) | typedef struct IJKFF_Pipeline IJKFF_Pipeline;

FILE: ijkmedia/ijkplayer/android/pipeline/ffpipenode_android_mediacodec_vdec.c
  type AMC_Buf_Out (line 56) | typedef struct AMC_Buf_Out {
  type IJKFF_Pipenode_Opaque (line 63) | typedef struct IJKFF_Pipenode_Opaque {
  function SDL_AMediaCodec (line 123) | static SDL_AMediaCodec *create_codec_l(JNIEnv *env, IJKFF_Pipenode *node)
  function recreate_format_l (line 172) | static int recreate_format_l(JNIEnv *env, IJKFF_Pipenode *node)
  function reconfigure_codec_l (line 274) | static int reconfigure_codec_l(JNIEnv *env, IJKFF_Pipenode *node, jobjec...
  function configure_codec_l (line 347) | static int configure_codec_l(JNIEnv *env, IJKFF_Pipenode *node, jobject ...
  function reconfigure_codec (line 412) | static int reconfigure_codec(JNIEnv *env, IJKFF_Pipenode *node)
  function amc_fill_frame (line 422) | static int amc_fill_frame(
  function feed_input_buffer2 (line 454) | static int feed_input_buffer2(JNIEnv *env, IJKFF_Pipenode *node, int64_t...
  function feed_input_buffer (line 699) | static int feed_input_buffer(JNIEnv *env, IJKFF_Pipenode *node, int64_t ...
  function enqueue_thread_func (line 1018) | static int enqueue_thread_func(void *arg)
  function pts_from_buffer_info (line 1049) | static double pts_from_buffer_info(IJKFF_Pipenode *node, SDL_AMediaCodec...
  function sort_amc_buf_out (line 1062) | static void sort_amc_buf_out(AMC_Buf_Out *buf_out, int size) {
  function drain_output_buffer_l (line 1079) | static int drain_output_buffer_l(JNIEnv *env, IJKFF_Pipenode *node, int6...
  function drain_output_buffer2_l (line 1253) | static int drain_output_buffer2_l(JNIEnv *env, IJKFF_Pipenode *node, int...
  function drain_output_buffer (line 1394) | static int drain_output_buffer(JNIEnv *env, IJKFF_Pipenode *node, int64_...
  function func_destroy (line 1410) | static void func_destroy(IJKFF_Pipenode *node)
  function drain_output_buffer2 (line 1447) | static int drain_output_buffer2(JNIEnv *env, IJKFF_Pipenode *node, int64...
  function func_run_sync_loop (line 1513) | static int func_run_sync_loop(IJKFF_Pipenode *node) {
  function func_run_sync (line 1562) | static int func_run_sync(IJKFF_Pipenode *node)
  function func_flush (line 1680) | static int func_flush(IJKFF_Pipenode *node)
  function ffpipenode_config_from_android_mediacodec (line 1692) | int ffpipenode_config_from_android_mediacodec(FFPlayer *ffp, IJKFF_Pipel...
  function IJKFF_Pipenode (line 1840) | IJKFF_Pipenode *ffpipenode_init_decoder_from_android_mediacodec(FFPlayer...
  function IJKFF_Pipenode (line 1904) | IJKFF_Pipenode *ffpipenode_create_video_decoder_from_android_mediacodec(...

FILE: ijkmedia/ijkplayer/android/pipeline/ffpipenode_android_mediacodec_vdec.h
  type FFPlayer (line 31) | typedef struct FFPlayer FFPlayer;

FILE: ijkmedia/ijkplayer/android/pipeline/h264_nal.h
  function convert_sps_pps (line 30) | static int convert_sps_pps( const uint8_t *p_buf, size_t i_buf_size,
  type H264ConvertState (line 108) | typedef struct H264ConvertState {
  function convert_h264_to_annexb (line 113) | static void convert_h264_to_annexb( uint8_t *p_buf, size_t i_len,

FILE: ijkmedia/ijkplayer/android/pipeline/hevc_nal.h
  function convert_hevc_nal_units (line 28) | int convert_hevc_nal_units(const uint8_t *p_buf,size_t i_buf_size,

FILE: ijkmedia/ijkplayer/android/pipeline/mpeg4_esds.h
  function restore_mpeg4_esds (line 27) | static void restore_mpeg4_esds(AVCodecParameters *codecpar,

FILE: ijkmedia/ijkplayer/ff_cmdutils.c
  function print_error (line 73) | void print_error(const char *filename, int err)
  function check_stream_specifier (line 120) | static int check_stream_specifier(AVFormatContext *s, AVStream *st, cons...
  function AVDictionary (line 128) | AVDictionary *filter_codec_opts(AVDictionary *opts, enum AVCodecID codec...
  function AVDictionary (line 186) | AVDictionary **setup_find_stream_info_opts(AVFormatContext *s,
  function get_rotation (line 225) | double get_rotation(AVStream *st)

FILE: ijkmedia/ijkplayer/ff_cmdutils.h
  type AVCodecID (line 33) | enum AVCodecID

FILE: ijkmedia/ijkplayer/ff_ffmsg_queue.h
  type AVMessage (line 33) | typedef struct AVMessage {
  type MessageQueue (line 42) | typedef struct MessageQueue {
  function msg_free_res (line 54) | inline static void msg_free_res(AVMessage *msg)
  function msg_queue_put_private (line 63) | inline static int msg_queue_put_private(MessageQueue *q, AVMessage *msg)
  function msg_queue_put (line 104) | inline static int msg_queue_put(MessageQueue *q, AVMessage *msg)
  function msg_init_msg (line 115) | inline static void msg_init_msg(AVMessage *msg)
  function msg_queue_put_simple1 (line 120) | inline static void msg_queue_put_simple1(MessageQueue *q, int what)
  function msg_queue_put_simple2 (line 128) | inline static void msg_queue_put_simple2(MessageQueue *q, int what, int ...
  function msg_queue_put_simple3 (line 137) | inline static void msg_queue_put_simple3(MessageQueue *q, int what, int ...
  function msg_obj_free_l (line 147) | inline static void msg_obj_free_l(void *obj)
  function msg_queue_put_simple4 (line 152) | inline static void msg_queue_put_simple4(MessageQueue *q, int what, int ...
  function msg_queue_init (line 165) | inline static void msg_queue_init(MessageQueue *q)
  function msg_queue_flush (line 173) | inline static void msg_queue_flush(MessageQueue *q)
  function msg_queue_destroy (line 193) | inline static void msg_queue_destroy(MessageQueue *q)
  function msg_queue_abort (line 211) | inline static void msg_queue_abort(MessageQueue *q)
  function msg_queue_start (line 222) | inline static void msg_queue_start(MessageQueue *q)
  function msg_queue_get (line 235) | inline static int msg_queue_get(MessageQueue *q, AVMessage *msg, int block)
  function msg_queue_remove (line 275) | inline static void msg_queue_remove(MessageQueue *q, int what)

FILE: ijkmedia/ijkplayer/ff_ffpipeline.c
  function IJKFF_Pipeline (line 28) | IJKFF_Pipeline *ffpipeline_alloc(SDL_Class *opaque_class, size_t opaque_...
  function ffpipeline_free (line 44) | void ffpipeline_free(IJKFF_Pipeline *pipeline)
  function ffpipeline_free_p (line 58) | void ffpipeline_free_p(IJKFF_Pipeline **pipeline)
  function IJKFF_Pipenode (line 66) | IJKFF_Pipenode* ffpipeline_open_video_decoder(IJKFF_Pipeline *pipeline, ...
  function IJKFF_Pipenode (line 71) | IJKFF_Pipenode* ffpipeline_init_video_decoder(IJKFF_Pipeline *pipeline, ...
  function ffpipeline_config_video_decoder (line 76) | int ffpipeline_config_video_decoder(IJKFF_Pipeline *pipeline, FFPlayer *...
  function SDL_Aout (line 81) | SDL_Aout *ffpipeline_open_audio_output(IJKFF_Pipeline *pipeline, FFPlaye...

FILE: ijkmedia/ijkplayer/ff_ffpipeline.h
  type IJKFF_Pipeline_Opaque (line 33) | typedef struct IJKFF_Pipeline_Opaque IJKFF_Pipeline_Opaque;
  type IJKFF_Pipeline (line 34) | typedef struct IJKFF_Pipeline IJKFF_Pipeline;
  type IJKFF_Pipeline (line 35) | struct IJKFF_Pipeline {

FILE: ijkmedia/ijkplayer/ff_ffpipenode.c
  function IJKFF_Pipenode (line 29) | IJKFF_Pipenode *ffpipenode_alloc(size_t opaque_size)
  function ffpipenode_free (line 51) | void ffpipenode_free(IJKFF_Pipenode *node)
  function ffpipenode_free_p (line 67) | void ffpipenode_free_p(IJKFF_Pipenode **node)
  function ffpipenode_run_sync (line 76) | int ffpipenode_run_sync(IJKFF_Pipenode *node)
  function ffpipenode_flush (line 81) | int ffpipenode_flush(IJKFF_Pipenode *node)

FILE: ijkmedia/ijkplayer/ff_ffpipenode.h
  type IJKFF_Pipenode_Opaque (line 29) | typedef struct IJKFF_Pipenode_Opaque IJKFF_Pipenode_Opaque;
  type IJKFF_Pipenode (line 30) | typedef struct IJKFF_Pipenode IJKFF_Pipenode;
  type IJKFF_Pipenode (line 31) | struct IJKFF_Pipenode {

FILE: ijkmedia/ijkplayer/ff_ffplay.c
  function cmp_audio_fmts (line 120) | static inline
  function get_valid_channel_layout (line 131) | static inline
  function packet_queue_put_private (line 143) | static int packet_queue_put_private(PacketQueue *q, AVPacket *pkt)
  function packet_queue_put (line 191) | static int packet_queue_put(PacketQueue *q, AVPacket *pkt)
  function packet_queue_put_nullpacket (line 205) | static int packet_queue_put_nullpacket(PacketQueue *q, int stream_index)
  function packet_queue_init (line 216) | static int packet_queue_init(PacketQueue *q)
  function packet_queue_flush (line 233) | static void packet_queue_flush(PacketQueue *q)
  function packet_queue_destroy (line 256) | static void packet_queue_destroy(PacketQueue *q)
  function packet_queue_abort (line 273) | static void packet_queue_abort(PacketQueue *q)
  function packet_queue_start (line 284) | static void packet_queue_start(PacketQueue *q)
  function packet_queue_get (line 293) | static int packet_queue_get(PacketQueue *q, AVPacket *pkt, int block, in...
  function packet_queue_get_or_buffering (line 336) | static int packet_queue_get_or_buffering(FFPlayer *ffp, PacketQueue *q, ...
  function decoder_init (line 365) | static void decoder_init(Decoder *d, AVCodecContext *avctx, PacketQueue ...
  function convert_image (line 378) | static int convert_image(FFPlayer *ffp, AVFrame *src_frame, int64_t src_...
  function decoder_decode_frame (line 566) | static int decoder_decode_frame(FFPlayer *ffp, Decoder *d, AVFrame *fram...
  function decoder_destroy (line 658) | static void decoder_destroy(Decoder *d) {
  function frame_queue_unref_item (line 663) | static void frame_queue_unref_item(Frame *vp)
  function frame_queue_init (line 670) | static int frame_queue_init(FrameQueue *f, PacketQueue *pktq, int max_si...
  function frame_queue_destory (line 691) | static void frame_queue_destory(FrameQueue *f)
  function frame_queue_signal (line 704) | static void frame_queue_signal(FrameQueue *f)
  function Frame (line 711) | static Frame *frame_queue_peek(FrameQueue *f)
  function Frame (line 716) | static Frame *frame_queue_peek_next(FrameQueue *f)
  function Frame (line 721) | static Frame *frame_queue_peek_last(FrameQueue *f)
  function Frame (line 726) | static Frame *frame_queue_peek_writable(FrameQueue *f)
  function Frame (line 742) | static Frame *frame_queue_peek_readable(FrameQueue *f)
  function frame_queue_push (line 758) | static void frame_queue_push(FrameQueue *f)
  function frame_queue_next (line 768) | static void frame_queue_next(FrameQueue *f)
  function frame_queue_nb_remaining (line 784) | static int frame_queue_nb_remaining(FrameQueue *f)
  function frame_queue_last_pos (line 791) | static int64_t frame_queue_last_pos(FrameQueue *f)
  function decoder_abort (line 801) | static void decoder_abort(Decoder *d, FrameQueue *fq)
  function free_picture (line 819) | static void free_picture(Frame *vp)
  function parse_ass_subtitle (line 832) | static size_t parse_ass_subtitle(const char *ass, char *output)
  function video_image_display2 (line 872) | static void video_image_display2(FFPlayer *ffp)
  function stream_component_close (line 935) | static void stream_component_close(FFPlayer *ffp, int stream_index)
  function stream_close (line 996) | static void stream_close(FFPlayer *ffp)
  function video_display2 (line 1065) | static void video_display2(FFPlayer *ffp)
  function get_clock (line 1072) | static double get_clock(Clock *c)
  function set_clock_at (line 1084) | static void set_clock_at(Clock *c, double pts, int serial, double time)
  function set_clock (line 1092) | static void set_clock(Clock *c, double pts, int serial)
  function set_clock_speed (line 1098) | static void set_clock_speed(Clock *c, double speed)
  function init_clock (line 1104) | static void init_clock(Clock *c, int *queue_serial)
  function sync_clock_to_slave (line 1112) | static void sync_clock_to_slave(Clock *c, Clock *slave)
  function get_master_sync_type (line 1120) | static int get_master_sync_type(VideoState *is) {
  function get_master_clock (line 1137) | static double get_master_clock(VideoState *is)
  function check_external_clock_speed (line 1155) | static void check_external_clock_speed(VideoState *is) {
  function stream_seek (line 1170) | static void stream_seek(VideoState *is, int64_t pos, int64_t rel, int se...
  function stream_toggle_pause_l (line 1184) | static void stream_toggle_pause_l(FFPlayer *ffp, int pause_on)
  function stream_update_pause_l (line 1208) | static void stream_update_pause_l(FFPlayer *ffp)
  function toggle_pause_l (line 1218) | static void toggle_pause_l(FFPlayer *ffp, int pause_on)
  function toggle_pause (line 1231) | static void toggle_pause(FFPlayer *ffp, int pause_on)
  function step_to_next_frame_l (line 1241) | static void step_to_next_frame_l(FFPlayer *ffp)
  function compute_target_delay (line 1250) | static double compute_target_delay(FFPlayer *ffp, double delay, VideoSta...
  function vp_duration (line 1287) | static double vp_duration(VideoState *is, Frame *vp, Frame *nextvp) {
  function update_video_pts (line 1299) | static void update_video_pts(VideoState *is, double pts, int64_t pos, in...
  function video_refresh (line 1306) | static void video_refresh(FFPlayer *opaque, double *remaining_time)
  function queue_picture (line 1512) | static int queue_picture(FFPlayer *ffp, AVFrame *src_frame, double pts, ...
  function get_video_frame (line 1688) | static int get_video_frame(FFPlayer *ffp, AVFrame *frame)
  function configure_filtergraph (line 1732) | static int configure_filtergraph(AVFilterGraph *graph, const char *filte...
  function configure_video_filters (line 1775) | static int configure_video_filters(FFPlayer *ffp, AVFilterGraph *graph, ...
  function configure_audio_filters (line 1879) | static int configure_audio_filters(FFPlayer *ffp, const char *afilters, ...
  function audio_thread (line 1972) | static int audio_thread(void *arg)
  function decoder_start (line 2164) | static int decoder_start(Decoder *d, int (*fn)(void *), void *arg, const...
  type AVPixelFormat (line 2195) | enum AVPixelFormat
  function video_thread (line 2338) | static int video_thread(void *arg)
  function update_sample_display (line 2390) | static void update_sample_display(VideoState *is, short *samples, int sa...
  function synchronize_audio (line 2410) | static int synchronize_audio(VideoState *is, int nb_samples)
  function audio_decode_frame (line 2458) | static int audio_decode_frame(FFPlayer *ffp)
  function sdl_audio_callback (line 2631) | static void sdl_audio_callback(void *opaque, Uint8 *stream, int len)
  function audio_open (line 2723) | static int audio_open(FFPlayer *opaque, int64_t wanted_channel_layout, i...
  function stream_component_open (line 2807) | static int stream_component_open(FFPlayer *ffp, int stream_index)
  function decode_interrupt_cb (line 3028) | static int decode_interrupt_cb(void *ctx)
  function stream_has_enough_packets (line 3034) | static int stream_has_enough_packets(AVStream *st, int stream_id, Packet...
  function is_realtime (line 3044) | static int is_realtime(AVFormatContext *s)
  function read_thread (line 3061) | static int read_thread(void *arg)
  function VideoState (line 3642) | static VideoState *stream_open(FFPlayer *ffp, const char *filename, AVIn...
  function video_refresh_thread (line 3761) | static int video_refresh_thread(void *arg)
  function lockmgr (line 3777) | static int lockmgr(void **mtx, enum AVLockOp op)
  function log_level_av_to_ijk (line 3806) | inline static int log_level_av_to_ijk(int av_level)
  function log_level_ijk_to_av (line 3822) | inline static int log_level_ijk_to_av(int ijk_level)
  function ffp_log_callback_brief (line 3839) | static void ffp_log_callback_brief(void *ptr, int level, const char *fmt...
  function ffp_log_callback_report (line 3848) | static void ffp_log_callback_report(void *ptr, int level, const char *fm...
  function ffp_global_init (line 3868) | void ffp_global_init()
  function ffp_global_uninit (line 3897) | void ffp_global_uninit()
  function ffp_global_set_log_report (line 3911) | void ffp_global_set_log_report(int use_report)
  function ffp_global_set_log_level (line 3920) | void ffp_global_set_log_level(int log_level)
  function inject_callback (line 3927) | int inject_callback(void *opaque, int type, void *data, size_t data_size)
  function ffp_global_set_inject_callback (line 3934) | void ffp_global_set_inject_callback(ijk_inject_callback cb)
  function ffp_io_stat_register (line 3939) | void ffp_io_stat_register(void (*cb)(const char *url, int type, int bytes))
  function ffp_io_stat_complete_register (line 3944) | void ffp_io_stat_complete_register(void (*cb)(const char *url,
  function AVClass (line 3962) | static const AVClass *ffp_context_child_class_next(const AVClass *prev)
  function FFPlayer (line 3981) | FFPlayer *ffp_create()
  function ffp_destroy (line 4002) | void ffp_destroy(FFPlayer *ffp)
  function ffp_destroy_p (line 4029) | void ffp_destroy_p(FFPlayer **pffp)
  function AVDictionary (line 4038) | static AVDictionary **ffp_get_opt_dict(FFPlayer *ffp, int opt_category)
  function app_func_event (line 4054) | static int app_func_event(AVApplicationContext *h, int message ,void *da...
  function ijkio_app_func_event (line 4077) | static int ijkio_app_func_event(IjkIOApplicationContext *h, int message ...
  function ffp_set_frame_at_time (line 4098) | void ffp_set_frame_at_time(FFPlayer *ffp, const char *path, int64_t star...
  function ffp_set_option (line 4159) | void ffp_set_option(FFPlayer *ffp, int opt_category, const char *name, c...
  function ffp_set_option_int (line 4168) | void ffp_set_option_int(FFPlayer *ffp, int opt_category, const char *nam...
  function ffp_set_option_intptr (line 4177) | void ffp_set_option_intptr(FFPlayer *ffp, int opt_category, const char *...
  function ffp_set_overlay_format (line 4186) | void ffp_set_overlay_format(FFPlayer *ffp, int chroma_fourcc)
  function ffp_get_video_codec_info (line 4208) | int ffp_get_video_codec_info(FFPlayer *ffp, char **codec_info)
  function ffp_get_audio_codec_info (line 4222) | int ffp_get_audio_codec_info(FFPlayer *ffp, char **codec_info)
  function ffp_show_dict (line 4236) | static void ffp_show_dict(FFPlayer *ffp, const char *tag, AVDictionary *...
  function ffp_show_version_str (line 4246) | static void ffp_show_version_str(FFPlayer *ffp, const char *module, cons...
  function ffp_show_version_int (line 4251) | static void ffp_show_version_int(FFPlayer *ffp, const char *module, unsi...
  function ffp_prepare_async_l (line 4260) | int ffp_prepare_async_l(FFPlayer *ffp, const char *file_name)
  function ffp_start_from_l (line 4323) | int ffp_start_from_l(FFPlayer *ffp, long msec)
  function ffp_start_l (line 4336) | int ffp_start_l(FFPlayer *ffp)
  function ffp_pause_l (line 4347) | int ffp_pause_l(FFPlayer *ffp)
  function ffp_is_paused_l (line 4358) | int ffp_is_paused_l(FFPlayer *ffp)
  function ffp_stop_l (line 4368) | int ffp_stop_l(FFPlayer *ffp)
  function ffp_wait_stop_l (line 4390) | int ffp_wait_stop_l(FFPlayer *ffp)
  function ffp_seek_to_l (line 4402) | int ffp_seek_to_l(FFPlayer *ffp, long msec)
  function ffp_get_current_position_l (line 4431) | long ffp_get_current_position_l(FFPlayer *ffp)
  function ffp_get_duration_l (line 4466) | long ffp_get_duration_l(FFPlayer *ffp)
  function ffp_get_playable_duration_l (line 4480) | long ffp_get_playable_duration_l(FFPlayer *ffp)
  function ffp_set_loop (line 4489) | void ffp_set_loop(FFPlayer *ffp, int loop)
  function ffp_get_loop (line 4497) | int ffp_get_loop(FFPlayer *ffp)
  function ffp_packet_queue_init (line 4505) | int ffp_packet_queue_init(PacketQueue *q)
  function ffp_packet_queue_destroy (line 4510) | void ffp_packet_queue_destroy(PacketQueue *q)
  function ffp_packet_queue_abort (line 4515) | void ffp_packet_queue_abort(PacketQueue *q)
  function ffp_packet_queue_start (line 4520) | void ffp_packet_queue_start(PacketQueue *q)
  function ffp_packet_queue_flush (line 4525) | void ffp_packet_queue_flush(PacketQueue *q)
  function ffp_packet_queue_get (line 4530) | int ffp_packet_queue_get(PacketQueue *q, AVPacket *pkt, int block, int *...
  function ffp_packet_queue_get_or_buffering (line 4535) | int ffp_packet_queue_get_or_buffering(FFPlayer *ffp, PacketQueue *q, AVP...
  function ffp_packet_queue_put (line 4540) | int ffp_packet_queue_put(PacketQueue *q, AVPacket *pkt)
  function ffp_is_flush_packet (line 4545) | bool ffp_is_flush_packet(AVPacket *pkt)
  function Frame (line 4553) | Frame *ffp_frame_queue_peek_writable(FrameQueue *f)
  function ffp_frame_queue_push (line 4558) | void ffp_frame_queue_push(FrameQueue *f)
  function ffp_queue_picture (line 4563) | int ffp_queue_picture(FFPlayer *ffp, AVFrame *src_frame, double pts, dou...
  function ffp_get_master_sync_type (line 4568) | int ffp_get_master_sync_type(VideoState *is)
  function ffp_get_master_clock (line 4573) | double ffp_get_master_clock(VideoState *is)
  function ffp_toggle_buffering_l (line 4578) | void ffp_toggle_buffering_l(FFPlayer *ffp, int buffering_on)
  function ffp_toggle_buffering (line 4607) | void ffp_toggle_buffering(FFPlayer *ffp, int start_buffering)
  function ffp_track_statistic_l (line 4614) | void ffp_track_statistic_l(FFPlayer *ffp, AVStream *st, PacketQueue *q, ...
  function ffp_audio_statistic_l (line 4628) | void ffp_audio_statistic_l(FFPlayer *ffp)
  function ffp_video_statistic_l (line 4634) | void ffp_video_statistic_l(FFPlayer *ffp)
  function ffp_statistic_l (line 4640) | void ffp_statistic_l(FFPlayer *ffp)
  function ffp_check_buffering_l (line 4646) | void ffp_check_buffering_l(FFPlayer *ffp)
  function ffp_video_thread (line 4766) | int ffp_video_thread(FFPlayer *ffp)
  function ffp_set_video_codec_info (line 4771) | void ffp_set_video_codec_info(FFPlayer *ffp, const char *module, const c...
  function ffp_set_audio_codec_info (line 4778) | void ffp_set_audio_codec_info(FFPlayer *ffp, const char *module, const c...
  function ffp_set_subtitle_codec_info (line 4785) | void ffp_set_subtitle_codec_info(FFPlayer *ffp, const char *module, cons...
  function ffp_set_playback_rate (line 4792) | void ffp_set_playback_rate(FFPlayer *ffp, float rate)
  function ffp_set_playback_volume (line 4802) | void ffp_set_playback_volume(FFPlayer *ffp, float volume)
  function ffp_get_video_rotate_degrees (line 4810) | int ffp_get_video_rotate_degrees(FFPlayer *ffp)
  function ffp_set_stream_selected (line 4835) | int ffp_set_stream_selected(FFPlayer *ffp, int stream, int selected)
  function ffp_get_property_float (line 4894) | float ffp_get_property_float(FFPlayer *ffp, int id, float default_value)
  function ffp_set_property_float (line 4916) | void ffp_set_property_float(FFPlayer *ffp, int id, float value)
  function ffp_get_property_int64 (line 4930) | int64_t ffp_get_property_int64(FFPlayer *ffp, int id, int64_t default_va...
  function ffp_set_property_int64 (line 5021) | void ffp_set_property_int64(FFPlayer *ffp, int id, int64_t value)
  function IjkMediaMeta (line 5044) | IjkMediaMeta *ffp_get_meta_l(FFPlayer *ffp)

FILE: ijkmedia/ijkplayer/ff_ffplay.h
  type IjkMediaMeta (line 120) | struct IjkMediaMeta

FILE: ijkmedia/ijkplayer/ff_ffplay_def.h
  type GetImgInfo (line 147) | typedef struct GetImgInfo {
  type MyAVPacketList (line 160) | typedef struct MyAVPacketList {
  type PacketQueue (line 166) | typedef struct PacketQueue {
  type AudioParams (line 192) | typedef struct AudioParams {
  type Clock (line 201) | typedef struct Clock {
  type Frame (line 212) | typedef struct Frame {
  type FrameQueue (line 232) | typedef struct FrameQueue {
  type Decoder (line 251) | typedef struct Decoder {
  type VideoState (line 275) | typedef struct VideoState {
  type ShowMode (line 452) | enum ShowMode
  type FFTrackCacheStatistic (line 485) | typedef struct FFTrackCacheStatistic
  type FFStatistic (line 492) | typedef struct FFStatistic
  function ffp_reset_statistic (line 522) | inline static void ffp_reset_statistic(FFStatistic *dcc)
  type FFDemuxCacheControl (line 528) | typedef struct FFDemuxCacheControl
  function ffp_reset_demux_cache_control (line 540) | inline static void ffp_reset_demux_cache_control(FFDemuxCacheControl *dcc)
  type IjkMediaMeta (line 553) | struct IjkMediaMeta
  type IJKFF_Pipeline (line 554) | struct IJKFF_Pipeline
  type FFPlayer (line 555) | typedef struct FFPlayer {
  function ffp_reset_internal (line 728) | inline static void ffp_reset_internal(FFPlayer *ffp)
  function ffp_notify_msg1 (line 858) | inline static void ffp_notify_msg1(FFPlayer *ffp, int what) {
  function ffp_notify_msg2 (line 862) | inline static void ffp_notify_msg2(FFPlayer *ffp, int what, int arg1) {
  function ffp_notify_msg3 (line 866) | inline static void ffp_notify_msg3(FFPlayer *ffp, int what, int arg1, in...
  function ffp_notify_msg4 (line 870) | inline static void ffp_notify_msg4(FFPlayer *ffp, int what, int arg1, in...
  function ffp_remove_msg (line 874) | inline static void ffp_remove_msg(FFPlayer *ffp, int what) {

FILE: ijkmedia/ijkplayer/ijkavformat/allformats.c
  type AVInputFormat (line 42) | struct AVInputFormat
  function ijkav_register_input_format (line 56) | static void ijkav_register_input_format(AVInputFormat *iformat)
  function ijkav_register_all (line 67) | void ijkav_register_all(void)

FILE: ijkmedia/ijkplayer/ijkavformat/cJSON.c
  type error (line 65) | typedef struct {
  function cJSON_GetErrorPtr (line 71) | CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void)
  function cJSON_Version (line 81) | CJSON_PUBLIC(const char*) cJSON_Version(void)
  function case_insensitive_strcmp (line 90) | static int case_insensitive_strcmp(const unsigned char *string1, const u...
  type internal_hooks (line 113) | typedef struct internal_hooks
  function internal_free (line 126) | static void internal_free(void *pointer)
  function cJSON_InitHooks (line 163) | CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks)
  function cJSON (line 195) | static cJSON *cJSON_New_Item(const internal_hooks * const hooks)
  function cJSON_Delete (line 207) | CJSON_PUBLIC(void) cJSON_Delete(cJSON *item)
  function get_decimal_point (line 231) | static unsigned char get_decimal_point(void)
  type parse_buffer (line 241) | typedef struct
  function cJSON_bool (line 259) | static cJSON_bool parse_number(cJSON * const item, parse_buffer * const ...
  function cJSON_SetNumberHelper (line 336) | CJSON_PUBLIC(double) cJSON_SetNumberHelper(cJSON *object, double number)
  type printbuffer (line 354) | typedef struct
  function update_offset (line 454) | static void update_offset(printbuffer * const buffer)
  function cJSON_bool (line 467) | static cJSON_bool print_number(const cJSON * const item, printbuffer * c...
  function parse_hex4 (line 533) | static unsigned parse_hex4(const unsigned char * const input)
  function utf16_literal_to_utf8 (line 570) | static unsigned char utf16_literal_to_utf8(const unsigned char * const i...
  function cJSON_bool (line 691) | static cJSON_bool parse_string(cJSON * const item, parse_buffer * const ...
  function cJSON_bool (line 820) | static cJSON_bool print_string_ptr(const unsigned char * const input, pr...
  function cJSON_bool (line 942) | static cJSON_bool print_string(const cJSON * const item, printbuffer * c...
  function parse_buffer (line 956) | static parse_buffer *buffer_skip_whitespace(parse_buffer * const buffer)
  function parse_buffer (line 977) | static parse_buffer *skip_utf8_bom(parse_buffer * const buffer)
  function cJSON_ParseWithOpts (line 993) | CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char ...
  function cJSON_Parse (line 1073) | CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value)
  function cJSON_Print (line 1143) | CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item)
  function cJSON_PrintUnformatted (line 1148) | CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item)
  function cJSON_PrintBuffered (line 1153) | CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffe...
  function cJSON_PrintPreallocated (line 1183) | CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buf,...
  function cJSON_bool (line 1203) | static cJSON_bool parse_value(cJSON * const item, parse_buffer * const i...
  function cJSON_bool (line 1258) | static cJSON_bool print_value(const cJSON * const item, printbuffer * co...
  function cJSON_bool (line 1336) | static cJSON_bool parse_array(cJSON * const item, parse_buffer * const i...
  function cJSON_bool (line 1430) | static cJSON_bool print_array(const cJSON * const item, printbuffer * co...
  function cJSON_bool (line 1492) | static cJSON_bool parse_object(cJSON * const item, parse_buffer * const ...
  function cJSON_bool (line 1601) | static cJSON_bool print_object(const cJSON * const item, printbuffer * c...
  function cJSON_GetArraySize (line 1715) | CJSON_PUBLIC(int) cJSON_GetArraySize(const cJSON *array)
  function cJSON (line 1738) | static cJSON* get_array_item(const cJSON *array, size_t index)
  function cJSON_GetArrayItem (line 1757) | CJSON_PUBLIC(cJSON *) cJSON_GetArrayItem(const cJSON *array, int index)
  function cJSON (line 1767) | static cJSON *get_object_item(const cJSON * const object, const char * c...
  function cJSON_GetObjectItem (line 1795) | CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON * const object, co...
  function cJSON_GetObjectItemCaseSensitive (line 1800) | CJSON_PUBLIC(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON * con...
  function cJSON_HasObjectItem (line 1805) | CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object, const ...
  function suffix_object (line 1811) | static void suffix_object(cJSON *prev, cJSON *item)
  function cJSON (line 1818) | static cJSON *create_reference(const cJSON *item, const internal_hooks *...
  function cJSON_AddItemToArray (line 1840) | CJSON_PUBLIC(void) cJSON_AddItemToArray(cJSON *array, cJSON *item)
  function cJSON_AddItemToObject (line 1867) | CJSON_PUBLIC(void) cJSON_AddItemToObject(cJSON *object, const char *stri...
  function cJSON_AddItemToObjectCS (line 1888) | CJSON_PUBLIC(void) cJSON_AddItemToObjectCS(cJSON *object, const char *st...
  function cJSON_AddItemReferenceToArray (line 1906) | CJSON_PUBLIC(void) cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item)
  function cJSON_AddItemReferenceToObject (line 1916) | CJSON_PUBLIC(void) cJSON_AddItemReferenceToObject(cJSON *object, const c...
  function cJSON_DetachItemViaPointer (line 1926) | CJSON_PUBLIC(cJSON *) cJSON_DetachItemViaPointer(cJSON *parent, cJSON * ...
  function cJSON_DetachItemFromArray (line 1956) | CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromArray(cJSON *array, int which)
  function cJSON_DeleteItemFromArray (line 1966) | CJSON_PUBLIC(void) cJSON_DeleteItemFromArray(cJSON *array, int which)
  function cJSON_DetachItemFromObject (line 1971) | CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObject(cJSON *object, const ch...
  function cJSON_DetachItemFromObjectCaseSensitive (line 1978) | CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObjectCaseSensitive(cJSON *obj...
  function cJSON_DeleteItemFromObject (line 1985) | CJSON_PUBLIC(void) cJSON_DeleteItemFromObject(cJSON *object, const char ...
  function cJSON_DeleteItemFromObjectCaseSensitive (line 1990) | CJSON_PUBLIC(void) cJSON_DeleteItemFromObjectCaseSensitive(cJSON *object...
  function cJSON_InsertItemInArray (line 1996) | CJSON_PUBLIC(void) cJSON_InsertItemInArray(cJSON *array, int which, cJSO...
  function cJSON_ReplaceItemViaPointer (line 2025) | CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemViaPointer(cJSON * const paren...
  function cJSON_ReplaceItemInArray (line 2060) | CJSON_PUBLIC(void) cJSON_ReplaceItemInArray(cJSON *array, int which, cJS...
  function cJSON_bool (line 2070) | static cJSON_bool replace_item_in_object(cJSON *object, const char *stri...
  function cJSON_ReplaceItemInObject (line 2090) | CJSON_PUBLIC(void) cJSON_ReplaceItemInObject(cJSON *object, const char *...
  function cJSON_ReplaceItemInObjectCaseSensitive (line 2095) | CJSON_PUBLIC(void) cJSON_ReplaceItemInObjectCaseSensitive(cJSON *object,...
  function cJSON_CreateNull (line 2101) | CJSON_PUBLIC(cJSON *) cJSON_CreateNull(void)
  function cJSON_CreateTrue (line 2112) | CJSON_PUBLIC(cJSON *) cJSON_CreateTrue(void)
  function cJSON_CreateFalse (line 2123) | CJSON_PUBLIC(cJSON *) cJSON_CreateFalse(void)
  function cJSON_CreateBool (line 2134) | CJSON_PUBLIC(cJSON *) cJSON_CreateBool(cJSON_bool b)
  function cJSON_CreateNumber (line 2145) | CJSON_PUBLIC(cJSON *) cJSON_CreateNumber(double num)
  function cJSON_CreateString (line 2171) | CJSON_PUBLIC(cJSON *) cJSON_CreateString(const char *string)
  function cJSON_CreateRaw (line 2188) | CJSON_PUBLIC(cJSON *) cJSON_CreateRaw(const char *raw)
  function cJSON_CreateArray (line 2205) | CJSON_PUBLIC(cJSON *) cJSON_CreateArray(void)
  function cJSON_CreateObject (line 2216) | CJSON_PUBLIC(cJSON *) cJSON_CreateObject(void)
  function cJSON_CreateIntArray (line 2228) | CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count)
  function cJSON_CreateFloatArray (line 2263) | CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int c...
  function cJSON_CreateDoubleArray (line 2299) | CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int...
  function cJSON_CreateStringArray (line 2335) | CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char **strings, int ...
  function cJSON_Duplicate (line 2372) | CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, cJSON_bool recu...
  function cJSON_Minify (line 2451) | CJSON_PUBLIC(void) cJSON_Minify(char *json)
  function cJSON_IsInvalid (line 2521) | CJSON_PUBLIC(cJSON_bool) cJSON_IsInvalid(const cJSON * const item)
  function cJSON_IsFalse (line 2531) | CJSON_PUBLIC(cJSON_bool) cJSON_IsFalse(const cJSON * const item)
  function cJSON_IsTrue (line 2541) | CJSON_PUBLIC(cJSON_bool) cJSON_IsTrue(const cJSON * const item)
  function cJSON_IsBool (line 2552) | CJSON_PUBLIC(cJSON_bool) cJSON_IsBool(const cJSON * const item)
  function cJSON_IsNull (line 2561) | CJSON_PUBLIC(cJSON_bool) cJSON_IsNull(const cJSON * const item)
  function cJSON_IsNumber (line 2571) | CJSON_PUBLIC(cJSON_bool) cJSON_IsNumber(const cJSON * const item)
  function cJSON_IsString (line 2581) | CJSON_PUBLIC(cJSON_bool) cJSON_IsString(const cJSON * const item)
  function cJSON_IsArray (line 2591) | CJSON_PUBLIC(cJSON_bool) cJSON_IsArray(const cJSON * const item)
  function cJSON_IsObject (line 2601) | CJSON_PUBLIC(cJSON_bool) cJSON_IsObject(const cJSON * const item)
  function cJSON_IsRaw (line 2611) | CJSON_PUBLIC(cJSON_bool) cJSON_IsRaw(const cJSON * const item)
  function cJSON_Compare (line 2621) | CJSON_PUBLIC(cJSON_bool) cJSON_Compare(const cJSON * const a, const cJSO...
  function cJSON_malloc (line 2746) | CJSON_PUBLIC(void *) cJSON_malloc(size_t size)
  function cJSON_free (line 2751) | CJSON_PUBLIC(void) cJSON_free(void *object)

FILE: ijkmedia/ijkplayer/ijkavformat/cJSON.h
  type cJSON (line 53) | typedef struct cJSON
  type cJSON_Hooks (line 75) | typedef struct cJSON_Hooks
  type cJSON_bool (line 81) | typedef int cJSON_bool;

FILE: ijkmedia/ijkplayer/ijkavformat/ijkasync.c
  type RingBuffer (line 50) | typedef struct RingBuffer
  type Context (line 58) | typedef struct Context {
  function ring_init (line 91) | static int ring_init(RingBuffer *ring, int64_t capacity, int64_t read_ba...
  function ring_destroy (line 102) | static void ring_destroy(RingBuffer *ring)
  function ring_reset (line 107) | static void ring_reset(RingBuffer *ring)
  function ring_size (line 113) | static int ring_size(RingBuffer *ring)
  function ring_space (line 118) | static int ring_space(RingBuffer *ring)
  function ring_generic_read (line 123) | static int ring_generic_read(RingBuffer *ring, void *dest, int buf_size,...
  function ring_generic_write (line 139) | static int ring_generic_write(RingBuffer *ring, void *src, int size, int...
  function ring_size_of_read_back (line 145) | static int ring_size_of_read_back(RingBuffer *ring)
  function ring_drain (line 150) | static int ring_drain(RingBuffer *ring, int offset)
  function async_check_interrupt (line 158) | static int async_check_interrupt(void *arg)
  function wrapped_url_read (line 172) | static int wrapped_url_read(void *src, void *dst, int size)
  function call_inject_statistic (line 184) | static void call_inject_statistic(URLContext *h)
  function call_inject_async_fill_speed (line 198) | static void call_inject_async_fill_speed(URLContext *h, int is_full_spee...
  function async_open (line 298) | static int async_open(URLContext *h, const char *arg, int flags, AVDicti...
  function async_close (line 365) | static int async_close(URLContext *h)
  function async_read_internal (line 388) | static int async_read_internal(URLContext *h, void *dest, int size, int ...
  function async_read (line 436) | static int async_read(URLContext *h, unsigned char *buf, int size)
  function fifo_do_not_copy_func (line 441) | static void fifo_do_not_copy_func(void* dest, void* src, int size) {
  function async_seek (line 445) | static int64_t async_seek(URLContext *h, int64_t pos, int whence)
  type TestContext (line 567) | typedef struct TestContext {
  function async_test_open (line 576) | static int async_test_open(URLContext *h, const char *arg, int flags, AV...
  function async_test_close (line 584) | static int async_test_close(URLContext *h)
  function async_test_read (line 589) | static int async_test_read(URLContext *h, unsigned char *buf, int size)
  function async_test_seek (line 614) | static int64_t async_test_seek(URLContext *h, int64_t pos, int whence)
  function main (line 664) | int main(void)

FILE: ijkmedia/ijkplayer/ijkavformat/ijkio.c
  type Context (line 32) | typedef struct Context {
  function ijkio_copy_options (line 37) | static int ijkio_copy_options(IjkAVDictionary **dst, AVDictionary *src) {
  function ijkio_open (line 49) | static int ijkio_open(URLContext *h, const char *arg, int flags, AVDicti...
  function ijkio_read (line 76) | static int ijkio_read(URLContext *h, unsigned char *buf, int size)
  function ijkio_seek (line 87) | static int64_t ijkio_seek(URLContext *h, int64_t offset, int whence)
  function ijkio_close (line 98) | static int ijkio_close(URLContext *h)

FILE: ijkmedia/ijkplayer/ijkavformat/ijkioandroidio.c
  type IjkIOAndroidioContext (line 36) | typedef struct IjkIOAndroidioContext {
  function ijkio_androidio_open (line 43) | static int ijkio_androidio_open(IjkURLContext *h, const char *url, int f...
  function jobject (line 88) | static jobject jbuffer_grow(JNIEnv *env, IjkURLContext *h, int new_capac...
  function ijkio_androidio_read (line 111) | static int ijkio_androidio_read(IjkURLContext *h, unsigned char *buf, in...
  function ijkio_androidio_seek (line 144) | static int64_t ijkio_androidio_seek(IjkURLContext *h, int64_t offset, in...
  function ijkio_androidio_close (line 164) | static int ijkio_androidio_close(IjkURLContext *h) {

FILE: ijkmedia/ijkplayer/ijkavformat/ijkioapplication.c
  function ijkio_application_alloc (line 25) | int  ijkio_application_alloc(IjkIOApplicationContext **ph, void *opaque) {
  function ijkio_application_open (line 38) | int  ijkio_application_open(IjkIOApplicationContext **ph, void *opaque) {
  function ijkio_application_close (line 46) | void ijkio_application_close(IjkIOApplicationContext *h) {
  function ijkio_application_closep (line 50) | void ijkio_application_closep(IjkIOApplicationContext **ph) {
  function ijkio_application_on_cache_statistic (line 58) | void ijkio_application_on_cache_statistic(IjkIOApplicationContext *h, Ij...

FILE: ijkmedia/ijkplayer/ijkavformat/ijkioapplication.h
  type IjkIOAppCacheStatistic (line 33) | typedef struct IjkIOAppCacheStatistic {
  type IjkCacheEntry (line 41) | typedef struct IjkCacheEntry {
  type IjkIOApplicationContext (line 47) | typedef struct IjkIOApplicationContext IjkIOApplicationContext;
  type IjkIOApplicationContext (line 48) | struct IjkIOApplicationContext {

FILE: ijkmedia/ijkplayer/ijkavformat/ijkiocache.c
  type IjkIOCacheContext (line 47) | typedef struct IjkIOCacheContext {
  function cmp (line 97) | static int cmp(const void *key, const void *node)
  function call_inject_statistic (line 102) | static void call_inject_statistic(IjkURLContext *h)
  function ijkio_cache_check_interrupt (line 117) | static int ijkio_cache_check_interrupt(IjkURLContext *h)
  function enu_free (line 137) | static int enu_free(void *opaque, void *elem)
  function tree_destroy (line 143) | static int tree_destroy(void *parm, int64_t key, void *elem)
  function ijkio_cache_file_error (line 152) | static int ijkio_cache_file_error(IjkURLContext *h) {
  function ijkio_cache_file_overrang (line 203) | static int64_t ijkio_cache_file_overrang(IjkURLContext *h, int64_t *cur_...
  function add_entry (line 235) | static int64_t add_entry(IjkURLContext *h, const unsigned char *buf, int...
  function wrapped_file_read (line 318) | static int wrapped_file_read(IjkURLContext *h, void *dst, int size)
  function wrapped_url_read (line 328) | static int wrapped_url_read(IjkURLContext *h, void *dst, int size)
  function ijkio_cache_ffurl_size (line 343) | static int64_t ijkio_cache_ffurl_size(IjkURLContext *h) {
  function ijkio_cache_io_open (line 359) | static int ijkio_cache_io_open(IjkURLContext *h, const char *url, int fl...
  function ijkio_cache_write_file (line 376) | static int64_t ijkio_cache_write_file(IjkURLContext *h) {
  function ijkio_cache_task (line 482) | static void ijkio_cache_task(void *h, void *r) {
  function ijkio_cache_open (line 536) | static int ijkio_cache_open(IjkURLContext *h, const char *url, int flags...
  function ijkio_file_read (line 734) | static int ijkio_file_read(IjkURLContext *h, void *dest, int to_read)
  function sync_add_entry (line 778) | static int64_t sync_add_entry(IjkURLContext *h, const unsigned char *buf...
  function ijkio_cache_sync_read (line 855) | static int ijkio_cache_sync_read(IjkURLContext *h, unsigned char *buf, i...
  function ijkio_cache_read (line 956) | static int ijkio_cache_read(IjkURLContext *h, unsigned char *buf, int si...
  function ijkio_cache_seek (line 1028) | static int64_t ijkio_cache_seek(IjkURLContext *h, int64_t pos, int whenc...
  function ijkio_cache_close (line 1079) | static int ijkio_cache_close(IjkURLContext *h) {
  function ijkio_cache_pause (line 1114) | static int ijkio_cache_pause(IjkURLContext *h) {
  function ijkio_cache_resume (line 1139) | static int ijkio_cache_resume(IjkURLContext *h) {

FILE: ijkmedia/ijkplayer/ijkavformat/ijkioffio.c
  type IjkIOFFioContext (line 28) | typedef struct IjkIOFFioContext {
  function ijkio_copy_options (line 32) | static int ijkio_copy_options(AVDictionary **dst, IjkAVDictionary *src) {
  function ijkio_ffio_open (line 44) | static int ijkio_ffio_open(IjkURLContext *h, const char *url, int flags,...
  function ijkio_ffio_read (line 67) | static int ijkio_ffio_read(IjkURLContext *h, unsigned char *buf, int siz...
  function ijkio_ffio_seek (line 78) | static int64_t ijkio_ffio_seek(IjkURLContext *h, int64_t offset, int whe...
  function ijkio_ffio_close (line 90) | static int ijkio_ffio_close(IjkURLContext *h) {

FILE: ijkmedia/ijkplayer/ijkavformat/ijkiomanager.c
  function ijkio_manager_alloc (line 36) | static int ijkio_manager_alloc(IjkIOManagerContext **ph, void *opaque)
  function ijkio_manager_create (line 57) | int ijkio_manager_create(IjkIOManagerContext **ph, void *opaque)
  function enu_free (line 62) | static int enu_free(void *opaque, void *elem)
  function tree_destroy (line 68) | static int tree_destroy(void *parm, int64_t key, void *elem)
  function enu_save (line 77) | static int enu_save(void *opaque, void *elem) {
  function ijkio_manager_save_tree_to_file (line 102) | static int ijkio_manager_save_tree_to_file(void *parm, int64_t key, void...
  function ijkio_manager_destroy (line 133) | void ijkio_manager_destroy(IjkIOManagerContext *h)
  function ijkio_manager_destroyp (line 170) | void ijkio_manager_destroyp(IjkIOManagerContext **ph)
  function ijkio_manager_set_callback (line 179) | int ijkio_manager_set_callback(IjkIOManagerContext *h, void *callback) {
  function ijkio_manager_set_all_ctx_pause (line 190) | static void ijkio_manager_set_all_ctx_pause(IjkIOManagerContext *h) {
  function cmp (line 205) | static int cmp(const void *key, const void *node)
  function ijkio_manager_parse_cache_info (line 210) | static void ijkio_manager_parse_cache_info(IjkIOApplicationContext *app_...
  function ijkio_manager_will_share_cache_map (line 339) | void ijkio_manager_will_share_cache_map(IjkIOManagerContext *h) {
  function ijkio_manager_immediate_reconnect (line 360) | void ijkio_manager_immediate_reconnect(IjkIOManagerContext *h) {
  function ijkio_manager_did_share_cache_map (line 368) | void ijkio_manager_did_share_cache_map(IjkIOManagerContext *h) {
  function ijkio_manager_io_open (line 378) | int ijkio_manager_io_open(IjkIOManagerContext *h, const char *url, int f...
  function ijkio_manager_io_read (line 446) | int ijkio_manager_io_read(IjkIOManagerContext *h, unsigned char *buf, in...
  function ijkio_manager_io_seek (line 468) | int64_t ijkio_manager_io_seek(IjkIOManagerContext *h, int64_t offset, in...
  function ijkio_manager_io_close (line 491) | int ijkio_manager_io_close(IjkIOManagerContext *h) {

FILE: ijkmedia/ijkplayer/ijkavformat/ijkiomanager.h
  type IjkIOManagerContext (line 31) | typedef struct IjkIOManagerContext IjkIOManagerContext;
  type IjkIOManagerContext (line 32) | struct IjkIOManagerContext {

FILE: ijkmedia/ijkplayer/ijkavformat/ijkioprotocol.c
  function ijkio_alloc_url (line 32) | int ijkio_alloc_url(IjkURLContext **ph, const char *url) {

FILE: ijkmedia/ijkplayer/ijkavformat/ijkiourl.h
  type IjkURLProtocol (line 31) | struct IjkURLProtocol
  type IjkURLContext (line 36) | typedef struct IjkURLContext {
  type IjkURLProtocol (line 43) | typedef struct IjkURLProtocol {

FILE: ijkmedia/ijkplayer/ijkavformat/ijkiourlhook.c
  type Context (line 30) | typedef struct Context {
  function ijkio_cache_check_interrupt (line 53) | static int ijkio_cache_check_interrupt(IjkURLContext *h)
  function ijkio_urlhook_call_inject (line 73) | static int ijkio_urlhook_call_inject(IjkURLContext *h)
  function ijkio_urlhook_reconnect (line 117) | static int ijkio_urlhook_reconnect(IjkURLContext *h, IjkAVDictionary *ex...
  function ijkio_urlhook_init (line 165) | static int ijkio_urlhook_init(IjkURLContext *h, const char *arg, int fla...
  function ijkio_httphook_close (line 189) | static int ijkio_httphook_close(IjkURLContext *h)
  function ijkio_urlhook_read (line 206) | static int ijkio_urlhook_read(IjkURLContext *h, unsigned char *buf, int ...
  function ijkio_urlhook_seek (line 229) | static int64_t ijkio_urlhook_seek(IjkURLContext *h, int64_t pos, int whe...
  function ijkio_httphook_reconnect_at (line 248) | static int ijkio_httphook_reconnect_at(IjkURLContext *h, int64_t offset)
  function ijkio_httphook_open (line 260) | static int ijkio_httphook_open(IjkURLContext *h, const char *arg, int fl...
  function ijkio_httphook_read (line 321) | static int ijkio_httphook_read(IjkURLContext *h, unsigned char *buf, int...
  function ijkio_httphook_reseek_at (line 364) | static int64_t ijkio_httphook_reseek_at(IjkURLContext *h, int64_t pos, i...
  function ijkio_httphook_seek (line 391) | static int64_t ijkio_httphook_seek(IjkURLContext *h, int64_t pos, int wh...
  function ijkio_httphook_pause (line 446) | static int ijkio_httphook_pause(IjkURLContext *h) {
  function ijkio_httphook_resume (line 460) | static int ijkio_httphook_resume(IjkURLContext *h) {

FILE: ijkmedia/ijkplayer/ijkavformat/ijklas.c
  type AdaptiveConfig (line 63) | typedef struct AdaptiveConfig {
  type MultiRateAdaption (line 77) | typedef struct MultiRateAdaption {
  type FlvTag (line 98) | typedef struct FlvTag {
  type Representation (line 110) | typedef struct Representation {
  type AdaptationSet (line 119) | typedef struct AdaptationSet {
  type TagListNode (line 125) | typedef struct TagListNode {
  type TagQueue (line 130) | typedef struct TagQueue {
  type GopReader (line 140) | typedef struct GopReader {
  type PlayList (line 153) | typedef struct PlayList {
  type LasContext (line 195) | typedef struct LasContext {
  function get_current_time_ms (line 227) | inline static int64_t get_current_time_ms() {
  function _log (line 234) | static inline void _log(unsigned session_id, const char* func_name, int ...
  function get_switch_mode (line 255) | int get_switch_mode(AVFormatContext* format) {
  function get_first_audio_packet_pts (line 260) | int64_t get_first_audio_packet_pts(AVFormatContext* format) {
  function get_audio_only_request (line 265) | int get_audio_only_request(AVFormatContext* format) {
  function set_audio_only_response (line 270) | void set_audio_only_response(AVFormatContext* format, int audio_only) {
  function set_stream_reopened (line 275) | void set_stream_reopened(AVFormatContext* format, bool stream_reopened) {
  function get_cache_duration_ms (line 280) | int64_t get_cache_duration_ms(FFTrackCacheStatistic* cache) {
  function get_bytes_read (line 288) | static int64_t get_bytes_read(PlayList* p) {
  function add_bytes_read (line 295) | static void add_bytes_read(PlayList* p, int64_t bytes_read) {
  function algo_cond_wait (line 301) | static void algo_cond_wait(PlayList* p) {
  function algo_cond_signal (line 307) | static void algo_cond_signal(PlayList* p) {
  function FlvTag_has_consume_all_data_l (line 314) | static int FlvTag_has_consume_all_data_l(struct FlvTag* tag) {
  function FlvTag_get_data_from_buffer (line 324) | int FlvTag_get_data_from_buffer(PlayList* playlist, struct FlvTag* tag, ...
  function FlvTag_alloc_buffer (line 338) | int FlvTag_alloc_buffer(PlayList* playlist, struct FlvTag* tag, int32_t ...
  function FlvTag_dealloc (line 350) | void FlvTag_dealloc(struct FlvTag* tag) {
  function TagQueue_init (line 361) | static int TagQueue_init(PlayList* playlist, TagQueue* q) {
  function TagQueue_start (line 377) | static void TagQueue_start(TagQueue* q) {
  function TagQueue_put_private (line 383) | static int TagQueue_put_private(TagQueue* q, FlvTag* tag) {
  function TagQueue_put (line 410) | static int TagQueue_put(TagQueue* q, FlvTag* tag) {
  function TagQueue_peek_first_video_ts (line 424) | static int TagQueue_peek_first_video_ts(TagQueue* q) {
  function TagQueue_get (line 443) | static int TagQueue_get(TagQueue* q, FlvTag* tag, int block) {
  function TagQueue_flush (line 479) | static void TagQueue_flush(TagQueue* q) {
  function TagQueue_destroy (line 495) | static void TagQueue_destroy(TagQueue* q) {
  function TagQueue_abort (line 501) | static void TagQueue_abort(TagQueue* q) {
  function TagQueue_get_duration_ms (line 508) | static int32_t TagQueue_get_duration_ms(TagQueue* q) {
  function TagQueue_get_total_bytes (line 522) | static int64_t TagQueue_get_total_bytes(TagQueue* q) {
  function get_video_bitrate (line 534) | int32_t get_video_bitrate(MultiRateAdaption* thiz) {
  function get_buffer_current (line 538) | int32_t get_buffer_current(MultiRateAdaption* thiz) {
  function get_bw_fragment (line 542) | int32_t get_bw_fragment(MultiRateAdaption* thiz) {
  function LasStatistic_reset (line 546) | void LasStatistic_reset(LasStatistic* stat) {
  function LasStatistic_init (line 552) | void LasStatistic_init(LasStatistic* stat, PlayList* playlist) {
  function LasStatistic_on_rep_http_url (line 562) | void LasStatistic_on_rep_http_url(LasStatistic* stat, char* request_url) {
  function LasStatistic_on_rep_http_start (line 568) | void LasStatistic_on_rep_http_start(LasStatistic* stat, int64_t start_ti...
  function LasStatistic_on_rep_http_open (line 574) | void LasStatistic_on_rep_http_open(LasStatistic* stat, int64_t open_time) {
  function LasStatistic_on_rep_flv_header (line 580) | void LasStatistic_on_rep_flv_header(LasStatistic* stat, int64_t header_t...
  function LasStatistic_on_rep_http_first_data (line 586) | void LasStatistic_on_rep_http_first_data(LasStatistic* stat, int64_t fir...
  function LasStatistic_on_rep_start_timestamp (line 592) | void LasStatistic_on_rep_start_timestamp(PlayList* playlist, int64_t sta...
  function LasStatistic_on_rep_read_error (line 601) | void LasStatistic_on_rep_read_error(LasStatistic* stat, int error) {
  function LasStatistic_on_read_packet (line 607) | void LasStatistic_on_read_packet(LasStatistic* stat, PlayList* playlist) {
  function LasStatistic_on_buffer_time (line 613) | void LasStatistic_on_buffer_time(LasStatistic* stat, PlayList* playlist) {
  function LasStatistic_on_adaption_adapted (line 623) | void LasStatistic_on_adaption_adapted(PlayList* playlist, MultiRateAdapt...
  function LasStatistic_on_bytes_downloaded (line 630) | void LasStatistic_on_bytes_downloaded(LasStatistic* stat, int64_t bytes) {
  function LasStatistic_on_bandwidth_update (line 636) | void LasStatistic_on_bandwidth_update(PlayList* playlist, MultiRateAdapt...
  function LasStatistic_on_rep_switch_count (line 644) | void LasStatistic_on_rep_switch_count(LasStatistic* stat, PlayList* play...
  function local_index_2_rep_index (line 653) | int32_t local_index_2_rep_index(MultiRateAdaption* thiz, int32_t local_i...
  function rep_index_2_local_index (line 664) | int32_t rep_index_2_local_index(MultiRateAdaption* thiz, int32_t rep_ind...
  function get_local_index_from_bitrate (line 676) | int get_local_index_from_bitrate(MultiRateAdaption* thiz, int64_t bitrat...
  function compare (line 685) | int compare(const void* a, const void* b) {
  function RateAdaptConfig_default_init (line 689) | void RateAdaptConfig_default_init(AdaptiveConfig* config, PlayList* play...
  function MultiRateAdaption_init (line 705) | void MultiRateAdaption_init(MultiRateAdaption* thiz, AdaptiveConfig config,
  function update_stable_buffer (line 757) | bool update_stable_buffer(MultiRateAdaption* thiz, double buffered) {
  function check_buffer (line 780) | void check_buffer(MultiRateAdaption* thiz, PlayList* playlist) {
  function quantization (line 793) | int32_t quantization(MultiRateAdaption* thiz, double speed) {
  function get_past_buffer (line 804) | double get_past_buffer(MultiRateAdaption* thiz) {
  function get_smoothed_speed (line 815) | double get_smoothed_speed(MultiRateAdaption* thiz, double speed) {
  function get_predicted_buffer (line 822) | double get_predicted_buffer(MultiRateAdaption* thiz, double buffered) {
  function get_buffer_speed (line 827) | double get_buffer_speed(MultiRateAdaption* thiz, double buffered) {
  function is_speed_too_small (line 833) | bool is_speed_too_small(MultiRateAdaption* thiz, double speed) {
  function is_speed_enough (line 837) | bool is_speed_enough(MultiRateAdaption* thiz, double speed) {
  function next_local_rate_index (line 841) | int32_t next_local_rate_index(MultiRateAdaption* thiz, double speed, dou...
  function next_representation_id (line 871) | int32_t next_representation_id(MultiRateAdaption* thiz, int switch_mode,...
  function update_options (line 901) | static void update_options(char** dest, const char* name, void* src) {
  function open_url (line 908) | static int open_url(LasContext* c, URLContext** uc, const char* url,
  type ReadFromURLMode (line 951) | enum ReadFromURLMode {
  function read_from_url (line 961) | static int read_from_url(URLContext* url_ctx,
  function url_block_read (line 980) | static int url_block_read(URLContext* url_ctx, uint8_t* buf, int want_le...
  function GopReader_init (line 1010) | void GopReader_init(GopReader* reader, Representation* rep, AVFormatCont...
  function GopReader_open_input (line 1032) | int GopReader_open_input(GopReader* reader, LasContext* c, PlayList* pla...
  function GopReader_close (line 1050) | void GopReader_close(GopReader* reader, PlayList* playlist) {
  function GopReader_download_gop (line 1060) | int64_t GopReader_download_gop(GopReader* reader, MultiRateAdaption* ada...
  function PlayList_prepare_reading_tag (line 1234) | static int PlayList_prepare_reading_tag(PlayList* playlist) {
  function PlayList_read_from_reading_tag (line 1257) | static int PlayList_read_from_reading_tag(PlayList* playlist, uint8_t* b...
  function PlayList_read_data (line 1264) | static int PlayList_read_data(void* opaque, uint8_t* buf, int buf_size) {
  function PlayList_reset_state (line 1285) | static void PlayList_reset_state(PlayList* p) {
  function PlayList_algo_statistic_thread (line 1292) | static int PlayList_algo_statistic_thread(void* data) {
  function PlayList_is_valid_index_l (line 1306) | int PlayList_is_valid_index_l(PlayList* playlist, int index) {
  function PlayList_read_thread (line 1312) | static int PlayList_read_thread(void* data) {
  function PlayList_open_rep (line 1357) | int PlayList_open_rep(PlayList* playlist, FlvTag* tag, AVFormatContext* ...
  function PlayList_open_read_thread (line 1455) | int PlayList_open_read_thread(PlayList* playlist) {
  function PlayList_abort (line 1518) | static void PlayList_abort(PlayList* playlist) {
  function PlayList_close_rep (line 1526) | void PlayList_close_rep(PlayList* playlist) {
  function PlayList_close_read_thread (line 1534) | void PlayList_close_read_thread(PlayList* playlist) {
  function free_multi_rate_flv_context (line 1556) | void free_multi_rate_flv_context(PlayList* c) {
  function dump_multi_rate_flv_context (line 1567) | static void dump_multi_rate_flv_context(PlayList* c) {
  function parse_representation_set (line 1581) | static int parse_representation_set(Representation* c, cJSON* root) {
  function parse_adaptation_set (line 1615) | static int parse_adaptation_set(AdaptationSet* c, cJSON* root) {
  function parse_root (line 1656) | int parse_root(char* file_name, PlayList* c) {
  function parse_adapt_config (line 1689) | int parse_adapt_config(char* config_string, AdaptiveConfig* config, Play...
  function parse_int_from (line 1736) | static int parse_int_from(cJSON* json, const char* key) {
  function las_close (line 1745) | static int las_close(AVFormatContext* s) {
  function las_probe (line 1760) | static int las_probe(AVProbeData* p) {
  function las_read_header (line 1767) | static int las_read_header(AVFormatContext* s) {
  function reset_packet (line 1824) | static void reset_packet(AVPacket* pkt) {
  function h264_check_sps_pps (line 1831) | static bool h264_check_sps_pps(const AVPacket* pkt) {
  function read_sps_pps_by_avcc (line 1850) | static bool read_sps_pps_by_avcc(uint8_t* extradata, uint32_t extrasize,
  function insert_sps_pps_into_avpacket (line 1882) | static void insert_sps_pps_into_avpacket(AVPacket* packet, uint8_t* new_...
  function las_read_packet (line 1930) | static int las_read_packet(AVFormatContext* s, AVPacket* pkt) {
  function las_read_seek (line 1985) | static int las_read_seek(AVFormatContext* s, int stream_index,

FILE: ijkmedia/ijkplayer/ijkavformat/ijklas.h
  type FlvInfo (line 12) | typedef struct FlvInfo {
  type LasStatistic (line 17) | typedef struct LasStatistic {

FILE: ijkmedia/ijkplayer/ijkavformat/ijklivehook.c
  type Context (line 32) | typedef struct {
  function ijkurlhook_call_inject (line 46) | static int ijkurlhook_call_inject(AVFormatContext *h)
  function ijklivehook_probe (line 75) | static int ijklivehook_probe(AVProbeData *probe)
  function ijklivehook_read_close (line 83) | static int ijklivehook_read_close(AVFormatContext *avf)
  function copy_stream_props (line 94) | static int copy_stream_props(AVStream *st, AVStream *source_st)
  function open_inner (line 124) | static int open_inner(AVFormatContext *avf)
  function ijklivehook_read_header (line 188) | static int ijklivehook_read_header(AVFormatContext *avf, AVDictionary **...
  function ijklivehook_read_packet (line 240) | static int ijklivehook_read_packet(AVFormatContext *avf, AVPacket *pkt)

FILE: ijkmedia/ijkplayer/ijkavformat/ijklongurl.c
  type Context (line 29) | typedef struct Context {
  function ijklongurl_open (line 37) | static int ijklongurl_open(URLContext *h, const char *arg, int flags, AV...
  function ijklongurl_close (line 54) | static int ijklongurl_close(URLContext *h)
  function ijklongurl_read (line 61) | static int ijklongurl_read(URLContext *h, unsigned char *buf, int size)
  function ijklongurl_seek (line 68) | static int64_t ijklongurl_seek(URLContext *h, int64_t pos, int whence)

FILE: ijkmedia/ijkplayer/ijkavformat/ijkmediadatasource.c
  type Context (line 37) | typedef struct Context {
  function ijkmds_open (line 50) | static int ijkmds_open(URLContext *h, const char *arg, int flags, AVDict...
  function ijkmds_close (line 84) | static int ijkmds_close(URLContext *h)
  function jobject (line 105) | static jobject jbuffer_grow(JNIEnv *env, URLContext *h, int new_capacity) {
  function ijkmds_read (line 126) | static int ijkmds_read(URLContext *h, unsigned char *buf, int size)
  function ijkmds_seek (line 161) | static int64_t ijkmds_seek(URLContext *h, int64_t pos, int whence)

FILE: ijkmedia/ijkplayer/ijkavformat/ijksegment.c
  type Context (line 31) | typedef struct Context {
  function ijksegment_open (line 40) | static int ijksegment_open(URLContext *h, const char *arg, int flags, AV...
  function ijksegment_close (line 87) | static int ijksegment_close(URLContext *h)
  function ijksegment_read (line 94) | static int ijksegment_read(URLContext *h, unsigned char *buf, int size)
  function ijksegment_seek (line 101) | static int64_t ijksegment_seek(URLContext *h, int64_t pos, int whence)

FILE: ijkmedia/ijkplayer/ijkavformat/ijkurlhook.c
  type Context (line 31) | typedef struct Context {
  function ijkurlhook_call_inject (line 53) | static int ijkurlhook_call_inject(URLContext *h)
  function ijkurlhook_reconnect (line 91) | static int ijkurlhook_reconnect(URLContext *h, AVDictionary *extra)
  function ijkurlhook_init (line 132) | static int ijkurlhook_init(URLContext *h, const char *arg, int flags, AV...
  function ijktcphook_open (line 160) | static int ijktcphook_open(URLContext *h, const char *arg, int flags, AV...
  function ijkurlhook_close (line 180) | static int ijkurlhook_close(URLContext *h)
  function ijkurlhook_read (line 188) | static int ijkurlhook_read(URLContext *h, unsigned char *buf, int size)
  function ijkurlhook_write (line 211) | static int ijkurlhook_write(URLContext *h, const unsigned char *buf, int...
  function ijkurlhook_seek (line 218) | static int64_t ijkurlhook_seek(URLContext *h, int64_t pos, int whence)
  function ijkhttphook_reconnect_at (line 237) | static int ijkhttphook_reconnect_at(URLContext *h, int64_t offset)
  function ijkhttphook_open (line 249) | static int ijkhttphook_open(URLContext *h, const char *arg, int flags, A...
  function ijkhttphook_read (line 297) | static int ijkhttphook_read(URLContext *h, unsigned char *buf, int size)
  function ijkhttphook_reseek_at (line 335) | static int64_t ijkhttphook_reseek_at(URLContext *h, int64_t pos, int whe...
  function ijkhttphook_seek (line 362) | static int64_t ijkhttphook_seek(URLContext *h, int64_t pos, int whence)

FILE: ijkmedia/ijkplayer/ijkavutil/ijkdict.c
  type IjkAVDictionary (line 30) | struct IjkAVDictionary {
  function ijk_av_dict_count (line 35) | int ijk_av_dict_count(const IjkAVDictionary *m)
  function IjkAVDictionaryEntry (line 40) | IjkAVDictionaryEntry *ijk_av_dict_get(const IjkAVDictionary *m, const ch...
  function ijk_av_dict_set (line 70) | int ijk_av_dict_set(IjkAVDictionary **pm, const char *key, const char *v...
  function ijk_av_dict_set_int (line 147) | int ijk_av_dict_set_int(IjkAVDictionary **pm, const char *key, int64_t v...
  function ijk_av_dict_set_intptr (line 156) | int ijk_av_dict_set_intptr(IjkAVDictionary **pm, const char *key, uintpt...
  function ijk_av_dict_strtoptr (line 163) | uintptr_t ijk_av_dict_strtoptr(char * value) {
  function ijk_av_dict_get_intptr (line 176) | uintptr_t ijk_av_dict_get_intptr(const IjkAVDictionary *m, const char* k...
  function ijk_av_dict_free (line 185) | void ijk_av_dict_free(IjkAVDictionary **pm)
  function ijk_av_dict_copy (line 199) | int ijk_av_dict_copy(IjkAVDictionary **dst, const IjkAVDictionary *src, ...

FILE: ijkmedia/ijkplayer/ijkavutil/ijkdict.h
  type IjkAVDictionaryEntry (line 47) | typedef struct IjkAVDictionaryEntry {
  type IjkAVDictionary (line 52) | typedef struct IjkAVDictionary IjkAVDictionary;

FILE: ijkmedia/ijkplayer/ijkavutil/ijkfifo.c
  function IjkFifoBuffer (line 29) | static IjkFifoBuffer *fifo_alloc_common(void *buffer, size_t size)
  function IjkFifoBuffer (line 45) | IjkFifoBuffer *ijk_av_fifo_alloc(unsigned int size)
  function IjkFifoBuffer (line 51) | IjkFifoBuffer *ijk_av_fifo_alloc_array(size_t nmemb, size_t size)
  function ijk_av_fifo_free (line 57) | void ijk_av_fifo_free(IjkFifoBuffer *f)
  function ijk_av_fifo_freep (line 65) | void ijk_av_fifo_freep(IjkFifoBuffer **f)
  function ijk_av_fifo_reset (line 73) | void ijk_av_fifo_reset(IjkFifoBuffer *f)
  function ijk_av_fifo_size (line 79) | int ijk_av_fifo_size(const IjkFifoBuffer *f)
  function ijk_av_fifo_space (line 84) | int ijk_av_fifo_space(const IjkFifoBuffer *f)
  function ijk_av_fifo_realloc2 (line 89) | int ijk_av_fifo_realloc2(IjkFifoBuffer *f, unsigned int new_size)
  function ijk_av_fifo_grow (line 109) | int ijk_av_fifo_grow(IjkFifoBuffer *f, unsigned int size)
  function ijk_av_fifo_generic_write (line 124) | int ijk_av_fifo_generic_write(IjkFifoBuffer *f, void *src, int size,
  function ijk_av_fifo_generic_peek_at (line 153) | int ijk_av_fifo_generic_peek_at(IjkFifoBuffer *f, void *dest, int offset...
  function ijk_av_fifo_generic_peek (line 191) | int ijk_av_fifo_generic_peek(IjkFifoBuffer *f, void *dest, int buf_size,
  function ijk_av_fifo_generic_read (line 215) | int ijk_av_fifo_generic_read(IjkFifoBuffer *f, void *dest, int buf_size,
  function ijk_av_fifo_drain (line 235) | void ijk_av_fifo_drain(IjkFifoBuffer *f, int size)

FILE: ijkmedia/ijkplayer/ijkavutil/ijkfifo.h
  type IjkFifoBuffer (line 30) | typedef struct IjkFifoBuffer {

FILE: ijkmedia/ijkplayer/ijkavutil/ijkstl.cpp
  function ijk_map_put (line 43) | void ijk_map_put(void *data, int64_t key, void *value) {
  function ijk_map_remove (line 62) | int ijk_map_remove(void *data, int64_t key) {
  function ijk_map_size (line 70) | int ijk_map_size(void *data) {
  function ijk_map_max_size (line 78) | int ijk_map_max_size(void *data) {
  function ijk_map_traversal_handle (line 104) | void ijk_map_traversal_handle(void *data, void *parm, int (*enu)(void *p...
  function ijk_map_get_min_key (line 116) | int64_t ijk_map_get_min_key(void *data) {
  function ijk_map_clear (line 132) | void ijk_map_clear(void *data) {
  function ijk_map_destroy (line 140) | void ijk_map_destroy(void *data) {

FILE: ijkmedia/ijkplayer/ijkavutil/ijkthreadpool.c
  function ijk_threadpool_free (line 70) | int ijk_threadpool_free(IjkThreadPoolContext *ctx)
  function IjkThreadPoolContext (line 92) | IjkThreadPoolContext *ijk_threadpool_create(int thread_count, int queue_...
  function ijk_threadpool_add (line 140) | int ijk_threadpool_add(IjkThreadPoolContext *ctx, Runable function,
  function ijk_threadpool_freep (line 197) | static int ijk_threadpool_freep(IjkThreadPoolContext **ctx)
  function ijk_threadpool_destroy (line 209) | int ijk_threadpool_destroy(IjkThreadPoolContext *ctx, int flags)

FILE: ijkmedia/ijkplayer/ijkavutil/ijkthreadpool.h
  type IjkThreadPoolErrorType (line 27) | typedef enum {
  type IjkThreadPoolShutdownType (line 35) | typedef enum {
  type IjkThreadPoolTask (line 50) | typedef struct IjkThreadPoolTask {
  type IjkThreadPoolContext (line 71) | typedef struct IjkThreadPoolContext {

FILE: ijkmedia/ijkplayer/ijkavutil/ijktree.c
  type IjkAVTreeNode (line 27) | typedef struct IjkAVTreeNode {
  type IjkAVTreeNode (line 35) | struct IjkAVTreeNode
  type IjkAVTreeNode (line 37) | struct IjkAVTreeNode
  function ijk_av_tree_destroy (line 147) | void ijk_av_tree_destroy(IjkAVTreeNode *t)
  function ijk_av_tree_enumerate (line 156) | void ijk_av_tree_enumerate(IjkAVTreeNode *t, void *opaque,

FILE: ijkmedia/ijkplayer/ijkavutil/ijktree.h
  type IjkAVTreeNode (line 37) | struct IjkAVTreeNode
  type IjkAVTreeNode (line 43) | struct IjkAVTreeNode
  type IjkAVTreeNode (line 59) | struct IjkAVTreeNode
  type IjkAVTreeNode (line 106) |
Condensed preview — 640 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,055K chars).
[
  {
    "path": ".gitignore",
    "chars": 492,
    "preview": "# -----\nbuild/\nffmpeg-temp/\nandroid/ffmpeg-*\nandroid/openssl-*\nios/ffmpeg-*\nios/openssl-*\nextra\n.DS_Store\nijkmedia/ijkyu"
  },
  {
    "path": ".travis.yml",
    "chars": 238,
    "preview": "language: android\nandroid:\n  components:\n    - platform-tools\n    - tools\n    - build-tools-23.0.3\n    - android-23\n    "
  },
  {
    "path": "COPYING.GPLv2",
    "chars": 18092,
    "preview": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Fr"
  },
  {
    "path": "COPYING.GPLv3",
    "chars": 35147,
    "preview": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
  },
  {
    "path": "COPYING.LGPLv2.1",
    "chars": 26526,
    "preview": "                  GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 2.1, February 1999\n\n Copyright (C) 19"
  },
  {
    "path": "COPYING.LGPLv3",
    "chars": 7651,
    "preview": "                   GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007"
  },
  {
    "path": "MODULE_LICENSE_APACHE2",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "NEWS.md",
    "chars": 8825,
    "preview": "tag next\n--------------------------------\n- ffmpeg: upgrade to 4.0\n\ntag k0.8.8\n--------------------------------\n- ffmpeg"
  },
  {
    "path": "NOTICE",
    "chars": 10695,
    "preview": "\n   Copyright (c) 2005-2008, The Android Open Source Project\n\n   Licensed under the Apache License, Version 2.0 (the \"Li"
  },
  {
    "path": "README.md",
    "chars": 8510,
    "preview": "# ijkplayer\n\n Platform | Build Status\n -------- | ------------\n Android | [![Build Status](https://travis-ci.org/Bilibil"
  },
  {
    "path": "android/.gitignore",
    "chars": 1410,
    "preview": "#--------------------\n# Android.gitignore\n# https://github.com/github/gitignore/blob/master/Android.gitignore\n#---------"
  },
  {
    "path": "android/build-on-travis.sh",
    "chars": 2782,
    "preview": "#! /usr/bin/env bash\n#\n# Copyright (C) 2013-2014 Bilibili\n# Copyright (C) 2013-2014 Zhang Rui <bbcallen@gmail.com>\n#\n# L"
  },
  {
    "path": "android/compile-ijk.sh",
    "chars": 3217,
    "preview": "#! /usr/bin/env bash\n#\n# Copyright (C) 2013-2014 Bilibili\n# Copyright (C) 2013-2014 Zhang Rui <bbcallen@gmail.com>\n#\n# L"
  },
  {
    "path": "android/contrib/.gitignore",
    "chars": 35,
    "preview": "build\nffmpeg-*\nlibsoxr-*\nopenssl-*\n"
  },
  {
    "path": "android/contrib/compile-ffmpeg.sh",
    "chars": 2733,
    "preview": "#! /usr/bin/env bash\n#\n# Copyright (C) 2013-2014 Zhang Rui <bbcallen@gmail.com>\n#\n# Licensed under the Apache License, V"
  },
  {
    "path": "android/contrib/compile-libsoxr.sh",
    "chars": 2622,
    "preview": "#! /usr/bin/env bash\n#\n# Copyright (C) 2013-2014 Zhang Rui <bbcallen@gmail.com>\n#\n# Licensed under the Apache License, V"
  },
  {
    "path": "android/contrib/compile-openssl.sh",
    "chars": 2622,
    "preview": "#! /usr/bin/env bash\n#\n# Copyright (C) 2013-2014 Zhang Rui <bbcallen@gmail.com>\n#\n# Licensed under the Apache License, V"
  },
  {
    "path": "android/contrib/setup-as-commiter.sh",
    "chars": 1230,
    "preview": "#! /usr/bin/env bash\n#\n# Copyright (C) 2013-2014 Zhang Rui <bbcallen@gmail.com>\n#\n# Licensed under the Apache License, V"
  },
  {
    "path": "android/contrib/sync-mirrors.sh",
    "chars": 949,
    "preview": "#! /usr/bin/env bash\n#\n# Copyright (C) 2013-2014 Zhang Rui <bbcallen@gmail.com>\n#\n# Licensed under the Apache License, V"
  },
  {
    "path": "android/contrib/tools/do-compile-ffmpeg.sh",
    "chars": 10776,
    "preview": "#! /usr/bin/env bash\n#\n# Copyright (C) 2013-2014 Zhang Rui <bbcallen@gmail.com>\n#\n# Licensed under the Apache License, V"
  },
  {
    "path": "android/contrib/tools/do-compile-libsoxr.sh",
    "chars": 3216,
    "preview": "#! /usr/bin/env bash\n#\n# Copyright (C) 2014 Miguel Botón <waninkoko@gmail.com>\n# Copyright (C) 2014 Zhang Rui <bbcallen@"
  },
  {
    "path": "android/contrib/tools/do-compile-openssl.sh",
    "chars": 4931,
    "preview": "#! /usr/bin/env bash\n#\n# Copyright (C) 2014 Miguel Botón <waninkoko@gmail.com>\n# Copyright (C) 2014 Zhang Rui <bbcallen@"
  },
  {
    "path": "android/contrib/tools/do-detect-env.sh",
    "chars": 3029,
    "preview": "#! /usr/bin/env bash\n#\n# Copyright (C) 2013-2014 Zhang Rui <bbcallen@gmail.com>\n#\n# Licensed under the Apache License, V"
  },
  {
    "path": "android/ijk-addr2line.sh",
    "chars": 92,
    "preview": "#! /bin/sh\n\naddr2line -e ijkplayer/ijkplayer-armv7a/src/main/obj/local/armeabi-v7a/lib$1.so\n"
  },
  {
    "path": "android/ijk-ndk-stack.sh",
    "chars": 97,
    "preview": "#!/bin/sh\n\nadb logcat | ndk-stack -sym ijkplayer/ijkplayer-armv7a/src/main/obj/local/armeabi-v7a\n"
  },
  {
    "path": "android/ijkplayer/.gitignore",
    "chars": 108,
    "preview": ".gradle\n/local.properties\n/.idea/workspace.xml\n/.idea/libraries\n.DS_Store\n/build\n/captures\nandroid-ndk-prof\n"
  },
  {
    "path": "android/ijkplayer/build.gradle",
    "chars": 772,
    "preview": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    r"
  },
  {
    "path": "android/ijkplayer/gradle/wrapper/gradle-wrapper.properties",
    "chars": 233,
    "preview": "#Wed Aug 24 16:26:25 CST 2016\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_"
  },
  {
    "path": "android/ijkplayer/gradle.properties",
    "chars": 1481,
    "preview": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will o"
  },
  {
    "path": "android/ijkplayer/gradlew",
    "chars": 5080,
    "preview": "#!/usr/bin/env bash\n\n##############################################################################\n##\n##  Gradle start "
  },
  {
    "path": "android/ijkplayer/gradlew.bat",
    "chars": 2404,
    "preview": "@if \"%DEBUG%\" == \"\" @echo off\r\n@rem ##########################################################################\r\n@rem\r\n@r"
  },
  {
    "path": "android/ijkplayer/ijkplayer-arm64/.gitignore",
    "chars": 7,
    "preview": "/build\n"
  },
  {
    "path": "android/ijkplayer/ijkplayer-arm64/build.gradle",
    "chars": 897,
    "preview": "apply plugin: 'com.android.library'\n\nandroid {\n    // http://tools.android.com/tech-docs/new-build-system/tips\n    //noi"
  },
  {
    "path": "android/ijkplayer/ijkplayer-arm64/gradle.properties",
    "chars": 74,
    "preview": "POM_NAME=ijkplayer-arm64\nPOM_ARTIFACT_ID=ijkplayer-arm64\nPOM_PACKAGING=aar"
  },
  {
    "path": "android/ijkplayer/ijkplayer-arm64/proguard-rules.pro",
    "chars": 646,
    "preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /o"
  },
  {
    "path": "android/ijkplayer/ijkplayer-arm64/src/androidTest/java/tv/danmaku/ijk/media/player_arm64/ApplicationTest.java",
    "chars": 364,
    "preview": "package tv.danmaku.ijk.media.player_arm64;\n\nimport android.app.Application;\nimport android.test.ApplicationTestCase;\n\n/*"
  },
  {
    "path": "android/ijkplayer/ijkplayer-arm64/src/main/.classpath",
    "chars": 508,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<classpath>\n\t<classpathentry kind=\"con\" path=\"com.android.ide.eclipse.adt.ANDROID"
  },
  {
    "path": "android/ijkplayer/ijkplayer-arm64/src/main/.project",
    "chars": 818,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<projectDescription>\n\t<name>ijkplayer-arm64</name>\n\t<comment></comment>\n\t<project"
  },
  {
    "path": "android/ijkplayer/ijkplayer-arm64/src/main/.settings/org.eclipse.jdt.core.prefs",
    "chars": 173,
    "preview": "eclipse.preferences.version=1\norg.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6\norg.eclipse.jdt.core.compiler.com"
  },
  {
    "path": "android/ijkplayer/ijkplayer-arm64/src/main/AndroidManifest.xml",
    "chars": 184,
    "preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"tv.danmaku.ijk.media.player_arm64\">\n\n "
  },
  {
    "path": "android/ijkplayer/ijkplayer-arm64/src/main/java/tv/danmaku/ijk/media/player_arm64/Pragma.java",
    "chars": 720,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-arm64/src/main/jni/Application.mk",
    "chars": 1144,
    "preview": "# Copyright (c) 2013-2014 Bilibili\n# copyright (c) 2013-2014 Zhang Rui <bbcallen@gmail.com>\n#\n# This file is part of ijk"
  },
  {
    "path": "android/ijkplayer/ijkplayer-arm64/src/main/project.properties",
    "chars": 584,
    "preview": "# This file is automatically generated by Android Tools.\n# Do not modify this file -- YOUR CHANGES WILL BE ERASED!\n#\n# T"
  },
  {
    "path": "android/ijkplayer/ijkplayer-arm64/src/main/res/values/strings.xml",
    "chars": 188,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <string name=\"ijk"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv5/.gitignore",
    "chars": 7,
    "preview": "/build\n"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv5/build.gradle",
    "chars": 896,
    "preview": "apply plugin: 'com.android.library'\n\nandroid {\n    // http://tools.android.com/tech-docs/new-build-system/tips\n    //noi"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv5/gradle.properties",
    "chars": 74,
    "preview": "POM_NAME=ijkplayer-armv5\nPOM_ARTIFACT_ID=ijkplayer-armv5\nPOM_PACKAGING=aar"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv5/proguard-rules.pro",
    "chars": 647,
    "preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /o"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv5/src/androidTest/java/tv/danmaku/ijk/media/player_armv5/ApplicationTest.java",
    "chars": 364,
    "preview": "package tv.danmaku.ijk.media.player_armv5;\n\nimport android.app.Application;\nimport android.test.ApplicationTestCase;\n\n/*"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv5/src/main/.classpath",
    "chars": 508,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<classpath>\n\t<classpathentry kind=\"con\" path=\"com.android.ide.eclipse.adt.ANDROID"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv5/src/main/.project",
    "chars": 818,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<projectDescription>\n\t<name>ijkplayer-armv5</name>\n\t<comment></comment>\n\t<project"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv5/src/main/.settings/org.eclipse.jdt.core.prefs",
    "chars": 173,
    "preview": "eclipse.preferences.version=1\norg.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6\norg.eclipse.jdt.core.compiler.com"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv5/src/main/AndroidManifest.xml",
    "chars": 183,
    "preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"tv.danmaku.ijk.media.player_armv5\" >\n\n"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv5/src/main/java/tv/danmaku/ijk/media/player_armv5/Pragma.java",
    "chars": 720,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv5/src/main/jni/Application.mk",
    "chars": 1141,
    "preview": "# Copyright (c) 2013-2014 Bilibili\n# copyright (c) 2013-2014 Zhang Rui <bbcallen@gmail.com>\n#\n# This file is part of ijk"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv5/src/main/project.properties",
    "chars": 584,
    "preview": "# This file is automatically generated by Android Tools.\n# Do not modify this file -- YOUR CHANGES WILL BE ERASED!\n#\n# T"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv5/src/main/res/values/strings.xml",
    "chars": 188,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <string name=\"ijk"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv7a/.gitignore",
    "chars": 7,
    "preview": "/build\n"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv7a/build.gradle",
    "chars": 896,
    "preview": "apply plugin: 'com.android.library'\n\nandroid {\n    // http://tools.android.com/tech-docs/new-build-system/tips\n    //noi"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv7a/gradle.properties",
    "chars": 76,
    "preview": "POM_NAME=ijkplayer-armv7a\nPOM_ARTIFACT_ID=ijkplayer-armv7a\nPOM_PACKAGING=aar"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv7a/proguard-rules.pro",
    "chars": 647,
    "preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /o"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv7a/src/androidTest/java/tv/danmaku/ijk/media/player_armv7a/ApplicationTest.java",
    "chars": 365,
    "preview": "package tv.danmaku.ijk.media.player_armv7a;\n\nimport android.app.Application;\nimport android.test.ApplicationTestCase;\n\n/"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv7a/src/main/.classpath",
    "chars": 508,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<classpath>\n\t<classpathentry kind=\"con\" path=\"com.android.ide.eclipse.adt.ANDROID"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv7a/src/main/.project",
    "chars": 819,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<projectDescription>\n\t<name>ijkplayer-armv7a</name>\n\t<comment></comment>\n\t<projec"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv7a/src/main/.settings/org.eclipse.jdt.core.prefs",
    "chars": 173,
    "preview": "eclipse.preferences.version=1\norg.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6\norg.eclipse.jdt.core.compiler.com"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv7a/src/main/AndroidManifest.xml",
    "chars": 184,
    "preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"tv.danmaku.ijk.media.player_armv7a\" >\n"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv7a/src/main/java/tv/danmaku/ijk/media/player_armv7a/Pragma.java",
    "chars": 721,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv7a/src/main/jni/Android.mk",
    "chars": 2157,
    "preview": "# Copyright (c) 2013 Bilibili\n# copyright (c) 2013 Zhang Rui <bbcallen@gmail.com>\n#\n# This file is part of ijkPlayer.\n#\n"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv7a/src/main/jni/Application.mk",
    "chars": 1135,
    "preview": "# Copyright (c) 2013 Bilibili\n# copyright (c) 2013 Zhang Rui <bbcallen@gmail.com>\n#\n# This file is part of ijkPlayer.\n#\n"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv7a/src/main/jni/ffmpeg/Android.mk",
    "chars": 176,
    "preview": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := ijkffmpeg\nLOCAL_SRC_FILES := $(MY_APP_FFMPEG_OUTPUT_"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv7a/src/main/project.properties",
    "chars": 584,
    "preview": "# This file is automatically generated by Android Tools.\n# Do not modify this file -- YOUR CHANGES WILL BE ERASED!\n#\n# T"
  },
  {
    "path": "android/ijkplayer/ijkplayer-armv7a/src/main/res/values/strings.xml",
    "chars": 188,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <string name=\"ijk"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/.gitignore",
    "chars": 7,
    "preview": "/build\n"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/build.gradle",
    "chars": 2582,
    "preview": "apply plugin: 'com.android.application'\n\nandroid {\n    // http://tools.android.com/tech-docs/new-build-system/tips\n    /"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/proguard-rules.pro",
    "chars": 647,
    "preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /o"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/androidTest/java/tv/danmaku/ijk/media/example/ApplicationTest.java",
    "chars": 359,
    "preview": "package tv.danmaku.ijk.media.example;\n\nimport android.app.Application;\nimport android.test.ApplicationTestCase;\n\n/**\n * "
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/.classpath",
    "chars": 1101,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<classpath>\n\t<classpathentry kind=\"src\" path=\"java\"/>\n\t<classpathentry kind=\"con\""
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/.project",
    "chars": 819,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<projectDescription>\n\t<name>ijkplayer-sample</name>\n\t<comment></comment>\n\t<projec"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/.settings/org.eclipse.jdt.core.prefs",
    "chars": 173,
    "preview": "eclipse.preferences.version=1\norg.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6\norg.eclipse.jdt.core.compiler.com"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/AndroidManifest.xml",
    "chars": 3646,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package="
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/activities/FileExplorerActivity.java",
    "chars": 3079,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/activities/RecentMediaActivity.java",
    "chars": 2117,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/activities/SampleMediaActivity.java",
    "chars": 2118,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/activities/SettingsActivity.java",
    "chars": 1907,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/activities/VideoActivity.java",
    "chars": 9187,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/application/AppActivity.java",
    "chars": 3759,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/application/Settings.java",
    "chars": 4243,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/content/PathCursor.java",
    "chars": 4937,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/content/PathCursorLoader.java",
    "chars": 1564,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/content/RecentMediaStorage.java",
    "chars": 4708,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/eventbus/FileExplorerEvents.java",
    "chars": 1197,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/fragments/FileListFragment.java",
    "chars": 7256,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/fragments/RecentMediaListFragment.java",
    "chars": 5115,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/fragments/SampleMediaListFragment.java",
    "chars": 9939,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/fragments/SettingsFragment.java",
    "chars": 1161,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/fragments/TracksFragment.java",
    "chars": 6599,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/services/MediaPlayerService.java",
    "chars": 1881,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/widget/media/AndroidMediaController.java",
    "chars": 2434,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/widget/media/FileMediaDataSource.java",
    "chars": 1716,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/widget/media/IMediaController.java",
    "chars": 1121,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/widget/media/IRenderView.java",
    "chars": 2489,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/widget/media/IjkVideoView.java",
    "chars": 50685,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/widget/media/InfoHudViewHolder.java",
    "chars": 6608,
    "preview": "package tv.danmaku.ijk.media.example.widget.media;\n\nimport android.content.Context;\nimport android.os.Handler;\nimport an"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/widget/media/MeasureHelper.java",
    "chars": 10647,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/widget/media/MediaPlayerCompat.java",
    "chars": 2897,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/widget/media/SurfaceRenderView.java",
    "chars": 9717,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/widget/media/TableLayoutBinder.java",
    "chars": 4260,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/widget/media/TextureRenderView.java",
    "chars": 13475,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/java/tv/danmaku/ijk/media/example/widget/preference/IjkListPreference.java",
    "chars": 3613,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/project.properties",
    "chars": 914,
    "preview": "# This file is automatically generated by Android Tools.\n# Do not modify this file -- YOUR CHANGES WILL BE ERASED!\n#\n# T"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/res/layout/activity_app.xml",
    "chars": 500,
    "preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/too"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/res/layout/activity_player.xml",
    "chars": 2364,
    "preview": "<android.support.v4.widget.DrawerLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"ht"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/res/layout/fragment_file_list.xml",
    "chars": 928,
    "preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/too"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/res/layout/fragment_file_list_item.xml",
    "chars": 736,
    "preview": "<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/t"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/res/layout/fragment_track_list.xml",
    "chars": 613,
    "preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/too"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/res/layout/table_media_info.xml",
    "chars": 399,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    androi"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/res/layout/table_media_info_row1.xml",
    "chars": 636,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<TableRow xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/res/layout/table_media_info_row2.xml",
    "chars": 743,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<TableRow xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/res/layout/table_media_info_section.xml",
    "chars": 451,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<TableRow xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/res/layout/widget_toolbar.xml",
    "chars": 619,
    "preview": "<merge xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/res/menu/menu_app.xml",
    "chars": 631,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"h"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/res/menu/menu_player.xml",
    "chars": 930,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"h"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/res/values/attrs.xml",
    "chars": 231,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <attr name=\"entrySummaries\" format=\"reference\" />\n\n    <declare-s"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/res/values/colors.xml",
    "chars": 737,
    "preview": "<resources>\n\n    <color name=\"black_overlay\">#66000000</color>\n\n    <color name=\"ijk_color_blue_main\">@color/ijk_color_b"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/res/values/dimens.xml",
    "chars": 372,
    "preview": "<resources>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"activity_horizontal"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/res/values/ids.xml",
    "chars": 104,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"render_view\" type=\"id\"/>\n</resources>"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/res/values/strings.xml",
    "chars": 3495,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <string name=\"app_name\">ijkmediademo</string>\n\n    <string name="
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/res/values/strings_pref.xml",
    "chars": 4764,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- -->\n    <string name=\"pref_title_general\">General</string>\n\n"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/res/values/styles.xml",
    "chars": 760,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <style name=\"Widget.App.ActionButton\" parent=\"@style/Widget.AppCo"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/res/values/themes.xml",
    "chars": 221,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <style name=\"AppTheme\" parent=\"Theme.App.Light.NoActionBar\">\n    "
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/res/values-v11/styles.xml",
    "chars": 25,
    "preview": "<resources>\n</resources>\n"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/res/values-v14/styles.xml",
    "chars": 25,
    "preview": "<resources>\n</resources>\n"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/res/values-w820dp/dimens.xml",
    "chars": 358,
    "preview": "<resources>\n    <!-- Example customization of dimensions originally defined in res/values/dimens.xml\n         (such as s"
  },
  {
    "path": "android/ijkplayer/ijkplayer-example/src/main/res/xml/settings.xml",
    "chars": 4823,
    "preview": "<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/a"
  },
  {
    "path": "android/ijkplayer/ijkplayer-exo/.gitignore",
    "chars": 7,
    "preview": "/build\n"
  },
  {
    "path": "android/ijkplayer/ijkplayer-exo/build.gradle",
    "chars": 1171,
    "preview": "apply plugin: 'com.android.library'\n\nandroid {\n    // http://tools.android.com/tech-docs/new-build-system/tips\n    //noi"
  },
  {
    "path": "android/ijkplayer/ijkplayer-exo/gradle.properties",
    "chars": 70,
    "preview": "POM_NAME=ijkplayer-exo\nPOM_ARTIFACT_ID=ijkplayer-exo\nPOM_PACKAGING=aar"
  },
  {
    "path": "android/ijkplayer/ijkplayer-exo/proguard-rules.pro",
    "chars": 647,
    "preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /o"
  },
  {
    "path": "android/ijkplayer/ijkplayer-exo/src/androidTest/java/tv/danmaku/ijk/media/exo/ApplicationTest.java",
    "chars": 355,
    "preview": "package tv.danmaku.ijk.media.exo;\n\nimport android.app.Application;\nimport android.test.ApplicationTestCase;\n\n/**\n * <a h"
  },
  {
    "path": "android/ijkplayer/ijkplayer-exo/src/main/AndroidManifest.xml",
    "chars": 256,
    "preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"tv.danmaku.ijk.media.exo\">\n\n    <appli"
  },
  {
    "path": "android/ijkplayer/ijkplayer-exo/src/main/java/tv/danmaku/ijk/media/exo/IjkExoMediaPlayer.java",
    "chars": 11737,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-exo/src/main/java/tv/danmaku/ijk/media/exo/demo/EventLogger.java",
    "chars": 7040,
    "preview": "/*\n * Copyright (C) 2014 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "android/ijkplayer/ijkplayer-exo/src/main/java/tv/danmaku/ijk/media/exo/demo/SmoothStreamingTestMediaDrmCallback.java",
    "chars": 2589,
    "preview": "/*\n * Copyright (C) 2014 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "android/ijkplayer/ijkplayer-exo/src/main/java/tv/danmaku/ijk/media/exo/demo/player/DashRendererBuilder.java",
    "chars": 11282,
    "preview": "/*\n * Copyright (C) 2014 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "android/ijkplayer/ijkplayer-exo/src/main/java/tv/danmaku/ijk/media/exo/demo/player/DemoPlayer.java",
    "chars": 19794,
    "preview": "/*\n * Copyright (C) 2014 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "android/ijkplayer/ijkplayer-exo/src/main/java/tv/danmaku/ijk/media/exo/demo/player/ExtractorRendererBuilder.java",
    "chars": 3767,
    "preview": "/*\n * Copyright (C) 2014 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "android/ijkplayer/ijkplayer-exo/src/main/java/tv/danmaku/ijk/media/exo/demo/player/HlsRendererBuilder.java",
    "chars": 8550,
    "preview": "/*\n * Copyright (C) 2014 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "android/ijkplayer/ijkplayer-exo/src/main/java/tv/danmaku/ijk/media/exo/demo/player/SmoothStreamingRendererBuilder.java",
    "chars": 8834,
    "preview": "/*\n * Copyright (C) 2014 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "android/ijkplayer/ijkplayer-exo/src/main/res/values/strings.xml",
    "chars": 76,
    "preview": "<resources>\n    <string name=\"app_name\">ijkplayer-exo</string>\n</resources>\n"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/.gitignore",
    "chars": 7,
    "preview": "/build\n"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/build.gradle",
    "chars": 803,
    "preview": "apply plugin: 'com.android.library'\n\nandroid {\n    // http://tools.android.com/tech-docs/new-build-system/tips\n    //noi"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/gradle.properties",
    "chars": 72,
    "preview": "POM_NAME=ijkplayer-java\nPOM_ARTIFACT_ID=ijkplayer-java\nPOM_PACKAGING=aar"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/proguard-rules.pro",
    "chars": 647,
    "preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /o"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/androidTest/java/tv/danmaku/ijk/media/player/ApplicationTest.java",
    "chars": 358,
    "preview": "package tv.danmaku.ijk.media.player;\n\nimport android.app.Application;\nimport android.test.ApplicationTestCase;\n\n/**\n * <"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/.classpath",
    "chars": 508,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<classpath>\n\t<classpathentry kind=\"src\" path=\"java\"/>\n\t<classpathentry kind=\"con\""
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/.project",
    "chars": 817,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<projectDescription>\n\t<name>ijkplayer-java</name>\n\t<comment></comment>\n\t<projects"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/.settings/org.eclipse.jdt.core.prefs",
    "chars": 173,
    "preview": "eclipse.preferences.version=1\norg.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6\norg.eclipse.jdt.core.compiler.com"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/AndroidManifest.xml",
    "chars": 177,
    "preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"tv.danmaku.ijk.media.player\" >\n\n    <u"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/AbstractMediaPlayer.java",
    "chars": 4281,
    "preview": "/*\n * Copyright (C) 2013-2014 Bilibili\n * Copyright (C) 2013-2014 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under th"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/AndroidMediaPlayer.java",
    "chars": 12777,
    "preview": "/*\n * Copyright (C) 2006 Bilibili\n * Copyright (C) 2006 The Android Open Source Project\n * Copyright (C) 2013 Zhang Rui "
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/IMediaPlayer.java",
    "chars": 6205,
    "preview": "/*\n * Copyright (C) 2013-2014 Bilibili\n * Copyright (C) 2013-2014 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under th"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/ISurfaceTextureHolder.java",
    "chars": 946,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/ISurfaceTextureHost.java",
    "chars": 834,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/IjkLibLoader.java",
    "chars": 830,
    "preview": "/*\n * Copyright (C) 2013-2014 Bilibili\n * Copyright (C) 2013-2014 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under th"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/IjkMediaCodecInfo.java",
    "chars": 10808,
    "preview": "package tv.danmaku.ijk.media.player;\n\nimport android.annotation.TargetApi;\nimport android.media.MediaCodecInfo;\nimport a"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/IjkMediaMeta.java",
    "chars": 16642,
    "preview": "package tv.danmaku.ijk.media.player;\n\nimport android.os.Bundle;\nimport android.text.TextUtils;\n\nimport java.util.ArrayLi"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java",
    "chars": 47974,
    "preview": "/*\n * Copyright (C) 2006 Bilibili\n * Copyright (C) 2006 The Android Open Source Project\n * Copyright (C) 2013 Zhang Rui "
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/IjkTimedText.java",
    "chars": 1078,
    "preview": "/*\n * Copyright (C) 2016 Zheng Yuan <zhengyuan10503@gmail.com>\n *\n * Licensed under the Apache License, Version 2.0 (the"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/MediaInfo.java",
    "chars": 936,
    "preview": "/*\n * Copyright (C) 2013-2014 Bilibili\n * Copyright (C) 2013-2014 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under th"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/MediaPlayerProxy.java",
    "chars": 10492,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/TextureMediaPlayer.java",
    "chars": 2847,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/annotations/AccessedByNative.java",
    "chars": 1091,
    "preview": "/*\n * Copyright (C) 2013-2014 Bilibili\n * Copyright (C) 2013-2014 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under th"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/annotations/CalledByNative.java",
    "chars": 1202,
    "preview": "/*\n * Copyright (C) 2013-2014 Bilibili\n * Copyright (C) 2013-2014 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under th"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/exceptions/IjkMediaException.java",
    "chars": 834,
    "preview": "/*\n * Copyright (C) 2013-2014 Bilibili\n * Copyright (C) 2013-2014 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under th"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/ffmpeg/FFmpegApi.java",
    "chars": 133,
    "preview": "package tv.danmaku.ijk.media.player.ffmpeg;\n\npublic class FFmpegApi {\n    public static native String av_base64_encode(b"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/AndroidMediaFormat.java",
    "chars": 1841,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/AndroidTrackInfo.java",
    "chars": 3164,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/IAndroidIO.java",
    "chars": 1005,
    "preview": "/*\n * Copyright (C) 2016 Bilibili\n * Copyright (C) 2016 Raymond Zheng <raymondzheng1412@gmail.com>\n *\n * Licensed under "
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/IMediaDataSource.java",
    "chars": 964,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/IMediaFormat.java",
    "chars": 932,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/ITrackInfo.java",
    "chars": 1066,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/IjkMediaFormat.java",
    "chars": 10341,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/IjkTrackInfo.java",
    "chars": 3096,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/pragma/DebugLog.java",
    "chars": 3912,
    "preview": "/*\n * Copyright (C) 2013 Bilibili\n * Copyright (C) 2013 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/pragma/Pragma.java",
    "chars": 813,
    "preview": "/*\n * Copyright (C) 2013 Bilibili\n * Copyright (C) 2013 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/project.properties",
    "chars": 584,
    "preview": "# This file is automatically generated by Android Tools.\n# Do not modify this file -- YOUR CHANGES WILL BE ERASED!\n#\n# T"
  },
  {
    "path": "android/ijkplayer/ijkplayer-java/src/main/res/values/strings.xml",
    "chars": 110,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <string name=\"ijkplayer_dummy\"></string>\n\n</resources>"
  },
  {
    "path": "android/ijkplayer/ijkplayer-x86/.gitignore",
    "chars": 7,
    "preview": "/build\n"
  },
  {
    "path": "android/ijkplayer/ijkplayer-x86/build.gradle",
    "chars": 896,
    "preview": "apply plugin: 'com.android.library'\n\nandroid {\n    // http://tools.android.com/tech-docs/new-build-system/tips\n    //noi"
  },
  {
    "path": "android/ijkplayer/ijkplayer-x86/gradle.properties",
    "chars": 70,
    "preview": "POM_NAME=ijkplayer-x86\nPOM_ARTIFACT_ID=ijkplayer-x86\nPOM_PACKAGING=aar"
  },
  {
    "path": "android/ijkplayer/ijkplayer-x86/proguard-rules.pro",
    "chars": 647,
    "preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /o"
  },
  {
    "path": "android/ijkplayer/ijkplayer-x86/src/androidTest/java/tv/danmaku/ijk/media/ijkplayer/ApplicationTest.java",
    "chars": 361,
    "preview": "package tv.danmaku.ijk.media.ijkplayer;\n\nimport android.app.Application;\nimport android.test.ApplicationTestCase;\n\n/**\n "
  },
  {
    "path": "android/ijkplayer/ijkplayer-x86/src/main/.classpath",
    "chars": 508,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<classpath>\n\t<classpathentry kind=\"con\" path=\"com.android.ide.eclipse.adt.ANDROID"
  },
  {
    "path": "android/ijkplayer/ijkplayer-x86/src/main/.project",
    "chars": 816,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<projectDescription>\n\t<name>ijkplayer-x86</name>\n\t<comment></comment>\n\t<projects>"
  },
  {
    "path": "android/ijkplayer/ijkplayer-x86/src/main/.settings/org.eclipse.jdt.core.prefs",
    "chars": 173,
    "preview": "eclipse.preferences.version=1\norg.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6\norg.eclipse.jdt.core.compiler.com"
  },
  {
    "path": "android/ijkplayer/ijkplayer-x86/src/main/AndroidManifest.xml",
    "chars": 181,
    "preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"tv.danmaku.ijk.media.player_x86\">\n\n   "
  },
  {
    "path": "android/ijkplayer/ijkplayer-x86/src/main/java/tv/danmaku/ijk/media/player_x86/Pragma.java",
    "chars": 718,
    "preview": "/*\n * Copyright (C) 2015 Bilibili\n * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>\n *\n * Licensed under the Apache L"
  },
  {
    "path": "android/ijkplayer/ijkplayer-x86/src/main/jni/Application.mk",
    "chars": 1137,
    "preview": "# Copyright (c) 2013-2014 Bilibili\n# copyright (c) 2013-2014 Zhang Rui <bbcallen@gmail.com>\n#\n# This file is part of ijk"
  },
  {
    "path": "android/ijkplayer/ijkplayer-x86/src/main/jni/ffmpeg/Android.mk",
    "chars": 176,
    "preview": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\nLOCAL_MODULE := ijkffmpeg\nLOCAL_SRC_FILES := $(MY_APP_FFMPEG_OUTPUT_"
  },
  {
    "path": "android/ijkplayer/ijkplayer-x86/src/main/project.properties",
    "chars": 584,
    "preview": "# This file is automatically generated by Android Tools.\n# Do not modify this file -- YOUR CHANGES WILL BE ERASED!\n#\n# T"
  }
]

// ... and 440 more files (download for full content)

About this extraction

This page contains the full source code of the bilibili/ijkplayer GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 640 files (2.8 MB), approximately 762.0k tokens, and a symbol index with 2730 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!