📜 ⬆️ ⬇️

Talking panda or what can be done with FFmpeg and OpenCV on Android

This publication is about how you can compile a library for processing video and audio FFmpeg for Android in Eclipse using NDK in Windows. You will learn how to associate FFmpeg with the OpenCV image processing library and how this can all be used in the Java code of an Android application. All this will be described in the context of the process of creating an Android application, the main functionality of which is precisely tied to the use of these libraries and their interaction. So, I ask those interested under the cat.

Disclaimer


Some of the things described will surely seem obvious to many, however, for me, as a developer for Windows, these tasks turned out to be new and their solution was not obvious, so I tried to make the description of technical details as simple and understandable for people who do not have much experience. work with Android NDK and everything connected with it. Some solutions were found intuitively, and therefore, most likely, they are not quite “beautiful”.

Prehistory


The idea of ​​an Android application, where FFmpeg and OpenCV would be used, appeared after watching a single ad for Vitituas mineral water (you can search on Youtube). In this video, sometimes flashed photos of various animals that rotated with human eyes, moved their lips and persuaded the viewer to buy this water. It looked pretty funny. In general, the thought arose: what if you give the user the opportunity to make such videos himself, and not from a computer, but with the help of his phone?

Of course, they first looked for analogues. Something more or less similar was found in the AppStore for the iPhone, and there the process of creating a video was not very successful: you choose a picture, mark one area on it, and then you shoot something in that area, that is, to put on the picture in different places at least two eyes and no mouth at all. On Google Play, there was nothing like that at all. The closest programs with similar functionality were those where the photo can be superimposed animated elements from limited sets.
')
In a word, there are few competitors, so the decision was made to make the application.

Choice of technology


Immediately a logical question arose: “How can we do all this?”. After spending two days studying all sorts of libraries for video and image processing, I stopped at FFmpeg and OpenCV.

Of the benefits you can list the following:

Of the minuses:

The usage pattern loomed like this: OpenCV forms each frame of a video series (for example, places it on a picture, eyes and mouth), transmits this frame in some way to FFmpeg, and that in turn forms a video stream from these frames, simultaneously not forgetting about audio.

I have to admit that since there was little development experience under Android, and a lot under Windows, before starting to tinker with Eclipse and NDK, I made a small program in Visual Studio, which proved that the very idea of ​​using FFmpeg and OpenCV has the right to life and, most importantly, there is a way to realize their interaction. But the implementation of the interaction of these libraries will be written a little later, and this is rather an easy recommendation on the fact that it is better to spend time and test some idea on technologies that you understand best than to immediately go into something new.

As for compiling FFmpeg in Visual Studio - it was surprisingly easy to do, but this article is still about Android, so if the FFmpeg topic in Visual Studio is interesting, write about it and I will try to find time and write instructions on how to do it. to do.

So, having checked that the idea to integrate FFmpeg and OpenCV is working, I started developing the Android application directly.

The plan was:
  1. Compile and build FFmpeg and OpenCV for Android.
  2. We write the code of their interaction.
  3. We use this all in Java application code.


I decided to do all this in Eclipse, and not in Android Studio - at the time of its development, it somehow seemed damp and not very convenient to me.

FFmpeg, Android, NDK, Eclipse, Windows


First of all, like all normal people, I began to search the Internet for instructions on how to cross-compile FFmpeg for Android on Windows. There are articles, even some make-files are offered, there is something on the githaba, but according to them I could not do it. Perhaps because of the lack of experience with this all, perhaps because of errors in these instructions and makefiles. Usually such instructions are written by a person who is well versed in the technologies being described and therefore omits some “obvious” nuances, and it turns out that it is impossible for a beginner to use it.

In general, I had to do everything myself from scratch. The following is an approximate sequence of actions.

0. Presets


Download and install: Eclipse with CDT, Android SDK, NDK, cygwin and OpenCV Android SDK. If there is a need to support Android on x86, then you should also download yasm - you need it to cross-compile * .asm files, but more on that later.

Instructions for installing and configuring this are all on the sites from where they are actually downloaded, and there is a great article on google opencv.org about installing and configuring NDK in Eclipse, which is issued in Google on the request “OpenCV Introduction into Android Development”, be sure on her.

1. Prepare the project


Create a new Android application project in Eclipse and convert it to a C / C ++ project (see the article “OpenCV Introduction into Android Development”). In fact, the Android project will not convert completely to C / C ++, and it will simply add the ability to work with C / C ++.

Download and unpack the archive with the code FFmpeg from the site ffmpeg.org. The folder with the code of the form “ffmpeg-2.6.1” is thrown into the “jni” folder of the project (if it is not there, create it in the same place where “res”, “scr”, etc. are located).

Now you need to create configuration files (the most important of them is “config.h”) and makefiles for FFmpeg. Here comes the first nuance: there are three platforms for Android devices - Arm, x86, MIPS. For each of these architectures, you need to build your * .so library files (similar to * .dll in Windows). NDK allows you to do this - it includes a compiler and linker for each platform.

In order to generate configuration files in FFmpeg there is a special script, to run which we needed to install cygwin. So, run the Cygwin Terminal command line and enter the following command sets.

Bash scripts with explanations
For ARM devices:
$ cd D: $ cd MyProject/jni/ffmpeg-2.1.3/ $ PREBUILT=D:/ndk/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64 $ PLATFORM=D:/ndk/android-ndk-r9c/platforms/android-8/arch-arm $ TMPDIR=D:/ $ ./configure --enable-version3 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-network --enable-cross-compile --target-os=linux --arch=arm --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- --cc=$PREBUILT/bin/arm-linux-androideabi-gcc --ld=$PREBUILT/bin/arm-linux-androideabi-ld --tempprefix=D:/ 

For x86 devices:
 $ cd D: $ cd MyProject/jni/ffmpeg-2.1.3/ $ PREBUILT=D:/ndk/android-ndk-r9c/toolchains/x86-4.6/prebuilt/windows-x86_64 $ PLATFORM=D:/ndk/android-ndk-r9c/platforms/android-9/arch-x86 $ TMPDIR=D:/ $ ./configure --enable-version3 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-network --enable-cross-compile --target-os=linux --arch=x86 --cross-prefix=$PREBUILT/bin/i686-linux-android- --cc=$PREBUILT/bin/i686-linux-android-gcc --ld=$PREBUILT/bin/i686-linux-android-ld --tempprefix=D:/ 

For MIPS devices:
 $ cd D: $ cd MyProject/jni/ffmpeg-2.1.3/ $ PREBUILT=D:/ndk/android-ndk-r9c/toolchains/mipsel-linux-android-4.6/prebuilt/windows-x86_64 $ PLATFORM=D:/ndk/android-ndk-r9c/platforms/android-9/arch-mips $ TMPDIR=D:/ $ ./configure --enable-version3 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-network --enable-cross-compile --target-os=linux --arch=mips --cross-prefix=$PREBUILT/bin/mipsel-linux-android- --cc=$PREBUILT/bin/mipsel-linux-android-gcc --ld=$PREBUILT/bin/mipsel-linux-android-ld --tempprefix=D:/ 

Explanations:
  1. The first two commands - go to the folder with the FFmpeg code, where the “configure” file is located - this is the bash script that generates the files we need, including the “config.h”, which is used during compilation;
  2. Next, we create three temporary environment variables PREBUILT, PLATFORM, TMPDIR, the first two record the paths to the folders in the NDK, where the utilities for cross-compiling for different platforms are located, if you enter these folders, there will be a folder among the many folders bin ”, the compiler and linker lie in it. TMPDIR - path to a temporary folder where the script will keep its temporary files while working;
  3. The last command is actually launching the “configure” script from the “ffmpeg-2.6.1” folder with parameters. A list of all possible script parameters with explanations is displayed using the “./configure -h” command. Below is a description of the parameters we use:
    • --enable-version3 parameter - we tell the script to generate such a configuration file so that it can be used to compile the FFmpeg libraries that will be licensed under the LGPL 3.0;
    • --enable-shared and --disable-static parameters - we tell the script that we want to get * .so files on the output. Having done this, then in theory, coupled with the LGPL, we will be able to link them to our code to which the LGPL will not apply;
    • parameters --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-network - with these parameters we tell the script that we do not need to create console programs (in other words, ffmpeg.exe, ffplay.exe other);
    • the remaining parameters are clear in their names - we say that we want to do cross-compilation, assign the platform (linux arm, mips or x86), prescribe the script path to the compiler and linker, set the path to the temporary folder.

The script will generate in the jni / ffmpeg-2.1.3 folder a file “config.h”, “config.asm” and several make-files.

2. Makefiles, compilation and build


So, at this stage, we already have: the Android application project in Eclipse, in the jni / ffmpeg-2.1.3 folder is the code from FFmpeg, and we have just generated the file “config.h” we need. Now you need to make makefiles so that all this can be compiled and get * .so files that we can use in the Android application.

I tried to use compile generated script files, but I failed, most likely because of the curvature of the hands. So I decided to make my own makefiles with comments and inclusions.

To compile with NDK, you need at least two makefiles: Android.mk and Application.mk, which should be located in the jni folder of the project. Application.mk usually contains no more than a dozen parameters and adjusts, so to speak, the “global” compilation parameters. Android.mk is responsible for everything else.

There are also a number of points related to some errors at the time of compilation. They were solved either with the help of Google, or with a correction based on information provided by the NDK in the console (errors are well formulated and fixing them should not be difficult). Unfortunately, I can’t give everything here (I forgot to correct it corny), but here’s a list of some:

When compiling, there were a couple of errors directly in the code of some of the FFmpeg files. I just commented on this place (of course, more or less making sure that it does not break). For example, some places where something is displayed on the console. Maybe there was something else and, unfortunately, I don’t remember, but in fact compilation errors are easily fixable.

Makefiles and bat-scripts with explanations.
Nuances:
  • In addition to the FFmpeg library modules directly, such as libavcodec, libavfilter, and so on, we will also need to compile the code for the ffmpeg.exe program itself as the ffmpeg.so library. We will call its main () function (which we renamed to ffmpeg_main ()) from the Java code and pass the parameters we need there, and it will do the necessary work for us;
  • NDK cannot compile * .asm files for the x86 architecture, so we need to first compile with the help of yasm * .asm files that are in folders like "jni \ ffmpeg-2.1.3 \ libavcodec \ x86", "jni \ ffmpeg- 2.1.3 \ libavfilter \ x86 "and so on. Below are the * .bat files that do this. At the output we will get the object files * .a, the path to which we will indicate the linker when compiling under x86. This should only be done if you are going to support this architecture;
  • In the makefile for almost every module, another makefile of the form “libavfilter_ignore.mk” is included. For each module, they contain * .c files that should not be compiled. What kind of files: some of them, as I understood from the content, something like test programs (like, for example, mpegaudio_tablegen.c). Some of them are not intended for compilation, but are simply connected via include (for example, h264qpel_template.c is included in the h264qpel.c file). Surely in the make-files generated after running the confgiure script (with which I didn’t work out) they are also ignored;
  • The makefile also includes the assembly of the OpenCV module. Everything is simple there, read the article on the opencv.org website called “OpenCV Introduction into Android Development”. It is necessary for just for the mentioned interaction FFmpeg-OpenCV. This interaction will be described below;
  • All modules of FFmpeg from scratch I have a half hour. During development it is simply impossible to work, especially if you often have to change something in some kind of FFmpeg module. To avoid this, another makefile will be shown below. In it, only one FFmpeg module will be compiled from scratch, and the rest will be used previously compiled. For example, you work in the libavfilter module, program something there and change it all the time, you don’t have to constantly rebuild libavcodec and others, you just have to compile it and specify it in the make-file as necessary;
  • There are explanatory comments in the makefile, but since there are a few modules compiled, and the compilation procedure is similar, the duplicate commands in the makefile are not explained.

