mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-29 22:00:58 +02:00
Further modularize short reference list management for upcoming PAFF implementation.
patch by Jeff Downs, heydowns a borg d com original thread: Subject: [FFmpeg-devel] [PATCH] Implement PAFF in H.264 Date: 18/09/07 20:30 Originally committed as revision 10661 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
5a7b254c75
commit
47e112f872
@ -3161,30 +3161,61 @@ static void flush_dpb(AVCodecContext *avctx){
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return the removed picture or NULL if an error occurs
|
||||
* Find a Picture in the short term reference list by frame number.
|
||||
* @param frame_num frame number to search for
|
||||
* @param idx the index into h->short_ref where returned picture is found
|
||||
* undefined if no picture found.
|
||||
* @return pointer to the found picture, or NULL if no pic with the provided
|
||||
* frame number is found
|
||||
*/
|
||||
static Picture * remove_short(H264Context *h, int frame_num){
|
||||
static Picture * find_short(H264Context *h, int frame_num, int *idx){
|
||||
MpegEncContext * const s = &h->s;
|
||||
int i;
|
||||
|
||||
if(s->avctx->debug&FF_DEBUG_MMCO)
|
||||
av_log(h->s.avctx, AV_LOG_DEBUG, "remove short %d count %d\n", frame_num, h->short_ref_count);
|
||||
|
||||
for(i=0; i<h->short_ref_count; i++){
|
||||
Picture *pic= h->short_ref[i];
|
||||
if(s->avctx->debug&FF_DEBUG_MMCO)
|
||||
av_log(h->s.avctx, AV_LOG_DEBUG, "%d %d %p\n", i, pic->frame_num, pic);
|
||||
if(pic->frame_num == frame_num){
|
||||
h->short_ref[i]= NULL;
|
||||
if (--h->short_ref_count)
|
||||
memmove(&h->short_ref[i], &h->short_ref[i+1], (h->short_ref_count - i)*sizeof(Picture*));
|
||||
if(pic->frame_num == frame_num) {
|
||||
*idx = i;
|
||||
return pic;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a picture from the short term reference list by its index in
|
||||
* that list. This does no checking on the provided index; it is assumed
|
||||
* to be valid. Other list entries are shifted down.
|
||||
* @param i index into h->short_ref of picture to remove.
|
||||
*/
|
||||
static void remove_short_at_index(H264Context *h, int i){
|
||||
assert(i > 0 && i < h->short_ref_count);
|
||||
h->short_ref[i]= NULL;
|
||||
if (--h->short_ref_count)
|
||||
memmove(&h->short_ref[i], &h->short_ref[i+1], (h->short_ref_count - i)*sizeof(Picture*));
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return the removed picture or NULL if an error occurs
|
||||
*/
|
||||
static Picture * remove_short(H264Context *h, int frame_num){
|
||||
MpegEncContext * const s = &h->s;
|
||||
Picture *pic;
|
||||
int i;
|
||||
|
||||
if(s->avctx->debug&FF_DEBUG_MMCO)
|
||||
av_log(h->s.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)
|
||||
remove_short_at_index(h, i);
|
||||
|
||||
return pic;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return the removed picture or NULL if an error occurs
|
||||
|
Loading…
x
Reference in New Issue
Block a user