- if (frame_size < 0 || frame_size >= INT_MAX/2)
- return AVERROR_INVALIDDATA;
- if (av_new_packet(pkt, frame_size + 769))
- return AVERROR(ENOMEM);
- if(smk->frm_size[smk->cur_frame] & 1)
- palchange |= 2;
- pkt->data[0] = palchange;
- memcpy(pkt->data + 1, smk->pal, 768);
- ret = avio_read(s->pb, pkt->data + 769, frame_size);
- if(ret != frame_size)
- return AVERROR(EIO);
- pkt->stream_index = smk->videoindex;
- pkt->pts = smk->cur_frame;
- pkt->size = ret + 769;
- smk->cur_frame++;
- smk->nextpos = avio_tell(s->pb);
- } else {
- if (smk->stream_id[smk->curstream] < 0 || !smk->bufs[smk->curstream])
- return AVERROR_INVALIDDATA;
- if (av_new_packet(pkt, smk->buf_sizes[smk->curstream]))
- return AVERROR(ENOMEM);
- memcpy(pkt->data, smk->bufs[smk->curstream], smk->buf_sizes[smk->curstream]);
- pkt->size = smk->buf_sizes[smk->curstream];
- pkt->stream_index = smk->stream_id[smk->curstream];
- pkt->pts = smk->aud_pts[smk->curstream];
- smk->aud_pts[smk->curstream] += AV_RL32(pkt->data);
- smk->curstream--;