radeon/vce: implement non-referenced frames
authorLeo Liu <leo.liu@amd.com>
Tue, 27 May 2014 14:12:01 +0000 (10:12 -0400)
committerChristian König <christian.koenig@amd.com>
Tue, 27 May 2014 14:56:52 +0000 (16:56 +0200)
Signed-off-by: Leo Liu <leo.liu@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
src/gallium/drivers/radeon/radeon_vce.c
src/gallium/drivers/radeon/radeon_vce_40_2_2.c

index 222f32e..81e62d3 100644 (file)
@@ -231,11 +231,13 @@ static void rvce_end_frame(struct pipe_video_codec *encoder,
        flush(enc);
 
        /* update the CPB backtrack with the just encoded frame */
-       LIST_DEL(&slot->list);
        slot->picture_type = enc->pic.picture_type;
        slot->frame_num = enc->pic.frame_num;
        slot->pic_order_cnt = enc->pic.pic_order_cnt;
-       LIST_ADD(&slot->list, &enc->cpb_slots);
+       if (!enc->pic.not_referenced) {
+               LIST_DEL(&slot->list);
+               LIST_ADD(&slot->list, &enc->cpb_slots);
+       }
 }
 
 static void rvce_get_feedback(struct pipe_video_codec *encoder,
index 3b67b31..3010c5b 100644 (file)
@@ -283,7 +283,7 @@ static void encode(struct rvce_encoder *enc)
        RVCE_CS(enc->pic.picture_type == PIPE_H264_ENC_PICTURE_TYPE_IDR); // encIdrFlag
        RVCE_CS(0x00000000); // encIdrPicId
        RVCE_CS(0x00000000); // encMGSKeyPic
-       RVCE_CS(0x00000001); // encReferenceFlag
+       RVCE_CS(!enc->pic.not_referenced); // encReferenceFlag
        RVCE_CS(0x00000000); // encTemporalLayerIndex
        RVCE_CS(0x00000000); // num_ref_idx_active_override_flag
        RVCE_CS(0x00000000); // num_ref_idx_l0_active_minus1