int pg_decode_composition(BITBUFFER *bb, BD_PG_COMPOSITION *p) { unsigned ii; pg_decode_video_descriptor(bb, &p->video_descriptor); pg_decode_composition_descriptor(bb, &p->composition_descriptor); p->palette_update_flag = bb_read(bb, 1); bb_skip(bb, 7); p->palette_id_ref = bb_read(bb, 8); p->num_composition_objects = bb_read(bb, 8); p->composition_object = calloc(p->num_composition_objects, sizeof(BD_PG_COMPOSITION_OBJECT)); for (ii = 0; ii < p->num_composition_objects; ii++) { pg_decode_composition_object(bb, &p->composition_object[ii]); } return 1; }
int ig_decode_interactive(BITBUFFER *bb, BD_IG_INTERACTIVE *p) { BD_PG_SEQUENCE_DESCRIPTOR sd; pg_decode_video_descriptor(bb, &p->video_descriptor); pg_decode_composition_descriptor(bb, &p->composition_descriptor); pg_decode_sequence_descriptor(bb, &sd); if (!sd.first_in_seq) { ERROR("ig_decode_interactive(): not first in seq\n"); return 0; } if (!sd.last_in_seq) { ERROR("ig_decode_interactive(): not last in seq\n"); return 0; } if (!bb_is_align(bb, 0x07)) { ERROR("ig_decode_interactive(): alignment error\n"); return 0; } return _decode_interactive_composition(bb, &p->interactive_composition); }