void ff_h264_remove_all_refs(H264Context *h) { int i; for (i = 0; i < 16; i++) { remove_long(h, i, 0); } assert(h->long_ref_count == 0); if (h->short_ref_count && !h->last_pic_for_ec.f->data[0]) { ff_h264_unref_picture(h, &h->last_pic_for_ec); if (h->short_ref[0]->f->buf[0]) ff_h264_ref_picture(h, &h->last_pic_for_ec, h->short_ref[0]); } for (i = 0; i < h->short_ref_count; i++) { unreference_pic(h, h->short_ref[i], 0); h->short_ref[i] = NULL; } h->short_ref_count = 0; memset(h->default_ref, 0, sizeof(h->default_ref)); for (i = 0; i < h->nb_slice_ctx; i++) { H264SliceContext *sl = &h->slice_ctx[i]; sl->list_count = sl->ref_count[0] = sl->ref_count[1] = 0; memset(sl->ref_list, 0, sizeof(sl->ref_list)); } }
void ff_h264_remove_all_refs(H264Context *h){ int i; for(i=0; i<16; i++){ remove_long(h, i, 0); } assert(h->long_ref_count==0); for(i=0; i<h->short_ref_count; i++){ unreference_pic(h, h->short_ref[i], 0); h->short_ref[i]= NULL; } h->short_ref_count=0; }
/** * Remove a picture from the long term reference list by its index in * that list. * @return the removed picture or NULL if an error occurs */ static Picture * remove_long(H264Context *h, int i, int ref_mask){ Picture *pic; pic= h->long_ref[i]; if (pic){ if(unreference_pic(h, pic, ref_mask)){ assert(h->long_ref[i]->long_ref == 1); h->long_ref[i]->long_ref= 0; h->long_ref[i]= NULL; h->long_ref_count--; } } return pic; }
/** * * @return the removed picture or NULL if an error occurs */ static Picture *remove_short(H264Context *h, int frame_num, int ref_mask) { Picture *pic; int i; if (h->avctx->debug & FF_DEBUG_MMCO) av_log(h->avctx, AV_LOG_DEBUG, "remove short %d count %d\n", frame_num, h->short_ref_count); pic = find_short(h, frame_num, &i); if (pic) { if (unreference_pic(h, pic, ref_mask)) remove_short_at_index(h, i); } return pic; }
void ff_h264_remove_all_refs(H264Context *h) { int i; for (i = 0; i < 16; i++) { remove_long(h, i, 0); } assert(h->long_ref_count == 0); if (h->short_ref_count && !h->last_pic_for_ec.f->data[0]) { ff_h264_unref_picture(h, &h->last_pic_for_ec); ff_h264_ref_picture(h, &h->last_pic_for_ec, h->short_ref[0]); } for (i = 0; i < h->short_ref_count; i++) { unreference_pic(h, h->short_ref[i], 0); h->short_ref[i] = NULL; } h->short_ref_count = 0; memset(h->default_ref, 0, sizeof(h->default_ref)); }