static int read_header(AVFormatContext *s,

                       AVFormatParameters *ap)

{

    JVDemuxContext *jv = s->priv_data;

    AVIOContext *pb = s->pb;

    AVStream *vst, *ast;

    int64_t audio_pts = 0;

    int64_t offset;

    int i;



    avio_skip(pb, 80);



    ast = av_new_stream(s, 0);

    vst = av_new_stream(s, 1);

    if (!ast || !vst)

        return AVERROR(ENOMEM);



    vst->codec->codec_type  = CODEC_TYPE_VIDEO;

    vst->codec->codec_id    = CODEC_ID_JV;

    vst->codec->codec_tag   = 0; /* no fourcc */

    vst->codec->width       = avio_rl16(pb);

    vst->codec->height      = avio_rl16(pb);

    vst->nb_frames          =

    ast->nb_index_entries   = avio_rl16(pb);

    av_set_pts_info(vst, 64, avio_rl16(pb), 1000);



    avio_skip(pb, 4);



    ast->codec->codec_type  = CODEC_TYPE_AUDIO;

    ast->codec->codec_id    = CODEC_ID_PCM_U8;

    ast->codec->codec_tag   = 0; /* no fourcc */

    ast->codec->sample_rate = avio_rl16(pb);

    ast->codec->channels    = 1;

    av_set_pts_info(ast, 64, 1, ast->codec->sample_rate);



    avio_skip(pb, 10);



    ast->index_entries = av_malloc(ast->nb_index_entries * sizeof(*ast->index_entries));

    if (!ast->index_entries)

        return AVERROR(ENOMEM);



    jv->frames = av_malloc(ast->nb_index_entries * sizeof(JVFrame));

    if (!jv->frames)

        return AVERROR(ENOMEM);



    offset = 0x68 + ast->nb_index_entries * 16;

    for(i = 0; i < ast->nb_index_entries; i++) {

        AVIndexEntry *e   = ast->index_entries + i;

        JVFrame      *jvf = jv->frames + i;



        /* total frame size including audio, video, palette data and padding */

        e->size         = avio_rl32(pb);

        e->timestamp    = i;

        e->pos          = offset;

        offset         += e->size;



        jvf->audio_size = avio_rl32(pb);

        jvf->video_size = avio_rl32(pb);

        jvf->palette_size = avio_r8(pb) ? 768 : 0;



        if (avio_r8(pb))

             av_log(s, AV_LOG_WARNING, "unsupported audio codec\n");

        jvf->video_type = avio_r8(pb);

        avio_skip(pb, 1);



        e->timestamp = jvf->audio_size ? audio_pts : AV_NOPTS_VALUE;

        audio_pts += jvf->audio_size;



        e->flags = jvf->video_type != 1 ? AVINDEX_KEYFRAME : 0;

    }



    jv->state = JV_AUDIO;

    return 0;

}
static int read_header(AVFormatContext *s,

                       AVFormatParameters *ap)

{

    JVDemuxContext *jv = s->priv_data;

    AVIOContext *pb = s->pb;

    AVStream *vst, *ast;

    int64_t audio_pts = 0;

    int64_t offset;

    int i;



    avio_skip(pb, 80);



    ast = av_new_stream(s, 0);

    vst = av_new_stream(s, 1);

    if (!ast || !vst)

        return AVERROR(ENOMEM);



    vst->codec->codec_type  = CODEC_TYPE_VIDEO;

    vst->codec->codec_id    = CODEC_ID_JV;

    vst->codec->codec_tag   = 0; 

    vst->codec->width       = avio_rl16(pb);

    vst->codec->height      = avio_rl16(pb);

    vst->nb_frames          =

    ast->nb_index_entries   = avio_rl16(pb);

    av_set_pts_info(vst, 64, avio_rl16(pb), 1000);



    avio_skip(pb, 4);



    ast->codec->codec_type  = CODEC_TYPE_AUDIO;

    ast->codec->codec_id    = CODEC_ID_PCM_U8;

    ast->codec->codec_tag   = 0; 

    ast->codec->sample_rate = avio_rl16(pb);

    ast->codec->channels    = 1;

    av_set_pts_info(ast, 64, 1, ast->codec->sample_rate);



    avio_skip(pb, 10);



    ast->index_entries = av_malloc(ast->nb_index_entries * sizeof(*ast->index_entries));

    if (!ast->index_entries)

        return AVERROR(ENOMEM);



    jv->frames = av_malloc(ast->nb_index_entries * sizeof(JVFrame));

    if (!jv->frames)

        return AVERROR(ENOMEM);



    offset = 0x68 + ast->nb_index_entries * 16;

    for(i = 0; i < ast->nb_index_entries; i++) {

        AVIndexEntry *e   = ast->index_entries + i;

        JVFrame      *jvf = jv->frames + i;



        

        e->size         = avio_rl32(pb);

        e->timestamp    = i;

        e->pos          = offset;

        offset         += e->size;



        jvf->audio_size = avio_rl32(pb);

        jvf->video_size = avio_rl32(pb);

        jvf->palette_size = avio_r8(pb) ? 768 : 0;



        if (avio_r8(pb))

             av_log(s, AV_LOG_WARNING, "unsupported audio codec\n");

        jvf->video_type = avio_r8(pb);

        avio_skip(pb, 1);



        e->timestamp = jvf->audio_size ? audio_pts : AV_NOPTS_VALUE;

        audio_pts += jvf->audio_size;



        e->flags = jvf->video_type != 1 ? AVINDEX_KEYFRAME : 0;

    }



    jv->state = JV_AUDIO;

    return 0;

}
static int FUNC_0(AVFormatContext *VAR_0,

                       AVFormatParameters *VAR_1)