Android.mk - from it NDK takes a list of code files to compile
 ################################################################################ #    LOCAL_PATH    LOCAL_PATH := $(call my-dir) #    FFMPEG_DIR      FFmpeg FFMPEG_DIR := ffmpeg-2.1.3 #    OPENCVROOT     OpenCV Anroid SDK OPENCVROOT := D:\OpenCV-2.4.7.1-android-sdk #         x86 #   ,   x86         FFmpeg  #   NDK    *.asm ,        yasm #       yasm   *.asm     *.a ,       #   *.asm    bat- ifeq ($(TARGET_ARCH),x86) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := avcodec_asm LIBAVCODEC_ASM_A_FILE_PATH := $(LOCAL_PATH)/../obj/local/x86/objs/avcodec/ffmpeg-2.1.3/libavcodec/x86/libavcodec_asm.a LOCAL_SRC_FILES := $(subst jni/,,$(LIBAVCODEC_ASM_A_FILE_PATH)) include $(PREBUILT_STATIC_LIBRARY) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := avfilter_asm LIBAVFILTER_ASM_A_FILE_PATH := $(LOCAL_PATH)/../obj/local/x86/objs/avfilter/ffmpeg-2.1.3/libavfilter/x86/libavfilter_asm.a LOCAL_SRC_FILES := $(subst jni/,,$(LIBAVFILTER_ASM_A_FILE_PATH)) include $(PREBUILT_STATIC_LIBRARY) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := avresample_asm LIBAVRESAMPLE_ASM_A_FILE_PATH := $(LOCAL_PATH)/../obj/local/x86/objs/avresample/ffmpeg-2.1.3/libavresample/x86/libavresample_asm.a LOCAL_SRC_FILES := $(subst jni/,,$(LIBAVRESAMPLE_ASM_A_FILE_PATH)) include $(PREBUILT_STATIC_LIBRARY) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := avutil_asm LIBAVUTIL_ASM_A_FILE_PATH := $(LOCAL_PATH)/../obj/local/x86/objs/avutil/ffmpeg-2.1.3/libavutil/x86/libavutil_asm.a LOCAL_SRC_FILES := $(subst jni/,,$(LIBAVUTIL_ASM_A_FILE_PATH)) include $(PREBUILT_STATIC_LIBRARY) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := swresample_asm LIBSWRESAMPLE_ASM_A_FILE_PATH := $(LOCAL_PATH)/../obj/local/x86/objs/swresample/ffmpeg-2.1.3/libswresample/x86/libswresample_asm.a LOCAL_SRC_FILES := $(subst jni/,,$(LIBSWRESAMPLE_ASM_A_FILE_PATH)) include $(PREBUILT_STATIC_LIBRARY) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := swscale_asm LIBSWSCALE_ASM_A_FILE_PATH := $(LOCAL_PATH)/../obj/local/x86/objs/swscale/ffmpeg-2.1.3/libswscale/x86/libswscale_asm.a LOCAL_SRC_FILES := $(subst jni/,,$(LIBSWSCALE_ASM_A_FILE_PATH)) include $(PREBUILT_STATIC_LIBRARY) ################################################################################ endif #   -  FFmpeg ################################################################################ #   FFmpeg avutils.so #         include $(CLEAR_VARS) #          *.asm, *.c  ..    #      "$(TARGET_ARCH)" -            #   ffmpeg       ,      LIBAVUTIL_LIB_ARCH_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavutil/$(TARGET_ARCH)/*.asm) LIBAVUTIL_LIB_ARCH_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavutil/$(TARGET_ARCH)/*.c) LIBAVUTIL_LIB_ARCH_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavutil/$(TARGET_ARCH)/*.S) LIBAVUTIL_LIB_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavutil/*.asm) LIBAVUTIL_LIB_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavutil/*.c) LIBAVUTIL_LIB_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavutil/*.S) LIBAVUTIL_LIB_CPP_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavutil/*.cpp) # ,             NDK ,       #            "jni/"    LIBAVUTIL_LIB_ARCH_ASM_FILES := $(subst jni/,,$(LIBAVUTIL_LIB_ARCH_ASM_FILES)) LIBAVUTIL_LIB_ARCH_C_FILES := $(subst jni/,,$(LIBAVUTIL_LIB_ARCH_C_FILES)) LIBAVUTIL_LIB_ARCH_S_FILES := $(subst jni/,,$(LIBAVUTIL_LIB_ARCH_S_FILES)) LIBAVUTIL_LIB_ASM_FILES := $(subst jni/,,$(LIBAVUTIL_LIB_ASM_FILES)) LIBAVUTIL_LIB_C_FILES := $(subst jni/,,$(LIBAVUTIL_LIB_C_FILES)) LIBAVUTIL_LIB_S_FILES := $(subst jni/,,$(LIBAVUTIL_LIB_S_FILES)) LIBAVUTIL_LIB_CPP_FILES := $(subst jni/,,$(LIBAVUTIL_LIB_CPP_FILES)) #    make-,    ,    ,    include $(LOCAL_PATH)/libavutil_ignore.mk #      ,    LIBAVUTIL_FILES        avutils,    LIBAVUTIL_FILES := $(sort $(LIBAVUTIL_LIB_ARCH_ASM_FILES)) $(sort $(LIBAVUTIL_LIB_ARCH_C_FILES)) $(sort $(LIBAVUTIL_LIB_ARCH_S_FILES)) $(sort $(LIBAVUTIL_LIB_ASM_FILES)) $(sort $(LIBAVUTIL_LIB_C_FILES)) $(sort $(LIBAVUTIL_LIB_S_FILES)) $(sort $(LIBAVUTIL_LIB_CPP_FILES)) #       #     LOCAL_SRC_FILES := $(LIBAVUTIL_FILES) #      LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(FFMPEG_DIR) $(LOCAL_PATH)/$(FFMPEG_DIR)/libavutil/$(TARGET_ARCH) # -  FFmpeg      zlib  log,      LOCAL_LDLIBS += -lz -llog #   ,      libavutil.so LOCAL_MODULE := avutil #  ,   TARGET_ARCH            #         LOCAL_CFLAGS     #       ,   .. ifeq ($(TARGET_ARCH),arm) LOCAL_CFLAGS += -O3 -fpic -DANDROID LOCAL_ARM_MODE := arm else ifeq ($(TARGET_ARCH),x86) LOCAL_CFLAGS += -O3 -fpic -DANDROID #      x86    yasm   LOCAL_STATIC_LIBRARIES += avutil_asm else ifeq ($(TARGET_ARCH),mips) LOCAL_CFLAGS += -O3 -DANDROID -Wfatal-errors -Wno-deprecated -std=c99 -fomit-frame-pointer -mips32r2 -mdsp -mdspr2 -mhard-float -g -Wdeclaration-after-statement -Wall -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=missing-prototypes -Werror=return-type -Werror=vla endif #     make-  NDK,    shared-,  *.so  include $(BUILD_SHARED_LIBRARY) ################################################################################ #   FFmpeg avcodec.so include $(CLEAR_VARS) LIBAVCODEC_LIB_ARCH_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavcodec/$(TARGET_ARCH)/*.asm) LIBAVCODEC_LIB_ARCH_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavcodec/$(TARGET_ARCH)/*.c) LIBAVCODEC_LIB_ARCH_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavcodec/$(TARGET_ARCH)/*.S) LIBAVCODEC_LIB_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavcodec/*.asm) LIBAVCODEC_LIB_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavcodec/*.c) LIBAVCODEC_LIB_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavcodec/*.S) LIBAVCODEC_LIB_CPP_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavcodec/*.cpp) LIBAVCODEC_LIB_ARCH_ASM_FILES := $(subst jni/,,$(LIBAVCODEC_LIB_ARCH_ASM_FILES)) LIBAVCODEC_LIB_ARCH_C_FILES := $(subst jni/,,$(LIBAVCODEC_LIB_ARCH_C_FILES)) LIBAVCODEC_LIB_ARCH_S_FILES := $(subst jni/,,$(LIBAVCODEC_LIB_ARCH_S_FILES)) LIBAVCODEC_LIB_ASM_FILES := $(subst jni/,,$(LIBAVCODEC_LIB_ASM_FILES)) LIBAVCODEC_LIB_C_FILES := $(subst jni/,,$(LIBAVCODEC_LIB_C_FILES)) LIBAVCODEC_LIB_S_FILES := $(subst jni/,,$(LIBAVCODEC_LIB_S_FILES)) LIBAVCODEC_LIB_CPP_FILES := $(subst jni/,,$(LIBAVCODEC_LIB_CPP_FILES)) include $(LOCAL_PATH)/libavcodec_ignore.mk LIBAVCODEC_FILES := $(sort $(LIBAVCODEC_LIB_ARCH_ASM_FILES)) $(sort $(LIBAVCODEC_LIB_ARCH_C_FILES)) $(sort $(LIBAVCODEC_LIB_ARCH_S_FILES)) $(sort $(LIBAVCODEC_LIB_ASM_FILES)) $(sort $(LIBAVCODEC_LIB_C_FILES)) $(sort $(LIBAVCODEC_LIB_S_FILES)) $(sort $(LIBAVCODEC_LIB_CPP_FILES)) LOCAL_SRC_FILES := $(LIBAVCODEC_FILES) LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(FFMPEG_DIR) $(LOCAL_PATH)/$(FFMPEG_DIR)/libavcodec $(LOCAL_PATH)/$(FFMPEG_DIR)/libavcodec/$(TARGET_ARCH) LOCAL_LDLIBS += -lz -llog #    ffmpeg   ,              , #  ,      ,     -  LOCAL_SHARED_LIBRARIES += libavutil LOCAL_MODULE := avcodec ifeq ($(TARGET_ARCH),arm) LOCAL_CFLAGS += -O3 -fpic -DANDROID LOCAL_ARM_MODE := arm else ifeq ($(TARGET_ARCH),x86) LOCAL_CFLAGS += -O3 -fno-pic -DANDROID LOCAL_STATIC_LIBRARIES += avutil_asm avcodec_asm LOCAL_SHARED_LIBRARIES += libavutil_asm libavcodec_asm else ifeq ($(TARGET_ARCH),mips) LOCAL_CFLAGS += -O3 -DANDROID -Wfatal-errors -Wno-deprecated -std=c99 -fomit-frame-pointer -mips32r2 -mdsp -mdspr2 -mhard-float -g -Wdeclaration-after-statement -Wall -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=missing-prototypes -Werror=return-type -Werror=vla endif include $(BUILD_SHARED_LIBRARY) ################################################################################ #   FFmpeg avformat.so include $(CLEAR_VARS) LIBAVFORMAT_LIB_ARCH_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavformat/$(TARGET_ARCH)/*.asm) LIBAVFORMAT_LIB_ARCH_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavformat/$(TARGET_ARCH)/*.c) LIBAVFORMAT_LIB_ARCH_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavformat/$(TARGET_ARCH)/*.S) LIBAVFORMAT_LIB_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavformat/*.asm) LIBAVFORMAT_LIB_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavformat/*.c) LIBAVFORMAT_LIB_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavformat/*.S) LIBAVFORMAT_LIB_CPP_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavformat/*.cpp) LIBAVFORMAT_LIB_ARCH_ASM_FILES := $(subst jni/,,$(LIBAVFORMAT_LIB_ARCH_ASM_FILES)) LIBAVFORMAT_LIB_ARCH_C_FILES := $(subst jni/,,$(LIBAVFORMAT_LIB_ARCH_C_FILES)) LIBAVFORMAT_LIB_ARCH_S_FILES := $(subst jni/,,$(LIBAVFORMAT_LIB_ARCH_S_FILES)) LIBAVFORMAT_LIB_ASM_FILES := $(subst jni/,,$(LIBAVFORMAT_LIB_ASM_FILES)) LIBAVFORMAT_LIB_C_FILES := $(subst jni/,,$(LIBAVFORMAT_LIB_C_FILES)) LIBAVFORMAT_LIB_S_FILES := $(subst jni/,,$(LIBAVFORMAT_LIB_S_FILES)) LIBAVFORMAT_LIB_CPP_FILES := $(subst jni/,,$(LIBAVFORMAT_LIB_CPP_FILES)) include $(LOCAL_PATH)/libavformat_ignore.mk LIBAVFORMAT_FILES := $(sort $(LIBAVFORMAT_LIB_ARCH_ASM_FILES)) $(sort $(LIBAVFORMAT_LIB_ARCH_C_FILES)) $(sort $(LIBAVFORMAT_LIB_ARCH_S_FILES)) $(sort $(LIBAVFORMAT_LIB_ASM_FILES)) $(sort $(LIBAVFORMAT_LIB_C_FILES)) $(sort $(LIBAVFORMAT_LIB_S_FILES)) $(sort $(LIBAVFORMAT_LIB_CPP_FILES)) LOCAL_SRC_FILES := $(LIBAVFORMAT_FILES) LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(FFMPEG_DIR) $(LOCAL_PATH)/$(FFMPEG_DIR)/libavformat $(LOCAL_PATH)/$(FFMPEG_DIR)/libavformat/$(TARGET_ARCH) LOCAL_LDLIBS += -lz -llog LOCAL_SHARED_LIBRARIES += libavutil libavcodec LOCAL_MODULE := avformat ifeq ($(TARGET_ARCH),arm) LOCAL_CFLAGS += -O3 -fpic -DANDROID LOCAL_ARM_MODE := arm else ifeq ($(TARGET_ARCH),x86) LOCAL_CFLAGS += -O3 -fpic -DANDROID else ifeq ($(TARGET_ARCH),mips) LOCAL_CFLAGS += -O3 -DANDROID -Wfatal-errors -Wno-deprecated -std=c99 -fomit-frame-pointer -mips32r2 -mdsp -mdspr2 -mhard-float -g -Wdeclaration-after-statement -Wall -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=missing-prototypes -Werror=return-type -Werror=vla endif include $(BUILD_SHARED_LIBRARY) ################################################################################ #   FFmpeg swscale.so include $(CLEAR_VARS) LIBSWSCALE_LIB_ARCH_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswscale/$(TARGET_ARCH)/*.asm) LIBSWSCALE_LIB_ARCH_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswscale/$(TARGET_ARCH)/*.c) LIBSWSCALE_LIB_ARCH_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswscale/$(TARGET_ARCH)/*.S) LIBSWSCALE_LIB_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswscale/*.asm) LIBSWSCALE_LIB_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswscale/*.c) LIBSWSCALE_LIB_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswscale/*.S) LIBSWSCALE_LIB_CPP_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswscale/*.cpp) LIBSWSCALE_LIB_ARCH_ASM_FILES := $(subst jni/,,$(LIBSWSCALE_LIB_ARCH_ASM_FILES)) LIBSWSCALE_LIB_ARCH_C_FILES := $(subst jni/,,$(LIBSWSCALE_LIB_ARCH_C_FILES)) LIBSWSCALE_LIB_ARCH_S_FILES := $(subst jni/,,$(LIBSWSCALE_LIB_ARCH_S_FILES)) LIBSWSCALE_LIB_ASM_FILES := $(subst jni/,,$(LIBSWSCALE_LIB_ASM_FILES)) LIBSWSCALE_LIB_C_FILES := $(subst jni/,,$(LIBSWSCALE_LIB_C_FILES)) LIBSWSCALE_LIB_S_FILES := $(subst jni/,,$(LIBSWSCALE_LIB_S_FILES)) LIBSWSCALE_LIB_CPP_FILES := $(subst jni/,,$(LIBSWSCALE_LIB_CPP_FILES)) include $(LOCAL_PATH)/libswscale_ignore.mk LIBSWSCALE_FILES := $(sort $(LIBSWSCALE_LIB_ARCH_ASM_FILES)) $(sort $(LIBSWSCALE_LIB_ARCH_C_FILES)) $(sort $(LIBSWSCALE_LIB_ARCH_S_FILES)) $(sort $(LIBSWSCALE_LIB_ASM_FILES)) $(sort $(LIBSWSCALE_LIB_C_FILES)) $(sort $(LIBSWSCALE_LIB_S_FILES)) $(sort $(LIBSWSCALE_LIB_CPP_FILES)) LOCAL_SRC_FILES := $(LIBSWSCALE_FILES) LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(FFMPEG_DIR) $(LOCAL_PATH)/$(FFMPEG_DIR)/libswscale $(LOCAL_PATH)/$(FFMPEG_DIR)/libswscale/$(TARGET_ARCH) LOCAL_LDLIBS += -lz -llog LOCAL_SHARED_LIBRARIES += libavutil LOCAL_MODULE := swscale ifeq ($(TARGET_ARCH),arm) LOCAL_CFLAGS += -O3 -fpic -DANDROID LOCAL_ARM_MODE := arm else ifeq ($(TARGET_ARCH),x86) LOCAL_CFLAGS += -O3 -fno-pic -DANDROID LOCAL_STATIC_LIBRARIES += avutil_asm swscale_asm else ifeq ($(TARGET_ARCH),mips) LOCAL_CFLAGS += -O3 -DANDROID -Wfatal-errors -Wno-deprecated -std=c99 -fomit-frame-pointer -mips32r2 -mdsp -mdspr2 -mhard-float -g -Wdeclaration-after-statement -Wall -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=missing-prototypes -Werror=return-type -Werror=vla endif include $(BUILD_SHARED_LIBRARY) ################################################################################ #   FFmpeg postproc.so include $(CLEAR_VARS) LIBPOSTPROC_LIB_ARCH_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libpostproc/$(TARGET_ARCH)/*.asm) LIBPOSTPROC_LIB_ARCH_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libpostproc/$(TARGET_ARCH)/*.c) LIBPOSTPROC_LIB_ARCH_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libpostproc/$(TARGET_ARCH)/*.S) LIBPOSTPROC_LIB_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libpostproc/*.asm) LIBPOSTPROC_LIB_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libpostproc/*.c) LIBPOSTPROC_LIB_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libpostproc/*.S) LIBPOSTPROC_LIB_CPP_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libpostproc/*.cpp) LIBPOSTPROC_LIB_ARCH_ASM_FILES := $(subst jni/,,$(LIBPOSTPROC_LIB_ARCH_ASM_FILES)) LIBPOSTPROC_LIB_ARCH_C_FILES := $(subst jni/,,$(LIBPOSTPROC_LIB_ARCH_C_FILES)) LIBPOSTPROC_LIB_ARCH_S_FILES := $(subst jni/,,$(LIBPOSTPROC_LIB_ARCH_S_FILES)) LIBPOSTPROC_LIB_ASM_FILES := $(subst jni/,,$(LIBPOSTPROC_LIB_ASM_FILES)) LIBPOSTPROC_LIB_C_FILES := $(subst jni/,,$(LIBPOSTPROC_LIB_C_FILES)) LIBPOSTPROC_LIB_S_FILES := $(subst jni/,,$(LIBPOSTPROC_LIB_S_FILES)) LIBPOSTPROC_LIB_CPP_FILES := $(subst jni/,,$(LIBPOSTPROC_LIB_CPP_FILES)) include $(LOCAL_PATH)/libpostproc_ignore.mk LIBPOSTPROC_FILES := $(sort $(LIBPOSTPROC_LIB_ARCH_ASM_FILES)) $(sort $(LIBPOSTPROC_LIB_ARCH_C_FILES)) $(sort $(LIBPOSTPROC_LIB_ARCH_S_FILES)) $(sort $(LIBPOSTPROC_LIB_ASM_FILES)) $(sort $(LIBPOSTPROC_LIB_C_FILES)) $(sort $(LIBPOSTPROC_LIB_S_FILES)) $(sort $(LIBPOSTPROC_LIB_CPP_FILES)) LOCAL_SRC_FILES := $(LIBPOSTPROC_FILES) LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(FFMPEG_DIR) $(LOCAL_PATH)/$(FFMPEG_DIR)/libpostproc $(LOCAL_PATH)/$(FFMPEG_DIR)/libpostproc/$(TARGET_ARCH) LOCAL_LDLIBS += -lz -llog LOCAL_SHARED_LIBRARIES += libavutil LOCAL_MODULE := postproc ifeq ($(TARGET_ARCH),arm) LOCAL_CFLAGS += -O3 -fpic -DANDROID LOCAL_ARM_MODE := arm else ifeq ($(TARGET_ARCH),x86) LOCAL_CFLAGS += -O3 -fno-pic -DANDROID else ifeq ($(TARGET_ARCH),mips) LOCAL_CFLAGS += -O3 -DANDROID -Wfatal-errors -Wno-deprecated -std=c99 -fomit-frame-pointer -mips32r2 -mdsp -mdspr2 -mhard-float -g -Wdeclaration-after-statement -Wall -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=missing-prototypes -Werror=return-type -Werror=vla endif include $(BUILD_SHARED_LIBRARY) ################################################################################ #   FFmpeg swresample.so include $(CLEAR_VARS) LIBSWRESAMPLE_LIB_ARCH_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswresample/$(TARGET_ARCH)/*.asm) LIBSWRESAMPLE_LIB_ARCH_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswresample/$(TARGET_ARCH)/*.c) LIBSWRESAMPLE_LIB_ARCH_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswresample/$(TARGET_ARCH)/*.S) LIBSWRESAMPLE_LIB_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswresample/*.asm) LIBSWRESAMPLE_LIB_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswresample/*.c) LIBSWRESAMPLE_LIB_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswresample/*.S) LIBSWRESAMPLE_LIB_CPP_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswresample/*.cpp) LIBSWRESAMPLE_LIB_ARCH_ASM_FILES := $(subst jni/,,$(LIBSWRESAMPLE_LIB_ARCH_ASM_FILES)) LIBSWRESAMPLE_LIB_ARCH_C_FILES := $(subst jni/,,$(LIBSWRESAMPLE_LIB_ARCH_C_FILES)) LIBSWRESAMPLE_LIB_ARCH_S_FILES := $(subst jni/,,$(LIBSWRESAMPLE_LIB_ARCH_S_FILES)) LIBSWRESAMPLE_LIB_ASM_FILES := $(subst jni/,,$(LIBSWRESAMPLE_LIB_ASM_FILES)) LIBSWRESAMPLE_LIB_C_FILES := $(subst jni/,,$(LIBSWRESAMPLE_LIB_C_FILES)) LIBSWRESAMPLE_LIB_S_FILES := $(subst jni/,,$(LIBSWRESAMPLE_LIB_S_FILES)) LIBSWRESAMPLE_LIB_CPP_FILES := $(subst jni/,,$(LIBSWRESAMPLE_LIB_CPP_FILES)) include $(LOCAL_PATH)/libswresample_ignore.mk LIBSWRESAMPLE_FILES := $(sort $(LIBSWRESAMPLE_LIB_ARCH_ASM_FILES)) $(sort $(LIBSWRESAMPLE_LIB_ARCH_C_FILES)) $(sort $(LIBSWRESAMPLE_LIB_ARCH_S_FILES)) $(sort $(LIBSWRESAMPLE_LIB_ASM_FILES)) $(sort $(LIBSWRESAMPLE_LIB_C_FILES)) $(sort $(LIBSWRESAMPLE_LIB_S_FILES)) $(sort $(LIBSWRESAMPLE_LIB_CPP_FILES)) LOCAL_SRC_FILES := $(LIBSWRESAMPLE_FILES) LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(FFMPEG_DIR) $(LOCAL_PATH)/$(FFMPEG_DIR)/libswresample $(LOCAL_PATH)/$(FFMPEG_DIR)/libswresample/$(TARGET_ARCH) LOCAL_LDLIBS += -lz -llog LOCAL_SHARED_LIBRARIES += libavutil LOCAL_MODULE := swresample ifeq ($(TARGET_ARCH),arm) LOCAL_CFLAGS += -O3 -fpic -DANDROID LOCAL_ARM_MODE := arm else ifeq ($(TARGET_ARCH),x86) LOCAL_CFLAGS += -O3 -fpic -DANDROID LOCAL_STATIC_LIBRARIES += avutil_asm swresample_asm else ifeq ($(TARGET_ARCH),mips) LOCAL_CFLAGS += -O3 -DANDROID -Wfatal-errors -Wno-deprecated -std=c99 -fomit-frame-pointer -mips32r2 -mdsp -mdspr2 -mhard-float -g -Wdeclaration-after-statement -Wall -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=missing-prototypes -Werror=return-type -Werror=vla endif include $(BUILD_SHARED_LIBRARY) ################################################################################ #   FFmpeg avresample.so include $(CLEAR_VARS) LIBAVRESAMPLE_LIB_ARCH_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavresample/$(TARGET_ARCH)/*.asm) LIBAVRESAMPLE_LIB_ARCH_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavresample/$(TARGET_ARCH)/*.c) LIBAVRESAMPLE_LIB_ARCH_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavresample/$(TARGET_ARCH)/*.S) LIBAVRESAMPLE_LIB_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavresample/*.asm) LIBAVRESAMPLE_LIB_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavresample/*.c) LIBAVRESAMPLE_LIB_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavresample/*.S) LIBAVRESAMPLE_LIB_CPP_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavresample/*.cpp) LIBAVRESAMPLE_LIB_ARCH_ASM_FILES := $(subst jni/,,$(LIBAVRESAMPLE_LIB_ARCH_ASM_FILES)) LIBAVRESAMPLE_LIB_ARCH_C_FILES := $(subst jni/,,$(LIBAVRESAMPLE_LIB_ARCH_C_FILES)) LIBAVRESAMPLE_LIB_ARCH_S_FILES := $(subst jni/,,$(LIBAVRESAMPLE_LIB_ARCH_S_FILES)) LIBAVRESAMPLE_LIB_ASM_FILES := $(subst jni/,,$(LIBAVRESAMPLE_LIB_ASM_FILES)) LIBAVRESAMPLE_LIB_C_FILES := $(subst jni/,,$(LIBAVRESAMPLE_LIB_C_FILES)) LIBAVRESAMPLE_LIB_S_FILES := $(subst jni/,,$(LIBAVRESAMPLE_LIB_S_FILES)) LIBAVRESAMPLE_LIB_CPP_FILES := $(subst jni/,,$(LIBAVRESAMPLE_LIB_CPP_FILES)) include $(LOCAL_PATH)/libavresample_ignore.mk LIBAVRESAMPLE_FILES := $(sort $(LIBAVRESAMPLE_LIB_ARCH_ASM_FILES)) $(sort $(LIBAVRESAMPLE_LIB_ARCH_C_FILES)) $(sort $(LIBAVRESAMPLE_LIB_ARCH_S_FILES)) $(sort $(LIBAVRESAMPLE_LIB_ASM_FILES)) $(sort $(LIBAVRESAMPLE_LIB_C_FILES)) $(sort $(LIBAVRESAMPLE_LIB_S_FILES)) $(sort $(LIBAVRESAMPLE_LIB_CPP_FILES)) LOCAL_SRC_FILES := $(LIBAVRESAMPLE_FILES) LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(FFMPEG_DIR) $(LOCAL_PATH)/$(FFMPEG_DIR)/libavresample $(LOCAL_PATH)/$(FFMPEG_DIR)/libavresample/$(TARGET_ARCH) LOCAL_LDLIBS += -lz -llog LOCAL_SHARED_LIBRARIES += libavutil LOCAL_MODULE := avresample ifeq ($(TARGET_ARCH),arm) LOCAL_CFLAGS += -O3 -fpic -DANDROID LOCAL_ARM_MODE := arm else ifeq ($(TARGET_ARCH),x86) LOCAL_CFLAGS += -O3 -fpic -DANDROID LOCAL_STATIC_LIBRARIES += avutil_asm avresample_asm else ifeq ($(TARGET_ARCH),mips) LOCAL_CFLAGS += -O3 -DANDROID -Wfatal-errors -Wno-deprecated -std=c99 -fomit-frame-pointer -mips32r2 -mdsp -mdspr2 -mhard-float -g -Wdeclaration-after-statement -Wall -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=missing-prototypes -Werror=return-type -Werror=vla endif include $(BUILD_SHARED_LIBRARY) ################################################################################ #   OpenCV include $(CLEAR_VARS) OPENCV_CAMERA_MODULES := off OPENCV_INSTALL_MODULES := on include $(OPENCVROOT)/sdk/native/jni/OpenCV.mk ################################################################################ #   FFmpeg avfilter.so include $(CLEAR_VARS) LIBAVFILTER_LIB_ARCH_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/$(TARGET_ARCH)/*.asm) LIBAVFILTER_LIB_ARCH_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/$(TARGET_ARCH)/*.c) LIBAVFILTER_LIB_ARCH_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/$(TARGET_ARCH)/*.S) LIBAVFILTER_LIB_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/*.asm) LIBAVFILTER_LIB_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/*.c) LIBAVFILTER_LIB_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/*.S) LIBAVFILTER_LIB_CPP_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/*.cpp) LIBAVFILTER_LIB_EX_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/libmpcodecs/*.c) LIBAVFILTER_LIB_ARCH_ASM_FILES := $(subst jni/,,$(LIBAVFILTER_LIB_ARCH_ASM_FILES)) LIBAVFILTER_LIB_ARCH_C_FILES := $(subst jni/,,$(LIBAVFILTER_LIB_ARCH_C_FILES)) LIBAVFILTER_LIB_ARCH_S_FILES := $(subst jni/,,$(LIBAVFILTER_LIB_ARCH_S_FILES)) LIBAVFILTER_LIB_ASM_FILES := $(subst jni/,,$(LIBAVFILTER_LIB_ASM_FILES)) LIBAVFILTER_LIB_C_FILES := $(subst jni/,,$(LIBAVFILTER_LIB_C_FILES)) LIBAVFILTER_LIB_S_FILES := $(subst jni/,,$(LIBAVFILTER_LIB_S_FILES)) LIBAVFILTER_LIB_CPP_FILES := $(subst jni/,,$(LIBAVFILTER_LIB_CPP_FILES)) LIBAVFILTER_LIB_EX_C_FILES := $(subst jni/,,$(LIBAVFILTER_LIB_EX_C_FILES)) include $(LOCAL_PATH)/libavfilter_ignore.mk LIBAVFILTER_FILES := $(sort $(LIBAVFILTER_LIB_ARCH_ASM_FILES)) $(sort $(LIBAVFILTER_LIB_ARCH_C_FILES)) $(sort $(LIBAVFILTER_LIB_ARCH_S_FILES)) $(sort $(LIBAVFILTER_LIB_ASM_FILES)) $(sort $(LIBAVFILTER_LIB_C_FILES)) $(sort $(LIBAVFILTER_LIB_S_FILES)) $(sort $(LIBAVFILTER_LIB_CPP_FILES)) $(sort $(LIBAVFILTER_LIB_EX_C_FILES)) LOCAL_SRC_FILES := $(LIBAVFILTER_FILES) LOCAL_C_INCLUDES += $(OPENCVROOT)/sdk/native/jni/include $(LOCAL_PATH)/$(FFMPEG_DIR) $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/$(TARGET_ARCH) $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/libmpcodecs $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/libmpcodecs/libvo LOCAL_LDLIBS += -lz -llog LOCAL_SHARED_LIBRARIES += libavutil libavcodec libavformat libswresample libpostproc libswscale libavresample libopencv_java LOCAL_MODULE := avfilter ifeq ($(TARGET_ARCH),arm) LOCAL_CFLAGS += -D__STDC_CONSTANT_MACROS -O3 -fpic -DANDROID LOCAL_ARM_MODE := arm else ifeq ($(TARGET_ARCH),x86) LOCAL_CFLAGS += -D__STDC_CONSTANT_MACROS -O3 -fno-pic -DANDROID LOCAL_STATIC_LIBRARIES += avutil_asm avfilter_asm else ifeq ($(TARGET_ARCH),mips) LOCAL_CFLAGS += -D__STDC_CONSTANT_MACROS -O3 -DANDROID -Wfatal-errors -Wno-deprecated -std=c99 -fomit-frame-pointer -mips32r2 -mdsp -mdspr2 -mhard-float -g -Wdeclaration-after-statement -Wall -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=missing-prototypes -Werror=return-type -Werror=vla endif include $(BUILD_SHARED_LIBRARY) ################################################################################ #   FFmpeg avdevice.so include $(CLEAR_VARS) LIBAVDEVICE_LIB_ARCH_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavdevice/$(TARGET_ARCH)/*.asm) LIBAVDEVICE_LIB_ARCH_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavdevice/$(TARGET_ARCH)/*.c) LIBAVDEVICE_LIB_ARCH_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavdevice/$(TARGET_ARCH)/*.S) LIBAVDEVICE_LIB_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavdevice/*.asm) LIBAVDEVICE_LIB_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavdevice/*.c) LIBAVDEVICE_LIB_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavdevice/*.S) LIBAVDEVICE_LIB_CPP_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavdevice/*.cpp) LIBAVDEVICE_LIB_ARCH_ASM_FILES := $(subst jni/,,$(LIBAVDEVICE_LIB_ARCH_ASM_FILES)) LIBAVDEVICE_LIB_ARCH_C_FILES := $(subst jni/,,$(LIBAVDEVICE_LIB_ARCH_C_FILES)) LIBAVDEVICE_LIB_ARCH_S_FILES := $(subst jni/,,$(LIBAVDEVICE_LIB_ARCH_S_FILES)) LIBAVDEVICE_LIB_ASM_FILES := $(subst jni/,,$(LIBAVDEVICE_LIB_ASM_FILES)) LIBAVDEVICE_LIB_C_FILES := $(subst jni/,,$(LIBAVDEVICE_LIB_C_FILES)) LIBAVDEVICE_LIB_S_FILES := $(subst jni/,,$(LIBAVDEVICE_LIB_S_FILES)) LIBAVDEVICE_LIB_CPP_FILES := $(subst jni/,,$(LIBAVDEVICE_LIB_CPP_FILES)) include $(LOCAL_PATH)/libavdevice_ignore.mk LIBAVDEVICE_FILES := $(sort $(LIBAVDEVICE_LIB_ARCH_ASM_FILES)) $(sort $(LIBAVDEVICE_LIB_ARCH_C_FILES)) $(sort $(LIBAVDEVICE_LIB_ARCH_S_FILES)) $(sort $(LIBAVDEVICE_LIB_ASM_FILES)) $(sort $(LIBAVDEVICE_LIB_C_FILES)) $(sort $(LIBAVDEVICE_LIB_S_FILES)) $(sort $(LIBAVDEVICE_LIB_CPP_FILES)) LOCAL_SRC_FILES := $(LIBAVDEVICE_FILES) LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(FFMPEG_DIR) $(LOCAL_PATH)/$(FFMPEG_DIR)/libavdevice $(LOCAL_PATH)/$(FFMPEG_DIR)/libavdevice/$(TARGET_ARCH) LOCAL_LDLIBS += -lz -llog LOCAL_SHARED_LIBRARIES += libavutil libavcodec libavformat libavfilter LOCAL_MODULE := avdevice ifeq ($(TARGET_ARCH),arm) LOCAL_CFLAGS += -O3 -fpic -DANDROID LOCAL_ARM_MODE := arm else ifeq ($(TARGET_ARCH),x86) LOCAL_CFLAGS += -O3 -fpic -DANDROID else ifeq ($(TARGET_ARCH),mips) LOCAL_CFLAGS += -O3 -DANDROID -Wfatal-errors -Wno-deprecated -std=c99 -fomit-frame-pointer -mips32r2 -mdsp -mdspr2 -mhard-float -g -Wdeclaration-after-statement -Wall -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=missing-prototypes -Werror=return-type -Werror=vla endif include $(BUILD_SHARED_LIBRARY) ################################################################################ #  ffmpeg.exe   *.so  include $(CLEAR_VARS) LOCAL_SRC_FILES := $(subst jni/,,$(LOCAL_PATH)/$(FFMPEG_DIR)/cmdutils.c) $(subst jni/,,$(LOCAL_PATH)/$(FFMPEG_DIR)/ffmpeg.c) $(subst jni/,,$(LOCAL_PATH)/$(FFMPEG_DIR)/ffmpeg_opt.c) $(subst jni/,,$(LOCAL_PATH)/$(FFMPEG_DIR)/ffmpeg_filter.c) LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(FFMPEG_DIR) $(OPENCVROOT)/sdk/native/jni/include LOCAL_LDLIBS += -llog -ldl LOCAL_SHARED_LIBRARIES += libavcodec libavfilter libavformat libavresample libavutil libpostproc libswresample libswscale libopencv_java LOCAL_MODULE := ffmpeg ifeq ($(TARGET_ARCH),arm) LOCAL_CFLAGS += -D__STDC_CONSTANT_MACROS -O3 -DANDROID -DCONFIG_ARM_ARCH -fpic LOCAL_ARM_MODE := arm else ifeq ($(TARGET_ARCH),x86) LOCAL_CFLAGS += -D__STDC_CONSTANT_MACROS -O3 -DANDROID -DCONFIG_X86_ARCH -fpic else ifeq ($(TARGET_ARCH),mips) LOCAL_CFLAGS += -D__STDC_CONSTANT_MACROS -O3 -DANDROID -Wfatal-errors -Wno-deprecated -std=c99 -fomit-frame-pointer -mips32r2 -mdsp -mdspr2 -mhard-float -g -Wdeclaration-after-statement -Wall -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=return-type -Werror=vla endif include $(BUILD_SHARED_LIBRARY) LIBPOSTPROC_LIB_ARCH_ASM_FILES)) $ (sort $ (LIBPOSTPROC_LIB_ARCH_C_FILES)) $ (sort $ (LIBPOSTPROC_LIB_ARCH_S_FILES)) $ (sort $ (LIBPOSTPROC_LIB_ASM_FILES)) $ (sort $ (LIBPOSTPROC_LIB_C_FILES)) $ (sort $ (LIBPOSTPROC_LIB_S_FILES) ################################################################################ #    LOCAL_PATH    LOCAL_PATH := $(call my-dir) #    FFMPEG_DIR      FFmpeg FFMPEG_DIR := ffmpeg-2.1.3 #    OPENCVROOT     OpenCV Anroid SDK OPENCVROOT := D:\OpenCV-2.4.7.1-android-sdk #         x86 #   ,   x86         FFmpeg  #   NDK    *.asm ,        yasm #       yasm   *.asm     *.a ,       #   *.asm    bat- ifeq ($(TARGET_ARCH),x86) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := avcodec_asm LIBAVCODEC_ASM_A_FILE_PATH := $(LOCAL_PATH)/../obj/local/x86/objs/avcodec/ffmpeg-2.1.3/libavcodec/x86/libavcodec_asm.a LOCAL_SRC_FILES := $(subst jni/,,$(LIBAVCODEC_ASM_A_FILE_PATH)) include $(PREBUILT_STATIC_LIBRARY) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := avfilter_asm LIBAVFILTER_ASM_A_FILE_PATH := $(LOCAL_PATH)/../obj/local/x86/objs/avfilter/ffmpeg-2.1.3/libavfilter/x86/libavfilter_asm.a LOCAL_SRC_FILES := $(subst jni/,,$(LIBAVFILTER_ASM_A_FILE_PATH)) include $(PREBUILT_STATIC_LIBRARY) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := avresample_asm LIBAVRESAMPLE_ASM_A_FILE_PATH := $(LOCAL_PATH)/../obj/local/x86/objs/avresample/ffmpeg-2.1.3/libavresample/x86/libavresample_asm.a LOCAL_SRC_FILES := $(subst jni/,,$(LIBAVRESAMPLE_ASM_A_FILE_PATH)) include $(PREBUILT_STATIC_LIBRARY) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := avutil_asm LIBAVUTIL_ASM_A_FILE_PATH := $(LOCAL_PATH)/../obj/local/x86/objs/avutil/ffmpeg-2.1.3/libavutil/x86/libavutil_asm.a LOCAL_SRC_FILES := $(subst jni/,,$(LIBAVUTIL_ASM_A_FILE_PATH)) include $(PREBUILT_STATIC_LIBRARY) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := swresample_asm LIBSWRESAMPLE_ASM_A_FILE_PATH := $(LOCAL_PATH)/../obj/local/x86/objs/swresample/ffmpeg-2.1.3/libswresample/x86/libswresample_asm.a LOCAL_SRC_FILES := $(subst jni/,,$(LIBSWRESAMPLE_ASM_A_FILE_PATH)) include $(PREBUILT_STATIC_LIBRARY) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := swscale_asm LIBSWSCALE_ASM_A_FILE_PATH := $(LOCAL_PATH)/../obj/local/x86/objs/swscale/ffmpeg-2.1.3/libswscale/x86/libswscale_asm.a LOCAL_SRC_FILES := $(subst jni/,,$(LIBSWSCALE_ASM_A_FILE_PATH)) include $(PREBUILT_STATIC_LIBRARY) ################################################################################ endif #   -  FFmpeg ################################################################################ #   FFmpeg avutils.so #         include $(CLEAR_VARS) #          *.asm, *.c  ..    #      "$(TARGET_ARCH)" -            #   ffmpeg       ,      LIBAVUTIL_LIB_ARCH_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavutil/$(TARGET_ARCH)/*.asm) LIBAVUTIL_LIB_ARCH_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavutil/$(TARGET_ARCH)/*.c) LIBAVUTIL_LIB_ARCH_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavutil/$(TARGET_ARCH)/*.S) LIBAVUTIL_LIB_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavutil/*.asm) LIBAVUTIL_LIB_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavutil/*.c) LIBAVUTIL_LIB_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavutil/*.S) LIBAVUTIL_LIB_CPP_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavutil/*.cpp) # ,             NDK ,       #            "jni/"    LIBAVUTIL_LIB_ARCH_ASM_FILES := $(subst jni/,,$(LIBAVUTIL_LIB_ARCH_ASM_FILES)) LIBAVUTIL_LIB_ARCH_C_FILES := $(subst jni/,,$(LIBAVUTIL_LIB_ARCH_C_FILES)) LIBAVUTIL_LIB_ARCH_S_FILES := $(subst jni/,,$(LIBAVUTIL_LIB_ARCH_S_FILES)) LIBAVUTIL_LIB_ASM_FILES := $(subst jni/,,$(LIBAVUTIL_LIB_ASM_FILES)) LIBAVUTIL_LIB_C_FILES := $(subst jni/,,$(LIBAVUTIL_LIB_C_FILES)) LIBAVUTIL_LIB_S_FILES := $(subst jni/,,$(LIBAVUTIL_LIB_S_FILES)) LIBAVUTIL_LIB_CPP_FILES := $(subst jni/,,$(LIBAVUTIL_LIB_CPP_FILES)) #    make-,    ,    ,    include $(LOCAL_PATH)/libavutil_ignore.mk #      ,    LIBAVUTIL_FILES        avutils,    LIBAVUTIL_FILES := $(sort $(LIBAVUTIL_LIB_ARCH_ASM_FILES)) $(sort $(LIBAVUTIL_LIB_ARCH_C_FILES)) $(sort $(LIBAVUTIL_LIB_ARCH_S_FILES)) $(sort $(LIBAVUTIL_LIB_ASM_FILES)) $(sort $(LIBAVUTIL_LIB_C_FILES)) $(sort $(LIBAVUTIL_LIB_S_FILES)) $(sort $(LIBAVUTIL_LIB_CPP_FILES)) #       #     LOCAL_SRC_FILES := $(LIBAVUTIL_FILES) #      LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(FFMPEG_DIR) $(LOCAL_PATH)/$(FFMPEG_DIR)/libavutil/$(TARGET_ARCH) # -  FFmpeg      zlib  log,      LOCAL_LDLIBS += -lz -llog #   ,      libavutil.so LOCAL_MODULE := avutil #  ,   TARGET_ARCH            #         LOCAL_CFLAGS     #       ,   .. ifeq ($(TARGET_ARCH),arm) LOCAL_CFLAGS += -O3 -fpic -DANDROID LOCAL_ARM_MODE := arm else ifeq ($(TARGET_ARCH),x86) LOCAL_CFLAGS += -O3 -fpic -DANDROID #      x86    yasm   LOCAL_STATIC_LIBRARIES += avutil_asm else ifeq ($(TARGET_ARCH),mips) LOCAL_CFLAGS += -O3 -DANDROID -Wfatal-errors -Wno-deprecated -std=c99 -fomit-frame-pointer -mips32r2 -mdsp -mdspr2 -mhard-float -g -Wdeclaration-after-statement -Wall -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=missing-prototypes -Werror=return-type -Werror=vla endif #     make-  NDK,    shared-,  *.so  include $(BUILD_SHARED_LIBRARY) ################################################################################ #   FFmpeg avcodec.so include $(CLEAR_VARS) LIBAVCODEC_LIB_ARCH_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavcodec/$(TARGET_ARCH)/*.asm) LIBAVCODEC_LIB_ARCH_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavcodec/$(TARGET_ARCH)/*.c) LIBAVCODEC_LIB_ARCH_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavcodec/$(TARGET_ARCH)/*.S) LIBAVCODEC_LIB_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavcodec/*.asm) LIBAVCODEC_LIB_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavcodec/*.c) LIBAVCODEC_LIB_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavcodec/*.S) LIBAVCODEC_LIB_CPP_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavcodec/*.cpp) LIBAVCODEC_LIB_ARCH_ASM_FILES := $(subst jni/,,$(LIBAVCODEC_LIB_ARCH_ASM_FILES)) LIBAVCODEC_LIB_ARCH_C_FILES := $(subst jni/,,$(LIBAVCODEC_LIB_ARCH_C_FILES)) LIBAVCODEC_LIB_ARCH_S_FILES := $(subst jni/,,$(LIBAVCODEC_LIB_ARCH_S_FILES)) LIBAVCODEC_LIB_ASM_FILES := $(subst jni/,,$(LIBAVCODEC_LIB_ASM_FILES)) LIBAVCODEC_LIB_C_FILES := $(subst jni/,,$(LIBAVCODEC_LIB_C_FILES)) LIBAVCODEC_LIB_S_FILES := $(subst jni/,,$(LIBAVCODEC_LIB_S_FILES)) LIBAVCODEC_LIB_CPP_FILES := $(subst jni/,,$(LIBAVCODEC_LIB_CPP_FILES)) include $(LOCAL_PATH)/libavcodec_ignore.mk LIBAVCODEC_FILES := $(sort $(LIBAVCODEC_LIB_ARCH_ASM_FILES)) $(sort $(LIBAVCODEC_LIB_ARCH_C_FILES)) $(sort $(LIBAVCODEC_LIB_ARCH_S_FILES)) $(sort $(LIBAVCODEC_LIB_ASM_FILES)) $(sort $(LIBAVCODEC_LIB_C_FILES)) $(sort $(LIBAVCODEC_LIB_S_FILES)) $(sort $(LIBAVCODEC_LIB_CPP_FILES)) LOCAL_SRC_FILES := $(LIBAVCODEC_FILES) LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(FFMPEG_DIR) $(LOCAL_PATH)/$(FFMPEG_DIR)/libavcodec $(LOCAL_PATH)/$(FFMPEG_DIR)/libavcodec/$(TARGET_ARCH) LOCAL_LDLIBS += -lz -llog #    ffmpeg   ,              , #  ,      ,     -  LOCAL_SHARED_LIBRARIES += libavutil LOCAL_MODULE := avcodec ifeq ($(TARGET_ARCH),arm) LOCAL_CFLAGS += -O3 -fpic -DANDROID LOCAL_ARM_MODE := arm else ifeq ($(TARGET_ARCH),x86) LOCAL_CFLAGS += -O3 -fno-pic -DANDROID LOCAL_STATIC_LIBRARIES += avutil_asm avcodec_asm LOCAL_SHARED_LIBRARIES += libavutil_asm libavcodec_asm else ifeq ($(TARGET_ARCH),mips) LOCAL_CFLAGS += -O3 -DANDROID -Wfatal-errors -Wno-deprecated -std=c99 -fomit-frame-pointer -mips32r2 -mdsp -mdspr2 -mhard-float -g -Wdeclaration-after-statement -Wall -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=missing-prototypes -Werror=return-type -Werror=vla endif include $(BUILD_SHARED_LIBRARY) ################################################################################ #   FFmpeg avformat.so include $(CLEAR_VARS) LIBAVFORMAT_LIB_ARCH_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavformat/$(TARGET_ARCH)/*.asm) LIBAVFORMAT_LIB_ARCH_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavformat/$(TARGET_ARCH)/*.c) LIBAVFORMAT_LIB_ARCH_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavformat/$(TARGET_ARCH)/*.S) LIBAVFORMAT_LIB_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavformat/*.asm) LIBAVFORMAT_LIB_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavformat/*.c) LIBAVFORMAT_LIB_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavformat/*.S) LIBAVFORMAT_LIB_CPP_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavformat/*.cpp) LIBAVFORMAT_LIB_ARCH_ASM_FILES := $(subst jni/,,$(LIBAVFORMAT_LIB_ARCH_ASM_FILES)) LIBAVFORMAT_LIB_ARCH_C_FILES := $(subst jni/,,$(LIBAVFORMAT_LIB_ARCH_C_FILES)) LIBAVFORMAT_LIB_ARCH_S_FILES := $(subst jni/,,$(LIBAVFORMAT_LIB_ARCH_S_FILES)) LIBAVFORMAT_LIB_ASM_FILES := $(subst jni/,,$(LIBAVFORMAT_LIB_ASM_FILES)) LIBAVFORMAT_LIB_C_FILES := $(subst jni/,,$(LIBAVFORMAT_LIB_C_FILES)) LIBAVFORMAT_LIB_S_FILES := $(subst jni/,,$(LIBAVFORMAT_LIB_S_FILES)) LIBAVFORMAT_LIB_CPP_FILES := $(subst jni/,,$(LIBAVFORMAT_LIB_CPP_FILES)) include $(LOCAL_PATH)/libavformat_ignore.mk LIBAVFORMAT_FILES := $(sort $(LIBAVFORMAT_LIB_ARCH_ASM_FILES)) $(sort $(LIBAVFORMAT_LIB_ARCH_C_FILES)) $(sort $(LIBAVFORMAT_LIB_ARCH_S_FILES)) $(sort $(LIBAVFORMAT_LIB_ASM_FILES)) $(sort $(LIBAVFORMAT_LIB_C_FILES)) $(sort $(LIBAVFORMAT_LIB_S_FILES)) $(sort $(LIBAVFORMAT_LIB_CPP_FILES)) LOCAL_SRC_FILES := $(LIBAVFORMAT_FILES) LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(FFMPEG_DIR) $(LOCAL_PATH)/$(FFMPEG_DIR)/libavformat $(LOCAL_PATH)/$(FFMPEG_DIR)/libavformat/$(TARGET_ARCH) LOCAL_LDLIBS += -lz -llog LOCAL_SHARED_LIBRARIES += libavutil libavcodec LOCAL_MODULE := avformat ifeq ($(TARGET_ARCH),arm) LOCAL_CFLAGS += -O3 -fpic -DANDROID LOCAL_ARM_MODE := arm else ifeq ($(TARGET_ARCH),x86) LOCAL_CFLAGS += -O3 -fpic -DANDROID else ifeq ($(TARGET_ARCH),mips) LOCAL_CFLAGS += -O3 -DANDROID -Wfatal-errors -Wno-deprecated -std=c99 -fomit-frame-pointer -mips32r2 -mdsp -mdspr2 -mhard-float -g -Wdeclaration-after-statement -Wall -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=missing-prototypes -Werror=return-type -Werror=vla endif include $(BUILD_SHARED_LIBRARY) ################################################################################ #   FFmpeg swscale.so include $(CLEAR_VARS) LIBSWSCALE_LIB_ARCH_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswscale/$(TARGET_ARCH)/*.asm) LIBSWSCALE_LIB_ARCH_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswscale/$(TARGET_ARCH)/*.c) LIBSWSCALE_LIB_ARCH_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswscale/$(TARGET_ARCH)/*.S) LIBSWSCALE_LIB_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswscale/*.asm) LIBSWSCALE_LIB_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswscale/*.c) LIBSWSCALE_LIB_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswscale/*.S) LIBSWSCALE_LIB_CPP_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswscale/*.cpp) LIBSWSCALE_LIB_ARCH_ASM_FILES := $(subst jni/,,$(LIBSWSCALE_LIB_ARCH_ASM_FILES)) LIBSWSCALE_LIB_ARCH_C_FILES := $(subst jni/,,$(LIBSWSCALE_LIB_ARCH_C_FILES)) LIBSWSCALE_LIB_ARCH_S_FILES := $(subst jni/,,$(LIBSWSCALE_LIB_ARCH_S_FILES)) LIBSWSCALE_LIB_ASM_FILES := $(subst jni/,,$(LIBSWSCALE_LIB_ASM_FILES)) LIBSWSCALE_LIB_C_FILES := $(subst jni/,,$(LIBSWSCALE_LIB_C_FILES)) LIBSWSCALE_LIB_S_FILES := $(subst jni/,,$(LIBSWSCALE_LIB_S_FILES)) LIBSWSCALE_LIB_CPP_FILES := $(subst jni/,,$(LIBSWSCALE_LIB_CPP_FILES)) include $(LOCAL_PATH)/libswscale_ignore.mk LIBSWSCALE_FILES := $(sort $(LIBSWSCALE_LIB_ARCH_ASM_FILES)) $(sort $(LIBSWSCALE_LIB_ARCH_C_FILES)) $(sort $(LIBSWSCALE_LIB_ARCH_S_FILES)) $(sort $(LIBSWSCALE_LIB_ASM_FILES)) $(sort $(LIBSWSCALE_LIB_C_FILES)) $(sort $(LIBSWSCALE_LIB_S_FILES)) $(sort $(LIBSWSCALE_LIB_CPP_FILES)) LOCAL_SRC_FILES := $(LIBSWSCALE_FILES) LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(FFMPEG_DIR) $(LOCAL_PATH)/$(FFMPEG_DIR)/libswscale $(LOCAL_PATH)/$(FFMPEG_DIR)/libswscale/$(TARGET_ARCH) LOCAL_LDLIBS += -lz -llog LOCAL_SHARED_LIBRARIES += libavutil LOCAL_MODULE := swscale ifeq ($(TARGET_ARCH),arm) LOCAL_CFLAGS += -O3 -fpic -DANDROID LOCAL_ARM_MODE := arm else ifeq ($(TARGET_ARCH),x86) LOCAL_CFLAGS += -O3 -fno-pic -DANDROID LOCAL_STATIC_LIBRARIES += avutil_asm swscale_asm else ifeq ($(TARGET_ARCH),mips) LOCAL_CFLAGS += -O3 -DANDROID -Wfatal-errors -Wno-deprecated -std=c99 -fomit-frame-pointer -mips32r2 -mdsp -mdspr2 -mhard-float -g -Wdeclaration-after-statement -Wall -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=missing-prototypes -Werror=return-type -Werror=vla endif include $(BUILD_SHARED_LIBRARY) ################################################################################ #   FFmpeg postproc.so include $(CLEAR_VARS) LIBPOSTPROC_LIB_ARCH_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libpostproc/$(TARGET_ARCH)/*.asm) LIBPOSTPROC_LIB_ARCH_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libpostproc/$(TARGET_ARCH)/*.c) LIBPOSTPROC_LIB_ARCH_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libpostproc/$(TARGET_ARCH)/*.S) LIBPOSTPROC_LIB_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libpostproc/*.asm) LIBPOSTPROC_LIB_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libpostproc/*.c) LIBPOSTPROC_LIB_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libpostproc/*.S) LIBPOSTPROC_LIB_CPP_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libpostproc/*.cpp) LIBPOSTPROC_LIB_ARCH_ASM_FILES := $(subst jni/,,$(LIBPOSTPROC_LIB_ARCH_ASM_FILES)) LIBPOSTPROC_LIB_ARCH_C_FILES := $(subst jni/,,$(LIBPOSTPROC_LIB_ARCH_C_FILES)) LIBPOSTPROC_LIB_ARCH_S_FILES := $(subst jni/,,$(LIBPOSTPROC_LIB_ARCH_S_FILES)) LIBPOSTPROC_LIB_ASM_FILES := $(subst jni/,,$(LIBPOSTPROC_LIB_ASM_FILES)) LIBPOSTPROC_LIB_C_FILES := $(subst jni/,,$(LIBPOSTPROC_LIB_C_FILES)) LIBPOSTPROC_LIB_S_FILES := $(subst jni/,,$(LIBPOSTPROC_LIB_S_FILES)) LIBPOSTPROC_LIB_CPP_FILES := $(subst jni/,,$(LIBPOSTPROC_LIB_CPP_FILES)) include $(LOCAL_PATH)/libpostproc_ignore.mk LIBPOSTPROC_FILES := $(sort $(LIBPOSTPROC_LIB_ARCH_ASM_FILES)) $(sort $(LIBPOSTPROC_LIB_ARCH_C_FILES)) $(sort $(LIBPOSTPROC_LIB_ARCH_S_FILES)) $(sort $(LIBPOSTPROC_LIB_ASM_FILES)) $(sort $(LIBPOSTPROC_LIB_C_FILES)) $(sort $(LIBPOSTPROC_LIB_S_FILES)) $(sort $(LIBPOSTPROC_LIB_CPP_FILES)) LOCAL_SRC_FILES := $(LIBPOSTPROC_FILES) LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(FFMPEG_DIR) $(LOCAL_PATH)/$(FFMPEG_DIR)/libpostproc $(LOCAL_PATH)/$(FFMPEG_DIR)/libpostproc/$(TARGET_ARCH) LOCAL_LDLIBS += -lz -llog LOCAL_SHARED_LIBRARIES += libavutil LOCAL_MODULE := postproc ifeq ($(TARGET_ARCH),arm) LOCAL_CFLAGS += -O3 -fpic -DANDROID LOCAL_ARM_MODE := arm else ifeq ($(TARGET_ARCH),x86) LOCAL_CFLAGS += -O3 -fno-pic -DANDROID else ifeq ($(TARGET_ARCH),mips) LOCAL_CFLAGS += -O3 -DANDROID -Wfatal-errors -Wno-deprecated -std=c99 -fomit-frame-pointer -mips32r2 -mdsp -mdspr2 -mhard-float -g -Wdeclaration-after-statement -Wall -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=missing-prototypes -Werror=return-type -Werror=vla endif include $(BUILD_SHARED_LIBRARY) ################################################################################ #   FFmpeg swresample.so include $(CLEAR_VARS) LIBSWRESAMPLE_LIB_ARCH_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswresample/$(TARGET_ARCH)/*.asm) LIBSWRESAMPLE_LIB_ARCH_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswresample/$(TARGET_ARCH)/*.c) LIBSWRESAMPLE_LIB_ARCH_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswresample/$(TARGET_ARCH)/*.S) LIBSWRESAMPLE_LIB_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswresample/*.asm) LIBSWRESAMPLE_LIB_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswresample/*.c) LIBSWRESAMPLE_LIB_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswresample/*.S) LIBSWRESAMPLE_LIB_CPP_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libswresample/*.cpp) LIBSWRESAMPLE_LIB_ARCH_ASM_FILES := $(subst jni/,,$(LIBSWRESAMPLE_LIB_ARCH_ASM_FILES)) LIBSWRESAMPLE_LIB_ARCH_C_FILES := $(subst jni/,,$(LIBSWRESAMPLE_LIB_ARCH_C_FILES)) LIBSWRESAMPLE_LIB_ARCH_S_FILES := $(subst jni/,,$(LIBSWRESAMPLE_LIB_ARCH_S_FILES)) LIBSWRESAMPLE_LIB_ASM_FILES := $(subst jni/,,$(LIBSWRESAMPLE_LIB_ASM_FILES)) LIBSWRESAMPLE_LIB_C_FILES := $(subst jni/,,$(LIBSWRESAMPLE_LIB_C_FILES)) LIBSWRESAMPLE_LIB_S_FILES := $(subst jni/,,$(LIBSWRESAMPLE_LIB_S_FILES)) LIBSWRESAMPLE_LIB_CPP_FILES := $(subst jni/,,$(LIBSWRESAMPLE_LIB_CPP_FILES)) include $(LOCAL_PATH)/libswresample_ignore.mk LIBSWRESAMPLE_FILES := $(sort $(LIBSWRESAMPLE_LIB_ARCH_ASM_FILES)) $(sort $(LIBSWRESAMPLE_LIB_ARCH_C_FILES)) $(sort $(LIBSWRESAMPLE_LIB_ARCH_S_FILES)) $(sort $(LIBSWRESAMPLE_LIB_ASM_FILES)) $(sort $(LIBSWRESAMPLE_LIB_C_FILES)) $(sort $(LIBSWRESAMPLE_LIB_S_FILES)) $(sort $(LIBSWRESAMPLE_LIB_CPP_FILES)) LOCAL_SRC_FILES := $(LIBSWRESAMPLE_FILES) LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(FFMPEG_DIR) $(LOCAL_PATH)/$(FFMPEG_DIR)/libswresample $(LOCAL_PATH)/$(FFMPEG_DIR)/libswresample/$(TARGET_ARCH) LOCAL_LDLIBS += -lz -llog LOCAL_SHARED_LIBRARIES += libavutil LOCAL_MODULE := swresample ifeq ($(TARGET_ARCH),arm) LOCAL_CFLAGS += -O3 -fpic -DANDROID LOCAL_ARM_MODE := arm else ifeq ($(TARGET_ARCH),x86) LOCAL_CFLAGS += -O3 -fpic -DANDROID LOCAL_STATIC_LIBRARIES += avutil_asm swresample_asm else ifeq ($(TARGET_ARCH),mips) LOCAL_CFLAGS += -O3 -DANDROID -Wfatal-errors -Wno-deprecated -std=c99 -fomit-frame-pointer -mips32r2 -mdsp -mdspr2 -mhard-float -g -Wdeclaration-after-statement -Wall -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=missing-prototypes -Werror=return-type -Werror=vla endif include $(BUILD_SHARED_LIBRARY) ################################################################################ #   FFmpeg avresample.so include $(CLEAR_VARS) LIBAVRESAMPLE_LIB_ARCH_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavresample/$(TARGET_ARCH)/*.asm) LIBAVRESAMPLE_LIB_ARCH_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavresample/$(TARGET_ARCH)/*.c) LIBAVRESAMPLE_LIB_ARCH_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavresample/$(TARGET_ARCH)/*.S) LIBAVRESAMPLE_LIB_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavresample/*.asm) LIBAVRESAMPLE_LIB_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavresample/*.c) LIBAVRESAMPLE_LIB_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavresample/*.S) LIBAVRESAMPLE_LIB_CPP_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavresample/*.cpp) LIBAVRESAMPLE_LIB_ARCH_ASM_FILES := $(subst jni/,,$(LIBAVRESAMPLE_LIB_ARCH_ASM_FILES)) LIBAVRESAMPLE_LIB_ARCH_C_FILES := $(subst jni/,,$(LIBAVRESAMPLE_LIB_ARCH_C_FILES)) LIBAVRESAMPLE_LIB_ARCH_S_FILES := $(subst jni/,,$(LIBAVRESAMPLE_LIB_ARCH_S_FILES)) LIBAVRESAMPLE_LIB_ASM_FILES := $(subst jni/,,$(LIBAVRESAMPLE_LIB_ASM_FILES)) LIBAVRESAMPLE_LIB_C_FILES := $(subst jni/,,$(LIBAVRESAMPLE_LIB_C_FILES)) LIBAVRESAMPLE_LIB_S_FILES := $(subst jni/,,$(LIBAVRESAMPLE_LIB_S_FILES)) LIBAVRESAMPLE_LIB_CPP_FILES := $(subst jni/,,$(LIBAVRESAMPLE_LIB_CPP_FILES)) include $(LOCAL_PATH)/libavresample_ignore.mk LIBAVRESAMPLE_FILES := $(sort $(LIBAVRESAMPLE_LIB_ARCH_ASM_FILES)) $(sort $(LIBAVRESAMPLE_LIB_ARCH_C_FILES)) $(sort $(LIBAVRESAMPLE_LIB_ARCH_S_FILES)) $(sort $(LIBAVRESAMPLE_LIB_ASM_FILES)) $(sort $(LIBAVRESAMPLE_LIB_C_FILES)) $(sort $(LIBAVRESAMPLE_LIB_S_FILES)) $(sort $(LIBAVRESAMPLE_LIB_CPP_FILES)) LOCAL_SRC_FILES := $(LIBAVRESAMPLE_FILES) LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(FFMPEG_DIR) $(LOCAL_PATH)/$(FFMPEG_DIR)/libavresample $(LOCAL_PATH)/$(FFMPEG_DIR)/libavresample/$(TARGET_ARCH) LOCAL_LDLIBS += -lz -llog LOCAL_SHARED_LIBRARIES += libavutil LOCAL_MODULE := avresample ifeq ($(TARGET_ARCH),arm) LOCAL_CFLAGS += -O3 -fpic -DANDROID LOCAL_ARM_MODE := arm else ifeq ($(TARGET_ARCH),x86) LOCAL_CFLAGS += -O3 -fpic -DANDROID LOCAL_STATIC_LIBRARIES += avutil_asm avresample_asm else ifeq ($(TARGET_ARCH),mips) LOCAL_CFLAGS += -O3 -DANDROID -Wfatal-errors -Wno-deprecated -std=c99 -fomit-frame-pointer -mips32r2 -mdsp -mdspr2 -mhard-float -g -Wdeclaration-after-statement -Wall -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=missing-prototypes -Werror=return-type -Werror=vla endif include $(BUILD_SHARED_LIBRARY) ################################################################################ #   OpenCV include $(CLEAR_VARS) OPENCV_CAMERA_MODULES := off OPENCV_INSTALL_MODULES := on include $(OPENCVROOT)/sdk/native/jni/OpenCV.mk ################################################################################ #   FFmpeg avfilter.so include $(CLEAR_VARS) LIBAVFILTER_LIB_ARCH_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/$(TARGET_ARCH)/*.asm) LIBAVFILTER_LIB_ARCH_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/$(TARGET_ARCH)/*.c) LIBAVFILTER_LIB_ARCH_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/$(TARGET_ARCH)/*.S) LIBAVFILTER_LIB_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/*.asm) LIBAVFILTER_LIB_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/*.c) LIBAVFILTER_LIB_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/*.S) LIBAVFILTER_LIB_CPP_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/*.cpp) LIBAVFILTER_LIB_EX_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/libmpcodecs/*.c) LIBAVFILTER_LIB_ARCH_ASM_FILES := $(subst jni/,,$(LIBAVFILTER_LIB_ARCH_ASM_FILES)) LIBAVFILTER_LIB_ARCH_C_FILES := $(subst jni/,,$(LIBAVFILTER_LIB_ARCH_C_FILES)) LIBAVFILTER_LIB_ARCH_S_FILES := $(subst jni/,,$(LIBAVFILTER_LIB_ARCH_S_FILES)) LIBAVFILTER_LIB_ASM_FILES := $(subst jni/,,$(LIBAVFILTER_LIB_ASM_FILES)) LIBAVFILTER_LIB_C_FILES := $(subst jni/,,$(LIBAVFILTER_LIB_C_FILES)) LIBAVFILTER_LIB_S_FILES := $(subst jni/,,$(LIBAVFILTER_LIB_S_FILES)) LIBAVFILTER_LIB_CPP_FILES := $(subst jni/,,$(LIBAVFILTER_LIB_CPP_FILES)) LIBAVFILTER_LIB_EX_C_FILES := $(subst jni/,,$(LIBAVFILTER_LIB_EX_C_FILES)) include $(LOCAL_PATH)/libavfilter_ignore.mk LIBAVFILTER_FILES := $(sort $(LIBAVFILTER_LIB_ARCH_ASM_FILES)) $(sort $(LIBAVFILTER_LIB_ARCH_C_FILES)) $(sort $(LIBAVFILTER_LIB_ARCH_S_FILES)) $(sort $(LIBAVFILTER_LIB_ASM_FILES)) $(sort $(LIBAVFILTER_LIB_C_FILES)) $(sort $(LIBAVFILTER_LIB_S_FILES)) $(sort $(LIBAVFILTER_LIB_CPP_FILES)) $(sort $(LIBAVFILTER_LIB_EX_C_FILES)) LOCAL_SRC_FILES := $(LIBAVFILTER_FILES) LOCAL_C_INCLUDES += $(OPENCVROOT)/sdk/native/jni/include $(LOCAL_PATH)/$(FFMPEG_DIR) $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/$(TARGET_ARCH) $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/libmpcodecs $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/libmpcodecs/libvo LOCAL_LDLIBS += -lz -llog LOCAL_SHARED_LIBRARIES += libavutil libavcodec libavformat libswresample libpostproc libswscale libavresample libopencv_java LOCAL_MODULE := avfilter ifeq ($(TARGET_ARCH),arm) LOCAL_CFLAGS += -D__STDC_CONSTANT_MACROS -O3 -fpic -DANDROID LOCAL_ARM_MODE := arm else ifeq ($(TARGET_ARCH),x86) LOCAL_CFLAGS += -D__STDC_CONSTANT_MACROS -O3 -fno-pic -DANDROID LOCAL_STATIC_LIBRARIES += avutil_asm avfilter_asm else ifeq ($(TARGET_ARCH),mips) LOCAL_CFLAGS += -D__STDC_CONSTANT_MACROS -O3 -DANDROID -Wfatal-errors -Wno-deprecated -std=c99 -fomit-frame-pointer -mips32r2 -mdsp -mdspr2 -mhard-float -g -Wdeclaration-after-statement -Wall -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=missing-prototypes -Werror=return-type -Werror=vla endif include $(BUILD_SHARED_LIBRARY) ################################################################################ #   FFmpeg avdevice.so include $(CLEAR_VARS) LIBAVDEVICE_LIB_ARCH_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavdevice/$(TARGET_ARCH)/*.asm) LIBAVDEVICE_LIB_ARCH_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavdevice/$(TARGET_ARCH)/*.c) LIBAVDEVICE_LIB_ARCH_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavdevice/$(TARGET_ARCH)/*.S) LIBAVDEVICE_LIB_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavdevice/*.asm) LIBAVDEVICE_LIB_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavdevice/*.c) LIBAVDEVICE_LIB_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavdevice/*.S) LIBAVDEVICE_LIB_CPP_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavdevice/*.cpp) LIBAVDEVICE_LIB_ARCH_ASM_FILES := $(subst jni/,,$(LIBAVDEVICE_LIB_ARCH_ASM_FILES)) LIBAVDEVICE_LIB_ARCH_C_FILES := $(subst jni/,,$(LIBAVDEVICE_LIB_ARCH_C_FILES)) LIBAVDEVICE_LIB_ARCH_S_FILES := $(subst jni/,,$(LIBAVDEVICE_LIB_ARCH_S_FILES)) LIBAVDEVICE_LIB_ASM_FILES := $(subst jni/,,$(LIBAVDEVICE_LIB_ASM_FILES)) LIBAVDEVICE_LIB_C_FILES := $(subst jni/,,$(LIBAVDEVICE_LIB_C_FILES)) LIBAVDEVICE_LIB_S_FILES := $(subst jni/,,$(LIBAVDEVICE_LIB_S_FILES)) LIBAVDEVICE_LIB_CPP_FILES := $(subst jni/,,$(LIBAVDEVICE_LIB_CPP_FILES)) include $(LOCAL_PATH)/libavdevice_ignore.mk LIBAVDEVICE_FILES := $(sort $(LIBAVDEVICE_LIB_ARCH_ASM_FILES)) $(sort $(LIBAVDEVICE_LIB_ARCH_C_FILES)) $(sort $(LIBAVDEVICE_LIB_ARCH_S_FILES)) $(sort $(LIBAVDEVICE_LIB_ASM_FILES)) $(sort $(LIBAVDEVICE_LIB_C_FILES)) $(sort $(LIBAVDEVICE_LIB_S_FILES)) $(sort $(LIBAVDEVICE_LIB_CPP_FILES)) LOCAL_SRC_FILES := $(LIBAVDEVICE_FILES) LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(FFMPEG_DIR) $(LOCAL_PATH)/$(FFMPEG_DIR)/libavdevice $(LOCAL_PATH)/$(FFMPEG_DIR)/libavdevice/$(TARGET_ARCH) LOCAL_LDLIBS += -lz -llog LOCAL_SHARED_LIBRARIES += libavutil libavcodec libavformat libavfilter LOCAL_MODULE := avdevice ifeq ($(TARGET_ARCH),arm) LOCAL_CFLAGS += -O3 -fpic -DANDROID LOCAL_ARM_MODE := arm else ifeq ($(TARGET_ARCH),x86) LOCAL_CFLAGS += -O3 -fpic -DANDROID else ifeq ($(TARGET_ARCH),mips) LOCAL_CFLAGS += -O3 -DANDROID -Wfatal-errors -Wno-deprecated -std=c99 -fomit-frame-pointer -mips32r2 -mdsp -mdspr2 -mhard-float -g -Wdeclaration-after-statement -Wall -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=missing-prototypes -Werror=return-type -Werror=vla endif include $(BUILD_SHARED_LIBRARY) ################################################################################ #  ffmpeg.exe   *.so  include $(CLEAR_VARS) LOCAL_SRC_FILES := $(subst jni/,,$(LOCAL_PATH)/$(FFMPEG_DIR)/cmdutils.c) $(subst jni/,,$(LOCAL_PATH)/$(FFMPEG_DIR)/ffmpeg.c) $(subst jni/,,$(LOCAL_PATH)/$(FFMPEG_DIR)/ffmpeg_opt.c) $(subst jni/,,$(LOCAL_PATH)/$(FFMPEG_DIR)/ffmpeg_filter.c) LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(FFMPEG_DIR) $(OPENCVROOT)/sdk/native/jni/include LOCAL_LDLIBS += -llog -ldl LOCAL_SHARED_LIBRARIES += libavcodec libavfilter libavformat libavresample libavutil libpostproc libswresample libswscale libopencv_java LOCAL_MODULE := ffmpeg ifeq ($(TARGET_ARCH),arm) LOCAL_CFLAGS += -D__STDC_CONSTANT_MACROS -O3 -DANDROID -DCONFIG_ARM_ARCH -fpic LOCAL_ARM_MODE := arm else ifeq ($(TARGET_ARCH),x86) LOCAL_CFLAGS += -D__STDC_CONSTANT_MACROS -O3 -DANDROID -DCONFIG_X86_ARCH -fpic else ifeq ($(TARGET_ARCH),mips) LOCAL_CFLAGS += -D__STDC_CONSTANT_MACROS -O3 -DANDROID -Wfatal-errors -Wno-deprecated -std=c99 -fomit-frame-pointer -mips32r2 -mdsp -mdspr2 -mhard-float -g -Wdeclaration-after-statement -Wall -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=return-type -Werror=vla endif include $(BUILD_SHARED_LIBRARY) 


