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); }
static BtorNode * parse_uext (BtorBTORParser * parser, int len) { return parse_ext (parser, len, btor_uext_exp); }