错误:未定义引用'av_free_packet(AVPacket *)'的时候使用NDK编译的ffmpeg [英] error: undefined reference to 'av_free_packet(AVPacket*)' when use NDK to compile ffmpeg
问题描述
我编我的CPPS通过我的Android MK使用的ffmpeg liberary与Android NDK如下:
LOCAL_PATH:= $(叫我-DIR)
DEFINES + = -DTARGET_POSIX \\
-DTARGET_LINUX \\
-D_LINUX \\
-DTARGET_ANDROID \\
-D__STDC_CONSTANT_MACROS 包括$(CLEAR_VARS)
LOCAL_MODULE:= libav codeC
LOCAL_SRC_FILES:= LIB / lib目录/ libav codec.so
包括$(preBUILT_SHARED_LIBRARY) 包括$(CLEAR_VARS)
LOCAL_MODULE:= libavfilter
LOCAL_SRC_FILES:= LIB / lib目录/ libavfilter.so
包括$(preBUILT_SHARED_LIBRARY) 包括$(CLEAR_VARS)
LOCAL_MODULE:= libavformat流
LOCAL_SRC_FILES:= LIB / lib目录/ libavformat.so
包括$(preBUILT_SHARED_LIBRARY) 包括$(CLEAR_VARS)
LOCAL_MODULE:= libavutil
LOCAL_SRC_FILES:= LIB / lib目录/ libavutil.so
包括$(preBUILT_SHARED_LIBRARY) 包括$(CLEAR_VARS)
LOCAL_MODULE:= libpostproc
LOCAL_SRC_FILES:= LIB / lib目录/ libpostproc.so
包括$(preBUILT_SHARED_LIBRARY) 包括$(CLEAR_VARS)
LOCAL_MODULE:= libswresample
LOCAL_SRC_FILES:= LIB / lib目录/ libswresample.so
包括$(preBUILT_SHARED_LIBRARY) 包括$(CLEAR_VARS)
LOCAL_MODULE:= libswscale
LOCAL_SRC_FILES:= LIB / lib目录/ libswscale.so
包括$(preBUILT_SHARED_LIBRARY) 包括$(CLEAR_VARS)
LOCAL_MODULE:=玩家
基地:= $(LOCAL_PATH)
LOCAL_SRC_FILES + =核心/ PlayDemux.cpp \\
核心/ PlayDemuxFFmpeg.cpp \\
核心/ PlayFactoryDemuxer.cpp LOCAL_C_INCLUDES + = $(LOCAL_PATH)\\
$(LOCAL_PATH)/ lib目录\\
$(LOCAL_PATH)/ lib中/包括\\
$(LOCAL_PATH)/核心/播放器\\
LOCAL_CPPFLAGS + = -Wall -fexceptions $(定义)
包括$(BUILD_STATIC_LIBRARY) 包括$(CLEAR_VARS)
LOCAL_MODULE:= testmain LOCAL_SRC_FILES:= \\
testmain.cpp \\ LOCAL_C_INCLUDES + = $(LOCAL_PATH)\\
$(LOCAL_PATH)/ lib目录
LOCAL_CPPFLAGS + = -Wall -fexceptions $(定义) LOCAL_SHARED_LIBRARIES:= libav codeC \\
libavformat流\\
libavfilter \\
libavutil \\
libpostproc \\
libswscale \\
libswresample LOCAL_STATIC_LIBRARIES:=玩家 包括$(BUILD_EXECUTABLE)
但是当我做NDK的构建V = 1,编译后,我得到了:
安装:libav codec.so =>库/ armeabi-V7A / libav codec.so
安装-p /cygdrive/d/player/obj/local/armeabi-v7a/libav$c$cc.so /cygdrive/d/player/libs/armeabi-v7a/libav$c$cc.so
/cygdrive/d/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/$p$pbuilt/windows/bin/arm-linux-androideabi-strip --strip-不需要D:/player/libs/armeabi-v7a/libav$c$cc.so
安装:libavfilter.so =>库/ armeabi-V7A / libavfilter.so
安装-p /cygdrive/d/player/obj/local/armeabi-v7a/libavfilter.so /cygdrive/d/player/libs/armeabi-v7a/libavfilter.so
/cygdrive/d/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/$p$pbuilt/windows/bin/arm-linux-androideabi-strip --strip-不需要D:/player/libs/armeabi-v7a/libavfilter.so
安装:libavformat.so =>库/ armeabi-V7A / libavformat.so
安装-p /cygdrive/d/player/obj/local/armeabi-v7a/libavformat.so /cygdrive/d/player/libs/armeabi-v7a/libavformat.so
/cygdrive/d/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/$p$pbuilt/windows/bin/arm-linux-androideabi-strip --strip-不需要D:/player/libs/armeabi-v7a/libavformat.so
安装:libavutil.so =>库/ armeabi-V7A / libavutil.so
安装-p /cygdrive/d/player/obj/local/armeabi-v7a/libavutil.so /cygdrive/d/player/libs/armeabi-v7a/libavutil.so
/cygdrive/d/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/$p$pbuilt/windows/bin/arm-linux-androideabi-strip --strip-不需要D:/player/libs/armeabi-v7a/libavutil.so
安装:libpostproc.so =>库/ armeabi-V7A / libpostproc.so
安装-p /cygdrive/d/player/obj/local/armeabi-v7a/libpostproc.so /cygdrive/d/player/libs/armeabi-v7a/libpostproc.so
/cygdrive/d/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/$p$pbuilt/windows/bin/arm-linux-androideabi-strip --strip-不需要D:/player/libs/armeabi-v7a/libpostproc.so
安装:libswresample.so =>库/ armeabi-V7A / libswresample.so
安装-p /cygdrive/d/player/obj/local/armeabi-v7a/libswresample.so /cygdrive/d/player/libs/armeabi-v7a/libswresample.so
/cygdrive/d/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/$p$pbuilt/windows/bin/arm-linux-androideabi-strip --strip-不需要D:/player/libs/armeabi-v7a/libswresample.so
安装:libswscale.so =>库/ armeabi-V7A / libswscale.so
安装-p /cygdrive/d/player/obj/local/armeabi-v7a/libswscale.so /cygdrive/d/player/libs/armeabi-v7a/libswscale.so
/cygdrive/d/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/$p$pbuilt/windows/bin/arm-linux-androideabi-strip --strip-不需要D:/player/libs/armeabi-v7a/libswscale.so
可执行文件:testmain
/cygdrive/d/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/$p$pbuilt/windows/bin/arm-linux-androideabi-g++轮候册, - GC-部分-Wl,-z,nocopyreloc --sysroot = D:/安卓/ Android的NDK-R8E /平台/ Android的14 /弓臂D:/播放/ OBJ /本地/ armeabi- V7A / OBJ文件/ testmain / testmain.o D:/player/obj/local/armeabi-v7a/libplayer.a D:/安卓/ Android的NDK-R8E /来源/ CXX-STL / STLport的/库/ armeabi-V7A / libstlport_static.a -lgcc D:/player/obj/local/armeabi-v7a/libav$c$cc.so D:/player/obj/local/armeabi-v7a/libavformat.so D:/播放/ OBJ /本地/ armeabi-V7A / libavfilter.so D:/player/obj/local/armeabi-v7a/libavutil.so D:/player/obj/local/armeabi-v7a/libpostproc.so D:/播放/ OBJ /本地/ armeabi- V7A / libswscale.so D:/player/obj/local/armeabi-v7a/libswresample.so -no-canonical- prefixes -march =的ARMv7-A轮候册, - 修复 - Cortex-A8的轮候册, - -no-未定义-Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,现在-lc -lm -o D:/播放/ OBJ /本地/ armeabi-V7A / testmain
D:/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/$p$pbuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: D:/player/obj/local/armeabi-v7a/libplayer.a(PlayDemuxFFmpeg.o):在功能上PlayDemuxFFmpeg ::同花顺():D:/player/jni/lib/DllAv$c$cc.h:144:错误:未定义引用'av_free_packet(AVPacket *)'
I'm使用Windows 7 + cygwin的+ NDKR8,但LIBlibav codec.so,libavfilter.so,libavformat.so,libavutil.so,libpostproc.so,libswresample.so,libswscale.so ffmpeg的被使用的Ubuntu + NDK8NDK的独立mothed编译。
我包括外部的C$ C $的头文件c。
那么,如何纠正这个错误吗?
我DLLav codec.h是:
的#pragma一次
#包括DllAvUtil.h为externC{
#包括LT&; libav codeC / AV codec.h>
}
类DllAv codeC:公共DllAv codecInterface
{
上市:
静态CCriticalSection m_critSection; 虚拟〜DllAv codeC(){}
虚拟无效AV codec_register_all()
{
:: AV codec_register_all();
}
虚拟无效AV codec_flush_buffers(AV codecContext * avctx){:: AV codec_flush_buffers(avctx); }
虚拟INT AV codec_open2(AV codecContext * avctx,AV codeC * codeC,AVDictionary **选项)
{
返回:: AV codec_open2(avctx,codeC,期权);
}
虚拟INT AV codec_open2_dont_call(AV codecContext * avctx,AV codeC * codeC,AVDictionary **选项){*(挥发性INT *)为0x0 = 0;返回0; }
虚拟INT AV codec_close_dont_call(AV codecContext * avctx){*(挥发性INT *)为0x0 = 0;返回0; }
虚拟AV codeC * AV codec_find_de codeR(枚举codeCID的id){返回:: AV codec_find_de codeR(ID); }
虚拟AV codeC * AV codec_find_en codeR(枚举codeCID的id){返回:: AV codec_find_en codeR(ID); }
虚拟INT AV codec_close(AV codecContext * avctx)
{
返回:: AV codec_close(avctx);
}
虚拟AVFrame * AV codec_alloc_frame(){返回:: AV codec_alloc_frame(); }
虚拟INT avpicture_fill(AVPicture *图片,uint8_t有* PTR,的PixelFormat pix_fmt,诠释的宽度,高度INT){返回:: avpicture_fill(图片,PTR,pix_fmt,宽,高); }
虚拟INT AV codec_de code_video2(AV codecContext * avctx,AVFrame *图片,为int * got_picture_ptr,AVPacket * avpkt){返回:: AV codec_de code_video2(avctx,图片, got_picture_ptr,avpkt); }
虚拟INT AV codec_de code_audio4(AV codecContext * avctx,AVFrame *帧,为int * got_frame_ptr,AVPacket * avpkt){返回:: AV codec_de code_audio4(avctx,框架, got_frame_ptr,avpkt); }
虚拟INT AV codec_de code_subtitle2(AV codecContext * avctx,AVSubtitle *子,为int * got_sub_ptr,AVPacket * avpkt){返回:: AV codec_de code_subtitle2(avctx,分, got_sub_ptr,avpkt); }
虚拟INT AV codec_en code_audio(AV codecContext * avctx,uint8_t有* BUF,INT buf_size,常量短采样*){返回:: AV codec_en code_audio(avctx,BUF, buf_size,样本); }
虚拟INT AV codec_en code_audio2(AV codecContext * avctx,AVPacket * avpkt,常量AVFrame *帧,为int * got_packet_ptr){返回:: AV codec_en code_audio2(avctx,avpkt ,框架,got_packet_ptr); }
虚拟INT avpicture_get_size(的PixelFormat pix_fmt,诠释的宽度,高度INT){返回:: avpicture_get_size(pix_fmt,宽,高); }
虚拟AV codecContext * AV codec_alloc_context3(AV codeC * codeC){返回:: AV codec_alloc_context3(codeC); }
虚拟无效AV codec_string(字符* BUF,INT buf_size,AV codecContext * ENC,INT EN code){:: AV codec_string(BUF,buf_size,ENC,EN code ); }
虚拟无效AV codec_get_context_defaults3(AV codecContext * S,AV codeC * codeC){:: AV codec_get_context_defaults3(S,codeC); } 虚拟AV codecParserContext * av_parser_init(INT codec_id){返回:: av_parser_init(codec_id); }
虚拟INT av_parser_parse2(AV codecParserContext * S,AV codecContext * avctx,uint8_t有** poutbuf,为int * poutbuf_size,
常量uint8_t有* BUF,INT buf_size,
PTS的int64_t和int64_t DTS和int64_t POS)
{
返回:: av_parser_parse2(S,avctx,poutbuf,poutbuf_size,BUF,buf_size,PTS,DTS,POS)
}
虚拟无效av_parser_close(AV codecParserContext * S){:: av_parser_close(S); } 虚拟AVBitStreamFilterContext * av_bitstream_filter_init(为const char *名称){返回:: av_bitstream_filter_init(名); }
虚拟INT av_bitstream_filter_filter(AVBitStreamFilterContext *燃油消耗率,
AV codecContext * avctx,为const char * ARGS,
uint8_t有** poutbuf,为int * poutbuf_size,
常量uint8_t有* BUF,诠释buf_size,诠释关键帧){返回:: av_bitstream_filter_filter(BSFC,avctx,ARGS,poutbuf,poutbuf_size,BUF,buf_size,关键帧); }
虚拟无效av_bitstream_filter_close(AVBitStreamFilterContext * BSFC){:: av_bitstream_filter_close(BSFC); } 虚拟无效avpicture_free(AVPicture *图片){:: avpicture_free(图片); }
虚拟无效av_free_packet(AVPacket * PKT){:: av_free_packet(PKT); }
虚拟INT avpicture_alloc(AVPicture *图片,的PixelFormat pix_fmt,诠释的宽度,高度INT){返回:: avpicture_alloc(图片,pix_fmt,宽,高); }
虚拟INT AV codec_default_get_buffer(AV codecContext * S,AVFrame * PIC){返回:: AV codec_default_get_buffer(S,PIC); }
虚拟无效AV codec_default_release_buffer(AV codecContext * S,AVFrame * PIC){:: AV codec_default_release_buffer(S,PIC); }
虚拟枚举的PixelFormat AV codec_default_get_format(结构AV codecContext * S,常量枚举的PixelFormat * FMT){返回:: AV codec_default_get_format(S,FMT); }
虚拟AV codeC * av_ codec_next(AV codeC * C){返回:: av_ codec_next(C); } 虚拟INT av_dup_packet(AVPacket * PKT){返回:: av_dup_packet(PKT); }
虚拟无效av_init_packet(AVPacket * PKT){返回:: av_init_packet(PKT); }
虚拟INT AV codec_fill_audio_frame(AVFrame *帧,INT nb_channels,枚举AVSampleFormat sample_fmt,常量uint8_t有* BUF,诠释buf_size,诠释对齐){返回:: AV codec_fill_audio_frame(帧,nb_channels,sample_fmt,BUF,buf_size,调整); }
虚拟无效AV codec_free_frame(AVFrame **帧){返回:: AV codec_free_frame(架); };
};
我已经做了一个小实验。我认为,这个问题仍然是的externC
。您发布的 DllAv codec.h 文件,但恐怕在 PlayDemuxFFmpeg.cpp 您的#include
FFmpeg的头没有的externC
包装(也许不是在 CPP 文件,但在头之一,它之前,包括 DllAv codec.h )。
I compiled my cpps to use ffmpeg liberary with ANDROID NDK by my android MK as follow :
LOCAL_PATH := $(call my-dir)
DEFINES += -DTARGET_POSIX \
-DTARGET_LINUX \
-D_LINUX \
-DTARGET_ANDROID \
-D__STDC_CONSTANT_MACROS
include $(CLEAR_VARS)
LOCAL_MODULE := libavcodec
LOCAL_SRC_FILES := lib/lib/libavcodec.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libavfilter
LOCAL_SRC_FILES := lib/lib/libavfilter.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libavformat
LOCAL_SRC_FILES := lib/lib/libavformat.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libavutil
LOCAL_SRC_FILES := lib/lib/libavutil.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libpostproc
LOCAL_SRC_FILES := lib/lib/libpostproc.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libswresample
LOCAL_SRC_FILES := lib/lib/libswresample.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libswscale
LOCAL_SRC_FILES := lib/lib/libswscale.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= player
base := $(LOCAL_PATH)
LOCAL_SRC_FILES += cores/PlayDemux.cpp \
cores/PlayDemuxFFmpeg.cpp \
cores/PlayFactoryDemuxer.cpp
LOCAL_C_INCLUDES += $(LOCAL_PATH) \
$(LOCAL_PATH)/lib \
$(LOCAL_PATH)/lib/include \
$(LOCAL_PATH)/cores/player \
LOCAL_CPPFLAGS += -Wall -fexceptions $(DEFINES)
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= testmain
LOCAL_SRC_FILES := \
testmain.cpp \
LOCAL_C_INCLUDES += $(LOCAL_PATH) \
$(LOCAL_PATH)/lib
LOCAL_CPPFLAGS += -Wall -fexceptions $(DEFINES)
LOCAL_SHARED_LIBRARIES := libavcodec \
libavformat \
libavfilter \
libavutil \
libpostproc \
libswscale \
libswresample
LOCAL_STATIC_LIBRARIES := player
include $(BUILD_EXECUTABLE)
but when i do "ndk-build v=1", After compiling, I got :
Install : libavcodec.so => libs/armeabi-v7a/libavcodec.so
install -p /cygdrive/d/player/obj/local/armeabi-v7a/libavcodec.so /cygdrive/d/player/libs/armeabi-v7a/libavcodec.so
/cygdrive/d/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-strip --strip-unneeded D:/player/libs/armeabi-v7a/libavcodec.so
Install : libavfilter.so => libs/armeabi-v7a/libavfilter.so
install -p /cygdrive/d/player/obj/local/armeabi-v7a/libavfilter.so /cygdrive/d/player/libs/armeabi-v7a/libavfilter.so
/cygdrive/d/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-strip --strip-unneeded D:/player/libs/armeabi-v7a/libavfilter.so
Install : libavformat.so => libs/armeabi-v7a/libavformat.so
install -p /cygdrive/d/player/obj/local/armeabi-v7a/libavformat.so /cygdrive/d/player/libs/armeabi-v7a/libavformat.so
/cygdrive/d/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-strip --strip-unneeded D:/player/libs/armeabi-v7a/libavformat.so
Install : libavutil.so => libs/armeabi-v7a/libavutil.so
install -p /cygdrive/d/player/obj/local/armeabi-v7a/libavutil.so /cygdrive/d/player/libs/armeabi-v7a/libavutil.so
/cygdrive/d/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-strip --strip-unneeded D:/player/libs/armeabi-v7a/libavutil.so
Install : libpostproc.so => libs/armeabi-v7a/libpostproc.so
install -p /cygdrive/d/player/obj/local/armeabi-v7a/libpostproc.so /cygdrive/d/player/libs/armeabi-v7a/libpostproc.so
/cygdrive/d/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-strip --strip-unneeded D:/player/libs/armeabi-v7a/libpostproc.so
Install : libswresample.so => libs/armeabi-v7a/libswresample.so
install -p /cygdrive/d/player/obj/local/armeabi-v7a/libswresample.so /cygdrive/d/player/libs/armeabi-v7a/libswresample.so
/cygdrive/d/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-strip --strip-unneeded D:/player/libs/armeabi-v7a/libswresample.so
Install : libswscale.so => libs/armeabi-v7a/libswscale.so
install -p /cygdrive/d/player/obj/local/armeabi-v7a/libswscale.so /cygdrive/d/player/libs/armeabi-v7a/libswscale.so
/cygdrive/d/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-strip --strip-unneeded D:/player/libs/armeabi-v7a/libswscale.so
Executable : testmain
/cygdrive/d/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-g++ -Wl,--gc-sections -Wl,-z,nocopyreloc --sysroot=D:/android/android-ndk-r8e/platforms/android-14/arch-arm D:/player/obj/local/armeabi-v7a/objs/testmain/testmain.o D:/player/obj/local/armeabi-v7a/libplayer.a D:/android/android-ndk-r8e/sources/cxx-stl/stlport/libs/armeabi-v7a/libstlport_static.a -lgcc D:/player/obj/local/armeabi-v7a/libavcodec.so D:/player/obj/local/armeabi-v7a/libavformat.so D:/player/obj/local/armeabi-v7a/libavfilter.so D:/player/obj/local/armeabi-v7a/libavutil.so D:/player/obj/local/armeabi-v7a/libpostproc.so D:/player/obj/local/armeabi-v7a/libswscale.so D:/player/obj/local/armeabi-v7a/libswresample.so -no-canonical-prefixes -march=armv7-a -Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -lc -lm -o D:/player/obj/local/armeabi-v7a/testmain
D:/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: D:/player/obj/local/armeabi-v7a/libplayer.a(PlayDemuxFFmpeg.o): in function PlayDemuxFFmpeg::Flush():D:/player/jni/lib/DllAvCodec.h:144: error: undefined reference to 'av_free_packet(AVPacket*)'
I´m using windows 7 + cygwin + NDKR8,but the lib "libavcodec.so ,libavfilter.so,libavformat.so,libavutil.so,libpostproc.so,libswresample.so,libswscale.so " of ffmpeg was compiled with standalone mothed of NDK using "ubuntu + NDK8". and i include the extern "c" code in the head file.
so, how to correct the error ?
my DLLavcodec.h is :
#pragma once
#include "DllAvUtil.h"
extern "C" {
#include <libavcodec/avcodec.h>
}
class DllAvCodec : public DllAvCodecInterface
{
public:
static CCriticalSection m_critSection;
virtual ~DllAvCodec() {}
virtual void avcodec_register_all()
{
::avcodec_register_all();
}
virtual void avcodec_flush_buffers(AVCodecContext *avctx) { ::avcodec_flush_buffers(avctx); }
virtual int avcodec_open2(AVCodecContext *avctx, AVCodec *codec, AVDictionary **options)
{
return ::avcodec_open2(avctx, codec, options);
}
virtual int avcodec_open2_dont_call(AVCodecContext *avctx, AVCodec *codec, AVDictionary **options) { *(volatile int *)0x0 = 0; return 0; }
virtual int avcodec_close_dont_call(AVCodecContext *avctx) { *(volatile int *)0x0 = 0; return 0; }
virtual AVCodec *avcodec_find_decoder(enum CodecID id) { return ::avcodec_find_decoder(id); }
virtual AVCodec *avcodec_find_encoder(enum CodecID id) { return ::avcodec_find_encoder(id); }
virtual int avcodec_close(AVCodecContext *avctx)
{
return ::avcodec_close(avctx);
}
virtual AVFrame *avcodec_alloc_frame() { return ::avcodec_alloc_frame(); }
virtual int avpicture_fill(AVPicture *picture, uint8_t *ptr, PixelFormat pix_fmt, int width, int height) { return ::avpicture_fill(picture, ptr, pix_fmt, width, height); }
virtual int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, int *got_picture_ptr, AVPacket *avpkt) { return ::avcodec_decode_video2(avctx, picture, got_picture_ptr, avpkt); }
virtual int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt) { return ::avcodec_decode_audio4(avctx, frame, got_frame_ptr, avpkt); }
virtual int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, int *got_sub_ptr, AVPacket *avpkt) { return ::avcodec_decode_subtitle2(avctx, sub, got_sub_ptr, avpkt); }
virtual int avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size, const short *samples) { return ::avcodec_encode_audio(avctx, buf, buf_size, samples); }
virtual int avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr) { return ::avcodec_encode_audio2(avctx, avpkt, frame, got_packet_ptr); }
virtual int avpicture_get_size(PixelFormat pix_fmt, int width, int height) { return ::avpicture_get_size(pix_fmt, width, height); }
virtual AVCodecContext *avcodec_alloc_context3(AVCodec *codec) { return ::avcodec_alloc_context3(codec); }
virtual void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode) { ::avcodec_string(buf, buf_size, enc, encode); }
virtual void avcodec_get_context_defaults3(AVCodecContext *s, AVCodec *codec) { ::avcodec_get_context_defaults3(s, codec); }
virtual AVCodecParserContext *av_parser_init(int codec_id) { return ::av_parser_init(codec_id); }
virtual int av_parser_parse2(AVCodecParserContext *s,AVCodecContext *avctx, uint8_t **poutbuf, int *poutbuf_size,
const uint8_t *buf, int buf_size,
int64_t pts, int64_t dts, int64_t pos)
{
return ::av_parser_parse2(s, avctx, poutbuf, poutbuf_size, buf, buf_size, pts, dts, pos);
}
virtual void av_parser_close(AVCodecParserContext *s) { ::av_parser_close(s); }
virtual AVBitStreamFilterContext *av_bitstream_filter_init(const char *name) { return ::av_bitstream_filter_init(name); }
virtual int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc,
AVCodecContext *avctx, const char *args,
uint8_t **poutbuf, int *poutbuf_size,
const uint8_t *buf, int buf_size, int keyframe) { return ::av_bitstream_filter_filter(bsfc, avctx, args, poutbuf, poutbuf_size, buf, buf_size, keyframe); }
virtual void av_bitstream_filter_close(AVBitStreamFilterContext *bsfc) { ::av_bitstream_filter_close(bsfc); }
virtual void avpicture_free(AVPicture *picture) { ::avpicture_free(picture); }
virtual void av_free_packet(AVPacket *pkt) { ::av_free_packet(pkt); }
virtual int avpicture_alloc(AVPicture *picture, PixelFormat pix_fmt, int width, int height) { return ::avpicture_alloc(picture, pix_fmt, width, height); }
virtual int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic) { return ::avcodec_default_get_buffer(s, pic); }
virtual void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic) { ::avcodec_default_release_buffer(s, pic); }
virtual enum PixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum PixelFormat *fmt) { return ::avcodec_default_get_format(s, fmt); }
virtual AVCodec *av_codec_next(AVCodec *c) { return ::av_codec_next(c); }
virtual int av_dup_packet(AVPacket *pkt) { return ::av_dup_packet(pkt); }
virtual void av_init_packet(AVPacket *pkt) { return ::av_init_packet(pkt); }
virtual int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels, enum AVSampleFormat sample_fmt, const uint8_t *buf, int buf_size, int align) { return ::avcodec_fill_audio_frame(frame, nb_channels, sample_fmt, buf, buf_size, align); }
virtual void avcodec_free_frame(AVFrame **frame) { return ::avcodec_free_frame(frame); };
};
I have made a small experiment. I believe that the problem is still with extern "C"
. You posted DllAvCodec.h file, but I am afraid that in PlayDemuxFFmpeg.cpp you #include
the ffmpeg headers without an extern "C"
wrapper (maybe not in the cpp file, but in one of headers that it includes before DllAvCodec.h).
这篇关于错误:未定义引用'av_free_packet(AVPacket *)'的时候使用NDK编译的ffmpeg的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!