Application.mk -
 # ,      STL APP_STL := gnustl_static #     APP_CPPFLAGS := -frtti -fexceptions #      ,   , : "APP_ABI := armeabi x86 mips" #         APP_ABI := armeabi # APP_ABI := x86 # APP_ABI := mips APP_PLATFORM := android-9 


libavfilter_ignore.mk - ,
 #   : af_ladspa.c, asrc_flite.c, deshake_opencl.c, f_zmq.c, unsharp_opencl.c, unsharp_opencl_kernel.c, vf_drawtext.c, vf_frei0r.c, vf_libopencv.c, vf_subtitles.c, vf_vidstabdetect.c, vf_vidstabtransform.c, vidstabutils.c LIBAVFILTER_LIB_FILEPATH_af_ladspa_c := $(FFMPEG_DIR)/libavfilter/af_ladspa.c LIBAVFILTER_LIB_C_FILES := $(subst $(LIBAVFILTER_LIB_FILEPATH_af_ladspa_c),,$(LIBAVFILTER_LIB_C_FILES)) LIBAVFILTER_LIB_FILEPATH_asrc_flite_c := $(FFMPEG_DIR)/libavfilter/asrc_flite.c LIBAVFILTER_LIB_C_FILES := $(subst $(LIBAVFILTER_LIB_FILEPATH_asrc_flite_c),,$(LIBAVFILTER_LIB_C_FILES)) LIBAVFILTER_LIB_FILEPATH_deshake_opencl_c := $(FFMPEG_DIR)/libavfilter/deshake_opencl.c LIBAVFILTER_LIB_C_FILES := $(subst $(LIBAVFILTER_LIB_FILEPATH_deshake_opencl_c),,$(LIBAVFILTER_LIB_C_FILES)) LIBAVFILTER_LIB_FILEPATH_f_zmq_c := $(FFMPEG_DIR)/libavfilter/f_zmq.c LIBAVFILTER_LIB_C_FILES := $(subst $(LIBAVFILTER_LIB_FILEPATH_f_zmq_c),,$(LIBAVFILTER_LIB_C_FILES)) LIBAVFILTER_LIB_FILEPATH_unsharp_opencl_c := $(FFMPEG_DIR)/libavfilter/unsharp_opencl.c LIBAVFILTER_LIB_C_FILES := $(subst $(LIBAVFILTER_LIB_FILEPATH_unsharp_opencl_c),,$(LIBAVFILTER_LIB_C_FILES)) LIBAVFILTER_LIB_FILEPATH_unsharp_opencl_kernel_c := $(FFMPEG_DIR)/libavfilter/unsharp_opencl_kernel.c LIBAVFILTER_LIB_C_FILES := $(subst $(LIBAVFILTER_LIB_FILEPATH_unsharp_opencl_kernel_c),,$(LIBAVFILTER_LIB_C_FILES)) LIBAVFILTER_LIB_FILEPATH_vf_drawtext_c := $(FFMPEG_DIR)/libavfilter/vf_drawtext.c LIBAVFILTER_LIB_C_FILES := $(subst $(LIBAVFILTER_LIB_FILEPATH_vf_drawtext_c),,$(LIBAVFILTER_LIB_C_FILES)) LIBAVFILTER_LIB_FILEPATH_vf_frei0r_c := $(FFMPEG_DIR)/libavfilter/vf_frei0r.c LIBAVFILTER_LIB_C_FILES := $(subst $(LIBAVFILTER_LIB_FILEPATH_vf_frei0r_c),,$(LIBAVFILTER_LIB_C_FILES)) LIBAVFILTER_LIB_FILEPATH_vf_libopencv_c := $(FFMPEG_DIR)/libavfilter/vf_libopencv.c LIBAVFILTER_LIB_C_FILES := $(subst $(LIBAVFILTER_LIB_FILEPATH_vf_libopencv_c),,$(LIBAVFILTER_LIB_C_FILES)) LIBAVFILTER_LIB_FILEPATH_vf_subtitles_c := $(FFMPEG_DIR)/libavfilter/vf_subtitles.c LIBAVFILTER_LIB_C_FILES := $(subst $(LIBAVFILTER_LIB_FILEPATH_vf_subtitles_c),,$(LIBAVFILTER_LIB_C_FILES)) LIBAVFILTER_LIB_FILEPATH_vf_vidstabdetect_c := $(FFMPEG_DIR)/libavfilter/vf_vidstabdetect.c LIBAVFILTER_LIB_C_FILES := $(subst $(LIBAVFILTER_LIB_FILEPATH_vf_vidstabdetect_c),,$(LIBAVFILTER_LIB_C_FILES)) LIBAVFILTER_LIB_FILEPATH_vf_vidstabtransform_c := $(FFMPEG_DIR)/libavfilter/vf_vidstabtransform.c LIBAVFILTER_LIB_C_FILES := $(subst $(LIBAVFILTER_LIB_FILEPATH_vf_vidstabtransform_c),,$(LIBAVFILTER_LIB_C_FILES)) LIBAVFILTER_LIB_FILEPATH_vidstabutils_c := $(FFMPEG_DIR)/libavfilter/vidstabutils.c LIBAVFILTER_LIB_C_FILES := $(subst $(LIBAVFILTER_LIB_FILEPATH_vidstabutils_c),,$(LIBAVFILTER_LIB_C_FILES)) 


