Fixed. Thanks for the review. My account is still not activated. Leo
>-----Original Message----- >From: Christian König [mailto:deathsim...@vodafone.de] >Sent: Thursday, June 12, 2014 12:35 PM >To: Liu, Leo; mesa-dev@lists.freedesktop.org >Subject: Re: [Mesa-dev] [PATCH 5/5] radeon/vce: set number of cpbs based on >level > >Am 12.06.2014 18:27, schrieb Leo Liu: >> Signed-off-by: Leo Liu <leo....@amd.com> >> --- >> src/gallium/drivers/radeon/radeon_vce.c | 60 >+++++++++++++++++++++++++++++++-- >> src/gallium/drivers/radeon/radeon_vce.h | 3 +- >> 2 files changed, 58 insertions(+), 5 deletions(-) >> >> diff --git a/src/gallium/drivers/radeon/radeon_vce.c >> b/src/gallium/drivers/radeon/radeon_vce.c >> index 81e62d3..353f3b0 100644 >> --- a/src/gallium/drivers/radeon/radeon_vce.c >> +++ b/src/gallium/drivers/radeon/radeon_vce.c >> @@ -87,7 +87,7 @@ static void reset_cpb(struct rvce_encoder *enc) >> unsigned i; >> >> LIST_INITHEAD(&enc->cpb_slots); >> - for (i = 0; i < RVCE_NUM_CPB_FRAMES; ++i) { >> + for (i = 0; i < enc->cpb_num; ++i) { >> struct rvce_cpb_slot *slot = &enc->cpb_array[i]; >> slot->index = i; >> slot->picture_type = PIPE_H264_ENC_PICTURE_TYPE_SKIP; @@ >-131,6 >> +131,59 @@ static void sort_cpb(struct rvce_encoder *enc) >> } >> >> /** >> + * get number of cpbs based on dpb >> + */ >> +static unsigned get_cpb_num(struct rvce_encoder *enc) { >> + unsigned w = align(enc->base.width, 16) / 16; >> + unsigned h = align(enc->base.height, 16) / 16; >> + unsigned dpb; >> + >> + switch (enc->base.level) { >> + case 10: >> + dpb = 396; >> + break; >> + case 11: >> + dpb = 900; >> + break; >> + case 12: >> + case 13: >> + case 20: >> + dpb = 2376; >> + break; >> + case 21: >> + dpb = 4752; >> + break; >> + case 22: >> + case 30: >> + dpb = 8100; >> + break; >> + case 31: >> + dpb = 18000; >> + break; >> + case 32: >> + dpb = 20480; >> + break; >> + case 40: >> + case 41: >> + dpb = 32768; >> + break; >> + default: >> + case 42: >> + dpb = 34816; >> + break; >> + case 50: >> + dpb = 110400; >> + break; >> + case 51: >> + dpb = 184320; >> + break; >> + } >> + >> + return MIN2(dpb / (w * h), 16); >> +} >> + >> +/** >> * destroy this video encoder >> */ >> static void rvce_destroy(struct pipe_video_codec *encoder) @@ >> -327,18 +380,19 @@ struct pipe_video_codec *rvce_create_encoder(struct >pipe_context *context, >> goto error; >> } >> >> + enc->cpb_num = get_cpb_num(enc); > >Please add an error check here that we don't have zero CPBs, that can happen if >the user specifies an invalid level for the given resolution. >In this case a "goto error" should probably be sufficient. > >With that fixed the series is Reviewed-by: Christian König ><christian.koe...@amd.com> > >Leave me a note if your account is already activated or if I should commit >them, >Christian. > >> get_buffer(((struct vl_video_buffer *)tmp_buf)->resources[0], NULL, >&tmp_surf); >> cpb_size = align(tmp_surf->level[0].pitch_bytes, 128); >> cpb_size = cpb_size * align(tmp_surf->npix_y, 16); >> cpb_size = cpb_size * 3 / 2; >> - cpb_size = cpb_size * RVCE_NUM_CPB_FRAMES; >> + cpb_size = cpb_size * enc->cpb_num; >> tmp_buf->destroy(tmp_buf); >> if (!rvid_create_buffer(enc->ws, &enc->cpb, cpb_size, >RADEON_DOMAIN_VRAM)) { >> RVID_ERR("Can't create CPB buffer.\n"); >> goto error; >> } >> >> - enc->cpb_array = CALLOC(RVCE_NUM_CPB_FRAMES, sizeof(struct >rvce_cpb_slot)); >> + enc->cpb_array = CALLOC(enc->cpb_num, sizeof(struct rvce_cpb_slot)); >> if (!enc->cpb_array) >> goto error; >> >> diff --git a/src/gallium/drivers/radeon/radeon_vce.h >> b/src/gallium/drivers/radeon/radeon_vce.h >> index 7cc87be..f1dea8a 100644 >> --- a/src/gallium/drivers/radeon/radeon_vce.h >> +++ b/src/gallium/drivers/radeon/radeon_vce.h >> @@ -45,8 +45,6 @@ >> #define RVCE_READWRITE(buf, domain) RVCE_CS(RVCE_RELOC(buf, >RADEON_USAGE_READWRITE, domain) * 4) >> #define RVCE_END() *begin = (&enc->cs->buf[enc->cs->cdw] - begin) * >> 4; } >> >> -#define RVCE_NUM_CPB_FRAMES 3 >> - >> struct r600_common_screen; >> >> /* driver dependent callback */ >> @@ -96,6 +94,7 @@ struct rvce_encoder { >> >> struct rvce_cpb_slot *cpb_array; >> struct list_head cpb_slots; >> + unsigned cpb_num; >> >> struct rvid_buffer *fb; >> struct rvid_buffer cpb; _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev