Я разрабатываю декодер, используя собственные библиотеки NDK android и FFmpeg. Я поместил Native Support для проекта с помощью Android Tools, и у меня есть код C в файле videodecoder.cpp. В файле следующая функция дает мне эту проблему
JNIEXPORT jint Java_ssrp_android_ffmpegdecoder_H264Decoder_consumeNalUnitsFromDirectBuffer(
JNIEnv* env, jobject thiz, jobject nal_units, jint num_bytes,
jlong pkt_pts) {
DecoderContext *ctx = get_ctx(env, thiz);
void *buf = NULL;
if (nal_units == NULL) {
D("Received null buffer, sending empty packet to decoder");
} else {
buf = env->GetDirectBufferAddress(nal_units);
if (buf == NULL) {
D("Error getting direct buffer address");
return -1;
}
}
AVPacket packet = {.data = (uint8_t*) buf, .size = num_bytes, .pts = pkt_pts };
int frameFinished = 0;
int res = avcodec_decode_video2(ctx->codec_ctx, ctx->src_frame,&frameFinished, &packet);
if (frameFinished)
ctx->frame_ready = 1;
return res;
}
На линии AVPacket packet = {.data = (uint8_t*) buf,.size = num_bytes,.pts = pkt_pts };
В нем говорится, что "Заявление не имеет эффекта" AVPAcket "и
На строке int res = avcodec_decode_video2(ctx->codec_ctx, ctx->src_frame,&frameFinished, &packet);
В нем говорится, что Invalid arguments ' Candidates are: int avcodec_decode_video2(AVCodecContext *, AVFrame *, int *, const AVPacket *)'
Проблема в
AVPacket packet = {.data = (uint8_t*) buf, .size = num_bytes, .pts = pkt_pts }
поскольку компилятор не понимает тип/инициализацию. Это приводит к ошибке недопустимого аргумента. Возможно, разделите строку на:
AVPacket packet;
packet.data = (uint8_t*) buf;
packet.size = num_bytes;
packet.pts = pkt_pts;
Это должно обеспечить более четкий вывод ошибок.