Hi, On Fri, Mar 16, 2012 at 3:56 PM, Ronald S. Bultje <[email protected]> wrote: > On Fri, Mar 16, 2012 at 3:35 PM, Janne Grunau <[email protected]> wrote: >> if(last && s->current_picture_ptr){ >> if(r->loop_filter) >> r->loop_filter(r, s->mb_height - 1); >> - ff_er_frame_end(s); >> - ff_MPV_frame_end(s); >> >> - if (HAVE_THREADS && (s->avctx->active_thread_type & >> FF_THREAD_FRAME)) >> - ff_thread_report_progress(&s->current_picture_ptr->f, INT_MAX, >> 0); >> - >> - if (s->pict_type == AV_PICTURE_TYPE_B || s->low_delay) { >> - *pict = s->current_picture_ptr->f; >> - } else if (s->last_picture_ptr != NULL) { >> - *pict = s->last_picture_ptr->f; >> - } >> - >> - if(s->last_picture_ptr || s->low_delay){ >> - *data_size = sizeof(AVFrame); >> - ff_print_debug_info(s, pict); >> - } >> - s->current_picture_ptr = NULL; //so we can detect if frame_end >> wasnt called (find some nicer solution...) >> + *got_picture_ptr = finish_frame(avctx, pict); >> } > > This will hang if last is not set for some reason, e.g. if > decode_slice() returned an error. You need to call finish_frame() > unconditionally.
I also see crashes on size changes. For now, we should probably disallow size changes with frame threading enabled. Ronald _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
