Esempio n. 1
0
static int read_chunk(AVFormatContext *s)
{
    DHAVContext *dhav = s->priv_data;
    unsigned frame_length, ext_length;
    int64_t start, end;
    int ret;

    start = avio_tell(s->pb);

    if (avio_feof(s->pb))
        return AVERROR_EOF;

    if (avio_rl32(s->pb) != MKTAG('D','H','A','V'))
        return AVERROR_INVALIDDATA;

    dhav->type = avio_r8(s->pb);
    dhav->subtype = avio_r8(s->pb);
    dhav->channel = avio_r8(s->pb);
    dhav->frame_subnumber = avio_r8(s->pb);
    dhav->frame_number = avio_rl32(s->pb);
    frame_length = avio_rl32(s->pb);

    if (frame_length < 24)
        return AVERROR_INVALIDDATA;
    if (dhav->type == 0xf1) {
        avio_skip(s->pb, frame_length - 16);
        return 0;
    }

    dhav->date = avio_rl32(s->pb);
    dhav->timestamp = avio_rl16(s->pb);
    ext_length = avio_r8(s->pb);
    avio_skip(s->pb, 1); // checksum

    ret = parse_ext(s, ext_length);
    if (ret < 0)
        return ret;

    end = avio_tell(s->pb);

    return frame_length - 8 - (end - start);
}
Esempio n. 2
0
static BtorNode *
parse_uext (BtorBTORParser * parser, int len)
{
  return parse_ext (parser, len, btor_uext_exp);
}