+ int ret, consumed = 0;
+
+ if (!get_bits_left(gb)) {
+ uint8_t *buf;
+ /* handle end-of-stream */
+ if (!avpkt->size) {
+ *got_frame_ptr = 0;
+ return 0;
+ }
+ if (avpkt->size < 4) {
+ av_log(avctx, AV_LOG_ERROR, "Packet is too small\n");
+ return AVERROR_INVALIDDATA;
+ }
+ buf = av_realloc(s->packet_buffer, avpkt->size + FF_INPUT_BUFFER_PADDING_SIZE);
+ if (!buf)
+ return AVERROR(ENOMEM);
+ s->packet_buffer = buf;
+ memcpy(s->packet_buffer, avpkt->data, avpkt->size);
+ init_get_bits(gb, s->packet_buffer, avpkt->size * 8);
+ consumed = avpkt->size;
+
+ /* skip reported size */
+ skip_bits_long(gb, 32);
+ }