yasm_compile_asm_libavfilter.bat - bat-, *.asm x86
 REM  *.asm  libavfilter,       'libavfilter\x86' REM "-f elf" ,   "error: binary object format does not support external references" REM  -D     config.h "D:\yasm\yasm-1.3.0-win64.exe" -f elf -D ARCH_X86_64=0 -D HAVE_ALIGNED_STACK=1 -D ARCH_X86_32=1 -D HAVE_CPUNOP=1 -D HAVE_AVX_EXTERNAL=1 -ID:\MyProject\jni\ffmpeg-2.1.3 -o af_volume.o af_volume.asm "D:\yasm\yasm-1.3.0-win64.exe" -f elf -D ARCH_X86_64=0 -D HAVE_ALIGNED_STACK=1 -D ARCH_X86_32=1 -D HAVE_CPUNOP=1 -D HAVE_AVX_EXTERNAL=1 -ID:\MyProject\jni\ffmpeg-2.1.3 -o vf_gradfun.o vf_gradfun.asm "D:\yasm\yasm-1.3.0-win64.exe" -f elf -D ARCH_X86_64=0 -D HAVE_ALIGNED_STACK=1 -D ARCH_X86_32=1 -D HAVE_CPUNOP=1 -D HAVE_AVX_EXTERNAL=1 -ID:\MyProject\jni\ffmpeg-2.1.3 -o vf_hqdn3d.o vf_hqdn3d.asm "D:\yasm\yasm-1.3.0-win64.exe" -f elf -D ARCH_X86_64=0 -D HAVE_ALIGNED_STACK=1 -D ARCH_X86_32=1 -D HAVE_CPUNOP=1 -D HAVE_AVX_EXTERNAL=1 -ID:\MyProject\jni\ffmpeg-2.1.3 -o vf_pullup.o vf_pullup.asm "D:\yasm\yasm-1.3.0-win64.exe" -f elf -D ARCH_X86_64=0 -D HAVE_ALIGNED_STACK=1 -D ARCH_X86_32=1 -D HAVE_CPUNOP=1 -D HAVE_AVX_EXTERNAL=1 -ID:\MyProject\jni\ffmpeg-2.1.3 -o vf_yadif.o vf_yadif.asm "D:\yasm\yasm-1.3.0-win64.exe" -f elf -D ARCH_X86_64=0 -D HAVE_ALIGNED_STACK=1 -D ARCH_X86_32=1 -D HAVE_CPUNOP=1 -D HAVE_AVX_EXTERNAL=1 -ID:\MyProject\jni\ffmpeg-2.1.3 -o yadif-10.o yadif-10.asm "D:\yasm\yasm-1.3.0-win64.exe" -f elf -D ARCH_X86_64=0 -D HAVE_ALIGNED_STACK=1 -D ARCH_X86_32=1 -D HAVE_CPUNOP=1 -D HAVE_AVX_EXTERNAL=1 -ID:\MyProject\jni\ffmpeg-2.1.3 -o yadif-16.o yadif-16.asm "D:\ndk\android-ndk-r9c\toolchains\x86-4.6\prebuilt\windows-x86_64\bin\i686-linux-android-ar.exe" rvs libavfilter_asm.a af_volume.o vf_gradfun.o vf_hqdn3d.o vf_pullup.o vf_yadif.o yadif-10.o yadif-16.o mkdir "D:\MyProject\obj\local\x86\objs\avfilter\ffmpeg-2.1.3\libavfilter\x86" move libavfilter_asm.a "D:\MyProject\obj\local\x86\objs\avfilter\ffmpeg-2.1.3\libavfilter\x86\" del *.o 


