From 733f5990d0600589782bcfa5c9e22a9391c6c19e Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Mon, 5 Jul 2010 12:42:19 +0000 Subject: Factorize ff_generate_sliding_window_mmcos() out. Originally committed as revision 24056 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/h264.h | 2 ++ libavcodec/h264_refs.c | 33 +++++++++++++++++++-------------- 2 files changed, 21 insertions(+), 14 deletions(-) (limited to 'libavcodec') diff --git a/libavcodec/h264.h b/libavcodec/h264.h index 1bb18d1..3f0996a 100644 --- a/libavcodec/h264.h +++ b/libavcodec/h264.h @@ -666,6 +666,8 @@ int ff_h264_execute_ref_pic_marking(H264Context *h, MMCO *mmco, int mmco_count); int ff_h264_decode_ref_pic_marking(H264Context *h, GetBitContext *gb); +void ff_generate_sliding_window_mmcos(H264Context *h); + /** * Check if the top & left blocks are available if needed & change the dc mode so it only uses the available blocks. diff --git a/libavcodec/h264_refs.c b/libavcodec/h264_refs.c index ed715c6..7caa4b0 100644 --- a/libavcodec/h264_refs.c +++ b/libavcodec/h264_refs.c @@ -474,6 +474,24 @@ static void print_long_term(H264Context *h) { } } +void ff_generate_sliding_window_mmcos(H264Context *h) { + MpegEncContext * const s = &h->s; + assert(h->long_ref_count + h->short_ref_count <= h->sps.ref_frame_count); + + if(h->short_ref_count && h->long_ref_count + h->short_ref_count == h->sps.ref_frame_count && + !(FIELD_PICTURE && !s->first_field && s->current_picture_ptr->reference)) { + h->mmco[0].opcode= MMCO_SHORT2UNUSED; + h->mmco[0].short_pic_num= h->short_ref[ h->short_ref_count - 1 ]->frame_num; + h->mmco_index= 1; + if (FIELD_PICTURE) { + h->mmco[0].short_pic_num *= 2; + h->mmco[1].opcode= MMCO_SHORT2UNUSED; + h->mmco[1].short_pic_num= h->mmco[0].short_pic_num + 1; + h->mmco_index= 2; + } + } +} + int ff_h264_execute_ref_pic_marking(H264Context *h, MMCO *mmco, int mmco_count){ MpegEncContext * const s = &h->s; int i, av_uninit(j); @@ -673,20 +691,7 @@ int ff_h264_decode_ref_pic_marking(H264Context *h, GetBitContext *gb){ } h->mmco_index= i; }else{ - assert(h->long_ref_count + h->short_ref_count <= h->sps.ref_frame_count); - - if(h->short_ref_count && h->long_ref_count + h->short_ref_count == h->sps.ref_frame_count && - !(FIELD_PICTURE && !s->first_field && s->current_picture_ptr->reference)) { - h->mmco[0].opcode= MMCO_SHORT2UNUSED; - h->mmco[0].short_pic_num= h->short_ref[ h->short_ref_count - 1 ]->frame_num; - h->mmco_index= 1; - if (FIELD_PICTURE) { - h->mmco[0].short_pic_num *= 2; - h->mmco[1].opcode= MMCO_SHORT2UNUSED; - h->mmco[1].short_pic_num= h->mmco[0].short_pic_num + 1; - h->mmco_index= 2; - } - } + ff_generate_sliding_window_mmcos(h); } } -- cgit v1.1