Lines Matching refs:smk
94 SmackerContext *smk = s->priv_data;
108 smk->frames = avio_rl32(pb);
117 smk->frames++;
118 if (smk->frames > 0xFFFFFF) {
119 av_log(s, AV_LOG_ERROR, "Too many frames: %"PRIu32"\n", smk->frames);
136 smk->videoindex = st->index;
145 st->duration = smk->frames;
170 smk->indexes[i] = -1;
178 smk->indexes[i] = ast->index;
199 smk->duration_size[i] = 4;
208 st->priv_data = av_malloc_array(smk->frames, sizeof(*smk->frm_size) +
209 sizeof(*smk->frm_flags));
212 smk->frm_size = st->priv_data;
213 smk->frm_flags = (void*)(smk->frm_size + smk->frames);
217 for (i = 0; i < smk->frames; i++) {
218 smk->frm_size[i] = avio_rl32(pb);
219 if ((ret = av_add_index_entry(st, pos, i, smk->frm_size[i], 0,
220 (i == 0 || (smk->frm_size[i] & 1)) ? AVINDEX_KEYFRAME : 0)) < 0)
222 pos += smk->frm_size[i];
224 if ((ret = ffio_read_size(pb, smk->frm_flags, smk->frames)) < 0 ||
236 SmackerContext *smk = s->priv_data;
240 if (avio_feof(s->pb) || smk->cur_frame >= smk->frames)
244 if (!smk->next_audio_index) {
245 smk->frame_size = smk->frm_size[smk->cur_frame] & (~3);
246 smk->next_frame_pos = avio_tell(s->pb) + smk->frame_size;
247 flags = smk->frm_flags[smk->cur_frame];
248 smk->flags = flags >> 1;
252 uint8_t *pal = smk->pal;
258 if (size > smk->frame_size) {
262 smk->frame_size -= size--;
296 smk->new_palette = 1;
300 for (int i = smk->next_audio_index; i < 7; i++) {
301 if (smk->flags & (1 << i)) {
305 if ((int)size < 4 + smk->duration_size[i] || size > smk->frame_size) {
310 smk->frame_size -= size;
313 if (smk->indexes[i] < 0 ||
314 s->streams[smk->indexes[i]]->discard >= AVDISCARD_ALL) {
315 smk->aud_pts[i] += smk->duration_size[i] ? avio_rl32(s->pb)
317 avio_skip(s->pb, size - smk->duration_size[i]);
324 pkt->stream_index = smk->indexes[i];
325 pkt->pts = smk->aud_pts[i];
326 pkt->duration = smk->duration_size[i] ? AV_RL32(pkt->data)
328 smk->aud_pts[i] += pkt->duration;
329 smk->next_audio_index = i + 1;
334 if (s->streams[smk->videoindex]->discard >= AVDISCARD_ALL) {
338 if (smk->frame_size >= INT_MAX/2) {
342 if ((ret = av_new_packet(pkt, smk->frame_size + 769)) < 0)
344 flags = smk->new_palette;
345 if ((smk->frm_size[smk->cur_frame] & 1) || smk->cur_frame == 0)
348 memcpy(pkt->data + 1, smk->pal, 768);
349 ret = ffio_read_size(s->pb, pkt->data + 769, smk->frame_size);
352 pkt->stream_index = smk->videoindex;
353 pkt->pts = smk->cur_frame;
357 smk->next_audio_index = 0;
358 smk->new_palette = 0;
359 smk->cur_frame++;
363 avio_seek(s->pb, smk->next_frame_pos, SEEK_SET);
364 smk->next_audio_index = 0;
365 smk->cur_frame++;
373 SmackerContext *smk = s->priv_data;
380 if (timestamp < 0 || timestamp >= smk->frames)
393 smk->cur_frame = ret;
394 smk->next_audio_index = 0;
395 smk->new_palette = 0;
396 memset(smk->pal, 0, sizeof(smk->pal));
397 memset(smk->aud_pts, 0, sizeof(smk->aud_pts));
403 .name = "smk",