Android.mk - make-, avfilter, *.so -
 ################################################################################ LOCAL_PATH := $(call my-dir) FFMPEG_DIR := ffmpeg-2.1.3 ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := libavutil LOCAL_SRC_FILES := ../prebuild/armeabi/release/libavutil.so include $(PREBUILT_SHARED_LIBRARY) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := libavcodec LOCAL_SRC_FILES := ../prebuild/armeabi/release/libavcodec.so include $(PREBUILT_SHARED_LIBRARY) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := libavformat LOCAL_SRC_FILES := ../prebuild/armeabi/release/libavformat.so include $(PREBUILT_SHARED_LIBRARY) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := libswscale LOCAL_SRC_FILES := ../prebuild/armeabi/release/libswscale.so include $(PREBUILT_SHARED_LIBRARY) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := libpostproc LOCAL_SRC_FILES := ../prebuild/armeabi/release/libpostproc.so include $(PREBUILT_SHARED_LIBRARY) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := libswresample LOCAL_SRC_FILES := ../prebuild/armeabi/release/libswresample.so include $(PREBUILT_SHARED_LIBRARY) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := libavresample LOCAL_SRC_FILES := ../prebuild/armeabi/release/libavresample.so include $(PREBUILT_SHARED_LIBRARY) ################################################################################ include $(CLEAR_VARS) OPENCV_CAMERA_MODULES := off OPENCV_INSTALL_MODULES := on include $(OPENCVROOT)/sdk/native/jni/OpenCV.mk ################################################################################ #    avfilter.so include $(CLEAR_VARS) LIBAVFILTER_LIB_ARCH_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/$(TARGET_ARCH)/*.asm) LIBAVFILTER_LIB_ARCH_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/$(TARGET_ARCH)/*.c) LIBAVFILTER_LIB_ARCH_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/$(TARGET_ARCH)/*.S) LIBAVFILTER_LIB_ASM_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/*.asm) LIBAVFILTER_LIB_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/*.c) LIBAVFILTER_LIB_S_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/*.S) LIBAVFILTER_LIB_CPP_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/*.cpp) LIBAVFILTER_LIB_EX_C_FILES := $(wildcard $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/libmpcodecs/*.c) LIBAVFILTER_LIB_ARCH_ASM_FILES := $(subst jni/,,$(LIBAVFILTER_LIB_ARCH_ASM_FILES)) LIBAVFILTER_LIB_ARCH_C_FILES := $(subst jni/,,$(LIBAVFILTER_LIB_ARCH_C_FILES)) LIBAVFILTER_LIB_ARCH_S_FILES := $(subst jni/,,$(LIBAVFILTER_LIB_ARCH_S_FILES)) LIBAVFILTER_LIB_ASM_FILES := $(subst jni/,,$(LIBAVFILTER_LIB_ASM_FILES)) LIBAVFILTER_LIB_C_FILES := $(subst jni/,,$(LIBAVFILTER_LIB_C_FILES)) LIBAVFILTER_LIB_S_FILES := $(subst jni/,,$(LIBAVFILTER_LIB_S_FILES)) LIBAVFILTER_LIB_CPP_FILES := $(subst jni/,,$(LIBAVFILTER_LIB_CPP_FILES)) LIBAVFILTER_LIB_EX_C_FILES := $(subst jni/,,$(LIBAVFILTER_LIB_EX_C_FILES)) include $(LOCAL_PATH)/libavfilter_ignore.mk LIBAVFILTER_FILES := $(sort $(LIBAVFILTER_LIB_ARCH_ASM_FILES)) $(sort $(LIBAVFILTER_LIB_ARCH_C_FILES)) $(sort $(LIBAVFILTER_LIB_ARCH_S_FILES)) $(sort $(LIBAVFILTER_LIB_ASM_FILES)) $(sort $(LIBAVFILTER_LIB_C_FILES)) $(sort $(LIBAVFILTER_LIB_S_FILES)) $(sort $(LIBAVFILTER_LIB_CPP_FILES)) $(sort $(LIBAVFILTER_LIB_EX_C_FILES)) LOCAL_SRC_FILES := $(LIBAVFILTER_FILES) LOCAL_C_INCLUDES += $(OPENCVROOT)/sdk/native/jni/include $(LOCAL_PATH)/$(FFMPEG_DIR) $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/$(TARGET_ARCH) $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/libmpcodecs $(LOCAL_PATH)/$(FFMPEG_DIR)/libavfilter/libmpcodecs/libvo LOCAL_LDLIBS += -lz -llog LOCAL_SHARED_LIBRARIES += libavutil libavcodec libavformat libswresample libpostproc libswscale libavresample libopencv_java LOCAL_MODULE := avfilter LOCAL_CFLAGS += -D__STDC_CONSTANT_MACROS -O3 -fpic -DANDROID LOCAL_ARM_MODE := arm include $(BUILD_SHARED_LIBRARY) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := libavdevice LOCAL_SRC_FILES := ../prebuild/armeabi/release/libavdevice.so include $(PREBUILT_SHARED_LIBRARY) ################################################################################ include $(CLEAR_VARS) LOCAL_SRC_FILES := $(subst jni/,,$(LOCAL_PATH)/$(FFMPEG_DIR)/cmdutils.c) $(subst jni/,,$(LOCAL_PATH)/$(FFMPEG_DIR)/ffmpeg.c) $(subst jni/,,$(LOCAL_PATH)/$(FFMPEG_DIR)/ffmpeg_opt.c) $(subst jni/,,$(LOCAL_PATH)/$(FFMPEG_DIR)/ffmpeg_filter.c) LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(FFMPEG_DIR) $(OPENCVROOT)/sdk/native/jni/include LOCAL_LDLIBS += -llog -ldl LOCAL_SHARED_LIBRARIES += libavcodec libavfilter libavformat libavresample libavutil libpostproc libswresample libswscale libopencv_java LOCAL_CFLAGS += -D__STDC_CONSTANT_MACROS -O3 -DANDROID -DCONFIG_ARM_ARCH -fpic LOCAL_MODULE := ffmpeg LOCAL_ARM_MODE := arm include $(BUILD_SHARED_LIBRARY) 



