【问题标题】:Statement has no effect 'AVPacket'声明无效 'AVPacket'
【发布时间】:2013-11-03 18:09:16
【问题描述】:

我正在使用 android NDK 和 FFmpeg 本机库开发解码器。我已经使用 Android 工具为项目提供了本机支持,并且我在 videodecoder.cpp 文件中有 C 代码。在文件中,下面的函数给了我这个问题

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 };

它说`Statement has no effect "AVPAcket" and

在线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 *)'

【问题讨论】:

    标签: android c++ c android-ndk ffmpeg


    【解决方案1】:

    问题是

    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;
    

    这应该会得到更清晰的错误输出。

    【讨论】:

      猜你喜欢
      • 2014-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-18
      • 2020-01-25
      • 2021-08-11
      • 1970-01-01
      相关资源
      最近更新 更多