+ if (!buf) {
+ if (!data->split_buf || data->split_pos + 2 > data->split_buf_len ||
+ data->split_pkts <= 0) {
+ av_log(ctx, AV_LOG_ERROR, "No more data to return\n");
+ return AVERROR_INVALIDDATA;
+ }
+ pkt_len = AV_RB16(data->split_buf + data->split_pos);
+ data->split_pos += 2;
+ if (data->split_pos + pkt_len > data->split_buf_len) {
+ av_log(ctx, AV_LOG_ERROR, "Not enough data to return\n");
+ return AVERROR_INVALIDDATA;
+ }
+ if (av_new_packet(pkt, pkt_len)) {
+ av_log(ctx, AV_LOG_ERROR, "Out of memory.\n");
+ return AVERROR(ENOMEM);
+ }
+ pkt->stream_index = st->index;
+ memcpy(pkt->data, data->split_buf + data->split_pos, pkt_len);
+ data->split_pos += pkt_len;
+ data->split_pkts--;
+ return data->split_pkts > 0;
+ }
+