summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorAndreas Öman <andreas@olebyn.nu>2007-06-19 21:34:04 +0000
committerGuillaume Poirier <gpoirier@mplayerhq.hu>2007-06-19 21:34:04 +0000
commit995a30c06bc04045eeeea5aa7d987cd33fd1fcfb (patch)
tree9b54ec489f92ea450702349adac1fbc6fc17d40e /libavcodec
parent8c71c5e45450648caf7932e6b382803588506460 (diff)
Decouple bit context from h264 context in decode_ref_pic_marking()
(done in order to implement slice-level parallel decoding) Patch by Andreas Öman % andreas olebyn nu % Original thread: Date: Jun 15, 2007 10:10 PM Subject: [FFmpeg-devel] [PATCH] h264 parallelized, (was: Parallelized h264 proof-of-concept) Originally committed as revision 9371 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/h264.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index 9930624824..a8801a1817 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -4006,13 +4006,13 @@ static int execute_ref_pic_marking(H264Context *h, MMCO *mmco, int mmco_count){
return 0;
}
-static int decode_ref_pic_marking(H264Context *h){
+static int decode_ref_pic_marking(H264Context *h, GetBitContext *gb){
MpegEncContext * const s = &h->s;
int i;
if(h->nal_unit_type == NAL_IDR_SLICE){ //FIXME fields
- s->broken_link= get_bits1(&s->gb) -1;
- h->mmco[0].long_index= get_bits1(&s->gb) - 1; // current_long_term_idx
+ s->broken_link= get_bits1(gb) -1;
+ h->mmco[0].long_index= get_bits1(gb) - 1; // current_long_term_idx
if(h->mmco[0].long_index == -1)
h->mmco_index= 0;
else{
@@ -4020,20 +4020,20 @@ static int decode_ref_pic_marking(H264Context *h){
h->mmco_index= 1;
}
}else{
- if(get_bits1(&s->gb)){ // adaptive_ref_pic_marking_mode_flag
+ if(get_bits1(gb)){ // adaptive_ref_pic_marking_mode_flag
for(i= 0; i<MAX_MMCO_COUNT; i++) {
- MMCOOpcode opcode= get_ue_golomb(&s->gb);;
+ MMCOOpcode opcode= get_ue_golomb(gb);
h->mmco[i].opcode= opcode;
if(opcode==MMCO_SHORT2UNUSED || opcode==MMCO_SHORT2LONG){
- h->mmco[i].short_frame_num= (h->frame_num - get_ue_golomb(&s->gb) - 1) & ((1<<h->sps.log2_max_frame_num)-1); //FIXME fields
+ h->mmco[i].short_frame_num= (h->frame_num - get_ue_golomb(gb) - 1) & ((1<<h->sps.log2_max_frame_num)-1); //FIXME fields
/* if(h->mmco[i].short_frame_num >= h->short_ref_count || h->short_ref[ h->mmco[i].short_frame_num ] == NULL){
av_log(s->avctx, AV_LOG_ERROR, "illegal short ref in memory management control operation %d\n", mmco);
return -1;
}*/
}
if(opcode==MMCO_SHORT2LONG || opcode==MMCO_LONG2UNUSED || opcode==MMCO_LONG || opcode==MMCO_SET_MAX_LONG){
- unsigned int long_index= get_ue_golomb(&s->gb);
+ unsigned int long_index= get_ue_golomb(gb);
if(/*h->mmco[i].long_index >= h->long_ref_count || h->long_ref[ h->mmco[i].long_index ] == NULL*/ long_index >= 16){
av_log(h->s.avctx, AV_LOG_ERROR, "illegal long ref in memory management control operation %d\n", opcode);
return -1;
@@ -4416,7 +4416,7 @@ static int decode_slice_header(H264Context *h){
h->use_weight = 0;
if(s->current_picture.reference)
- decode_ref_pic_marking(h);
+ decode_ref_pic_marking(h, &s->gb);
if(FRAME_MBAFF)
fill_mbaff_ref_list(h);