Почему компилятор не может неявно преобразовать в bool из sp & lt; android :: MetaData & gt ;?

Я пытаюсь скомпилировать ffmpeg с libstagefright, используя NDK. Я получаю следующую ошибку при компиляции libstagefright.cpp:

libavcodec/libstagefright.cpp: In function 'int Stagefright_init(AVCodecContext*)':
libavcodec/libstagefright.cpp:283:9: error: no match for 'operator!' (operand type is 'android::sp<android::MetaData>')
if (!meta) {
^
libavcodec/libstagefright.cpp:283:9: note: candidate is:
libavcodec/libstagefright.cpp:283:9: note: operator!(bool) <built-in>
libavcodec/libstagefright.cpp:283:9: note:   no known conversion for argument 1 from 'android::sp<android::MetaData>' to 'bool'
make: *** [libavcodec/libstagefright.o] Error 1

Код для соответствующего раздела libstagefright.cpp:

meta = new MetaData;
if (!meta) {
ret = AVERROR(ENOMEM);
goto fail;
}
meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_VIDEO_AVC);
meta->setInt32(kKeyWidth, avctx->width);
meta->setInt32(kKeyHeight, avctx->height);
meta->setData(kKeyAVCC, kTypeAVCC, avctx->extradata, avctx->extradata_size);

я использую NDK r10e-rc4 (64-bit) а также Ubuntu 14 64 bit

Может кто-нибудь подсказать, пожалуйста, почему возникает эта ошибка, что я делаю не так?

2

Решение

Для того, чтобы компилятор написал код для

if (!meta)

android::sp класс должен иметь operator!() определен, или должен быть способ для этого класса быть преобразованным в bool, т.е. operator bool(), Так как вы не можете изменить android::sp реализации, вам нужно найти другой способ написать это. Я предполагаю, что это должно работать:

if (meta != NULL)
0

Другие решения


По вопросам рекламы [email protected]