0

我也是新手mpeg2dec,我一直在尝试使用 mpeg2.h(from libmpeg2) 从视频文件中提取序列头,但没有得到任何结果。
我尝试获取STATE_SEQUENCE并尝试指向文件中的该位置,但无法将其复制到另一个文件。

#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
//mpeg2dec library
#include "mpeg2dec/mpeg2.h"
//jni header
#include "VideoProc.h"

int mpeg2Fun(uint8_t * pointer);
//jni function to get byte array from and return integer
JNIEXPORT jint JNICALL Java_VideoProc_mpeg2FunC(JNIEnv * env, jobject jobj, jbyteArray bytes)
{
    jbyte u_byte[4096] ;
    (*env)->GetByteArrayRegion(env,bytes, 0, 4096, u_byte);

    jint reply=mpeg2Fun(u_byte);

    return reply;
}

int mpeg2Fun(uint8_t * pointer)
{
    mpeg2dec_t * decoder;
    const mpeg2_info_t * info;
    const mpeg2_sequence_t * sequence;
    mpeg2_state_t state;
    size_t size;
    int framenum = 0;

    decoder = mpeg2_init ();
    if (decoder == NULL) {
    fprintf (stderr, "Could not allocate a decoder object.\n");
    exit (1);
    }
    info = mpeg2_info (decoder);

    int t;
    size = (size_t)-1;
    do {
    state = mpeg2_parse (decoder);
    sequence = info->sequence;
    switch (state) {
    case STATE_BUFFER:
        mpeg2_buffer (decoder, pointer, pointer + 4096);
        break;
    case STATE_SEQUENCE:
        t=mpeg2_getpos(decoder);
        return 4096-t;
        break;
    default:
        break;
    }
    } while (size);

    mpeg2_close (decoder);
}

在 case 语句中STATE_SEQUENCE:我不想返回位置,而是想将整个序列头写入另一个文件。这是正确的还是不正确的?

4

0 回答 0