{

    JVDemuxContext *jv = VAR_0->priv_data;

    AVIOContext *pb = VAR_0->pb;

    AVStream *vst, *ast;

    int64_t audio_pts = 0;

    int64_t offset;

    int VAR_2;



    avio_skip(pb, 80);



    ast = av_new_stream(VAR_0, 0);

    vst = av_new_stream(VAR_0, 1);

    if (!ast || !vst)

        return AVERROR(ENOMEM);



    vst->codec->codec_type  = CODEC_TYPE_VIDEO;

    vst->codec->codec_id    = CODEC_ID_JV;

    vst->codec->codec_tag   = 0; 

    vst->codec->width       = avio_rl16(pb);

    vst->codec->height      = avio_rl16(pb);

    vst->nb_frames          =

    ast->nb_index_entries   = avio_rl16(pb);

    av_set_pts_info(vst, 64, avio_rl16(pb), 1000);



    avio_skip(pb, 4);



    ast->codec->codec_type  = CODEC_TYPE_AUDIO;

    ast->codec->codec_id    = CODEC_ID_PCM_U8;

    ast->codec->codec_tag   = 0; 

    ast->codec->sample_rate = avio_rl16(pb);

    ast->codec->channels    = 1;

    av_set_pts_info(ast, 64, 1, ast->codec->sample_rate);



    avio_skip(pb, 10);



    ast->index_entries = av_malloc(ast->nb_index_entries * sizeof(*ast->index_entries));

    if (!ast->index_entries)

        return AVERROR(ENOMEM);



    jv->frames = av_malloc(ast->nb_index_entries * sizeof(JVFrame));

    if (!jv->frames)

        return AVERROR(ENOMEM);



    offset = 0x68 + ast->nb_index_entries * 16;

    for(VAR_2 = 0; VAR_2 < ast->nb_index_entries; VAR_2++) {

        AVIndexEntry *e   = ast->index_entries + VAR_2;

        JVFrame      *jvf = jv->frames + VAR_2;



        

        e->size         = avio_rl32(pb);

        e->timestamp    = VAR_2;

        e->pos          = offset;

        offset         += e->size;



        jvf->audio_size = avio_rl32(pb);

        jvf->video_size = avio_rl32(pb);

        jvf->palette_size = avio_r8(pb) ? 768 : 0;



        if (avio_r8(pb))

             av_log(VAR_0, AV_LOG_WARNING, "unsupported audio codec\n");

        jvf->video_type = avio_r8(pb);

        avio_skip(pb, 1);



        e->timestamp = jvf->audio_size ? audio_pts : AV_NOPTS_VALUE;

        audio_pts += jvf->audio_size;



        e->flags = jvf->video_type != 1 ? AVINDEX_KEYFRAME : 0;

    }



    jv->state = JV_AUDIO;

    return 0;

}
static int FUNC_0(AVFormatContext *VAR_0,
AVFormatParameters *VAR_1)
{ JVDemuxContext *jv = VAR_0->priv_data; AVIOContext *pb = VAR_0->pb; AVStream *vst, *ast; int64_t audio_pts = 0; int64_t offset; int VAR_2; avio_skip(pb, 80); ast = av_new_stream(VAR_0, 0); vst = av_new_stream(VAR_0, 1); if (!ast || !vst)
return AVERROR(ENOMEM); vst->codec->codec_type  = CODEC_TYPE_VIDEO; vst->codec->codec_id    = CODEC_ID_JV; vst->codec->codec_tag   = 0; vst->codec->width       = avio_rl16(pb); vst->codec->height      = avio_rl16(pb); vst->nb_frames          =
ast->nb_index_entries   = avio_rl16(pb); av_set_pts_info(vst, 64, avio_rl16(pb), 1000); avio_skip(pb, 4); ast->codec->codec_type  = CODEC_TYPE_AUDIO; ast->codec->codec_id    = CODEC_ID_PCM_U8; ast->codec->codec_tag   = 0; ast->codec->sample_rate = avio_rl16(pb); ast->codec->channels    = 1; av_set_pts_info(ast, 64, 1, ast->codec->sample_rate); avio_skip(pb, 10); ast->index_entries = av_malloc(ast->nb_index_entries * sizeof(*ast->index_entries)); if (!ast->index_entries)
return AVERROR(ENOMEM); jv->frames = av_malloc(ast->nb_index_entries * sizeof(JVFrame)); if (!jv->frames)
return AVERROR(ENOMEM); offset = 0x68 + ast->nb_index_entries * 16; for(VAR_2 = 0; VAR_2 < ast->nb_index_entries; VAR_2++) { AVIndexEntry *e   = ast->index_entries + VAR_2; JVFrame      *jvf = jv->frames + VAR_2; e->size         = avio_rl32(pb); e->timestamp    = VAR_2; e->pos          = offset; offset         += e->size; jvf->audio_size = avio_rl32(pb); jvf->video_size = avio_rl32(pb); jvf->palette_size = avio_r8(pb) ? 768 : 0; if (avio_r8(pb))
av_log(VAR_0, AV_LOG_WARNING, "unsupported audio codec\n"); jvf->video_type = avio_r8(pb); avio_skip(pb, 1); e->timestamp = jvf->audio_size ? audio_pts : AV_NOPTS_VALUE; audio_pts += jvf->audio_size; e->flags = jvf->video_type != 1 ? AVINDEX_KEYFRAME : 0; } jv->state = JV_AUDIO; return 0; }