Lines Matching defs:frame
56 static void vp9_raw_reorder_frame_free(VP9RawReorderFrame **frame)
58 if (*frame)
59 av_packet_free(&(*frame)->packet);
60 av_freep(frame);
74 static int vp9_raw_reorder_frame_parse(AVBSFContext *bsf, VP9RawReorderFrame *frame)
84 err = init_get_bits(&bc, frame->packet->data, 8 * frame->packet->size);
90 av_log(bsf, AV_LOG_ERROR, "Invalid frame marker: %u.\n",
97 frame->profile = (profile_high_bit << 1) | profile_low_bit;
98 if (frame->profile == 3) {
107 frame->show_existing_frame = get_bits1(&bc);
108 if (frame->show_existing_frame) {
109 frame->frame_to_show = get_bits(&bc, 3);
113 frame->frame_type = get_bits1(&bc);
114 frame->show_frame = get_bits1(&bc);
117 if (frame->frame_type == 0) {
120 av_log(bsf, AV_LOG_ERROR, "Invalid frame sync code: %06x.\n",
124 frame->refresh_frame_flags = 0xff;
128 if (frame->show_frame == 0)
139 av_log(bsf, AV_LOG_ERROR, "Invalid frame sync code: "
143 if (frame->profile > 0) {
145 if (frame->profile >= 2) {
153 if (frame->profile == 1 || frame->profile == 3) {
158 if (frame->profile == 1 || frame->profile == 3)
162 frame->refresh_frame_flags = get_bits(&bc, 8);
164 frame->refresh_frame_flags = get_bits(&bc, 8);
177 *next_display = last_frame, *frame;
181 frame = ctx->slot[s];
182 if (!frame)
184 if (frame->needs_output && (!next_output ||
185 frame->sequence < next_output->sequence))
186 next_output = frame;
187 if (frame->needs_display && (!next_display ||
188 frame->pts < next_display->pts))
189 next_display = frame;
197 frame = next_output;
199 frame = next_display;
201 if (frame->needs_output && frame->needs_display &&
203 av_log(bsf, AV_LOG_DEBUG, "Output and display frame "
205 frame->sequence, frame->pts);
207 av_packet_move_ref(out, frame->packet);
209 frame->needs_output = frame->needs_display = 0;
210 } else if (frame->needs_output) {
211 if (frame->needs_display) {
212 av_log(bsf, AV_LOG_DEBUG, "Output frame %"PRId64" "
214 frame->sequence, frame->pts);
216 av_log(bsf, AV_LOG_DEBUG, "Output unshown frame "
218 frame->sequence, frame->pts);
221 av_packet_move_ref(out, frame->packet);
224 frame->needs_output = 0;
228 av_assert0(!frame->needs_output && frame->needs_display);
230 if (frame->slots == 0) {
231 av_log(bsf, AV_LOG_ERROR, "Attempting to display frame "
233 frame->needs_display = 0;
237 s = ff_ctz(frame->slots);
240 av_log(bsf, AV_LOG_DEBUG, "Display frame %"PRId64" "
242 frame->sequence, frame->pts, s);
253 put_bits(&pb, 1, frame->profile & 1);
255 put_bits(&pb, 1, (frame->profile >> 1) & 1);
256 if (frame->profile == 3) {
269 out->pts = out->dts = frame->pts;
271 frame->needs_display = 0;
280 VP9RawReorderFrame *frame;
285 frame = ctx->next_frame;
307 frame = av_mallocz(sizeof(*frame));
308 if (!frame) {
313 frame->packet = in;
314 frame->pts = in->pts;
315 frame->sequence = ++ctx->sequence;
316 err = vp9_raw_reorder_frame_parse(bsf, frame);
319 "frame: %d.\n", err);
323 frame->needs_output = 1;
324 frame->needs_display = frame->pts != AV_NOPTS_VALUE;
326 if (frame->show_existing_frame)
327 av_log(bsf, AV_LOG_DEBUG, "Show frame %"PRId64" "
328 "(%"PRId64"): show %u.\n", frame->sequence,
329 frame->pts, frame->frame_to_show);
331 av_log(bsf, AV_LOG_DEBUG, "New frame %"PRId64" "
333 frame->sequence, frame->pts, frame->frame_type,
334 frame->show_frame, frame->refresh_frame_flags);
336 ctx->next_frame = frame;
340 if (!(frame->refresh_frame_flags & (1 << s)))
345 // to the frame previously present in it. In order to be
346 // a valid stream, that frame must already have been
347 // displayed before the pts of the current frame.
364 if (!(frame->refresh_frame_flags & (1 << s)))
366 ctx->slot[s] = frame;
368 frame->slots = frame->refresh_frame_flags;
370 if (!frame->refresh_frame_flags) {
371 err = vp9_raw_reorder_make_output(bsf, out, frame);
374 "for transient frame.\n");
378 if (!frame->needs_display) {
379 vp9_raw_reorder_frame_free(&frame);
389 vp9_raw_reorder_frame_free(&frame);