make- «jni». :



. Project Build, , ( ) «libs» *.so ( libopencv_java.so — OpenCV.mk libffmpeg.so – ffmpeg.exe, *.so ):



*.so , .

4. FFmpeg Android


*.so , Android . , . , FFmpeg ( «OpenCV Introduction into Android Development»).

, , FFmpeg : jni, Android.mk Application.mk, C++ *.so . Java-.

, Activity, , .

 //   -      C++      Java  package com.example.myproject; //   -       C++      Java  public class MyActivity { <...> // -       native-,       private static native void nativeFFmpegTest(); <...> public void OnClick() { //  *.so ,  ,   "lib"  ! System.loadLibrary("opencv_java"); System.loadLibrary("avutil"); System.loadLibrary("avcodec"); System.loadLibrary("avformat"); System.loadLibrary("avresample"); System.loadLibrary("postproc"); System.loadLibrary("swresample"); System.loadLibrary("swscale"); System.loadLibrary("avfilter"); System.loadLibrary("ffmpeg"); //  *.so ,      Android.mk   ,    System.loadLibrary("myproject"); //  native-,   C++,         FFmpeg nativeFFmpegTest(); } } 



«jni» myproject.cpp :

myproject.cpp
 #include <jni.h> #include <string.h> #include <algorithm> #include <android/log.h> //   NDK  ,    ,     Eclipse     ,       FFmpeg extern "C" { #include "libavcodec/avcodec.h" #include "libavformat/avformat.h" #include "libavutil/opt.h" #include "libswscale/swscale.h" #include "libavfilter/avfilter.h" #include "libavutil/log.h" #include "libavutil/imgutils.h" } // Extermal Functions Declaration extern "C" { // ,   main()   ffmpeg.c  ffmpeg_main()      int ffmpeg_main(int argc, char **argv); } // JNI Functions Declarations extern "C" { JNIEXPORT void JNICALL Java_com_example_myproject_MyActivity_nativeFFmpegTest(JNIEnv * _jenv, jclass _this); } JNIEXPORT void JNICALL Java_com_example_myproject_MyActivity_nativeFFmpegTest(JNIEnv * _jenv, jclass _this) { int argc = 5; //      ,    -        // FFmpeg      ,        mp4 char* argv[5] = { "ffmpeg", "-i", "//storage//extSdCard//DCIM//Camera//video.mp4", "-an", "//storage//extSdCard//DCIM//Camera//video_no_audio.mp4"}; //          ,         ffmpeg.exe   : // > ffmpeg.exe -i "storage/extSdCard/DCIM/Camera/video.mp4" -an "storage/extSdCard/DCIM/Camera/video_no_audio.mp4" //  -an  ffmpeg     ,         video_no_audio.mp4 ffmpeg_main(argc, argv); } 



