Avcodec_find_encoder(AV_CODEC_ID_H264) возвращает нольAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Avcodec_find_encoder(AV_CODEC_ID_H264) возвращает ноль

Сообщение Anonymous »

Я создаю приложение для Android, которое будет кодировать изображение, снятое при предварительном просмотре камеры, а затем декодировать его. Я использую библиотеку ffmpeg для кодирования и декодирования. Чтобы создать статическую библиотеку с помощью x264, я использовал это руководство. http://dl.dropbox.com/u/22605641/ffmpeg ... /main.html. В качестве исходного кода ffmpeg, если я использую код, загруженный по ссылке, приведенной в руководстве, я могу его собрать, но не могу собрать библиотеку, если использую исходный код, загруженный отсюда git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg. Я построил библиотеку в Ubuntu и использую ее в Windows 7 в Eclipse. Поскольку мне нужны только кодировщик и декодер h264, я использовал следующий код для ffmpeg, слегка измененный из руководства.

Код: Выделить всё

#!/bin/bash

NDK=~/Documents/android-ndk-r8e
PLATFORM=$NDK/platforms/android-8/arch-arm
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86
PREFIX=/home/android-ffmpeg

function build_one
{
./configure --target-os=linux --prefix=$PREFIX \
--enable-cross-compile \
--enable-runtime-cpudetect \
--disable-asm \
--arch=arm \
--cc=$PREBUILT/bin/arm-linux-androideabi-gcc \
--cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
--disable-stripping \
--nm=$PREBUILT/bin/arm-linux-androideabi-nm \
--sysroot=$PLATFORM \
--enable-nonfree \
--enable-version3 \
--disable-everything \
--enable-gpl \
--disable-doc \
--enable-avresample \
--disable-ffplay \
--disable-ffserver \
--enable-ffmpeg \
--disable-ffprobe \
--enable-avcodec \
--enable-libx264 \
--enable-encoder=libx264 \
--enable-encoder=libx264rgb \
--enable-decoder=h263 \
--enable-decoder=h264 \
--enable-decoder=svq3 \
--enable-zlib \
--enable-gpl \
--enable-pic \
--disable-devices \
--disable-avdevice \
--extra-cflags="-I/home/android-ffmpeg/include -fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=armv7-a" \
--extra-ldflags="-L/home/android-ffmpeg/lib"
make -j4 install
$PREBUILT/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o
$PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -L$PREFIX/lib  -soname libffmpeg.so -shared -nostdlib  -z,noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavfilter/libavfilter.a libavresample/libavresample.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog -lx264 --warn-once --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a
}

build_one
После создания библиотеки я смог собрать android ndk. Небольшая часть моего кода JNI находится здесь.

Код: Выделить всё

JNIEXPORT jint JNICALL Java_com_example_testjava_TestjniActivity_initencoder(JNIEnv* env,jobject obj){

av_register_all();
avcodec_register_all();
codec = avcodec_find_encoder(AV_CODEC_ID_H264);
if (!codec) {
__android_log_write(ANDROID_LOG_INFO, "debug", "not found");
return -1;
}
.
.
.
}
Когда я запускаю исходный код Java, который вызывает initencoder(), я получаю -1 в качестве возвращаемого значения, а logcat печатает «не найден». Это означает, что avcodec_find_encoder() возвращает значение null, и если условие в порядке. Я не знаю, что случилось. Почему эта функция возвращает ноль? Я много искал, но не нашел решения, которое могло бы направить меня в правильном направлении. некоторые говорят, что нужно использовать avcodec_init(). Но команда ndk-build завершается с ошибкой и показывает ошибку, указывающую неопределенную ссылку на «avcodec_init()». Я начал со сборки библиотеки, потому что подумал, что, возможно, я делаю неправильно с первого этапа. Совершил ли я какую-либо ошибку при создании библиотеки, например, не включил то, что должен? Пожалуйста, помогите мне здесь. Для меня это срочно.

Подробнее здесь: https://stackoverflow.com/questions/158 ... turns-null
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»