Hi, On Fri, Mar 16, 2012 at 10:36 AM, Janne Grunau <[email protected]> wrote: > The decoder knows in decode_frame() already if the next slice is the > first slice of a frame. So move all frame initialization code from > decode_slice here for clarity. This allows us to check if decoder has > still a partly decoded frame. If it has we can return it and mark it as > finished. This prevents hangs during frame-multithreaded decoding. [..] > + /* first slice */ > + if (si.start == 0) { > + if (s->mb_num_left > 0 && s->current_picture_ptr) { > + av_log(avctx, AV_LOG_WARNING, "last frame is incomplete.\n"); > + *got_picture_ptr = finish_frame(avctx, pict); > + //s->current_picture_ptr = NULL; > + s->mb_x = s->mb_y = s->mb_num_left = 0; > + return 0; > + }
I don't think this works in -mt in practice. We _require_ that buffers are consumed in full in MT codecs, and that by extension means that a buffer contains no more than 1 frame. This basically comes down to 2 frames in a buffer. I don't think this happens in practice anyway, so I'd just error out. Ronald _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