Android.mk Application.mk:

Application.mk
 APP_STL := gnustl_static APP_CPPFLAGS := -frtti -fexceptions APP_ABI := armeabi # APP_ABI := x86 # APP_ABI := mips APP_PLATFORM := android-9 



Android.mk
 ################################################################################ LOCAL_PATH := $(call my-dir) #     *.so  ################################################################################ include $(CLEAR_VARS) OPENCV_CAMERA_MODULES := off OPENCV_INSTALL_MODULES := on include $(OPENCVROOT)/sdk/native/jni/OpenCV.mk ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := libavcodec LOCAL_SRC_FILES := ../prebuild/ffmpeg/$(TARGET_ARCH)/release/libavcodec.so include $(PREBUILT_SHARED_LIBRARY) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := libavfilter LOCAL_SRC_FILES := ../prebuild/ffmpeg/$(TARGET_ARCH)/release/libavfilter.so include $(PREBUILT_SHARED_LIBRARY) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := libavformat LOCAL_SRC_FILES := ../prebuild/ffmpeg/$(TARGET_ARCH)/release/libavformat.so include $(PREBUILT_SHARED_LIBRARY) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := libavresample LOCAL_SRC_FILES := ../prebuild/ffmpeg/$(TARGET_ARCH)/release/libavresample.so include $(PREBUILT_SHARED_LIBRARY) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := libavutil LOCAL_SRC_FILES := ../prebuild/ffmpeg/$(TARGET_ARCH)/release/libavutil.so include $(PREBUILT_SHARED_LIBRARY) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := libpostproc LOCAL_SRC_FILES := ../prebuild/ffmpeg/$(TARGET_ARCH)/release/libpostproc.so include $(PREBUILT_SHARED_LIBRARY) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := libswresample LOCAL_SRC_FILES := ../prebuild/ffmpeg/$(TARGET_ARCH)/release/libswresample.so include $(PREBUILT_SHARED_LIBRARY) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := libswscale LOCAL_SRC_FILES := ../prebuild/ffmpeg/$(TARGET_ARCH)/release/libswscale.so include $(PREBUILT_SHARED_LIBRARY) ################################################################################ include $(CLEAR_VARS) LOCAL_MODULE := libffmpeg LOCAL_SRC_FILES := ../prebuild/ffmpeg/$(TARGET_ARCH)/release/libffmpeg.so include $(PREBUILT_SHARED_LIBRARY) ################################################################################ #  myproject.cpp  libmyproject.so include $(CLEAR_VARS) LOCAL_SRC_FILES := myproject.cpp LOCAL_C_INCLUDES += $(LOCAL_PATH) $(FFMPEGANDROIDROOT) $(OPENCVROOT)/sdk/native/jni/include LOCAL_LDLIBS += -llog -ldl LOCAL_SHARED_LIBRARIES += libavcodec libavfilter libavformat libavresample libavutil libpostproc libswresample libswscale libopencv_java libffmpeg LOCAL_CFLAGS += -D__STDC_CONSTANT_MACROS -O3 -DANDROID ifeq ($(TARGET_ARCH),arm) LOCAL_CFLAGS += -DCONFIG_ARM_ARCH -fpic else ifeq ($(TARGET_ARCH),x86) LOCAL_CFLAGS += -DCONFIG_X86_ARCH -fpic else ifeq ($(TARGET_ARCH),mips) LOCAL_CFLAGS += -DCONFIG_MIPS_ARCH -Wfatal-errors -Wno-deprecated -std=c99 -fomit-frame-pointer -mips32r2 -mdsp -mdspr2 -mhard-float -g -Wdeclaration-after-statement -Wall -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=return-type -Werror=vla endif LOCAL_MODULE := myproject include $(BUILD_SHARED_LIBRARY) 



