gpt4 book ai didi

android - ffmpeg : undefined symbol '_ZTIN7android11MediaSourceE' 的怯场

转载 作者:行者123 更新时间:2023-12-04 23:05:33 25 4
gpt4 key购买 nike

所有...我想尝试使用 libstagefright_h264 为 android 设备加速 ffmpeg hw。
似乎 ffmpeg 2.2.1 和 android 4.2.2 的源代码有点旧。
因此,我尝试更新源代码,但是当我只编写如下代码时:

struct FFSource : public MediaSource {                                                                                   
virtual status_t start(MetaData *params) { return -1; }
virtual status_t stop() { return -1; }
virtual sp<MetaData> getFormat() { return sp<MetaData>(); }
virtual status_t read(
MediaBuffer **buffer, const ReadOptions *options) { return -1; }
};

static av_cold int Stagefright_init(AVCodecContext *avctx)
{
av_log(avctx, AV_LOG_ERROR, "In function: %s\n", __FUNCTION__);
FFSource *decoder;
sp<MediaSource> mediaSource;

decoder = new FFSource();
return -1;
}

当我运行代码时,它告诉我如下:
找不到“libavcodec-55.so”引用的符号“_ZTIN7android11MediaSourceE”...

结果显示了 libavcodec-55.so 的 nm 命令:
[cxm@ubuntu ffmpeg-2.2.1.lsc]$nm ./libavcodec/libavcodec.so  | grep Source

003a31a8 t _ZN7android11MediaSource10setBuffersERKNS_6VectorIPNS_11MediaBufferEEE
003a319c t _ZN7android11MediaSource5pauseEv
U _ZN7android11MediaSourceC2Ev
U _ZN7android11MediaSourceD0Ev
U _ZN7android11MediaSourceD1Ev
U _ZN7android11MediaSourceD2Ev
003a31d0 t _ZN8FFSource4readEPPN7android11MediaBufferEPKNS0_11MediaSource11ReadOptionsE
003a31bc t _ZN8FFSource4stopEv
003a31b4 t _ZN8FFSource5startEPN7android8MetaDataE
003a31c4 t _ZN8FFSource9getFormatEv
003a3340 t _ZN8FFSourceD0Ev
003a32e0 t _ZN8FFSourceD1Ev
007b29f0 d _ZTC8FFSource0_N7android11MediaSourceE
007b29e0 d _ZTI8FFSource
U _ZTIN7android11MediaSourceE
006ac028 r _ZTS8FFSource
007b2970 d _ZTT8FFSource
U _ZTv0_n12_N7android11MediaSourceD0Ev
U _ZTv0_n12_N7android11MediaSourceD1Ev
003a3330 t _ZTv0_n12_N8FFSourceD0Ev
003a32d0 t _ZTv0_n12_N8FFSourceD1Ev
007b2980 d _ZTV8FFSource

我在 libstagefright.so 中也找不到 _ZTIN7android11MediaSourceE。我认为我在编写源代码而不是错误链接 stagefright 库时有任何错误。
我使用 android 独立工具链来编译 ffmpeg 源代码。像下面的配置:
    function config_lsf                                                                                                                                                                             
{
# build flags
PREFIX=/home/cxm/work/Android/proj/dy-proj-careye/dy-proj-careye/jni/src/lib/android/ FLAGS="--prefix=$PREFIX"
FLAGS="$FLAGS --disable-static"
FLAGS="$FLAGS --disable-doc"
FLAGS="$FLAGS --disable-programs"
FLAGS="$FLAGS --disable-avdevice"
FLAGS="$FLAGS --disable-symver"
FLAGS="$FLAGS --enable-shared"
FLAGS="$FLAGS --cross-prefix=arm-linux-androideabi-"
FLAGS="$FLAGS --target-os=linux"
FLAGS="$FLAGS --arch=arm"
FLAGS="$FLAGS --enable-cross-compile"

FLAGS="$FLAGS --disable-decoder=h264"
FLAGS="$FLAGS --disable-decoder=h264_vdpau"
FLAGS="$FLAGS --enable-libstagefright-h264"

# cflags
CFLAGS="-Os -fpic -marm"
ANDROID_SOURCE=../mokesoures/
ANDROID_LIBS=../android-libs
CFLAGS="$CFLAGS -I$ANDROID_SOURCE/frameworks/av/include"
CFLAGS="$CFLAGS -I$ANDROID_SOURCE/frameworks/native/include/"
CFLAGS="$CFLAGS -I$ANDROID_SOURCE/system/core/include"
CFLAGS="$CFLAGS -I$ANDROID_SOURCE/hardware/libhardware/include"
CFLAGS="$CFLAGS -I$ANDROID_SOURCE/frameworks/native/include/media/openmax/"

# ld flags
LDFLAGS="-Wl,--fix-cortex-a8"
LDFLAGS="$LDFLAGS -lstdc++ -lgnustl_shared -lstagefright -lutils -lbinder"
LDFLAGS="$LDFLAGS -L$ANDROID_LIBS"
LDFLAGS="$LDFLAGS -Wl,-rpath-link,$ANDROID_LIBS"

./configure.android $FLAGS --extra-cflags="$CFLAGS" \
--extra-ldflags="$LDFLAGS" \

sed -i 's/#define\ HAVE_POSIX_MEMALIGN\ 1/#define\ HAVE_POSIX_MEMALIGN\ 0/' ./config.h
make -j4 V=1 2>&1 | tee log
make install
}

请帮助有关此主题。非常感谢。

最佳答案

_ZTIN7android11MediaSourceE android::MediaSource 的类型信息.你可能有 -frtti 在您的构建配置中启用,但 Android 库不包含运行时类型信息;所以,你应该至少从 中删除这个标志。 FF来源类(class)。

关于android - ffmpeg : undefined symbol '_ZTIN7android11MediaSourceE' 的怯场,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24721977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com