, «storage/extSdCard/DCIM/Camera/video.mp4», myproject.cpp.

Everything! , , , , video.mp4 video_no_audio.mp4 . , FFmpeg Android !

5. FFmpeg OpenCV


, FFmpeg , Java Android , - FFmpeg OpenCV.

, FFmpeg . , , . , , OpenCV. .

And suddenly it dawned on me - so there are video filters in FFmpeg! Filters are modules that are connected at the stage of decoding-coding, and they are given for processing each frame from the video stream. Just here and it would be possible to insert frame-by-frame video stream processing. At first I wanted to write my own filter with conversion and OpenCV function calls. It could handle each frame of video. But then I decided to just take some ready-made filter and change its code.

, «ffmpeg-2.1.3\libavfilter\vf_scale.c», — - , . , 300x300, , , 640x480. — . , , .

, . ffmpeg_process() , , 640x480 300x300. , 640x480 , , 300x300. , . OpenCV FFmpeg.

It is solved this way: if you open the file vf_scale.c, then there will be a filter_frame () function. This function is the callback that is called when processing video for each frame. It has an “in” argument of type AVFrame * - this is the decoded frame from the video. We need to convert this frame to the format compatible with OpenCV and process.

Code interaction FFmpeg with OpenCV
 //  _in -      640x480,  _out -    300x300 void convertFFmpegAVFrameToOpenCVMat(AVFrame* _in, AVFrame* _out) { //     ( 640   ) int videoFrameWidth = _in->width; //     ( 480   ) int videoFrameHeight = _in->height; //    ,        AV_PIX_FMT_BGRA,     OpenCV int videoFrameFormat = _in->format; // SwsContext -    FFmpeg     ,     , //        videoFrameFormat   AV_PIX_FMT_BGRA SwsContext* avFrameToMatConvertContext = NULL; avFrameToMatConvertContext = sws_getCachedContext(avFrameToMatConvertContext, videoFrameWidth, videoFrameHeight, (enum AVPixelFormat) videoFrameFormat, videoFrameWidth, videoFrameHeight, AV_PIX_FMT_BGRA, SWS_BICUBIC, NULL, NULL, NULL); //     AVFrame*       AV_PIX_FMT_BGRA AVFrame* avFrameWithOpenCVCompatibleData = av_frame_alloc(); //       (      ) int avFrameWithOpenCVCompatibleDataBufferSize = avpicture_get_size(AV_PIX_FMT_BGRA, videoFrameWidth, videoFrameHeight); //         avFrameWithOpenCVCompatibleData uint8_t* avFrameWithOpenCVCompatibleDataBuffer = (uint8_t *) av_malloc((uint64_t) (avFrameWithOpenCVCompatibleDataBufferSize * sizeof(uint8_t))); avpicture_fill((AVPicture*) avFrameWithOpenCVCompatibleData, avFrameWithOpenCVCompatibleDataBuffer, AV_PIX_FMT_BGRA, videoFrameWidth, videoFrameHeight); avFrameWithOpenCVCompatibleData->height = videoFrameWidth; avFrameWithOpenCVCompatibleData->width = videoFrameHeight; //     _in    AV_PIX_FMT_BGRA     avFrameWithOpenCVCompatibleData sws_scale(avFrameToMatConvertContext, _in->data, _in->linesize, 0, _in->height, avFrameWithOpenCVCompatibleData->data, avFrameWithOpenCVCompatibleData->linesize); //     OpenCV Mat      FFmpeg AVFrame cv::Mat* cvVideoFrame = new cv::Mat(avFrameWithOpenCVCompatibleData->height, avFrameWithOpenCVCompatibleData->width, CV_8UC4, avFrameWithOpenCVCompatibleData->data[0]); //   cvVideoFrame    OpenCV, //       Facegood, //     cvVideoFrame        300x300 cvResultFrame = cv::imread("panda_300x300.jpg", -1); <  cvVideoFrame      cvResultFrame> // ,      av_free(avFrameWithOpenCVCompatibleDataBuffer); av_frame_free(&avFrameWithOpenCVCompatibleData); delete cvVideoFrame; //    cvResultFrame  _out //     cvResultFrame  BGRA  YUV_I420 cvtColor(cvResultFrame, cvResultFrame, CV_BGRA2YUV_I420); //       AVFrame* _out size_t imageYPlaneSize = _out->width * _out->height; size_t imageUPlaneSize = imageYPlaneSize / 4; size_t imageVPlaneSize = imageUPlaneSize; int imageHalfWidth = _out->width / 2; int imageHalfHeight = _out->height / 2; for (int i = 0; i < _out->height; i++) { memcpy(_out->data[0] + i * _out->linesize[0], cvResultFrame.data + i * _out->width, _out->width); if (i < imageHalfHeight) { memcpy(_out->data[1] + i * _out->linesize[1], cvResultFrame.data + imageYPlaneSize + i * imageHalfWidth, imageHalfWidth); memcpy(_out->data[2] + i * _out->linesize[2], cvResultFrame.data + imageYPlaneSize + imageUPlaneSize + i * imageHalfWidth, imageHalfWidth); } } } 


That's all! vf_scale _out , , ( ):



, , , — FFmpeg OpenCV .

Conclusion


FFmpeg . , , - , . FFmpeg - — , .

Thanks for attention!

Source: https://habr.com/ru/post/254737/


All Articles